Ruteo de paquetes IP

Como se describió previamente, la principal responsabilidad del protocolo IP es determinar qué camino deben tomar los paquetes para llegar al punto de destino. La tarea de determinar ese camino es lo que se conoce como ruteo (o encaminamiento).

IP asume que la computadora está directamente conectada a una red local (por ejemplo, una LAN Ethernet) y que puede enviar paquetes directamente a cualquier otra computadora sobre esa misma red; si la dirección de destino es en la red local, IP simplemente accede al medio físico de transmisión y envía el paquete. En la figura siguiente, Antares y Rigel están sobre la misma red, por lo que pueden comunicarse directamente:

 

El problema aparece cuando la dirección de destino queda en otra red, en cuyo caso IP recurrirá a un gateway para enviar indirectamente los paquetes. Como se recordará, se denomina gateway19 a un dispositivo (ya sea otra computadora o un dispositivo específicamente diseñado a tal efecto) que está conectado a más de una red y tiene la capacidad para redirigir (forward) paquetes entre esas redes. En la figura, Orión, Andrómeda, Cygni y Centauri son los gateways de la red.

Para determinar a qué gateway deberán enviarse los paquetes, IP extrae la dirección de red del nodo de destino y consulta una tabla, denominada tabla de ruteo, en la cual se listan las redes conocidas y los gateways que pueden utilizarse para alcanzarlas. Por ejemplo, la tabla de ruteo de Aldebarán contiene la siguiente información:

Red

Gateway

170.25.1.0

170.25.3.254

170.25.2.0

170.25.3.254

170.25.3.0

*

170.25.4.0

170.25.3.253

en donde el asterisco indica que no es necesario ningún gateway para llegar a la red en cuestión dado que la máquina tiene conexión directa a la misma. Obsérvese en primer lugar que el ruteo hacia redes remotas se realiza en base a direcciones de red (esto es, la parte de host de la dirección IP se ignora); además, la tabla de ruteo especifica tanto la red local como las remotas, y que para el caso de éstas últimas, indica la dirección IP de alguna máquina en la red local que puede ser utilizada para alcanzarla.

Supongamos, por ejemplo, que Altair requiere enviar datos a Canopus. El módulo IP de Altair determina que la computadora de destino no pertenece a su misma red; consultando su tabla de ruteo, determina que puede llegarse a la red de Canopus a través de Orión, por lo que le envía los paquetes a dicha computadora. El módulo IP residente en Orión, por su parte, sabe que para llegar a Canopus hay dos vías posibles: pasando por Andrómeda o por Cygni. Aplicando algún criterio para evaluar ambas rutas y seleccionar la mejor de ellas, Orión envía cada paquete a, por ejemplo, Andrómeda. Esta última determina que la dirección de destino está en una de las redes a las que se encuentra directamente conectada, por lo que los envía diretamente a Canopus.

Es importante observar que la ruta que seguirán los paquetes desde el origen hasta su destino se va decidiendo a medida que los mismos viajan por la red. Cada nodo es responsable de determinar cual es el proximo "salto" en dirección al nodo final, en función del contenido de su tabla de ruteo. Este modelo de ruteo asume que si el nodo de destino no pertenece a la red local, deberá haber una entrada en la tabla de ruteo que especifique el gateway a utilizar. En otras palabras, asume que todos los nodos están al tanto de la estructura de la red.

En consecuencia, cada vez que la estructura de la red cambia (por ejemplo, cuando se agrega o elimina una subred), el administrador debería actualizar las tablas de ruteo en todos los nodos. Igualmente, si la red se interconectara a otra red, una nueva entrada debería agregarse en las tablas de ruteo de cada máquina.

Siguiendo con este razonamiento, a medida que la red crece y se interconecta a otras redes las tablas de ruteo se hacen mas largas y complejas; inclusive sería posible que fueran virtualmente imposibles de construir o mantener, en especial si la red se conecta a Internet (formada por miles de redes independientes).

Por supuesto, existen previsiones para enfrentar estos problemas: el ruteo dinámico o adaptativo y las rutas por defecto.

Ruteo estático vs. ruteo dinámico

La tabla de ruteo de un host puede construirse de dos maneras. Una posibilidad consiste en que el administrador (por medio de scripts que se ejecutan al inicializar el sistema, o por medio de comandos ejecutados interactivamente) introduzca manualmente las entradas de la tabla. Esta técnica se denomina ruteo estático, debido a que la tabla de ruteo se construye cuando la computadora se prende y no varia con el tiempo.

La otra posibilidad es ejecutar en cada host un programa que actualice automática y periódicamente la tabla de ruteo. Dichos programas se basan en el hecho de que una computadora siempre tiene acceso a otras computadoras conectadas a la red local; esto se traduce en que las tablas de ruteo contienen inicialmente al menos las direcciones de las redes locales. Si tomamos por caso a Orión, su tabla de ruteo inicialmente contendría la siguiente información:

Red

Gateway

170.25.1.0

*

170.25.2.0

*

170.25.3.0

*

De manera similar, la tabla de Andrómeda contendrá lo siguiente:

Red

Gateway

170.25.3.0

*

170.25.4.0

*

Si Orión y Andrómeda intercambiaran sus tablas de ruteo, cada una podría "aprender" de la otra qué redes son alcanzables por esa vía. Así, Andrómeda podría concluir lo siguiente:

Red

Gateway

170.25.1.0

170.25.3.254

170.25.2.0

170.25.3.254

170.25.3.0

*

170.25.4.0

*

Así, si todos los nodos de la red ejecutan un programa de estas características (llamado demonio de ruteo) al cabo de cierto tiempo habrán "descubierto" por si mismas la estructura de la red y construido sus tablas automáticamente. Mas aún, si se produjera algún cambio en la estructura de la red, bastaría con que alguna de las computadoras lo detectara para que en pocos segundos esa nueva información se propagara por toda la red.

Esta estrategia se denomina ruteo dinámico o adaptativo y tiene la ventaja de que, al ser automático, permite eliminar las tareas administrativas relacionadas con el mantenimiento de las tablas de ruteo.

En ambientes Unix se dispone de dos programas que implementan este tipo de protocolos de ruteo: routed y gated.

Rutas por defecto

El uso de ruteo dinámico elimina la necesidad de modificar las tablas de ruteo cuando la red cambia. Sin embargo, no resuelve el problema de las abultadas tablas de ruteo resultantes de conectar una red a muchas otras.

Consideremos la tabla de ruteo que construiría una máquina como Altair:

Red

Gateway

170.25.1.0

170.25.2.254

170.25.2.0

*

170.25.3.0

170.25.2.254

170.25.4.0

170.25.2.254

Como puede verse, Altair ha aprendido las rutas a todas las subredes de la red, pero el único gateway que puede utilizar es Orión. De manera similar, si fuera posible que todas las computadoras de la red del ejemplo aprendieran las direcciones de todas las redes que forman la Internet, Altair eventualmente construiría una tabla de ruteo con miles de entradas, en donde todas tendrían a Orión como gateway. En ambos casos, el resultado es una tabla de ruteo con información altamente redundante.

Para eliminar este problema, es que puede instalarse en la tabla de ruteo una ruta por defecto (conocida también como default gateway). IP utiliza la ruta por defecto (que se indica con el número 0.0.0.0) cada vez que no se encuentra en la tabla de ruteo una ruta hacia una red específica. Aplicando éste criterio, la tabla de Altair se reduciría a lo siguiente:

Red

Gateway

170.25.2.0

*

0.0.0.0

170.25.2.254

que sencillamente indica que si la dirección de destino está en la red local, es accesible directamente, y que en caso contrario (independientemente de cual sea el destino), los paquetes deberán enviarse a 170.25.2.254 (es decir, Orión).

Configurando los nodos

Caso 1: Redes sin segmentación interna

En este caso, se tiene una red pequeña, en la que todas las computadoras están ubicadas sobre el mismo segmento físico y no hay ninguna conexión a otras redes TCP/IP:

Como se puede ver, todas las computadoras tienen acceso directo a todas las demás. La tabla de ruteo será mínima; solo contendrá una referencia a la red local y a la red de loopback instaladas automáticamente por ifconfig al inicializar las interfaces correspondientes.

Puede utilizarse el comando route -n para examinar el contenido de la tabla de ruteo (-n indica a route que utilice formato numérico):

# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use
Iface
127.0.0.0 0.0.0.0 255.0.0.0 U 0 1 298 lo
205.12.9.0 0.0.0.0 255.255.255.0 U 0 40 1252 eth0

En el listado anterior, la primera columna indica dirección de red (que debe interpretarse de acuerdo a la mascara de la tercera columna) y la segunda columna indica el gateway a utilizar (0.0.0.0 se utiliza para indicar que hay conexión directa a la red en cuestión. Route también muestra información adicional sobre cada ruta:

Si esta misma red se conectara a otras redes (por ejemplo, la Internet), sería necesario indicar en cada uno de los hosts de la red una ruta estática por defecto hacia el gateway a las otras redes:

 

Las rutas por defecto puede instalarse en las estaciones por medio del siguiente comando route:

# route add -net default 205.12.9.254

Si ahora se reexaminara la tabla de ruteo en dichas estaciones, se obtendría el siguiente resultado:

# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use
Iface
127.0.0.0 0.0.0.0 255.0.0.0 U 0 1 298 lo
205.12.9.0 0.0.0.0 255.255.255.0 U 0 40 1252 eth0
0.0.0.0 205.12.9.254 0.0.0.0 UG 0 0 0 eth0

Obsérvese que Orión interconecta nuestra red con el exterior, por lo que tiene una dirección en la red local (170.25.9.254) y otra en la red del proveedor de acceso a la otra red (en este caso, la Internet). A fin de lograr la conectividad, deberá instalarse en Orión una ruta por defecto hacia el exterior, utilizando como gateway una dirección que el proveedor especifique, por ejemplo:

# route add -net default 150.104.3.254

Por otra parte, el proveedor deberá instalar en sus ruteadores alguna ruta que indique que nuestra red es alcanzable a través de la dirección 150.104.3.21, cerrando así el ciclo de entrada y salida a nuestra red.

Caso 2: Redes segmentadas

En este caso, la red está compuesta por varios segmentos unidos entre sí por gateways. Una primera opción sería ejecutar un demonio de ruteo dinámico en todas las computadoras, y dejar que las tablas se actualicen automáticamente. Sin embargo si tal programa no estuviera disponible (o por alguna razón se decide no emplearlo) bastaría con instalar en las computadoras de cada segmento una ruta estática por defecto hacia el gateway Orión, tal como se muestra en la siguiente figura:

Para obtener esta configuración, en Antares y Rigel habría que ejecutar el siguiente comando:

# route add -net default gw 170.25.1.254

mientras que en Altair y Aldebarán el comando sería:

# route add -net default gw 170.25.2.254

No es necesario instalar manualmente ninguna ruta en Orión, debido a que todas las necesarias serán instaladas automáticamente por ifconfig.

Sería diferente si la red tuviera más subredes:

 

En éste caso, sería necesario informar a Orión acerca de la existencia de la red 170.25.4.0, y a Andrómeda acerca de las redes 170.25.1.0 y 170.25.2.0. Una vez mas, puede utilizarse el comando route para instalar las rutas, utilizando la siguiente sintaxis:

# route add -net red netmask máscara gw gateway

Por ejemplo, en Andrómeda habría que ejecutar los siguientes comandos:

# route add -net 170.25.1.0 netmask 255.255.255.0 gw 170.25.3.254
# route add -net 170.25.2.0 netmask 255.255.255.0 gw 170.25.3.254

con lo que la tabla de ruteo quedaría conformada de la siguiente manera:

# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use
Iface
127.0.0.0 0.0.0.0 255.0.0.0 U 0 1 298 lo
170.25.3.0 0.0.0.0 255.255.255.0 U 0 105 11252 eth0
170.25.4.0 0.0.0.0 255.255.255.0 U 0 55 1976 eth1
170.25.1.0 170.25.3.254 255.255.255.0 UG 0 20 841 eth0
170.25.2.0 170.25.3.254 255.255.255.0 UG 0 33 976 eth0

Finalmente, si la red tuviera conexión a redes externas, sería necesario instalar en los gateways una ruta por defecto que conduzca hacia el gateway al exterior:

 

En Orión:

# route add -net default gw 170.25.3.253

En Andrómeda:

# route add -net default gw 170.25.4.253

Opciones al comando route

En todos los ejemplos anteriores se utilizó el comando route para instalar rutas manualmente en la tabla de ruteo. Sin embargo, al igual que ocurre con ifconfig, usualmente el administrador no instala las rutas introduciendo comandos manualmente (o modificando scripts de inicialización del sistema), sino que se limita a modificar archivos de configuración o utilizar alguna herramienta gráfica.

En el caso de Red Hat Linux, la utilidad netcfg que se mencionó con anterioridad puede utilizarse para configurar la ruta por defecto e instalar rutas estáticas. También pueden realizarse estas tareas modificando manualmente archivos de configuración network y static-routes respectivamente, ubicados ambos bajo /etc/sysconfig.
 


19. La palabra inglesa gateway podría traducirse como "puerta de salida".