tcp重组的问题



我得到分为两部分的数据包段。我可以在wireshark中看到tcp重新组装的过程。在谷歌上搜索后,我发现不要为碎片数据设置碎片位。但即使是碎片数据也没有设置。我正在使用java jnetpcap库来获取数据包,但我不知道应该等待哪些字段和标志来重新组装tcp数据包。有时,如果我在VM上运行,数据包会立即到来,但有时是碎片化的。我需要一种方法来弄清楚重新组装包。

碎片化可能发生在协议的许多后期。它可以发生在IP中,IP数据报被分割成多个IP数据报,也可以发生在TCP上运行的协议中。

"Don't fragment"位是一个IP位。您看到的数据包分段是在TCP层;该分段与发生在IP层的分段完全分离。

IP重组在数据包分析程序中相当容易;重新组装片段所需的所有数据都在片段的IP协议标头中可用。

TCP重组是NOT那样容易做。TCP为运行在TCP之上的协议提供的抽象是八位字节(字节)的有序流;没有数据包边界。通过TCP发送的数据包或其他多字节结构可以在数据包中的任何点任意分解为TCP段。

这意味着数据包分析程序中的TCP重组需要理解TCP段的代码和理解在TCP上运行的协议的代码进行协作。例如,请参见Wireshark的packet-tcp.c文件中的tcp_dissect_pdus()例程及其req_resp_hdrs.c文件中的代码。

最新更新