networking - 如何判断当前 TCP 段是否是大型 PDU 的一部分
问题描述
我正在使用 编写一个小型应用程序libpcap
,我在其中解析/分析TCP
基于应用程序的应用程序。我遇到了这样一种情况,应用程序尝试发送大量数据,比如 64K,然后TCP
层将其切割成许多较小的段。
现在,我的问题是——我如何真正判断从 读取的数据包的 TCP 有效负载pcap
实际上是更大有效负载的一部分。因此,为了访问原始的大型有效载荷,需要重新组装多个段。
TCP 标头具有序列字段,但我不完全理解它如何回答我的问题。
另外,IP 头有total_length
字段,但它与 TCP 分段无关,它表示当前数据包的 IP 有效负载大小。
我很高兴得到一些提示。谢谢。
解决方案
TCP 在这里帮不了你,因为它既不知道也不关心 PDU 是什么。您需要实现任何定义“大型 PDU”的协议。例如,如果这是基于 TCP 的 HTTP,则实现 HTTP 协议将告诉您该段是否是大型 PDU 的一部分。
因为我的问题是——我怎么知道我有一个小段必须重新组装成一个大包。
这就是消息协议的用途。例如,如果消息协议说 PDU 是“一系列不包含由换行符终止的换行符的字符”,那么如果您没有换行符,您就知道它是更大 PDU 的一部分。
PDU 的概念适用于消息协议,所以如果你在谈论 PDU,你必须有一个消息协议。当您拥有一个完整的 PDU 时,消息协议会告诉您。这就是它的目的。
推荐阅读
- sql - Python sqlite3 SQL查询获取具有最新日期但每个唯一列限制的所有条目
- python - 使用python,Ubuntu OS从脚本调用命令行
- lotus-notes - 如何在 domino Designer 现有应用程序中开发的 Lotus Notes 客户端中安装功能?
- json - jq - 如何创建包含双引号环绕字段值的输出
- python-3.x - 将标签转换为 one-hot 编码
- python - #Python CodeBreaker 在 Python 中
- pine-script - Pine 脚本 - 收盘价,深井
- c# - 使用 LocalDB 数据库部署 C# 应用程序
- java - Android Studio中的网格视图图像显示错误
- python - 可以使用通用视图“ListView”获取一些具体数据吗?