TCP protokoll

I föregående avsnitt såg vi att Transportskiktet använder två huvudprotokoll: TCP och UDP.

Här fördjupar vi oss i TCP och när det är lämpligt att använda det istället för UDP. För att förstå skillnaderna mellan TCP och UDP måste vi först förstå hur de hanterar tillförlitlighet och hur de följer och styr pågående kommunikationer.

Utöver de grundläggande funktionerna – segmentering av data och återmontering hos mottagaren – erbjuder TCP flera avancerade tjänster:

  • Upprättar en förbindelse (session) – TCP är ett förbindelseorienterat protokoll. Det innebär att en anslutning alltid etableras mellan käll- och destinationsenheter innan någon data skickas. Under denna process ”förhandlar” enheterna om hur mycket trafik som kan skickas åt gången. Detta gör kommunikationen mer kontrollerad och tillförlitlig.
  • Tillförlitlig leverans – Under transport kan segment skadas eller tappas bort. TCP garanterar att varje skickat segment faktiskt når fram till mottagaren. Om något förloras, skickas det om tills det är korrekt mottaget.
  • Leverans i rätt ordning – Data kan ta olika vägar genom nätverket och därför komma fram i fel ordning. TCP använder numrering och sekvensering för att säkerställa att segmenten sätts ihop i den korrekta ordningen innan de lämnas till applikationen.
  • Flödeskontroll – Enheter i nätverket har begränsade resurser, som minne och processorkraft. Om en mottagare blir överbelastad kan TCP be avsändaren att sänka överföringshastigheten. På så sätt undviks onödiga omsändningar och nätverket används mer effektivt.

TCP – ett tillståndsbaserat protokoll

TCP är ett tillståndsbaserat protokoll, vilket innebär att det hela tiden håller reda på statusen för en pågående kommunikation. För att kunna göra detta sparar TCP information om vilka segment som redan har skickats och vilka som har bekräftats av mottagaren.

En sådan tillståndsbaserad session startar när en förbindelse upprättas mellan avsändare och mottagare, och avslutas när förbindelsen stängs. På så sätt kan TCP garantera att hela kommunikationen följs från början till slut.

När TCP kapslar in data från applikationslagret tillför det en header20 byte (160 bitar). Denna header innehåller de fält som behövs för att hålla ordning på sessionens tillstånd, numrering, kvittenser och flödeskontroll. Figuren visar hur fälten i en TCP-header är uppbyggda.

En mer detaljerad beskrivning av fälten i TCP-headern

  • Source Port Number – Detta 16-bitarsfält identifierar källans portnummer. Det anger vilken applikation eller process som skickar data.
  • Destination Port Number – Även detta är ett 16-bitarsfält. Det anger destinationens portnummer, dvs. vilken port på mottagarsidan som ska ta emot data. Därmed identifieras mottagarapplikationen eller processen.
  • Sequence Number – Detta 32-bitarsfält används för att ordna TCP-segment i rätt ordning vid mottagning. Avsändaren sätter sekvensnumret till den första byten i segmentet och ökar värdet för varje efterföljande byte som skickas.
  • Acknowledgment Number – Mottagaren fyller detta 32-bitarsfält med nästa förväntade sekvensnummer. Tillsammans med ACK-flaggan används det för att bekräfta att tidigare data mottagits korrekt.
  • Header Length (HLEN eller Data Offset) – Detta 4-bitarsfält anger längden på TCP-headern och mäts i multiplar av 32 bitar (4 byte). Därmed kan headern vara mellan 20 och 60 byte lång.
    • Vanligt värde är 5 (0101), vilket motsvarar 20 byte (5 × 4).
    • Maxvärdet är 15 (1111), vilket motsvarar 60 byte (15 × 4).
  • Reserved – Ett 6-bitarsfält reserverat för framtida användning. Alla bitar ska för närvarande sättas till 0.
  • Flags (Kontrollbitar / Flaggor) – Detta 9-bitarsfält används för styrning av anslutningen. Vanliga flaggor är:
    • URG (Urgent) – indikerar att det finns brådskande data i segmentet.
    • ACK (Acknowledgment) – anger att kvittenstalet är giltigt och att data tagits emot.
    • PSH (Push) – instruerar TCP att omedelbart skicka data vidare till applikationen, utan att buffra.
    • RST (Reset) – används för att återställa en TCP-anslutning eller signalera ett fel.
    • SYN (Synchronize) – används vid uppkoppling för att initiera en anslutning.
    • FIN (Finish) – används för att stänga en anslutning.
    • Flaggorna RST, SYN och FIN används främst vid upp- och nedkoppling av en TCP-förbindelse.
  • Window Size – Detta 16-bitarsfält anger hur många byte mottagaren är beredd att ta emot innan den vill skicka en ny bekräftelse. Det används för flödeskontroll och reglerar dataflödet mellan avsändare och mottagare.
  • Urgent Pointer – Anger positionen för sista byte av brådskande data i segmentet. Används sällan i praktiken.
  • Options (Tillval) – Ett variabelt fält som kan användas för olika tilläggsfunktioner, t.ex.
    • MSS (Maximum Segment Size)
    • Tidstämplar
    • Window scaling
    • Andra optimeringsparametrar för TCP-kommunikation

Applikationer som använder TCP

TCP är ett bra exempel på hur de olika lagren i TCP/IP-protokollstacken har sina specifika roller. TCP hanterar alla uppgifter som hör till att dela upp dataströmmen i segment, säkerställa tillförlitlighet, kontrollera dataflödet och återställa den rätta ordningen på segmenten.

Tack vare TCP behöver applikationen inte själv hantera någon av dessa funktioner. Applikationer – som de som visas i figuren – kan helt enkelt skicka dataströmmen vidare till Transportskiktet och dra nytta av de tjänster som TCP erbjuder.