Comment afficher le PMTU mis en cache sous Linux (et tous les autres systèmes d'exploitation)

13

Lorsque j'effectue un ping sur un site distant avec le jeu de bits DF et une taille de paquet trop grande pour mon routeur, le premier message ICMP "fragmentation requise" est envoyé par le routeur. Après cela, le message vient de mon hôte local.

Netstat -rC (sous Linux) me permet de visualiser le cache de la table de routage, mais

1) Semble montrer les MTU sous une colonne appelée MSS (qui je m'attendrais à être le TCP MSS inférieur du lien)

2) Affiche toujours la valeur à 1500

Mon hôte local doit mettre en cache le PMTU quelque part afin qu'il puisse générer le message de fragmentation requis. Mais comment puis-je voir ça?

Voici un exemple sur ma machine (-n sur netstat empêche les recherches DNS inversées):

[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: Selon la suggestion:

ip route get to 212.58.244.69

donne

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

Ce qui semble également faux car le MSS n'est que de 40 de moins que le mtu, qui est l'interface mtu plutôt que le PMTU

Neik
la source
1
Sur Fedora 22, netstat -rCnne renvoie rien, mais watch ip route get to $HOSTmontre ce qui se passe, y compris le cache TTL. ip route show cachedmontre probablement aussi quelque chose de sortie mais ne le fait pas.
David Tonhofer

Réponses:

7

Peut être

ip route get to 212.58.244.69
sciurus
la source
Question modifiée pour ajouter ceci.
Neik
1

Sous Windows, utilisez la commande netsh pour afficher le "cache de destination" qui contient ces informations. Par exemple (en supposant IPv4):

netsh interface ipv4 show destinationcache
dbr
la source
1

MSS doit être inférieur de 40 octets à votre MTU (il n'inclut pas les en-têtes IPv4 (20 octets) et tcp (20) octets). C'est donc correct.

Le message de fragmentation ICMP nécessaire est envoyé par le routeur, pas par votre serveur.

Gabe
la source