La perdita di pacchetti durante la stretta di mano TCP

Devo implementare una stretta di mano pseudo TCP che port in un trasferimento di file. Non ho alcun problema a fare il trasferimento di file: semplicemente submit-conferma. Quello che non posso avvolgere la testa è come fare la stretta di mano a tre vie assumendo che ci sarà la perdita di pacchetti durante uno dei tre passaggi.

Ad esempio: Il mio client invia un pacchetto SYN. Se si esaurisce (perdita di pacchetti o solo lento) in attesa di SYN-ACK, lo ristabilisce. Il server invia SYN-ACK. Se si ritarda in attesa di ACK, ristabilire SYN-ACK. Ora come il cliente ora che il suo ACK è stato ricevuto?

Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.