一般IP数据报首部为20byte,即160bit(“一般”指不带选项的首部)
依顺序各个位置含义如下:
• 4bit:协议版本号,目前广泛使用的为IPv4
• 4bit:首部长度除以32(单位为bit),如160bit是32bit的5倍,则为5
• 8bit:服务类型(TOS),通过特定的数值来表明需要何种服务,控制最小时延、最大吞吐量等,
• 16bit:数据报总长度,16bit意味着最大长度可以达到65535bit,注意这里指的是IP数据报,并不包括以太网首部或以太网尾部的长度
• 16bit:用于标识发送的报文,通常每发送一份报文该处加一
• 3bit:标志位,第一位为为保留位,第二位为DF(don’t fragment) ,为1指没有分片,第三位为MF(more fragment),为1指有分片(因为数据报最大传输长度的限制,如果有极大的数据报,则需要分开传输,即分片)
• 13bit:分片的偏移量
• 8bit:TTL(time to live),每经过一个路由器该值减一,如果一个路由器收到该值为零的数据报,路由器丢弃该报文,并发送ICMP报文给源主机
• 8bit:用于标识上层协议
• 16bit:首部检验和。
• 32bit:源IP地址
• 32bit:目的IP地址
如有选项,选项的长度需为32bit的倍数,必要时用0填充
以下图为例,只保留了IP数据报首部信息(WireShark)
图中用的是十六进制,按数据报首部格式逐个分析,可以发现
0x4 IP协议版本号为4
0x5 首部长度为32bit*5=160bit
0x00 服务类型为0x00
0x00 29 数据报总长度为41字节
0xcd b3 数据报标识,52659
0x40 00 标志位和偏移,即0100 0000 0000 0000,DF位为1,没有分片传输,偏移量为0
0x80 TTL ,128
0x06 标识上层协议,这里指TCP
0x00 00 首部检验和
0xc0 a8 1f 31 源IP地址, 192.168.31.49
0x8b e0 d6 e2 目地IP地址 , 139.224.214.226
参考 《TCP/IP详解,卷一:协议》
参考 《计算机网络自顶向下方法》
工具 WireShark