我正在使用libpcap
编写一个小型应用程序,在此我解析/分析基于TCP
的应用程序。我遇到了一种情况,应用程序尝试发送大量数据,例如64K,TCP
层将其分割为多个较小的段。
现在,我的问题是-我如何真正分辨从pcap
读取的数据包的TCP有效负载实际上是较大有效负载的一部分。因此,为了访问原始的大有效负载,需要重新组合多个段。
TCP头具有序列字段,但我不完全了解它如何回答我的问题。
此外,IP标头具有total_length
字段,但与TCP分段无关,它指示current数据包的IP有效负载大小。
希望得到一些提示。谢谢。
TCP无法在这里为您提供帮助,因为它既不知道也不在乎什么是PDU。您需要实现定义“大PDU”的协议。例如,如果这是HTTP over TCP,则实现HTTP协议将告诉您该段是否是大型PDU的一部分。
因为我的问题是-我怎么知道我有一小段必须重新组装成大包。
这就是消息协议的目的。例如,如果消息协议说PDU是“一系列不包含以换行符结尾的换行符的字符”,则如果您没有换行符,则知道它是较大PDU的一部分。
PDU的概念适用于消息协议,因此,如果您在谈论PDU,则必须具有消息协议。消息协议将告诉您何时具有完整的PDU。这就是它的目的。