如果接收到的数据包长度大于其 MTU,主机将不会发送 ICMP“需要分段”?

如果接收到的数据包长度大于其 MTU,主机将不会发送 ICMP“需要分段”?

我正在解决网络中与 MTU 相关的问题。缺乏一些知识,希望在这里得到一些澄清:)

我有一个设置,其中客户端主机(在其 NI 上配置 MTU=1500 字节)将流量发送到服务器主机(在其 NI 上配置 MTU=1400)。客户端偶尔会发送一个长度大于服务器主机的 MTU(例如 1450 字节)且设置了 DF 标志的数据包。

两台主机都启用了 PMTUD(运行sysctl net.ipv4.ip_no_pmtu_disc返回0;因此 DF 标志),但是,由于某种原因,客户端没有了解到它应该为此特定路径使用较低的 MTU -ip route get %server-ip-here%不返回任何特殊的 MTU。

两台主机彼此距离非常近(在同一个 DC 中,它们之间只有一台路由器),并且 99.9% 两台主机之间的所有设备都可以正常处理 1450 字节数据包,因此它们没有理由丢弃它并发回 ICMP“需要分片”。

据我了解,由于其网络接口的 MTU 为 1400 字节,数据包在服务器主机上被丢弃。

根据我在 PMTUD 上找到的所有文章,此类 ICMP 数据包似乎仅由客户端和服务器之间的路由器发送。

有人可以证实我的想法吗:如果终端主机由于传入数据包的长度大于本地配置的 MTU 而丢弃传入数据包,则它们不会发送 ICMP“需要分段”?

答案1

事实上,我只能找到 RFC 1191(路径 MTU 发现)记录发送所需的 ICMP 分段的内容:

2. 协议概述

基本思想是,源主机最初假定路径的 PMTU 是其第一跳的(已知)MTU,并发送设置了 DF 位的该路径上的所有数据报。如果任何数据报太大待转发无碎片通过某个路由器沿着小路,那个路由器将丢弃它们并返回 ICMP Destination Unreachable 消息,其代码含义为“需要分段并设置 DF”[7]。

4. 路由器规格

当一个路由器无法向前由于数据报超出了下一跳网络的 MTU 并且设置了 Don't Fragment 位,因此路由器需要向数据报的源返回 ICMP Destination Unreachable 消息,代码中指示“需要分片且 DF”放”。

所有描述均假设 ICMP 是由路由器而不是主机发出的。该决定发生在重新发送到其他接口的 MTU 太低,接收时不会。

没有规定主机(不路由接收到的数据包)发出此类 ICMP。它会向尝试执行以下操作的应用程序发送直接错误发射这样的数据包,但如果它已收到一个大小为 1500 的数据包,它不“正式”支持(因为它的 MTU 是 1400),要么硬件会丢弃它(但它没有丢弃,或者这将是一个有争议的问题),或者如果它没有,那么我猜这是未定义的(在 RFC 中)行为,并且操作系统网络堆栈可以接受它。

人们应该假设 LAN 中的配置是正确的:主机与同一广播域中的所有其他节点具有相同的 MTU。

相关内容