Tijdens de beginjaren van internet was Internet Protocol (IP) het enige protocol dat mensen gebruikten om verbinding te maken met internet. Het probleem met IP was dat je een bericht kon verzenden en niet zeker wist of de ontvanger het zou ontvangen of niet. Om deze reden is TCP/IP opgezet.

TCP/IP zorgt ervoor dat alle gegevens die u verzendt de ontvanger bereiken. Het doet dit door de client en server een beveiligde verbinding te bieden voordat gegevens worden verzonden. Deze beveiligde verbinding wordt tot stand gebracht via een proces dat bekend staat als een three-way handshake, ook wel bekend als een TCP/IP-handshake.

Wat is een drierichtingshanddruk?

Afbeelding tegoed: Fleshgrinder/Wikimedia

Een three-way handshake (TCP/IP-handshake) is de eerste drie interacties tussen een client en een server die proberen een TCP-verbinding tot stand te brengen. Deze eerste interacties zijn essentieel voor het maken van een veilige verbinding. In deze fase zullen zowel de client als de server parameters overeenkomen die ze zullen gebruiken om inkomende en uitgaande datapakketten te controleren en verifiëren. Deze parameters hebben de vorm van TCP-segmenten.

instagram viewer

Wat is een TCP-segment?

In een TCP/IP-verbinding moeten alle gegevens die worden verzonden, worden geknipt en gestructureerd op zogenaamde TCP-segmenten. Deze segmenten bevatten informatie zoals IP-adressen, poorten, vlagbits, volgnummers, bevestigingsnummers en de optionele gegevens of payload.

De eerste drie interacties (handshake in drie richtingen) bevatten alleen TCP-segmentheaders zonder payload of gekoppelde gegevens. Hier is een voorbeeld van een TCP-segment

Afbeelding tegoed: Ere/Wikimedia

Merk op dat de bovenstaande afbeelding alleen voor TCP is. Een volledig TCP/IP-segment vereist beide IP-adressen van de zender en ontvanger bovenop het bovenstaande TCP-segment.

Telkens wanneer u een pakket naar een persoon verzendt, moet de bezorgdienst een informatieformulier invullen en dit vervolgens bij het pakket voegen voordat het wordt verzonden. Evenzo vereist TCP dat de afzender een segmentkop (informatieformulier) aan de gegevens (pakket) bevestigt voordat het het segment (pakket) naar de ontvanger begint te verzenden.

Telkens wanneer een client met een server communiceert, moeten beide partijen hun interacties formatteren in de vorm van een TCP-segment. Een TCP-segment bestaat uit een TCP-segmentkop die is gekoppeld aan de gegevens die u probeert te verzenden. De afzender zal de informatie moeten invullen die de segmentkop nodig heeft.

Voor een handdruk in drie richtingen moet de afzender het volgende invullen:

  • Bronpoort: Identificeert de poort van de afzender
  • Haven van bestemming: Identificeert de poort van de ontvanger
  • Volgnummer: Geeft de segmentvolgorde aan
  • Erkenningsnummer: Geeft aan dat een segment is bevestigd door er een toe te voegen aan het gegeven volgnummer

Naast het invullen van de segmentkopvelden, moet de afzender ook een vlagbit selecteren. Er zijn in totaal zes vlagbits, maar voor een three-way handshake heb je alleen de volgende twee nodig:

  1. SYN: Geeft een volgnummer. Dit volgnummer wordt gebruikt om de volgorde van alle inkomende segmenten voor de rest van de interactie te tellen.
  2. AK: Geeft aan dat de ontvanger van het SYN-nummer het verbindingsverzoek accepteert door één (1) toe te voegen aan het gegeven SYN-nummer.

Nu u weet wat een TCP-segment is, gaan we eens kijken hoe het wordt gebruikt in een three-way handshake.

Hoe een handdruk in drie richtingen werkt

Een three-way handshake wordt tot stand gebracht wanneer zowel de klant als de host informatie hebben uitgewisseld en elkaars volgnummers hebben bevestigd. Zoals de naam al aangeeft, wordt een three-way handshake in drie stappen gedaan.

Ten eerste verzendt de client een puur SYN-segment om aan te geven dat hij een verbinding wil. Ten tweede reageert de server met een SYN-ACK-segment, wat betekent dat hij het verzoek heeft bevestigd en zijn eigen SYN-nummer verzendt dat de client moet bevestigen. Ten derde stuurt de client een ACK-segment naar de server om te melden dat het SYN-nummer van de server is bevestigd en zal worden gebruikt voor verdere verbinding.

Een handdruk in drie richtingen ziet er ongeveer zo uit:

Activategoed: Fleshgrinder/Wikimedia

Laten we het opsplitsen en naar de segmenten kijken, zodat u precies weet wat er gebeurt als client en server volgnummers uitwisselen en bevestigen.

Stap 1: Client verzendt een SYN-segment

Activategoed: Fleshgrinder/Wikimedia

De client verzendt een aanvraagverbinding door een SYN-segment naar de server te sturen. De client gebruikt het IP-adres van de client om de server te lokaliseren en het TCP-segment te verzenden.

Laten we, om de complexiteit van het segment te verminderen, enkele segmentvelden negeren en ons concentreren op de eerste vereisten voor een drieweg-handshakeverbinding. Dit omvat bronpoort, bestemmingspoort, volgnummer, bevestigingsnummer en welk type vlagbit wordt gebruikt.

En daarmee zou een SYN/verzoek-segment er als volgt uit moeten zien:

Afbeelding gemaakt door schrijver 

De clientpoort is een willekeurig getal tussen 49152 en 65536. Dit poortbereik is het overeengekomen bereik dat openbare apparaten dynamisch kunnen gebruiken om verbinding te maken met internet. Poortbereiken van 1024 tot 49151 zijn privé. Ze moeten door een entiteit worden geregistreerd om een ​​poort binnen het gespecificeerde bereik te gebruiken. Poortnummers onder 1024 zijn poorten die zijn gereserveerd voor verschillende functies en internetprotocollen zoals FTP (poort 20), SMTP (poort 25), DNS (poort 53) en HTTP (poort 80).

In het echte leven is een volgnummer een willekeurig getal. Voor het voorbeeld hebben we 0000000000 gebruikt om het visualiseren te vergemakkelijken.

Noteer het volgnummer terwijl we de stappen doorlopen. Momenteel is het 000000000. Er is momenteel geen bevestigingsnummer omdat er niets te bevestigen is.

Stap 2: Server antwoordt met een SYN-ACK-segment

Activategoed: Fleshgrinder/Wikimedia

Zodra de server een SYN-segment ontvangt, zal deze reageren door een ACK-segment te verzenden met het bevestigingsnummer. Het bevestigingsnummer is het volgnummer van de klant plus één (1).

Afbeelding gemaakt door de schrijver

Kijk naar de bronpoort. Het laat zien dat het segment afkomstig is van poort 20, wat aangeeft dat het als antwoord van de server kwam.

Kijk nu naar het bevestigingsnummer. Het is 0000000001, het volgnummer van de klant (000000000000) plus één (1). Zo wordt een segment gevolgd. Stel dat de client een ACK-segmentantwoord heeft ontvangen waarbij het bevestigingsnummer 0000000002 is. Dit zou de klant erop wijzen dat segment 0000000001 ontbrak en dat de klant zal moeten wachten tot het arriveert zodat u geen pakketverlies ervaart.

Zoals u kunt zien, zijn twee vlagbits geactiveerd: SYN en ACK.

Naast het bevestigen van het volgnummer van de client, stuurt de server ook zijn eigen volgnummer voor de client om het volgnummer van de server plus één (1) te bevestigen. In ons voorbeeld hebben we 1111111111 gebruikt als het volgnummer van de server. Nogmaals, in de echte wereld is dit aantal willekeurig.

Houd er rekening mee dat de volgnummers van de client en de server niet hoeven overeen te komen. Zolang beide partijen elkaars unieke volgnummer erkennen, is de verbinding betrouwbaar.

Stap 3: Klant antwoordt met een ACK-segment

Activategoed: Fleshgrinder/Wikimedia

Ten slotte bevestigt de client het volgnummer van de server.

Afbeelding gemaakt door schrijver

Het laatste segment is een ACK-segment van de klant.

Zoals u kunt, zal de client het volgnummer van de server bevestigen door te antwoorden met het volgnummer van de server (1111111111) plus één (1), namelijk 1111111112.

De client en de server sturen geen volgnummer meer omdat de start van de volgorde al is bevestigd. Beide partijen verwachten echter dat bevestigingssegmenten doorlopend volgnummers plus één (1) en het aantal bytes tijdens de interactie. In dit geval verwacht de client dat de volgende serverreactie een ACK van 0000000002 heeft (als er geen bijgevoegde gegevens zijn).

Waarna de three-way handshake tot stand komt!

Begrijpen hoe netwerkverbindingen werken

Nu je hebt geleerd hoe een three-way handshake werkt, zul je ook gemakkelijker begrijpen hoe TCP werkt na de handshake. De client en server beginnen met het verzenden van gegevens wanneer de handdruk tot stand is gebracht. Deze keer wordt het volledige segmentformaat gebruikt, plus de optionele data of payload.

Gegevens worden meestal gesegmenteerd / in kleinere stukjes gesneden voor eenvoudigere overdracht. Elk datasegment heeft zijn eigen segmentkop met een volgnummer en bevestigingsnummer. De reden voor een volgnummer is om de volgorde van de segmenten te kennen wanneer ze uiteindelijk weer in elkaar worden gezet. De bevestigingsnummers zijn er om bij de afzender te verifiëren dat hun segment is ontvangen en dat het overeenkomt met de volgorde van binnenkomende segmenten.

Door een volgnummer te tellen en ze te verifiëren met een bevestiging, kan TCP op betrouwbare wijze enorme hoeveelheden gegevens transporteren zonder dat er gegevenspakketten ontbreken.

En daarmee zou je een redelijk goed idee moeten hebben van hoe TCP werkt.