如何在 Linux(和所有其他操作系统)下查看缓存的 PMTU

Nei*_*eik 19 networking mtu

当我在设置了 DF 位并且数据包大小对于我的路由器来说太大的情况下 ping 远程站点时,第一个 ICMP“需要分段”消息从路由器发送。之后,消息来自我的本地主机。

Netstat -rC(在 Linux 上)允许我查看路由表缓存,但是

1) 似乎在名为 MSS 的列下显示 MTU(我希望它是链接的较低 TCP MSS)

2) 始终将值显示为 1500

我的本地主机必须在某处缓存 PMTU,以便它可以生成所需的碎片消息。但是我怎么看呢?

这是我机器上的一个示例(netstat 上的 -n 禁止反向 DNS 查找):

[root@vbcentos ~]# ping -c 4 -M do -s 1431 212.58.244.69
PING 212.58.244.69 (212.58.244.69) 1431(1459) bytes of data.
From 217.155.134.6 icmp_seq=1 Frag needed and DF set (mtu = 1458)
From 217.155.134.4 icmp_seq=2 Frag needed and DF set (mtu = 1458)
From 217.155.134.4 icmp_seq=2 Frag needed and DF set (mtu = 1458)
From 217.155.134.4 icmp_seq=2 Frag needed and DF set (mtu = 1458)

--- 212.58.244.69 ping statistics ---
1 packets transmitted, 0 received, +4 errors, 100% packet loss, time 1002ms

[root@vbcentos ~]# netstat -rCn
Kernel IP routing cache
Source          Destination     Gateway         Flags   MSS Window  irtt Iface
217.155.134.3   217.155.134.4   217.155.134.4   il        0 0          0 lo
217.155.134.4   212.58.244.69   217.155.134.6          1500 0          0 eth0
217.155.134.4   217.155.134.4   217.155.134.4   l     16436 0          0 lo
217.155.134.3   217.155.134.255 217.155.134.255 ibl       0 0          0 lo
217.155.134.4   212.58.244.69   217.155.134.6          1500 0          0 eth0
217.155.134.6   217.155.134.4   217.155.134.4   il        0 0          0 lo
212.58.244.69   217.155.134.4   217.155.134.4   l         0 0          0 lo
[root@vbcentos ~]#
Run Code Online (Sandbox Code Playgroud)

编辑:根据建议:

ip route get to 212.58.244.69
Run Code Online (Sandbox Code Playgroud)

给

212.58.244.69 via 217.155.134.6 dev eth1  src 217.155.134.4
    cache  mtu 1500 advmss 1460 hoplimit 64
Run Code Online (Sandbox Code Playgroud)

这似乎也是错误的,因为 MSS 仅比 mtu 少 40,这是接口 mtu 而不是 PMTU

sci*_*rus 12

也许

ip route get to 212.58.244.69
Run Code Online (Sandbox Code Playgroud)