TCP/IP är något som alla kommer i kontakt med dagligen. Ändå är det få som kan förklara hur det fungerar. Gör dig själv till expert med vår djupdykning i ämnet.
Hur kan flera uppkopplade enheter dela på en publik IP-adress? Varför består IP-adresser av nummer upp till 255? Vad är egentligen en ”subnetmask”?
De flesta med tekniskt intresse har någorlunda god uppfattning av hur datorns hårdvara samspelar och flyttar data mellan sekundärminne, primärminne och processorns register. Men beskriva hur data flyttas över nätverk är det långt färre som kan.
Kanske har du stött på begrepp som netmask eller subnetmask när du konfigurerat en router. Kanske minns du LAN-partyn från 90-talet då SPX/IPX var det som gällde. I denna artikel ska vi titta närmare på TCP/IP, som hanterar majoriteten av världens nätverkskommunikation.
Flera protokoll
När du ska skicka ett fysiskt paket behöver du gå igenom ett viss procedur. Du behöver till att börja med förse det med en mottagaradress och en avsändaradress. Kanske behöver du också ange dess vikt och innehåll. Du behöver alltså följa ett visst protokoll för att ditt paket ska kunna transporteras till mottagaren.
Detta protokoll utgörs egentligen av flera mindre protokoll. Adressen behöver följa ett visst format, vikten anges på ett visst sätt och paketets fysiska form ska vara inom vissa mått.
Exakt hur protokollet ser ut skiljer sig något åt beroende på vilket fraktföretag du använder, men alla följer ungefär samma standard.
”Trafikpunkterna längs vägen måste veta hur de ska hantera paketet och mottagaren måste förstå hur det ska processas.”
Protokoll är även grunden i all nätverkskommunikation. Precis som fysiska paket inte kan transporteras utan en överenskommelse om hur det ska ske, kan inte heller digitala paket skickas över nätverk utan något slags protokoll. Trafikpunkterna längs vägen måste veta hur de ska hantera paketet och mottagaren måste förstå hur det ska processas.
Alla protokoll för nätverkskommunikation baseras på en modell vid namn Open System Interconnection (OSI). Denna modell är i princip bara ett koncept som definierar sju olika lager för att hantera inkommande och utgående nätverkstrafik hos sändare respektive mottagare.
Överst finns applikationsnivån med API:er mot nätverket. De flesta utvecklare behöver aldrig lämna detta lager utan kan bekvämt använda de API:er som finns tillgängliga i programmeringsspråk, ramverk eller operativsystem.
Presentationslagret hanterar formatering av data. Hit hör komprimering, kryptering och hantering av filformat. Sedan finns sessionslagret, som hanterar just sessioner och andra förbindelser. Bryts en förbindelse är det sessionslagret som återstartar den.
Sessionslagret använder sig av funktionerna på nästa nivå, transportlagret. I detta lager hanteras själva paketen, exempelvis med felkontroll. Detta lager tar emot uppdrag från sessionslagret och skickar själv uppdrag vidare till nätverkslagret.
Nätverkslagret adresserar meddelanden och översätter adresser. Slutligen passerar dina data genom två lager som konverterar meddelandet till en digital signal som skickas ut från nätverksenheten.
När data ska skickas ut på nätverket passerar de genom dessa lager i tidigare nämnda ordning. Varje lager hanterar dina data på något sätt och lägger till metadata i form av headers.
På mottagarsidan passerar allt genom de olika lagren igen, men i omvänd ordning. Då plockar istället varje lager bort headers innan allt slutligen når applikationsnivån.
Modellen bygger på att varje lager rent konceptuellt pratar med det motsvarande lagret på andra sidan. Detta utan att behöva bry sig om vad de andra lagren ovanför eller under i kedjan gör.
Från Arpanet till TCP/IP
Denna modell (OSI) är princip en efterhandskonstruktion av ISO. De försökte bringa något slags ordning i den snabbt och okontrollerat växande nätverksbranschen under tidigt 80-tal. Men redan ett decennium tidigare hade den amerikans-ka myndigheten DARPA lanserat en efterföljare till Arpanet, som sedermera fick namnet TCP/IP. Numera, 40 år senare, är det version 4 av TCP/IP som används.
Som namnet antyder är TCP/IP två separata protokoll. Transport Control Protocol (TCP) hanterar själva logistiken och transporten av data, medan Internet Protocol (IP) sköter adresseringen i form av IP-adresser. Då respektive protokoll är i princip oanvändbart utan det andra läggs benämningarna samman.
Något som kan förvilla är att TCP/IP inte bygger helt på OSI-modellen, utan på DARPA-modellen, som består av fyra lager istället för sju.
Lagren i DARPA-modellen motsvarar dock ett eller flera lager i OSI-modellen, vilket gör att TCP/IP är kompatibelt med OSI. Lagren i DARPA-modellen är:
- Applikation – motsvarar Applikation, Presentation och Session i OSI-modellen.
- Transport.
- Internet – motsvarar Nätverk i OSI-modellen.
- Nätverk – motsvarar Datalänk och Fysisk hårdvara i OSI-modellen.
TCP/IP är i sig en stack, eller protokollsvit, bestående av dussintals andra protokoll som kan kategoriseras i något av dessa lager.
I applikationslagret hittar du bland annat FTP, HTTP, SSH, Telnet och SMTP. Transportlagret har de välkända protokollen TCP och UDP, men också mindre kända alternativ som DCCP och SCTP. Internetlagret består av just IP-protokollet (både IPv4 och IPv6), men även av säkerhetsprotokollet IPsec och en rad andra. Slutligen utgörs nätverkslagret av tekniker för att faktiskt skicka data som signaler över nätverket, vilket inbegriper standarder som DSL, ISDN, PPP och Ethernet.
De mest intressanta lagren i denna stack är Transport och Internet, där TCP och IP håller till.
Med eller utan garanti
En minimal implementation av TCP/IP kräver protokollen IP, ARP, ICMP, TCP, UDP och IGMP. För IPv6 tillkommer ytterligare ett par protokoll.
När TCP används kan data överföras i en robust dataström med leveransgaranti. I praktiken innebär det att sändare och mottagare säkerställer att samtliga paket har nått mottagaren, genom att den senare bekräftar varje mottaget paket. Når ett paket av någon anledning inte fram skickas detta på nytt av sändaren. Det här ger en extra trafikmängd, men i gengäld kommer alla paket garanterat fram.
UDP prioriterar istället hastighet framför leveransgaranti. Paket skickas iväg en gång och ingen som helst kontroll sker för att säkerställa leveransen. Snabb dataöverföring men utan leveranskontroll, alltså motsatsen till TCP.
Både TCP och UDP har sina respektive användningsområden. Filöverföring, webben och e-post skulle fungera dåligt om inte alla paket verkligen kom fram. Med UDP skulle förekomsten av korrupta filer, trasiga webbsidor och oläslig e-post öka markant.
På samma sätt skulle multiplayer-spel samt strömmade direktsändningar av ljud och video kräva betydligt bättre uppkopplingar med TCP. Där lämpar sig istället UDP bättre med sin lätta och snabba dataöverföring.
Rent praktiskt kombineras ofta TCP och UDP för att kunna använda båda protokollens fördelar. Ett spel kan hämta listor med tillgängliga spel-servrar över TCP, medan UDP används för själva spelomgången. Ett annat exempel är Facebooks mobilapp, som skickar iväg ett UDP-paket till servern direkt när den startar. Når UDP-paketet fram notifierar det servern om att denna klient snart kommer att upprätta en TCP-anslutning för att motta de senaste flödesuppdateringarna. På så sätt får servern lite extra tid att förbereda ett svar, som då kanske till och med är färdigt när TCP-anslutningen upprättas.
Adressering med oktala nummer
TCP sköter alltså själva logistiken kring datatransporten. Fast utan några adresser kan inte TCP skicka data utanför ditt nätverkskort. Här kommer IP in i bilden, det protokoll som sköter adresstilldelningen på ett nätverk.
TCP har stått sig bra sedan det såg dagens ljus, men IP har i sin 70-talsform fått utstå kritik. Främst för att antalet tillgängliga adresser i IPv4 helt enkelt har tagit slut.
På 70-talet kunde ingen föreställa sig dagens tekniksamhälle med miljarder uppkopplade enheter. Därför utformades IPv4med ett omfång på nästan 4,3 miljarder unika adresser.
En adress i IPv4 är nämligen baserad på 32 bit, eller med andra ord fyra byte. Dessa adresser skrivs med punktnotation där varje byte, i form av en oktal, separeras med punkter, som 192.168.0.1. Punkterna är alltså en rent estetisk dekoration för att göra adresserna mer läsvänliga för män-niskor.
Från början delades IP-adresser in i två delar, där den första oktalen angav ett specifikt nätverk, medan de resterande tre representerade den specifika värden. Detta gav alltså utrymme för 256 nätverk, vilket nästan omedelbart blev ohållbart. Därför övergick de till att använda den första oktalen för att dela in adresser i fem olika klasser, från A till E, med olika kapacitet för mängden adresser.
”Totalt är över en halv miljard IPv4-adresser reserverade och får alltså inte användas som publika IP-adresser.”
Bland dessa adresser finns det ett antal reserverade privata adressblock. Det kanske mest kända är 127.0.0.1, som tillhör ett reserverat block vid namn Loopback. Totalt är över en halv miljard IPv4-adresser reserverade och får alltså inte användas som publika IP-adresser.
Nätverk i ett nätverk
Trafiken i ett nätverk kan delas in i ett eller flera sub-nätverk, kallade subnet. Du har säkert stött på begreppet när du konfigurerat en router eller din dators nätverksinställningar.
Den ursprungliga tanken med subnet var att effektivisera nätverkstrafiken genom att indikera vilka noder som befinner sig på samma nätverksnivå och därmed kan prata direkt med varandra.
Numera, i takt med att nätverkshårdvaran blivit allt kraftfullare, är trafikstopp på interna nätverk allt mindre ett problem. Därför används subnet istället för att organisera nätverk efter administrativa och säkerhetsmässiga behov.
Denna indelning sker med en så kallad subnetmask, som vanligen är 255.255.255.0. De tre första oktalerna indikerar vilket subnet en IP-adress befinner sig på, medan den sista anger den unika noden. Ett annat exempel är 255.255.0.0. Där utgör alltså de två första oktalerna subnet och de två resterande är nodens adress.
På interna nätverk uppstår sällan någon brist på IP-adresser, men på det publika internet är antalet IPv4-adresser slut sedan många år tillbaka. För att komma runt detta har man länge låtit många klienter samsas om ett och samma publika IP-nummer. I de flesta hem finns ofta ett flertal datorer, datorplattor, mobiltelefoner och kanske smartklockor samt IoT-prylar. Och de använder alla internetuppkopplingens publika IP-adress. Hur går detta till?
NAT agerar mellanhand
Lösningen heter Network Address Translation (NAT) och finns inbyggd i alla moderna routrar och brandväggar. NAT fungerar som ett slags mellanhand som dirigerar trafik mellan det interna nätverket och internet. När en klient vill nå en adress på internet skickar den detta anrop till routern och ger NAT en slumpmässig port att returnera svaret till. NAT kommer ihåg detta och låter routern skicka begäran.
När svaret kommer till den önskade porten kan NAT slå upp vilken klient på det interna nätverket som väntar efter sin begäran. På så sätt slussas trafiken. Två eller fler klienter kan alltså anropa samma publika IP-adress och ändå få rätt svar. Detta genom att NAT håller koll på att svar returneras till rätt klient och port.
På detta sätt är också NAT ett slags brandvägg, även om den aldrig var tänkt att fungera som en sådan. För inget anrop kan komma förbi en router med NAT aktiverat. Begäran måste nämligen ha initierats av en klient, alternativt behöver portar ha konfigurerats för vidarebefordran. Denna säkerhetsaspekt innebär förmodligen att vi fortsätter använda NAT med IPv6.
TCP/IP dominerar
Numera ses TCP/IP-stacken som det enda alternativet, men så har inte alltid varit fallet. Du kan hitta protokoll för nätverkskommunikation som Appletalk, NetBIOS, UUCP och Kermit i riktigt gamla system.
Ett annat gammalt protokoll är SPX/IPX. Protokollet erbjöd hög prestanda och enkel konfigurering. Men det överlevde aldrig övergången till internetsamhället och större nätverk. Framför allt beroende på att adresserna inte hade någon inbyggd hierarki likt IP. Större nätverk blev ohanterliga, även lite större hemnätverk.
TCP/IP är alltså det du kommer att få leva med inom överskådlig framtid. Fast som historien har visat kan teknikframsteg och nya samhällstrender snabbt försätta något åt sidan. Kanske blir TCP/IP till slut en historisk relikt.
Fakta
Gott om adresser med IPv6
Antalet IPv4-adresser tog slut under 2011, men sedan ett decennium tillbaka har IPv6 rullats ut mer och mer. Den nya versionen har 128-bitsadresser, vilket är en astronomisk ökning från den 32-bitsbaserade IPv4. En annan skillnad är att IPv6-adresser skrivs med 32 hexadecimala tecken, grupperade i fyra delar med kolon som separator. Därför blir adressrymden hela 340 sextiljoner, eller 57 miljarder adresser per gram av jordens massa. Fast det är inte bara antalet adresser som är nytt i IPv6, tekniker som NAT och DHCP är inte lika relevanta. I slutet av förra året användes IPv6 i uppskattningsvis ett par procent av Sveriges infrastruktur.
Vad hände med IPv5?
Från IPv4 till IPv6, vad hände egentligen med version 5? Faktum är att en version med namnet IPv5 har existerat, men den fungerade bara som ett experiment. De lyckade delarna av versionen implementerades istället i IPv6.
3 kommentarer
Ni skriver ”Transport Communication Protocol (TCP) ”, men nog står C:et för ”Control”?
mhh (Med Hatten Höjd)
GoFo
Tack för påpekandet! Transport Control Protocol ska det naturligtvis vara, nu korrigerat.
Ännu ett påpekande på TCP, T:et står för ”Transmission” om jag inte är ute och cyklar. Även om det är i transportlagret. Många förkortningar att hålla koll på, haha. I övrigt mycket nyttig och bra text! 🙂