Tenga en cuenta que el campo Desplazamiento de Fragmento se expresa en unidades de 8 bytes, no en bytes. Esta es la razón por la que el tamaño de la carga dentro de cada fragmento, excepto el último fragmento, debe ser múltiplo de 8 bytes.
Como el Desplazamiento de Fragmentos está codificado en 13bits, resulta que su rango está entre 0 y 8191 unidades de 8 bytes. Sin embargo, dado que la longitud total tiene en cuenta también el encabezado IP, el límite máximo de desfase de fragmentos es de hecho 8189 unidades, no 8191 unidades, ver a continuación:
Longitud total codificada en 16 bits significa que está limitada a 65535 bytes. Entonces, como el encabezado IP tiene al menos 20 bytes, resulta que la carga útil está limitada a un máximo de 65535 bytes - 20 bytes = 65515 bytes. Al dividir estos 65515 bytes en unidades de 8 bytes, resulta que podría haber un máximo de 8189 unidades, por lo tanto, el desplazamiento de fragmentación está limitado a un máximo de 8189 unidades.
un fragmento IP que tiene el valor Fragmento Offset ajustado a este valor máximo de 8189, podría tener una carga útil de un máximo de 3 bytes:
máximo 65535 bytes - mínimo 20 bytes - (8189 unidades * 8 bytes por unidad) = máximo 3 bytes
Rurre
gracias por su respuesta @Wayne Shears, como usted dijo: Fragment Offset puede contener 8192 (2^13) unidades [** ¿qué significa unidades? ¿Quiere decir bytes? **] pero el datagrama no puede tener 8192 * 8 = 65536 bytes de datos [** ¿por qué? **] porque el campo "Longitud total" del encabezado IP registra el tamaño total incluyendo el encabezado y los datos [** todo lo que sé es el totallength = tamaño del encabezado + carga útil. y el tamaño total es el tamaño 16, por lo que el valor subirá a 2^16, que es 65536, ¿pensé que algo iba mal? **]. – user991482