我很想知道 IP 标志的“不分段”[DF] 位在哪里使用。因为碎片对于更高层来说是不可见的,并且他们也不关心。

我也在寻找一个例子。

预先非常感谢。

有帮助吗?

解决方案

Fragmentation不总是不可见的所有上层。一些早期(甚至可能电流)微控制器的TCP / IP协议栈没有实现完整的功能,如破碎处理。在这种情况下该标志的使用将确保数据包的原始形式,而不是大量的另一端无法处理片段的到来。

另外,在使用UDP的情况下,就没有必要对所有的片段在所述目的地,以便到达,以防止碎裂意味着消息要么到达或不到达 - 没有可能性,即只有一个位UDP数据报的将到达目的地。我不记得保持多久的TCP / IP协议栈上等待失踪片段未组装IP包,但使用的DF标志的意思有在这段时间绑起来没有不必要的资源。

最后,你可以使用它的网络基础设施,比如当你得到一个数据包,它比最大传输单元更大会发生什么的测试行为(DF将防止零散到孔“通过挤压”这包)。

其他提示

此外 @Pax的回答 (或者也许作为他提到的测试的一部分),DP 标志也用于 路径MTU发现. 。这是当您尝试找出对于给定链路可以发送而不被分段的最大数据包是多少时。

避免碎片通常很有用,即使更高级别的协议在理论上与其机制隔离,但它们仍然可以“感受到”后果。如果单个应用程序级别 write() 网络套接字由于太大而最终被分片,并且其中一个分片在网络中丢失,整个IP数据包将丢失。这当然会影响吞吐量。

出于这个原因,通常需要了解 最大传输单元, , IE。可以发送到目的地而不被分段的最大数据包。路径 MTU 发现用于查找此大小,只需设置 DF 位并连续发送较大的数据包,直到网络报告(通过 ICMP) 失败。

请注意,设置DF在C.在Linux上没有标准的方式,此代码的工作:

result = setsockopt(mysocket, IPPROTO_IP, 
                IP_MTU_DISCOVER, IP_PMTUDISC_DO, sizeof(int));

,但它不会在FreeBSD 6

此外,路径MTU发现是真正的互联网上极不可靠。太多的破防火墙和中间件过滤掉ICMP“包太大”的消息(这里是在面试中测试候选网络管理员的好办法:让他/她停止ping和他/她可能会完全阻止ICMP)查看RFC 2923:

“与路径MTU发现TCP问题”

这就是为什么现在IETF提出一种新的方式来测试MTU,无需依赖路径MTU发现的原因:RFC 4821:“分组层路径MTU发现”

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top