Cómo funciona el comando traceroute ?

Introducción
Habitualmente requerimos hacer algunos diagnósticos en redes y utilizamos el comando traceroute pero desconocemos como es su funcionamiento interno y el porqué de sus resultados.
Traceroute es una herramienta que viene incluida en casi todos los sistemas operativos y permite conocer las rutas seguidas por un paquetes desde que se originó y hasta que llegó a su destino, conociendo los routers intermedios por los que paso el paquete.

# traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  maxi.internet.local (192.168.10.1)  5.564 ms  5.555 ms  5.559 ms
 2  int-200-55-41-2.dynamic.intercity.net.ar (200.55.41.2)  18.368 ms  18.677 ms  18.837 ms
 3  200-55-38-17.static.impsat.net.ar (200.55.38.17)  25.614 ms  25.630 ms  27.811 ms
 4  200-49-15-177.static.impsat.net.ar (200.49.15.177)  38.591 ms  38.594 ms  38.599 ms
 5  ge5-2-108-1000m.cr3.ats1.eze.gblx.net (67.17.93.241)  38.633 ms  38.651 ms  40.760 ms
 6  so0-1-3-2488m.scr1.eze1.gblx.net (67.16.160.217)  41.532 ms  28.395 ms  29.801 ms
 7  te-1-1-10g.asr1.eze1.gblx.net (67.16.132.170)  42.353 ms te-1-2-10g.asr1.eze1.gblx.net (67.17.67.26)  38.208 ms  43.967 ms
 8  64.208.27.34 (64.208.27.34)  40.040 ms  40.025 ms  42.328 ms
 9  209.85.251.28 (209.85.251.28)  42.278 ms 209.85.254.70 (209.85.254.70)  35.310 ms 209.85.251.28 (209.85.251.28)  35.223 ms
10  209.85.251.25 (209.85.251.25)  54.433 ms 209.85.252.6 (209.85.252.6)  52.348 ms  52.331 ms
11  72.14.233.89 (72.14.233.89)  56.773 ms 72.14.233.93 (72.14.233.93)  71.941 ms 72.14.233.89 (72.14.233.89)  56.745 ms
12  64.233.175.58 (64.233.175.58)  66.296 ms  52.528 ms  52.661 ms
13  google-public-dns-a.google.com (8.8.8.8)  50.825 ms  53.370 ms  53.506 ms

Como vemos están los routers por lo que paso el paquete desde que se originó en mi PC hasta que llegó hacía Google Public DNS. Pero como funciona el comando para poder descubrir los dispositivos intermedios?.

Funcionamiento

Para hacer la traza se utiliza el encabezado  de un paquete IP llamado TTL (time to live), éste es un contador que va decrementando su valor a medida que tiene un salto (hops), es decir que ha pasado por un router. Cuando el valor llega a 0, el paquete se descarta y se envía un ICMP de vuelta al host que originó el paquete; esto permite que no quede un paquete dando vueltas en un bucle y lo elimina. Al envía el paquete de retorno, el IP origen es el router mismo, con lo cual se conoce el IP del salto.

traceroute se aprovecha de este funcionamiento y envía un paquete con un TTL de 1 para asegurarse que solo tenga un salto y luego recibir un paquete ICMP tipo 11 (time exceeded) desde el primer salto que tengamos.

Luego manda otro paquete con TTL de 2, entonces el paquete pasa por el primer router del cual ya se tiene registro y el segundo le debería enviar otro ICMP para informar el TTL agotado.

En caso de que no se reciba el paquete dentro de ciertos limites (por defecto es 5) simplemente se marca ese salto con un asterisco y se continúa con el hop siguiente.

Por: Maximiliano Dobladez
Bajo Licencia CC 2.5 – Attribution-Noncommercial-No Derivative