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.
Puede usar el estándar ping
que 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 -D
que 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 minsize
hasta maxsize
en sizeincr
incrementos. 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!
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>
.
ping -g 1444 -G 1508 -c 2 -h 1 -D example.com
traceroute
en mi Mac (Mojave 10.14.3). ¿Debería? FWIW hay una tcptraceroute
preparación.traceroute
ya no está instalado por defecto en la Mac. El ping -D
método es ahora el mejor.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
reeddog117
Miguel
ping -M do -s <size> <host>
: el-M
indicador es una sugerencia para PMTUD (-M do
significa prohibir la fragmentación incluso localmente,-M want
significa ejecutar el descubrimiento de MTU de la ruta, pero permitir la fragmentación cuando sea local, y-M dont
significa no hacer pmtud y permitir la fragmentación).