A revised version of this text was published in the magazine Nollett and it was the foundation for two educational animated movies – “The IP Zone” made by ad agency Houdini and “Hej IP-nummer!” made by ad agency Abel & Baker.
[Så här skrev en person en vacker dag på en mailinglista där jag är medlem:]
> Var hittar jag en bra, gärna svensk beskrivning av IP-nummer (typ IP för
> dummies) För det är inte alltid lätt att förklara för en som inte har någon
> kunskap alls, ofta har de svårt att greppa “de fria serierna” 192.168… etc
>
> Kanske någon här rent av som kan komma med en bra förklaring. Där de olika
> klasserna förklaras.. etc
>
> The Pal hade ju en utmärkt beskrvning av en hub/switch, kanske ytterligare
> en bra beskrivning i bakfickan ?
[Så här svarade jag (The Pal), efter en lång sömnlös natt:]
Sent ska syndaren vakna. Hittade det här i mina postpones.
“Beskriv IP-nummer!” Jo tack. Beskriv livet? Beskriv Universum? Jag kunde ju
iofs kunna skriva “IP-nummer är lite pryttlar man har hittat på för att folk ska
kunna ställa dumma frågor till stackars överarbetade IT-konsulter på allsköns
skumma mailinglistor”, men det gör jag inte…
Nåväl… sömn är ju ändå överskattat, och jag kan ju inte missa chansen att
bräcka min egen hub/switch-förklaring.
Jag utgår från min egen far när jag skriver nedanstående, så bli inte förvånade
om ni känner det som om jag pratar med er som om ni vore femåringar.
En IP-adress består av två delar. Ungefär som gatuadress. Om jag ska berätta var
jag bor så säger jag inte bara “12″ utan “Mössebergsvägen 12″ trots att “12″
rent krasst också vore rätt svar. Anledningen är att det finns flera “12″, och
den jag pratar med skulle få svårt att hitta till rätt “12″ om jag inte
samtidigt sade “Mössebergsvägen”. Min adress består iofs även av stad, land och
en massa andra parametrar, men i IP-världen finns bara “gata” (som då också
består av siffror) och “nummer”.
En lång gata kan ju ha både tre och fyra siffror i gatunumret, men eftersom en
IP-adress till skillnad från en gatuadress alltid består av lika många tecken,
så är ju “nummer-delen” av adressen begränsad i storlek. Det har man löst genom
att helt enkelt flytta gränsen mellan “gatu-delen” och “nummer-delen” i
adressen, så att man tar lite siffror från “gatans” utrymme och ger till
“numret”. Från början gjordes detta genom att dela in IP-adresserna i olika
klasser efter hur många “nummer” det fick plats på “gatan”. Ju fler “nummer” man
får plats med, desto färre “gator” kan det ju finnas, eftersom det totala
utrymmet är konstant. IP-adresser är egentligen binära (liksom allt i datorernas
värld) men p g a vissa begränsningar i den mänskliga hjärnan så konverterar vi
vanligtvis adresserna till decimalt enligt en standard som kallas “dotted
decimal”. En IP-adress är 32 bitar lång, så man har delat in den i 4 lika stora
delar och satt punkter mellan delarna. Efter det har man räknat om varje del
till det decimala systemet. 32 delat i 4 ger 8 binära siffror per del. 8 binära
siffror kan bilda som mest 256 kombinationer. Därför kan en siffra i en
IP-adress skriven enligt dotted decimal aldrig vara högre än 255 (eftersom 0
också är en siffra kan den aldrig vara 256). Låt mig ge några exempel:
Den binära "riktiga adressen": 11000000010001111101110000001010
Och så sätter vi dit punkterna: 11000000.01000111.11011100.00001010
Och så räknar vi om varje del för sig till decimalt: 192.71.220.10
Då har vi en adress som iaf är liiite lättare att komma ihåg för en människa.
För att tillmötesgå olika behov i olika nätverk hittade man på klasser. Adresser
som börjar med en nolla är klass A, adresser som börjar på en etta och en nolla
är klass B och adresser som börjar två ettor och en nolla är klass C osv.
Alltså:
00XXXXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX: Klass A
10XXXXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX: Klass B
110XXXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX: Klass C
1110XXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX: Klass D
11110XXX.XXXXXXXX.XXXXXXXX.XXXXXXXX: Klass E
Som synes är det bara den första oktetten som avgör klasstillhörigheten. Räknar
vi om den första oktetten till decimalt får vi att IP-nummer som börjar med:
0-127 är klass A
128-191 är klass B
192-223 är klass C
224-239 är klass D
240-243 är klass E (Här är jag osäker på om det gäller 240 och uppåt, eller om
det finns en övre gräns på 243… Swmike eller nån kanske?)
Klass A-C är vanliga klasser. Klass D är reserverad för multicast och klass E
för experimentellt bruk.
Tjafset om gata och nummer då? Jo, från början så bestämdes att var gränsen
mellan “gatu-delen” och “nummer-delen” skulle vara bestäms av
klasstillhörigheten (ungefär som i dagens Jordbro
.
I adresser i klass A (de som börjar på 0-127) så sattes den vid den första
punkten. Alltså var den första siffran vilken “gata” adressen låg på. Räknar man
lite snabbt så ger det 128 möjliga “gator”. Resten av siffrorna efter den första
punkten fick bli “numret”. Det ger med lite snabb huvudräkning(!)
256*256*256=16777216 möjliga “nummer” per “gata”. Mao rätt få “gator”, men en
väldig massa “nummer” på varje “gata”. Översatt till IT alltså rätt få nätverk
men en väldig massa datorer i varje nätverk.
Alla företag har ju inte så stora nätverk, men alla företag har heller inte
IP-adresser i klass A. Då skulle dessutom inte nätverken räcka tlll eftersom det
finns något fler företag än 128 här i världen.
I adresser i klass B (128-191) sattes gränsen på den mittersta punkten. Det ger
(återigen med min snabba huvudräkning) 64*256 “gator” (inte 63*256, eftersom både
128 och 191 teoretiskt sett är möjliga) möjliga “gator” med 256*256=65536 möjliga
“nummer” per “gata”.
I klass C sattes den vid den sista punkten, vilket ger 32*256*256 möjliga nätverk
med 256 möjliga datorer i varje.
D är multicast. Multicast är sändningar som går till flera adresser som
inte nödvändigtvis ligger i samma nätverk.
E är för experimentellt bruk. Experimentellt bruk är experimentellt bruk.
Jag kommer inte att nämna klass D eller E i fortsättningen. Multicast läggar jag
ut på entreprenad till Anders@Kamera. Det experimentella får min namne Magnus ta
hand om. Varsågod och bräcka mig, Pojkar!
För att krångla till det hela så bestämde man att det lägsta “numret” på varje
“gata” fick representera själva “gatan”. Alltså kan inte en dator t ex ha
IP-numret 192.168.100.0, eftersom det står för hela nätverket
192.168.100.0-192.168.100.255. Dessutom bestämdes att alla nätverk ska ha en
“broadcast-adress”. Skickas nåt till denna adress så lyssnar alla datorer i hela
nätverket. Ungefär som när glassbilen kommer tutande på “gatan”.
Som
broadcast-adress valdes det högsta IP-numret i varje nätverk. För
192.168.100.0-nätet alltså 192.168.100.255. Då har vi minskat antalet möjliga
datorer på det nätverket från 256 till 254. (För att ytterligare krångla till
det hela finns det nätverk som kör med det högsta numret som nät-adress och det
lägsta numret som broadcast, men det är så sällsynt så det kan vi bortse ifrån.)
Så… hänger ni med? Nähä… nåväl, jag fortsätter iaf…
Men.. om vi har ett företag som har 10000 datorer i nätverket då? Ska vi slösa
bort en klass B med 65534 möjliga datorer på dem? Då kastar vi ju bort 55534
adresser till ingen nytta, och antalet adresser är ju faktiskt begränsat.
Samtidigt känns det ju jobbigt att administrera ihop 40 stycken klass C-nät. Det
måste väl gå att lösa?
Visst. Enkelt. Vi flyttar gränsen för “gatu-delen” och “nummer-delen” så den
ligger mitt emellan klass B och klass C. I princip så skrotar vi alltså
klassindelningen, eftersom det ju inte går att ha olika klasser för alla olika
storlekar på nätverk, och definitivt inte med samma kriterium (antalet ettor i
början) som förut. Vi inför nåt som heter subnetmask istället. Vad är då det?
Jo, det är ett binärt tal som är lika långt som IP-numret. Den talar om för oss
vad som är en del av “gatan” och vad som är en del av “numret”. Alltså en “mask”
som vi lägger över IP-adressen, som döljer “numret” när vi bara vill veta
“gatan” och som tvärtom när vi vill veta tvärtom. Alltså:
IP: 11000000010001111101110000001010
Och så lägger vi på en netmask, först samma netmask som standard enligt den
gamla klassindelningen:
Netmask: 11111111111111110000000000000000
Huh? Vaddå ettettettettnollnollnollnoll osv osv?? Vad betyder det här nurå? Jo,
ettorna talar om att alla siffror i IP-adressen vars plats i netmasken hålls av
en etta ingår i “gatu-delen”. De som motsvarar en nolla ingår i “nummer-delen”.
Ovanstående netmask betyder alltså att “gatan” heter 1100000001000111 och
datorn har i sin tur “nummer” 1011100000001010. Om vi sätter IP-numret och
netmasken under varandra syns det ännu bättre (slå på courier eller nån annan
fixed-width-font):
IP-nummer: 11000000.01000111.10111000.00001010
Netmask: 11111111.11111111.00000000.00000000
Nätverk/"gata": 11000000.01000111
Dator/"nummer": 10111000.00001010
Även netmasken skrivs om till dotted decimal, och i ovanstående exempel gör vi
det lätt för oss, eftersom gränsen går precis på en punkt. Decimalt:
IP-nummer: 192.71 .220.10
Netmask: 255.255.0 .0
Nätverk: 192.71
Dator: 220.10
Enkelt. Där det står 255 är det nätverks-delen och där det står 0 är det
dator-delen. Men om vi vill ha 10000 datorer i ett nätverk och snåla med
adresserna, så blir det inte lika enkelt:
För att få ihop minst 10000 unika kombinationer behöver vi 14 binära siffror
(dec 10000 = bin 10011100010000). Alltså måste vi flytta gränsen till 14 siffror
från slutet, vilket ger netmask 11111111111111111100000000000000. Skriver vi om
det decimalt blir det 255.255.192.0. Exempel:
IP-nummer bin: 11000000.01000111.10111000.00001010
Netmask bin: 11111111.11111111.11000000.00000000
IP-nummer dec: 192 .71 .220 .10
Netmask dec: 255 .255 .192 .0
Nätverk bin: 11000000.01000111.10
Dator bin: 111000.00001010
Nätverk dec: 192 .71 .Ehh?
Dator dec: Ehh? .10
Helt plötsligt stämmer det ju inte. Tredje siffran decimalt är ju varken 255
eller 0. Hur ska vi då kunna veta om vi ska räkna den till nätverket eller
datorn? Svaret är både och. Vi får ta och räkna lite till bara (en himla massa
räknande blir det). Eftersom vi har utöket antalet möjliga nätverk (med två
binära siffror) så blir det ju flera möjliga nätverk som börjar på 192.71, och
inte bara ett som i klass-samhället. dessa kommer (*räkna lite binärt*) att
vara:
192.71.0.0 – 192.71.63.255
Nät: 192.71.0.0, broadcast: 192.71.63,255 och datorerna allting mellan (och
inklusive) 192.71.0.1 och 192.71.63.254
192.71.64.0 – 192.71.127.255
Nät: 192.71.64.0, broadcast: 192.71.71,255 och datorerna mellan 192.71.64.1 och
192.71.71.254
192.71.128.0 – 192.71.191.255
Nät: 192.71.128.0, broadcast: 192.71.191,255 och datorerna mellan 192.71.128.1
och 192.71.191.254
192.71.192.0 – 192.71.255.255
Nät: 192.71.192.0, broadcast: 192.71.255,255 och datorerna mellan 192.71.192.1
och 192.71.255.254
Vi får alltså plats med 4 stycken företag med 16382 datorer på varje, och det
inom samma adressutrymme som vi bara hade fått plats med ett företag i om vi
hade följt den gamla klassindelningen.
Är det jobbigt? Bra. Då flyttar vi netmasken två steg till, så vi har 20 binära
siffror som nätverksdel och 12 som datordel:
IP-nummer bin: 11000000.01000111.10111000.00001010
Netmask bin: 11111111.11111111.11100000.00000000
IP-nummer dec: 192 .71 .220 .10
Netmask dec: 255 .255 .240 .0
Nätverk bin: 11000000.01000111.1011
Dator bin: 1000.00001010
Nätverk dec: 192 .71 .?
Dator dec: ? .10
Näten blir:
192.71.0.0 – 192.71.15.255
192.71.16.0 – 192.71.31.255
192.71.32.0 – 192.71.47.255
192.71.48.0 – 192.71.63.255
192.71.64.0 – 192.71.79.255
192.71.80.0 – 192.71.95.255
192.71.96.0 – 192.71.111.255
192.71.112.0 – 192.71.127.255
192.71.128.0 – 192.71.143.255
192.71.144.0 – 192.71.159.255
192.71.160.0 – 192.71.175.255
192.71.176.0 – 192.71.191.255
192.71.192.0 – 192.71.207.255
192.71.208.0 – 192.71.223.255
192.71.224.0 – 192.71.239.255
192.71.240.0 – 192.71.255.255
Urk… jag brukar komma ihåg såna häringa nummer utantill, men ovan fick jag
tänka till ordentligt för att få alla näten rätt.
Som vanligt är det lägsta numret i varje nätverk själva nätet (används t ex vid
routing) och det högsta är broadcast.
Nu fick vi ihop 16 nätverk med 4094 möjliga datorer på varje. Bättre än att
slösa bårt 16 hela klass B-nät eller bråka med att dela ut 256 klass C-nät (16
stycken per företag). Lägg märke till att antalet B-nät blev detsamma som
antalet C-nät per företag i nyss skrivna mening? Kan det ha med att göra att vi
bröt den tredje oktetten precis mitt itu kanske? Kanske t o m att antalet
möjliga kombinationer man kan få ihop med 4 binära siffror (en oktett delad mitt
itu) är just 16? Ahh… jag älskar när logiken går ihop!
På fackspråk kallas ovanstående för “classless”, eftersom man skiter i de gamla
klassindelningarna. Även om man kör classless så är adresserna ovanför 224.0.0.0
fortfarande reserverade för multicast och experiment/framtida
användningsområden.
Ovanstående “isärbrytning” av en oktett behöver naturligtvis inte ske just i den
tredje oktetten, utan kan lika väl vara i den första, andra eller fjärde. Då
flyttar man bara mina räkneexempel till de oktetterna, och sätter 255 eller 0 i
de andra. Rent teoretiskt går det faktiskt att ha netmaskar där ettorna och
nollorna inte är sammanhängande, men för en människa är det lite väl. Dessutom
ser jag inte någon större anledning, mer än just “because you can”. De flesta
utrustningar skriker om man försöker.
“Privatnäten” då? De “fria serierna”? Vad är det för larv?
Om man ska ge varje dator på hela jorden en egen IP-adress räcker de helt enkelt
inte till. Dessutom skulle det bli alldeles för stort att administrera. Varje
dator behöver ju faktiskt inte vara (och bör inte vara) åtkomlig från varje tänkbar
avsändare på hela Internet. Vi kan ju t ex börja med att plocka bort alla
klienter på nätverket, och dessutom alla servrar med enbart interna göromål.
Sagt och gjort. Vi ställer dit en firewall som skyddar alla dessa. Firewallen
tar emot alla begärningar (heter det så?) från datorerna innanför, och
vidarebefordrar sedan dessa ut på Internet. Då räcker det med att datorerna ute
på Internet vet vad firewallen har för adress för att skicka ett svar.
Firewallen håller reda på vilken dator som frågar vad, och skickar sedan svaret
till rätt frågeställare (tekniken kallas NAT eller PAT, två olika tekniker för
att göra samma sak på två olika sätt).
Bra. Då kan vi ju sätta vilka IP-adresser vi vill på insidan. Eller? Nej, det
kan vi inte. Låt oss t ex på skoj använda serien 192.71.0.0 till alla interna
datorer. 192.71.220.10 som jag använt ovan är egentligen IP-adressen för Tele2′s
huvud-DNS-server nic.swip.net. Säg att en intern dator också har 192.71.220.10.
Det gör väl ingenting? Datorerna ute på Internet ser ju ändå inte den? Nej, men
datorern i det interna nätverket gör. Så fort en intern dator vill fråga
nic.swip.net om nånting så kommer den att fråga den interna datorn med
192.71.220.10 istället, och får då naturligtvis inget svar. Jamen, skit i
nic.swip.net då! Jaha… och om IP-adressen istället användes av
www.microsoft.com då? Det skulle innebära att ingen på det interna nätverket
skulle kunna surfa till www.microsoft.com, och den stackars datorn som har det
IP-numret internt skulle bli överöst med WWW-förfrågningar som den inte kan
svara på.
Hur löser vi det här nudå? Jo, vi reserverar ett gäng nät som inte får användas
ute på Internet, och alltså kan vi använda dem fritt i det interna nätet,
eftersom det aldrig kan bli några krockar. De enda som kan ha samma IP-nummer är
ju datorer på andra interna nät, som vi ändå varken kan eller ska komma åt.
De reserverade näten är:
10.0.0.0 255.0.0.0 (d v s 10.0.0.0 – 10.255.255.255)
172.16.0.0 255.255.240.0 (d v s 172.16.0.0 – 172.16.31.255)
192.168.0.0 255.255.0.0 (d v s 192.168.0.0 – 192.168.255.255)
Dessa kan man alltså använda internt utan risk för att någon dator ute på
Internet använder samma adress som en intern dator.
Dessutom är 127.0.0.0 255.0.0.0 reserverad för den egna datorn (localhost).
Pingar du en adress som börjar på 127 så pingar du alltså dig själv, oavsett
vad du skriver efter 127.
Hmm… sluttampen… känns skönt… fast det är väl ändå ingen djävul som har
orkat läsa ändå hit ner… Jag har skrivit i snart 3 timmar och 40 minuter…
måste vara det längsta brev jag skrivit alla kategorier, digitalt som analogt.
Jag CC:ar det här till min flicka (hon pluggar nätverk), och hon kommer väl att
undra varför jag inte skriver lika långa brev till henne… nåja, en senare
huvudvärk.. lite kort om routrar och DNS, sen är jag klar: (I löv jo, gumman!)
Routrar:
Routrar är datanätverkens postterminaler. De håller reda på vilka nätverk som
ligger var (eller iaf åt vilket håll). Tänk dig först en liten postterminal.
Receptionen på ett mindre företag t ex. De behöver inte bekymra sig så mycket om
vart posten ska. Antingen kommer den med brevbäraren, och då ska den till
postrummet, eller så ligger den i utkorgen, och då ska den till Posten (via nån
postlåda). Likadant fungerar en liten router (t ex ISDN-routern jag är
uppkopplad via nu). Den har ett lokalt nätverk (postrummet) och en “default
gateway” (Posten). Allting som inte ska till det lokala nätverket skickar den
till default gateway (i mitt fall dialup-server på Tele2 som tagit emot
ISDN-samtalet som min router har ringt upp). Alla routrar har en tabell över
alla nätverk de känner till samt en default gateway. Min router har en rätt
enkel tabell med bara två rader.
Rad 1: Det lokala nätverket. I mitt fall 192.168.113.0 med netmask
255.255.255.0. Allting som ska hit skriker den ut på det lokala nätverket.
Rad 2: Default gateway. I mitt fall Tele2′s dialup-server. Hit skickar den
allting som inte ska till passar in på nån rad ovan. I mitt fall allt som inte
ska till 192.168.113.0.
Ute på Internet finns det stora postterminaler. Årsta eller Tomteboda är blaha
blaha i jämförelse.
De har jättetabeller med tusentals nätverk och massor med
olika linor hit och dit. Varje rad innehåller ett nätverk (Nät-adressen och
netmask) och en IP-adress dit allting till det nätet ska skickas. Uppe i toppen
finns t o m routrar utan default gateway. De kan alltså ALLA nät. Hur är nu det
möjligt? Det blir ju miljoners miljoners olika nätverk mad alla möjliga olika
netmaskar. Jo, de klumpar ihop näten. Ta t ex alla 192.71-näten ovan. Uppe bland
de här höjdarna finns inte alla de näten. Där finns bara 192.71.0.0 med netmask
255.255.0.0 och allting som ska dit skickas åt samma håll. (Längre upp finns nog
bara 192.0.0.0 255.0.0.0 dessutom.) Längre ner finns det sedan andra mindre
routrar (som fortfarande skulle skrämma slag på min lilla Shiva) som i sin tur
delar upp 192.71.* till de mindre näten jag radade upp några meter upp i det här
mailet. Till slut kommer (förhoppningsvis) alla paket fram till rätt adress. De
stora routrarna känner alltså inte till alla smånäten, utan bara “klumparna”.
Det ger avlastning åt dessa, samt frihet åt oss här nere på marken att mixtra
runt med våra smånät utan att behöva tala om det för de stora pojkarna varje
gång.
DNS:
Dotted decimal i all ära, men det är ändå lite jobbigt att komma ihåg alla
adresser i huvudet. Tänk om ni skulle få skriva IP-nummer till varje site ni
surfar till? Testa det bara en enda dag, så får ni se själva. Alltså måste vi
hitta på nåt som är enklare för en människa att komma ihåg än en hop siffror.
Bokstäver? Njaa.. Ord? Ja! Ord kommer vi ihåg. Vi är uppvuxna med ord. Vi
använder ord varje dag. Ord kan vi och ord kommer vi ihåg. Därför spikade man
ihop ett system där vi bara behöver komma ihåg orden, och så översätter datorn
det med siffror. Från början fanns en fil “hosts” med en tabell över alla ord,
och vilka IP-adresser de betydde. Den filen blev ganska stor med tiden (räkna
gärna ut hur många rader det skulle bli idag!), så det ersattes med ett system
där det står servrar lite varstans som håller reda på dessa ord och IP-nummer.
Varje server har sitt ansvarsområde, din “domän”. Det finns stora servrar som
har hand om hela toppdomäner, mellanservrar som har hand om vanliga domäner, och
i vissa fall små servrar som har hand om underdomäner. Initialt innehåller de
bara de domäner de har hand om. De största servrarna “root-servrarna” har en
lista med alla toppdomäner, och ett IP-nummer som i sin tur pekar ut vilken
server (inkl IP-nummer) som har hand om vilken toppdomän. nic.nic-se.se har t ex
hand om hela .se
nic.nic-se.se har i sin tur en lista över alla domäner.se samt vilka servrar
(inkl IP-nummer) som har hand om vilken domän. Dessa servrar i sin tur har dels
listor över alla datorer som har namn under deras respektive domän och vilka
IP-nummer de har. De kan också välja att lägga ut underdomäner på “entrepenad”
till mindre servrar, och peka ut de servrarnas namn och IP-nummer. Alla klienter
förses sedan med en eller flera DNS-servrar som de ska fråga när de vill ha reda
på vilket IP-nummer ett visst namn har. Finns namnet i deras tabell svarar det
helt enkelt. Finns inte namnet med har de i sin tur en annan större server som
de frågar. Om inte heller den vet frågar den vidare ännu högre upp. Till slut är
det någon som vet iaf vilken DNS-server som har hand om den toppdomän det
handlar om. Den frågar då den servern, som i sin tur frågar vidare neråt, och
när svaret kommer vandrar det samma väg tillbaka. Hela vägen läggs namnet och
IP-numret in i cachen på servrarna med en timeout. Om de sedan får samma fråga
igen, inann timeouten har gått ut, så kan de svara utan att behöva fråga
vidare den här gången.
/Pal Pedagog