Durante i primi anni di Internet, Internet Protocol (IP) era l'unico protocollo utilizzato dalle persone per connettersi a Internet. Il problema con l'IP era che potevi inviare un messaggio e non essere sicuro se il destinatario lo avrebbe ricevuto o meno. Per questo motivo è stato stabilito TCP/IP.

TCP/IP garantisce che tutti i dati inviati raggiungano il destinatario. Lo fa fornendo al client e al server una connessione sicura prima di inviare i dati. Questa connessione protetta viene stabilita tramite un processo noto come handshake a tre vie, noto anche come handshake TCP/IP.

Che cos'è una stretta di mano a tre vie?

Credito immagine: Fleshgrinder/Wikimedia

Un handshake a tre vie (handshake TCP/IP) è la prima interazione tra un client e un server che tenta di stabilire una connessione TCP. Queste interazioni iniziali sono essenziali per stabilire una connessione sicura. In questa fase, sia il client che il server concorderanno i parametri che utilizzeranno per controllare e verificare i pacchetti di dati in entrata e in uscita. Questi parametri saranno sotto forma di segmenti TCP.

instagram viewer

Che cos'è un segmento TCP?

In una connessione TCP/IP, tutti i dati inviati devono essere tagliati e strutturati sui cosiddetti segmenti TCP. Questi segmenti contengono informazioni come indirizzi IP, porte, bit di flag, numeri di sequenza, numeri di riconoscimento e dati o payload opzionali.

Le prime tre interazioni (handshake a tre vie) conterranno solo intestazioni di segmento TCP senza payload o dati allegati. Ecco un esempio di un segmento TCP

Credito immagine: Ere/Wikimedia

Si noti che l'illustrazione sopra è solo per TCP. Un segmento TCP/IP completo richiede entrambi Indirizzi IP dal mittente e dal destinatario sopra il segmento TCP sopra.

Ogni volta che invii un pacco a una persona, il servizio di consegna è tenuto a compilare un modulo informativo e poi allegarlo al pacco prima della spedizione. Allo stesso modo, TCP richiede al mittente di allegare un'intestazione di segmento (modulo di informazioni) ai dati (pacchetto) prima di iniziare a inviare il segmento (pacchetto) al destinatario.

Ogni volta che un client comunica con un server, entrambe le parti dovranno formattare le loro interazioni sotto forma di un segmento TCP. Un segmento TCP comprende una testa di segmento TCP collegata ai dati che stai tentando di inviare. Il mittente dovrà compilare le informazioni richieste dal capo segmento.

Per una stretta di mano a tre, il mittente dovrà compilare quanto segue:

  • Porta di origine: Identifica la porta del mittente
  • Porto di destinazione: Identifica la porta del ricevitore
  • Sequenza di numeri: Indica la sequenza del segmento
  • Numero di riconoscimento: Indica che un segmento è stato riconosciuto aggiungendo uno al numero di sequenza specificato

Oltre a compilare i campi dell'intestazione del segmento, il mittente deve anche selezionare un bit flag. Ci sono sei flag bit in totale, ma per una stretta di mano a tre vie, avrai solo bisogno dei seguenti due:

  1. SYN: Fornisce un numero di sequenza. Questo numero di sequenza verrà utilizzato per contare la sequenza di tutti i segmenti in entrata per il resto dell'interazione.
  2. ACK: Indica che il destinatario del numero SYN accetta la richiesta di connessione aggiungendo uno (1) al numero SYN fornito.

Ora che sai cos'è un segmento TCP, vediamo come viene utilizzato in un handshake a tre vie.

Come funziona una stretta di mano a tre vie

Viene stabilita una stretta di mano a tre vie quando sia il client che l'host si sono scambiati informazioni e hanno riconosciuto i rispettivi numeri di sequenza. Come suggerisce il nome, una stretta di mano a tre vie viene eseguita in tre passaggi.

Innanzitutto, il client invia un segmento SYN puro indicando che desidera una connessione. In secondo luogo, il server risponde con un segmento SYN-ACK, il che significa che ha riconosciuto la richiesta e sta inviando il proprio numero SYN affinché il client lo riconosca. In terzo luogo, il client invia un segmento ACK al server per notificargli che il numero SYN del server è stato riconosciuto e verrà utilizzato per ulteriori connessioni.

Una stretta di mano a tre vie sarà simile a questa:

Credito patrimoniale: Fleshgrinder/Wikimedia

Analizziamolo ed esaminiamo i segmenti in modo da sapere cosa succede esattamente quando client e server si scambiano e riconoscono i numeri di sequenza.

Passaggio 1: il client invia un segmento SYN

Credito patrimoniale: Fleshgrinder/Wikimedia

Il client invia una richiesta di connessione inviando un segmento SYN al server. Il client utilizza l'indirizzo IP del client per individuare il server e inviare il segmento TCP.

Per ridurre la complessità del segmento, ignoriamo alcuni campi di segmento e concentriamoci sulle necessità essenziali per una connessione di handshake a tre vie. Ciò include la porta di origine, la porta di destinazione, il numero di sequenza, il numero di riconoscimento e il tipo di bit di flag utilizzato.

E con questo, un SYN/segmento di richiesta dovrebbe assomigliare a questo:

Immagine realizzata dallo scrittore 

La porta client è un numero casuale compreso tra 49152 e 65536. Questo intervallo di porte è l'intervallo concordato che i dispositivi pubblici possono utilizzare dinamicamente per connettersi a Internet. Gli intervalli di porte da 1024 a 49151 sono privati. Dovranno essere registrati da un'entità per utilizzare una porta all'interno dell'intervallo specificato. I numeri di porta inferiori a 1024 sono porte riservate a varie funzioni e protocolli Internet come FTP (porta 20), SMTP (porta 25), DNS (porta 53) e HTTP (porta 80).

Nella vita reale, un numero di sequenza è un numero casuale. Per l'esempio, abbiamo utilizzato 0000000000 per semplificare la visualizzazione.

Prendi nota del numero di sequenza mentre procediamo attraverso i passaggi. Attualmente sono 000000000. Al momento non esiste un numero di riconoscimento in quanto non c'è qualcosa da riconoscere.

Passaggio 2: il server risponde con un segmento SYN-ACK

Credito patrimoniale: Fleshgrinder/Wikimedia

Una volta che il server riceve un segmento SYN, risponderà inviando un segmento ACK contenente il numero di riconoscimento. Il numero di conferma sarà il numero di sequenza del cliente più uno (1).

Immagine realizzata dallo scrittore

Guarda la porta di origine. Mostra che il segmento proviene dalla porta 20, indicando che proviene dal server come risposta.

Ora, guarda il numero di riconoscimento. È 0000000001, che è il numero di sequenza del client (0000000000) più uno (1). Ecco come viene tracciato un segmento. Supponiamo che il client abbia ricevuto una risposta del segmento ACK in cui il numero di conferma è 0000000002. Ciò indicherebbe al cliente che mancava il segmento 0000000001 e che il cliente dovrà attendere fino al suo arrivo quindi non si verifica la perdita di pacchetti.

Come puoi vedere, vengono attivati ​​due bit di flag: SYN e ACK.

Oltre a riconoscere il numero di sequenza del client, il server invierà anche il proprio numero di sequenza affinché il client riconosca il numero di sequenza del server più uno (1). Nel nostro esempio, abbiamo utilizzato 1111111111 come numero di sequenza del server. Ancora una volta, nel mondo reale, questo numero è casuale.

Si noti che i numeri di sequenza del client e del server non devono corrispondere. Finché entrambe le parti si riconoscono reciprocamente il numero di sequenza univoco, la connessione sarà affidabile.

Passaggio 3: il cliente risponde con un segmento ACK

Credito patrimoniale: Fleshgrinder/Wikimedia

Infine, il client riconosce il numero di sequenza del server.

Immagine realizzata dallo scrittore

Il segmento finale è un segmento ACK del cliente.

Come puoi, il client riconoscerà il numero di sequenza del server rispondendo con il numero di sequenza del server (1111111111) più uno (1), che è 1111111112.

Il client e il server non invieranno più un numero di sequenza poiché l'inizio della sequenza è già stato riconosciuto. Entrambe le parti, tuttavia, si aspetteranno che i segmenti di riconoscimento continuino i numeri di sequenza più uno (1) e il numero di byte durante l'interazione. In questo caso, il client si aspetta che la risposta successiva del server abbia un ACK di 0000000002 (se non ci sono dati allegati).

Dopo di che, viene stabilita la stretta di mano a tre!

Capire come funzionano le connessioni di rete

Ora che hai imparato come funziona un handshake a tre vie, ti sarà anche più facile capire come funziona il TCP dopo l'handshake. Il client e il server inizieranno a inviare i dati quando viene stabilita l'handshake. Questa volta verrà utilizzato il formato del segmento completo, più i dati o il carico utile opzionali.

I dati vengono solitamente segmentati/tagliati in parti più piccole per facilitare i trasferimenti. Ogni segmento di dati ha la propria testa di segmento contenente un numero di sequenza e un numero di riconoscimento. Il motivo per un numero di sequenza è conoscere la sequenza dei segmenti quando alla fine verranno riassemblati. I numeri di conferma servono per verificare con il mittente che il loro segmento sia stato ricevuto e che corrisponda alla sequenza dei segmenti in entrata.

Il conteggio di un numero di sequenza e la verifica con un riconoscimento è il modo in cui TCP può trasportare in modo affidabile enormi blocchi di dati senza pacchetti di dati mancanti.

E con questo, dovresti avere una buona idea di come funziona TCP.