Extraido de: http://www.investigacion.frc.utn.edu.ar/labsis/Publicaciones/AdminTcp/ruteo.html
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:
Flag: Se compone de una serie de caracteres que indican
las características de la ruta. Por ejemplo, U indica
que la ruta está operacional (por Up), G que es
una ruta a un gateway, H que es una ruta a un host, etc.
Metric: Valor utilizado para cuantificar la ruta. IP
utiliza este valor para seleccionar la mejor de dos o más
rutas alternativas a la misma red.
Ref: Cantidad de veces que ésta ruta fue utilizada
para establecer una conexión.
Use: Cantidad de paquetes trasmitidos a través
de esa 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.