top of page

Traceroute: ¿qué es y como funciona?

  • jogofus
  • 3 jul 2024
  • 3 Min. de lectura

Estoy seguro de que todos -y cuando digo todos es todos- nos hemos visto en la situación de comprobar si los paquetes que envía un equipo va por donde debería o, en caso de que no llegue a su destino, poder comprobar dónde se pierde ese paquete.


Y esta es básicamente la función de traceroute: nos dice todos los saltos (o hops) que recorre un paquete en una red. De esta forma, tendremos una pequeña visual de las rutas que sigue y poder así resolver cualquier problema que surgiera.


ree

Funcionamiento de traceroute


Todos los paquetes IP tienen un valor TTL. Generalmente, el TTL de los Linux están en 64 y de los Windows es 126. (Esto es un pequeño secreto, no infalible, para detectar qué SO tiene el equipo cliente).


¿Qué significa TTL? Literalmente significa Time to live o tiempo de vida.

Un router (o un firewall) es un salto en el trayecto que existe entre origen y destino. Cada vez que un paquete tiene un salto, el TTL se reduce en uno.


¿Para qué nos sirve esto? Cuando ejecutamos traceroute se envían paquetes TTL=TTL+1, empezando con un primer paquete con TTL=1. Cuando el paquete llega al primer salto, este TTL se reduce a 0, por lo que se genera un mensaje ICMP de tipo "Time excedeed", devolviéndose así al dispositivo de origen. De esta forma, el origen registra la dirección IP del router que ha envíado el mensaje ICMP.

Ahora, el dispositivo origen envía un paquete con TTL=2. Es por eso que he puesto al principio TTL=TTL+1, porque a cada salto se le añade 1 al TTL anterior.


ree

Por norma general, el número máximo de saltos que se contempla son 30, más que suficientes en cualquier red, ya sea interna o en internet.


Al ejecutar traceroute, esto es lo que se vería:


ree

Como se ve en la imagen, se lanzan tres paquetes distintos por cada destino, dando así su RTT, que no es más que el tiempo que tarda en ir y volver el paquete enviado, permitiéndonos así sacar métricas y comprobar si la red está funcionando correctamente.

Diferencias entre Windows y Linux: ¿tracert o traceroute?


Aquí tenemos una pequeña diferencia según el sistema operativo en el que lo ejecutemos.


La primera es la nomenclatura: en Windows se utiliza tracert, mientras que en Linux es traceroute (sin contar sus variantes como MTR).


La otra diferencia, y creo que la más significativa es que traceroute -en Linux- por defecto usa UDP, apuntando a los puertos del 33434 a 33534.

ree

En la imagen podemos ver como desde nuestro equipo tratamos de llegar al destino con los puertos anteriormente indicados y recibimos un TTL exceeded.


En Windows, por el contrario, usa paquetes ICMP tradicionales.

Igualmente, si en Linux queremos usar ICMP en lugar de UDP porque hay alguna política que prohíbe la comunicación UDP pero no los ping, podemos forzar a usarlo con de la siguiente forma:

traceroute -I google.com

Los asteriscos, ¿qué significan?

Los asteriscos no siempre son preocupantes. En la gran mayoría de ocasiones significan que el destino al que se está intentando acceder (por lo general son routers de internet) no están permitiendo enviar paquetes ICMP de TTL exceeded. Si vemos que ya no se recibe ninguna respuesta de ningún otro salto significará que el último router que ha contestado no está pudiendo enrutar correctamente, ya sea por alguna política, porque no conoce la ruta o porque no tiene conexión.



Y eso es todo por hoy.

¡Entrada corta pero creo que necesaria!


 
 
 

Comentarios


bottom of page