摘要
- 偏移量 32 表示数据从原始数据报的第 256 字节处开始,而不是从第 32 字节处开始。
- MF=1 的每个分片都必须携带八个八位组的整数倍数据;最后一个分片可以例外。
不是字节编号的偏移量
RFC 791 将 IPv4 Fragment Offset 定义为 13 位字段,单位是八个八位组。接收端把字段值乘以八,才得到数据在原始数据报中的字节起点。因此,32 对应 256。
这是一项位预算上的取舍。13 位可表示 8192 个位置;8192 乘以八得到 65,536 个八位组,覆盖与 16 位 Total Length 相称的数据报范围。低三位没有在线上传输,而是在解码时隐含为零。
被省略的位带来边界条件
后续分片的起点必须仍然能够用八位组单位表示。因此,只要 MF=1,当前分片的数据长度就必须能被八整除。这里计算的是数据部分,不是包括 IPv4 首部在内的 Total Length。
最后一个分片不需要为后续分片提供可编码的起点,所以其数据长度可以不是八的倍数。准确的说法是非最后分片必须满足这个条件,而不是所有分片都必须满足。
起点和终点是两种证据
Fragment Offset 表示当前数据从哪里开始;MF 表示后面是否还有数据。未分片数据报的两个值都是零。第一个分片的偏移量也可以是零,但 MF 为一。最后一个分片可能有非零偏移量,同时 MF 为零。
接收端把偏移量乘以八,再结合数据长度,得到原始数据空间中的字节区间。RFC 815 用已收到的区间和缺失的空洞描述重组过程:新分片可能填满、缩短或分割一个空洞。MF=0 提供最终范围,但只有所有前置区间齐全时才能完成重组。
再次分片仍使用同一坐标
分片再次被分割时,新分片的偏移量仍相对于最初的未分片数据报,而不是相对于上一级分片。这样多个设备可以连续分割,而接收端不必记录分割树。
这个设计说明了紧凑表示的代价:线路上节省了三个位,但发送端必须用对齐的边界保留它们,接收端则要在重组前恢复字节坐标。
来源
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
