Compartilhar via


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.

Fluxograma que mostra regras para agrupar segmentos com a opção de carimbo de data/hora TCP.

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.