Et lite kurs i IP-nettverk – del 2

I modul nr.2 av dette lille kurset skal vi omtale IP-adresser og hvordan de inngår i veivalgsmetodene for pakkesvitsjede nettverk.

Innledning

I forrige post skrev jeg at data som flyttes i et pakkesvitsjet nettverk blir lagt i pakker og påført en mottakeradresse. Altså omtrent slik vi sender brevpost. Postverket åpner aldri konvolutten og ser på innholdet, alle nødvendige oppysninger påføres på utsiden av den. Den viktigste opplysningen på konvolutten er mottakeradressens land, postnummer, gatenavn og husnummer. Til sammen setter de postverket i stand til å identifisere mottakerens postkasse, som er felles for alle medlemmene av husstanden. I tillegg setter opplysningene postverket i stand til å gjøre beslutninger om veivalg i omfordelingspunkter underveis.

Adressen sies å ha en hierarkisk organisering, hvor elementene beskriver et geografisk område. Om man leser adressen på konvolutten nedenfra og opp, ser man hvordan elementene avgrenser et stadig mindre område: Land – postnummer – gatenavn – husnummer. Andre egenskaper ved et slikt geografisk hierarki er at nærliggende hus har felles elementer, jo nærmere jo flere: Alle hus i Norge har dette adresseelementet felles, og alle hus i 2600 Lillehammer har i tillegg dette elementet sammen osv. I Vargstadvegen har husene tre elementer felles, og det er kun husnummeret som er ulikt. Samtidig som de samme tallene på husnumre finnes overalt ellers i Norge.

Figur 1: Postadressen er hierarkisk oppbygd, og leses nedenfra og opp.

Postadressen velger man ikke selv, den tildeles postkassen din på bakgrunn av hvilken gate, by og land huset ditt befinner seg i.

Grunnen til at jeg utbroderer disse betraktningene er at verdens IP-adresser er organisert på samme måte. En IP-adresse er en tallverdi hvor nærliggende maskiner har nærliggende verdier. Deler av adressen brukes for å finne frem til den “gaten” hvor mottakeren befinner seg, og resten brukes til å angi “husnummeret”. Dette skal jeg gjennomgå med større nøyaktivhet i de påfølgende avsnittene.

IP-adressens struktur

I Internet har alle nettverksadaptre sin unike IP-adresse. Merk at vi skriver “adapter”, ikke “maskin”. De fleste maskiner i dag har flere nettverksadaptre, f.eks. WiFi, Ethernet, Bluetooth, som alle kan være tilkoplet Internet samtidig, og disse vil ha sine egne unike IP-adresser. Når vi skal sende data i Internet legger vi dem i en IP-pakke, som er en “konvolutt”, og påfører dem avsenders og mottakers IP-adresser. Internet vil under overføring av IP-pakken aldri titte i konvolutten, men utføre transporten av IP-pakken på grunnlag av mottakeradressen på utsiden av den.

IP-adressen er et 32-bits ord, dvs. en sekvens med 32 biter, altså et tall beskrevet i 2-tallssystemet. Figur 2 viser et eksempel på en IP-adresse:

Figur 2: Eksempel på strukturen av en IP-adresse

Vi ser her at de 32 bitene er delt i to seksjoner, i rød og sort farge. De betegner prefikset, som kan betraktes som adressen til gaten (Norge, Lillehammer, Vargstadvegen), og adapteradressen, som betegner husnummeret. Prefikset brukes av Internet for å finne frem til mottakerens gate, mens adapteradressen finner frem til riktig hus i gaten. I likhet med postverket vil IP-pakken sendes mellom ruterne ved å se på adressebitene til venstre (vist med rødt), mens bitene til høyre brukes når siste ruter på veien skal levere IP-pakken til mottakerens nettverksadapter.

Fordi det er tungvint å huske og å bruke 32 0/1-verdier (kalt binærform) pleier vi å skrive adressen på “dotted desimal” form, vist på Figur 2. Her deles adressen inn i 4 8-bit deler som hver skrives på desimal form, noe en kalkulator kan hjelpe deg med om nødvendig. Adresser på dotted desimal form er mye lettere å huske, men alle regler for tolkning og bruk av IP-adresser forholder seg til den binære formen.

Prefikset har ingen fast lengde, den kan variere etter behov som jeg straks skal forklare. Derfor trenger vi i en del tilfeller å angi lengden av prefikset sammen med adresseverdien. I eksemplet på figuren vises derfor adressen som 192.5.129.35/20 for å angi at de første 20 bitene utgjøre prefikset. Da vet vi også at 32-20=12 biter utgjør adapteradressen.

Når vi planlegger IP-adresser må vi ofte finne ut hvor mange adapter-adresser vi har til disposisjon gitt et bestemt prefikslengde. I det binære tallsystemet (to-talls systemet) kan et tall med n biter ha 2n ulike kombinasjoner. 5 biter kan ha alle kombinasjoner fra 00000 til 11111, altså 32 = 25. Om vi kjenner prefikslengden p kan vi dermed slå fast at antall adapteradresser er 2(32-p).

Link og subnett

Nå som vi har presentert strukturen til en IP-adresse vil jeg starte forklaringen om hvordan IP-adresser blir brukt, altså hvilke regler som skal følges når vi tildeler IP-adresser.

Regel nr.1: Maskiner på samme link skal ha IP-adresser med samme prefiks.

Se på Figur 3, og legg merke til hvordan tre og tre maskiner er koplet til samme link. Med “samme link” mener vi at de de deler på et fysisk medium f.eks. en radiofrekvens (WiFi), er koplet til samme ledning eller optisk fiber, eller er koplet til en ethernet svitsj. En ethernet svitsj, vist som en firkant med kryss i på figuren, oppfører seg om en sammenkoplingspunkt for alle kablene som er direkte koplet til den.

Legg så merke til adressene 6.7.16.1 til 6.7.16.3 og regne dem om til binærform, og slå fast at de har de samme bit-verdier i de 21 første posisjonene. Regel nr.1 er dermed overholdt i dette tilfellet. Kontrollere nå på egen hånd at dette også gjelder den nederste raden med maskiner.

Figur 3: Tildeling av IP-adresser til to subnett

Regel nr.2 : En samling adresser med samme prefiks kalles et subnett

En samling adresser som deler prefix kalles en subnett, og subnettet har sin egen adresse: Om alle bitene i adapter-adressen er 0 vil adressen (sammen med prefikslengden) brukes til å betegne selve samlingen av adresser, ikke en enkelt adresse (også kalt endepunkt).

For eksempel vil subnett-adressen 6.7.16.0/21 angi subnettet i den øverste raden av maskiner i Figur 3. Dersom vi teller adapter-adresser (på 11 biter) fra 00000000000 til 11111111111 (2048 ulike adresser), ser vi at den laveste og høyeste adressen er:

Laveste: 00000110.00000111.00010000.00000000 = 6.7.16.0
Høyeste: 00000110.00000111.00010111.11111111 = 6.7.23.255

Til maskiner på den øverste raden kan vi velge IP-adresser fra 6.7.16.1 til 6.7.23.254. Vi bruker ikke laveste adresse, for den er reservert til å angi selve subnettet, og heller ikke den høyeste, fordi den er reservert til å angi alle mulige adresser i en kringkastingsforsendelse.

På samme måte kan adresseområdet for subnettet på den nederste raden i Figur 3 beregnes til å være 6.7.24.0 til 6.7.31.255. Gjør regnestykket selv dersom du er usikker på om dette stemmer.

Legg nå merke til at dersom vi betegner et subnett med adressen 6.7.16.0/20, så har det adresseområdet 6.7.16.0 til 6.7.31.255, dvs. alle adressene både 6.7.16.0/21 og 6.7.24.0/21. Subnettet 6.7.16.0/20 betegner altså begge linkene på Figur 3.

Ut fra slike betraktninger ser vi at et link er et subnett, men det omvendte er ikke nødvendigvis tilfelle. Et subnett er en samling adresser som også kan omfatte flere linker.

Regel 3: Et subnett kan inneholde andre subnett

Se på illustrasjonen i Figur 4. Den viser hvordan ethvert subnett kan deles i mindre subnett med lengre prefiks. For hver gang prefikset øker i lengde blir subnettet halvparten så stort.

Figur 4: Subnett kan inneholde andre subnett

Den ytterste sirkelen er et subnett som betegnes 0.0.0.0/0. Det er en litt rar måte å uttrykke samlingen av alle mulige IP-adresser, for her er lengden på adapteradressen 32 biter og prefikset er “null”. Alle mulige IP-adresser er derfor samlet i 0.0.0.0/0.

Regel 4: En IP-adresse kan være en del av mange subnett, men det lengste prefikset blir foretrukket

Av Figur 4 følger det også at en IP-adresse kan være en del av mange subnett. F.eks. vil adressen 6.7.16.1 være et medlem av subnettene 6.7.16.0/21, 6.7.16.0/20, 6.7.0.0/19 og 0.0.0.0/0, samt mange flere som ikke er vist på figuren.

I de tilfeller hvor vi må bestemme oss for ett av flere mulige subnett som adressen skal være en del av, velger vi det med lengst prefiks, altså 6.7.16.0/21 i dette tilfellet.

Dette prinsippet kalles på engelsk “Longest Prefix First

IP-adresser og veivalg

Som tidligere forklart vil den mottageradressen som er påført IP-pakken studeres av rutere og avgjøre hvilken link pakken skal sendes videre på. Vi skal utdype dette gjennom et eksempel vist på Figur 5.

Figur 5: Veivalg i en ruter beror på IP-adressen og en rutingtabell

Figur 5 viser en IP-pakke med påført mottakeradresse som er på vei inn til en ruter for videsending. Alle portene i ruterne er forbundet med ett eller flere subnett gjennom en rutingtabell slik som vist på figuren. Når en IP-pakke ankommer vil ruteren bruke de metodene som vi allerede har presentert for å finne svaret på «hvilke rader i rutingtabellen passer til IP-adressen påført i IP-pakken?» dvs. må ruteren finne ut om adresseområdet til et subnett inkluderer den adressen påført IP-pakken (i dette tilfellet 10.128.22.77). Du bør selv besvare dette spørsmålet før du leser videre.

Nettopp, det er rad 1 og 3. Subnettbetegnelsene i de to radene har prefikslengde på henholdsvis 9 og 20. Ruteren bruker prinsippet «Longest prefix first» og velger rad 3. Derfor sendes IP-pakken videre på port c, slik som vist på Figur 5.

Derom linken på port c fører til en ny ruter, vil denne gjøre akkurat samme operasjon, men basert på sin egen rutingtabell.

Prinsippet om «Longest prefix first» kan også illustreres på Figur 4 som den «innerste sirkelen». Vi kan gjerne tenke oss en rutingtabell visualisert som et slikt sett av sirkler som delvis ligger inni andre sirkler. Der en IP-adresse plasserer seg innenfor flere sirkler er det den innerste sirkelen som blir valgt for å avgjøre videresending.

Husk igjen at Figur 5 er en forenkling fordi alle portene kan både sende og motta IP-pakker. Rutingtabellen vil brukes for pakker som kommer fra alle porter, ikke bare den til venstre. Linken til venstre trenger også en subnettbetegnelse som må representeres i rutingtabellen. Avsenderadressen i den gule IP-pakken (ikke vist) må tilhøre et subnett i rutingtabellen for at kommunikasjonen skal virke begge veier.

Det er alvorlig mange maskiner på Internet, og bruk av subnett med varierende prefikslengde bidrar til at rutingtabellene blir kortere. Den totale mengden av IP-adresser i Internet er nemlig organisert slik som vist på Figur 4. Innenfor den ytterste sirkelen kan vi tenke oss seaprate sirkler som samler alle maskiner i EU, USA, Kina, og en sirkel for Norge inni EU-sirkelen. En ruter i USA vil derfor ha én eneste rad i rutingtabellen for all trafikk som skal til EU, og neste ruter (inni EU-sirkelen) vil ha én eneste rad for all trafikk til Norge. Realitetene er ikke fullt så idealisert, men bruk av subnett har bidratt til mindre voksesmerter i Internet. Husk igjen analogien med adresser bruk i postvesenet: I den norske postsentralen holder det med én sorteringshylle for USA, fordi all post dit går langs samme transportstrekning.

Prefikslengde og nettmaske

Vi trenger å vite lengden på adresseprefikset, det har vi forstått nå, og vi har skrevet denne verdien med skråstrek etter adresseverdien. Det finnes derimot en annen, eldre skrivemåte som fortsatt er i bruk, og som det er nødvendig å kunne:

Vi kaller denne formen for nettmaske, og den består av et 32-biters ord hvor en 1-bit betyr at adressebiten på samme posisjon hører til prefikset, og en 0-bit betyr at den hører til adapteradressen. Vi kan skrive adressen 6.7.8.9/19 på binærform sammen med nettmasken på denne måten:

IP-adresse: 00000110.00000111.00001000.00001001 = 6.7.8.9
Nettmaske : 11111111.11111111.11100000.00000000 = 255.255.224.0

En nettmaske vil alltid starte med en rekke 1-biter og avsluttes med en rekke 0-biter. Den gir altså ingen informasjon annet enn lengden på prefikset, og er en lite effektiv måte å skrive et enkelt tall på.

Siden hver 8-bit gruppe vil være på formen 00000000,10000000,1100000,11100000 og videre til 11111111, vil desimaltallet være en av 9 mulige: 0,128,192,224,240,248,252,254,255. Foregående grupper vil alltid være 255 og påfølgende grupper alltid 0.

Nettmaske er en tungvint form for å angi prefikslengden, men det er nødvendig å beherske denne formen fordi den brukes ennå mye, bl.a. i Windows.

Internet-navn vs. IP-adresser

Det er IP-adressene som styrer all trafikk på Internet, men i daglig bruk skriver vi ikke inn noen IP-adresser, men derimot Internet navn, f.eks. “www.vg.no”. Det er flere grunner til at denne formen er å foretrekke:

  • Et navn er lettere å huske enn en IP-adresse.
  • Navnet er uavhengig av hvor i nettet motparten befinner seg. Husk at IP-adressen reflekterer hvor i Internet maskinene befinner seg, og må endre adresse dersom den flyttes.

Når du skriver inn “www.vg.no” i webleseren må den først finne IP-adressen som hører til dette navnet. Dette skjer med en mekanisme i nettet som kalles Domain Name Services, forkortet DNS. En forenklet forklaring på tjenesten er at webleseren starter operasjonen med å sende et spørsmål til DNS om «”hva er IP-adressen til www.vg.no?”, og få tilsendt en IP-adresse i retur. I realiteten er bildet litt mer nyansert, så her følger en mer detaljert forklaring:

Navnet www.vg.no er delt opp i flere ledd adskilt med punktum. Tanken er at hvert ledd følger etter hverandre i et hierarki. Øverst henger .no, Som er en katalog over alle navn registrert i Norge, og som passer på at kun én har navnet vg.no. Det kan altså gjerne finnes vg.com, vg.org osv, så navnet er bare unikt innen no-domenet. Likeså er .vg.no et domene med en katalog som sørger for at navnet www er unikt innen domenet. Fordelene med en slik organisering er mange:

  • Det deler opp registrering- og vedlikeholdsarbeidet med disse katalogene opp på en hensiktsmessig måte, som også tillater at ulike land og domener har ulike regelverk knyttet til registrering.
  • Katalogene til de forskjellige domenene spres på et stort antall maskiner slik at forespørslene til DNS-tjenesten spres på mange linker i nettet og man unngår at det danner seg flaskehalser.

Det hører også med til bildet at når din maskin spør DNS-tjenesten om en IP-adresse vil svaret bli lagret på mange steder i nettverket underveis for en periode (noen få timer). Neste gang du eller noen i nærheten spør om det samme navnet vil svaret komme fra en mellomlagret kopi, ikke fra selve katalogen. Dette øker også ytelsen på DNS-tjenesten.

Oppsummering

Vi har i denne modulen gått grundigere inn på organiseringen av IP-adresser, og hvordan IP-adresser inngår i veivalgene som foregår i ruterne. Vi har fått forklart hvordan IP-adressene er organisert “geografisk”, dvs. at de tildeles med verdier som reflekterer deres plassering i nettverket. IP-adresser grupperes i subnett, og subnett-adressene knyttes til ruternes veivalg gjennom rutingtabeller.

Forslag til praktiske oppgaver

Forvaltning av IP-adresser, subnett og rutingprotokoller krever drilling, så her kommer noen regneoppgaver:

  1. Skriv disse IP-adressene på binær form og angi hvilke biter som inngår i nett-prefikset. Bruk gjerne en kalkulator for å oversette mellom desimal og binær form.         
    10.34.127.96/28
    192.168.2.110/24
    12.67.88.198/8
    23.67.11.90/20
    45.77.8.264/2
  2. Hvor mange IP-adresser har et adresserom med prefix /16, /20, /24, /28 ?
  3. Hvordan skrives nettmasken for prefixlengde /12, /20, /24, /28
  4. Hvilke adresser nedenfor betegner subnett, og hvilke betegner maskiner ?
    192.168.2.0/22
    192.168.32.0/19
    192.168.34.9/25
    192.168.37.0/23
  5. Hvilke adresser inngår i disse subnettene:
    192.168.2.0/24
    10.10.34.0/22
    10.67.1.8/30
    139.67.0.0/16
  6. Jobb sammen i par:
  • Sørg for at din maskin har en ethernet-port (evt. med USB-Ethernet adapter)
  • Hent en ethernet-kabel og kople maskinene sammen
  • Bestem hvilket subnett-adresse kabelen skal ha, og finn to adresser i dette adresseområdet
  • Sett opp IP-adresse og nettmaske på adaptrene på maskinen
  • Hent frem et kommandokonsoll på maskinene. Skriv ping xx.yy.zz.ww (makkerens IP-adresse) for å sjekke at dere har kontakt. En windows-maskin må ofte skru av brannveggen for å motta ping-meldinger. Ping “begge veier”
  • Sett opp en enkel web-tjener på den ene maskinen, med kommandoen

        python -m SimpleHTTPServer 8000 (Linux/Max)

        miniweb (Windows, evt. en anne liten webtjener dere finner på Internet)

  • På den andre maskinen, start webleseren og finn siden http://xx.yy.zz.ww:8000/ Denne bør nå få se et web-innhold. Bruk også Wireshark for å studere trafikken mellom maskinene. Bytt roller slik at web-tjeneren nå blir klient.

Foreslått egenlesning

Om 2-tall systemet og IP-adresser: https://www.youtube.com/watch?v=ddM9AcreVqY        

Om nettverkprefiks og subnett: https://www.youtube.com/watch?v=XQ3T14SIlV4

Leave a Reply

Your email address will not be published. Required fields are marked *

six − 1 =