了解 IP 重组过程的工作原理

网络工程 IPv4 ip 碎片化
2022-02-16 17:56:00

我正在尝试很好地理解 IP 分段和重组过程。我在 Internet 上找到了这个示例,我想这对理解该主题很有用。

假设某台计算机收到以下数据报序列(英文的列是:Source IP address, ID, MF, DF, Offset, Total Length, Protocol):

在此处输入图像描述

我相信发送了 5 个原始的未分段数据报:

  1. ID 454,IP 48.143.25.12(条目 1、2、7)
  2. ID 630,IP 245.36.22.141(条目 6、11、13)
  3. ID 43,IP 212.203.92.105(条目 3、4、5、8)
  4. ID 44,IP 212.203.92.105(条目 10、12)
  5. ID 43,IP 93.46.25.4(条目 9)

我的分析如下:

  1. 我认为这个数据报的第二个片段丢失了,所以会被丢弃(偏移量最小的片段的偏移量是368*8 = 2944字节,但是第一个片段只有1472字节的数据,所以中间有东西丢失了)。
  2. 这个数据报被正确地重新组装,因为所有三个片段都被接收并且偏移量被分类。完整的数据报将按顺序使用片段 6、11 和 13 重新组装。
  3. 这个数据报也被丢弃了,因为至少有两个分片丢失(没有MF = 0的分片,也没有偏移量= 184的分片,所以第二个也丢失了)。
  4. 这个按顺序正确地重新组装,使用片段 10 和 12。
  5. 只收到一个片段,并且它有偏移量,所以第一个片段丢失了,数据报将被丢弃。

所以我有三个问题:

  • 上面的分析是否正确?你有什么可以发现的错误吗?
  • 我注意到在收到的第 5 个片段中,总长度小于其余片段(并且不是最后一个片段),所以我相信片段发生在路径的中间。在这种情况下,重组过程将如何工作?我不确定偏移字段是什么,因为现在会有子分段数据报,这让我很困惑。
  • 计算机的 IP 级别会将收到的信息传递给 UDP 级别。在那些片段丢失的情况下,IP层是负责丢弃与同一个不完整数据报相关的片段,还是将这个信息传递给UDP层而这是丢弃它们的层?
1个回答

你有他们都正确

第 5 个分片:记住路由器可以随时更改其设置,分片限制可以从一个数据包更改为下一个数据包。当您对已经分段的数据包进行分段时,您通常会看到如下内容:

  • 原始发送(例如)4001字节数据包
  • 通过将其分成三部分的东西:2000、2000、1。
  • 通过将其分成5:1600、400、1600、400、1的东西。

这种大-小-大-小是碎片化碎片的特征。通常重组只在最终主机或执行安全或 NAT 的主机上进行。(请注意,这些片段可以覆盖其他片段,这会带来一些安全隐患。我相信大多数当前的 IP 堆栈都会丢弃这些有趣的片段数据包。)

IP层丢弃坏包,或者发送ICMP问题报告。它永远不会到达 UDP 处理层。

我确实建议阅读关于分段和重组的 RFC 791。 https://www.rfc-editor.org/rfc/rfc791

PS。您的示例表有一些假设:20 字节的标头,并且所有这些数据包都具有相同的目标地址。