Nivel Internet

Funcionamiento básico

El nivel Internet es el encargado de interconectar las distintas redes que componen Internet. La comunicación a este nivel se rige por el protocolo IP (Internet Protocol) por lo que muchas veces al nivel Internet se le llama nivel IP.

El nivel Internet y su protocolo IP interconectan las redes ofreciendo un servicio de comunicacióin entre redes basadas en distintas tecnologías. El problema es que el nivel Internet no garantiza una comunicación fiable. Del control de errores se encarga el nivel superior por lo que podríamos decir que IP “hace lo que puede”. Este tipo de protocolos se conocen como protocolos de “mejor esfuerzo” (best effort).

El protocolo IP es relativamente sencillo. Es un protocolo no orientado a conexión por lo que no añade excesiva sobrecarga al sistema. Existe un único formato de datos por lo que todos los paquetes IP tienen la misma estructura. En la terminología Internet estos paquetes se conocen como datagramas aunque el término datagrama se utiliza también en un sentido más general para designar las unidades de datos de cualquier protocolo no orientado a conexión.

La inclusión de este nuevo nivel solventa la mayoría de los problemas generados al interconectar redes de distinta índole. Define un protocolo común para todos que ofrece un servicio único. Los servicios que ofrece cada red se mantendrán en la comunicación interna de la red, pero al pasar a otras redes el servicio común es el ofrecido por IP. El nivel IP también define un formato de paquete común que va encapsulado en las tramas generadas a nivel de enlace. Por lo tanto, el problema de los distintos formatos de paquete queda solventado.

Pero hay otro problema al que el nivel IP tiene que hacer frente: el direccionamiento. A nivel de enlace cada máquina tiene su dirección, conocida como dirección física. En realidad, cada tarjeta de red tiene su dirección y dado que hay máquinas que tienen más de una tarjeta de red (por ejemplo los encaminadores tienen una tarjeta de red por cada red que interconectan) lo más adecuado es decir que cada tarjeta de red (o interfaz de red) tiene su dirección física. De todos modos, por simplificar y siempre que no lleve a confusión, nos permitiremos la licencia de hablar de dirección de máquina en lugar del término correcto de dirección de interfaz de red.

El caso es que a distinto tipo de red distinto formato de dirección. Esto hace que sea imposible direccionar las máquinas (interfaces de red) de una manera unificada. La solución que impone IP es la de definir un formato de dirección común y asignar una dirección de este tipo a cada interfaz de red. De este modo, cada interfaz de red pasa a tener dos direcciones: una física y otra de nivel IP. Por cierto, las direcciones de nivel IP se conocen como direcciones IP. A nivel IP las interfaces de red se direccionan a través de direcciones IP mientras que a nivel de enlace se siguen direccionando a través de direcciones físicas. Esto exige que podamos traducir las direcciones IP a sus direcciones físicas correspondientes, pero de ello se hablará más adelante.

Vamos a ver gráficamente dos ejemplos en los que se ve cómo consigue IP interconectar dos redes. Para ello vamos a suponer dos redes (R1 y R2) basadas en distintas tecnologías e interconectadas a través de un encaminador (E). En el primer ejemplo veamos cómo se comunican, a través de TCP/IP, dos máquinas (A y B) en la misma red (la red R1). Posteriormente se verá cómo se comunican dos máquinas (A y C) en distintas redes. En este ejemplo vamos a representar la dirección IP de la máquina X como @X y su dirección física como #X. En los dos casos partimos de la base de que A conoce la dirección IP de la máquina con la que se quiere comunicar.

La máquina A ha solicitado a su nivel IP que envíe un mensaje a B. Para ello, por supuesto, proporciona la dirección IP de B. El nivel IP incluye esta dirección (entre otras cosas) en la cabecera del datagrama IP y le indica al nivel de acceso que le envíe el datagrama a B. Pero cuidado, el nivel de enlace no entiende de direcciones IP por lo que habrá que indicarle la dirección física de B. El nivel de enlace añadirá esta dirección a la cabecera de la trama y la enviará siguiendo los mecanismo habituales de la red.

Fíjate que este procedimiento requiere que:

  • El nivel IP de A sepa que B está en la misma red y que por lo tanto es accesible mediante los medios naturales de una red.
  • El nivel IP de A sea capaz de obtener la dirección física de B a partir de su dirección IP.

Veamos el segundo ejemplo.

En este caso el proceso empieza igual: la máquina A solicita a su nivel IP que envíe un mensaje a C. El nivel IP incluye esta dirección (entre otras cosas) en la cabecera del datagrama, pero como C no es accesible directamente sino a través de E, el nivel IP le indica al nivel de acceso que le envíe el datagrama a E (indicándole su dirección física). El nivel de enlace añadirá esta dirección a la cabecera de la trama y la enviará siguiendo los mecanismo habituales de la red. Observa que en este caso la trama y el datagrama encapsulado en él llevan como dirección de destino direcciones correspondientes a distintas máquinas. El datagrama siempre lleva la dirección del destinatario final, mientras que la trama siempre lleva la dirección del nodo intermedio de este salto (hop) particular. La trama llevará la dirección del destinatario final sólo en el último salto.

Pero sigamos con el ejemplo. La trama, y por lo tanto el datagrama, han llegado a E. Este analiza el datagrama, obtiene la dirección IP del destinatario y lo encamina. Es decir, le dice a su nivel de enlace (en concreto al correspondiente a la red R2) que envíe el datagrama a C. Indicando, evidentemente, la dirección física de C. Fíjate que este segundo paso es análogo al que hemos visto en ejemplo anterior. Si el envío requiere más saltos, es decir, el paso por más redes y más encaminadores, el primer paso se repite tantas veces como sea necesario.

En este caso los requisitos son:

  • El nivel IP de A ha de saber que C no está en la misma red y que por lo tanto ha de enviar el datagrama al encaminador E.
  • Que el nivel IP de E sepa que C está en una de las redes que interconecta y que por lo tanto es accesible mediante los medios naturales de una red.
  • Que el nivel IP de E sea capaz de obtener la dirección física de C a partir de su dirección IP.

Por lo tanto, en el caso de que una máquina (sea el emisor original, sea un encaminador intermedio) tenga que enviar un datagrama y el destinatario no esté en su misma red, enviará el datagrama a un encaminador (paso uno del segundo ejemplo). Si el destinatario está en una de las redes a la que está conectado, enviará el datagrama al destinatario final (paso uno del primer ejemplo o paso dos del segundo).

Observa que no hemos sido del todo precisos en el ejemplo anterior ya que nos referíamos a la dirección IP del encaminador E como si fuera única cuando al tener dos interfaces de red tendrá dos direcciones IP. De todos modos para entender el ejemplo no hacía falta precisar tanto y creemos que se gana en claridad.

Por lo que hemos visto en estos ejemplos el nivel IP ha de ser capaz de realizar dos tareas fundamentales:

  • Encaminamiento: saber a quién enviar un datagrama. Observa que una red puede tener conectados varios encaminadores por lo que no basta con saber que el destinatario no está en nuestra red, habrá que saber cuál de los encaminadores utilizar.
  • Traducción: obtener una dirección física a partir de una dirección IP. Si observas bien los ejemplos anteriores verás que IP solamente ha de ser capaz de traducir las direcciones de las máquinas de las redes a las que está interconectado. Esto facilita el problema ya que convierte el problema en un problema de nivel local (red) y no global (Internet).

Como acabamos de mencionar el problema de la traducción es un problema local, a nivel de red. Por ello, cada tecnología tiene su sistema de traducción. Más adelante veremos como ejemplo el caso concreto de Ethernet: el protocolo ARP. Ahora, nos centraremos en el primer problema: el encaminamiento. Éste es un problema más complejo e interesante. De todos modos, para hablar de encaminamiento en Internet es indispensable conocer más de cerca las direcciones IP.

Direcciones IP

Una dirección IP debe tener un formato que facilite el encaminamiento de datagramas. Por lo tanto, una dirección IP ha de ser estructurada. Una dirección estructurada está dividida en campos de forma que dividan todas las direcciones en grupos jerárquicos. Por ejemplo, un número de teléfono (observa que no deja de ser una dirección) es estructurada ya que tiene distintos campos que agrupa distintos números por cercanía geográfica: código de país, prefijo de provincia, código de área…

¿Por qué ha de ser una dirección IP estructurada? Fijémonos en el trabajo de encaminamiento que ha de realizar el nivel de Interred: dado un datagrama y una dirección IP de destino, ha de saber a quién enviar este datagrama. Esta información la obtiene a través de una tabla llamada tabla de encaminamiento. Si no tenemos forma de agrupar las direcciones IP una tabla de encaminamiento contendría una serie de reglas de este tipo:

Si la dirección de destino es X, entonces enviar el datagrama al encaminador E1 Si la dirección de destino es Y, entonces enviar el datagrama al encaminador E2 Si la dirección de destino es Z, entonces enviar el datagrama al encaminador E1 …

Obviamente, una tabla así sería inmensa y ten en cuenta que todas las máquinas que quieran enviar un datagrama han de tener una tabla de encaminamiento (esto incluye tanto las máquinas origen como los encaminadores intermedios). ¿No crees que sería más lógico algo de este estilo?

Si la dirección de destino está dentro del rango X, entonces enviar datagrama al encaminador E1 Si la dirección de destino está dentro del rango Y, entonces enviar datagrama al encaminador E2 Si la dirección de destino está dentro del rango Z, entonces enviar datagrama al encaminador E1 …

Esta segunda solución hace las tablas de encaminamiento mucho más manejables y es la aproximación que sigue realmente el nivel IP. Para ello, las direcciones IP dentro de un determinado rango se pueden agrupar de forma sencilla. Pero, evidentemente, para que esto funcione los grupos de direcciones han de estar asignados a máquinas cercanas, en general a máquinas de una misma red. Por ello, en muchos casos a estos grupos de direcciones se les conoce como redes IP.

En resumen, la asignación de direcciones IP no se realiza de forma arbitraria. Si queremos asignar direcciones IP a las máquinas de una red, primero hemos de obtener un conjunto de direcciones IP dentro de un determinado rango (también llamado bloque de direcciones IP). Posteriormente asignaremos a cada máquina de la red una dirección correspondiente a ese rango. Pronto veremos que es incluso posible dividir el conjunto de direcciones en subconjuntos. Muy útil si queremos dividir la red en subredes.

Formato de direcciones IP

Una dirección IP se compone de 32 bits. Para facilitar su uso a las personas solemos representarlos en la notación que se describe a continuación. Se dividen los 32 bits de la dirección en 4 grupos de 8 bits. Se pasan a decimal los 4 grupos obteniendo 4 valores entre 0 y 255. Se representan estos 4 valores separados por puntos. Veamos un ejemplo:

Supongamos la dirección IP 10011110111000110000000000000001 y dividámosla en 4 grupos de 8 bits: 10011110 – 11100011 – 00000000 – 00000001. Ahora pasamos cada grupo a decimal: 158 – 227 – 0 – 1. Y mostramos los 4 números separados por puntos:
10011110111000110000000000000001 -> 158.227.0.1

¿Dónde está la estructura de una dirección IP? Pues bien, una dirección IP se divide en dos partes o campos: dirección de red e identificador de máquina. Los primeros n bits corresponden al primer campo y el resto (32 – n bits) al segundo. Bien, ¿y cuánto es n?

Hasta principios de la década de los 90 el valor de n estaba definido por unos pocos bits de la propia dirección. Por ejemplo, todas las direcciones que comenzaran con el bit 0 (llamados direcciones de clase A) utilizaban 8 bits para la dirección de red (n=8); los que comenzaban con los bits 10 (clase B) utilizaban 16 bits (n=16) y los que comenzaban con los bits 110 (clase C) utilizaban 24 bits. Este mecanismo obligaba a que todos los bloques de direcciones fueran de 256, 65536 o 16777216 direcciones. La gestión de direcciones se convirtió en algo realmente ineficiente ya que aunque 256 máquinas es un número razonable para muchas empresas o instituciones el resto de valores son excesivos para casi todos.

La solución surgió del denominado Classless Inter-Domain Routing (CIDR) que como su nombre indica se basa en un sistema sin clases. Este esquema es mucho más flexible y permite dar a n cualquier valor ente 0 y 32. Para ello es necesario indicar el valor de n de forma explicita y se consigue asociando a una dirección IP otro conjunto de 32 bits llamado máscara. Los bits que tengan el valor 1 en la máscara indican los bits correspondientes a la dirección de red en la dirección IP asociada. Veamos un ejemplo:

Supongamos la dirección IP del ejemplo anterior: 10011110111000110000000000000001. Si queremos indicar que la dirección de red lo especifican los primeros 10 bits de la dirección, utilizaremos la máscara 11111111110000000000000000000000. Es decir, 10 bits a 1 y 22 bits a 0. Las máscaras se representan en decimal igual que las direcciones IP por lo que la máscara anterior se puede representar de la siguiente manera: 255.192.0.0.

Evidentemente una máscara no puede tener cualquier valor. Los primeros n bits serán unos y el resto ceros. Nunca encontraremos unos y ceros intercalados en una máscara. Esto hace que se haya diseñado una segunda notación más cómoda para indicar la máscara. Basta con indicar después de la dirección, separada con una barra, el número de bits a 1 (o lo que hemos venido llamando n).

La dirección IP y máscara indicadas anteriormente se pueden representar como 158.227.0.1/10.

Cuando nos queremos referir a un bloque completo se utiliza la primera dirección del bloque, es decir, la que tiene todos los bits del identificador de host a cero. Veamos varios ejemplos:

El bloque de direcciones asignado a la UPV/EHU es el 158.227.0.0/16, o dicho de otro modo el 158.227.0.0 con máscara 255.255.0.0. Eso quiere decir que los primeros 16 bits identifican el bloque (o red IP). Los 16 últimos se utilizan para identificar máquinas (hosts) dentro de la UPV/EHU. Eso nos lleva a tener 65536 identificadores disponibles. Por lo tanto todas las direcciones entre el 158.227.0.0 y el 158.227.255.255 corresponden a la UPV/EHU.Veamos otro bloque: el 192.168.211.0/24. En este caso tenemos 256 identificadores disponibles: los que van del 192.168.211.0 al 192.168.211.255.

Fíjate que la dirección que damos al indicar un bloque tiene todos los bits del identificador de host a cero. Por ejemplo los últimos 16 bits 158.227.0.0 son ceros, igual que los 8 últimos de 192.168.211.0.

Pero nada nos obliga a que la máscara sea múltiplo de 8, cosa que hace que la notación decimal sea a veces menos intuitiva. Por ejemplo, supongamos un bloque con dirección 110.83.180.0/22. Es un bloque con 1024 identificadores, desde 110.83.180.0 a 110.83.183.255.

Si tienes problemas para entender alguno de los ejemplos prueba a pasar las direcciones a binario (separando los 4 bytes) y traza una raya donde se separan los campos dirección de red e identificador de host.

Subnetting

¿Que ocurre si administramos una organización a la que han asignado un bloque de direcciones, pero tenemos divida la red de la organización en varias subredes? La solución más adecuada pasa por dividir el bloque original en varios “sub-bloques”. ¿Cómo? Dividiendo el campo de identificador de host en dos partes: identificador de subred e identificador de host.

El caso más sencillo es aquel en el que todas las subredes son del mismo tamaño. Veamos un ejemplo:

Supongamos que nuestra organización dispone del bloque de direcciones IP 158.227.0.0/16 y que tenemos dividida la red de la organización en 6 subredes del mismo tamaño (número parecido de máquinas en cada subred). Como para identificar 6 subredes necesitamos al menos 3 bits, podemos utilizar los tres primeros bits del campo identificador de host para identificar subredes. De esta forma hemos dividido el bloque original en 8 bloques del mismo tamaño. Fíjate que para indicar los bloques tenemos que indicar una máscara de 19 (los 16 iniciales más los 3 para las subredes).

Dirección de red Tercer byte en binario
158.227.0.0/19 00000000
158.227.32.0/19 00100000
158.227.64.0/19 01000000
158.227.96.0/19 01100000
158.227.128.0/19 10000000
158.227.160.0/19 10100000
158.227.192.0/19 11000000
158.227.224.0/19 11100000

Escogeremos 6 para nuestras subredes y dejaremos 2 para futuras subredes.

De todos modos lo más habitual es dividir una red en subredes de distinto tamaño. ¿Cómo podemos dividir un bloque de direcciones IP en bloques de distinto tamaño? La opción que tenemos para dividir un bloque de direcciones es ampliar la máscara y dividirla en trozos del mismo tamaño, pero podemos hacerlo en distintos pasos. Por ejemplo, podemos dividir un bloque en dos bloques del mismo tamaño y luego dividir sólo uno de estos en otros 4 bloques. De este modo tendríamos 5 bloques: 4 del mismo tamaño y un quinto que cuadruplicaría a cada uno de los restantes. Veamos un ejemplo más concreto:

Supongamos que nuestra organización dispone del bloque de direcciones 101.12.230.0/23. Es decir, tenemos 9 bits para asignar identificadores de host y, por lo tanto, 512 direcciones disponibles. Dada la estructura particular de nuestra red hemos decidido dividir el bloque en 6 bloques más pequeños: uno de 256 (para la subred A), otros tres de 64 (para las subredes B, C y D) y otros dos de 32 (para E y F). Para ello primero dividimos el bloque en dos bloques de 256: 101.12.230.0/24 y 101.12.231.0/24. Para ello hemos utilizado el primer bit del identificador de host para identificar la subred. Obviamente hemos tenido que ampliar la máscara.Fíjate en el tercer byte: 230. Pasémoslo a binario: 1110011|0 (la barra vertical representa la máscara de 23). Lo que hemos hecho es utilizar ese último bit para identificar los dos nuevos bloques dejando el 11100110| para uno y 11100111| para otro. Como hemos utilizado un bit más para identificar redes la nueva máscara se desplaza un bit y nos queda uno menos para identificar hosts. Podemos asignar cualquiera de las dos a la subred A (por ejemplo 101.12.230.0/24). La otra la seguiremos dividiendo.

Por lo tanto ahora tenemos el bloque 101.12.231.0/24 y tenemos que obtener tres bloques de 64 y dos de 32. Podemos empezar por dividir el bloque en cuatro bloques de 64, utilizando 2 bits para identificar subredes. Pasando el último byte a binario tenemos |00000000. Utilizando los dos primeros bits para identificar subredes tenemos cuatro nuevos bloques: 00|000000, 01|000000, 10|000000 y 11|000000. Si lo volvemos a pasar a decimal tenemos que los nuevos bloques son: 101.12.231.0/26, 101.12.231.64/26, 101.12.231.128/26 y 101.12.231.192/26. Asignamos, por ejemplo, los 3 primeros a B, C y D.

Finalmente nos queda el bloque de 64 direcciones 101.12.231.192/26 y necesitamos 2 de 32. Basta con ampliar otro bit la máscara. Volvemos a pasar a binario el último byte y tenemos 11|000000. Lo dividimos y tenemos 110|00000 y 111|00000, que pasados a decimal son 101.12.231.192/27 y 101.12.231.224/27.

En resumen hemos dividido e bloque original como queríamos y hemos realizado la siguiente asignación:

A: 101.12.230.0/24
B: 101.12.231.0/26
C: 101.12.231.64/26
D: 101.12.231.128/26
E: 101.12.231.192/27
F: 101.12.231.224/27

En la siguiente figura se representa gráficamente el proceso de la división del bloque de direcciones original.

La primera dirección de cada bloque se indica en la parte superior izquierda mientras que la última dirección se indica en la parte inferior derecha. Dentro de cada bloque se representan los valores de los 9 últimos bits de la primera y última dirección del bloque. Ten en cuenta que dado que la máscara original es de 23 los primeros 23 bits son fijos para las máquinas de nuestra red. Observa también que esos 9 bits tienen efecto en la representación decimal de los dos últimos bytes.

Asignación de direcciones

Ya hemos visto como podemos repartir un bloque de direcciones en varios bloques para adecuarlo a las necesidades de nuestra red. Pero aún quedan 2 preguntas por responder. ¿Quién nos asigna el primer bloque original? ¿Cómo asignamos las direcciones individuales de cada bloque?

La asignación de direcciones en Internet ha de hacerse de forma coordinada para que no haya varias máquinas con la misma dirección. Esta gestión la lleva a cabo la ICANN (Internet Corporation for Assigned Names and Numbers) una organización sin fines de lucro que se encarga de este tipo de cuestiones en Internet. La ICANN tiene la responsabilidad a nivel mundial, pero delega en 5 registros regionales llamados RIR (Regional Internet Register). Éstos a su vez delegan en registros locales o LIR (Local Internet Register). Puedes acceder a la lista de LIR en España en la siguiente web: www.ripe.net/membership/indices/ES.html.

Una vez que tengamos un bloque asignado a una red la asignación particular de direcciones es indiferente. Podemos asignar cualquier dirección de ese bloque a cualquier interfaz de red conectado a esa red. En realidad sólo podemos asignar “casi” todas las direcciones. Dentro de cada bloque el primer y último identificador de host (es decir, aquel que tiene todos los bits a cero y el que tiene todos los bits a uno) se reservan para un uso especial. Pero pronto hablaremos de las direcciones especiales. De momento sigamos con lo nuestro.

Como decíamos podemos asignar cualquier dirección de un bloque a cualquier interfaz conectado a esa red. Por supuesto tenemos que prestar atención para no asignar la misma dirección a dos interfaces distintas por lo que será el administrador de red el que decida qué dirección asignar a cada interfaz.

La configuración en cada máquina se puede realizar de forma manual, indicando explícitamente la dirección IP de la interfaz de red de esa máquina. Pero hoy en día se utiliza cada vez más otra opción más cómoda que asigna la dirección IP automáticamente: DHCP. Al arrancar la máquina ésta se conecta a un servidor que le asigna una dirección IP. Esta opción tiene múltiples ventajas, pero hablaremos en profundidad de ello en el tema dedicado a DHCP.

Direcciones especiales

Ya hemos mencionado que hay una serie de direcciones IP que son especiales. En este apartado resumiremos brevemente los distintos tipos de direcciones IP especiales y su uso.

  • Direcciones loopback: Todo el bloque de direcciones 127.0.0.0/8 está reservado para uso interno de la máquina. Con estas direcciones se identifica una interfaz virtual interna de la máquina que se suele utilizar para pruebas, debugging… A pesar de que el bloque es de más de 16 millones de direcciones se suele utilizar sólo una: 127.0.0.1.
  • Dirección de red: Una dirección IP cuyos bits de identificador de host están todos a cero se utiliza para identificar a la red IP o bloque de direcciones. Aunque técnicamente es posible asignar esta dirección a una interfaz esto provocaría confusión y se recomienda no hacerlo.
  • Broadcast de red: Una dirección IP cuyos bits de identificador de host están todos a uno se utiliza para enviar un mensaje que se difunda a toda la red IP.
  • Broadcast limitado: La dirección IP 255.255.255.255 se utiliza para enviar un mensaje a todas las máquinas del segmento de red al que estamos conectados.
  • Direcciones de autoconfiguración: Cuando una máquina a la que se le asigna una dirección IP automáticamente es incapaz de obtener una dirección la propia máquina se autoasigna una dirección del bloque 169.254.0.0/16. Estas direcciones no valen para salir a Internet por lo que los encaminadores de Internet no encaminan datagramas con una de estas direcciones como destino.
  • Direcciones privadas: Si la red de nuestra organización utiliza la arquitectura TCP/IP, pero no está conectada a Internet, no hace falta que se coordine con nadie. En principio puede asignar cualquier dirección a sus subredes e interfaces de red. De todos modos, para evitar posibles problemas hay tres bloques de direcciones definidos para este propósito: 10.0.0.0/8, 172.16.0.0/12 y 192.168.0.0/16. Al igual que en el caso anterior los encaminadores de Internet no encaminan datagramas cuyo destino sea una dirección de alguno de estos bloques. El uso de estas direcciones en redes privadas (no conectadas a Internet) es aconsejable ya que en caso contrario si algún datagrama “escapa” a Internet estaríamos interfiriendo en las comunicaciones de otro usuario. Estas direcciones son muy utilizadas en redes que sí se conectan a Internet, pero lo hacen a través de un servidor NAT. Profundizaremos en esta posibilidad en el tema NAT.

Encaminamiento

Una vez visto cómo son las direcciones IP podemos pasar a ver cómo consiguen encaminar los encaminadores. Recuerda que el encaminamiento se reducía básicamente a decidir si el destinatario de un datagrama está en nuestra misma red o no. Si no lo está tendremos que decidir a que encaminador enviarle el datagrama (en caso de que haya más de un posible encaminador a quién enviárselo).

Para obtener esta información toda máquina en Internet tiene una tabla de encaminamiento. Estas tablas básicamente codifican reglas de este tipo: si la dirección IP destino corresponde al bloque de direcciones X, entonces envíala al encaminador Y a través de la interfaz de red Z. Para ello, las tablas de encaminamiento tienen varias columnas de las cuales 4 son las importantes. Veamos una tabla de encaminamiento típica en una máquina conectada a una red que se conecta a Internet a través de un encaminador.

En la figura se muestra tanto la dirección de la red como las direcciones de las interfaces de la máquina X y el encaminador. La tabla de encaminamiento de la máquina X será así:

Red de destino Máscara Siguiente encaminador Interfaz de salida
158.227.112.0 255.255.255.0 158.227.112.91 eth0
0.0.0.0 158.227.112.1 eth0

La primera línea indica que si el datagrama tiene como destino una máquina que está en la misma red que X (158.227.112.0/24), entonces no hace falta encaminador. Para ello, es común indicar en la columna de “Siguiente encaminador” la dirección IP de la propia máquina X. Otra opción sería dejar el campo vacío. En la última columna se indica la interfaz de red que deberá usar. Aunque típicamente una máquina como X sólo tendrá una interfaz de salida recuerda que algunas máquinas (incluyendo todos los encaminadores) tendrán varias. La segunda fila indica que en cualquier otro caso (también conocido como línea por defecto o línea “default”) el datagrama se envíe al encaminador Y. La interfaz de salida es obviamente la misma porque es la única.

En redes más complejas, con varias subredes conectadas a través de encaminadores, las tablas suelen ser más complejas. De todos modos el modo de funcionamiento de la tabla es el mismo. Vamos a modificar la red de la figura anterior y añadirle un nuevo encaminador y dos nuevas subredes.

La nueva tabla de encaminamiento de X tendrá que reflejar estas modificaciones. Para ello añadiremos dos nuevas líneas correspondientes a las nuevas subredes.

Red de destino Máscara Siguiente encaminador Interfaz de salida
158.227.112.0 255.255.255.0 158.227.112.91 eth0
158.227.113.0 255.255.255.128 158.227.112.2 eth0
158.227.113.128 255.255.255.128 158.227.112.2 eth0
0.0.0.0 158.227.112.1 eth0

La primera línea sigue igual, indicando que si el destinatario está en la misma subred que X, no hace falta ningún encaminador intermedio. La segunda y la tercera indican que si el destinatario está en una de las nuevas subredes, entonces el siguiente encaminador ha de ser Z. Finalmente, la última línea sigue igual: si el destinatario es cualquier otro, entonces enviaremos el datagrama al encaminador Y.

Agregación de rutas o Supernetting

La agregación de rutas (también conocida como Supernetting) es una técnica que permite reducir el tamaño de algunas tablas de encaminamiento. Por ejemplo, si observamos la figura anterior veremos que es posible reducir una entrada en la tabla de encaminamiento propuesta. Fíjate en las dos líneas que hemos añadido. Lo que vienen a decir es lo siguiente:

  • Si el destinatario del datagrama está dentro del rango 158.227.113.0/25, entonces envía el datagrama al encaminador Y.
  • Si el destinatario del datagrama está dentro del rango 158.227.113.128/25, entonces envía el datagrama al encaminador Y.

Fíjate que los dos rangos mencionados se han creado al dividir el rango 158.227.113.0/24 en dos. Por ello, es posible unir las dos reglas anteriores en una única que diga lo siguiente:

  • Si el destinatario del datagrama está dentro del rango 158.227.113.0/24, entonces envía el datagrama al encaminador Y.

Por lo tanto la tabla de encaminamiento quedaría con 3 entradas en lugar de 4:

Red de destino Máscara Siguiente encaminador Interfaz de salida
158.227.112.0 255.255.255.0 158.227.112.91 eth0
158.227.113.0 255.255.255.0 158.227.112.2 eth0
0.0.0.0 158.227.112.1 eth0

Fíjate en que para poder agregar varias rutas es necesario que el campo “siguiente encaminador” de todas las rutas agregadas ha de ser la misma. Como ejercicio puedes intentar rellenar la tabla de encaminamiento del encaminador Z y verás que no podrás agregar ninguna ruta y obtendrás una tabla de 4 entradas (puedes inventarte los nombres de las 3 interfaces del encaminador).

Veamos otro ejemplo de agregación de rutas:

En este caso la tabla de la máquina X sin agregar rutas sería así:

Red de destino Máscara Siguiente encaminador Interfaz de salida
158.227.112.0 255.255.255.0 158.227.112.91 eth0
158.227.113.0 255.255.255.192 158.227.112.2 eth0
158.227.113.64 255.255.255.192 158.227.112.2 eth0
158.227.113.128 255.255.255.192 158.227.112.2 eth0
158.227.113.192 255.255.255.192 158.227.112.3 eth0
0.0.0.0 158.227.112.1 eth0

Podríamos agregar las entradas 2 y 3 y sustituirlas por esta otra:

158.227.113.0 255.255.255.128 158.227.112.2 eth0

Pero no podemos hacer lo mismo con las entradas 4 y 5 ya que el campo “siguiente encaminador” no coincide. De todos modos en este caso existe otra posibilidad para poder agregar rutas: sustituir las entradas 2, 3, y 4 por una única entrada. La tabla quedaría como sigue:

Red de destino Máscara Siguiente encaminador Interfaz de salida
158.227.112.0 255.255.255.0 158.227.112.91 eth0
158.227.113.0 255.255.255.0 158.227.112.2 eth0
158.227.113.192 255.255.255.192 158.227.112.3 eth0
0.0.0.0 158.227.112.1 eth0

Podrás observar que el rango 158.227.113.192/26 queda englobado en dos entradas. Por lo tanto aquí surge la pregunta, ¿cómo sabe la máquina X cual de las rutas usar? Hay una serie de reglas para dilucidar estas coincidencias. La primera de ellas, y la más importante, indica que siempre hay que escoger la ruta con la máscara más específica. Es decir, el que tenga más bits a uno. De este modo se consigue que primero se traten las rutas más especificas y luego las generales. Esto es muy útil para el tipo de situaciones como el mostrado en la figura anterior dondo uno de los “sub-bloques” está apartado de los demás.

Otros protocolos del nivel IP

En el nivel IP conviven varios protocolos aparte del protocolo IP. En este apartado vamos a describir brevemente dos de ellos: ICMP y ARP.

ICMP

ICMP (Internet Control Message Protocol) es un protocolo que sirve para enviar pequeños mensajes de control, error, etc. Los mensajes ICMP se envían directamente sobre datagramas IP, sin pasar por el nivel de transporte. Veamos unos pocos ejemplos donde se utiliza ICMP:

  • La herramienta Ping, utilizada para saber si cierta máquina está accesible a través de la red, utiliza ICMP. En concreto, Ping envía un mensaje ICMP del tipo “Solicitud de eco” y el destinatario responderá con un “Eco”.
  • Cuando un encaminador elimina un datagrama porque se ha excedido su tiempo de vida, debe enviar un mensaje ICMP “Tiempo excedido” al emisor del datagrama. De todos modos, no todos los encaminadores lo hacen. La herramienta Traceroute hace uso de esta funcionalidad de ICMP.
  • Si el destinatario de un datagrama es inaccesible el emisor será avisado con un mensaje ICMP “Destinatario inaccesible”. Este mensaje puede ser generado por varias razones: no existe conexión física hasta el destinatario, el protocolo o puerto especificado no está activo, el datagrama es demasiado grande y no se puede fragmentar…
ARP

Recordarás que para el correcto funcionamiento del nivel IP las máquinas emisoras deben de ser capaces de obtener la dirección física correspondiente a una dirección IP. Recordarás también que cada máquina deberá poder realizar la traducción de las máquinas conectadas a su misma red, pero no de las que puedan estar conectadas en otras redes de Internet.

Para el caso concreto de Ethernet la solución nos la brinda ARP (Address Resolution Protocol). ARP es un protocolo sencillo que nos permite obtener la dirección Ethernet de una máquina de nuestra red cuya dirección IP conocemos. Típicamente cuando una máquina obtiene una traducción la almacena en una tabla llamada, como no, tabla ARP. Ésta es una tabla tipo caché ya que la información se elimina pasado un tiempo para evitar inconsistencias. Esto es necesario sobre todo en redes donde las direcciones IP se asignan dinámicamente. Por cierto, los mensajes ARP van directamente sobre tramas Ethernet.

ARP define básicamente dos tipos de procedimientos. Normalmente, cuando una máquina se conecta a una red Ethernet realiza un anuncio enviando sus direcciones física e IP a todas las máquinas de la red (utilizando para ello la dirección ethernet de broadcast FF:FF:FF:FF:FF). Éstas almacenan el par de direcciones en sus respectivas tablas ARP. Pero ¿qué ocurre si necesito una traducción y no la tengo en mi tabla ARP? Puede ocurrir si me he conectado más tarde que la máquina en cuestión, con lo que no he captado su anuncio ARP. O puede que haya eliminado la información de la tabla ARP por ser demasiado vieja. En ese caso enviaremos un mensaje a todas las máquinas de la red indicando la dirección IP a traducir. La máquina propietaria de esa dirección IP responderá indicando su dirección física.

Anuncios

Acerca de mitch

Quiero compartir mis experiencias y mis humildes conocimientos
Esta entrada fue publicada en Nivel de Internet. Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s