Met een TCP-handshake kan een netwerkverbinding tussen client en server gecreëerd of verbroken worden. Een TCP-handshake is nodig om stabiele en betrouwbare netwerkverbindingen in de transport-, sessie-, presentatie- en applicatielaag (de lagen 4 t/m 7 in het OSI-model) te creëren of te verbreken. Tijdens een TCP-handshake worden gegevens via de netwerklaag (laag 3 in het OSI-model) uitgewisseld tussen computers met verschillende internet sockets.[1]

TCP/IP-pakketten en gegevensoverdracht

Metadata en payload

Met behulp van TCP/IP-pakketten kunnen clients en servers gegevens uitwisselen. Een TCP/IP-pakket is een IPv4- of een IPv6-pakket waarmee een TCP-segment over een IP-netwerk verstuurd wordt. Het gegevensblok bevat de payload en de IP- en TCP-headers bevatten metadata. Als het gegevensblok leeg is dan worden met het TCP/IP-pakket alleen metadata in de IP-header en de TCP-header overgedragen. De metadata in de IP-headers bevatten bijna geen informatie die van belang is voor de netwerkverbinding of het verdere verloop van de sessie. Tijdens een TCP-handshake wordt via de metadata in TCP-headers de belangrijkste informatie tussen client en server uitgewisseld. Die metadata hebben de beide partijen nodig om tijdens de TCP-sessie de dataTransmissie te Controleren.

TCP-header

Een aantal velden in de TCP-header spelen een hoofdrol tijdens een TCP-handshake. Dat zijn de eerste twee 16 bits velden met de nummers van de bronpoort en de bestemmingspoort, de twee volgende 32 bit velden met het sequentie- en het bevestigingsnummer en de drie bits van de SYN-, FIN- en ACK-vlaggen.

Meer informatie Bit offset ...
TCP Header
Bit offset 0 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031
0BronpoortBestemmingspoort
32Sequentienummer
64Bevestigingsnummer
96Headerlengte000N
S
C
W
R
E
C
E
U
R
G
A
C
K
P
S
H
R
S
T
S
Y
N
F
I
N
Window-grootte
128ControlesomVerwijzing naar urgente gegevens
160
...
Opties (if Headerlengte > 5)
...
Sluiten

Bestemmingspoort en bronpoort

De bestemmingspoort (of doelpoort) is het poortnummer dat de client moet gebruiken om een netwerkverbinding met een server te kunnen maken. De service draait op een bepaalde TCP-systeempoort of TCP-gebruikerspoort, zoals de poortnummers 80, 143, 389 en 3306 voor resp. HTTP, IMAP, LDAP en MySQL-databases. De bronpoort is een (willekeurig) dynamisch poortnummer dat door client gekozen wordt uit de reeks van 49152 t/m 65535. Het poortnummer van de bronpoort wordt tijdens de hele sessie gebruikt. De bronpoort van de client is hetzelfde als de bestemmingspoort in de TCP/IP-pakketten die de server naar de client verstuurt.

Sequentienummer en bevestigingsnummer

Het eerste sequentienummer (of volgnummer) is een willekeurig 32 bits getal dat door de toevalsgenerator van de client wordt gekozen. Dat sequentienummer wordt door de client in met het eerste TCP/IP-pakket naar de server verstuurd. De server verhoogt het sequentienummer en stuurt het resultaat als nieuw sequentienummer samen met het eerste bevestigingsnummer in een TCP/IP-pakket naar de client. Het eerste bevestigingsnummer is een willekeurig 32 bits getal dat door de toevalsgenerator van de server wordt gekozen. Na ontvangst van het pakketje verhoogt de client het bevestigingsnummer en stuurt dat als nieuw bevestigingsnummer in het volgende TCP/IP-pakket naar de server.

Tijdens een TCP-sessie verhoogt de client bij elke transactie het bevestigingsnummer en verhoogt de server bij elke transactie het sequentienummer. Op deze manier worden de pakketjes automatisch genummerd zodat de pakketjes door beide partijen geordend kunnen worden en de beide partijen de volgorde van versturen kunnen controleren.

SYN-, FIN- en ACK-vlag

De SYN- en FIN-vlaggen worden alleen aan het begin van een handshake gebruikt. De client stuurt een eerste pakketje met een SYN-vlag naar de server als verzoek om een TCP-sessie op te starten. Als de server de aanvraag accepteert dan stuurt hij als antwoord een pakketje met een SYN-vlag en een ACK-vlag naar de client terug. Tijdens een sessie heeft de SYN-vlag alleen in het eerste pakketje dat de client naar de server verstuurt, en in het eerste pakketje dat de server naar de client verstuurt, de waarde 1.

Een TCP-verbinding is een asymmetrisch, half-duplex communicatiekanaal. Zowel de client als de server kan de FIN-vlag gebruiken om de verbinding te verbreken. De FIN-vlag heeft alleen de waarde 1 in het voorlaatste of het laatste pakketje dat client en server naar elkaar opsturen.

De ACK-vlag wordt gebruikt voor alle pakketjes waarin het sequentienummer of het bevestigingsnummer opgehoogd is.[2][3]

Handshakes

Netwerkverbinding maken

Thumb
Schematische weergave van de drie stappen waarmee een netwerkverbinding wordt gemaakt.

De client neemt het initiatief om een netwerkverbinding met een server tot stand te brengen door de server een SYN-pakket, een TCP/IP-pakket met een SYN-vlag en een sequentienummer, toe te sturen. Als de server reageert door een SYN-ACK-pakket, een TCP/IP-pakket met een SYN- en een ACK-vlag, een bevestigingsnummer en een opgehoogd sequentienummer, terug te sturen dan kan de uitwisseling van TCP/IP-pakketten voor datatransport voortgezet worden.

De TCP-handshake om een netverbinding te maken verloopt in drie stappen:[4][5]

  1. De client verstuurt een TCP-header met SYN = 1, een sequentienummer = x, een bronpoort en een bestemmingspoort naar de server. De tweede stap kan volgen als op het IP-adres een server draait die reageert op TCP/IP-pakketten met het poortnummer van de bestemmingspoort in de TCP-header.
  2. De server stuurt een TCP/IP-pakket met SYN = 1, ACK = 1, sequentienummer = y en bevestigingsnummer = x + 1 terug naar de client om de ontvangst van het eerste TCP/IP-pakket te bevestigen. De derde stap volgt nadat de ontvangstgegevens door de client zijn gecontroleerd.
  3. De client stuurt een tweede pakket met SYN = 0, ACK = 1, sequentienummer = x + 1 en bevestigingsnummer = y + 1 en aanvullende gegevens, terug naar de server. Als de gegevens in het TCP/IP-pakket door de client gecontroleerd zijn dan kan de sessie voortgezet worden.

Na de derde stap is de verbindingstoestand ESTABLISHED waarna processen in de applicatielaag opgestart kunnen worden.

Tijdens de TCP-handshake kunnen zich verschillende problemen voordoen. De client kan met een SYN flood een crash van een server of een denial of service veroorzaken door foute bronadressen aan SYN-pakketjes mee te geven.

Netwerkverbinding verbreken

Thumb
Schematische weergave van de vier stappen waarmee een netwerkverbinding wordt verbroken.

Omdat een TCP-netwerkverbinding veel op een (vrij traag, asymmetrisch) full-duplex TDMA-communicatiekanaal lijkt, kan de verbinding op elk moment zowel op verzoek van de server als op verzoek van de client verbroken worden. De partij die de verbinding wil verbreken wordt de initiator van de handshake genoemd en de andere partij wordt de ontvanger van de handshake genoemd. Een verzoek om de verbinding te verbreken wordt door de initiator gedaan door een FIN-pakket, ofwel een TCP/IP-pakket met een FIN-vlag, naar de ontvanger te versturen.

Het verbreken van een TCP-netwerkverbinding verloopt in vier stappen:

  1. De initiator verstuurt een TCP-header met een FIN-vlag naar de ontvanger.
  2. Nadat de ontvanger de FIN-vlag heeft ontvangen, stuurt de ontvanger zijn laatste TCP/IP-pakket met een ACK-vlag naar de initiator.
  3. De ontvanger stuurt vervolgens een FIN-vlag naar de initiator om de initiator te laten weten dat de verbinding verbroken kan worden.
  4. Vervolgens stuurt de initiator een TCP-header met een ACK-vlag naar de ontvanger om de verbinding definitief te verbreken.

Nadat de ontvanger de ACK-vlag heeft ontvangen is de netwerkverbinding definitief verbroken.

Verbindingstoestanden

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.