Como visualizo o PMTU em cache no Linux (e todos os outros sistemas operacionais)

13

Quando eu sigo um site remoto com o conjunto de bits DF e um tamanho de pacote muito grande para o meu roteador, a primeira mensagem de "fragmentação necessária" do ICMP é enviada pelo roteador. Depois disso, a mensagem vem do meu host local.

O Netstat -rC (no Linux) permite visualizar o cache da tabela de roteamento, mas

1) Parece mostrar MTUs sob uma coluna chamada MSS (que eu esperaria ser o menor MSS TCP do link)

2) Mostra sempre o valor como 1500

Meu host local deve estar armazenando em cache o PMTU em algum lugar para que ele possa gerar a mensagem de fragmentação necessária. Mas como eu vejo isso?

Aqui está um exemplo na minha máquina (-n no netstat inibe as pesquisas reversas de 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 ~]#

EDIT: Conforme sugestão:

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

O que também parece errado, pois o MSS é apenas 40 a menos que o mtu, que é a interface mtu e não o PMTU

Neik
fonte
1
No Fedora 22, netstat -rCnnão retorna nada, mas watch ip route get to $HOSTmostra o que está acontecendo, incluindo o TTL do cache. ip route show cachedshows provavelmente também produzem algo, mas não.
David Tonhofer

Respostas:

7

Talvez

ip route get to 212.58.244.69
sciurus
fonte
Pergunta editada para adicionar isso.
Neik 28/08/2013
1

No Windows, use o comando netsh para exibir o "cache de destino" que contém essas informações. Por exemplo (assumindo IPv4):

netsh interface ipv4 show destinationcache
dbr
fonte
1

O MSS deve ter 40 bytes a menos que o seu MTU (não inclui os cabeçalhos IPv4 (20 bytes) e tcp (20) byte). Então isso está correto.

A mensagem de fragmentação ICMP necessária é enviada pelo roteador, não pelo seu servidor.

Gabe
fonte