例如,给定一个 Wireshark 跟踪,我如何确定我发送的 IP 片段本身是被分段的?
例如,如果我正在发送 1500 字节的 IP 片段,而服务器正在响应 1460 字节的片段,这是否是一个相当好的指标,表明某处的某个链接正在进一步分割我的数据包?
例如,给定一个 Wireshark 跟踪,我如何确定我发送的 IP 片段本身是被分段的?
例如,如果我正在发送 1500 字节的 IP 片段,而服务器正在响应 1460 字节的片段,这是否是一个相当好的指标,表明某处的某个链接正在进一步分割我的数据包?
您从主机发送的数据包很可能在发送之前不会被分段,因此 1500 字节的数据包非常正常。如果路径中某条链路上的 MTU 变小,路由器会对数据包进行分片,只要数据包上没有设置 DF(Do Not Fragment)标志,而需要对设置了 DF 标志的数据包进行分片的路由器将丢弃数据包(可能将 ICMP 消息发送回源)。当然,如果在数据包到达目的地时设置了DF标志,则数据包没有被分片。从接收端来看,要判断数据包是否已被分段,请查看标识字段、MF(更多片段)标志和片段偏移字段。
如果除了最后一个分片之外的所有分片大小相同,那么即使有多个分片,数据包也可能只分片一次。分片将尝试使所有分片尽可能大(有效负载的大小必须能被 8 整除),但最后一个分片将是剩下的任何部分。对片段进行分片的方式相同,因此如果数据包被多次分片,您可能会将较小的(最后一个分片的最后一个分片)片段混合到分片串中。有可能,但不太可能,多次分段的数据包具有所有片段,但最后一个大小相同。
在任何情况下,数据包被分片多少次并不重要,因为重组过程是相同的,无论有多少分片或数据包被分片多少次。
许多路由器和防火墙现在配置为丢弃数据包碎片,因为碎片攻击会占用目标主机中的资源。我们还可以使用 PMTUD 来发现路径中最小的 MTU,并在发送数据包之前调整数据包大小,使其不会沿着路径碎片化。分段数据包对路由器来说是资源密集型的,因此 IPv6 不允许路由器分段数据包,您必须将 PMTUD 与 IPv6 一起使用来设置数据包的大小,以使数据包适合到达目的地的路径中的最小 MTU。
这个问题的答案解释并证明了碎片化,然后是进一步的碎片化。