Condividi tramite


Esempi di Coalescing segmento di ricezione

Questa sezione illustra l'algoritmo di coalescing usando esempi di segmenti ricevuti in ordine ed elaborati in una singola chiamata di procedura posticipata (DPC).

Questa pagina usa X e X' per l'etichettatura di segmenti successivi. Tutti gli altri campi SCU (Single Coalesced Unit) sono descritti in Regole per i segmenti TCP/IP di Coalescing.

Esempio 1: Segmenti di dati

Descrizione segmento

Vengono elaborati 10 segmenti successivi appartenenti alla stessa connessione TCP. Tutte le condizioni seguenti sono vere per ogni:

  • X'. SEQ == X.NXT

  • X'SEQ > X.SEQ

  • X'. ACK == X.ACK

Nessuno di questi segmenti genera un'eccezione.

Risultato

Una singola SCU è costituita da 10 segmenti. Questo valore è indicato come singolo NET_BUFFER in una singola NET_BUFFER_LIST.

Esempio 2: Segmenti di dati, seguiti da un'eccezione, seguiti dai segmenti di dati

Descrizione segmento

Vengono elaborati 5 segmenti successivi appartenenti alla stessa connessione TCP. Tutte le condizioni seguenti sono vere per ogni:

  • X'. SEQ == X.NXT

  • X'SEQ > X.SEQ

  • X'. ACK == X.ACK

Nessuno di questi segmenti genera un'eccezione. Il 6° segmento è un segmento ACK duplicato con un'opzione TCP SACK e genera un'eccezione in base al numero di regola 3 in Regole per segmenti TCP/IP di Coalescing.

Nota In questo caso, la regola di eccezione per la gestione di un'opzione TCP ha la precedenza e quindi esegue l'override della regola di coalescing.

Vengono elaborati 2 segmenti successivi appartenenti alla stessa connessione TCP. Tutte le condizioni seguenti sono vere per ogni:

  • X'. SEQ == X.NXT

  • X'SEQ > X.SEQ

  • X'. ACK == X.ACK

Nessuno di questi segmenti genera un'eccezione.

Risultato

Una singola SCU è costituita dai primi 5 segmenti. Il 6° segmento non forma una SCU.

I 7 e i 8 segmenti formano insieme una SCU.

Una catena NET_BUFFER_LIST è indicata con tre strutture NET_BUFFER_LIST ognuna con una singola NET_BUFFER. L'ordinamento dei segmenti ricevuti viene mantenuto.

Esempio 3: Segmenti di dati, seguiti da più aggiornamenti della finestra

Descrizione segmento

Vengono elaborati 5 segmenti successivi appartenenti alla stessa connessione TCP. Tutte le condizioni seguenti sono vere per ogni:

  • X'. SEQ == X.NXT

  • X'SEQ > X.SEQ

  • X'. ACK == X.ACK

Nessuno di questi segmenti genera un'eccezione. Il 6° segmento è un ACK puro che è un aggiornamento della finestra con SEG. WND = 65535, come illustrato nel diagramma di flusso seguente.

Diagramma di flusso che mostra le regole per i segmenti di unione con l'opzione timestamp TCP.

Il 7° segmento è un ACK puro che è un aggiornamento della finestra con SEG. WND = 131070 come illustrato nello stesso diagramma di flusso.

Risultato

Una singola SCU è costituita da 7 segmenti. Questo valore è indicato come singolo NET_BUFFER in una singola NET_BUFFER_LIST.

The SCU. WND = 131070 e il checksum viene aggiornato in base a questo valore.

Esempio 4: Sdk piggybacked misti con segmenti di dati

Descrizione segmento

Vengono elaborati 3 segmenti successivi appartenenti alla stessa connessione TCP. Tutte le condizioni seguenti sono vere per ogni:

  • X'. SEQ == X.NXT

  • X'SEQ > X.SEQ

  • X'. ACK == X.ACK

Nessuno di questi segmenti genera un'eccezione. Vengono elaborati 2 segmenti successivi appartenenti alla stessa connessione TCP. Tutte le condizioni seguenti sono vere per ogni:

  • X'. SEQ == X.NXT

  • X'SEQ > X.SEQ

  • X'. ACK == X.ACK

Nessuno di questi segmenti genera un'eccezione.

Risultato

Una singola SCU è costituita da 5 segmenti. Questo valore è indicato come singolo NET_BUFFER in una singola NET_BUFFER_LIST. The SCU. ACK è impostato sull'ultimo SEG.ACK.