我有一个家庭网络,其中有两个路由器,一个在另一个后面。外部路由器的 WAN 端口是 VDSL2 PPPoE 连接,具有实时 IP 地址和 1492 的 MTU 大小。内部路由器的 WAN 端口通过 DHCP 分配,只是外部路由器 LAN 网络上的另一个客户端。默认情况下,它的默认 MTU 为 1500。我已将其更改为 1492 以匹配外部路由器。
现在我想知道进一步减少内部网络的 MTU 大小是否有意义。在这种双 NAT 场景中,这是否会使内部网络更加强大?
答案1
NAT 只会更改数据包中的 IP 地址/端口,不会在数据包中包含任何额外信息(标头等)。因此,它不会以任何方式减少 MTU,并且 MTU 相同即可。
答案2
虽然 NAT 不会增加数据包的大小(或者更准确地说,不会减少每个数据包的最大有效负载大小),但 PPoE 和其他隧道协议通常会这样做。
然而,大多数现代操作系统已经实现了路径 MTU 发现,概述于RFC1191,它会自动调整传出数据包以适应发送主机和目标之间任何链路的最小 MTU。它通过DF bit
在大型传出数据包中设置(不分段)来实现这一点,并查找 ICMP 错误Fragmentation Needed
。
在 MacOS 和其他类 Unix 操作系统中,该ping
实用程序具有多个开关,可以设置DF bit
,并设置有效负载大小,甚至可以扫描一系列大小,从而有效地确定源主机和目标之间的 MTU。发送中有 8 个字节的开销ICMP Echo Request
ping
,IP 数据包中有 20 个字节的开销,因此在 1500 字节 MTU 接口上设置的 ping 数据包的最大有效负载为 1472 DF bit
。
你可以将 MTU 设置得较低,以某种非常小的方式优化这条特定路径,作为回报,数据包大小会略微降低所有其他主机参与的数据包流。
因此,除非您遇到文件传输停滞的问题,否则最好让操作系统自动处理 MTU。
[nevin-mac-mini:~] nevin%ping -c 1 -D -s 1472 192.168.2.1 PING 192.168.2.1 (192.168.2.1): 1472 个数据字节 来自 192.168.2.1 的 1480 字节:icmp_seq=0 ttl=64 时间=0.667 毫秒 --- 192.168.2.1 ping 统计信息 --- 已发送 1 个数据包,已接收 1 个数据包,数据包丢失率为 0.0% 往返最小值/平均值/最大值/标准差 = 0.667/0.667/0.667/0.000 毫秒 [nevin-mac-mini:~] nevin%ping -c 1 -D -s 1473 192.168.2.1 PING 192.168.2.1 (192.168.2.1): 1473 个数据字节 ping:sendto:消息太长 --- 192.168.2.1 ping 统计信息 --- 已发送 1 个数据包,已接收 0 个数据包,数据包丢失率为 100.0%