Exemplos de agrupamento de segmento de recebimento
Esta seção ilustra o algoritmo de união usando exemplos de segmentos recebidos em ordem e processados em uma única chamada de procedimento adiado (DPC).
Esta página usa X e X' para rotular segmentos sucessivos. Todos os outros campos de segmento e SCU (unidade única agrupada) são descritos em Regras para agrupar segmentos TCP/IP.
Exemplo 1: segmentos de dados
Descrição do segmento
Dez segmentos sucessivos pertencentes à mesma conexão TCP são processados. Todas as seguintes condições são verdadeiras para cada um:
X'. SEQ == X.NXT
X'SEQ > X.SEQ
X'. ACK == X.ACK
Nenhum desses segmentos gera uma exceção.
Resultado
Um único SCU é formado entre os 10 segmentos. Isso é indicado como um único NET_BUFFER em um único NET_BUFFER_LIST.
Exemplo 2: segmentos de dados, seguidos por uma exceção, seguidos por segmentos de dados
Descrição do segmento
Cinco segmentos sucessivos pertencentes à mesma conexão TCP são processados. Todas as seguintes condições são verdadeiras para cada um:
X'. SEQ == X.NXT
X'SEQ > X.SEQ
X'. ACK == X.ACK
Nenhum desses segmentos gera uma exceção. O 6º segmento é um segmento ACK duplicado com uma opção TCP SACK e gera uma exceção com base no número de regra 3 em Regras para Agrupar Segmentos TCP/IP.
Nota Nesse caso, a regra de exceção para lidar com uma opção TCP tem precedência e, portanto, substitui a regra de união.
Dois segmentos sucessivos pertencentes à mesma conexão TCP são processados. Todas as seguintes condições são verdadeiras para cada um:
X'. SEQ == X.NXT
X'SEQ > X.SEQ
X'. ACK == X.ACK
Nenhum desses segmentos gera uma exceção.
Resultado
Um único SCU é formado entre os cinco primeiros segmentos. O 6º segmento não forma um SCU.
O 7º e o 8º segmentos formam um SCU juntos.
Uma cadeia de NET_BUFFER_LIST é indicada com três estruturas NET_BUFFER_LIST cada uma com um único NET_BUFFER. A ordenação de segmentos recebidos é mantida.
Exemplo 3: segmentos de dados, seguidos por várias atualizações de janela
Descrição do segmento
Cinco segmentos sucessivos pertencentes à mesma conexão TCP são processados. Todas as seguintes condições são verdadeiras para cada um:
X'. SEQ == X.NXT
X'SEQ > X.SEQ
X'. ACK == X.ACK
Nenhum desses segmentos gera uma exceção. O 6º segmento é um ACK puro que é uma atualização de janela com SEG. WND = 65535, conforme mostrado no fluxograma a seguir.
O 7º segmento é um ACK puro que é uma atualização de janela com SEG. WND = 131070, conforme mostrado no mesmo fluxograma.
Resultado
Um único SCU é formado entre os 7 segmentos. Isso é indicado como um único NET_BUFFER em um único NET_BUFFER_LIST.
O SCU. WND = 131070 e a soma de verificação é atualizada com base nesse valor.
Exemplo 4: ACKs com piggybacked misturados com segmentos de dados
Descrição do segmento
Três segmentos sucessivos pertencentes à mesma conexão TCP são processados. Todas as seguintes condições são verdadeiras para cada um:
X'. SEQ == X.NXT
X'SEQ > X.SEQ
X'. ACK == X.ACK
Nenhum desses segmentos gera uma exceção. Dois segmentos sucessivos pertencentes à mesma conexão TCP são processados. Todas as seguintes condições são verdadeiras para cada um:
X'. SEQ == X.NXT
X'SEQ > X.SEQ
X'. ACK == X.ACK
Nenhum desses segmentos gera uma exceção.
Resultado
Um único SCU é formado entre os cinco segmentos. Isso é indicado como um único NET_BUFFER em um único NET_BUFFER_LIST. O SCU. O ACK é definido como o último SEG.ACK.