0

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

4

1 回答 1

0

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

“不要分段”位是 IP 位。您看到的数据包分段位于 TCP 层;该分段与发生在 IP 层的分段完全分开。

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

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

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

于 2014-11-09T20:25:29.077 回答