IP报文字段

Posted 水鱼老王

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IP报文字段相关的知识,希望对你有一定的参考价值。


4位版本号

代表是ipv4, 还是ipv6协议

4位首部长度

代表ip的报文头部长度, 变长的

8位服务类型

就是代表这个ip更注重于什么要求

16位总长度

ip报文的总长度, 最大为2的16次方为64K, 和UDP一样最大长度为64K
但是他们两个有个区别是, UDP不支持自动的拆包和组包
想要实现需要用户自己在应用层实现. 但是ip协议, 支持自动的拆包和组包
下面要介绍的三个字段则是用来辅助拆包和组包的

16位标识, 3位标志, 13位片偏移

这三个字段是用来实现拆包和组包的, 当TCP报文长度超出范围时, 就会进行拆包和组包
下面就来说明一下, 比如我现在有a, b, c, d 四个ip包, 他们是由同一个TCP报文拆解下来的.
16位标识 : 代表这几个包是属于同一个数据报的吗, 如果16位标识都相同, 那么就代表属于同一个报文中的.
13位位偏移 : 按照偏移量的大小, 来确认先后的顺序. a的偏移量小于b的偏移量, b小于c, c小于d . 那么先后的顺序就是 a, b, c, d 防止"后发先至"
3位标志 : 这个的作用只有一个确认是否到达结尾, 就相当于链表的NULL
比如a:0 > b:0 > c :0 > d : 1
d为1, 代表此处的组装就可以结束了, 因为他是最后一个需要组装的了

8位生存时间TTL

表示一个数据报在网络上能传输多久(代表可用经过几个路由器转发)
初始值一般是64(可配置)
每次进过一个路由器转发, 他的值就会减1如果减到了0, 这个包就认为不可达, 将会被丢弃

8位协议号

8位协议号, 代表你传输层应用的是什么协议
如果是6那么就是TCP, 如果是17那么就是UDP

16位首部检验和

16位首部检验和的作用是用来检测ip报文头部的完整性

32位源IP地址和32位目的IP地址

ip地址其实是一个32位的整形二进制数字, 平常我们写的192.168.0.1, 这种叫做点分十进制, 是为了我们人理解起来方便, 就将每8位二进制, 化成十进制

后面就是一个完整的TCP数据报或者UDP数据报

值得一提的是TCP的总长度在TCP报文的头部并没有提及, 需要配合着IP报文才能算出.
TCP的报文数据长度 = (IP数据报总长度 - IP首部长度) - TCP的报头长度

以上是关于IP报文字段的主要内容,如果未能解决你的问题,请参考以下文章

TCP/IP详解 卷1:协议—ICMP:Internet控制报文协议

TCP/IP详解 卷1:协议—ICMP:Internet控制报文协议

TCP/IP详解 卷1:协议—ICMP:Internet控制报文协议

IP报文中的TTL字段,专门用来描述报文的生命周期,其最大值是

IPv4如何实现IP报文的分片和重组

ICMP:Internet控制报文协议