哪个网络层负责重新组合碎片数据报?

时间:2014-09-02 20:24:42

标签: networking tcp ip network-protocols sharppcap

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

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

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

这导致以下问题: 为什么我收到的TCP数据报没有重新组装实际上应该关注哪个层?

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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