IPv4报文格式和IP分片及计算详解
IPv4报文格式和IP分片及计算详解
IPv4报文格式和IP分片是计算机网络中的重要概念,本文将详细介绍这两个方面的知识。
1. IPv4报文格式
IPv4报文格式由多个字段组成,每个字段都有其特定的含义和作用:
版本:占用4位,用于标识IP协议的版本。对于IPv4,该字段的值为0100(即4);对于IPv6,该字段的值为0110(即6)。
头部长度(IHL):占用4位,表示IP头部的长度。最小值为5,最大值为15,单位为4字节。IPv6的头部长度固定为40字节。
区分服务(TOS):占用8位,用于区分服务类型,即QoS(服务质量)字段,表示数据包的优先级。
总长度字段:占用16位,表示IPv4数据报的总长度,最大值为65535字节(2的16次方)。
标识:占用16位,用于标识主机发送的IP报文序号,每发送一次加1。
生存期(TTL):占用8位,用于设置数据包可经过的路由器数量的上限,每经过一台路由器减1(范围:0~255)。IPv6中对应的字段是“跳数限制”(Hop Limit)。
协议字段:占用8位,包含一个数字,标识数据报有效载荷部分的数据类型。最常用的值为1(ICMP)、17(UDP)和6(TCP)。
头部校验和:占用16位,用于计算IPv4头部的校验和,不检查数据有效载荷部分的正确性。当TTL减一时,头部校验和必须重新计算。IPv6没有首部校验和字段。
IPv4报文的最大长度是65535字节,其中数据部分最大为65515字节,头部为20字节。
2. IP分片及计算
在实际网络传输中,数据包的大小可能超过下层数据链路层的MTU(最大传输单元)。当这种情况发生时,就需要对数据包进行分片处理。
最大传输单元(MTU):表示数据链路层能够接受的最大数据包大小。例如,以太网的MTU通常为1500字节。
片偏移:占用13位,表示较长的分组在分片后,某片在原分组中的相对位置。相对于用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位,这意味着每个分片的长度一定是8字节的整数倍。
标志字段:最低位记为MF(More Fragments)。MF=1表示后面还有分片的数据报;MF=0表示这是数据报片中的最后一个。
分片计算示例
假设以太网发送一个IP分组,长度为3000字节(包含数据2980字节+20字节头部),发送IP分组(MTU=1500字节),则发送需要分成几片?
总长度 | 数据 | 头部 | 剩余 | 偏移量offset | MF |
---|---|---|---|---|---|
3000 | 2980 | 20 | 0 | ||
1500 | 1480 | 20 | 1500 | 0 | 1 |
1500 | 1480 | 20 | 20 | 1480/8=185 | 1 |
40 | 20 | 20 | 0 | 2960/8=370 | 0 |
所以总计需要分三次,最后一片的偏移量为370。
假设以太网发送一个IP分组,长度为4000字节(包含数据3980字节+20字节头部),发送IP分组(MTU=1500字节),则发送需要分成几片?
总长度 | 数据 | 头部 | 剩余 | 偏移量offset | MF |
---|---|---|---|---|---|
4000 | 3980 | 20 | 0 | ||
1500 | 1480 | 20 | 2500 | 0 | 1 |
1500 | 1480 | 20 | 1020 | 1480/8=185 | 1 |
1040 | 1020 | 20 | 0 | 2960/8=370 | 0 |
所以总计需要分三次,最后一片的偏移量为370。
假设以太网发送一个IP分组,长度为1500字节(包含数据1480字节+20字节头部),发送IP分组(MTU=1024字节),则发送需要分成几片?
总长度 | 数据 | 头部 | 剩余 | 偏移量offset | MF |
---|---|---|---|---|---|
1500 | 1480 | 20 | 0 | ||
1024 | 1000 | 20 | 480 | 0 | 1 |
500 | 480 | 20 | 0 | 1000/8=125 | 0 |
所以总计需要分两次,最后一片的偏移量为125。
需要注意的是,在计算偏移量时,应将剩余数据量除以8而不是除以20(头部长度)。