La capa de red. Volumen IV : IPv4

Escrito por Sergio De Luz
Redes
2

En los capítulos anteriores vimos las funciones principales de la capa de red, más tarde hablamos sobre la arquitectura ATM y por último sobre las redes de circuitos virtuales y las redes de datagramas.

Ahora hablaremos sobre el direccionamiento en internet mediante el protocolo IPv4, en un futuro próximo nos meteremos en IPv6 de lleno para informaros de todo.

Un datagrama IP tiene 20Bytes de cabecera, y si este datagrama es transportado en un segmento TCP, se añaden 20Bytes más por la cabecera de TCP, a estos Bytes hay que sumarle los datos útiles.

Un datagrama IPv4 tiene la siguiente estructura:

Si os interesa saber qué significa cada opción, os recomiendo leerlo en Wikipedia ya que es teoría pura.

Fragmentación del datagrama IP

En ocasiones, necesitamos fragmentar un determinado paquete en varios datagramas IP de menor tamaño. Por ejemplo, las tramas Ethernet pueden transportar como máximo hasta 1500Bytes (si vuestro router os permite cambiar el MTU, veréis que siempre oscila entre 1480 y 1500 Bytes).

Antes de continuar, debemos conocer un concepto clave, el MTU (Maximum Transmission Unit) o también conocido como unidad máxima de transmisión que es el que limita el tamaño máximo de la trama. Cada datagrama IP se encapsula dentro de una trama de la capa de enlace para ir de un router a otro, aquí es donde actúa el MTU, que fragmentará (si es necesario) el datagrama IP.

Ejemplo: Si tenemos un “paquete” de 2000 Bytes y el MTU del enlace es de 1500Bytes necesitaremos enviar 2 datagramas.

Supongamos que la tranmisión se realiza mediante UDP, por lo que la cabecera es de 20Bytes.
El primer datagrama tendrá un tamaño de 20Bytes+1480Bytes de carga útil.
El segundo datagrama tendrá un tamaño de 20Bytes+520Bytes de carga útil.

A cada datagrama fragmentado, hay que añadirle su cabecera correspondiente.

Reensamblado de los fragmentos

Los fragmentos deben ser reensamblados antes de llegar a la capa de transporte del host de destino. El encargado de reensamblar estos fragmentos son los sistemas terminales, para que el núcleo de la red sea lo más simple posible.

Cada datagrama fragmentado tiene un identificador que se corresponde con un mismo “paquete”, también tiene un controlador a la hora del reensamblado que nos dirá dónde tendremos que colocar el nuevo fragmento (imaginemos que fragmentamos en 1,2 y 3, y luego reensamblamos 1,3 y 2). También tiene un flag para indicar que no hay más fragmentos que enviar para un mismo identificador.

En el host de destino, los datos pasan a la capa de transporte cuando la capa de red ha reconstruído totalmente el paquete, si alguno no llega, se descarta. Si usamos TCP pediremos la retransmisión de los datos.

¿Qué ocurre si decidimos fragmentar paquetes “manualmente” de forma malintencionada? Aquí nos encontramos con un gran problema de la fragmentación de paquetes, podemos generar ataques de denegación de servicio ya que el host se quedaría esperando a los fragmentos restantes y se colapsaría. IPv6 no permite la fragmentación.

Ejemplo práctico

Nos vamos a ir a ESTA FOTO, que es la foto que hemos puesto en esta misma entrada. Podéis ver aquí sus características:

Podemos ver cómo tiene casi 13KB por lo que seguro que IP fragmentará, ¿verdad? Pues ahora vamos a ver si todo lo que os hemos contado es verdad o no.

Procedemos a abrir esta foto con el navegador y con el programa Wireshark abierto (este programa para los administradores de redes es fundamental).

Podemos ver todo el LOG de Wireshark con todas las partes.

Primero hacemos un GET a la foto, a continuación podéis ver las partes en las que se fragmenta.

Y en el 200/OK tenemos todas las partes, fijaos el Seq (número de secuencia) y todos los ACK de cada fragmento.

Hasta aquí hemos llegado con esta entrega.

En el próximo volumen hablaremos de direccionamiento IP, nos divertiremos!!