I de tidligere år af internettet var Internet Protocol (IP) den eneste protokol, folk brugte til at oprette forbindelse til internettet. Problemet med IP var, at man kunne sende en besked og være usikker på, om modtageren ville modtage den eller ej. Af denne grund blev TCP/IP etableret.
TCP/IP sikrer, at alle de data, du sender, når frem til modtageren. Det gør den ved at give klienten og serveren en sikker forbindelse, før den sender data. Denne sikre forbindelse etableres gennem en proces kendt som et trevejs-håndtryk, også kendt som et TCP/IP-håndtryk.
Hvad er et tre-vejs håndtryk?
Et trevejs-håndtryk (TCP/IP-håndtryk) er de første tre interaktioner mellem en klient og en server, der forsøger at etablere en TCP-forbindelse. Disse indledende interaktioner er afgørende for at skabe en sikker forbindelse. I denne fase vil både klient og server blive enige om parametre, som de vil bruge til at kontrollere og verificere indgående og udgående datapakker. Disse parametre vil være i form af TCP-segmenter.
Hvad er et TCP-segment?
I en TCP/IP-forbindelse skal alle data, der sendes, klippes og struktureres på såkaldte TCP-segmenter. Disse segmenter indeholder information som IP-adresser, porte, flagbits, sekvensnumre, bekræftelsesnumre og de valgfrie data eller nyttelast.
De første tre interaktioner (tre-vejs håndtryk) vil kun indeholde TCP-segmentoverskrifter uden nyttelast eller vedhæftede data. Her er et eksempel på et TCP-segment
Bemærk, at illustrationen ovenfor kun er for TCP. Et fuldt TCP/IP-segment kræver begge dele IP-adresser fra afsender og modtager oven på TCP-segmentet ovenfor.
Hver gang du sender en pakke til en person, skal du af leveringstjenesten udfylde en informationsformular og derefter vedhæfte den til pakken inden forsendelse. På samme måde kræver TCP, at afsenderen vedhæfter et segmenthoved (informationsformular) til dataene (pakken), før den begynder at sende segmentet (pakken) til modtageren.
Når en klient kommunikerer til en server, skal begge parter formatere deres interaktioner i form af et TCP-segment. Et TCP-segment omfatter et TCP-segmenthoved knyttet til de data, du forsøger at sende. Afsenderen skal udfylde de oplysninger, som segmentchefen kræver.
For et tre-vejs håndtryk skal afsenderen udfylde følgende:
- Kildeport: Identificerer afsenderens port
- Destinationshavn: Identificerer porten på modtageren
- Sekvensnummer: Angiver segmentsekvensen
- Kvitteringsnummer: Betyder, at et segment er blevet bekræftet ved at tilføje et til det givne sekvensnummer
Udover at udfylde segmenthovedfelterne, skal afsenderen også vælge en flagbit. Der er seks flagbits i alt, men for et tre-vejs håndtryk har du kun brug for følgende to:
- SYN: Giver et løbenummer. Dette sekvensnummer vil blive brugt til at tælle sekvensen af alle indkommende segmenter for resten af interaktionen.
- ACK: Indikerer, at modtageren af SYN-nummeret accepterer forbindelsesanmodningen ved at tilføje en (1) til det angivne SYN-nummer.
Nu hvor du ved, hvad et TCP-segment er, lad os se, hvordan det bruges i et tre-vejs håndtryk.
Sådan fungerer et tre-vejs håndtryk
Et tre-vejs håndtryk etableres, når både klient og vært har udvekslet info og kvitteret for hinandens sekvensnumre. Som navnet antyder, udføres et tre-vejs håndtryk i tre trin.
Først sender klienten et rent SYN-segment, der angiver, at den ønsker en forbindelse. For det andet svarer serveren med et SYN-ACK-segment, hvilket betyder, at den har bekræftet anmodningen og sender sit eget SYN-nummer, som klienten skal bekræfte. For det tredje sender klienten et ACK-segment til serveren for at informere den om, at serverens SYN-nummer er blevet bekræftet og vil blive brugt til yderligere forbindelse.
Et tre-vejs håndtryk vil se sådan her ud:
Lad os opdele det og se på segmenterne, så du ved, hvad der præcist sker, når klient og server udveksler og anerkender sekvensnumre.
Trin 1: Klient sender et SYN-segment
Klienten sender en anmodningsforbindelse ved at sende et SYN-segment til serveren. Klienten bruger klientens IP-adresse til at lokalisere serveren og sende TCP-segmentet.
For at reducere kompleksiteten af segmentet, lad os ignorere nogle få segmentfelter og koncentrere os om de nødvendige behov for en tre-vejs håndtrykforbindelse. Dette inkluderer kildeport, destinationsport, sekvensnummer, bekræftelsesnummer og hvilken type flagbit der bruges.
Og dermed skulle et SYN/anmodningssegment se sådan ud:
Klientporten er et tilfældigt tal mellem 49152 og 65536. Dette portområde er det aftalte område, som offentlige enheder kan bruge dynamisk til at oprette forbindelse til internettet. Portintervaller på 1024 til 49151 er private. De skal registreres af en enhed for at bruge en port inden for det specificerede interval. Portnumre under 1024 er porte, der er reserveret til forskellige funktioner og internetprotokoller såsom FTP (port 20), SMTP (port 25), DNS (port 53) og HTTP (port 80).
I det virkelige liv er et sekvensnummer et tilfældigt tal. I eksemplet brugte vi 0000000000 for at gøre det nemmere at visualisere.
Læg mærke til sekvensnummeret, efterhånden som vi går gennem trinene. I øjeblikket er det 000000000. Der er i øjeblikket ikke noget kvitteringsnummer, da der ikke er noget at kvittere for.
Trin 2: Serversvar med et SYN-ACK-segment
Når serveren modtager et SYN-segment, vil den reagere ved at sende et ACK-segment, der indeholder bekræftelsesnummeret. Kvitteringsnummeret vil være klientens sekvensnummer plus én (1).
Se på kildeporten. Det viser, at segmentet er fra port 20, hvilket indikerer, at det kom fra serveren som et svar.
Se nu på bekræftelsesnummeret. Det er 0000000001, som er klientens sekvensnummer (0000000000) plus en (1). Sådan spores et segment. Lad os sige, at klienten modtog et ACK-segmentsvar, hvor bekræftelsesnummeret er 0000000002. Dette ville indikere for klienten, at segment 0000000001 manglede, og at klienten bliver nødt til at vente, indtil det ankommer så du ikke oplever pakketab.
Som du kan se, er to flagbits aktiveret - SYN og ACK.
Udover at bekræfte klientens sekvensnummer, sender serveren også sit eget sekvensnummer, så klienten kan bekræfte serverens sekvensnummer plus et (1). I vores eksempel brugte vi 1111111111 som serverens sekvensnummer. Igen, i den virkelige verden er dette tal tilfældigt.
Bemærk, at klientens og serverens sekvensnumre ikke behøver at stemme overens. Så længe begge parter anerkender hinandens unikke sekvensnummer, vil forbindelsen være pålidelig.
Trin 3: Klientsvar med et ACK-segment
Til sidst bekræfter klienten serverens sekvensnummer.
Det sidste segment er et ACK-segment fra klienten.
Som du kan, vil klienten anerkende serverens sekvensnummer ved at svare med serverens sekvensnummer (1111111111) plus en (1), som er 1111111112.
Klienten og serveren vil ikke længere sende et sekvensnummer, da starten af sekvensen allerede er blevet bekræftet. Begge parter vil dog forvente bekræftelsessegmenter, der fortsætter sekvensnumre plus én (1) og antal bytes gennem interaktionen. I dette tilfælde forventer klienten, at det næste serversvar har en ACK på 0000000002 (hvis der ikke er nogen vedhæftede data).
Hvorefter tre-vejs håndtrykket er etableret!
Forstå, hvordan netværksforbindelser fungerer
Nu hvor du har lært, hvordan et tre-vejs håndtryk fungerer, vil du også have lettere ved at forstå, hvordan TCP virker efter håndtrykket. Klienten og serveren begynder at sende data, når håndtrykket er etableret. Denne gang vil det fulde segmentformat blive brugt, plus de valgfrie data eller nyttelast.
Data er normalt segmenteret/skåret i mindre stykker for nemmere overførsler. Hvert datasegment har sit eget segmenthoved, der indeholder et sekvensnummer og et bekræftelsesnummer. Grunden til et sekvensnummer er at kende rækkefølgen af segmenterne, når de til sidst vil blive samlet igen. Kvitteringsnumrene er der for at bekræfte over for afsenderen, at deres segment er modtaget, og at det matcher rækkefølgen af indgående segmenter.
At tælle et sekvensnummer og verificere dem med en bekræftelse er, hvordan TCP pålideligt kan transportere enorme bidder af data uden manglende datapakker.
Og med det burde du have en ret god idé om, hvordan TCP virker.