TCP processer

Du har redan lärt dig grunderna i TCP. För att förstå detaljerna i TCP-kommunikation behöver man även förstå portnumrens roll. I detta avsnitt går vi igenom hur portnummer används av TCP, samt hur anslutningar etableras och avslutas med hjälp av three-way handshake och session termination.

Varje applikations process som körs på en server är konfigurerad att använda ett specifikt portnummer.
Portnumret kan antingen tilldelas automatiskt av systemet eller anges manuellt av en administratör. En server kan inte ha två tjänster igång som använder samma portnummer inom samma transportprotokoll.
Till exempel kan en nätverksenhet som kör både en webbserver och en FTP-server inte låta båda använda TCP-port 80.

En serverapplikation som är tilldelad en viss port och aktivt tar emot trafik på den porten anses vara öppen. Det innebär att Transportskiktet accepterar och bearbetar segment adresserade till porten.
Alla klient-förfrågningar som når rätt socket accepteras och skickas vidare till rätt applikation.
En server kan ha många portar öppna samtidigt – en för varje aktiv tjänst.

  1. Klienter som skickar TCP-förfrågningar – Klient anslutningar via TCP
  2. Destination-portar för förfrågningar – Hur klienter initierar TCP-kommunikation
  3. Source-portar för förfrågningar – TCP-förfrågningar från klienter
  4. Destination-portar för svar – Servern svarar klientens begäran över TCP
  5. Source-portar för svar – Source-portar är nu destination-portar som server använder för att servera begärda tjänster.

Klienter som skickar TCP-förfrågningar

I exemplet nedan begär klient 1 webbtjänster och klient 2 e-post tjänster från samma server.

Destinationsportar för förfrågningar

  1. Klient 1 använder den välkända port 80 (HTTP) för webbtjänster.
  2. Klient 2 använder den välkända port 25 (SMTP) för e-posttjänster.

När klienterna skickar sina förfrågningar skapar deras operativsystem automatiskt ett dynamiskt källportnummer:

  1. Klient 1 använder source-port 49152
  2. Klient 2 använder source-port 51152

Destination-portar för svar

När servern svarar byter den plats på source- och destination-portarna från den ursprungliga förfrågan:

  1. Svaret på webbfrågan skickas till destinationsport 49152
  2. Svaret på e-postfrågan skickas till destinationsport 51152

Source-portar för svar

Serverns source-port i svaret är den ursprungliga destination-porten i klientens förfrågan (t.ex. 80 eller 25).

Etablering av TCP-anslutning – Three-Way Handshake

När två nätverksenheter vill kommunicera behöver de först etablera en tillförlitlig anslutning.
TCP gör detta genom den så kallade trevägshandskakningen (three-way handshake), som fungerar ungefär som att “skaka hand” i början av ett samtal. När detta steg är klart är anslutningen etablerad, och dataöverföringen kan börja.

Klienten begär att få etablera en session med servern genom att skicka ett TCP-segment med SYN-flaggan satt.

Klienten (A) vill starta en anslutning och skickar ett SYN-segment till servern (B). Det betyder:
"Jag vill starta en session, och mitt första sekvensnummer är 100."

Servern bekräftar klientens begäran och svarar med ett segment som har både SYN och ACK satta.

Servern svarar med ett SYN-ACK-segment. Det betyder två saker:

  1. ACK = 101 – B bekräftar att den tog emot A:s SYN (100 + 1).
  2. SYN = 1 och SEQ = 300 – B vill också starta en session och börjar med sekvensnummer 300.

Detta steg visar att servern både tar emot och vill etablera anslutningen.

Klienten skickar en slutlig bekräftelse (ACK) tillbaka till servern.

Klienten bekräftar mottagandet av serverns SYN:

  • ACK = 301 visar att A tagit emot B:s SYN (300 + 1).
  • SEQ = 101 är nästa sekvensnummer från A.

Nu är sessionen etablerad (ESTABLISHED), och båda parter är redo att börja överföra data.

Avslutning av en TCP-session

För att stänga en TCP-anslutning används kontrollflaggan FIN (Finish) i TCP-huvudet.
Varje enkelriktad session avslutas med en tvåvägs handskakning, som består av ett FIN-segment och ett ACK-segment. Eftersom TCP-anslutningen är full duplex krävs totalt fyra segment utbyten för att helt stänga kommunikationen. Både klienten och servern kan initiera avslutningen.

TCP Terminerings process:

  1. FIN
  2. ACK
  3. FIN
  4. ACK

Klienten skickar ett segment med FIN-flaggan när den inte har mer data att sända.

Servern bekräftar mottagandet av FIN och stänger klient-till-server sessionen.

Servern skickar ett eget FIN för att stänga server-till-klient-sessionen.

Klienten bekräftar mottagandet av serverns FIN.

Observera:

  • När alla segment har bekräftats är sessionen stängd.
  • Termerna “klient” och “server” används här för enkelhetens skull – i praktiken kan vilken nätverksenhet som helst initiera avslutningen.

Analys av Three-Way Handshake

TCP är ett tillståndsbaserat och full-duplex protokoll. Det betyder att varje nätverksenhet håller reda på sessionens status och kan skicka samt ta emot data samtidigt.
För att etablera en tillförlitlig anslutning mellan två enheter används den så kallade Three-Way Handshake processen. Denna process bygger på kontroll-flaggor i TCP-huvudet som anger sessionens tillstånd.

Handshake-processen har tre huvudsakliga syften:

  1. Bekräfta att mottagaren är tillgänglig på nätverket.
  2. Verifiera att mottagaren har en aktiv tjänst som lyssnar på rätt portnummer.
  3. Etablera synkronisering mellan sändare och mottagare, så att båda är redo att skicka och ta emot data i rätt ordning.

När kommunikationen är avslutad sker en kontrollerad nedkoppling av sessionen för att säkerställa att alla data har överförts korrekt.
Initiering och terminering är två mekanismer som utgör grunden för TCP:s tillförlitlighet, vilket skiljer det från enklare, förbindelselöst anslutning protokoll som UDP.

TCP:s kontroll-flaggor

I TCP-huvudet finns sex kontrollbitar, ofta kallade flaggor, som anger olika tillstånd i kommunikationen.
Varje flagga kan vara på (1) eller av (0).

Kontroll-flaggor har följande funktioner:

  • URG Urgent Anger att Urgent-fältet är giltigt och prioriterar viss data.
  • ACK Acknowledgment Används vid etablering och avslutning av sessioner.
  • PSH Push Instruerar mottagaren att omedelbart skicka data vidare till applikationen.
  • RST Reset Återställer anslutningen vid fel eller timeout.
  • SYN Synchronize Synkroniserar sekvensnummer vid anslutningsetablering.
  • FIN Finish Indikerar att sändaren inte har mer data att skicka.

Tips: Utforska mer på Internet om flaggorna PSH och URG – de används i specialfall när data behöver hanteras med hög prioritet.