Vous pouvez utiliser la norme ping
que le Mac OSX est livré avec pour trouver pmtu.
ping -D -s <size> <host>
devrait faire l'affaire. Veuillez noter que la taille est juste la taille de la charge utile du datagramme ICMP. Pour connaître la MTU IP, vous devez ajouter 8 octets de l'en-tête ICMP et 20 octets de l'en-tête IP (donc par exemple, pour envoyer un paquet IP de 1500 octets, vous devez spécifier une taille de 1472). Veuillez noter, -D
est important ici, car il active le drapeau Dont-Fragment.
Vous pouvez également utiliser ping -D -g <minsize> -G <maxsize> -h <sizeincr> <host>
pour lancer un balayage ping. Cette opération consiste à envoyer à votre hôte des paquets commençant par minsize
jusqu'à maxsize
sur sizeincr
incréments. Encore une fois, la même règle s'applique à vos tailles - celles-ci ne concernent que la charge utile ICMP (vous devez donc ajouter 28 octets à la taille spécifiée ici pour la taille MTU IP complète).
Ce que vous recherchez est un message ICMP unreachable avec un sous-type "Fragmentation nécessaire mais drapeau Don't Fragment on" en retour. L'adresse IP de l'expéditeur du message ICMP ci-dessus est l'hôte ou le routeur dont le MTU est inférieur à la taille de votre paquet, sur le lien qu'il utiliserait pour transmettre votre paquet vers la destination.
Notez également que parfois, les pare-feu ou les filtres de trafic (mal configurés) bloquent tous les messages ICMP et, dans ce cas, vous ne verrez aucune réponse. Pour tester quel hôte a abandonné le paquet, vous pouvez lancer traceroute jusqu'à votre destination et ensuite envoyer plusieurs fois des ping à chaque saut sur le chemin avec '-D' et une taille ou un sweep pour découvrir le MTU local du lien auquel ce saut est connecté. Ce sera le lien entre le dernier hôte que vous pouvez pinger et le premier hôte que vous ne pouvez pas pinger qui aura un MTU plus petit.
Encore une fois, tout ceci est sujet à la gestion de l'ICMP par les routeurs, ce qui n'est pas toujours le cas.
Le protocole PMTUD (Path MTU Discovery) fonctionne de la même manière. Il utilise des paquets TCP avec le drapeau DF activé. Les points d'extrémité des sessions TCP se mettent d'accord sur leur MSS (Maximum Segment Size, qui est le MTU moins les en-têtes IP et TCP, 40B) - ils choisissent la plus petite des valeurs MSS annoncées par chaque hôte dans le handshake TCP. Ensuite, ils envoient tout le trafic avec les drapeaux DF activés et attendent le message ICMP unreachable ou un TCP ACK. Ce dernier signifie que la PMTU est suffisante, le premier signifie qu'ils doivent abandonner le MSS.
J'espère que cela vous aidera !