Está en la página 1de 8

1.

Introducción

Uno de los mecanismos de la propiedad intelectual es la fragmentación y el mo


ntaje. Bajo
determinadas circunstancias, un datagrama originalmente transmitida como una sol
a
unidad llegará a su destino final roto en varios fragmentos.
La capa de IP en el host receptor debe acumular estos fragmentos hasta
suficiente haber llegado a reconstituir totalmente el datagrama original.
El documento de especificaciones de IP proporciona una descripción completa del
montaje mecanismo, y contiene varios ejemplos. También proporciona
un algoritmo posible para volver a montar, con base en el seguimiento de
llegan fragmentos en un vector de bits. Este documento describe un
enfoque alternativo que resulte más adecuado en algunas máquinas.

Un examen superficial del proceso de montaje puede sugerir


que es bastante complicado. En primer lugar, es necesario no perder de vista
todos los fragmentos, lo que sugiere un trabajo de contabilidad pequeña. En segund
o lugar, cuando
un nuevo fragmento llega, se puede combinar con los fragmentos existentes en una
número de maneras diferentes. Es precisamente puede llenar el espacio entre dos
fragmentos, o bien pueden coincidir con los fragmentos existentes, o en su total
idad
2

fragmentos duplicados existentes, o en parte, llenar un espacio entre dos


fragmentos sin colindante a cualquiera de ellos. Por lo tanto, podría parecer que
la
proceso de montaje puede implicar el diseño de un bastante complicado
algoritmo que comprueba una serie de diferentes opciones.

De hecho, el proceso de montaje es extremadamente simple. Esta


documento describe una forma de tratar con el montaje que reduce la
contabilidad problema a un mínimo, que requiere para el almacenamiento de una sola
amortiguamiento del mismo tamaño que el datagrama final es volver a montar, lo que
puede
montamos un datagrama desde cualquier número de fragmentos que llegan a cualquier
orden
con cualquier posible patrón de superposición y duplicación de esfuerzos, y que es
adecuada para casi cualquier tipo de sistema operativo.

El lector debe consultar el documento de especificación de IP para asegurarse


de
que está completamente familiarizado con el concepto general del montaje,
y los campos de cabecera particular, y el vocabulario utilizado para describir e
l
proceso.

2. El Algoritmo

Para definir este algoritmo volver a montar, es necesario


definir algunos términos. Un datagrama parcialmente reensamblado consiste en deter
minados
secuencias de octetos que ya han llegado, y algunas zonas todavía
por venir. Nos referiremos a estas áreas que faltan como "agujeros". Cada hoyo
puede ser caracterizada por dos números, hole.first, el número de la primera
octeto en el agujero, y hole.last, el número del último octeto en el
agujero. Este par de números que llamaremos el descriptor "hueco", y
asumirá que todos los descriptores agujero para un datagrama particular
se reúnen en la lista "agujero descriptor".
3

La forma general del algoritmo es el siguiente. Cuando una nueva


fragmento del datagrama llega, posiblemente se llenará en una o más
de los agujeros existentes. Examinaremos cada una de las entradas en el agujero
lista de descriptores para ver si el agujero en cuestión se elimina por
este fragmento de entrada. Si es así, vamos a eliminar esa entrada de la lista.
Finalmente, un fragmento llegará lo que elimina todas las entradas de la
lista. En este punto, el datagrama ha sido totalmente montados y
se puede pasar a niveles superiores de protocolo para su posterior procesamiento
.

El algoritmo se describe en dos fases. En la primera parte,


vamos a mostrar la secuencia de pasos que se ejecutan cuando un nuevo
fragmento llega, con el fin de determinar si alguna de las
orificios existentes están ocupados por el nuevo fragmento. En la segunda parte de
esta descripción, vamos a mostrar un algoritmo ridículamente simple para
gestión de la lista de descriptores agujero.

3. Fragmento de procesamiento del algoritmo

Un fragmento de llegar puede llenar cualquiera de los orificios existentes


en una serie
maneras. La mayoría simplemente, se puede llenar por completo un agujero. Como alt
ernativa,
puede dejar algo de espacio en ya sea al inicio o al final de un
existentes agujero. O, por último, puede permanecer en medio de una ya existente
agujero, rompiendo el agujero en medio y dejando un agujero más pequeño en cada extr
emo.
Debido a estas posibilidades, podría parecer que una serie de pruebas
debe realizarse un nuevo fragmento llega, lo que lleva a un lugar
complicado algoritmo. De hecho, si se expresa, el algoritmo
puede comparar cada agujero para el fragmento de llegar a sólo cuatro pruebas.
4

Comenzamos el algoritmo cuando los primeros fragmentos del datagrama


llega. Empezamos por crear una zona buffer de datos vacía y poner un
la entrada en su lista de descriptores agujero, la entrada que describe la
datagrama como completamente desaparecidos. En este caso, es igual a hole.first
cero, y hole.last es igual a infinito. (Infinity es presumiblemente a cabo
por un entero muy grande, superior a 576, según decida el implementador de.)
Los ocho pasos siguientes se utilizan para insertar cada uno de los que llegan
fragmentos en la zona de amortiguación en el datagrama completo se está
acumulado. El fragmento que llegan es descrito por fragment.first, el
primer octeto del fragmento, y fragment.last, el último octeto de la
fragmento.

1. Seleccione el siguiente hoyo descriptor del descriptor de agujero


lista. Si no hay más entradas, vaya al paso ocho.
2. Si es mayor que fragment.first hole.last, vaya al paso uno.
3. Si es inferior a fragment.last hole.first, vaya al paso uno.

- (Si bien el paso dos o tres pasos es cierto, entonces el


fragmento recién llegados no se superpone con el agujero en
modo alguno, por lo que necesitamos no prestar atención adicional a est
e
agujero. Volvemos al comienzo del algoritmo, donde
seleccionamos el siguiente hoyo para su examen.)

4. Eliminar la entrada actual de la lista de descriptores agujero.

- (Ya que ni el paso dos, ni tres pasos era cierto, la


fragmento recién llegados no interactuar con este agujero en
alguna manera. Por lo tanto, el descriptor actual, sin
dejará de ser válida. Vamos a destruirlo, y en los próximos
dos pasos que determinará si es o no
necesarias para crear cualquier descriptores nuevo agujero.)

5. Si es mayor que fragment.first hole.first, a continuación, crear una


Descriptor nuevo agujero "new_hole" con new_hole.first igual a
hole.first y new_hole.last igual a menos fragment.first
una.
5

- (Si la prueba en el paso cinco es cierto, entonces la primera parte


del agujero original no sea ocupado por este fragmento. Nosotros
crear un nuevo descriptor de este agujero más pequeño.)

6. Si es inferior a fragment.last hole.last y fragment.more


fragmentos es verdad, entonces crea un nuevo agujero descriptor
"New_hole", con new_hole.first igual a fragment.last más
y un new_hole.last igual a hole.last.

- (Esta prueba es el espejo del paso de cinco años con un


característica adicional. En un principio, no sabíamos cuánto tiempo
volver a montar el datagrama sería, y por lo tanto
creó un agujero que va de cero a infinito.
Con el tiempo, vamos a recibir el último fragmento de la
datagrama. En este punto, que ese agujero descriptor
se extiende desde el último octeto de la memoria intermedia hasta el in
finito
pueden ser descartados. El fragmento que contiene los últimos
fragmento indica este hecho con una bandera en la Internet
cabecera llamados "fragmentos más". La prueba de este bit en
Esta declaración nos impide crear un descriptor
para el hoyo innecesarios que describe el espacio de la
final del datagrama hasta el infinito.)

7. Vaya al paso uno.


8. Si la lista de descriptores agujero está vacío, el datagrama es ahora
completa. Pase la información al procesador de protocolo de nivel superior
para su posterior manipulación. De lo contrario, el regreso.

4. Segunda Parte: Gestión de la lista de descriptores del agujero

La complejidad principal en el algoritmo de paso ocho de arriba no es


realización de las pruebas aritméticas, pero en adición y eliminación de entradas
de la lista de descriptores agujero. Uno podría imaginar una aplicación en
que el paquete de gestión de almacenamiento era muchas veces más complicado
que el resto del algoritmo, ya que no existe un límite superior especificado
sobre el número de descriptores agujero que existen para un datagrama en
volver a montar. Hay una manera muy simple para tratar con el agujero
descriptores, sin embargo. Sólo hay que poner cada descriptor agujero en los octet
os primero
6

del propio agujero. Tenga en cuenta que en la definición del montaje


algoritmo, el tamaño mínimo de un agujero es de ocho octetos. Para almacenar
hole.first y hole.last presumiblemente requerirá dos octetos cada uno. Una
dos octetos adicionales deberán hilo juntos las entradas de
la lista de descriptores agujero. Esto deja al menos dos octetos más para tratar
con idiosincrasias aplicación.

Sólo hay un escollo evidente para esta estrategia de almacenamiento. Uno


debe ejecutar el algoritmo de ocho paso anterior antes de copiar los datos de
el fragmento en el búfer de reensamblaje. Si uno se para copiar los datos
primera vista, podría aplastar a los descriptores una o más hoyos. Una vez que el al
goritmo
anterior se ha ejecutado, cualquier agujero que los descriptores están a punto de
ser aplastado
ya han quedado obsoletas.

5. Loose Ends

Dispersión de los descriptores en todo el agujero de montaje de amortiguación


se exige que se enrosca en una especie de lista de manera que
se pueden encontrar. Esto a su vez implica que debe ser un puntero a
la cabeza de la lista. En muchos casos, este puntero se puede almacenar en algun
os
especie de bloque de descriptor que los asociados con cada aplicación
reensamblaje de amortiguación. Si no se almacenen en que se disponga, una sucia, p
ero
truco eficaz es almacenar la cabeza de la lista en una parte de la
cabecera internet en el búfer de montaje que ya no es necesario. Una
sitio obvio es el campo de control.

Cuando el último fragmento del datagrama llega, la longitud del paquete


campo en el encabezado de Internet debe ser llenado pulg
7

6. Opciones

La descripción anterior hizo una simplificación inaceptable. Lo


supone que no hay opciones de Internet relacionados con el datagrama
ser montados de nuevo. La dificultad con las opciones es que hasta un
recibe el primer fragmento del datagrama, no se sabe cuán grande es el
cabecera internet será. Esto es porque, mientras que las opciones son ciertas
copiado de forma idéntica en cada fragmento de un datagrama, otras opciones,
tales como "registro de ruta", se colocan en el primer fragmento solamente. (El
primer "
fragmento "es el fragmento que contiene el octeto cero de la original
datagrama.)
Hasta se sabe qué tan grande es el encabezado de Internet, uno no sabe
dónde copiar los datos de cada fragmento en el búfer de reensamblaje.
Si el inicio de los fragmentos para llegar pasa a ser el primer fragmento,
entonces esto no es problema. De lo contrario, hay dos soluciones. En primer lug
ar,
uno puede dejar un espacio en el buffer de reensamblado para el máximo posible
Internet cabecera. De hecho, el tamaño máximo no es muy grande, de 64 años
octetos. Por otra parte, uno simplemente puede apostar que el primer fragmento
contendrá ninguna opción. Si, cuando el primer fragmento finalmente llega,
hay opciones, una a continuación, puede cambiar los datos en el buffer de un
distancia suficiente para permitir que para ellos. El único peligro en la copia de
la
datos es que uno va a la basura los punteros de ese hilo del agujero
descriptores juntos. Es fácil ver cómo untrash los punteros.

La fuente y las opciones de registro de ruta tiene la característica interesa


nte
que, desde diferentes fragmentos pueden seguir diferentes caminos, pueden
llegan con diferentes rutas de regreso registrados en distintos fragmentos.
8

Generalmente, esto es más información que el módulo de Internet que reciben


necesidades. El procedimiento que se especifica es tomar la ruta de regreso regi
strados en
el primer fragmento e ignorar las demás versiones.

7. El algoritmo completo

Además del algoritmo descrito anteriormente, hay dos partes


el proceso de montaje. En primer lugar, cuando un fragmento llega, es necesario
para encontrar el montaje de búfer asociado con ese fragmento. Esta
requiere de algún mecanismo para la búsqueda de todos los existentes montaje
buffers. El buffer de montaje correctos se identifica por una igualdad de
los siguientes ámbitos: la dirección de Internet extranjeros y locales, el
el protocolo de identificación, y el campo de identificación.

La parte final del algoritmo es una especie de temporizador basado


mecanismo que disminuye el tiempo de vivir el terreno de cada parte
datagrama vuelto a montar, por lo que los datagramas incompleta que han dejado
su utilidad puede ser detectado y eliminado. Uno puede crear un
demonio que cobra vida una vez por segundo y decrementos de la materia en cada
datagrama por uno, o uno puede leer el reloj cuando cada fragmento de primera
llega, y la cola de algún tipo de llamada de temporizador, utilizando cualquier si
stema de
mecanismo es adecuado, para aprovechar los datagramas cuando su tiempo ha llegad
o.

Una implementación del algoritmo completo que incluye todos estos


partes se construyó en BCPL como una prueba. El algoritmo completo se
menos de uno y las páginas de la mitad de la enumeración, y generó aproximadamente
400 nova instrucciones de máquina. La parte del algoritmo de hecho

involucrados con la gestión de los descriptores agujero es alrededor de 20 líneas de


código.

También podría gustarte