Geek & Roll - Blog Archive » La historia del comando PING

La historia del comando PING

Cesar February 22nd, 2007 geekandroll Haz un comentario

Prácticamente todos los que hemos trabajado con sistemas en red alguna vez hemos utilizado el comando ‘ping’. Ya sea para verificar que una computadora puede “ver” a otra, o para determinar que tan rápida (o lenta) es la comunicación entre las dos computadoras. Sin importar si usamos Windows o algún sabor de UNIX, este comando se encuentra en nuestro sistema operativo por defecto.

Bueno como todo en esta vida, el comando UNIX ‘ping’ tiene su historia y una muy interesante. ¿Alguna vez se han preguntado porque se llama ping? (traducido de la historia del autor de ‘ping’)

El nombre viene del sonido que hace un sonar, inspirado por el principio de localización por eco. En universidad hice mucho modelado de sistemas de sonar y radar, por lo tanto la analogía de “ciberespacio” me pareció muy correcta. Es exactamente el mismo paradigma aplicado a un nuevo dominio del problema: ping usa paquetes ICMP ECHO_REQUEST y ECHO_REPLY enviados con cierta frecuencia para probar la “distancia” entre dos computadoras.

¿Pero como funciona ping?

Ping usa ICMP (Internet Control Message Protocol) el cual es un protocolo de la suite que forman a Internet. Se dice que ICMP se encuentra entre las capas de transporte (donde está TCP y UDP) y la de red (donde está IP). La peculiaridad de ICMP es que este protocolo no posee su propia unidad de datos, a diferencia de TCP que tiene sus paquetes, o IP que tiene sus datagramas. Los mensajes ICMP se envían embebidos en los datagramas IP.

La palabra ‘Control’ en ICMP indica que de alguna manera ICMP sirve para manejar algo, ¿pero que? ICMP se utiliza principalmente para notificar de errores ocurridos en el ruteo de paquetes. Digamos que es una manera de que el centro (core) de la red notifique alguna situación anómala como congestionamiento, o que algún host se encuentra caído en ese momento.

ICMP normalmente no es utilizado directamente por aplicaciones, pero una clara excepción a la regla es ‘ping’ (y traceroute también por cierto). De una manera bastante “hacky”, lo que hace ‘ping’ es construir datagramas IP con un TTL muy bajo, para que cuando el datagrama llegue al primer ruteador, este genere un mensaje ICMP del tipo “TTL excedido”. Cuando el mensaje ICMP llega al cliente (el comando ping) el ruteador ha descubierto su dirección IP y por medio de DNS se puede saber su nombre.

Y la historia de porque fue programado (también traducido del original):

Mi ímpetu original para programar PING para un sistema 4.2a BSD UNIX vino de un comentario del Dr. Dave Mills en Julio de 1983 mientras atendíamos una sesión de DARPA en Noruega, en la cual él describió un trabajo que había hecho en sus sistemas “Fuzzball” LSI-11 para medir el retardo de un camino utilizando paquetes eco ICMP regulares.

En Diciembre de 1983 me encontré con un comportamiento extraño de la red IP en BRL. Recordando los comentarios del Dr. Mills, rápidamente programé el programa PING, que consistía en abrir un socket Berkeley ICMP SOCK_RAW AF_INET. El código compiló bien, pero no funcionaba — ¡no había soporte del kernel para sockets ICMP crudos! Programé entonces el soporte para el kernel y terminé todo el trabajo antes del amanecer. Sin embargo, Chuck Kennedy (alias “Kermit”) había encontrado y arreglado el hardware de red problemático antes de que pudiera enviar mi primer paquete “ping”. Pero lo he usado algunas veces desde aquel entonces. Si hubiera sabido que ese programa sería mi más famoso trabajo en mi vida, probablemente hubiera trabajado en él por más tiempo y agregado algunas opciones extra.

Para más cosas ‘ping’, pueden visitar el sitio del autor de esta imprescindible herramienta de red. Además de la historia original y el código fuente para ‘ping’, se encontrarán con una reseña del libro para niños: “La historia sobre PING” que trata de un pato (nada que ver con redes) pero aún así un cliente de Amazon hizo un comentario bastante gracioso sobre el libro.

Así que ya lo saben. La próxima vez que usen ‘ping’, piensen en su lado humano. :)

¡Hasta la proxima!

Haz un comentario:

Es necesario que dejes tu nombre y correo electrónico (no se publicarán).

Si dejas un comentario anónimo, con insultos o ajeno al tema, iremos hasta tu casa y le diremos a tu mamá la cantidad de porno que hay en tu computadora. Si, lo sabemos.