¿Qué es la fragmentación de paquetes? ¿Por qué es necesario?

Cada red basada en paquetes tiene un tamaño MTU (unidad de transmisión máxima). La MTU es el tamaño del paquete más grande que puede transmitir esa red.

Los paquetes más grandes que la MTU permitida deben dividirse en paquetes o fragmentos más pequeños para permitirles atravesar la red.

Encabezados de paquetes

Cada paquete IP tiene un encabezado IP (Protocolo de Internet) que almacena información sobre el paquete, que incluye:

· Versión

· DIH

· Tipo de servicio

· Largo total

· Identificación

· Banderas

· Compensación de fragmentos

· Tiempo para vivir

· Protocolo

· Suma de verificación del encabezado

· Dirección de la fuente

· Dirección de destino

· Opciones

Nota: Para obtener más información sobre el encabezado IP, consulte RFC 791 – Protocolo de Internet .

Tres de estos campos están involucrados en la fragmentación de paquetes.

· Identificación

· Banderas

· Compensación de fragmentos

Identificación: 16 bits

Un valor de identificación que el remitente asigna para ayudar a ensamblar los fragmentos de un datagrama.

Banderas: 3 bits

Varias banderas de control.

Bit 0: reservado, debe ser cero
Bit 1: (DF) 0 = Fragmento de mayo, 1 = No fragmentar.
Bit 2: (MF) 0 = Último fragmento, 1 = Más fragmentos.

0 1 2

+ – + – + – +

El | El | D | M |

El | 0 | F | F |

+ – + – + – +

Desfase de fragmentos: 13 bits

Este campo indica en qué parte del datagrama pertenece este fragmento.

El desplazamiento del fragmento se mide en unidades de 8 octetos (64 bits). El primer fragmento tiene desplazamiento cero.

Al igual que el encabezado IP, el encabezado TCP (Protocolo de control de transmisión) almacena información sobre el paquete:

· Puerto de origen

· Puerto de destino

· Secuencia de números

· Número de acuse de recibo

· Compensación de datos

· Banderas

· Ventana

· Suma de comprobación

· Puntero urgente

· Opciones

· Relleno

Un ejemplo de fragmentación de paquetes

Si un paquete de 2,366 bytes ingresa a una red Ethernet con un tamaño de MTU predeterminado, debe fragmentarse en dos paquetes.

El primer paquete:

· Tener 1.500 bytes de longitud. 20 bytes serán el encabezado IP, 24 bytes serán el encabezado TCP y 1.456 bytes serán datos.

· Tener un bit DF igual a 0 para significar “Fragmento de mayo” y un bit MF igual a 1 para significar “Más fragmentos”.

· Tener una compensación de fragmentación de 0.

El segundo paquete:

· Tener 910 bytes de longitud. 20 bytes serán el encabezado IP, 24 bytes serán el encabezado TCP y 866 bytes serán datos.

· Tener el bit DF igual a 0 para significar “Fragmento de mayo” y el bit MF igual a 0 para significar “Último fragmento”.

· Tener una compensación de fragmentación de 182 (Nota: 182 es 1456 dividido por 8).

El ataque de fragmentación de paquetes

La fragmentación de paquetes se puede utilizar para sortear las reglas de bloqueo en algunos firewalls.

Esto se hace haciendo trampa con el valor de la compensación de fragmentos. El truco consiste en establecer el valor de Fragment Offset en el segundo paquete tan bajo que, en lugar de agregar el segundo paquete al primer paquete, en realidad sobrescribe los datos y parte del encabezado TCP del primer paquete.

Si alguien quiere `telnet` en una red donde un cortafuegos de filtrado de paquetes bloquea el puerto TCP 23, el puerto 25 SMTP está permitido en esa red.

El usuario tendría que enviar dos paquetes:

El primer paquete sería:

· Tener una compensación de fragmentación de 0.

· Tener un bit DF igual a 0 para significar “Fragmento de mayo” y un bit MF igual a 1 para significar “Más fragmentos”.

· Tener un puerto de destino en el encabezado TCP de 25. El puerto TCP 25 está permitido, por lo que el firewall permitiría que ese paquete ingrese a la red.

El segundo paquete sería:

· Tener un Desfase de Fragmentación de 1. Esto significa que el segundo paquete en realidad sobrescribiría todo excepto los primeros 8 bits del primer paquete.

· Tener un bit DF igual a 0 para significar “Fragmento de mayo” y un bit MF igual a 0 para significar “Último fragmento”.

· Tenga un puerto de destino en el encabezado TCP de 23. Esto normalmente estaría bloqueado, ¡pero no lo será en este caso!

El cortafuegos de filtrado de paquetes verá que la compensación de fragmentos es mayor que cero en el segundo paquete. A partir de estos datos, deducirá que el segundo paquete es un fragmento de otro paquete y no comparará el segundo paquete con el conjunto de reglas.

Cuando los dos paquetes lleguen al host de destino, se volverán a ensamblar. El segundo paquete sobrescribirá la mayor parte del primer paquete y el contenido del paquete combinado irá al puerto 23.

Para comprender la fragmentación de paquetes, debe saber acerca de la Unidad de transmisión máxima (MTU). Cada red basada en paquetes tiene un tamaño de MTU. Este tamaño es igual al tamaño del paquete más grande que la red puede transmitir.

Los paquetes no deben tener un tamaño mayor que la MTU de la red para poder recorrerla. Si un paquete es mayor que la MTU permitida, entonces el paquete se divide en fragmentos más pequeños para permitir que se transmitan a lo largo de la red.

Suponga que está enviando un paquete de datos de una red a otra. Ambas redes tienen MTU diferentes. En este caso, supongamos que está en una WLAN y que la otra persona está en una red Ethernet.

La MTU para su red es de 7981 bytes y para la red Ethernet es de 1500 bytes. Por lo tanto, si bien los paquetes de mayor tamaño pueden atravesar la red inalámbrica, se dividirán en fragmentos más pequeños para atravesar la red Ethernet.

Shantanu es parcialmente correcto. El tamaño del paquete de Ethernet es de 1500 Bytes máx. Sin embargo, en una red 802.3, según las siete capas OSI, donde sus datos tendrán cubiertas externas de casi todas y cada una de las capas, el tamaño máximo de paquete que su adaptador Ethernet podría transmitir en cualquier momento dado será 1492. Aquí Se dejan 8 bytes para los encabezados TCP-IP, de modo que se pueda marcar en ese paquete quién es el originador y quién será el destinatario objetivo, ya sea en la misma red o en otra.

Los paquetes se fragmentan en el origen y el receptor los vuelve a ensamblar en el destino para formar un mensaje completo.

Mira una muestra a continuación;

C: \> ping /?
Uso: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]
[-r cuenta] [-s cuenta] [[-j host-list] | [-k host-list]]
[-w tiempo de espera] [-R] [-S srcaddr] [-4] [-6] nombre_destino
Opciones:
-t Haga ping al host especificado hasta que se detenga.
Para ver estadísticas y continuar, escriba Control-Break;
Para detener, escriba Control-C.
-a Resolver direcciones a nombres de host.
-n cuenta Número de solicitudes de eco para enviar.
-l tamaño Enviar tamaño del búfer.
-f Establece el indicador No fragmentar en el paquete (solo IPv4).
-i TTL Tiempo de vida.
-v TOS Tipo de servicio (solo IPv4. Esta configuración ha quedado en desuso
y no tiene ningún efecto sobre el tipo de campo de servicio en el Encabezado de IP).
-r count Grabar ruta para contar saltos (solo IPv4).
-s count Timestamp para count hops (solo IPv4).
-j host-list Ruta de origen suelta a lo largo de la lista de host (solo IPv4).
-k host-list Ruta de origen estricta a lo largo de host-list (solo IPv4).
-w tiempo de espera Tiempo de espera en milisegundos para esperar cada respuesta.
-R Use el encabezado de enrutamiento para probar la ruta inversa también (solo IPv6).
-S srcaddr Dirección de origen para usar.
-4 Fuerza usando IPv4.
-6 Fuerza usando IPv6.

C: \> ping google.co.uk -l 65500 -f

Hacer ping a google.co.uk [74.125.239.111] con 65500 bytes de datos:
El paquete debe estar fragmentado pero el DF configurado.
El paquete debe estar fragmentado pero el DF configurado.
El paquete debe estar fragmentado pero el DF configurado.
El paquete debe estar fragmentado pero el DF configurado.

Estadísticas de ping para 74.125.239.111:
Paquetes: enviados = 4, recibidos = 0, perdidos = 4 (pérdida del 100%),

El paquete de solicitud de eco ICMP normal es de 32 bytes en Windows y 56 bytes en Linux. Sin embargo, aquí estoy enviando deliberadamente un paquete muy grande de 64 KB … bueno, casi. Además, con el interruptor “-f”, le digo que no sea FRAGMENTO, es por eso que NO PUEDO hacer ping al sitio Google.co.uk.

Para su información … Érase una vez, Windows 95, 98, NT y algunos de los primeros servidores Win2K sin parches tenían una vulnerabilidad con su pila TCP-IP y el kernel de Windows que permitía a un atacante remoto derribar / bloquear una máquina basada en Windows solo por comando Ping . Esto se llama PING DE LA MUERTE. Microsoft lo reparó con SP2 o SP3 para servidores Win2K y luego todos los servidores Win2K3 se crearon a prueba de fallas y no pudieron aceptar paquetes ICMP ER más allá de 1500 bytes.