I løpet av de tidligere årene med internett var Internet Protocol (IP) den eneste protokollen folk brukte for å koble til internett. Problemet med IP var at man kunne sende en melding og være usikker på om mottakeren ville motta den eller ikke. Av denne grunn ble TCP/IP etablert.
TCP/IP sikrer at all data du sender når mottakeren. Den gjør dette ved å gi klienten og serveren en sikker tilkobling før data sendes. Denne sikre forbindelsen etableres gjennom en prosess kjent som et treveis håndtrykk, også kjent som et TCP/IP-håndtrykk.
Hva er et treveis håndtrykk?
Et treveis håndtrykk (TCP/IP-håndtrykk) er de tre første interaksjonene mellom en klient og en server som prøver å etablere en TCP-forbindelse. Disse første interaksjonene er avgjørende for å lage en sikker tilkobling. I denne fasen vil både klient og server bli enige om parametere som de skal bruke for å sjekke og verifisere innkommende og utgående datapakker. Disse parameterne vil være i form av TCP-segmenter.
Hva er et TCP-segment?
I en TCP/IP-tilkobling må all data som sendes kuttes og struktureres på det som kalles TCP-segmenter. Disse segmentene inneholder informasjon som IP-adresser, porter, flaggbiter, sekvensnumre, bekreftelsesnumre og valgfrie data eller nyttelast.
De tre første interaksjonene (treveis håndtrykk) vil kun inneholde TCP-segmentoverskrifter uten nyttelast eller vedlagte data. Her er et eksempel på et TCP-segment
Merk at illustrasjonen ovenfor kun er for TCP. Et fullt TCP/IP-segment krever begge deler IP-adresser fra avsender og mottaker på toppen av TCP-segmentet ovenfor.
Hver gang du sender en pakke til en person, må du av leveringstjenesten fylle ut et informasjonsskjema og deretter legge det ved pakken før forsendelse. Tilsvarende krever TCP at avsenderen fester et segmenthode (informasjonsskjema) til dataene (pakken) før den begynner å sende segmentet (pakken) til mottakeren.
Hver gang en klient kommuniserer til en server, må begge parter formatere sine interaksjoner i form av et TCP-segment. Et TCP-segment består av et TCP-segmenthode festet til dataene du prøver å sende. Avsenderen må fylle ut informasjonen segmentsjefen krever.
For et treveis håndtrykk må avsenderen fylle ut følgende:
- Kildeport: Identifiserer porten til avsenderen
- Destinasjonshavn: Identifiserer porten til mottakeren
- Sekvensnummer: Indikerer segmentsekvensen
- Bekreftelsesnummer: Betyr at et segment har blitt bekreftet ved å legge til ett til det gitte sekvensnummeret
Bortsett fra å fylle ut segmenthodefeltene, må avsenderen også velge en flaggbit. Det er seks flaggbiter totalt, men for et treveis håndtrykk trenger du bare følgende to:
- SYN: Gir et sekvensnummer. Dette sekvensnummeret vil bli brukt til å telle sekvensen til alle innkommende segmenter for resten av interaksjonen.
- ACK: Indikerer at mottakeren av SYN-nummeret godtar tilkoblingsforespørselen ved å legge til en (1) til SYN-nummeret som er gitt.
Nå som du vet hva et TCP-segment er, la oss se hvordan det brukes i et treveis håndtrykk.
Hvordan et treveis håndtrykk fungerer
Et treveis håndtrykk etableres når både klient og vert har utvekslet informasjon og bekreftet hverandres sekvensnummer. Som navnet tilsier, gjøres et treveis håndtrykk i tre trinn.
Først sender klienten et rent SYN-segment som indikerer at den ønsker en tilkobling. For det andre svarer serveren med et SYN-ACK-segment som betyr at den har bekreftet forespørselen og sender sitt eget SYN-nummer som klienten skal bekrefte. For det tredje sender klienten et ACK-segment til serveren for å varsle den om at serverens SYN-nummer har blitt bekreftet og vil bli brukt for videre tilkobling.
Et treveis håndtrykk vil se omtrent slik ut:
La oss bryte det ned og se på segmentene slik at du vet nøyaktig hva som skjer når klient og server utveksler og bekrefter sekvensnumre.
Trinn 1: Klienten sender et SYN-segment
Klienten sender en forespørselsforbindelse ved å sende et SYN-segment til serveren. Klienten bruker klientens IP-adresse for å finne serveren og sende TCP-segmentet.
For å redusere kompleksiteten til segmentet, la oss se bort fra noen få segmentfelt og konsentrere oss om nødvendighetene for en treveis håndtrykkforbindelse. Dette inkluderer kildeport, destinasjonsport, sekvensnummer, bekreftelsesnummer og hvilken type flaggbit som brukes.
Og med det bør et SYN/forespørselssegment se slik ut:
Klientporten er et tilfeldig tall mellom 49152 og 65536. Dette portområdet er det avtalte området som offentlige enheter kan bruke dynamisk for å koble til internett. Portområder på 1024 til 49151 er private. De må registreres av en enhet for å bruke en port innenfor det angitte området. Portnumre under 1024 er porter reservert for ulike funksjoner og internettprotokoller som FTP (port 20), SMTP (port 25), DNS (port 53) og HTTP (port 80).
I det virkelige liv er et sekvensnummer et tilfeldig tall. For eksempelet brukte vi 0000000000 for å gjøre det lettere å visualisere.
Legg merke til sekvensnummeret mens vi går gjennom trinnene. For øyeblikket er det 000000000. Det er for øyeblikket ikke noe bekreftelsesnummer da det ikke er noe å bekrefte.
Trinn 2: Serversvar med et SYN-ACK-segment
Når serveren mottar et SYN-segment, vil den svare ved å sende et ACK-segment som inneholder bekreftelsesnummeret. Bekreftelsesnummeret vil være klientens sekvensnummer pluss én (1).
Se på kildeporten. Det viser at segmentet er fra port 20, noe som indikerer at det kom fra serveren som et svar.
Se nå på bekreftelsesnummeret. Det er 0000000001, som er klientens sekvensnummer (0000000000) pluss en (1). Dette er hvordan et segment spores. La oss si at klienten mottok et ACK-segmentsvar der bekreftelsesnummeret er 0000000002. Dette vil indikere for klienten at segment 0000000001 manglet og at klienten må vente til det kommer slik at du ikke opplever pakketap.
Som du kan se, er to flaggbiter aktivert – SYN og ACK.
Bortsett fra å bekrefte klientens sekvensnummer, vil serveren også sende sitt eget sekvensnummer for at klienten skal bekrefte serverens sekvensnummer pluss én (1). I vårt eksempel brukte vi 1111111111 som serverens sekvensnummer. Igjen, i den virkelige verden er dette tallet tilfeldig.
Merk at klientens og serverens sekvensnummer ikke trenger å stemme overens. Så lenge begge parter anerkjenner hverandres unike sekvensnummer, vil forbindelsen være pålitelig.
Trinn 3: Klientsvar med et ACK-segment
Til slutt bekrefter klienten serverens sekvensnummer.
Det siste segmentet er et ACK-segment fra klienten.
Som du kan, vil klienten bekrefte serverens sekvensnummer ved å svare med serverens sekvensnummer (1111111111) pluss en (1), som er 1111111112.
Klienten og serveren vil ikke lenger sende et sekvensnummer siden starten av sekvensen allerede er bekreftet. Begge parter vil imidlertid forvente bekreftelsessegmenter som fortsetter sekvensnumre pluss én (1) og antall byte gjennom interaksjonen. I dette tilfellet forventer klienten at neste serversvar skal ha en ACK på 0000000002 (hvis det ikke er vedlagte data).
Deretter er treveis håndtrykket etablert!
Forstå hvordan nettverkstilkoblinger fungerer
Nå som du har lært hvordan et treveis håndtrykk fungerer, vil du også ha lettere for å forstå hvordan TCP fungerer etter håndtrykket. Klienten og serveren vil begynne å sende data når håndtrykket er etablert. Denne gangen vil hele segmentformatet bli brukt, pluss de valgfrie dataene eller nyttelasten.
Data er vanligvis segmentert/kuttet i mindre biter for enklere overføringer. Hvert datasegment har sitt eget segmenthode som inneholder et sekvensnummer og bekreftelsesnummer. Grunnen til et sekvensnummer er å vite sekvensen til segmentene når de til slutt vil settes sammen igjen. Bekreftelsesnumrene er der for å bekrefte med avsenderen at deres segment er mottatt og at det samsvarer med sekvensen av innkommende segmenter.
Å telle et sekvensnummer og verifisere dem med en bekreftelse er hvordan TCP pålitelig kan transportere enorme biter av data uten manglende datapakker.
Og med det bør du ha en ganske god ide om hvordan TCP fungerer.