Quando si utilizza il protocollo TCP, i dispositivi devono prima stabilire una connessione con un sistema peer prima che la trasmissione dei
dati possa
avvenire in modo tale che venga stabilita una sessione orientata alla connessione tra l'host
A e l'host B. Una macchina avvierà la connessione che deve quindi essere accettata dall'altra macchina.
I moduli software dei protocolli nei sistemi operativi dei dispositivi host comunicano tra
loro inviando messaggi attraverso la rete per verificare che il trasferimento sia autorizzato
e che entrambe le parti siano
pronte per la trasmissione dei dati.
Affinché ciò avvenga, si verifica una stretta di mano a tre vie tra i dispositivi host che utilizzano TCP.
Quindi l'host che avvia la sessione imposterà il flag SYN o il bit SYN
nell'intestazione TCP del segmento iniziale invia all'host B.
L'host A sceglierà anche un numero di sequenza iniziale che
in questo esempio diciamo 100.
Quindi il flag di controllo SYN è impostato su e il
numero di sequenza è impostato su un valore iniziale di 100.
Questo viene quindi utilizzato per avviare il processo di handshake.
Questo segmento di sincronizzazione specifica anche il numero della porta a cui il mittente desidera
connettersi per la porta di esempio 80 o HTTP.
L'host sul lato destro attenderà una richiesta di connessione dal client remoto, in
questo caso l'host A.
quando il SYN è ricevuto e
accettato, l'host b invierà un segmento TCP con entrambi i flag SYN e ACK impostati.
Quindi i flag di controllo SYN e ACK sono impostati e
utilizzati per negoziare la connessione e confermare la ricezione del segmento
di sincronizzazione delle iniziali del mittente.
B imposta anche un numero di sequenza iniziale per indicare il
prossimo numero di sequenza del prossimo byte di dati che
si aspetta di ricevere dall'host A.
l'host B imposta anche il flag di riconoscimento, in questo
caso 101 indica un flag ACK, la porzione successiva di dati, l'host si aspetta di ricevere.
Quindi l'host A inizialmente ha inviato un numero di sequenza di 100
e l'host B, in questo caso si presupponeva che una dimensione della finestra di 1 restituisse
un riconoscimento di 101.
Il terzo passo nell'handshake a tre vie è dove l'host di avvio in
questo caso l'host A ha ricevuto il SYN dall'host B e restituisce un segmento TCP con il campo di controllo impostato
su ACK, in altre parole riconoscimento. 36 L'host A sta quindi riconoscendo il segmento successivo che si
aspetta di ricevere dall'host B in questo caso 301, inizialmente l'host B ha inviato un numero di sequenza di 300.
Quindi l'host A si aspetta il prossimo segmento 301.
L'host A imposta il suo numero di sequenza su 101.
Il segmento iniziale inviato era 100 e il prossimo in questo caso è 101 perché il bit SYN o il
flag SYN non è impostato,
ciò conferma che l'handshake a tre vie è stato completato con successo.
Solo per reiterare, i bit di controllo o i flag inizialmente A manda un
segmento con il bit SYN o il flag SYN attivato.
Quindi il flag di controllo SYN è impostato su 1. 46 L'host B nella seconda fase dell'handshake a tre
vie imposta i suoi flag di controllo o bit su SYN ACK.
In altre parole, il bit SYN è impostato su
1 e il bit ACK è impostato su 1.
Nell'ultimo passaggio dell'handshake a tre
vie, l'host A imposta il bit ACK su 1 o il flag ACK è attivo.
Il bit SYN o il flag SYN è impostato su 0 per indicare che
l'handshake a tre vie è stato completato correttamente.
Ora i numeri di sequenza e i riconoscimenti possono causare molta confusione, quindi ho intenzione di
spiegarli più dettagliatamente ora.
In questo esempio assumiamo che venga utilizzata una dimensione della finestra pari a 1.
Ora, se si ricorda che la dimensione della finestra è la quantità massima
di dati che il ricevitore può ricevere da un mittente e elaborare correttamente. 59 Quindi supponiamo che solo un segmento
possa essere trasmesso in qualsiasi momento prima che venga ricevuta una conferma
per confermare la ricezione di quel segmento.
Quindi supponiamo che A inizi con un numero di sequenza iniziale di
5 a causa di una dimensione della finestra di 1, solo un segmento può essere inviato da A a B.
B riceve con successo il segmento da A
e riconosce il segmento successivo che desidera ricevere.
quindi, anziché riconoscere la ricezione del numero di
sequenza 5, riconosce la sequenza
numero 6 che implica che tutti i numeri di sequenza precedenti riceveranno correttamente.
Quindi B riconosce in questo caso la sequenza numero 6 ma B può iniziare
con un numero di sequenza iniziale di 10. 71 così nell'intestazione TCP B dice A che il suo
numero di sequenza iniziale è 10 e che il suo numero di sequenza 5 ricevuto con successo da
A e si aspetta la sequenza numero 6 da A nel pacchetto successivo.
Supponiamo che questo segmento riceva con successo, così
A ora invierà il segmento da 6 a B, in altre parole
il prossimo numero di sequenza.
A conferma anche la ricezione del segmento 10 dall'host B.
Quindi A ha ricevuto con successo il segmento con il numero di sequenza 10.
Si prega di
notare ancora una volta che l'host può scegliere
casualmente i numeri di sequenza iniziali e quindi
nell'handshake a tre vie iniziale che le informazioni devono essere comunicate tra
i 2 host in modo che sappiano quali sono i numeri di sequenza iniziali. 84 Quindi, ancora una volta A invia la sequenza da 6 a B e conferma la sequenza 11.
Supponiamo che B riceva correttamente
quel segmento e pertanto confermerà per il segmento 7.
Il segmento successivo che si aspetta
di ricevere ancora una volta 7 nel riconoscimento indica che il segmento precedente è stato ricevuto con successo.
Quindi l'host B impostando il numero di sequenza su 7 sta dicendo all'host A che la
sequenza numero 6 è stata ricevuta con successo.
L'host B invia la sequenza numero 11 perché è il
prossimo numero di sequenza che A si aspetta di ricevere.
La cosa da notare ancora una volta, è che i numeri di sequenza
iniziale che l'host si aspetta di ricevere e la sequenza di numeri di
11 per esempio implica che il numero di sequenza 10 e il numero di sequenza precedente siano stati ricevuti con successo.
Ora, ancora una volta il controllo del flusso previene un problema in cui il mittente invia così tanti dati
99 che i buffer del ricevitore sono in overflow.
Se questa è una macchina molto potente e questa è una macchina più vecchia non è così potente, è possibile che A possa invadere i buffer di B perché sta inviando così tanti dati. 103 Quindi B ha bisogno di un meccanismo per dire A al rallentamento in modo che D
possa elaborare correttamente il traffico che sta ricevendo. 105 Quindi, ad esempio, supponiamo che la dimensione della finestra in questo esempio
sia 3 anziché 1. 107 Quindi A può inviare 3 segmenti di dati prima di ottenere un riconoscimento. 108 Il vantaggio di aumentare le dimensioni della finestra è la velocità effettiva può aumentare notevolmente perché un host può inviare più dati con meno riconoscimenti e quindi i tempi di andata e ritorno diminuiscono drasticamente. 111 Quindi in questo esempio A invia 3 segmenti a B. 112 Supponiamo che il
buffer ricevuto di B sia pieno e che non possa gestire quella quantità di dati 114 B invierà un indicatore non pronto ad A 115 e lo fa impostando la dimensione della finestra a 0.
Questo dice al mittente di interrompere l'invio di dati e attendere l'indicatore pronto dal ricevitore. 118 Supponendo che l'host B sia ora in grado di elaborare i dati nel suo buffer di ricezione e ora può ricevere più dati. 120 Può inviare un indicatore pronto ad A, per dirgli di riprendere l'invio di datagrammi.
quindi A riprende la trasmissione inviando per esempio 3 segmenti a B. 122 Perché la dimensione della finestra è 3. 123 Quindi, per favore nota in sottofondo che l'host TCP coinvolto nella conversazione può negoziare vari parametri
e uno di essi è il controllo del flusso 125 dove un ricevitore, può dire a un mittente di rallentare o di interrompere l'invio di dati 126 fino a quando il ricevitore non ha spazio disponibile per ricevere i segmenti trasmessi.
Questo consente la comunicazione tra un molto potente o macchina veloce e una macchina più lenta o meno potente dove possono negoziare il tasso di trasmissione.