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
netstat -rCn
ne renvoie rien, maiswatch ip route get to $HOST
montre ce qui se passe, y compris le cache TTL.ip route show cached
montre probablement aussi quelque chose de sortie mais ne le fait pas.