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.
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.