¿Cómo funciona exactamente traceroute / tracert a nivel de protocolo?

Vea un diagrama de ejemplo de todo el proceso en el siguiente diagrama, donde un remitente realiza un trazado de ruta hacia uno de los servidores en una ubicación remota.

Entonces, digamos que quiero hacer un traceroute al servidor DNS disponible públicamente de Google (8.8.8.8). Mi comando traceroute y su resultado se parecerán a los siguientes.

[email protected] :~# traceroute -n 8.8.8.8

traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets hops max, 60 byte packets

1 192.168.0.1 6.768 ms 6.462 ms 6.223 ms

2 183.83.192.1 ms 5.543 ms 5.288 ms

3 183.82.14.5 5.078 ms 6.755 ms 6.468 ms

4 183.82.14.57 20.789 ms 27.609 ms 27.931 ms

5 72.14.194.18 17.821 ms 17.652 ms 17.465 ms

6 66.249.94.170 19.378 ms 15.975 ms 23.017 ms

7 209.85.241.21 16.633 ms 16.607 ms 17.428 ms

8 8.8.8.8 17.144 ms 17.662 ms 17.228 ms

Veamos qué pasa debajo del capó. Cuando disparo ese comando de traceroute -n 8.8.8.8 , lo que hace mi computadora es hacer un paquete UDP (Sí, es UDP. No se preocupe, discutiremos esto en detalle). Este paquete UDP contendrá lo siguiente.

  • Mi dirección de origen (que es mi dirección IP)
  • Dirección de destino (que es 8.8.8.8)
  • Y un número de puerto UDP de destino que no es válido. Significa que la utilidad traceroute enviará un paquete a un puerto UDP en el rango de 33434 a 33534, que normalmente no se utiliza.

Entonces, veamos cómo funciona esto.

Paso 1: Mi dirección de origen creará un paquete con la dirección IP de destino 8.8.8.8 y un número de puerto de destino entre 33434 y 33534. Y lo importante es que haga que el valor TTL 1

Paso 2: Por supuesto, mi paquete llegará a mi servidor de puerta de enlace. Al ver la recepción del paquete, mi servidor de puerta de enlace reducirá el TTL en 1 (Todos los enrutadores / saltos intermedios hacen este trabajo de reducir el valor TTL en 1). Una vez que el TTL se reduce en el valor de 1 (1-1 = 0), el valor TTL se convierte en cero. Por lo tanto, mi servidor de puerta de enlace me devolverá un mensaje de tiempo excedido TTL. Recuerde que cuando mi servidor de puerta de enlace me devuelve un mensaje de TTL excedido, me enviará el primer encabezado de 28 bytes del paquete inicial que envío.

Paso 3: Al recibir este mensaje de tiempo excedido TTL, mi programa traceroute conocerá la dirección de origen y otros detalles sobre el primer salto (que es mi servidor de puerta de enlace).

Paso 4: Ahora el programa traceroute volverá a enviar el mismo paquete UDP con el destino 8.8.8.8 y un puerto de destino UDP aleatorio entre 33434 y 33534. Pero esta vez haré el TTL inicial 2. Esto se debe a que mi enrutador de puerta de enlace lo reducirá en 1 y luego reenviará el mismo paquete que se envía al siguiente salto / enrutador (el paquete enviado por mi puerta de enlace a su próximo salto tendrá un valor TTL de 1).

Paso 5: Al recibir el paquete UDP, el siguiente salto a mi servidor de puerta de enlace lo reducirá nuevamente a 1, lo que significa que ahora el TTL se ha convertido nuevamente en 0. Por lo tanto, me devolverá un mensaje ICMP Tiempo excedido con su dirección de origen, y También el primer encabezado de 28 bytes del paquete que envío.

Paso 6: Al recibir ese mensaje de tiempo excedido TTL, mi programa traceroute conocerá esa dirección IP de hop / routers y lo mostrará en mi pantalla.

Paso 7: Ahora, nuevamente, mi programa traceroute creará un paquete UDP similar con nuevamente un puerto udp aleatorio con la dirección de destino 8.8.8.8. Pero esta vez el valor ttl se establece en 3, de modo que el ttl se convertirá automáticamente en 0 cuando llegue al tercer salto / enrutador (recuerde que mi puerta de enlace y el siguiente salto lo reducirán en 1). Para que me responda con un mensaje de tiempo excedido TTL, y mi programa traceroute conocerá esa dirección IP de hop / routers.

Paso 8: Al recibir esa respuesta, el programa traceroute volverá a hacer un paquete UDP con un valor TTL de 4 esta vez. Si obtengo un tiempo TTL excedido para eso también, entonces mi programa traceroute enviará un paquete UDP con TTL de 5 y así sucesivamente.

Pero, ¿cómo sabrá mi programa de traceroute que el destino final de 8.8.8.8 ha llegado? El programa traceroute lo sabrá porque, cuando el receptor original del paquete 8.8.8.8 (recuerde que todos los paquetes UDP tenían una dirección de destino 8.8.8.8) recibe la solicitud, me enviará un mensaje que será completamente diferente. de todos los mensajes de “Tiempo excedido TTL” .

Podrá entender esto al visitar este sitio web: ¿Cómo funciona Traceroute?