16/7/07

Verificando conectividad con Tracert

Recientemente, un lector del blog, me pidio comentar sobre como interpretar los resultados de algunas de las herramientas disponibles desde la línea de comandos, como tracert, route, arp. En respueta le prometi publicar algo al respecto y quiero iniciar con el comando tracert, un comando de mucha utilidad y que junto a ping es uno de los que más utilizo en mi trabajo diario.

En primer lugar me gustaría explicar un poco que es el comando tracert y como funciona, finalmente como podemos interpretar sus resultados y algunos escenarios en los que tracert nos puede ayudar a diagnosticar y resolver problemas en la red.

El comando tracert permite trazar la ruta desde el origne hasta un destino remoto, mostrando todos los routers que hay de por medio y la latencia aproximada en cada salto, esta disponible en la mayoria de sistemas operativos, en windows se le conoce como tracert, en linux y en el IOS de cisco se le conoce como traceroute. En este post se da mayor enfásis a la versión de windows.

Para encontrar los routers intermedios, el tracert se vale de la opción time to live (TTL) de los paquetes IP, el TTL es un campo dentro de un paquete IP que fue diseñado para prevenir loops de enrutamiento (routing loops), una red mal diseñada a con problemas puede generar un loop, en el que un paquete va y viene entre dos routers, para prevenir que un paquete quede atrapado en un loop infinitamente, cada router que recibe un paquete es responsable de reducir el TTL en uno, cuando un router recibe un paquete con TTL de 0, lo descarta y debe responder con un paquete icmp tipo 11 (time to live exceeded).

En base a lo anterior, para encontrar la ruta hacia un destino, el comando tracert lo que hace es generar pings sucesivos hacia el ip destino, con valores de TTL que se van incrementando, el primer paquete ping generado tiene un TTL=1 por lo que el primer router que lo recibe lo descarta y devuelve un paquete icmp tipo 11, en este paquete de respuesta, el ip de destino es el de este primer router, así que ya tenemos la dirección del primer router, en realidad windows genera tres paquetes de ping con ttl=1 y de esta manera produce la salida ya conocida del tracert con tres columnas, los siguientes tres paquetes de ping generados tienen valor TTL=2, con lo que el que respondera será el segundo router, este proceso continua, hasta que se obtiene un icmp echo reply, que es el del destino, en el que estamos interesados.

En la siguiente figura, se ilustra el resultado de un tracert hacia google.com, en este caso el destino esta a 15 saltos, como mencione en el parrafo previo, siempre se generan tres solicitudes de ping, por lo que para cada salto tenemos tres resultados, esto ayuda a determinar la latencia promedio entre cada router, de manera predeterminada windows también trata de resolver el nombre, por lo que en algunos casos además del IP, aparece el nombre del router.


Ahora, volviendo a la pregunta original, como interpretar la salida del tracert, escencialmente lo que nos dice este comando, es los routers que debemos atravezar hacia el destino, para cada caso nos proporciona el IP (y en algunos casos el nombre) de los routers intermedios, y también nos da un estimado de la latencia.

Cuando utilizar tracert?, supongamos que no podemos llegar hasta un sitio remoto, si hacemos un ping hacia la dirección de este sitio y no responde, el siguiente paso es un tracert, el cual determinara el punto donde se deja de recibir una respuesta, puede ser un router local, o un router en el camino, el tracert nos dirá cual es el router con problemas.

Lo anterior es el uso más común del tracert, pero hay otros, suponiendo que el tiempo de respuesta es muy lento, un tracert puede ayudar a determinar el punto donde se está experimentando alta latencia y en base a este resultado investigar más a fondo, otro uso interesante, es por ejemplo en una red privada en la que se tiene más de una vía de llegada, por ejemplo un enlace principal y otro de backup, un tracert nos puede decir de manera rápida si estamos llegando al sitio a través del enlace principal, o del enlace de contingencia.

También me gustaría hacer algunas advertencias, algunos routers bloquean el paso del tracert, por lo que los resultados no siempre son confiables, especialmetne al trazar rutas en internet, de igual manera algunos routers dan baja prioridad a los paquetes icmp, por lo que los resultados de latencia no siempre van a ser confiables.

Creo que la mayor utilidad del tracert esta en una red privada, donde podemos establecer el comportamiento normal de la red, que saltos tenemos hacia el destino, que latencias aproxiamadas tenemos, en estos casos, a la hora de tener problemas, el tracert es una herramientas invaluable.

Para ver las opciones disponibles en la línea de comando, favor consultar el siguiente documento para un troubleshooting más avanzado, también se puede utilizar el comando pathping, y si te interesa ver como funciona el tracert en la vida real, te sugiero capturar tráfico en tu máquina utilizando wireshark en el momento de hacer un tracert, el resultado habla por si solo.
Publicar un comentario