¿Existe una utilidad equivalente a la ruta de seguimiento de Linux para OS X?

Estoy tratando de determinar la ruta MTU desde mi Mac a varios sitios y no puedo encontrar una utilidad integrada para lograrlo.

En Linux, usaría una utilidad como tracepath , pero me pregunto si hay algún tipo de equivalente disponible para OS X.

Respuestas (3)

Puede usar el estándar pingque viene con 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 la carga útil del datagrama ICMP. Para ver la IP MTU, debe agregar 8 bytes del encabezado ICMP y 20 bytes del encabezado IP (por ejemplo, para enviar un paquete IP de 1500 bytes de largo, debe especificar el tamaño como 1472). Tenga en cuenta -Dque es importante aquí, ya que activa el indicador Dont-Fragment.

También puede utilizar ping -D -g <minsize> -G <maxsize> -h <sizeincr> <host>para ejecutar un barrido de ping. Esto hace ping a su host con paquetes a partir de minsizehasta maxsizeen sizeincrincrementos. Nuevamente, 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 MTU de IP).

Lo que está buscando es un mensaje ICMP inalcanzable con un subtipo de "Fragmentación necesaria pero no fragmentar indicador activado". La dirección IP del remitente del mensaje ICMP anterior es el host o enrutador que tiene su MTU configurada en un tamaño inferior al 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 dejó caer el paquete, puede ejecutar traceroute hasta su destino y luego hacer ping repetidamente en 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 el salto. Será el enlace entre el último host al que puede hacer ping y el primer host al que no puede, que tendrá una MTU más pequeña.

Nuevamente, todo esto está sujeto a que los enrutadores manejen ICMP, lo cual podría no ser así.

El protocolo PMTUD (Path MTU Discovery) funciona de la misma manera. Utiliza paquetes TCP con bandera DF activada. Los puntos finales de las sesiones TCP acuerdan su MSS (Tamaño máximo de segmento, que es MTU menos los encabezados IP y TCP, 40B): eligen el menor de los valores de MSS anunciados por cada host en el protocolo de enlace TCP. Luego, envían todo el tráfico con las banderas DF activadas y esperan el ICMP inalcanzable o un ACK de TCP. Lo último significa que el PMTU es suficiente, lo primero significa que necesitan eliminar MSS.

¡Espero que ayude!

Definitivamente lo que estaba buscando! Lástima que la versión de Linux de ping no tiene los mismos interruptores para usar, ya que encuentro que esto es más exacto que usar tracepath en Linux.
en realidad, puedes hacer lo mismo en Linux (excepto por el barrido). Puede usar ping -M do -s <size> <host>: el -Mindicador es una sugerencia para PMTUD ( -M dosignifica prohibir la fragmentación incluso localmente, -M wantsignifica ejecutar el descubrimiento de MTU de la ruta, pero permitir la fragmentación cuando sea local, y -M dontsignifica no hacer pmtud y permitir la fragmentación).

tracerouteestá disponible en la Mac. Traceroute es en realidad una versión más destacada de tracepath.

man traceroutele dará los detalles pero traceroute <host>hace lo mismo que tracepath <host>.

Estoy interesado en averiguar la ruta MTU para una conexión, no el retraso de ms causado por cada salto. No veo cómo tracepath y traceroute son lo mismo.
No es lo mismo, y traceroute no determina la MTU. Esta respuesta es incorrecta al suponer eso. Usarping -g 1444 -G 1508 -c 2 -h 1 -D example.com
En realidad, parece que no tengo una tracerouteen mi Mac (Mojave 10.14.3). ¿Debería? FWIW hay una tcptraceroutepreparación.
tracerouteya no está instalado por defecto en la Mac. El ping -Dmétodo es ahora el mejor.
Parece que traceroute de Mac tampoco es compatible con el parámetro --mtu.

haciendo un ping -DRo <hostname| IPAddr>trazado simple para mí

También creé un shellscript simple llamado tracepath, y se ve así:

#!/bin/sh
#ping -D -g <minsize> -G <maxsize> -h <sizeincr>
echo "tracepath to $1 \n"
ping -DRo $1

No es tan bueno como un camino real