home       basis       routing       switching       advanced       security       overig       testen      

TCP (2) HANDSHAKE

TCP is connection orriented:
 
connection-oriented betekent dat TCP een feedback mechanisme heeft waarbij aan beide kanten zichtbaar is of alle pakketten inderdaad zijn aangekomen.
Dit gebeurt aan de hand van sequence numbers (startpunt in de TCP-stream van een pakket)
en acknowledgement nummers (de pakketten die correct werden ontvangen)
Dank zij de SEQ-nummers kan TCP de ontvangen pakketten in de juiste volgorde plaatsen.
 
De handshake houdt zich vooral bezig met:

  • aanknopen van een verbinding in twee richtingen (zenden en ontvangen) (a.d.h.v. SYN flags)
  • en het regulier afbreken van die verbinding zodra die niet meer nodig is. (a.d.h.v. FIN flags)
  • het bevestigen van aangekomen pakketten in de twee richtingen (ACK zie boven)

 
In het volgende voorbeeld werken we met een win10-client die een verbinding opzet naar een ubuntu WEB-server: (operating systems werken allemaal op dezelfde manier in TCP/IP -- meestal zet een CLIENT een verbinding op)
 
Three-Way Handshake: (opstarten van een verbinding a.d.h.v. 3 pakketten)
 
Stap 1: Client (win) stuurt een SYN packet naar Server (lnx) om een verbinding op te zetten
Stap 2: Server (lnx) antwoordt met een SYN-ACK packet naar Client (win)
Stap 3: Client (win) stuurt een ACK packet naar Server (lnx), om de handshake af te ronden

Client (win10)            Server (lnx)
    |                          |
    |---- SYN ---------------> |   (Step 1: Handshake -> )
    |                          |
    | <-- SYN-ACK ------------ |   (Step 2: ACK + Handshake <- )
    |                          |
    |---- ACK ---------------> |   (Step 3: ACK -> )

In wireshark ziet dit er ongeveer zo uit:

syn-syn-ack-ack

10.0.2.15 is een lokale windows client op een privaat netwerk
208.97.177.194 is een server met een website ergens op het internet
 
wireshark regel 3:
 
je zou SYN in het nederlands kunnen vertalen naar: "ik wens met u te spreken"
de CLIENT wil een verbinding opzetten tussen zichzelf en de SERVER.
 
wireshark regel 4:
 
in de tweede wireshark regel, zie je een ACK, die kun je vertalen als "kheb u gezien; dat is goed"
MAAR ..... , de server antwoordt in regel 2 met zowel een SYN als een ACK. Die ACK ging nog over het eerste pakket van de client, maar de SYN van de server betekent hier dat er ook een verbinding wordt opgezet in de richting SERVER naar CLIENT.
 
wireshark regel 5:
 
de client antwoordt op de SYN-v-d-SERVER met een ACK; er is nu verkeer mogelijk in twee richtingen.
 
 
Connection Termination:
 
We werken nog steeds met dezelfde machines ...
Na de 3-way handshake was er verkeer tussen client en server en werd er een website opgevraagd en doorgestuurd. Nadat de laatste bit van de webpagina was ontvangen, stuurde de client nog een ACK, en daarna een FIN om te zeggen dat de verbinding kon worden afgebroken. Dat ging als volgt:
 
Stap 1: Client (A) stuurt FIN packet naar Server (B) om verbinding te verbreken
                en ook nog een ACK voor het laatste pakket
Stap 2: Server (B) antwoordt met een ACK packet
Stap 3: Server (B) stuurt eigen FIN packet naar Client (A)
Stap 4: Client (A) stuurt finale ACK packet naar Server (B), be-eindigt verbinding

Client (A)                Server (B)
    |---- FIN - ACK ---------> |   (1: Termination van CLIENT)
    |                          | laatste packet ontvangen/wens verbinding te verbreken
    | <-- ACK ---------------- |   (2: ACK op FIN-client DOOR SERVER)
    |                          | uw packet gezien
    | <-- FIN - ACK ---------- |   (3: Termination van SERVER)
    |                          | nogmaals bevestiging van uw FIN, ik wens ook te sluiten
    |---- ACK ---------------> |   (4: ACK termination-server van CLIENT)
    |                          | de client bevestigd de FIN van de server

In wireshark ziet dit er ongeveer zo uit:

fin-ack