【发布时间】:2020-06-18 09:17:41
【问题描述】:
测试 IP 数据包是否为片段的正确方法是什么?
目前我只查看 IPv4 标头中的MF(更多片段)位。够了吗?
【问题讨论】:
-
我不明白问题上的 TCP 标签。 TCP 与 IPv4 数据包分片无关。如果 IPv4 对数据包进行分段,TCP 完全不知道,因为数据包在 TCP 接收之前重新组装。不要将 TCP 分段与 IPv4 分段混淆,因为它们是两个完全独立且不相关的东西。
-
@RonMaupin,感谢您的纠正,我修复了标签。
-
@RonMaupin,如果我处理 PCAP 文件(这意味着它们可能并且可能会被 IP 分段和 TCP 分段,数据包可能是无序的、重复的等),是吗?意思是我应该: a) 重新组装 IP 片段; b) 重新组装 TCP 段?
-
TCP 不分段。 TCP 是一种对流进行分段的流协议,这与 IPv4 分片完全不同。 IPv4 将获得一个 TCP 段,并将其转发,而对 TCP 或其分段一无所知。如果路径中的 MTU 缩小,如果没有设置 DF 标志,IPv4 数据包将被分片。 TCP对此一无所知。目标 IPv4 将在发送到 TCP 之前重新组装数据包片段,因此 TCP 对 IPv4 分片一无所知。 IPv4 在 TCP 之间进行分段和重组。
-
我无法准确解释诸如此类的应用程序是如何做事的(大多数 IDS 是专有的,不会透露事情是如何完成的),但是如果您在第 3 层以下捕获,则需要重新组装数据包片段首先获取分段,然后重新组装分段。在 IPv6 中,没有路径分段,但可以使用分段扩展标头进行预分段。现代网络大多使用 PMTUD 来防止路径碎片(IPv6 的要求),TCP 可以使用它来正确设置 MSS 以完全防止预碎片。
标签: networking ip ipv4 ip-fragmentation