Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo descrive le funzionalità TCP in Windows.
Numero KB originale: 224829
Riepilogo
Questo articolo descrive le funzionalità TCP seguenti in Windows:
- Dimensioni della finestra TCP
- Opzioni TCP ora supportate
- Ridimensionamento di Windows - RFC 1323
- Timestamp - RFC 1323
- Protezione dai numeri di sequenza incapsulati (PAWS)
- Riconoscimenti selettivi (SACKS) - RFC 2018
- Comportamento di ritrasmissione TCP e ritrasmissione rapida
Le funzionalità TCP possono essere modificate modificando le voci nel Registro di sistema.
Importante
Le sezioni, i metodi o le attività seguenti contengono passaggi che indicano come modificare il Registro di sistema. Se, tuttavia, si modifica il Registro di sistema in modo errato, possono verificarsi gravi problemi. Pertanto, assicurarsi di osservare attentamente la procedura seguente. Per una maggiore protezione, eseguire il backup del Registro di sistema prima di modificarlo. Successivamente, è possibile ripristinare il Registro di sistema se si verifica un problema. Per ulteriori informazioni su come eseguire il backup e il ripristino del registro, fare clic sul numero dell'articolo seguente per visualizzare l'articolo nella Microsoft Knowledge Base:
322756 Come eseguire il backup e il ripristino del registro in Windows
Dimensioni della finestra TCP
Le dimensioni della finestra di ricezione TCP sono la quantità di dati di ricezione (in byte) che possono essere memorizzati nel buffer durante una connessione. L'host di invio può inviare solo tale quantità di dati prima di attendere l'aggiornamento di un riconoscimento e di una finestra dall'host ricevente. Lo stack TCP/IP di Windows è progettato per ottimizzare se stesso nella maggior parte degli ambienti e usa dimensioni di finestra predefinite maggiori rispetto alle versioni precedenti.
Invece di usare una dimensione predefinita di ricezione hardcoded, TCP si adatta ad incrementi pari delle dimensioni massime del segmento (MSS). Il servizio gestito viene negoziato durante la configurazione della connessione. La regolazione della finestra di ricezione per incrementi pari di MSS aumenta la percentuale di segmenti TCP di dimensioni intere usate durante le trasmissioni di dati bulk.
Le dimensioni della finestra di ricezione vengono determinate nel modo seguente:
- La prima richiesta di connessione inviata a un host remoto annuncia una dimensione della finestra di ricezione di 16.000 byte (16.384 byte).
- Quando viene stabilita la connessione, le dimensioni della finestra di ricezione vengono arrotondate fino a un incremento pari di MSS.
- La dimensione della finestra viene adattata a quattro volte mss, a una dimensione massima di 64 K, a meno che non venga usata l'opzione di ridimensionamento della finestra (RFC 1323).
Note
Vedere la sezione "Ridimensionamento di Windows".
Per le connessioni Ethernet, le dimensioni della finestra verranno in genere impostate su 17.520 byte (16.000 arrotondate fino a dodici segmenti di 1460 byte). Le dimensioni della finestra possono ridurre quando viene stabilita una connessione a un computer che supporta le opzioni head TCP estese, ad esempio i riconoscimenti selettivi (SACKS) e i timestamp. Queste due opzioni aumentano le dimensioni dell'intestazione TCP a più di 20 byte, il che comporta una minore quantità di spazio per i dati.
Nelle versioni precedenti di Windows NT, le dimensioni della finestra per una connessione Ethernet erano di 8.760 byte o sei segmenti a 1460 byte.
Per impostare le dimensioni della finestra di ricezione su un valore specifico, aggiungere il valore TcpWindowSize alla sottochiave del Registro di sistema specifica per la versione di Windows. A tale scopo, effettuare i passaggi seguenti:
Selezionare Avvia>esecuzione, digitare
Regedit
e quindi selezionare OK.Espandere la sottochiave del Registro di sistema specifica per la versione di Windows:
Per Windows 2000, espandere la sottochiave seguente:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces
Per Windows Server 2003, espandere la sottochiave seguente:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
Scegliere Nuovo dal menu Modifica e quindi selezionare Valore DWORD.
Digitare
TcpWindowSize
nella casella Nuovo valore e quindi premere INVIOScegliere Modifica dal menu Modifica .
Digitare le dimensioni della finestra desiderate nella casella Dati valore .
Note
L'intervallo valido per le dimensioni della finestra è 0-0x3FFFC000 esadecimale.
Questo valore non è presente per impostazione predefinita. Quando si aggiunge il valore TcpWindowSize, viene eseguito l'override dell'algoritmo di dimensioni della finestra predefinita descritto in precedenza.
Note
TcpWindowSize può anche essere aggiunto alla chiave Parameters per impostare le dimensioni della finestra a livello globale per tutte le interfacce.
Opzioni TCP ora supportate
In precedenza, le opzioni TCP venivano usate principalmente per negoziare le dimensioni massime dei segmenti. In Windows, le opzioni TCP vengono usate per ridimensionamento delle finestre, timestamp e ACK selettivo.
Esistono due tipi di opzioni TCP:
- Una singola opzione TCP ottetto, che viene usata per indicare un tipo di opzione specifico.
- Un'opzione TCP ottetto multipla, costituita da un tipo di opzione, una lunghezza dell'opzione e una serie di ottetti di opzione.
L'elenco seguente mostra ogni tipo di opzione TCP, lunghezza, nome e descrizione.
Tipo: 0
Lunghezza:1
Opzione: Fine elenco opzioni
Descrizione: usato quando è necessaria la spaziatura interna per l'ultima opzione TCP.
Tipo: 1
Lunghezza:1
Opzione: Nessuna operazione
Descrizione: usato quando è necessaria la spaziatura interna e altre opzioni TCP seguono nello stesso pacchetto.
Tipo: 2
Lunghezza:4
Opzione: Dimensioni massime segmento
Descrizione: indica le dimensioni massime per un segmento TCP che può essere inviato attraverso la rete.
Tipo: 3
Lunghezza: 3
Opzione: Opzione scala finestra
Descrizione: identifica il fattore di ridimensionamento da usare quando si usano dimensioni della finestra superiori a 64.000.
Tipo: 8
Lunghezza: 10
Opzione: opzione timestamp
Descrizione: usato per calcolare il tempo di round trip (RTT) dei pacchetti trasmessi.
Tipo: 4
Lunghezza:2
Opzione: TCP SACK consentito
Descrizione: informa altri host che sono consentiti Ack selettivi.
Tipo: 5
Lunghezza: variabile
Opzione: opzione TCP SACK
Descrizione: usato dagli host per identificare se sono stati ricevuti pacchetti non ordinati.
Ridimensionamento di Windows
Per un uso più efficiente delle reti a larghezza di banda elevata, è possibile usare una dimensione maggiore della finestra TCP. Il campo Dimensioni finestra TCP controlla il flusso di dati ed è limitato a 2 byte o a una dimensione della finestra di 65.535 byte.
Poiché il campo delle dimensioni non può essere espanso, viene usato un fattore di ridimensionamento. La scala delle finestre TCP è un'opzione usata per aumentare le dimensioni massime della finestra da 65.535 byte a 1 Gigabyte.
L'opzione scala finestra viene usata solo durante l'handshake a tre vie TCP. Il valore della scala della finestra rappresenta il numero di bit per spostare a sinistra il campo dimensioni della finestra a 16 bit. Il valore della scala della finestra può essere impostato da 0 (nessun turno) a 14.
Per calcolare le dimensioni effettive della finestra, moltiplicare le dimensioni della finestra per 2^S dove S è il valore di scala.
Ad esempio:
Se la dimensione della finestra è di 65.535 byte con un fattore di scala della finestra pari a 3.
True window size = 65535*2^3
True window size = 524280
La traccia di Monitoraggio di rete seguente mostra come viene usata l'opzione di scalabilità delle finestre:
TCP: ....S., len:0, seq:725163-725163, ack:0, win:65535, src:1217 dst:139(NBT Session)
TCP: Source Port = 0x04C1
TCP: Destination Port = NETBIOS Session Service
TCP: Sequence Number = 725163 (0xB10AB)
TCP: Acknowledgement Number = 0 (0x0)
TCP: Data Offset = 44 (0x2C)
TCP: Reserved = 0 (0x0000)
+ TCP: Flags = 0x02 : ....S.
TCP: Window = 65535 (0xFFFF)
TCP: Checksum = 0x8565
TCP: Urgent Pointer = 0 (0x0)
TCP: Options
+ TCP: Maximum Segment Size Option
TCP: Option Nop = 1 (0x1)
TCP: Window Scale Option
TCP: Option Type = Window Scale
TCP: Option Length = 3 (0x3)
TCP: Window Scale = 3 (0x3)
TCP: Option Nop = 1 (0x1)
TCP: Option Nop = 1 (0x1)
+ TCP: Timestamps Option
TCP: Option Nop = 1 (0x1)
TCP: Option Nop = 1 (0x1)
+ TCP: SACK Permitted Option
Le dimensioni della finestra usate nell'handshake a tre vie effettive non sono le dimensioni della finestra ridimensionate, per RFC 1323 sezione 2.2:
"Il campo Window in un SYN (ad esempio, un segmento [SYN] o [SYN,ACK]) non viene mai ridimensionato".
Significa che il primo pacchetto di dati inviato dopo l'handshake a tre vie è la dimensione effettiva della finestra. Se è presente un fattore di ridimensionamento, viene sempre usata la dimensione iniziale della finestra di 65.535 byte. Le dimensioni della finestra vengono quindi moltiplicate per il fattore di ridimensionamento identificato nell'handshake a tre vie. La tabella seguente rappresenta i limiti del fattore di ridimensionamento per varie dimensioni della finestra.
Fattore di scala | Valore di scala | Finestra iniziale | Finestra ridimensionata |
---|---|---|---|
0 | 1 | 65535 o minore | 65535 o minore |
1 | 2 | 65535 | 131,070 |
2 | 4 | 65535 | 262,140 |
3 | 8 | 65535 | 524,280 |
4 | 16 | 65535 | 1,048,560 |
5 | 32 | 65535 | 2,097,120 |
6 | 64 | 65535 | 4,194,240 |
7 | 128 | 65535 | 8,388,480 |
8 | 256 | 65535 | 16,776,960 |
9 | 512 | 65535 | 33,553,920 |
10 | 1024 | 65535 | 67,107,840 |
11 | 2048 | 65535 | 134,215,680 |
12 | 4096 | 65535 | 268,431,360 |
13 | 8192 | 65535 | 536,862,720 |
14 | 16384 | 65535 | 1,073,725,440 |
Ad esempio:
Se le dimensioni della finestra nel Registro di sistema vengono immesse come 269000000 (269M) in decimal, il fattore di ridimensionamento durante l'handshake a tre vie è 13. Un fattore di ridimensionamento pari a 12 consente solo una dimensione di finestra fino a 268.431.360 byte (268M).
Le dimensioni iniziali della finestra in questo esempio vengono calcolate nel modo seguente:
65.535 byte con un fattore di scala della finestra pari a 13.
True window size = 65535*2^13
Dimensioni della finestra true = 536.862.720
Quando il valore per le dimensioni della finestra viene aggiunto al Registro di sistema e le dimensioni sono maggiori del valore predefinito, Windows tenta di usare un valore di scala che supporta le nuove dimensioni della finestra.
Il valore Tcp1323Opts nella chiave del Registro di sistema seguente può essere aggiunto per controllare le finestre di ridimensionamento e il timestamp:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters
Sulla barra degli strumenti selezionare Avvia>esecuzione e quindi digitare
Regedit
per avviare l'editor del Registro di sistema.Nell'editor del Registro di sistema selezionare Modifica, fare clic su Nuovo e quindi selezionare Valore DWORD.
Nella casella Nuovo valore digitare
Tcp1323Opts
, premere INVIO e quindi scegliere Modifica dal menu Modifica.Note
L'intervallo valido è 0, 1, 2 o 3 dove:
0 (disabilitare le opzioni RFC 1323)
1 (solo scala finestra abilitata)
2 (solo timestamp abilitati)
3 (entrambe le opzioni abilitate)
Questa voce del Registro di sistema controlla i timestamp RFC 1323 e le opzioni di ridimensionamento delle finestre. I timestamp e il ridimensionamento delle finestre sono abilitati per impostazione predefinita, ma possono essere modificati con i bit di flag. Bit 0 controlla il ridimensionamento delle finestre. Bit 1 controlla i timestamp.
Timestamp
In precedenza, lo stack TCP/IP usava un campione per finestra di dati inviati per calcolare il tempo di round trip (RTT). Un timer (timer di ritrasmissione) è stato impostato quando il pacchetto è stato inviato, fino alla ricezione del riconoscimento. Ad esempio, se le dimensioni della finestra erano pari a 64.240 byte (44 segmenti completi) in una rete Ethernet, solo uno dei 44 pacchetti veniva usato per ricalcolare il tempo di round trip. Con una dimensione massima della finestra di 65.535 byte, questa frequenza di campionamento era sufficiente. Usando il ridimensionamento delle finestre e una dimensione massima della finestra di 1 Gigabyte, questa frequenza di campionamento RTT non è sufficiente.
L'opzione TCP Timestamp può ora essere usata nei segmenti (dati e ACK) considerati appropriati dallo stack, per eseguire operazioni come:
- Calcolo RTT
- Controllo PAWS
Usando questi dati, il RTT può essere calcolato in modo accurato con dimensioni di finestra di grandi dimensioni. RTT viene usato per calcolare gli intervalli di ritrasmissione. I timeout di RTT e ritrasmissione accurati sono necessari per una velocità effettiva ottimale.
Quando il timestamp TCP viene usato in una sessione TCP, l'originatore della sessione invia l'opzione nel primo pacchetto dell'handshake TCP a tre vie (pacchetto SYN). Entrambi i lati possono quindi usare l'opzione TCP durante la sessione.
Opzione Timestamp TCP (TSopt):
Tipo = 8 | Lunghezza = 10 | Valore TS (Tsval) | TS Echo Reply (Tsecr) |
---|---|---|---|
1 byte | 1 byte | 4 byte | 4 byte |
Il campo dell'opzione timestamp può essere visualizzato in una traccia di Monitoraggio di rete espandendo il campo opzioni TCP, come illustrato di seguito:
TCP: Timestamps Option
TCP: Option Type = Timestamps
TCP: Option Length = 10 (0xA)
TCP: Timestamp = 2525186 (0x268802)
TCP: Reply Timestamp = 1823192 (0x1BD1D8)
Protezione dai numeri di sequenza incapsulati (PAWS)
Il campo Numero di sequenza TCP è limitato a 32 bit, che limita il numero di numeri di sequenza disponibili. Con reti ad alta capacità e trasferimento di dati di grandi dimensioni, è possibile eseguire il wrapping dei numeri di sequenza prima che un pacchetto attraversi la rete. Se si inviano dati su una rete giga-byte al secondo (Gbps), i numeri di sequenza potrebbero essere inclusi in meno di 34 secondi. Se un pacchetto viene ritardato, potrebbe esistere un pacchetto diverso con lo stesso numero di sequenza. Per evitare confusione nei numeri di sequenza duplicati, il timestamp TCP viene usato come estensione per il numero di sequenza. I pacchetti hanno timestamp correnti e in corso. Un pacchetto precedente ha un timestamp precedente e viene rimosso.
Riconoscimenti selettivi (SACK)
Windows introduce il supporto per una funzionalità di prestazioni nota come riconoscimento selettivo o SACK. SACK è particolarmente importante per le connessioni che usano dimensioni di finestra TCP di grandi dimensioni. Prima di SACK, un ricevitore poteva riconoscere solo il numero di sequenza più recente di un flusso di dati contiguo ricevuto o il "bordo sinistro" della finestra di ricezione. Con SACK abilitato, il ricevitore continua a usare il numero ACK per confermare il bordo sinistro della finestra di ricezione, ma può anche riconoscere altri blocchi di dati ricevuti singolarmente. SACK usa le opzioni di intestazione TCP, come illustrato di seguito.
SACK usa due tipi di opzioni TCP.
L'opzione TCP Sack-Permitted viene usata solo in un pacchetto SYN (durante l'istituzione della connessione TCP) per indicare che può eseguire ACK selettivo.
La seconda opzione TCP, TCP Sack Option, contiene il riconoscimento per uno o più blocchi di dati. I blocchi di dati vengono identificati usando il numero di sequenza all'inizio e alla fine di tale blocco di dati. È noto anche come bordo sinistro e destro del blocco di dati.
Il tipo 4 è l'opzione TCP Sack-Permitted. Il tipo 5 è l'opzione sack TCP. La lunghezza è la lunghezza in byte di questa opzione TCP.
Tcp SACK consentito:
Tipo = 4 | Lunghezza = 2 |
---|---|
1 byte | 1 byte |
Opzione TCP SACK:
Tipo = 5 | Length = Variable |
---|---|
1 byte | Bordo sinistro del primo blocco al bordo destro del primo blocco ... Bordo sinistro del N° blocco al bordo destro del blocco Nth |
Con SACK abilitato (impostazione predefinita), è possibile eliminare un pacchetto o una serie di pacchetti. Il ricevitore informa il mittente dei dati ricevuti e dove possono verificarsi "fori" nei dati. Il mittente può quindi ritrasmettere in modo selettivo i dati mancanti senza ritrasmettere blocchi di dati già ricevuti correttamente. SACK è controllato dal parametro del Registro di sistema SackOpts.
Il valore SackOpts nella chiave del Registro di sistema seguente può essere modificato per controllare l'uso di riconoscimenti selettivi:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
- Sulla barra degli strumenti selezionare Avvia>esecuzione e quindi digitare
Regedit
per avviare l'editor del Registro di sistema. - Individuare e selezionare la chiave precedente nell'editor del Registro di sistema, quindi selezionare Modifica dal menu Modifica.
- Digitare il valore desiderato nella casella Dati valore .
Note
Il valore binario valido è 0 o 1, il valore predefinito è 1. Questo parametro controlla se è abilitato o meno il supporto di ACK selettivo (SACK - RFC 2018).
La traccia di Monitoraggio di rete seguente illustra un host che riconosce tutti i dati fino al numero di sequenza 54857341, oltre ai dati del numero di sequenza 54858789-54861685. I dati mancanti provengono da 54857341 a 54858788.
TCP: .A...., len:0, seq:925104-925104, ack:54857341, win:32722, src:1242 dst:139
TCP: Source Port = 0x04DA
TCP: Destination Port = NETBIOS Session Service
TCP: Sequence Number = 925104 (0xE1DB0)
TCP: Acknowledgement Number = 54857341 (0x3450E7D)
TCP: Data Offset = 44 (0x2C)
TCP: Reserved = 0 (0x0000)
+ TCP: Flags = 0x10 : .A....
TCP: Window = 32722 (0x7FD2)
TCP: Checksum = 0x4A72
TCP: Urgent Pointer = 0 (0x0)
TCP: Options
TCP: Option Nop = 1 (0x1)
TCP: Option Nop = 1 (0x1)
+ TCP: Timestamps Option
TCP: Option Nop = 1 (0x1)
TCP: Option Nop = 1 (0x1)
TCP: SACK Option
TCP: Option Type = 0x05
TCP: Option Length = 10 (0xA)
TCP: Left Edge of Block = 54858789 (0x3451425)
TCP: Right Edge of Block = 54861685 (0x3451F75)
Comportamento di ritrasmissione TCP e ritrasmissione rapida
Ritrasmissione TCP
Come revisione del normale comportamento di ritrasmissione, TCP avvia un timer di ritrasmissione quando ogni segmento in uscita viene passato a Internet Protocol (IP). Se non viene ricevuto alcun riconoscimento per i dati in un determinato segmento prima della scadenza del timer, il segmento viene ritrasmesso.
Il timeout di ritrasmissione (RTO) viene modificato continuamente in modo che corrisponda alle caratteristiche della connessione usando calcoli SRTT (Smoothed Round Trip Time), come descritto in RFC 793. Il timer per un determinato segmento viene raddoppiato dopo ogni ritrasmissione di tale segmento. Usando questo algoritmo, TCP si ottimizza con il normale ritardo di una connessione.
Ritrasmissione rapida
TCP ritrasmette i dati prima che il timer di ritrasmissione scada in alcune circostanze. La causa più comune è una funzionalità nota come ritrasmissione rapida. Quando un ricevitore che supporta la ritrasmissione rapida riceve dati con un numero di sequenza oltre quello previsto corrente, è probabile che alcuni dati vengano eliminati. Per informare il mittente di questo evento, il ricevitore invia immediatamente un ACK, con il numero ACK impostato sul numero di sequenza previsto. Continuerà a farlo per ogni segmento TCP aggiuntivo che arriva. Quando il mittente inizia a ricevere un flusso di AK che riconosce lo stesso numero di sequenza, è possibile che sia stato eliminato un segmento. Il mittente invierà immediatamente il segmento previsto dal ricevitore, senza attendere la scadenza del timer di ritrasmissione. Questa ottimizzazione migliora notevolmente le prestazioni quando i pacchetti vengono eliminati di frequente.
Per impostazione predefinita, Windows invia nuovamente un segmento nelle condizioni seguenti:
- Riceve tre ACL per lo stesso numero di sequenza: uno ACK e due duplicati.
- Il numero di sequenza ritarda quello corrente.
Questo comportamento è controllabile con il TcpMaxDupAcks
parametro del Registro di sistema.
Il valore TcpMaxDupAcks nella chiave del Registro di sistema seguente può essere modificato per controllare il numero di AK necessari per avviare una ritrasmissione rapida:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
- Sulla barra degli strumenti selezionare Avvia>esecuzione e quindi digitare
Regedit
per avviare l'editor del Registro di sistema. - Individuare e selezionare la chiave precedente nell'editor del Registro di sistema, quindi selezionare Modifica dal menu Modifica.
- Digitare il valore desiderato nella casella Dati valore .
Note
L'intervallo valido è 1-3, il valore predefinito è 2.
Questo parametro determina il numero di AK duplicati che devono essere ricevuti per lo stesso numero di sequenza di dati inviati prima fast retransmit
di essere attivati per inviare nuovamente il segmento che è stato eliminato in transito.