Under de tidigare åren av internet var Internet Protocol (IP) det enda protokoll som människor använde för att ansluta till internet. Problemet med IP var att man kunde skicka ett meddelande och vara osäker på om mottagaren skulle få det eller inte. Av denna anledning etablerades TCP/IP.

TCP/IP säkerställer att all data du skickar når mottagaren. Den gör detta genom att förse klienten och servern med en säker anslutning innan data skickas. Denna säkra anslutning upprättas genom en process som kallas en trevägshandskakning, även känd som en TCP/IP-handskakning.

Vad är ett trevägshandslag?

Bildkredit: Fleshgrinder/Wikimedia

En trevägshandskakning (TCP/IP-handskakning) är de tre första interaktionerna mellan en klient och en server som försöker upprätta en TCP-anslutning. Dessa initiala interaktioner är viktiga för att skapa en säker anslutning. I denna fas kommer både klient och server att komma överens om parametrar som de kommer att använda för att kontrollera och verifiera inkommande och utgående datapaket. Dessa parametrar kommer att vara i form av TCP-segment.

instagram viewer

Vad är ett TCP-segment?

I en TCP/IP-anslutning måste all data som skickas skäras och struktureras på så kallade TCP-segment. Dessa segment innehåller information som IP-adresser, portar, flaggbitar, sekvensnummer, bekräftelsenummer och valfri data eller nyttolast.

De första tre interaktionerna (trevägshandskakning) kommer endast att innehålla TCP-segmentrubriker utan nyttolast eller bifogade data. Här är ett exempel på ett TCP-segment

Bildkredit: Ere/Wikimedia

Observera att illustrationen ovan endast är för TCP. Ett fullt TCP/IP-segment kräver båda IP-adresser från sändaren och mottagaren ovanpå TCP-segmentet ovan.

Närhelst du skickar ett paket till en person måste du av leveranstjänsten fylla i ett informationsformulär och sedan bifoga det till paketet innan frakt. På liknande sätt kräver TCP att avsändaren bifogar ett segmenthuvud (informationsformulär) till datan (paketet) innan den börjar skicka segmentet (paketet) till mottagaren.

Närhelst en klient kommunicerar med en server måste båda parter formatera sina interaktioner i form av ett TCP-segment. Ett TCP-segment består av ett TCP-segmenthuvud kopplat till den data du försöker skicka. Avsändaren måste fylla i den information som segmenthuvudet kräver.

För ett trevägshandslag måste avsändaren fylla i följande:

  • Källport: Identifierar avsändarens port
  • Destinationshamn: Identifierar porten på mottagaren
  • Sekvensnummer: Indikerar segmentsekvensen
  • Bekräftelsenummer: Betyder att ett segment har bekräftats genom att lägga till ett till det givna sekvensnumret

Förutom att fylla i segmenthuvudfälten måste avsändaren också välja en flaggbit. Det finns sex flaggbitar totalt, men för ett trevägshandslag behöver du bara följande två:

  1. SYN: Ger ett sekvensnummer. Detta sekvensnummer kommer att användas för att räkna sekvensen av alla inkommande segment under resten av interaktionen.
  2. ACK: Indikerar att mottagaren av SYN-numret accepterar anslutningsbegäran genom att lägga till en (1) till det angivna SYN-numret.

Nu när du vet vad ett TCP-segment är, låt oss se hur det används i ett trevägshandslag.

Hur ett trevägshandslag fungerar

En trevägshandskakning upprättas när både klient och värd har utbytt information och bekräftat varandras sekvensnummer. Som namnet antyder görs ett trevägshandslag i tre steg.

Först skickar klienten ett rent SYN-segment som indikerar att den vill ha en anslutning. För det andra svarar servern med ett SYN-ACK-segment vilket betyder att den har bekräftat begäran och skickar sitt eget SYN-nummer som klienten ska bekräfta. För det tredje skickar klienten ett ACK-segment till servern för att meddela den att serverns SYN-nummer har bekräftats och kommer att användas för ytterligare anslutning.

Ett trevägshandslag kommer att se ut ungefär så här:

Tillgångskredit: Fleshgrinder/Wikimedia

Låt oss dela upp det och titta på segmenten så att du vet exakt vad som händer när klient och server utbyter och bekräftar sekvensnummer.

Steg 1: Klienten skickar ett SYN-segment

Tillgångskredit: Fleshgrinder/Wikimedia

Klienten skickar en begärananslutning genom att skicka ett SYN-segment till servern. Klienten använder klientens IP-adress för att lokalisera servern och skicka TCP-segmentet.

För att minska komplexiteten i segmentet, låt oss ignorera några segmentfält och koncentrera oss på de nödvändiga förutsättningarna för en trevägshandskakningsanslutning. Detta inkluderar källport, destinationsport, sekvensnummer, bekräftelsenummer och vilken typ av flaggbit som används.

Och med det borde ett SYN/begäransegment se ut så här:

Bild gjord av författaren 

Klientporten är ett slumptal mellan 49152 och 65536. Detta portintervall är det överenskomna intervallet som offentliga enheter kan använda dynamiskt för att ansluta till internet. Portintervall från 1024 till 49151 är privata. De måste registreras av en enhet för att använda en port inom det angivna intervallet. Portnummer under 1024 är portar reserverade för olika funktioner och internetprotokoll som FTP (port 20), SMTP (port 25), DNS (port 53) och HTTP (port 80).

I verkligheten är ett sekvensnummer ett slumptal. För exemplet använde vi 0000000000 för att göra det lättare att visualisera.

Notera sekvensnumret när vi går igenom stegen. För närvarande är det 000000000. Det finns för närvarande inget bekräftelsenummer eftersom det inte finns något att bekräfta.

Steg 2: Serversvar med ett SYN-ACK-segment

Tillgångskredit: Fleshgrinder/Wikimedia

När servern väl tar emot ett SYN-segment kommer den att svara genom att skicka ett ACK-segment som innehåller bekräftelsenumret. Bekräftelsenumret kommer att vara kundens sekvensnummer plus ett (1).

Bild gjord av författaren

Titta på källporten. Det visar att segmentet är från port 20, vilket indikerar att det kom från servern som ett svar.

Titta nu på bekräftelsenumret. Det är 0000000001, vilket är klientens sekvensnummer (0000000000) plus ett (1). Så här spåras ett segment. Låt oss säga att klienten fick ett ACK-segmentsvar där bekräftelsenumret är 0000000002. Detta skulle indikera för kunden att segment 0000000001 saknades och att kunden måste vänta tills det anländer så att du inte upplever paketförlust.

Som du kan se är två flaggbitar aktiverade - SYN och ACK.

Förutom att bekräfta klientens sekvensnummer, kommer servern också att skicka sitt eget sekvensnummer för klienten att bekräfta serverns sekvensnummer plus ett (1). I vårt exempel använde vi 1111111111 som serverns sekvensnummer. Återigen, i den verkliga världen är detta nummer slumpmässigt.

Observera att klientens och serverns sekvensnummer inte behöver matcha. Så länge som båda parter bekräftar varandras unika sekvensnummer kommer kopplingen att vara tillförlitlig.

Steg 3: Klientsvar med ett ACK-segment

Tillgångskredit: Fleshgrinder/Wikimedia

Slutligen bekräftar klienten serverns sekvensnummer.

Bild gjord av författaren

Det sista segmentet är ett ACK-segment från klienten.

Som du kan kommer klienten att bekräfta serverns sekvensnummer genom att svara med serverns sekvensnummer (1111111111) plus ett (1), vilket är 1111111112.

Klienten och servern kommer inte längre att skicka ett sekvensnummer eftersom starten av sekvensen redan har bekräftats. Båda parter kommer dock att förvänta sig bekräftelsesegment som fortsätter sekvensnummer plus ett (1) och antal bytes under hela interaktionen. I det här fallet förväntar sig klienten att nästa serversvar ska ha ett ACK på 0000000002 (om det inte finns några bifogade data).

Därefter är trevägshandslaget etablerat!

Förstå hur nätverksanslutningar fungerar

Nu när du har lärt dig hur ett trevägshandslag fungerar kommer du också ha lättare att förstå hur TCP fungerar efter handskakningen. Klienten och servern kommer att börja skicka data när handskakningen är etablerad. Den här gången kommer hela segmentformatet att användas, plus valfri data eller nyttolast.

Data segmenteras/klipps vanligtvis i mindre bitar för enklare överföringar. Varje datasegment har sitt eget segmenthuvud som innehåller ett sekvensnummer och bekräftelsenummer. Anledningen till ett sekvensnummer är att veta sekvensen av segmenten när de så småningom kommer att sättas ihop igen. Bekräftelsenumren är till för att verifiera med avsändaren att deras segment har tagits emot och att det matchar sekvensen av inkommande segment.

Att räkna ett sekvensnummer och verifiera dem med en bekräftelse är hur TCP på ett tillförlitligt sätt kan transportera enorma bitar av data utan att några datapaket saknas.

Och med det borde du ha en ganska bra uppfattning om hur TCP fungerar.