12 octubre, 2007

CSI VII: Cómo funciona Internet (II)

No tenía pensado escribir una segunda parte de este tema. Me parecía que ya había quedado más o menos claro el funcionamiento de Internet en el anterior post. Craso error. No queda nada claro, excepto para mí, que ya lo entiendo. A alguien que lo está leyendo le parecerá que ni siquiera tiene nada que ver con Internet. Por eso en este segundo post me propongo explicar qué es lo que quería decir con un sencillo ejemplo, tomado de la vida misma. Es decir, nada de metáforas.

En el anterior post lo que quería explicar es que, para comunicarnos entre distintas redes (como Internet) necesitamos información de nuestra red. En especial dónde hay un dispositivo encaminador que conozca otras redes (router), información acerca de la dirección destino (dirección IP), unas reglas sobre cómo se producirá la comunicación (que llamamos transporte) y un lenguaje común a ambos para entender qué deseamos del otro: a esto se le llama protocolo de aplicación. Estructuramos esta información en capas, de manera que, si cambiamos una de ellas, no tenemos porqué cambiar las que están por debajo o por encima. Veamos cómo queda.


Uno de los protocolos de aplicación más útiles, usados y conocidos es DNS (Domain Name System). Aunque DNS puede servir para más cosas, su función principal en Internet es proporcionar las direcciones IP de los nombres de equipo. Por ejemplo, tomemos el nombre de equipo google.es al que accedemos desde España. Pero ya sabemos que en Internet los equipos se identifican con números, direcciones IP. La traducción de este nombre, sencillo de recordar, a dirección IP la realizan los servidores DNS. En este caso, la dirección IP es 72.14.207.191 (aunque lo más seguro es que haya más de una IP para este nombre).

DNS da para muchos posts. Diremos sólo que el servicio funciona de forma jerárquica. Probablemente tendremos un servidor DNS cercano y a éste irán nuestras preguntas del tipo "¿qué dirección IP tiene www.talmaquina.com?". Si nuestro servidor cercano lo sabe, perfecto. Pero si no, él tiene un servidor DNS por encima y le pregunta a éste. "¿Oye, tú sabes qué dirección IP tiene www.talmaquina.com?". Si ese servidor no lo sabe, contestará algo así como: "No, ni idea, pero pregunta a 'Otro servidor' que sabe más'". ¡Lo típico cuando preguntamos direcciones!. Y así va preguntando hacia arriba. Y arriba de todo están los super-servidores DNS de primer nivel, de los cuales hay 13 distribuidos geográficamente de forma equitativa: 7 en EE.UU. y el resto desperdigados.

Volvamos a lo nuestro, supongamos que yo tecleo el nombre de una dirección web en mi navegador: www.dimequenoexiste.com. ¿Qué es lo que pasará? Que mi navegador tratará de averiguar cuál es la dirección de la máquina con ese dominio para contactar con ella y pedirle una página html, típicamente. Para eso, efectuará una petición DNS.

La petición que quiero mandar al servidor DNS es: "¿qué dirección IP tiene www.dimequenoexiste.com?". Esa pregunta la codifico según el protocolo DNS. DNS, por otro lado, funciona sobre el protocolo de transporte UDP. Recordemos que los protocolos de transporte servían para añadir cierta coherencia al lío de la fragmentación de paquetes que se producía al gastar IP, y al hecho de que podían llegar desordenados o perderse. UDP no ofrece tanta garantía como TCP, es más sencillo: apenas añade información del número de puerto para identificar el servicio (ahora DNS). Metemos la información DNS dentro del paquete UDP. Toda esa información la meteremos en un paquete IP, para que viaje por Internet. Como yo me conecto a Internet gracias a una red Ethernet, tendré que meter el paquete IP dentro de una trama Ethernet. El controlador de Ethernet (que está en la tarjeta de red) se encarga de codificar esos unos y ceros de la mejor manera para transmitirlos.

En total, 5. 5 niveles, que fueron los explicados en el anterior post. En la imagen vemos como se forma cada paquete y se mete en el del nivel inferior. Al navegador que gastamos, por ejemplo, la información acerca de las direcciones Ethernet utilizadas le importa un pimiento. De ahí que podamos hacer navegadores sin preocuparnos de esta cuestión.

Una vez hecha la pregunta, el servidor nos contestará gastando el mismo protocolo DNS. En la segunda imagen podemos ver la respuesta1. Podemos identificar los distintos paquetes de información de la respuesta. Arriba Ethernet, luego IP, luego UDP y luego DNS. Abajo vemos todos los bits del mensaje, en forma hexadecimal.

Nos podemos fijar, por ejemplo, en que la parte Ethernet hay un identificador que nos dice que el mensaje que contiene es IP (Type 0x0800). Asimismo, en el mensaje IP vemos que hay un identificador que nos dice que el mensaje que transporta es de tipo UDP (Protocol UDP: 0x11). Y que en el mensaje UDP, el puerto de origen 53 identifica el servicio que lo envía: DNS. La respuesta proporcionada por DNS es clara: No such name: ese nombre solicitado, www.dimequenoexiste.com, no existe.

Si hubiese pedido una página html a un servidor HTTP, sería muy parecido. Pero gastaría TCP en vez de UDP, ya que hay que manejar mayor intercambio de información y es necesaria cierta coherencia en la comunicación. Y por encima de TCP gastaría HTTP. Pero el formato por debajo no cambiaría.

Pues más o menos así funciona Internet (o así nos dicen que funciona). En general, el servicio proporcionado por los protocolos de transporte TCP o UDP se queda demasiado corto para aplicaciones, cada vez más usadas, de vídeo bajo demanda, televisión por Internet, videoconferencias... y es necesario ingeniar otros protocolos.

Hasta IP se está quedando limitada. La nueva versión IPv6 permite no sólo más direcciones en el mundo (las actuales se habrían acabado de no ser por ciertos trucos que hemos inventado) sino también permiten un sistema de prioridades y hasta soporte para reserva de ancho de banda. Es decir, identificar la importancia de la comunicación y darle un canal dedicado para mejorar la calidad de servicio. Pero poco a poco. Si ni siquiera esto nos lo enseñan en la carrera de Informática a todos los alumnos (depende de las intensificaciones), ¡menos aún voy a empezar por ahí en este blog!

1 He ocultado información acerca de las direcciones Ethernet e IP. No porque desconfíe de los lectores del blog. Es que hay mucha gente rara suelta en Internet.

Enlaces del texto
Captura realizada con Ethereal, un conocido analizador de paquetes.

Posts relacionados

1 cosillas:

Silvia dijo...

Esta vez sí! Con el anterior post sobre internet me pude hacer una idea de la cantidad de información que hace falta para que uno pueda, por ejemplo, visitar este blog. Pero para alguien a quien nunca se la ha ocurrido abrir la torre del ordenador y ver que hay dentro, esto no es suficiente. Por eso me ha quedado mucho más claro con este post, aunque hayan hecho falta un par de lecturas!

Saludos !Hasta otra!