viernes, 9 de diciembre de 2016

TCP/IP (7): Introducción al rutado IP

Cómo encontrar la mejor ruta, la eterna pregunta.

Nota lingüística: La palabra correcta en castellano para tomar un camino es encaminar, pero en estos artículos seguiremos la jerga informática rutado o enrutamiento, por ser lo habitual en los textos técnicos.
La separación de tareas entre los distintos protocolos es básica para cualquier sistema de red. Se trata de una versión moderna del clásico divide y vencerásEn el caso de TCP/IP, este reparto de tareas ha sido una de las claves de su éxito, que ha hecho que tres décadas después sigan siendo la base de nuestra vida digital. 

Ya vimos en los anteriores artículos que TCP se encarga de negociar la conexión entre los extremos finales y de asegurarse que el flujo de datos llega a su destino intacto y en el orden correcto.

Hoy vamos a ver la otra cara de la moneda. En este caso, el protocolo IP (Internet Protocol) se encarga de encontrar la ruta (saltos intermedios) entre los dos extremos e ir entregando los paquetes uno a uno y paso a paso en dicha ruta.

IP sólo entiende de paquetes (datagramas en la literatura original). No tiene el concepto de conexión entre extremos. Se encarga de entregar cada paquete individual a su destinatario. La ruta no es mantenida ni recordada, sino que cada paquete se entrega por separado, y por consiguiente suele pasar que no sigan la misma ruta y que no lleguen ordenados. 

Haciendo una analogía, TCP sería el vendedor que negocia la venta con el cliente y se asegura de que recibe la mercancía, mientras que IP sería el mensajero que lleva el paquete a la dirección de destino y decide la ruta sin importarle los detalles de la venta o cuántos paquetes se han acordado.

Este planteamiento es muy diferente de otros protocolos orientados a la conexión, como por ejemplo la red de telefonía. En esos instantes que pasan desde que marcamos un número de teléfono hasta que comienza la llamada, se produce la negociación de una ruta fija que va a mantenerse durante toda la llamada. Eso es muy distinto a lo que ocurre cuando pedimos una descarga por Internet.

Buscando caminos

La tarea de encontrar el camino para llevar un datagrama a su destino se llama rutado, enrutamiento o encaminamiento (routing).


IP supone que cada equipo está unido a una determinada red local. Se da por sentado que puede enviar datagramas a máquinas de su misma red de forma natural. A esto le podemos llamar rutado interno o entrega directa, porque está completamente contenido en los mecanismos de la red física. Sin embargo, cuando es necesario enviar un datagrama a una máquina de otra red diferente, entran en acción las pasarelas (gateways), en lo que podemos llamar rutado IP o entrega indirecta. El rutado en la red de redes (o rutado IP) es análogo al rutado en la red local, porque busca un camino por el que enviar los datos; sin embargo se diferencia en que debe atravesar varias redes físicas heterogéneas.
Para saber cuándo debe usar la entrega directa y cuándo hacer uso de una pasarela, el nodo emisor debe comparar su dirección con la del destinatario. Si la parte denominada netid (identificador de red) coincide, es que están en la misma red y, por lo tanto, se debe usar la entrega directa. 

Esta operación es muy eficiente, porque se basa, como veremos, en la aplicación de una operación AND a los bits de la dirección IP. Esto se realiza con una única instrucción de código máquina.

Cada dirección IP (en su versión 4, que es la más extendida) tiene 32 bits, que suelen escribirse usando cuatro números de 8 bits cada uno. Una parte de esos bits identifican la red (netid) y el resto identifican al nodo (dispositivo individual). 


La máscara de subred es una serie de bits tal que, aplicada la operación AND, generan el netid a partir de la dirección IP. En la figura se muestra un ejemplo de aplicación de la máscara.

En próximos artículos nos extenderemos en las clases de direcciones que existen y también veremos cómo cambian el direccionamiento en la versión 6 del protocolo.
Pasarelas
Una pasarela (gatewayes un sistema que conecta una red con una o más redes diferentes. En teoría, pueden ser ordenadores que se ocupen de otras cosas, aparte de este trabajo. Básicamente puede serlo cualquier máquina que esté conectada a dos o más interfaces de red. 
En la práctica, al equipo que hace la función de pasarela se le suele llamar router, aunque este suele incluir otras funciones y dicha denominación se presta a confusión. En este texto usaremos el término pasarela, que es el concepto funcional clásico que utilizaron los creadores de IP.
Ejemplo rutado IP
IP está pensado para que cada interfaz tenga su propia dirección. P.e., tenemos una máquina que está conectada a las redes 128.6.4 y 128.6.3; esto significa que puede ser capaz de recibir un datagrama de una de ellas y reenviarlo a la otra. Esto es posible porque posee dos direcciones; una para cada red. En cada caso, la máquina que le envía el datagrama lo hará con la dirección que le corresponda en su red.

Si bien cualquier sistema de uso general puede hacer de pasarela, para lograr mayor eficiencia, se usan sistemas dedicados, con un hardware especializado. Los algoritmos de rutado se programan en esas máquinas directamente en el firmware y en chips especializados de una manera extremadamente eficiente.
Rutado controlado por tabla
Las dos preguntas fundamentales en el rutado IP son: ¿Cómo sabe un nodo qué pasarela usar para llegar a un destino determinado? y ¿cómo sabe una pasarela a dónde enviar un datagrama?
En una red de redes TCP/IP, los nodos finales también intervienen en el rutado. Concretamente, cuando un nodo genera un datagrama, decide en primera instancia a qué pasarela va a dirigirlo. Cada pasarela puede proporcionarle un mejor camino hacia determinados destinos.
Cada sistema tiene una tabla de direcciones de redes, cada una asociada al gateway mejor situado para enviar algo a dicha dirección. La tabla contiene básicamente pares de direcciones (R, G), donde G es la dirección del siguiente gateway en el camino hacia la red R. El sistema usará dicho gateway en cada envío que tenga que hacer a esa red.

En el ejemplo de la figura, una máquina de la red 128.6.3 tendrá como mejor pasarela al 128.6.3.12, para cualquier comunicación fuera de la red local. Por otra parte, cualquier sistema de la red 128.6.4, usará el 128.6.4.1 como primer paso. Luego, el datagrama será reenviado a través del mencionado 128.6.3.12.
Este mecanismo de rutado se llama rutado con salto al siguiente porque cada pasarela sólo especifica un paso en el camino hacia el nodo destino; no tiene que saber el camino completo. Es necesario, además, que el gateway al que apunta cada paso siguiente pueda ser alcanzado a través de una sola red física.
La tabla de acceso suele también contener información que servirá a los algoritmos de rutado para medir lo "lejana" que está la red de destino; esto se llama métrica (metric). En el caso más básico, la métrica corresponde simplemente en contar el número de pasarelas que habrá de atravesar el mensaje.
Las tablas de rutas son el corazón del sistema de rutado; de hecho, los diferentes algoritmos no son más que formas más o menos sofisticadas de configurar y mantener dichas tablas.
Las entradas de la tabla de rutas pueden tener diferentes características. Se pueden diferenciar:
* Entradas referentes a redes y subredes, o en casos especiales las que se refieren a un sólo nodo.
* Entradas que tienen como destinatario a una pasarela, o a un nodo concreto.
* Entradas que se han añadido directamente a la tabla, o aquellas que se han puesto automáticamente a petición de una pasarela, por medio de un ICMP redirect (lo veremos en otro artículo). Estas entradas se llaman dinámicas.
* Entradas activas (up), o que se han desactivado (down) por problemas con las conexiones.
Optimización de las tablas de rutas
Si un sistema tuviese una tabla de rutas con entradas para los miles de redes que hay en Internet, ésta se haría demasiado grande. Además, es inútil tener una tabla así cuando muchas redes sólo acceden al "mundo exterior" por una o dos pasarelas.
La solución es tener rutas por defecto de las que hacer uso cuando no se posea ninguna referencia en la tabla para una dirección dada.
Cuando hay varias pasarelas en una red, éstas deben de tener alguna manera de avisar a un nodo de que, para una determinada dirección, no es la mejor opción. Esto se hace mediante el protocolo ICMP (Internet Control Message Protocol).
El procedimiento es el siguiente:
  1. Un nodo quiere enviar un datagrama a una determinada dirección.
  2. Como no posee entrada en su tabla para esa dirección, lo envía a su pasarela por defecto.
  3. Este reconoce que no es el mejor camino, y reenvía el datagrama a otra pasarela de la misma red.
  4. Una vez hecho esto, envía un mensaje vía ICMP al nodo origen diciendo: "No soy el mejor gateway para acceder a la red 18, usa mejor el 128.6.4.1". Este mensaje se llama "ICMP redirect".
  5. El software de red añadirá entonces una entrada en la tabla para que los próximos mensajes hacia la red 18 sean enviados directamente a la pasarela 128.6.4.1.
Así pues, la mayoría de los sistemas empiezan a trabajar con pasarelas por defecto, para luego ir dejando que sean las propias pasarelas los que les vayan diciendo las mejores rutas.

Ejemplo de tabla de rutas

Como ejemplo de una tabla de rutas muy simple, nada mejor que la de nuestro propio PC. Para verla, sólo tienes que abrir una línea de comandos y ejecutar "route list" (Windows) o "sudo route -n" (Linux). En el resultado encontraremos, entre otras cosas algo así:

  
En esta tabla hay dos interfaces de red:

  • 192.168.1.171 es la interfaz real (en este caso el adaptador WiFi).
  • 127.0.0.1 es el "loopback" o "localhost", un bucle por el cual cualquier aplicación puede comunicarse con el propio PC.
Todos los enlaces "en vínculo" son los que son accesibles directamente, mientras que la puerta de enlace 192.168.1.1 es la pasarela del router inalámbrico al que estoy conectado, y que me da salida a cualquier dirección IP (0.0.0.0). Este es el "gateway por defecto", que en esta configuración tan simple es el único que tengo.

Unas direcciones IP especiales son las 192.168.1.255 y 255.255.255.255, que son el "broadcast" o "difusión", que pueden usar mi equipo cuando quiera que cualquiera dentro de la red local le escuche. Esto se usa en muchas aplicaciones requieren "descubrir" lo que hay en la red, como las de compartir archivos.
Por últmo, otra dirección especial es 224.0.0.0, la cual se usa para "multicast", que también tendrá su artículo próximamente.

No hay comentarios:

Publicar un comentario

Expresa tu opinión respetando a los demás y a unas mínimas reglas del lenguaje castellano.