TCP 3-vejs håndtryk (SYN, SYN-ACK, ACK)
⚡ Smart opsummering
TCP 3-Way Handshake er det forbindelsesopsætningsritual, som enhver TCP-session starter med. En klient og server udveksler SYN-, SYN-ACK- og ACK-pakker for at synkronisere sekvensnumre og bekræfte, at begge sider er klar, før en eneste byte applikationsdata sendes.

Hvad er TCP trevejs-handshake?
TCP tre-vejs håndtryk er den procedure, som en klient og en server bruger på en TCP/IP netværk at oprette en pålidelig forbindelse, før der udveksles applikationsdata. Som navnet antyder, består det af tre trin, hvor begge sider udveksler synkroniserings- (SYN) og bekræftelses- (ACK) pakker og aftaler de indledende sekvensnumre, de vil bruge.
Handshaket er designet således, at begge endpoints kan initiere, forhandle og nedbryde TCP-sockets symmetrisk. Når handshaket er fuldført, er forbindelsen fuld-duplex – begge sider kan sende og modtage parallelt, indtil en af dem udsteder en FIN for at lukke sessionen.
TCP-meddelelsestyper
Fire kontrolflag vises gentagne gange under handshake og teardown.
| Besked | Beskrivelse |
|---|---|
| SYN | Initierer en forbindelse og synkroniserer sekvensnumre mellem enheder. |
| ACK | Bekræfter over for den anden side, at det forrige segment blev modtaget. |
| SYN-ACK | En kombineret besked — en SYN fra den lokale enhed plus en ACK for peer-ens tidligere SYN. |
| FIN | Bruges til at afslutte en forbindelse elegant. |
TCP tre-vejs håndtryk proces
TCP-trafik starter altid med et trevejs-handshake. Klienten starter samtalen ved at anmode om en session med serveren.
3-vejs håndtryksdiagram.
- Trin 1 — SYN: Klienten sender et segment med SYN-flaget sat. Det fortæller serveren "Jeg vil gerne begynde at kommunikere" og foreslår et indledende sekvensnummer.
- Trin 2 — SYN-ACK: Serveren svarer med et segment, hvor både SYN- og ACK-flag er angivet. ACK'en bekræfter klientens SYN, og SYN foreslår serverens eget indledende sekvensnummer.
- Trin 3 — BEKRÆFTELSE: Klienten bekræfter serverens SYN-ACK med en endelig ACK. Forbindelsen er nu etableret, og begge sider kan starte transmitapplikationsdata.
Eksempel fra den virkelige verden
Her er et udtænkt eksempel med konkrete sekvensnumre.
- Vært X starter forbindelsen ved at sende en TCP SYN-pakke til serveren. Pakken bærer et tilfældigt initialt sekvensnummer — for eksempel,
4321— det markerer begyndelsen på den bytestrøm, som vært X vil sende. - Serveren modtager SYN og svarer med en SYN-ACK. ACK-nummeret er Host X's sekvensnummer øget med 1 (
4322), og SYN foreslår serverens eget initiale sekvensnummer. - Vært X svarer med en endelig ACK, hvis bekræftelsesnummer er serverens sekvensnummer forøget med 1.
Når dataudvekslingen er færdig, nedbryder TCP forbindelsen med en firevejs FIN/ACK-sekvens, så begge slutpunkter kan frigive socket'en uden problemer.
Hvorfor TCP har brug for et trevejshåndtryk
Håndtrykket er ikke bare en formalitet – det løser tre konkrete problemer, der følger med pålidelig byte-stream-transport:
- Synkronisering af sekvensnumre: Begge peers lærer det indledende sekvensnummer på den anden side, hvilket er det, TCP bruger til at detektere mistede eller forkerte segmenter.
- Aftale om forbindelsestilstand: Den tredje ACK bekræfter, at serverens SYN-ACK er ankommet, så ingen af siderne begynder at sende data, før begge er i NEDSAT tilstand.
- Beskyttelse mod duplikater: Tilfældige indledende sekvensnumre og tidsbestemte handshake-tilstande forhindrer, at forældede segmenter fra en tidligere session accepteres ved en fejltagelse.
Almindelige problemer med TCP-handshake
Håndtrykket er robust, men det kan opdeles på identificerbare måder. Netværksingeniører ser normalt et af følgende:
- SYN-oversvømmelsesangreb: En ondsindet klient sender tusindvis af SYN'er uden at svare på SYN-ACK'er, hvilket udtømmer serverens forbindelsestabel. SYN-cookies er standardforsvaret.
- Halvåbne forbindelser: Når den tredje ACK går tabt, forbliver forbindelsen halvåben og bliver til sidst ryddet op af en timeout.
- Firewall- eller NAT-nedbrud midt i flyvningen: Stateful middleboxes, der mister tilstand, kan tabe SYN-ACK-pakker og lade klienten forsøge igen.
- RST nulstiller: Hvis serveren ikke lytter på den anmodede port, besvarer den en SYN med en RST, som lukker forsøget med det samme.


