我正在将数据包段分成两部分。我能够在wireshark中看到它作为tcp重新组装。在google上搜索后我发现了不会为碎片数据设置碎片位。但即使是碎片化数据也没有设置。我正在使用java jnetpcap库来获取数据包,但我无法弄清楚我应该等待重新组装tcp数据包的哪些字段和标志。如果我在VM上运行但有时它的碎片有时候数据包会立即出现.i需要一种方法来计算重新组装数据包。
答案 0 :(得分:0)
在协议中的许多时间段都可能发生碎片。它可以在IP中发生,IP数据报被分段为多个IP数据报,并且可以在TCP上运行的协议中发生。
"不要片段" bit是IP位。您正在查看的数据包分段位于TCP层;该分段与IP层发生的碎片完全分开。
在数据包分析程序中,IP重组非常容易;片段的IP协议头中提供了重组片段所需的所有数据。
TCP重组 NOT 很容易做到。抽象TCP提供给在TCP之上运行的协议是一个八位字节(字节)的顺序流;没有数据包边界。通过TCP发送的数据包或其他多字节结构可以随意分解为数据包中任何一点的TCP段。
这意味着数据包分析程序中的TCP重组要求理解TCP段的代码和理解在TCP上运行的协议的代码进行协作。例如,请参阅Wireshark的tcp_dissect_pdus()
文件中的packet-tcp.c
例程,以及req_resp_hdrs.c
文件中的代码。