【问题标题】:Which network layer is in charge of reassembling fragmented datagrams?哪个网络层负责重组分片的数据报?
【发布时间】:2014-10-27 05:07:51
【问题描述】:

最近我对网络协议和 OSI 模型进行了更深入的研究,当我注意到传入的 TCP 数据报(如果这是错误的术语,请纠正我)在超过一定大小时被分成几个部分 -在这种情况下,它可能是我路由器的 MTU。我使用 SharpPcap 捕获了这些数据报,以便提取我正在寻找的一些信息,如果您想知道我从哪里得到这些信息。

无论如何,我想知道碎片数据包的重组是否不应该是 IP 层的任务,因为它确实提供了完成此任务的信息(id、碎片标志、碎片偏移)。此外,我读到,TCP 层将被解释为基于流的协议。但这实际上意味着,由 TCP 层负责以正确方式填充应用程序的缓冲区,以便重建初始信息片段并可以“向上刷新” em>" 所有其他层。

在我做出这个观察之前,我实际上认为,TCP 层应该关心重新组装这些数据报,但没有提到的层...

这会导致以下问题: 为什么我收到的 TCP 数据报没有重新组合以及实际上应该由哪一层来处理这个问题?

【问题讨论】:

  • 正确的术语是“IP 数据包”或“TCP 段”,具体取决于您所谈论的内容。 “数据报”是一个 UDP 术语。

标签: networking tcp ip network-protocols sharppcap


【解决方案1】:

ip 层处理分片和重组,http://en.wikipedia.org/wiki/IP_fragmentation

当您使用 SharpPcap 等使用 winpcap/airpcap/libpcap 的工具时,您会从正在捕获的设备接收原始数据报。对于许多适配器来说,这是一个以太网数据报,然后包含一个 IP 帧等。

这与网络堆栈处理后接收的数据形成对比,后者执行重组。

因此,预计您不会从 SharpPcap(或许多其他捕获库)获得重新组装的数据报,因为数据是在适配器级别捕获的,而不是在我们内部作为执行重组的网络堆栈的输出.

您可以在自己捕获或使用提供此功能的库后执行重组。您还可以将这样的组件添加到 Packet.Net(SharpPcap 正在使用的数据包处理库)来提供这种重组。

【讨论】:

  • 此答案中的第一个陈述不正确。接收主机(目的地)处理重组。根据您的参考:The fragments are reassembled by the receiving host. 根据其他参考:When an IP datagram is fragmented, it is not reassembled until it reaches its final destination. (pcvr.nl/tcpip/udp_user.htm) 只是想为其他人澄清一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 2014-01-02
  • 2016-02-12
相关资源
最近更新 更多