¿Cómo se implementa traceroute?

Traceroute se implementa mediante un truco inteligente que involucra el encabezado TTL en IP. Este es el “Tiempo de vida” de un paquete IP. El nombre puede ser confuso. No es una medida temporal, sino un número que representa la cantidad de saltos que puede tomar un paquete antes de que se descarte. En la mayoría de las aplicaciones, un paquete IP se origina con un TTL de 255. Cada enrutador (o dispositivo que actúa como un enrutador) que el paquete transita resta 1 del TTL. Nunca he visto una ruta válida en Internet que incluso se acerque a 255 saltos, por lo que ese número debería ser suficiente para la actividad normal. Sin embargo, si se produce un bucle de enrutamiento, el TTL evita que los paquetes reboten para siempre y obstruyan los enlaces. Una vez que un paquete ha rebotado lo suficiente, su TTL caerá a cero y se caerá.

Un efecto secundario de este proceso, y la clave para traceroute es que cuando se descarta un paquete, el dispositivo que lo descarta envía un mensaje “ICMP TTL caducado en tránsito” al originador del paquete. (Es posible deshabilitar este comportamiento que hace que los dispositivos aparezcan como desconocidos en traceroute).

Traceroute utiliza esta función enviando paquetes hacia el destino con TTL crecientes. El primer paquete se envía con un TTL de 1. Esto significa que el primer enrutador descartará el paquete y enviará un mensaje ICMP. Este mensaje ICMP tendrá la IP de origen del enrutador que descartó el paquete, por lo que traceroute aprende la IP del primer enrutador.

Luego, Traceroute envía un paquete con un TTL de 2, por lo que el segundo enrutador descartará el paquete y devolverá los mensajes ICMP. Este proceso continúa hasta que el paquete llega a la dirección de destino.

Traceroute puede implementarse utilizando paquetes UDP o ICMP. Algunas implementaciones de traceroute permitirán al usuario especificar el protocolo a utilizar. Si se utiliza ICMP, los paquetes enviados son “Solicitudes de eco ICMP” (es decir, “ping”). Cuando traceroute obtiene una respuesta de ping en lugar de un mensaje TTL caducado, entonces sabe que ha llegado al destino. Si se usa UDP, traceroute establecerá el puerto de destino en un número usado muy grande muy poco probable para garantizar que el dispositivo de destino responda que el puerto está cerrado con un mensaje de error de puerto inalcanzable ICMP. Nuevamente, esto indica a traceroute que ha alcanzado la IP de destino.

Si tiene acceso a una utilidad de ping que le permite configurar el TTL en pings, puede hacer un traceroute manualmente. Simplemente haga ping a la IP de destino con un TTL de 1. Debería recibir un mensaje que diga que se excedió el TTL. Luego envíe el mismo ping pero con un TTL de 2, luego 3, etc.

El siguiente ejemplo es de una caja de Linux que hace ping a un enrutador a tres saltos de distancia.

> ping -t 1 10.0.129.1
PING 10.0.129.1 (10.0.129.1) 56 (84) bytes de datos.
Desde 10.0.1.1 icmp_seq = 1 Tiempo de vida excedido

> ping -t 2 10.0.129.1
PING 10.0.129.1 (10.0.129.1) 56 (84) bytes de datos.
Desde 10.0.0.70 icmp_seq = 1 Tiempo de vida excedido

> ping -t 3 10.0.129.1
PING 10.0.129.1 (10.0.129.1) 56 (84) bytes de datos.
64 bytes de 10.0.129.1: icmp_seq = 1 ttl = 253 tiempo = 1.82 ms

Prácticamente de la misma manera que se implementa en cualquier otra plataforma: es una de las pocas utilidades relacionadas con la red en la que generar errores es el punto central .

Todos los paquetes IP tienen un campo especial cuyo valor disminuye cada vez que pasa a través de un enrutador. En IPv4, se llama Time To Live (TTL) , mientras que IPv6 usa el límite de salto más significativo.

En cualquier caso, cuando un enrutador recibe un paquete, -1 es el campo y ve el valor 0 , piensa “uh oh, este paquete ha estado saltando por Internet demasiado tiempo”, y envía un ICMP Tiempo excedido especial (TE ) paquete de error de vuelta al host traceroute. El paquete de error contiene naturalmente la dirección IP del enrutador que arroja este error.

El algoritmo general de traceroute para un host de destino con IP [math] A [/ math] es, por lo tanto:

  1. Envíe un paquete a [math] A [/ math] con TTL = 1.
  2. Su enrutador local recibe el paquete, disminuye TTL a 0 y le envía un ICMP TE. traceroute imprime la IP de origen del TE para el salto 1.
  3. Envíe un paquete a [math] A [/ math] con TTL = 2.
  4. Su enrutador local recibe el paquete, disminuye TTL a 1 y lo reenvía al siguiente enrutador a lo largo de la ruta a [math] A [/ math].
  5. El siguiente enrutador recibe el paquete, disminuye el TTL a 0 y le envía un ICMP TE. traceroute imprime la IP de origen del TE para el salto 2.
  6. Envíe un paquete a [math] A [/ math] con TTL = 3.
  7. … (tu sabes el resto)

Ahora, muchos enrutadores se pueden configurar para que no pasen mensajes ICMP, ya sea una “prohibición general” o tipos específicos como TE. Los paquetes ICMP también se pueden descartar en el camino debido al tráfico pesado o por alguna otra razón. Esta es la razón por la cual los programas traceroute generalmente envían múltiples sondas TTL (y le muestran de manera útil el tiempo que tardó en recibir cada respuesta TE).

Espero que ayude.

Traceroute es un programa que muestra la ruta que toman los paquetes a través de una red.

El comando traceroute está disponible en muchos sistemas operativos modernos. En Apple macOS, está disponible abriendo el menú Network Utilities y seleccionando Traceroute, así como desde la interfaz de línea de comandos en un terminal. En otros sistemas Unix, como FreeBSD o Linux, también está disponible como herramienta de línea de comandos. En Microsoft Windows, se llama tracert. Los sistemas operativos basados ​​en Windows NT también proporcionan PathPing, con una funcionalidad similar. Para la versión 6 del Protocolo de Internet (IPv6), la herramienta a veces tiene el nombre traceroute6 o tracert6.

lo que hace Traceroute es enviar un paquete UDP al destino aprovechando los mensajes de ICMP. Así que echemos un vistazo a lo que son ICMP y sus mensajes.

ICMP (Protocolo de mensajes de control de Internet) es un complemento del protocolo IP. Compensa el protocolo IP en el informe de errores ya que el protocolo IP no tiene un método de informe de errores. ICMP solo informa errores y espera que las capas superiores del modelo de arquitectura OSI manejen y corrijan los errores.

ICMP tiene dos tipos de mensajes: mensajes de informe de errores y mensajes de consulta . Los mensajes de consulta se utilizan generalmente para diagnosticar problemas de red (la herramienta de ping utiliza los mensajes de consulta de ICMP). Los mensajes de informe de errores como el nombre sugieren errores de informe si hay alguno en el paquete IP. Hay cinco tipos de mensajes de informe de errores:

  • Destino inalcanzable
  • Tiempo excedido
  • Fuente para enfriar
  • Problema de parámetro
  • Redireccionamiento

Traceroute utiliza los dos primeros mensajes de informe de errores: destino inalcanzable y tiempo excedido.

  • Traceroute crea un paquete UDP desde el origen hasta el destino con un TTL (Tiempo de vida) = 1
  • El paquete UDP llega al primer enrutador donde el enrutador disminuye el valor de TTL en 1, lo que hace que el TTL de nuestro paquete UDP sea = 0 y, por lo tanto, el paquete se descarta.
  • Al darse cuenta de que el paquete se cayó, envía un mensaje ICMP (Tiempo excedido) de regreso a la fuente.
  • Traceroute toma nota de la dirección del enrutador y del tiempo necesario para el viaje de ida y vuelta.
  • Envía dos paquetes más de la misma manera para obtener un valor promedio del tiempo de ida y vuelta. Por lo general, el primer viaje de ida y vuelta lleva más tiempo que los otros dos debido a la demora en que ARP encuentra la dirección física, la dirección permanece en la caché de ARP durante la segunda y la tercera vez y, por lo tanto, el proceso se acelera.
  • Los pasos que han ocurrido hasta ahora, ocurren una y otra vez hasta que se alcanza el destino. El único cambio que ocurre es que el TTL se incrementa en 1 cuando el paquete UDP se enviará al próximo enrutador / host.
  • Una vez que se alcanza el destino, el mensaje ICMP Tiempo excedido NO se devuelve esta vez porque ya se ha alcanzado el destino.
  • Pero, el paquete UDP utilizado por Traceroute especifica que el número de puerto de destino es uno que generalmente no se utiliza para UDP. Por lo tanto, cuando la computadora de destino verifica los encabezados del paquete UDP, el paquete se descarta debido a que se está utilizando un puerto incorrecto y se envía un mensaje ICMP (esta vez – Destino inalcanzable) de regreso a la fuente.
  • Cuando Traceroute encuentra este mensaje, comprende que se ha alcanzado el destino. Incluso se llega al destino 3 veces para obtener el promedio del tiempo de ida y vuelta.

Referencias

  1. Traceroute – ¿Cómo funciona?
  2. Traceroute – Wikipedia

Windows utiliza una utilidad de traceroute similar a ICMP llamada ‘tracert’.
Los sistemas basados ​​en UNIX, Linux y BSD utilizan un traceroute basado en UDP.

  1. El usuario sentado frente a la computadora BINKY ejecuta el comando tracert en la línea de comando. La línea de comando es el símbolo del sistema de MS-DOS en Windows.
  2. El usuario escribe la palabra tracert seguida de la dirección de destino, que puede ser un nombre o una dirección IP, y presiona la tecla Intro o Retorno en el teclado.

Por ejemplo:

Windows / MS-DOS
c: \> tracert login.oscar.aol.com
3. Binky, ejecutar tracert en una computadora con Windows crea 3 mensajes de eco ICMP (tipo ICMP ‘8’) con el tiempo para vivir en el Encabezado IP configurado en 1 y dirige los paquetes a la dirección IP de la computadora de destino (llamaremos el payaso de la computadora de destino).
4. Binky inicia un temporizador.
5. Binky envía los tres mensajes destinados a payasos a la red.
6. Binky espera una respuesta. Esta respuesta será:
7. Un mensaje de tiempo excedido ICMP: esto significa que el host que responde no es el destino.
8. Un destino ICMP inalcanzable: esto significa que el host que responde no sabe cómo llegar a la dirección IP de destino en los paquetes de traceroute.
9. La computadora en la que mueren los mensajes porque el tiempo de vida expiró (en algún lugar entre Binky y el payaso) envía respuestas ICMP Tiempo excedido (ICMP Tipo ’11’). Estos mensajes indican a Binky que los mensajes de traceroute aún no han llegado al payaso de destino.
10. Binky recibe esos mensajes de Tiempo excedido, anota la hora en que llegaron, compara eso con el momento en que se envió la Solicitud de eco ICMP y muestra los resultados de ese viaje de ida y vuelta en la pantalla.
11. Binky incrementa el TTL en el Encabezado de IP en uno, luego repite los pasos de los seis pasos anteriores (crea 3 paquetes, establece el Tiempo de vida al siguiente número más alto, inicia un temporizador, transmite los paquetes, espera una respuesta). Este proceso se repite hasta que los paquetes llegan a la computadora de destino (payaso) a la que Binky está rastreando la ruta.
12. Cuando la computadora de destino (payaso) recibe los paquetes, envía una respuesta ICMP (tipo ICMP ‘0’) y el programa traceroute se detiene.

¡Hola! Para nuestro desarrollador web Ruslan Bekenev también fue interesante conocer cómo funciona la herramienta de línea de comandos traceroute e implementar la funcionalidad básica. Él cuenta su experiencia con la implementación de Traceroute en su publicación de blog.

Espero que les sea útil!

Es de código abierto. Lee el código. Puede encontrarlo aquí: Traceroute para Linux

Hola,
Eche un vistazo a esta publicación para comprender cómo funciona Traceroute
Página en keyboardbanger.com