Ejemplos de fusión de segmentos de recepción
En esta sección se muestra el algoritmo de fusión mediante ejemplos de segmentos que se reciben en orden y se procesan en una única llamada a procedimiento diferido (DPC).
En esta página se usa X y X' para etiquetar segmentos sucesivos. Todos los demás campos de segmento y unidad única fusionada (SCU) se encuentran como se describe en Reglas para fusión de segmentos TCP/IP.
Ejemplo 1: Segmentos de datos
Descripción del segmento
Se procesan 10 segmentos sucesivos que pertenecen a la misma conexión TCP. Todas las condiciones siguientes son verdaderas para cada una:
X'. SEQ == X.SERVER
X'SEQ > X.SEQ
X'. ACK == X.ACK
Ninguno de estos segmentos genera una excepción.
Resultado
Una sola SCU se forma a partir de los 10 segmentos. Esto se indica como una sola NET_BUFFER en una sola NET_BUFFER_LIST.
Ejemplo 2: Segmentos de datos, seguidos de una excepción, seguidos de segmentos de datos
Descripción del segmento
Se procesan 5 segmentos sucesivos que pertenecen a la misma conexión TCP. Todas las condiciones siguientes son verdaderas para cada una:
X'. SEQ == X.SERVER
X'SEQ > X.SEQ
X'. ACK == X.ACK
Ninguno de estos segmentos genera una excepción. El 6º segmento es un segmento ACK duplicado con una opción TCP SACK y genera una excepción basada en el número de regla 3 en Reglas para fusión de segmentos TCP/IP.
Nota En este caso, la regla de excepción para controlar una opción TCP tiene prioridad y, por tanto, invalida la regla de fusión.
Se procesan 2 segmentos sucesivos que pertenecen a la misma conexión TCP. Todas las condiciones siguientes son verdaderas para cada una:
X'. SEQ == X.SERVER
X'SEQ > X.SEQ
X'. ACK == X.ACK
Ninguno de estos segmentos genera una excepción.
Resultado
Una única SCU se forma a partir de los primeros 5 segmentos. El 6º segmento no forma una SCU.
Los segmentos 7 y 8 forman un SCU juntos.
Una cadena de NET_BUFFER_LIST se indica con tres estructuras NET_BUFFER_LIST cada una con una sola NET_BUFFER. Se mantiene la ordenación de los segmentos recibidos.
Ejemplo 3: Segmentos de datos, seguidos de varias actualizaciones de ventana
Descripción del segmento
Se procesan 5 segmentos sucesivos que pertenecen a la misma conexión TCP. Todas las condiciones siguientes son verdaderas para cada una:
X'. SEQ == X.SERVER
X'SEQ > X.SEQ
X'. ACK == X.ACK
Ninguno de estos segmentos genera una excepción. El 6º segmento es un ACK puro que es una actualización de ventana con SEG. WND = 65535 como se muestra en el siguiente diagrama de flujo.
El 7º segmento es un ACK puro que es una actualización de ventana con SEG. WND = 131070 como se muestra en el mismo diagrama de flujo.
Resultado
Una sola SCU se forma a partir de los 7 segmentos. Esto se indica como una sola NET_BUFFER en una sola NET_BUFFER_LIST.
The SCU. WND = 131070 y la suma de comprobación se actualiza en función de este valor.
Ejemplo 4: ACK de Piggybacked mixtos con segmentos de datos
Descripción del segmento
Se procesan 3 segmentos sucesivos que pertenecen a la misma conexión TCP. Todas las condiciones siguientes son verdaderas para cada una:
X'. SEQ == X.SERVER
X'SEQ > X.SEQ
X'. ACK == X.ACK
Ninguno de estos segmentos genera una excepción. Se procesan 2 segmentos sucesivos que pertenecen a la misma conexión TCP. Todas las condiciones siguientes son verdaderas para cada una:
X'. SEQ == X.SERVER
X'SEQ > X.SEQ
X'. ACK == X.ACK
Ninguno de estos segmentos genera una excepción.
Resultado
Una sola SCU se forma a partir de los 5 segmentos. Esto se indica como una sola NET_BUFFER en una sola NET_BUFFER_LIST. The SCU. ACK se establece en el último SEG.ACK.