如何判断当前 TCP 段是否是大型 PDU 的一部分
How can I tell if the current TCP segment is part of a large PDU
我正在使用 libpcap
编写一个小型应用程序,其中我 parse/analyze 是一个基于 TCP
的应用程序。我遇到过这样一种情况,应用程序试图发送大量数据,比如 64K,TCP
层将其切成许多较小的段。
现在,我的问题是——我如何真正判断从 pcap
读取的数据包的 TCP 负载实际上是更大负载的一部分。因此,为了访问原始的大负载,段数需要 re-assembled.
TCP header 有序列字段,但我不完全明白它如何回答我的问题。
另外,IP header有total_length
字段,但它与TCP分段无关,它表示当前数据包的IP负载大小.
如果能得到一些提示,我将不胜感激。谢谢。
TCP 在这里帮不了你,因为它既不知道也不关心 PDU 是什么。您需要实施定义 "large PDU" 是什么的任何协议。例如,如果这是基于 TCP 的 HTTP,实施 HTTP 协议将告诉您该段是否是大型 PDU 的一部分。
Because my question was - how do I tell that I have a small segment that has to be reassembled in a large packet.
这就是消息协议的用途。例如,如果消息协议表明 PDU 是 "series of characters not containing a newline character terminated by a newline character",那么如果您没有换行符,您就知道它是更大 PDU 的一部分。
PDU 的概念适用于消息协议,因此如果您在谈论 PDU,则必须有消息协议。当您拥有完整的 PDU 时,消息协议会告诉您。这就是它的目的。
我正在使用 libpcap
编写一个小型应用程序,其中我 parse/analyze 是一个基于 TCP
的应用程序。我遇到过这样一种情况,应用程序试图发送大量数据,比如 64K,TCP
层将其切成许多较小的段。
现在,我的问题是——我如何真正判断从 pcap
读取的数据包的 TCP 负载实际上是更大负载的一部分。因此,为了访问原始的大负载,段数需要 re-assembled.
TCP header 有序列字段,但我不完全明白它如何回答我的问题。
另外,IP header有total_length
字段,但它与TCP分段无关,它表示当前数据包的IP负载大小.
如果能得到一些提示,我将不胜感激。谢谢。
TCP 在这里帮不了你,因为它既不知道也不关心 PDU 是什么。您需要实施定义 "large PDU" 是什么的任何协议。例如,如果这是基于 TCP 的 HTTP,实施 HTTP 协议将告诉您该段是否是大型 PDU 的一部分。
Because my question was - how do I tell that I have a small segment that has to be reassembled in a large packet.
这就是消息协议的用途。例如,如果消息协议表明 PDU 是 "series of characters not containing a newline character terminated by a newline character",那么如果您没有换行符,您就知道它是更大 PDU 的一部分。
PDU 的概念适用于消息协议,因此如果您在谈论 PDU,则必须有消息协议。当您拥有完整的 PDU 时,消息协议会告诉您。这就是它的目的。