首页 > 解决方案 > 如何判断当前 TCP 段是否是大型 PDU 的一部分

问题描述

我正在使用 编写一个小型应用程序libpcap,我在其中解析/分析TCP基于应用程序的应用程序。我遇到了这样一种情况,应用程序尝试发送大量数据,比如 64K,然后TCP层将其切割成许多较小的段。

现在,我的问题是——我如何真正判断从 读取的数据包的 TCP 有效负载pcap实际上是更大有效负载的一部分。因此,为了访问原始的大型有效载荷,需要重新组装多个段。

TCP 标头具有序列字段,但我不完全理解它如何回答我的问题。

另外,IP 头有total_length字段,但它与 TCP 分段无关,它表示当前数据包的 IP 有效负载大小。

我很高兴得到一些提示。谢谢。

标签: networkingtcppcap

解决方案


TCP 在这里帮不了你,因为它既不知道也不关心 PDU 是什么。您需要实现任何定义“大型 PDU”的协议。例如,如果这是基于 TCP 的 HTTP,则实现 HTTP 协议将告诉您该段是否是大型 PDU 的一部分。

因为我的问题是——我怎么知道我有一个小段必须重新组装成一个大包。

这就是消息协议的用途。例如,如果消息协议说 PDU 是“一系列不包含由换行符终止的换行符的字符”,那么如果您没有换行符,您就知道它是更大 PDU 的一部分。

PDU 的概念适用于消息协议,所以如果你在谈论 PDU,你必须有一个消息协议。当您拥有一个完整的 PDU 时,消息协议会告诉您。这就是它的目的。


推荐阅读