IPV4报文格式详解与IP分片计算实例
IPV4报文格式详解与IP分片计算实例
IPV4报文格式
IPV4报文格式由多个字段组成,每个字段都有其特定的功能:
版本:占用4位,用于标识IP协议的版本。对于IPV4,其值为0100(即4);对于IPV6,其值为0110(即6)。
头部长度(IHL):最小值是5,最大值为15,单位是4字节。这意味着IPV4头部的长度范围是20到60字节。IPV6的头部长度是固定的40字节。
TOS(Type of Service):用于区分服务类型,即QoS(Quality of Service)字段,表示数据包的优先级。
总长度字段:表示整个IP数据报的长度,以字节为单位。
标识:主机发送IP报文的序号,每发送一次加1。
生存期(TTL):用于设置一个数据包可经过的路由器数量的上限,每经过一台路由器减1(范围:0~255)。在IPV6中,这个字段被替换为"心跳限制"(hop limit)。
协议字段:包含一个数字,标识数据报有效载荷部分的数据类型。最常用的值为1(ICMP)、17(UDP)和6(TCP)。
头部校验和:仅计算IPv4头部,不检查数据有效载荷部分的正确性。当TTL减一时,头部校验和必须重新计算。需要注意的是,IPV6没有首部校验和。
IPV4报文的最大长度是65535字节,即2的16次方。这包括数据部分的65515字节和头部的20字节。
IP分片及计算
IP分片是将一个较大的IP数据包分割成多个较小的数据包,以便在网络中传输。以下是IP分片的相关概念和计算方法:
最大传输单元(MTU):用来通知对方所能接受数据服务单元的最大尺寸,说明发送方能够接受的有效载荷大小。以太网的MTU通常是1500字节。
片偏移:占13位,用于表示较长的分组在分片后,某片在原分组中的相对位置。相对于用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位,这意味着每个分片的长度一定是8字节的整数倍。
标志字段:最低位记为MF(More Fragments)。MF=1表示后面“还有分片”的数据报;MF=0表示这是数据报片中的最后一个。
IP分片计算实例
情况1:IP分组长度为3000字节
总长度 | 数据 | 头 | 剩余 | 偏移量offset | MF |
---|---|---|---|---|---|
3000 | 2980 | 20 | |||
1500 | 1480 | 20 | 1500 | 0 | 1 |
1500 | 1480 | 20 | 20 | 185 | 1 |
40 | 20 | 20 | 370 | 0 |
总计需要分三次,最后一片的偏移量为370。
情况2:IP分组长度为4000字节
总长度 | 数据 | 头 | 剩余 | 偏移量offset | MF |
---|---|---|---|---|---|
4000 | 3980 | 20 | |||
1500 | 1480 | 20 | 2500 | 0 | 1 |
1500 | 1480 | 20 | 1020 | 185 | 1 |
1040 | 1020 | 20 | 370 | 0 |
总计需要分三次,最后一片的偏移量为370。
情况3:IP分组长度为1500字节,MTU为1024字节
总长度 | 数据 | 头 | 剩余 | 偏移量offset | MF |
---|---|---|---|---|---|
1500 | 1480 | 20 | |||
1024 | 1000 | 20 | 480 | 0 | 1 |
500 | 480 | 20 | 125 | 0 |
总计需要分两次,最后一片的偏移量为125。