0

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

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

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

这导致了以下问题: 为什么我收到的 TCP 数据报没有重新组合什么层应该真正关心这个?

4

1 回答 1

1

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

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

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

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

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

于 2014-09-02T21:48:49.820 回答