我不明白如何分割 IP 数据报。
假设原始数据报的总大小为 302(20 字节报头和 282 字节有效负载)。我的数据报需要分段,因为它要经过 128MTU 的网络。我必须对其进行分段,并为每个新分段添加 20 个报头。
这是一个练习,答案是
片段 1 总长度 124(104 字节有效载荷)
片段 2 总长度 124(有效载荷 104 字节)
片段 3 总长度 94(74 字节有效载荷)
如果我补充一点,它确实给了我原始有效载荷。我不明白如何找到这些数字...
为什么不能
- 片段 1 总长度 114(94 字节有效载荷)
- 片段 2 总长度 114(94 字节有效载荷)
- 片段 3 总长度 114(94 字节有效载荷)
(282/3) > 2 所以我需要 3 个片段。3Fragments = 60 字节标头添加 60 +282 = 342 342/3 = 114 每个片段的总长度。
我的问题是......
我为什么以及怎样才能得到 124 124 和 94?
答案1
您应该假设除最后一个片段之外的所有片段都将与网络允许的一样大。
您可以通过取 MTU、减去 20、除以 8、丢弃小数部分,然后乘以 8 来获取最大片段有效负载大小。这是可行的,因为每个数据包都需要一个 20 字节的标头,并且每个数据包(但最后一个)必须包含有效负载长度为 8 的倍数。
128-20 = 108
108/8 = 13.5
13 * 8 = 104
因此,对于 MTU 为 128 的情况,最大有效载荷大小为 104。让我们看看需要发送 302 字节的有效载荷需要多少个数据包:
302/104=2.903
因此我们需要两个最大尺寸的包和一个剩余的包。我们剩下多少包?
302-(2*104)=94
因此最后一个数据包中有 94 字节的数据。
您可以通过将有效载荷大小加上 20 来获得总长度。