IP finner veien frem til målet
4 jun. 2010Draft..
Nettverkslaget
RFC 791
Sammen med TCP er IP den mest fundamentale komponenten i Internett slik det består i dag. En IP-adresse er et 32-bits binært tall, men skrives normalt som fire tall mellom 0-255 separert med punktum. Altså adressene 0.0.0.0 til 255.255.255.255. Ikke alle adresser er gyldige på Internett.
IP-adresser er, i motsetning til MAC adresser, organisert på en logisk måte, slik at informasjon skal kunne rutes fra sender til mottaker. Denne prosessen kan sammenliknes med postverket:
Vi har land, fylker, kommuner, gater, husnummer osv. En hvilken som helst postmann kan se på et brev og vite hva som må gjøres med det for å få det levert. Postmannen vet naturligvis ikke om alle gater og husnummer i hele verden, men han kjenner sitt nabolag. Hvis brevet ikke skal til hans område, gir han det til nærmeste fylkeskontor. Her kjenner personellet alle fylker i landet, og kan få det levert til riktig postmann. Skal brevet til et annet land, må personalet på fylkeskontoret få det sendt til riktig land før samme prosess starter nedover igjen. Gjett hva nettverkskomponenten "ruter" er i denne sammenheng! Ruteren er en postmann. På en måte.
Måten IP-adresser brukes på har endret seg med tiden. Det startet med et klassebasert Internett. Vi hadde klassene A,B og C. IP-adressen bestod av en "nettverksdel" og en "maskindel". For å skille nettverksdelen fra maskindelen ble de første bit'ene i adressen benyttet slik figuren viser:

Merket med farge er maskin-delen av adressen. En ruter trengte da bare å se på de to første bitene for å avgjøre hva som var nettverksdelen. Maskindelen brydde ikke ruteren seg om. Alt ruteren nå trengte å gjøre, var å sammenlikne nettverksdelen med sin rutingstabell for å finne en vei til målet. Hadde den ikke det, ble pakken sent til en ruter som viste mer.

Denne figuren viser et veldig enkelt Internett. Vi ha 3 rutere A,B og C.
Hver av ruterne har 3 porter hver, 2 til naboruterne og 1 til sine interne noder. Vi ser at ruter B har benyttet 10.x.x.x internt hos seg. 10 desimalt tilsvarer 00001010 binært, og vi ser av første bit fra venstre at dette er et klasse A nettverk. Med andre ord er de første 8 bitene reservert for å angi nettverk, mens de resterende 24 bit kan brukes for å skille noder (som i maskiner) fra hverandre. Sender en maskin bak ruter B en pakke til 30.200.1.1, vil den gå til ruterB. RuterB ser at adressen starter med 20.x.x.x og vet at alle adresser som starter på 20 befinner seg hos ruterC. Pakken blir sent dit. For å vite dette, har ruteren en tabell med kombinasjon "nettverksdel av IP" med tilsvarende "IP-adresse til riktig ruter". Nettet internt mellom ruterne må naturligvis også ha IP-adresser, noe som ikke er tegnet inn her. Du ser sikkert også at det på "innsiden" av hver ruter går mange forbindelser ut til de interne nodene. Her står det i realiteten en svitsj imellom.
Ruteren trenger en utfylt rutingstabell for å fungere. Den kan enten settes opp manuelt (håpløs jobb på Internett) eller man kan bruke en automatisk protokoll som selv oppdager hva den er koblet mot. Av praktiske årsaker blir rutere gruppert i soner der du har egne protokoller internt i sonen, og egne eksternt mellom sonene. Hver av dem tilpasset sitt bruk. Av interne protokoller har vi OSPF, IS-IS og RIP. Eksternt har vi EIGRP og BGP.
Denne strategien har en stor svakhet. Du får enten et nettverk med 254 tilgjengelige adresser, 65532 adresser eller vanvittige 16777214 adresser. Ingen ting i mellom. IP-adresser har i senere tid blitt en mangelvare da det ikke er så ekstremt mange kombinasjoner av 32-bit. Man bestemte seg derfor for å prøve å dele opp nettverkene i mindre deler. Dette fenomenet kalles ofte for CIDR ("Classless Inter-Domain Routing").
RFC 4632 - CIDR
Prinsippet går ut på at en i tillegg til IP-adressen også må ha en subnet-maske. En subnet-maske er rett og slett en måte å fortelle en ruter eller en maskin hva som er nettverksdelen og maskindelen av IP-adressen. En figur viser dette ganske enkelt:

En subnettmaske oppgis med en "/" etter IP-adressen, etterfulgt av et tall mellom 1 og 31. Talle angir hvor mange 1'ere det er, sett fra venstre i nettmasken. Masken 255.255.255.0 tilsvarer derfor /24 i og med at hver gruppering av tall består av 8 bit. Med klasseløs ruting ville et klasse A nettverk tilsvare "/8", et B "/16" mens et C tilsvare "/24". Nå kan vi sette grensen selv der det passer.
Akkurat som med DNS, er IP-adresser fordelt i et hierarkisk system. Stole bolker med adresser er fordelt til noen få regionale organisasjoner (RIRs) som forvalter dem. De regionale organisasjonene deler så hver sine bolker opp i mange mindre bolker og gir dem til mer lokale organisasjoner (LIRs), som igjen deler opp og gir enda mindre bolker til, for eksempel, Telenor. Telenor er en ISP (Internettilbyder), og hver bruker som skal på Internett får da en IP-adresse av ISPen sin IP-blokk.
Store kommersielle organisasjoner kan kjøpe seg større blokker med IP-adresser på samme måte som Internettilbyderne kan. Fra Internetts barndom ble hele klasseA nettverk delt ut til blant annet universiteter, en etterlengtet resurs universitetene naturligvis ikke ønsker å gi fra seg :)
La oss anta en maske på 255.255.255.0. Du tilegner to maskiner adressene 10.0.1.1 og den andre 10.0.2.2. Hvis du utfører samme regnestykke som figuren et par hakk over, vil du se at disse to adressene er på hver sitt nettverk. Kobler du maskinene sammen med en svitsj, vil du ikke få kontakt. Nettmasken er altså metoden maskinen din bruker for å finne ut om adressen du prøver å nå, befinner seg på samme nett, eller om pakken må sendes til en ruter for å "hoppe over på et annet nett".
IP-protokollen mottar hovedsaklig data fra TCP eller UDP. IP-laget legger på sin header og sender så data ned til laget under som heter datalinklaget. Headeren ser slik ut:
