Estoy intentando determinar la ruta MTU de mi Mac a varios sitios y no puedo encontrar una utilidad incorporada para lograr esto.
En Linux, usaría una utilidad como tracepath , pero me pregunto si hay algún tipo de equivalente disponible para OS X.
Puedes usar el ping
estándar que viene con el Mac OSX para encontrar pmtu.
ping -D -s <size> <host>
debería hacer el truco. Tenga en cuenta que el tamaño es solo el tamaño de carga útil del datagrama ICMP. Para ver la MTU IP, debe agregar 8 bytes del encabezado ICMP y 20 bytes del encabezado IP (por ejemplo, para enviar un paquete IP de 1500 bytes, debe especificar el tamaño como 1472). Tenga en cuenta que -D
es importante aquí, ya que activa la marca Dont-Fragment.
También puede usar ping -D -g <minsize> -G <maxsize> -h <sizeincr> <host>
para ejecutar un barrido de ping. Esto hace ping a su host con paquetes desde minsize
hasta maxsize
en incrementos de sizeincr
. Una vez más, la misma regla se aplica a sus tamaños: estos son solo para la carga útil de ICMP (por lo que debe agregar 28 bytes al tamaño especificado aquí para el tamaño completo de IP MTU).
Lo que estás buscando es un mensaje ICMP inalcanzable con un subtítulo "Fragmentación necesaria pero No fragmentar" en el subtipo. La dirección IP del remitente del mensaje ICMP anterior es el host o enrutador que tiene su MTU configurada para ser inferior al tamaño de su paquete, en el enlace que usaría para reenviar su paquete hacia el destino.
Tenga en cuenta también que, a veces, los cortafuegos o los filtros de tráfico (mal configurados) bloquearán todos los mensajes ICMP y, en tal caso, no verá ninguna respuesta. Para probar qué host eliminó el paquete, puede ejecutar traceroute a su destino y luego hacer ping repetidamente en cada salto en el camino con '-D' y un tamaño o barrido para descubrir la MTU local del enlace al que está conectado el salto. Será el enlace entre el último host al que puede hacer ping y el primer host que no puede, tendrá un MTU más pequeño.
Nuevamente, todo esto está sujeto a los enrutadores que manejan ICMP, lo que podría no hacerlo.
El protocolo PMTUD (Path MTU Discovery) funciona de la misma manera. Utiliza paquetes TCP con el indicador DF activado. Los puntos finales de las sesiones TCP concuerdan con su MSS (Tamaño de segmento máximo, que es MTU menos IP y encabezados TCP, 40B): eligen el menor de los valores MSS anunciados por cada host en el protocolo de enlace TCP. Luego, envían todo el tráfico con los indicadores de DF activados y esperan el ICMP inalcanzable o un ACK de TCP. El último significa que el PMTU es suficiente, el primero significa que necesitan abandonar el MSS.
Espero que ayude!
traceroute
está disponible en la Mac. Traceroute es en realidad una versión más destacada de tracepath
.
man traceroute
le dará los detalles pero traceroute <host>
hace lo mismo que tracepath <host>
.
hacer un ping -DRo <hostname| IPAddr>
hizo un tracepath simple para mí
También creé un shellscript simple llamado tracepath, y parece que:
#!/bin/sh
#ping -D -g <minsize> -G <maxsize> -h <sizeincr>
echo "tracepath to $1 \n"
ping -DRo $1
No es tan agradable como una ruta de acceso real