Il problema maggiore nella creazione di una connessione a livello di trasporto è la possibilità che arrivino dei pacchetti duplicati con la richiesta di apertura della connessione (dopo aver stabilito la connessione i duplicati vengono riconosciuti dal numero di sequenza e scartati).
Possono arrivare dei pacchetti duplicati perché a causa di una congestione una stazione mittente li ha rispediti pensando che fossero andati persi; se la connessione è già stata chiusa l’arrivo dei duplicati potrebbe riaprirla e ripetere operazioni già effettuate.
Per evitare il problema di riaprire la connessione in caso di arrivo di duplicati in ritardo viene usato un metodo noto come three way handshake (ideato da Tomlinson nel 1975).
La stazione mittente invia una richiesta di connessione contenente un numero di sequenza x; il destinatario risponde con un messaggio di conferma per x contenente a sua volta un numero di sequenza y; il mittente manda una conferma per y insieme ai primi dati. I numeri di sequenza possono essere generati in base all’orologio di sistema.
Se arriva una richiesta di connessione duplicata in ritardo contenente il numero di sequenza x, il destinatario manda la conferma con il numero di sequenza y, ma il mittente manda un messaggio di rifiuto (reject) perché non ha richiesto una connessione.
Questo metodo riesce a risolvere anche il caso peggiore costituito dal fatto che, oltre a un duplicato di una richiesta di connessione, subito dopo la conferma del destinatario arrivi anche un duplicato della conferma del mittente: la conferma del mittente conferma un numero di sequenza diverso da quello appena inviato dal destinatario e quindi il destinatario si accorge che è un duplicato e non apre la connessione.
Il metodo three way handshake è usato nell’apertura delle connessioni TCP.