Puedes usar el estándar ping
que el Mac OSX viene con para encontrar el pmtu.
ping -D -s <size> <host>
debería hacer el truco. Tenga en cuenta que el tamaño es sólo el tamaño de la carga útil de los datagramas de la ICMP. Para ver el MTU IP, necesita añadir 8 bytes de la cabecera ICMP y 20 bytes de la cabecera IP (así, por ejemplo, para enviar un paquete IP de 1500 bytes de longitud, necesita especificar el tamaño como 1472). Tenga en cuenta, -D
es importante aquí, ya que pone la bandera de Dont-Fragment.
También puedes usar ping -D -g <minsize> -G <maxsize> -h <sizeincr> <host>
para hacer un barrido de ping. Esto hace un ping a tu anfitrión con paquetes que empiezan desde minsize
hasta maxsize
en sizeincr
incrementos. De nuevo, la misma regla se aplica a sus tamaños - estos son sólo para la carga útil de ICMP (por lo que necesita añadir 28 Bytes al tamaño especificado aquí para el tamaño completo de IP MTU).
Lo que estás buscando es un mensaje inalcanzable de la ICMP con un subtipo de "Se necesita fragmentación pero no se debe fragmentar". La dirección IP del remitente del mensaje ICMP anterior es el host o router que tiene su MTU ajustado a un tamaño menor que el de su paquete, en el enlace que usaría para reenviar su paquete más hacia el destino.
Tenga en cuenta también que a veces (mal configurados) los cortafuegos o los filtros de tráfico bloquean todos los mensajes ICMP y en tal caso, simplemente no se ve ninguna respuesta. Para probar qué host dejó caer el paquete, podría ejecutar un traceroute a su destino y luego hacer ping repetidamente a cada salto en el camino con '-D' y un tamaño o un barrido para descubrir la MTU local del enlace al que está conectado ese salto. Será el enlace entre el último host que puedas hacer ping y el primer host que no puedas que tendrá una MTU más pequeña.
De nuevo, todo esto está sujeto a que los enrutadores manejen la ICMP, lo cual podría no ser así.
El protocolo PMTUD (Path MTU Discovery) funciona de la misma manera. Utiliza paquetes TCP con la bandera DF puesta. Los puntos finales de las sesiones TCP acuerdan su MSS (Maximum Segment Size, que es MTU menos IP y cabeceras TCP, 40B) - eligen el menor de los valores MSS anunciados por cada host en el apretón de manos TCP. Luego envían todo el tráfico con las banderas DF encendidas, y esperan a que el ICMP sea inalcanzable o a que el TCP sea ACK. El último significa que la PMTU es suficiente, el primero significa que necesitan dejar el MSS.
¡Espero que eso ayude!