Tabla de contenidos Referencias

2.3 IP("Internet Protocol")




Figura: IP("Internet Protocol")

IP es un protocolo estándar con STD 5 que además incluye ICMP (ver ICMP("Internet Control Message Protocol")) e IGMP (ver IGMP("Internet Group Management Protocol")). Su status es requerido.

Su especificación actual se puede encontrar en los RFCs 791, 950, 919 y 922, que actualizado en el RFC 1349.

IP es el protocolo que oculta la red física subyacente creando una vista de red virtual. Es un protocolo de entrega de paquetes no fiable y no orientado a conexión, y se puede decir que aplica la ley del mínimo esfuerzo.

No aporta fiabilidad, contrtol de flujo o recuperación de errores a los prots de red inferiores. Los paquetes (datagramas) que envía IP se pueden perder, desordenarse, o incluso duplicarse, e IP no manejará estas situaciones. El proporcionar estos servicios depende de prots superiores.

IP asume pocas cosas de las capas inferiores, sólo que los datagramas "probablemente" serán transportados al host de destino.

2.3.1 El datagrama IP

El datagrama IP es la unidad de transferencia en la pila IP. Tiene una cabecera con información para IP, y los datos relevantes para los prots superiores.


Figura: El datagrama IP

El datagrama IP está encapsulado en la trama de redd subyacente, que suele tener una longitud máxima, dependiendo del hardware usado. Para Ethernet, será típicamente de 1500 bytes. En vez de limitar el datagrama a un tamaño máximo, IP puede tratar la fragmentación y el re-ensamblado de sus datagramas. En particular, el IP est no impone una tamaño máximo, pero establece que todas las redes deberían ser capaces de manejar al menos 576 bytes. Los fragmentos de datagramas tienen todos una cabecera, copiada básicamente del datagrama original, y de los datos que la siguen. Se tratan como datagramas normales mientras son transportados a su destino. Nótese, sin embargo, que si uno de los fragmentos se pierde, todo el datagrama se considerará perdido, y los restantes fragmentos se considerarán perdidos.

2.3.1.1 Formato del datagrama IP

La cabecera del datagrama IP es de un mínimo de 20 bytes de longitud:


Figura: Formato del datagrama IP

Donde:

VERS
La versión del protocolo IP. La versión actual es la 4. La 5 es experimental y la 6 es IPng(ver IP: La próxima generación(IPng)).
LEN
La longitud de la cabecera IP contada en cantidades de 32 bits. Esto no incluye el campo de datos.
Type of Service
El tipo de servicio es una indicación de la calidad del servicio solicitado para este datagrama IP.



Donde:
Precedencia
Es una medida de la naturaleza y prioridad de este datagrama:
000
Rutina
001
Prioridad
010
Imediato
011
"Flash"
100
"Flash override"
101
Crítico
110
Control de red("Internetwork control")
111
Control de red("Network control")
TOS
TOS("type of service"):
1000
Minimizar retardo
0100
Maximizar la densidad de flujo
0010
Maximizar la fiabilidad
0001
Minimizar el coste monetario
0000
Servicio normal
MBZ
Reservado para uso futuro(debe ser cero, a menos que participe en un experimento con IP que haga uso de este bit)
Una descripción detallada del TOS se puede encontrar en el RFC 1349.
Total Length
La longitud total del datagrama, cabecera y datos, especificada en bytes.
Identification
Un número único que asigna el emisor para ayudar a reensamblar un datagrama fragmentado. Los fragmentos de un datagrama tendrán el mismo número de identificación.
Flags
Varios flags de control:



Donde:
0
Reservado, debe ser cero
DF
No fragmentar("Don't Fragment"): con 0 se permite la fragmentación, con 1 no.
MF
Más fragmentos("More fragments"): 0 significa que se trata del último fragmento del datagrama, 1 que no es el último.
Fragment Offset
Usado con datagramas fragmentados, para ayudar al reensamblado de todo el datagrama. El valor es el número de partes de 64 bits(no se cuentan los bytes de la cabecera) contenidas en fragmentos anteriores. En el primer(o único) fragmento el valor es siempre cero.
Time to Live
Especifica el tiempo(en segundos) que se le permite viajar a este datagrama. Cada "router" por el que pase este datagrama ha de sustraer de este campo el tiempo tardado en procesarlo. En la realidad un "router" es capaz de procesar un datagrama en menos de 1 segundo; por ello restará uno de este campo y el TTL se convierte más en una cuenta de saltos que en una métrica del tiempo. Cuando el valor alcanza cero, se asume que este datagrama ha estado viajando en un bucle y se desecha. El valor inicial lo debería fijar el protocolo de alto nivel que crea el datagrama.
Protocol Number spotipprotn
Indica el protocolo de alto nivel al que IP debería entregar los datos del datagrama. Algunos valores importantes son:
0
Reservado
1
ICMP("Internet Control Message Protocol")
2
IGMP ("Internet Group Management Protocol")
3
GGP("Gateway-to-Gateway Protocol")
4
IP (IP encapsulation)
5
Flujo("Stream")
6
TCP("Transmission Control")
8
EGP("Exterior Gateway Protocol")
9
PIRP("Private Interior Routing Protocol")
17
UDP ("User Datagram")
89
OSPF("Open Shortest Path First")

La lista completa se puede encontrar en el STD 2 - Números asignados de Internet.

Header Checksum
Es el checksum de la cabecera. Se calcula como el complemento a uno de la suma de los complementos a uno de todas las palabras de 16 bits de la cabecera. Con el fin de este cálculo, el campo checksum se supone cero. Si el checksum dde la cabecera no se corresponde con los contenidos, el datagrama se desecha, ya que al menos un bit de la cabecera está corrupto, y el ddatagrama podría haber llegado al destino equivocado.
Source IP Address
La dirección IP de 32 bits del host emisor.
Destination IP Address
La dirección IP de 32 bits del host receptor.
Options
Longitud variable. No requiere que toda implementación de IP sea capaz de generar opciones en los datagramas que crea, pero sí que sea capaz de procesar datagramas que contengan opciones. El campo "Options" (opciones) tiene longitud variable. Puede haber cero o más opciones. Hay dos formatos para estas. El formato usado depende del valor del número de opción hallado en el primer byte.
El byte de tipo tiene la misma estructura en ambos casos:



Donde:
fc
"Flag copy", que indica si el campo de opcions se ha de copiar(1) o no(0) cuando el datagrama está fragmentado.
class
Un entero sin signo de 2 bits:
0
control
1
reservado
2
depurado y mediciones
3
reservado
option number
Entero sin signo de 5 bits.
0
Fin de la lista de opciones, con "class" a cero, fc a cero, y sin byte de longitud o de datos. Es decir, la lista termina con el byte X'00'. Sólo se requiere si la longitud de la cabecera IP(que es un múltiplo de 4 bytes) no se corresponde con la longitud real de las opciones.
1
No operación. Tiene "class" a cero, fc a cero y no hay byte de longitud ni de ddatagramaos. Es decir, un byte X'01' es NOP("no operation"). Se puede usar para alinear campos en el datagrama.
2
Securidad. Tiene "class" a cero, fc a uno y el byte de longitud a 11 y el de datos a 8. Se usa para la información de seguridad que necesitan las especificaciones del departamento de defensa de los US.
3
LSR("Loose Source Routing"). Tiene "class" a cero, fc a uno y hay un campo de datos de longitud variable.
4
IT("Internet Timestamp"). Tiene "class" a 2, fc a cero y hay un campo de datos de longitud variable.
 
7
RR("Record Route"). Tiene "class" a 0, fc a cero y hay un campo de datos de longitud variable.
 
8
SID("Stream ID", o identificador de flujo). Tiene "class" a 0, fc a uno y hay un byte de longitud a 4 y un byte de datos. Se usa con el sistema SATNET.
9
SSS("Strict Source Routing"). Tiene "class" a 0, fc a uno y hay un campo de datos de longitud variable.
 
length
cuenta la longitud(en bytes) de la opción, incluyendo los campo de tipo y longitud.
 
option data
no contiene datos relevantes para la opción.
padding
Si se usa una opción, el datagrama se rellena con bytes a cero hasta la siguiente palabra de 32 bits.
data
Los datos contenidos en el datagrama se pasan a un protocolo de nivel superior, como se especifica en el campo protocol.

2.3.1.2 Fragmentación

Cuando un datagrama IP viaja de un host a otro puede cruzar distintas redes físicas. Las redes físicas imponen un tamaño máximo de trama, llamado MTU("Maximum Transmission Unit"), que limita la longitud de un datagrama. Por ello, existe un mecanismo para fragmentar los datagramas IP grandes en otros más pequeños, y luego reensamblarlos en el host de destino. IP requere que cada enlace tenga un MTU de al menos 68 bytes, de forma que si cualquier red proporciona un valor inferior, la fragmentación y el rensamblado tendrán que implementarse en la capa de la interfaz de red de forma transparente a IP. 68 es la suma de la mayor cabecera IP, de 60 bytes, y del tamaño mínimo posible de los datos en un fragmento(8 bytes). Las implementaciones de IP no están obligadas a manejar datagrama sin fragmentar mayores de 576 bytes, pero la mayoría podrá manipular valores más grandes, típicamente ligeramente más de 8192 bytes, o incluso mayores, y raramente menos de 1500.

Un datagrama sin fragmentar tiene a cero toda la información de fragmentación. Es decir, el flag fc y el fo(fragment offset) están a cero. Cuando se ha de realizar la fragmentación, se ejecutan los siguientes pasos:

En el host de destino, los datos se tienen que reensamblar. El host emisor inicializó el campo ID a un número único(dentro de los límites impuestos por el uso de un número de 16 bits). Como la fragmentación no altera este campo, los fragmentos que le van llegando al destino se pueden identificar, si este ID se usa junto con las direcciones IP fuente y destino(source, destination) del datagrama. También se chequea el campo de protocolo

Con el fin de reensamblar los fragmentos, el receptor destina un buffer de almacenamiento en cuanto llega el primer fragmento. Se inicia una rutina para un contador. Cuando el contador a un timeout y no se han recibido todos los datagramas, se desecha el datagrama. El valor inicial el contador es el TTL(time-to-live). Depende de la implementación, y algunas permiten configurarlo.

Cuando llegan los fragmentos siguientes, antes de que expire el tiempo, los datagramas se copian al buffer en la localización indicada por el fo(fragment offset). Cuando han llegado todos los datagramas, se restaura el datagrama original y continúa su procesamiento.

Nota: IP no proporciona el contador de reensamblado. Tratará cada datagrama, fragmentado o no, de la misma forma. Depende de una capa superior el implementar un timeout y reconocer la pérdida de fragmentos. Esta capa podría ser TCP para el transporte en un red orientada a conexión o UDP, para el caso contrario.

 

2.3.1.3 Opciones de encaminamiento del datagrama IP

El campo "options" del datagrama IP admite dos métodos para que el generador del datagrama dé explícitamente información de encaminamiento y uno para que el datagrama determine a ruta que va a emplear.

LSR("Loose Source Routing")

Esta opción, conocida también como LSRR("Loose Source and Record Route"), proporciona un medio para que la fuente del dar suministre información de encaminamiento explícita que usarán los "routers" que retransmitan el datagrama, y para grabar la ruta seguida.


Figura: Opción LSR

1000011
(131 decimal) es el valor del byte "option" para LSR.
length
contiene la longitud de este campo, incluyendo los campos "type" y "length".
pointer
apunta a los datagramas de la opción en la siguiente dirección IP a procesar. Es relativo al comienzo de la opción, por lo que su valor mínimo es de cuatro. Si su valor supera la longitud de la opción, se alcanza el final de la ruta de la fuente y el resto del encaminamiento se ha de basar en la dirección IP de destino(como en los datagramas que no tienen esta opción).
route data
es una serie de direcciones IP de 32 bits.

Siempre que un datagrama llega a su destino y la ruta de la fuente no está vacía(pointer < length) el receptor:

Este procedimiento asegura que la ruta de retorno se graba en "route datagram"(en orden inverso) de modo que el receptor use estos datagramas para construir un LSR en el sentido inverso. Se denomina LSR("loose source route") porque al "router" retransmisor se le permite usar cualquier ruta y cualquier número de host intermedios para alcanzar la siguiente dirección de la ruta.

Nota: El host emisor pone la dirección IP del primer "router" intermedio en el campo dirección IP de destino y las direcciones de los demás "routers" de la ruta, incluyendo el destino, en la opción "source route". La ruta que hay grabada en el datagrama cuando este llega al objetivo contiene las direcciones IP de cada uno de los "routers" que retransmitió el datagrama.

SSR("Strict Source Routing")

Esta opción, llamada también SSRR(Strict Source and Record Route"), emplea el mismo principio que LSR exceptuando que el "router" intermedio debe enviar el datagrama a la siguiente dirección IP en la ruta especificada por la fuente a través de una red conectada directamente y no por medio de un "router" intermedio. Si no puede hacerlo, envía un mensaje ICMP "Destination Unreachable".


Figura: Opción SSR

1001001
(137 decimal) es el valor del byte "option" para el método SSR
length
tiene el mismo significado que para LSR
pointer
tiene el mismo significado que para LSR
route data
es una serie de direcciones IP
RR(Record Route)

Esta opción proporciona un medio para grabar la ruta de un datagrama IP. Funciona de modo similar al SSR anterior, pero en este caso el host fuente deja el campo de datos de encaminamiento vacío, que se irá llenando a medida que el datagrama viaja. Nótese que el host fuente debe dejar suficiente espacio para esta información: si el campo se llena antes de que el datagrama llegue a su destino, el datagrama se retransmitirá, pero se dejará de grabar la ruta.


Figura: Opción RR

0000111
(7 decimal) es el valor del byte "option" para el método RR
 
length
tiene el mismo significado que para LSR
pointer
tiene el mismo significado que para LSR
route data
su longitud es un múltiplo de cuatro bytes, y lo elige el generador del datagrama
 

2.3.1.4 IT(Internet Timestamp)

El "timestamp " o sello de tiempo es una opción para forzar a algunos(o a todos) de los "routers" de la ruta hacia el destino a poner un "timestamp" en los datos de la opción. Los "timestamps" se miden en segundos y se pueden usar para la depuración. No se pueden emplear para medir el rendimiento por dos razones:




Figura: Opción IT

Donde

01000100
(68 decimal) es el valor del byte "option" para IT.
length
Contiene la longitud total de esta opción, incluyendo los campos "type" y "length".
pointer
Apunta al siguiente "timestamp" a procesar(el primero que esté disponible).
oflw (overflow)
Es un entero sin signo de 4 bits que indica el número de módulos IP que no pueden registrar "timestamps" por falta de espacio en el campo de datos.
flag
Es una valor de 4 bits que indica cómo se han de registrar los "timestamps". Los valores posibles son:
0
Sólo "timestamps", almacenados en palabras consecutivas de 32 bits.
1
Cada "timestamp" se precede con la dirección IP del módulo que efectúa el registro.
2
La dirección IP se pre-especifica, y un módulo IP sólo realiza el registro cuando encuentra su propia dirección en la lista.
timestamp
Un "timestamp" de 32 bits medido en milisegundos desde la medianoche según UT (GMT).

El host emisor debe componer esta opción con un área de datos los bastante grande para almacenar todos los "timestamps". Si el área de los "timestamps" se llena, no se añaden más.

2.3.2 Encaminamiento IP

Una función importante de la capa IP es el encaminamiento. Proporciona los mecanismos básicos para interconectar distintas redes físicas. Esto significa que un host puede actuar simultáneamente como host normal y como "router".

Un "router" básico de este tipo se conoce como "router" con información parcial de encaminamiento, ya que sólo contiene información acerca de cuatro tipos de destino:

Los dos últimos casos permiten a un "router" básico comenzar con una cantidad muy limitada de información para irla aumentando debido a que un "router" más avanzado lance un mensaje ICMP redirect cuando reciba un datagrama y conozca un "router" mejor en la misma red al que dirigir el datagrama. Este proceso se repite cada vez que un "router" básico se reinicia.

Se necesitan protocolo adicionales para implementar un "router" completamente funcional que pueda intercambiar información con otros "routers" en redes remotas. Tales "routers" son esenciales, excepto en redes pequeñas, y los protocolos que usan se discuten en Protocolos de encaminamiento.

2.3.2.1 Destinos directos e indirectos

Si el host de destino está conectado a una red a la que también está conectado el host fuente, un datagrama IP puede ser enviado directamente, simplemente encapsulando el datagrama IP en un trama. Es lo que se llama encaminamiento directo.

El encaminamiento indirecto ocurre cuando el host de destino no está en una red conectada directamente al host fuente. La única forma de alcanzar el destino es a través de uno o más "routers". La dirección del primero de ellos(el primer salto) se llama ruta indirecta. La dirección del primer salto es la única información que necesita el host fuente: el "router" que reciba el datagrama se responsabiliza del segundo salto, y así sucesivamente.


Figura: Rutas IP directas e indirectas - El host A tiene una ruta directa con B y D, y una indirecta con C. El host D es un "router" entre las redes 129.1 y 129.2.

Un host puede distinguir si una ruta es directa o indirecta examinando el número de red y de subred de la dirección IP.

  1. Si coinciden con una de las direcciones IP del host fuente, la ruta es directa.
  2. El host necesita ser capaz de direccionar correctamente el objetivo usando un protocolo inferior a IP. Esto se puede hacer automáticamente, usando un protocolo como ARP(ver ARP("Address Resolution Protocol")), que se usan en LANs con broadcast, o estáticamente y configurando el host, por ejemplo cuando un host MVS tiene una conexión TCP/IP sobre un enlace SNA.

  3. Para rutas indirectas, el único conocimiento requerido es la dirección IP de un "router" que conduzca a la red de destino.

Las implementaciones de IP pueden soportar también rutas explícitas, es decir, una ruta a una dirección IP concreta. Esto es habitual en las conexiones que usan SLIP("Serial Line Internet Protocol") que no proporciona un mecanismo para que dos hosts se informen mutuamente de sus direcciones IP. Tales rutas pueden tener incluso el mismo número de red que el host, por ejemplo en subredes compuestas de enlaces punto a punto. En general, sin embargo, la información de encaminamiento se genera sólo mediante los números de red y de subred.

2.3.2.2 Tabla de encaminamiento IP

Cada host guarda el conjunto de mapeados entre las direcciones IP de destino y las direcciones IP del siguiente salto para ese destino en una tabla llamada tabla de encaminamiento IP.

En esta tabla se pueden encontrar tres tipos de mapeado:

  1. Rutas directas, para redes conectadas localmente
  2. Rutas indirectas, para redes accesibles a través de uno o más "routers"
  3. Un ruta por defecto, que contiene la ir IP de un "router" que todas las direcciones IP no contempladas en las rutas directas e indirectas han de usar.

Ver la red en Figura - Ejemplo de tabla de encaminamiento IP para un ejemplo.


Figura: Ejemplo de tabla de encaminamiento IP

La tabla de encaminamiento contiene las siguientes entradas

Destination


route via
128.10
direct attachment
128.15
direct attachment
129.7
128.15.1.2
default
128.10.1.1

2.3.2.3 Algoritmo de encaminamiento IP

De los principios ya comentados de IP, es fácil deducir los pasos que IP debe tomar con el fin de determinar la ruta para un datagrama de salida. Es lo que se denomina algoritmo de encaminamiento IP, y se muestra esquemáticamente en Figura - Algoritmo de encaminamiento IP.


Figura: Algoritmo de encaminamiento IP

Nótese que se trata de un proceso iterativo. Se aplica a todo host que maneje un datagrama, exceptuando al host al que se entrega finalmente el datagrama.

Tabla de contenidos ICMP("Internet Control Message Protocol")