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

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

当我 ping 一个远程站点,该站点设置了 DF 位,并且数据包大小对于我的路由器来说太大时,路由器会发送第一个 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 ~]#

编辑:根据建议:

ip route get to 212.58.244.69

给出

212.58.244.69 via 217.155.134.6 dev eth1  src 217.155.134.4
    cache  mtu 1500 advmss 1460 hoplimit 64

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

答案1

或许

ip route get to 212.58.244.69

答案2

在 Windows 下,使用 netsh 命令查看保存此信息的“目标缓存”。例如(假设 IPv4):

netsh interface ipv4 show destinationcache

答案3

MSS 应该比 MTU 少 40 字节(不包括 IPv4(20 字节)和 tcp(20)字节标头)。所以这是正确的。

ICMP 分片需要消息由路由器发送,而不是您的服务器。

答案4

对我来说也不起作用。但 对于 IPv6,route get有用的是显示当前缓存的所有内容。并且显示指定目标的 PMTU。route show cacheip -6 route show cacheip -6 route get 2001:470:1:18::3:1280

要测试这一点,请使用此测试页面中的 curl 命令:https://test-ipv6.com/faq_pmtud.html

相关 ip route 文档:http://linux-ip.net/html/tools-ip-route.html#tools-ip-route-show-cache

如果您想要 IPv4 上的 PMTU 替代方案,请查看此 cloudflare 文章:https://blog.cloudflare.com/path-mtu-discovery-in-practice/ 其中提到“启用智能 MTU 黑洞检测”,可以通过以下方式(临时)启用:echo 1 > /proc/sys/net/ipv4/tcp_mtu_probing; echo 1024 > /proc/sys/net/ipv4/tcp_base_mss

相关内容