UDP路径MTU发现:数据报过大问题解析

需积分: 50 19 下载量 94 浏览量 更新于2024-08-06 收藏 12.09MB PDF 举报
"TCP/IP协议相关知识,尤其是UDP的路径MTU发现机制" 在TCP/IP协议族中,UDP(用户数据报协议)是一种无连接的服务,它不保证数据的可靠传输,但具有较低的开销。当使用UDP的应用程序尝试发送一个超过路径中最小传输单元(MTU)的数据报时,就会涉及到路径MTU发现机制。这个过程是为了避免数据报在传输过程中因超过链路的最大传输限制而被分片,因为分片可能导致效率降低和数据丢失。 在描述的示例中,我们看到一个Solaris 2.x系统向SLIP链路发送650字节的UDP数据报,而SLIP链路的MTU只有296字节。如果数据报的“不分片”(Don't Fragment, DF)标志被设置,且数据报长度超过268字节(296减去IP和UDP头的大小),那么通过BSDi路由器时,路由器会发送ICMP“不能分片”错误消息。 当DF标志被设置在第一个数据报中(第1行),路由器果然返回了ICMP错误(第2行)。然而,即使在后续的发送中DF标志依然被设置,但IP层却自动进行了分片,这是因为没有收到明确的下一跳MTU信息,IP猜测MTU为576字节,并进行了相应的分片操作。这种情况下,IP首部和UDP首部的大小会影响实际分片的数据量。 不幸的是,如果再次发送带有DF标志的数据报,会被具有更小MTU的路由器丢弃并返回错误。IP会有一个定时器,每隔一段时间尝试再次设置DF标志,以检查路径MTU是否有所增加。RFC 1191建议这个定时器的值应为10分钟,而在Solaris 2.2中,这个值可能是30秒,可以通过修改`ip_ire_pathmtu_interval`参数来调整。 这个例子展示了UDP与路径MTU发现机制的交互,以及在没有明确MTU信息时IP层如何处理分片。在实际网络环境中,理解这些机制对于优化网络通信和解决传输问题至关重要。TCP/IP协议族通过层次化设计,使得不同层次的协议可以专注于各自的功能,从而实现不同系统间的有效通信。例如,链路层处理物理接口,网络层负责分组路由,而运输层如TCP和UDP则负责端到端的数据传输服务。