2011-10-21 72 views

Respuesta

11

Cada fragmento, excepto el último, debe contener un múltiplo de 8 bytes de datos.

Fragment Offset puede contener 8192 (2^13) unidades pero el datagrama no puede tener 8192 * 8 = 65536 bytes de datos porque el campo "Total Length" del encabezado IP registra el tamaño total incluyendo el encabezado y los datos.

Un encabezado IP tiene al menos 20 bytes de longitud, por lo que el valor máximo para "Desplazamiento de Fragmentos" está restringido a 8189, lo que deja espacio para 3 bytes en el último fragmento.

Espero que esto ayude.

+2

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

2

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

0

lo dijo Wayne, más el hecho de que el offset se utiliza realmente en huéspedes finales para que puedan almacenar de manera eficiente los fragmentos en la memoria de manera eficiente, es decir, en una fila. El desplazamiento muestra la posición relativa de un fragmento con respecto al datagrama completo. Es por eso que el desplazamiento tiene que ser los fragmentos de IP debe estar en múltiplos de 8 bytes porque lo que realmente se hace es un desplazamiento a la derecha en 3 bits (de ahí los 13 bits).

0

Aquí (https://cs.nyu.edu/courses/fall98/G22.2262-001/class11.txt) se da que: el desplazamiento del fragmento se mide en unidades de 8 bytes (64 bits). Esto se debe a que el campo de desplazamiento del fragmento es 3 bits más corto que el campo de longitud total, es decir, 16 bits (y 2^3 es 8).

Cuestiones relacionadas