Trafikexempel, en grundlig genomgång

I det här avsnittet går vi igenom ett komplett exempel på alla steg som ingår när en dator vill kommunicera över ett nätverk. Dom flesta blir otroligt förvånade första gången dom ser hur många steg som faktiskt måste gås igenom för att en dator ska kunna skicka iväg trafik på ett nätverk. Om du har läst igenom andra avsnitt så har du nog redan lite koll på att det kommer bli ganska många steg även om jag fortfarande tror att vi kan överraska dig ytterligare en aning!

I exemplen nedan kommer vi visa på ett litet hemmanätverk där en dator precis har startat upp. Datorn har en manuellt konfigurerad IP-adress och har inte pratat än på nätverket.

En användare sätter sig vid datorn och öppnar webbläsaren och försöker surfa ut på internet till www.dn.se

Först tittar vi på helheten. Här följer en bild på den nätverksmiljö som kommer att ingå i alla steg. I många av stegen kommer vi zooma in på en del av nätverket för att slippa rita upp hela nätverket varje gång.

Översikt över trafikexempel HTTP från dator mot webbserver

Sen kör vi igång steg-för-steg genomgången av ett trafikexempel!

Steg 1: Dator vill skicka trafik

En dator inkopplad på ett hemmanätverk har precis startat upp. Datorn har en manuellt konfigurerad IP-adress, subnätmask, DNS-server och default gateway. Både DNS-server och Default Gateway pekar på hemmarouterns IP-adress.

Användaren som sitter vid datorn öppnar sin webbläsare och surfar till “www.dn.se”.

Det första som händer är nu att webbläsaren ger i uppdrag till operativsystemet på datorn att starta upp en kommunikation mellan datorn och www.dn.se.

Webbläsare begär att operativsystem ska sätta upp HTTP TCP session mot webbserver

Steg 2: DNS

Det här steget är indelat i väldigt många delar enligt nedan.

Steg 2a: DNS-cache

Datorn kontrollerar nu om den vet vad www.dn.se har för IP-adress genom att kolla i sin DNS-cache där den lagrar tidigare DNS-uppslag som den har gjort. Eftersom datorn nyss har startat upp och den inte har surfat till www.dn.se sedan starten så har den en helt tom DNS-cache.

Dator kontrollerar sin DNS cache för att se om den känner till DNS-namnet redan

Datorn måste nu fråga sin DNS-server vad www.dn.se har för IP-adress

Steg 2b: Konstruera DNS-fråga

Datorn sätter ihop en DNS-fråga som den kan skicka iväg till den DNS-server 192.168.1.1 som den har konfigurerad. Destinations IP-adressen för DNS-frågan är alltså 192.168.1.1 och source IP-adressen är datorns egen IP-adress 192.168.1.5

DNS använder UDP som så kallat transportprotokoll. Destinationsporten för DNS-frågor är enligt standarden 53/UDP. När meddelandet kommer fram till DNS-servern så kommer DNS-servern kunna titta på destinationsporten. Den ser då att meddelandet ska till port 53/UDP vilket den då vet är ett meddelande som ska till DNS-serverprogrammet.

Datorn måste också slumpa fram en source port som skrivs in i meddelandet.

Dator konstruerar en DNS fråga och slumpar fram source UDP port och anger destination port 53/UDP

Men när datorn sätter ihop sin DNS fråga så märker den att den måste kontrollera vilken Destination MAC-adress som den ska skicka frågan till. Den sätter därför paketet i en kö i minnet så att den kommer ihåg att paketet ska skickas iväg, och under tiden så försöker datorn ta reda på MAC-adressen.

Steg 2c: Kolla ARP tabellen efter routerns MAC-adress

Datorn tittar nu i sin ARP tabell för att se om den vet vilken MAC-adress som IP-adressen 192.168.1.1 har. Datorn har dock en helt tom ARP-tabell eftersom den nyss har startat upp, så den har inte hunnit lära sig några ARP-uppslag än.

Det innebär att datorn nu kommer behöva konstruera en ARP-fråga.

Dator undersöker ARP-tabell för att se om den känner till MAC-adressen för routerns IP-adress

Steg 2d: ARP fråga till nätverket

Datorn konstruerar nu en ARP-fråga till resten av nätverket. Frågan skickas till MAC-adress FF:FF:FF:FF:FF:FF som är broadcast adressen. Det betyder att alla andra datorer och enheter på LAN:et måste ta emot frågan och läsa meddelandet.

Datorn konstruerar och skickar ut en ARP fråga om default gateways IP-adress

Routern tar emot paketet och läser meddelandet eftersom paketet är skickat till MAC-adress FF:FF:FF:FF:FF:FF. Routern ser i meddelandet att datorn frågar efter vem som har IP-adress 192.168.1.1. Eftersom routern har 192.168.1.1 så sätter routern ihop ett ARP svar och skickar tillbaka det.

Steg 2e: ARP svar från routern

När ARP svaret kommer tillbaka från routern så skriver datorn in svaret i sin ARP-tabell så att den kommer ihåg under ett par minuter åtminstone vilken MAC-adress som 192.168.1.1 har.

Sen har datorn också all information som den behöver för att kunna skicka iväg DNS-meddelandet.

Default Gateway (Routern) skickar ett ARP svar med sin MAC-adress till datorn

Steg 2f: Skicka iväg DNS-fråga

Nu ska DNS frågan skickas iväg från datorn till DNS-servern, vilket är routern 192.168.1.1. Routern tar emot frågan, ser att det är en DNS-fråga som är riktad till routerns egen IP-adress och MAC-adress och förstår därför att den ska skicka tillbaka ett svar.

Dator skickar iväg en DNS fråga till Default Gateway routern till port 53/UDP

Steg 2g: Routern kollar sin DNS-cache

Routern är en DNS-server men är beroende av att andra DNS-servrar ute på internet som är ansvariga för olika DNS-namn ger routern all information som den behöver.

Routern har också en DNS-cache, precis som datorn har. Om en dator frågar efter ett DNS-namn och routern svarar så kommer routern sen att komma ihåg det DNS-namnet en tid framöver. Så om någon dator skulle fråga igen så har routern svaret redo i sin DNS-cache.

Router kontrollerar DNS-cache efter DNS-namnet

Men i det här fallet är det första gången på länge som routern har fått en fråga om www.dn.se så därför måste routern fråga sin DNS-server ute på internet vad www.dn.se har för IP-adress.

Steg 2h: Routern förbereder och skickar DNS-frågan vidare

Nu tar routern fram en DNS-fråga som den kommer skicka till sin DNS-server. Den DNS-servern har routern lärt sig via DHCP från internetleverantören. Även routern måste slumpa fram en source UDP port till meddelandet.

Hemmaroutern tar fram och skickar ut DNS-fråga till DNS-servern

Hemmaroutern tar fram paketet och tittar i sin routingtabell vart paketet ska skickas. Den ser att på insidan (LAN) finns 192.168.1.0, och på utsidan (WAN) finns alla andra IP-nät via internetleverantörens router 115.20.97.113.

I det här skedet är det möjligt att även hemmaroutern måste göra ett ARP-uppslag för att få reda på vad 115.20.97.113 har för MAC-adress.

Steg 2i: DNS frågan routas över internet

Här har vi förenklat några steg.

Varje router på internet som tar emot DNS-frågan kommer att göra följande:

  • Tar emot paketet
  • Tittar på destination IP-adressen vart paketet ska
  • Tittar i sin routingtabell vilken väg som är bäst för paketet
  • Tar bort dom gamla MAC-adresserna och lägger på nya MAC-adresser
  • Skickar vidare paketet via den vägen till nästa router i kedjan

DNS-frågan routas över internet mot DNS-servern

Steg 2j: DNS-servern svarar

Till sist kommer paketet fram till DNS-servern som tar fram ett svar. Servern har precis som en PC en default gateway, en IP-adress, en subnätmask och så vidare. Även flera av dessa steg förkortar vi bort eftersom det går likadant till som när datorn kommunicerar

DNS-svar skickas tillbaka från DNS-server till hemmarouter

Steg 2k: Hemmaroutern kan skicka DNS-svar till datorn

Nu kan hemmaroutern äntligen skicka ett DNS-svar tillbaka till datorn så att datorn får reda på vilken IP-adress som www.dn.se har. Det här betyder att datorn nu har all information den behöver från DNS för att gå vidare!

Hemmaroutern skickar DNS-svar till datorn

Steg 3: Datorn startar en session mot www.dn.se

I det här steget så händer väldigt många saker samtidigt.

Huvuddelen är att datorn inleder något som kallas för en TCP 3-way Handshake, en “trevägs handskakning”. När TCP används så ser alltid TCP till att allting ska fungera så bra som möjligt. En sak som TCP tar hand om är att påbörja kommunikationen med en handskakning. Det gör TCP för att berätta att datorn vill kommunicera med den på andra sidan, vilka TCP portar som kommer användas och lite andra inställningar.

TCP använder tre meddelanden i handskakningen.

  • Det första kallas “SYN” vilket står för Synchronize eller synkronisera, ungefär “jag vill synkronisera med dig”.
  • Nästa meddelande svarar servern tillbaka med och det kallas för “SYN-ACK”, Synchronize Acknowledgement. Acknowledgement betyder att man bekräftar något. Svaret betyder alltså att servern bekräftar att den tog emot meddelandet och att den också vill synkronisera en session
  • Till sist säger datorn “ACK” det vill säga att den också bekräftar att allt är okay för att börja prata med varandra.

Från och med nu så har datorn också rätt ARP uppslag för routerns IP-adress 192.168.1.1. Det betyder att den kan skicka alla paket via routerns MAC-adress utan att behöva gå igenom den extra processen med ARP-uppslag.

Men samtidigt som TCP 3-way Handshake pågår så är det här även första gången hittills under hela kommunikationen som trafik från datorn faktiskt går ut på internet. Hittills har datorn bara pratat med ett DNS uppslag mot routern, och routern i sin tur pratade ut mot internet.

Men en TCP 3-way handshake och resten av kommunikationen sätts upp direkt mellan datorn och webbservern, så datorns tafik måste ut på internet.

I samband med det måste routern även utföra NAT eller adressöversättning av trafiken.

Steg 3a: Datorn sätter ihop och skickar iväg TCP SYN meddelande

Datorn ska nu initiera en session mot webbservern med hjälp av TCP 3-way handshake. För att kunna göra det så slumpar datorn fram en TCP source port som den ska använda i kommunikationen. Sen sätter den ihop TCP SYN meddelandet och skickar ut det till webbservern.

När TCP SYN meddelandet passerar genom routern så utför routern adressöversättning på meddelandet och sparar ned information om adressöversättningen i sin NAT tabell så att den kan hålla koll på svaren som kommer tillbaka och översätta tillbaka dom på rätt sätt.

Datorn tar fram och skickar ut TCP SYN till webbserver

TCP SYN från datorn till webbservern

  • “Jag vill synkronisera en session med dig”

Steg 3b: Webbservern svarar med TCP SYN-ACK

TCP SYN-ACK tillbaka från webbservern till datorn

  • “Okay jag är med på att sätta upp en session och bekräftar att jag fick ditt meddelande”

Webbservern svarar med TCP SYN-ACK till datorn

Steg 3c: Datorn svarar med TCP ACK

TCP ACK, från datorn till webbservern

  • “Då bekräftar jag att från och med nu har vi en session!”

Datorn skickar TCP ACK till Webbservern

Så länge som datorn och servern fortsätter kommunicera med varandra så behåller dom samma session, och därmed också samma TCP portar. Sessionen kan exempelvis vara så länge som det tar att ladda hem hela hemsidan, eller mycket längre än så.

Steg 4: Webbläsaren börjar prata med webbservern

Först och främst så måste operativsystemet berätta för webbläsaren att den kan börja skicka data nu. Men sen är det äntligen dags för webbläsaren att få börja prata med webbservern för att kunna ladda ner hemsidan!

Datorns webbläsare utnyttjar TCP sessionen till att prata HTTP med webbservern

Och därmed har vi tagit oss igenom en hel kommunikation mellan en dator och en webbserver, inklusive alla dom steg som vanligtvis ingår. Från och med nu så fortsätter datorn och webbservern kommunicera med varandra till dess att dom känner sig klara, förmodligen när datorns webbläsare har laddat hem hela webbsidan och användaren surfar vidare till någon annan hemsida.

Föregående avsnitt:
Adressöversättning på riktigt

Nästa avsnitt:
Hastighet och storlek - bits och Bytes