我很好奇“不分段”[DF] IP标志位在哪里使用。由于分段对更高层来说是不可见的,它们也不太关心。
我还在寻找一个例子。
非常感谢您提前的帮助。
我很好奇“不分段”[DF] IP标志位在哪里使用。由于分段对更高层来说是不可见的,它们也不太关心。
我还在寻找一个例子。
非常感谢您提前的帮助。
分片并不总是对所有上层可见。一些早期的(可能甚至现在仍在使用的)微控制器TCP/IP协议栈没有实现完整的分片处理能力。在这种情况下使用标志会确保数据包以其原始形式到达,而不是一堆对方无法处理的碎片。
此外,在使用UDP时,并不需要所有碎片都到达目的地,因此防止分片意味着消息要么到达要么不到达——没有可能只有部分UDP数据报文到达目的地。我记不清TCP/IP协议栈等待缺失碎片的未组装的IP数据包保留了多久,但使用DF标志意味着在此期间没有浪费不必要的资源。
最后,您可以用它来测试网络基础设施的行为,例如当您收到一个大于最大传输单元的数据包时会发生什么(DF将防止该数据包被分片以“挤进”洞中)。
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发现”。