ip数据包片偏移13bit ,为什么以 8 字节为单位
IP 数据包中片偏移字段为 13bit 且以 8 字节为单位,主要是为了在有限的位数内表示足够大的偏移范围,以匹配 IP 数据报的总长度表示范围。具体原因如下:
- 与 IP 数据报总长度字段相匹配:IP 数据报的总长度字段由 16 位表示,能够表示的最大长度为 2^16=65536 字节(64KB)。而片偏移字段只有 13 位,如果以字节为单位,13 位能表示的最大偏移量为 2^13=8192 字节(8KB),无法表示整个 IP 数据报的长度范围。将片偏移的单位设置为 8 字节,13 位就可以表示 8192×8=65536 字节,正好与总长度字段的表示范围相匹配。
- 充分利用字段位数:如果片偏移单位小于 8 字节,例如 4 字节,那么 13 位的片偏移字段就不能表示出 IP 数据报的最大长度;如果片偏移单位大于 8 字节,例如 16 字节,只需要 12 位的片偏移字段就能表示出 IP 数据报的最大长度,这样会导致片偏移字段的一位被浪费。以 8 字节作为偏移单位,能够充分利用 13 位片偏移字段的表示能力。
- 便于分片重组:片偏移用于指示分片在原始 IP 数据报中的位置,除了最后一个分片外,其他分片的数据部分长度必须是 8 的整数倍,这样才能保证后面的 IP 分片拥有一个合适的偏移值,便于接收方正确重组分片。