Capa de red - Protocolo IP

En las capas de una arquitectura de red de computadoras, la **capa de red** es la encargada de proporcionar conectividad y seleccionar la ruta entre dos nodos de la red. En una arquitectura TCP/IP la capa de red sólo utiliza un protocolo, el protocolo de red de Internet (Internet Protocol, IP). Este protocolo proporciona un servicio básico de entrega de paquetes. Es un protocolo no orientado a conexión, es decir, no garantiza ni que los paquetes lleguen, ni que lleguen en orden ni que no lleguen duplicados. Básicamente asigna direcciones, enruta los paquetes, los fragmenta y los reensambla.

## Protocolo de Internet (IP)

El formato de los datagramas IP es: 4b de versión, 4b indicando la longitud de la cabecera (Internet Header Length o IHL, en palabras de 32b), 1B de tipo de servicio (3b de prioridad, 4b de calidad y 1b reservado), 2B de longitud del datagrama en bytes, 2B de identificador de datagrama, 1b para la fragmentación, 1b para indicar que este no es el último fragmento de la trama (MF), 1b para prohibir fragmentación (DF), 30b que indican, en múltiplos de 8, cuál es el desplazamiento en bytes de este fragmento en la trama completa, 1B indicando por cuantos routers puede pasar este mensaje (TTL, time to live), 1B de protocolo (ICMP, TCP, UDP, IPv6...), 2B de comprobación, 2 direcciones IP de 32b cada una con el origen y el destino, el resto de la cabecera (cuyo tamaño conocemos por IHL) es el campo opciones (para especificar una ruta, guardar los routers del camino...) y el resto del datagrama son los datos.

Las direcciones IP son de 4 bytes. Hay de tres tipos: individuales (unicast), grupales (multicast) y de difusión (broadcast). La direcciones IP se reparten geográficamente: los registros de Internet regionales (RIR) se las venden a las operadoras y estas se las asignan a los usuarios. Los RIR venden las IPs en grupos con los primeros bits iguales. Al principio se agrupaban en clases:

* Clase A: primer byte fijo entre 0 y 127.
* Clase B: primeros 2 bytes fijos. Primer byte entre 128 y 191.
* Clase C: primeros 3 bytes fijos. Primer byte entre 192 y 223.
* Clase D: dirección fija. Primer byte entre 224 y 239. Usadas para multicast.
* Clase E: dirección fija. Primer byte entre 240 y 255. Uso experimental.

Hay direcciones reservadas para redes privadas. Las que empiezan por: 10, 172.16-172.31 y 192.168. Las direcciones que empiezan por 127 son de loopback (internas al dispositivo). Las direcciones que empiezan por el identificador de red y tienen el resto 1s se usan como broadcast, pero si tienen el resto 0s representan la red y no se usan.

A cada dirección IP se le asocia una máscara de red para saber qué bits identifican la red a la que pertenece. La máscara consta de 4B con los primeros bits a 1 (los que se corresponden a la red) y el resto a 0. Se suele representar con un nº indicando cuantos 1s hay: 147.96.50.110/24 identifica al equipo 110 de la red 147.96.50 (subred de la UCM 147.96).

Con el Classless Interdomain Routing (CIDR) las IPs no tienen que agruparse en clases, solo tienen que tener cierta cantidad de bits iniciales igual. Esto permite asignar un numero de direcciones más ajustado a las necesidades para así no desperdiciar direcciones.

## Protocolo ARP

El protocolo de resolución de direcciones ARP sirve para averiguar la MAC del equipo que tiene cierta dirección IP en la misma red.

Cuando un equipo quiere enviar un mensaje a cierta dirección IP de su misma red física consulta su tabla ARP a ver si ya conoce su dirección MAC y puede enviar el mensaje. Si no la conoce envía un mensaje broadcast preguntando quién tiene esa IP (ARP Request) y el equipo que la tenga le contestará con otro mensaje (ARP Response).

El formato de los datagramas ARP es: 2B de tipo de hardware (Ethernet, IEEE 802, ATM...), 2B de protocolo (IP), 1B con la longitud en bytes de la dirección física, 1B con la longitud en bytes de la dirección del protocolo, 2B con el tipo de operación (request, response), dirección física origen, dirección protocolo origen, dirección física destino, dirección protocolo destino.

## Subredes y superredes

Se pueden hacer subredes con una longitud de máscara mayor y superredes con una longitud de máscara menor, pero en cada red, subred y superred todas las direcciones tienen que tener el mismo identificador de red, es decir, los primeros bits que indica la máscara tienen que ser iguales.

A partir de los ‘90 se empezó a usar el classless interdomain routing (**CIDR**) que abandona el concepto de clases A, B y C (máscaras de 8, 16 y 24) y empieza a usar máscaras de cualquier longitud. Así se pueden vender conjuntos de direcciones IP de tamaños más variados y permite resumir las tablas de rutas.

## Protocolo ICMP

El protocolo de mensajes de control de Internet (ICMP) permite informar de errores y la presencia o estado de determinados dispositivos.

Los mensajes ICMP se envían en mensajes IP (tipo de protocolo 1).

El formato de los datagramas ICMP es: 1B de tipo (echo reply, echo request, destination unreachable, time exceeded, source quench...),  1B de código que depende del tipo (el motivo del destination unreachable, 0 en los echos), 2B de comprobación y opcionalmente datos, que en los echo se compone de un identificador de 2B, un nº de secuencia de 2B y datos aleatorios.

## Enrutamiento

El enrutamiento, encaminamiento o routing consiste en encontrar el mejor camino entre el origen y el destino a través de los routers o nodos. Para decidir cuál es el mejor camino se puede atender al menor número de nodos intermedios, menor distancia geográfica, menos retardo, mayor ancho de banda, menor tráfico o una combinación de estos factores.

Hay distintos tipos de técnicas para enrutar:

* **Local**. No tiene en cuenta la topología de la red.
	+ La *inundación* consiste en reenviar los paquetes por todas las interfaces de salida excepto por la que ha llegado.
	+ El *enrutamiento aislado* reenvía los paquetes por la interfaz de salida menos congestionada.
	+ También se puede hacer *aleatoriamente*.
* **Estático**. Se decide de antemano por dónde se reenviar los paquetes con cierto destino.
* **Dinámico**. Los nodos se comunican periódicamente y actualizan las tablas de routing.
	+ Por *vector de distancias* cada nodo sabe su distancia a cada destino y se comunica con otros nodos para mantenerse actualizado.
	+ Por *estado de enlaces* todos los nodos conocen la forma de toda la red y con Dijsktra deciden por dónde enviar cada paquete.

Internet usa enrutamiento dinámico. Se organiza jerárquicamente en sistemas autónomos y enruta en cada uno de ellos.

Las **tablas de enrutamiento** asocian destinos con: un gateway (siguiente nodo), una máscara o genmask, algunos flags y la interfaz por la que comunicarse con el gateway.

Para decidir por donde enviar un paquete se coge su dirección de destino, se le aplica el genmask de una entrada de la tabla y se compara el resultado con la dirección de esa entrada, si coinciden se envía por el gateway de esa entrada de la tabla por la interfaz física indicada.

El primer destino 0 con genmask a 0 define el router predeterminado. Un gateway a 0 significa que hay una conexión física directa y se usaría ARP para determinar la dirección física y enviar el mensaje.

Para mostrar la tabla de enrutamiento en consola: route -n.