如何创建 TCP 段或 IP 数据包或片段与 TCP Windows 之间的映射?

网络工程 tcp IPv6 碎片化
2022-02-17 03:58:01

我正在寻找一种方法,在发送和接收它们时,我实际上如何确定 TCP 窗口中的段?

我想修改每个 TCP 窗口的 IP 数据包。

我已经查看了 IP 和 TCP 标头定义,使用 Wireshark 查看了 TCP/IP 数据包并搜索了 python 库,但没有找到相关工作。

如何创建 TCP 段或 IP 数据包或片段与 TCP Windows 之间的映射?

我认为有关窗口开始段和结束段的知识可能会解决问题。

我很欣赏任何有助于确定要做什么的答案,包括理论方法。

系统是使用 IPv6 的 Linux,但首选通用答案。

2个回答

如何确定 TCP 窗口中不同的 TCP 段或 IP 数据包或片段?

每个段都在一个单独的 IP 数据包中发送。一旦在接收缓冲区(或窗口,如果您愿意)内开始重新组装原始流,您就无法再确定哪些数据进入了哪个段。

虽然段仍在传输中,但您可以通过 TCP 标头序列号字段看到数据流对齐。

我不确定我是否了解这里的最终目标,但从技术上讲,有一种方法可以实现您正在寻找的东西。为了做到这一点,您需要捕获 TCP 对话的开始,因为这是在三次握手期间商定参数的唯一地方。这些参数对于 TCP 窗口非常重要(这是了解窗口大小、是否支持 SACK、缩放因子等的唯一方法))。使用 Wireshark 和 LUA,您可以编写您想要的脚本,基本上您需要将发送方发送的所有字节分解为一个窗口大小并相应地标记它们(作为滚动窗口)。使用 Wireshark 的另一个 optino 是“飞行中的字节”,它在某种程度上是类似的(它会为您提供发送者已发送但尚未确认的字节)。同样,我不确定您想对 IP 数据包进行哪些更改,但也许如果您分享更多有关您的最终目标的信息 - 我们可以提供一些额外的指导