Pentru a închide o conexiune, flag-ul de control FIN (Finish) trebuie setat în header-ul segmentului. Pentru a termina fiecare sesiune TCP dintr-o singură direcție, este utilizat un two-way handshake, care constă într-un segment FIN și un segment ACK. Așadar, pentru a termina o singură conversație suportată de TCP, sunt necesare patru interschimbări care termină ambele sesiuni, așa cum se arată în Figura 1.

Notă:În această explicație, termenii client și server sunt utilizați ca referință pentru simplitate, dar procesul de terminarea poate fi inițiat de oricare două hosturi care au o sesiune deschisă.

Pasul 1: Când clientul nu mai are date de trimis, va trimite un segment cu indicatorul FIN setat.

Pasul 2: Serverul trimite un ACK pentru a confirma primirea FIN-ului și pentru a termina sesiunea de la client la server.

Pasul 3: Serverul trimite un FIN la client pentru a termina sesiunea dintre server și client.

Pasul 4. Clientul răspunde cu un ACK pentru a confirma FIN-ul de la server.

Atunci când clientul nu mai are date de transferat, setează flag-ul FIN în header-ul unui segment. Apoi, serverul trimite un segment normal ce conține date cu indicatorul ACK setat cu numărul confirmării de primire pentru a confirma că toți biții au fost recepționați. Când toate segmentele au fost confirmate, sesiunea este închisă.

Sesiunea în cealaltă direcție este închisă folosind același proces. Destinatarul indică faptul că nu mai sunt date de trimis setând indicatorul FIN în antetul unui segment trimis către sursă. O confirmare returnată arată că toți octeții de date au fost primiți și sesiunea este închisă.

Priviți figurile 2 și 3 pentru a vedea indicatorii de control FIN și ACK setați în antetul segmentului pentru a închide o sesiune HTTP.

Puteți termina conexiunea și printr-un 3-way handshake. Atunci când clientul nu are mai multe date de trimis, trimite un FIN la server. Dacă nici serverul nu mai are date de trimis, poate răspunde cu flag-urile FIN și ACK, combinând doi pași în unul. Apoi clientul răspunde cu un ACK.