Three-way handshake : Instauriamo una connessione

Apertura di una connessione – Three-way handshake

Un handshake a tre vie (Three-way handshake) è un metodo utilizzato in una rete TCP/IP per creare una connessione tra un host/client locale e un server. Si tratta di un metodo in tre fasi che richiede sia al client che al server di scambiare i pacchetti SYN e ACK (riconoscimento-acknowledgment) prima dell’inizio della comunicazione dei dati.

Funziona così:

  • Un  client invia un pacchetto dati SYN su una rete IP a un server sulla stessa rete o a una rete esterna. L’obiettivo di questo pacchetto è di chiedere se il server è disponibile per nuove connessioni.
  • Il server di destinazione deve disporre di porte aperte in grado di accettare e avviare nuove connessioni. Quando il server riceve il pacchetto SYN dal nodo client, risponde e restituisce una ricevuta di conferma, il pacchetto ACK o SYN/ACK.
  • Ilclient riceve il SYN/ACK dal server e risponde con un pacchetto ACK.
  • Al termine di questo processo, viene creata la connessione e l’host e il server sono in grado di comunicare.

 

Vediamo

Tcp-handshake
Tcp-handshake : Client = A : Server = B

 

  1. A invia un segmento SYN a B – il flag SYN è impostato a 1 e il campo Sequence number contiene il valore x che specifica l’Initial Sequence Number di A;
  2. B invia un segmento SYN/ACK ad A – i flag SYN e ACK sono impostati a 1, il campo Sequence number contiene il valore y che specifica l’Initial Sequence Number di B e il campo Acknowledgment numbercontiene il valore x+1 confermando la ricezione del ISN di A;
  3. A invia un segmento ACK a B – il flag ACK è impostato a 1 e il campo Acknowledgment number contiene il valore y+1 confermando la ricezione del ISN di B.

Il terzo segmento non sarebbe, idealmente, necessario per l’apertura della connessione in quanto già dopo la ricezione da parte di A del secondo segmento.  Entrambi gli host hanno espresso la loro disponibilità all’apertura della connessione. Tuttavia esso risulta necessario al fine di permettere anche all’host B una stima del timeout iniziale, come tempo intercorso tra l’invio di un segmento e la ricezione del corrispondente ACK.

RICORDIAMO

Il flag SYN risulta utile nell’implementazione pratica del protocollo, e nella sua analisi da parte dei firewall: nel traffico TCP i segmenti SYN stabiliscono nuove connessioni, mentre quelli con il flag non attivo appartengono a connessioni già instaurate.

I segmenti utilizzati durante l’handshake sono solitamente ‘solo header’. Hanno il campo Data vuoto essendo questa una fase di sincronizzazione tra i due host e non di scambio di dati.

Il three-way handshake si rende necessario poiché la sequenza numerica (ISN) non è legata ad un clock generale della rete.  Ogni pacchetto IP può avere il proprio modo di calcolare l’Initial Sequence Number. Alla ricezione del primo SYN non è possibile sapere se la sequenza ricevuta appartenga ad un ritardo dovuto ad una precedente connessione.

Tuttavia, viene memorizzata l’ultima sequenza usata nella connessione, potendo così essere richiesta la verifica all’ host mittente del SYN appartenente alla vecchia connessione.

Perchè ricordare ? Perchè vedremo come vengono sfruttate queste caratteristiche per eseguire un  SYN flood. Un SYN flood è una forma di attacco denial-of-service in cui un attaccante invia una serie di richieste SYN ad un  sistema  nel tentativo di consumare risorse server sufficienti per rendere il sistema non più reattivo al traffico legittimo.