# Handshake (informatica)

In informatica l'handshaking (letteralmente "stretta di mano") è il processo attraverso il quale due calcolatori, tramite software o hardware, negoziano e stabiliscono le regole comuni, ovvero la velocità, i protocolli di compressione, di criptazione, di controllo degli errori, ecc.
Prima di iniziare la connessione vera e propria tra due macchine si crea questo tipo di connessione che consiste nella trasmissione dei pacchetti per regolare i parametri di connessione.
Il suono prodotto dal modem nella fase di connessione ad internet viene chiamato handshake.
L'handshaking può negoziare parametri accettabili per apparecchiature e sistemi a entrambe le estremità del canale di comunicazione, inclusa la velocità di trasferimento delle informazioni, l'alfabeto di codifica, la parità, la procedura di interruzione e altre funzionalità di protocollo o hardware. La stretta di mano è una tecnica di comunicazione tra due entità. Tuttavia, all'interno delle RFC TCP/IP, il termine "handshake" è più comunemente utilizzato per fare riferimento all'handshake a tre vie TCP. Ad esempio, il termine "handshake" non è presente nelle RFC che coprono FTP o SMTP. Un'eccezione è Transport Layer Security, TLS, setup, FTP. Al posto del termine "handshake", FTP sostituisce il termine "conversazione" per il passaggio di comandi.
Un semplice protocollo di handshaking potrebbe coinvolgere solo il destinatario che invia un messaggio che significa "Ho ricevuto il tuo ultimo messaggio e sono pronto a inviarmene un altro". Un protocollo di handshake più complesso potrebbe consentire al mittente di chiedere al destinatario se è pronto a ricevere o che il destinatario risponda con un riconoscimento negativo che significa "Non ho ricevuto correttamente il tuo ultimo messaggio, invialo di nuovo" (ad esempio, se i dati sono stati danneggiati durante il percorso).
L'handshaking facilita il collegamento di sistemi o apparecchiature relativamente eterogenei su un canale di comunicazione senza la necessità dell'intervento umano per impostare i parametri.

## Esempio
### Handshake TCP a tre vie

Stabilire una normale connessione TCP richiede tre passaggi separati:
   * Il primo host (Alice) invia al secondo host (Bob) un messaggio di "sincronizzazione" (SYN) con il proprio numero di sequenza , che Bob riceve.
   * Bob risponde con un messaggio di riconoscimento della sincronizzazione (SYN-ACK) con il proprio numero di sequenza e numero di riconoscimento , che Alice riceve.
   * Alice risponde con un messaggio di riconoscimento (ACK) con numero di riconoscimento, che Bob riceve e a cui non ha bisogno di rispondere.
    In questa configurazione, i messaggi di sincronizzazione agiscono come richieste di servizio da un server all'altro, mentre i messaggi di riconoscimento ritornano al server richiedente per fargli sapere che il messaggio è stato ricevuto.
Il motivo per cui il client e il server non utilizzano un numero di sequenza predefinito come 0 per stabilire la connessione è la protezione contro due incarnazioni della stessa connessione che riutilizzano lo stesso numero di sequenza troppo presto, il che significa che un segmento di una precedente incarnazione di una connessione potrebbe interferire con una successiva incarnazione della connessione.

### SMTP

Il protocollo SMTP ( Simple Mail Transfer Protocol ) è lo standard Internet chiave per la trasmissione di posta elettronica. Esso comprende handshaking per negoziare l'autenticazione, crittografia e la dimensione massima dei messaggi.

### Handshake TLS

Quando viene avviata una connessione Transport Layer Security (SSL o TLS), il record incapsula un protocollo di "controllo": il protocollo di messaggistica handshake (tipo di contenuto 22). Questo protocollo viene utilizzato per scambiare tutte le informazioni richieste da entrambe le parti per lo scambio dei dati dell'applicazione effettiva da parte di TLS. Definisce la formattazione dei messaggi o che contengono queste informazioni e l'ordine del loro scambio. Questi possono variare in base alle richieste del client e del server, ovvero esistono diverse procedure possibili per impostare la connessione. Questo scambio iniziale si traduce in una connessione TLS riuscita (entrambe le parti sono pronte a trasferire i dati dell'applicazione con TLS) o in un messaggio di avviso (come specificato di seguito).
Il protocollo viene utilizzato per negoziare gli attributi protetti di una sessione.

### WPA2 wireless

Lo standard WPA2 per wireless utilizza un handshake a quattro vie definito in IEEE 802.11i-2004.

### Modem di accesso remoto

Un classico esempio di handshaking è quello dei modem dial-up, che tipicamente negoziano i parametri di comunicazione per un breve periodo quando viene stabilita una connessione per la prima volta, e lì dopo usano quei parametri per fornire un trasferimento ottimale delle informazioni sul canale in funzione della sua qualità e capacità. I rumori di "stridio" (che in realtà è un suono che cambia di tono 100 volte al secondo) prodotti da alcuni modem con uscita altoparlante subito dopo che è stata stabilita una connessione sono infatti i suoni dei modem ad entrambe le estremità impegnati in una procedura di handshaking; una volta completata la procedura, l'altoparlante potrebbe essere tacitato, a seconda delle impostazioni del sistema operativo o dell'applicazione che controlla il modem.

### "Handshaking hardware" seriale

Questo termine usato di frequente descrive l'uso di segnali RTS e CTS su un'interconnessione seriale. Tuttavia, non è del tutto corretto; non è una vera forma di stretta di mano ed è meglio descritta come controllo del flusso.

## Nelle telecomunicazioni e nei sistemi a microprocessore

Nelle telecomunicazioni e nei sistemi a microprocessore, il termine handshaking ha i seguenti significati:
* nella comunicazione dati, una sequenza di eventi governati da hardware o software, che richiedono reciproco accordo degli stati di modi operazionali precedenti lo scambio di informazioni.
* Il processo adoperato per stabilire i parametri di comunicazione tra due stazioni.
Il protocollo di trasmissione parallela handshake, utilizzato in architetture master-slave, è una variante del protocollo strobe. A differenza di quest'ultimo, sono presenti due linee di controllo:
* la linea REQ, cioè request, che viene trasmessa dal dispositivo master quando richiede un'informazione allo slave;
* la linea ACK, cioè acknowledge, che invece viene trasmessa dallo slave quando l'informazione richiesta viene posta sul bus dati.
Un ciclo di handshake funziona quindi in questo modo: il master asserisce REQ per richiedere allo slave un'informazione. Vedendo asserita la linea REQ, lo slave elabora la richiesta ricevuta e, non appena termina il processo, asserisce la linea ACK, e in questa maniera il master sa che il dato sul bus è valido e può campionarlo. Contemporaneamente, il master deasserisce REQ e allora lo slave rilascia il controllo del bus.