Indicazione dei segmenti coalesci
Una singola unità di unione (SCU) è una sequenza di segmenti TCP uniti in un singolo segmento TCP in base alle regole definite in Regole per il coalescing di segmenti TCP/IP. Questa sezione descrive come indicare i segmenti uniti risultanti.
Un SCU deve:
Essere indicato chiamando NdisMIndicateReceiveNetBufferLists.
Sembra un normale segmento TCP ricevuto in rete.
Non superare la lunghezza massima del datagramma IP legale, come definito nella sezione 3.1 di RFC 791.
Nota Poiché i segmenti con intestazioni di estensione IPv6 non possono essere uniti (vedere Condizioni di eccezione che terminano il coalescing), le dimensioni di SCU per i datagrammi IPv6 sono limitate anche dalla lunghezza massima del datagramma legale.
Il driver NIC o miniport deve ricompilare i checksum TCP e IPv4, se applicabile, prima di indicare il segmento unito. Se il driver NIC o miniport convalida i checksum TCP e IPv4 ma non li ricompila per il segmento coalesced, deve impostare i flag TcpChecksumValueInvalid e IpChecksumValueInvalid nella struttura NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO . In questo caso, inoltre, il driver NIC o miniport può facoltativamente zero i valori di checksum dell'intestazione TCP e IPv4 nel segmento.
Il driver NIC e miniport devono sempre impostare i flag IpChecksumSucceeded e TcpChecksumSucceededed nella struttura NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO prima di indicare il segmento unito.
Per altre informazioni sulle regole di unione, vedere Regole per l'unione di segmenti TCP/IP.
Per altre informazioni sulle eccezioni, vedere Condizioni di eccezione che terminano l'unione.
È prevista l'esecuzione del coalescing su base ottimale. L'hardware potrebbe non essere in grado di unire in alcuni casi, ad esempio a causa della mancanza di risorse. I requisiti indicati in questo articolo sono principalmente di specificare quando non unire e come unire.
A livello generale, la scheda di interfaccia di rete e il driver miniport devono gestire la ricezione di un segmento TCP in rete come indicato di seguito:
Controllare la presenza di un'eccezione nel segmento in ingresso come indicato di seguito:
Se non è stata rilevata alcuna eccezione, verificare se il segmento può essere unito all'ultimo segmento ricevuto per la stessa connessione TCP in base alle regole.
Se il segmento ha attivato un'eccezione o se l'unione con il segmento ricevuto in precedenza non è possibile, indicare singolarmente il segmento.
Il driver NIC e miniport non deve indicare segmenti uniti finché il driver di protocollo non abilita RSC come descritto in Esecuzione di query e modifica dello stato RSC.
Per una determinata connessione TCP, un'indicazione dei dati dalla scheda miniport allo stack TCP/IP host può essere costituita da uno o più segmenti uniti, separati da uno o più singoli segmenti che non possono essere uniti.
La scheda di interfaccia di rete e il driver miniport non devono ritardare l'indicazione dei segmenti TCP, se uniti o meno. In particolare, il driver NIC e miniport non deve ritardare l'indicazione dei segmenti da una chiamata di procedura posticipata (DPC) alla successiva per tentare di unire i segmenti.
Il driver NIC e miniport possono utilizzare timer per determinare la fine dell'unione. Tuttavia, la gestione dei carichi di lavoro sensibili alla latenza deve essere efficace come il requisito di limite DPC.