IP数据报格式
首部
- 版本:IPv4/IPv6
- 首部长度:单位是4B,最小为5。也就是说如果首部长度的四个bit的出来的数是8,那么首部长度就是8 * 4B = 32B也就是32字节
- 区分服务:指示期望获得哪种类型的服务
- 总长度:首部+数据,单位是Byte
- 生存时间(TTL):IP分组的保质期。经过一个路由器-1,变成0则丢弃。
- 协议:数据部分的协议
- 首部检验和:只检验首部
- 源IP地址和目的IP地址:32位
- 可选字段:0~40B,用来支持排错,测量以及安全等措施。
- 填充:全0,把首部补成4B的整数倍。
IP数据报分片
最大传送单元MTU
链路层数据帧可封装数据的上限。
以太网的MTU是1500字节。
如果所传送的数据报长度超过某链路的MTU值,就需要把数据报进行分片。
分片相关数据
回顾IP数据报首部:
其中标识,标志,片偏移就是用来分片的:
- 标识: 同一数据报的分片使用同一标识。
- 标志:有三位,只有两位有意义。中间位DF(Don't Fragment):DF = 1,禁止分片。DF = 0,允许分片。最低位MF(More Fragment):MF = 1,后面“还有分片”,MF = 0,代表最后一片/没分片。
- 片偏移:指出较长分组分片后,某片在原分组中的相对位置。以8B为单位。也就是说假如片偏移的数据大小是10,那么就是10 * 8B,80字节偏移。除了最后一个分片,每个分片长度一定是8B的整数倍。
以下是片偏移举例:
需要分片为长度不超过1420B的数据报片,形成以下三个分片:
那么第一个数据报片片偏移量就是0,第二个就是1400,第三个就是2800。所以三个数据报片的片偏移数据分别为0 / 8 = 0, 1400 / 8 = 175,2800 / 8 = 350