Назад | Перейти на главную страницу

Как просмотреть кэшированный PMTU в Linux (и во всех других ОС)

Когда я пингую удаленный сайт с установленным битом DF и размером пакета, который слишком велик для моего маршрутизатора, первое сообщение ICMP «требуется фрагментация» отправляется от маршрутизатора. После этого сообщение приходит с моего локального хоста.

Netstat -rC (в Linux) позволяет мне просматривать кеш таблицы маршрутизации, но

1) Кажется, показывает MTU в столбце под названием MSS (который, как я ожидал, будет более низким TCP MSS ссылки)

2) Всегда показывает значение 1500

Мой локальный хост должен где-то кэшировать PMTU, чтобы он мог генерировать сообщение о необходимости фрагментации. Но как мне это увидеть?

Вот пример на моей машине (-n в netstat запрещает обратный поиск 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 всего на 40 меньше, чем mtu, который является интерфейсом mtu, а не PMTU.

Может быть

ip route get to 212.58.244.69

В Windows используйте команду netsh для просмотра «целевого кеша», в котором хранится эта информация. Например (при условии IPv4):

netsh interface ipv4 show destinationcache

MSS должен быть на 40 байт меньше вашего MTU (он не включает заголовки байтов IPv4 (20 байтов) и tcp (20)). Так что это правильно.

Сообщение о необходимости фрагментации ICMP отправляется маршрутизатором, а не вашим сервером.