Impostazione della connessione TCP
Quando navighiamo sul Web, inviamo un'e -mail o giochiamo a un gioco online, spesso non pensiamo alla complessa connessione di rete dietro di essa. Tuttavia, sono questi passaggi apparentemente piccoli che garantiscono una comunicazione stabile tra noi e il server. Uno dei passaggi più importanti è la configurazione della connessione TCP e il nucleo di questo è la stretta di mano a tre.
Questo articolo discuterà in dettaglio il principio, il processo e l'importanza della stretta di mano a tre. Passo dopo passo, spiegheremo perché è necessaria la stretta di mano a tre, come garantisce la stabilità e l'affidabilità della connessione e quanto sia importante per il trasferimento dei dati. Con una comprensione più profonda della stretta di mano a tre, acquisiremo una migliore comprensione dei meccanismi sottostanti della comunicazione di rete e una visione più chiara dell'affidabilità delle connessioni TCP.
Processo di stretta di mano a tre vie TCP e transizioni di stato
TCP è un protocollo di trasporto orientato alla connessione, che richiede una creazione di connessione prima della trasmissione dei dati. Questo processo di stabilimento di connessione viene eseguito da una stretta di mano a tre.
Diamo un'occhiata più da vicino ai pacchetti TCP che vengono inviati a ciascuna connessione.
Inizialmente, sia il client che il server sono chiusi. Innanzitutto, il server ascolta attivamente una porta ed è nello stato di ascolto, il che significa che il server deve essere avviato. Successivamente, il client è pronto per iniziare ad accedere alla pagina web. Deve stabilire una connessione con il server. Il formato del primo pacchetto di connessione è il seguente:
Quando un client inizia una connessione, genera un numero di sequenza iniziale casuale (client_isn) e lo inserisce nel campo "Numero di sequenza" dell'intestazione TCP. Allo stesso tempo, il client imposta la posizione del flag syn su 1 per indicare che il pacchetto in uscita è un pacchetto SYN. Il client indica che desidera stabilire una connessione con il server inviando il primo pacchetto SYN al server. Questo pacchetto non contiene dati sul livello dell'applicazione (ovvero dati inviati). A questo punto, lo stato del cliente è contrassegnato come syn-sente.
Quando un server riceve un pacchetto SYN da un client, inizializza casualmente il proprio numero di serie (Server_ISN) e quindi inserisce quel numero nel campo "Numero di serie" dell'intestazione TCP. Successivamente, il server inserisce client_isn + 1 nel campo "Numero di riconoscimento" e imposta i bit Syn e ACK su 1. Infine, il server invia il pacchetto al client, che non contiene dati sullo strato di applicazione (e nessun dato per il server da inviare). Al momento, il server è nello stato SYN-RCVD.
Una volta che il client riceve il pacchetto dal server, deve eseguire le seguenti ottimizzazioni per rispondere al pacchetto di risposta finale: in primo luogo, il client imposta il bit ACK dell'intestazione TCP del pacchetto di risposta a 1; In secondo luogo, il client inserisce il valori server_isn + 1 nel campo "Conferma numero di risposta"; Infine, il client invia il pacchetto al server. Questo pacchetto può trasportare dati dal client al server. Al completamento di queste operazioni, il cliente entrerà nello stato stabilito.
Una volta che il server riceve il pacchetto di risposta dal client, passa anche allo stato stabilito.
Come puoi vedere dal processo sopra, quando si esegue una stretta di mano a tre, la terza stretta di mano è consentita di trasportare dati, ma le prime due strette di mano non lo sono. Questa è una domanda che viene spesso posta nelle interviste. Una volta completata la stretta di mano a tre vie, entrambe le parti entrano nello stato stabilito, indicando che la connessione è stata stabilita correttamente, a quel punto il client e il server possono iniziare a inviare dati reciproci.
Perché tre strette di mano? Non due volte, quattro volte?
La risposta comune è: "Perché la stretta di mano a tre garantisce la possibilità di ricevere e inviare". Questa risposta è corretta, ma è solo la ragione di superficie, non propone il motivo principale. Di seguito, analizzerò le ragioni della tripla stretta di mano da tre aspetti per approfondire la nostra comprensione di questo problema.
La stretta di mano a tre vie può effettivamente evitare l'inizializzazione di connessioni storicamente ripetute (il motivo principale)
La stretta di mano a tre vie garantisce che entrambe le parti abbiano ricevuto un numero di sequenza iniziale affidabile.
La stretta di mano a tre evita di perdere risorse.
Motivo 1: evita i join duplicati storici
In breve, il motivo principale della stretta di mano a tre è evitare la confusione causata dalla vecchia inizializzazione della connessione duplicata. In un ambiente di rete complesso, la trasmissione di pacchetti di dati non viene sempre inviata all'host di destinazione in conformità con il tempo specificato e i vecchi pacchetti di dati possono arrivare prima all'host di destinazione a causa della congestione della rete e di altri motivi. Per evitare questo, TCP utilizza una stretta di mano a tre per stabilire la connessione.
Quando un client invia più pacchetti di stabilimento di connessione syn in successione, in situazioni come la congestione della rete, può verificarsi quanto segue:
1- I vecchi pacchetti SYN arrivano al server prima degli ultimi pacchetti SYN.
2- Il server risponderà a un pacchetto SYN + ACK al client dopo aver ricevuto il vecchio pacchetto SYN.
3- Quando il client riceve il pacchetto SYN + ACK, determina che la connessione è una connessione storica (numero di sequenza scaduto o timeout) in base al proprio contesto e quindi invia il pacchetto RST al server per interrompere la connessione.
Con una connessione a due mani, non c'è modo di determinare se la connessione corrente è una connessione storica. La stretta di mano a tre vie consente al client di determinare se la connessione corrente è una connessione storica basata sul contesto quando è pronta per inviare il terzo pacchetto:
1- Se si tratta di una connessione storica (numero di sequenza scaduto o timeout), il pacchetto inviato dalla terza handshake è un pacchetto di RST per interrompere la connessione storica.
2- Se non si tratta di una connessione storica, il pacchetto inviato per la terza volta è un pacchetto ACK e le due parti comunicanti stabiliscono con successo la connessione.
Pertanto, il motivo principale per cui TCP utilizza la stretta di mano a tre è che inizializza la connessione per prevenire le connessioni storiche.
Motivo 2: sincronizzare i numeri di sequenza iniziale di entrambe le parti
Entrambi i lati del protocollo TCP devono mantenere un numero di sequenza, che è un fattore chiave per garantire la trasmissione affidabile. I numeri di sequenza svolgono un ruolo importante nelle connessioni TCP. Fanno quanto segue:
Il ricevitore può eliminare i dati duplicati e garantire l'accuratezza dei dati.
Il ricevitore può ricevere pacchetti nell'ordine del numero di sequenza per garantire l'integrità dei dati.
● Il numero di sequenza può identificare il pacchetto di dati che è stato ricevuto dall'altra parte, consentendo la trasmissione di dati affidabile.
Pertanto, dopo aver stabilito una connessione TCP, il client invia pacchetti SYN con il numero di sequenza iniziale e richiede al server di rispondere con un pacchetto ACK che indica una ricezione riuscita del pacchetto SYN del client. Quindi, il server invia il pacchetto SYN con il numero di sequenza iniziale al client e attende che il client risponda, una volta per tutte, per garantire che i numeri di sequenza iniziale siano sincronizzati in modo affidabile.
Sebbene sia anche possibile una stretta di mano a quattro vie per sincronizzare in modo affidabile i numeri di sequenza iniziale di entrambe le parti, il secondo e il terzo passaggio possono essere combinati in un unico passaggio, con conseguente stretta di mano a tre. Tuttavia, le due strette di mano possono solo garantire che il numero di sequenza iniziale di una parte sia ricevuto con successo dall'altra parte, ma non vi è alcuna garanzia che il numero di sequenza iniziale di entrambe le parti possa essere confermato. Pertanto, la stretta di mano a tre è la scelta migliore da fare per garantire la stabilità e l'affidabilità delle connessioni TCP.
Motivo 3: evitare di sprecare risorse
Se c'è solo un "due manuali", quando la richiesta SYN client viene bloccata nella rete, il client non può ricevere il pacchetto ACK inviato dal server, quindi SYN sarà risentito. Tuttavia, poiché non esiste una terza stretta di mano, il server non può determinare se il client ha ricevuto un riconoscimento ACK per stabilire la connessione. Pertanto, il server può solo stabilire in modo proattivo una connessione dopo aver ricevuto ciascuna richiesta SYN. Questo porta a quanto segue:
Scasso di risorse: se la richiesta SYN del client è bloccata, con conseguente trasmissione ripetuta di più pacchetti SYN, il server stabilisce più connessioni non valide ridondanti dopo aver ricevuto la richiesta. Ciò porta a uno spreco inutile di risorse del server.
Conservazione dei messaggi: a causa della mancanza di una terza stretta di mano, il server non ha modo di sapere se il client ha ricevuto correttamente il riconoscimento ACK per stabilire la connessione. Di conseguenza, se i messaggi rimangono bloccati nella rete, il client continuerà a inviare le richieste SYN più e più volte, facendo sì che il server stabilisca costantemente nuove connessioni. Ciò aumenterà la congestione e il ritardo della rete e influenzerà negativamente le prestazioni complessive della rete.
Pertanto, al fine di garantire la stabilità e l'affidabilità della connessione di rete, TCP utilizza la stretta di mano a tre per stabilire la connessione per evitare il verificarsi di questi problemi.
Riepilogo
ILBroker di pacchetti di reteL'istituzione di connessione TCP viene eseguita con una stretta di mano a tre. Durante la stretta di mano a tre, il client invia prima un pacchetto con il flag syn al server, indicando che desidera stabilire una connessione. Dopo aver ricevuto la richiesta dal client, il server risponde a un pacchetto con flag syn e ACK al client, indicando che la richiesta di connessione è accettata e invia il proprio numero di sequenza iniziale. Infine, il client risponde con un flag ACK al server per indicare che la connessione è stata stabilita correttamente. Pertanto, le due parti sono nello stato stabilito e possono iniziare a inviare dati reciproci.
In generale, il processo a tre vie di stretta di mano per lo stabilimento di connessione TCP è progettato per garantire la stabilità e l'affidabilità della connessione, evitare confusione e spreco di risorse rispetto alle connessioni storiche e garantire che entrambe le parti siano in grado di ricevere e inviare dati.
Tempo post: gennaio-08-2025