我很想知道IP标志的“不分段”DF位是在哪里使用的。因为碎片对高层是不可见的,他们也不关心。
我也在寻找一个例子。
在此之前非常感谢。
发布于 2008-12-09 05:41:39
碎片并不总是对所有上层都不可见。一些早期(甚至可能是现在的)微控制器TCP/IP堆栈没有实现完整的功能,比如碎片处理。在这种情况下使用标志将确保数据包以其原始形式到达,而不是另一端无法处理的大量碎片。
此外,当使用UDP时,没有必要让所有的碎片都到达目的地,因此,防止碎片意味着消息要么到达,要么没有到达-不可能只有一小部分UDP数据报到达目的地。我记不起TCP/IP堆栈在未组装的IP数据包上等待丢失片段的时间,但DF标志的使用意味着在这段时间内不会占用不必要的资源。
最后,您可以使用它来测试网络基础设施的行为,例如,当您获得一个大于最大传输单位的数据包时会发生什么情况(DF将防止该数据包被分成碎片以“挤过”漏洞)。
发布于 2008-12-10 09:42:03
请注意,在C中没有标准的方法来设置DF。在Linux上,以下代码可以工作:
result = setsockopt(mysocket, IPPROTO_IP,
IP_MTU_DISCOVER, IP_PMTUDISC_DO, sizeof(int));
但在FreeBSD 6上不是这样的
而且,路径MTU发现在真实的Internet上是非常不可靠的。太多损坏的防火墙和中间盒会过滤掉ICMP“数据包太大”的消息(这是在面试期间测试候选人网络管理员的一个好方法:要求他/她停止ping,他/她可能会完全阻止ICMP。)请参阅RFC 2923:“路径MTU发现的TCP问题”
这就是为什么IETF现在建议一种新的方法来测试MTU,而不依赖于路径MTU发现: RFC 4821:"Packetization Layer Path MTU Discovery“
https://stackoverflow.com/questions/351806
复制相似问题