Definición
Si un paquete completo tiene un tamaño mayor al MTU, se deberá fragmentar. Los paquetes no son reensamblados en el camino, sino en el host de destino. Si se pierde un fragmento, IP descartará el paquete completo
Los headers de IP tienen tres campos utilizados para la fragmentación
- Identification
- Es un número de
bits que identifica cada paquete, permite definir de qué paquete provienen los fragmentos
- Es un número de
- Flags
- Son
bits - El primero no es utilizado, siempre valdrá cero
- El segundo es el bit “Do not Fragment”. Si vale uno, el paquete será descargado, si es necesario fragmentarlo
- El tercer bit es el “More Fragments”. Vale cero si es el último fragmento de un paquete
- Son
- Fragment offset
- Número de
bits que determina la posición del primer bit del fragmento con relación al paquete completo. Debido a que tenemos bits menos, la posición real se obtiene tras multiplicar el offset por . Debido a esto, el tamaño de payload de los fragmentos debe ser múltiplo de
- Número de
Método de fragmentación
- Si el tamaño del datagrama
(incluyendo el header) es mayor al MTU, debemos fragmentar - Calculamos el tamaño del payload
(sin header) como
- Calculamos el máximo tamaño de fragment payload
permitido, como
- Como nuestro fragmento debe tener un tamaño múltiplo de
, entonces debemos hallar el máximo valor permitido múltiplo de , este será
- A partir del nuestro fragment payload size, podemos calcular la cantidad de fragmentos que debemos enviar como
- Construiremos un fragmento con payload size
, datagram size , y fragment offset de - Repetiremos el procedimiento para el resto de fragmentos que se necesitan enviar. El tamaño de todos los fragmentos enviados será el mismo (
) excepto el último, que tendrá un tamaño menor (o igual). Los fragment offset incrementará linealmente a razón de por cada fragmento enviado. El último fragmento tendrá a bit de “More Fragments” en . Lógicamente, todos los paquetes tendrán el bit de “Do Not Fragment” en
Ejemplo
Nro de frag | Fragment offset | Total length | Payload length | More fragments | |
---|---|---|---|---|---|
Llega | |||||
a | |||||
Llega | |||||
a | |||||
Llega | |||||
a | |||||