版本(号):规定IP协议版本(IPv4或IPv6)
首部长度:大多数IP数据包不含选项字段,因此首部长多为20字节
服务类型(TOS):定义上层协议对处理当前数据报所期望的服务质量(如分配优先级、延迟、吞吐量以及可靠性等)。前3位是优先位,后面4位是服务类型,最后1位没有定义
总长度:首部加上数据所占的字节数
标识、标志、片偏移:用于IP分片
生存时间(TTL):数据包每经一台路由器处理,TTL减1,当其为0时将被丢弃
协议:指示该IP数据报的数据部分应交给哪个特定的传输层协议,例如:值为6表示交给TCP,值为17表示交给UDP
首部校验和:帮助路由器检测收到的IP数据报中的比特错误
源和目的IP地址:通常源主机通过DNS查找来决定目的地址
一个链路层帧能承载的最大数据量叫做最大传送单元(MTU),它限制了IP数据报的的长度,以太网的 MTU 是 1500。如果 IP 层有数据包要传,而且数据包的长度超过了 MTU,那么 IP 层就要对数据包进行分片(fragmentation)操作,使每一片的长度都小于或等于 MTU,最后目的主机将分片进行重组
IP 报文的首部包含了分片和重组所需的信息:
Identification:也即(1)中提到的标识字段,每个数据报的标识字段是唯一的,当某个大数据报被分片时,每个分片具有与之相同的标识字段,以标识它们是同一个大数据报分片得到的
3位的标志字段包括:
R:保留未用
DF(Don't Fragment):“不分片”位,如果将这一比特置 1 ,IP 层将不对数据报进行分片
MF(More Fragment): “更多的片”,除了最后一片置0,其他每个组成数据报的片都要把该比特置1
Fragment Offset:也即(1)中提到的片偏移字段,指示该片的首字节在原始数据包中的字节位置,实际位置 = 该值 * 8
注意:当数据报被分片后,每个片的总长度值要改为该片的长度值
可以看到各个字段的值:
版本号(Version):4
首部长度(Header Length):20 bytes
数据报长度(Total Length):568 bytes
标识(Identification):0x0959(2393)
R位(Reserved bit):Not set
DF位(Don't Fragment):1,表示该数据报不会再分片
MF位(More Fragment):0,表示该数据报是某个大数据报的最后一个分片
片偏移(Fragment offset): 370
生存时间(Time to live):242
协议(Protocol):ICMP
首部校验和(Header Checksum):0x224c
源IP地址:128.59.23.100
目的IP地址: 192.168.1.102
在IP数据报后面还给出了具体分片情况,和数据报给出的信息相吻合(如第三个分片长548字节,数据报长度长568字节,刚好是加上头部20字节的长度)
综上可知:我们抓到的这个包是某个原始数据包的最后一个分片,该原始数据报被分成3个片
版本(号)
流量类别:相当于 IPv4 协议中的 TOS 字段
流标签:没有流标签时,路由器会根据五元组选择路由,而五元组中涉及到传输层的端口号,所以路由器必须要看到传输层的报头,加了流标签字段,路由器便可以根据源IP+流标签来确定一条流,只需看到网络层报头即可
有效载荷长度: 报文数据部分的长度,注意不包含报头(IPv6协议取消了选项字段,因此报头长固定为20bytes)
下一报头:相当于 IPv4 协议中的 Protocol 字段
跳数限制:相当于 IPv4 协议中的 TTL 字段
源和目的IP地址:注意到 IPv6 中这两个字段是128位