Et lite kurs i IP-nettverk – del 3

I denne modulen vil vi se på hvordan en link fungerer, og hvordan linkene bidrar til å overføre IP-pakker mellom rutere og mellom endepunkter (maskiner) og rutere.

Innledning

Jeg har tidligere snakket om hvordan sending av IP-pakker mellom to rutere eller mellom en ruter og et endepunkt skjer via en link. En link er et fysisk medium som f.eks. en radiofrekvens som brukes av WiFi, en elektrisk kabel eller en fiberoptisk kabel. Fler enn to endepunkter/rutere kan være tilkoplet mediet, og alle hører de alt som blir sendt. Dette gir linken disse egenskapene:

  • Linken egner seg for kringkastingssendinger, hvor alle skal motta den samme sendingen.
  • For enkeltsendinger (til én bestemt mottaker) må mottakeren adresseres.
  • Om flere endepunkter/rutere starter sendingen samtidig vil det oppstå kollisjoner.
  • Overføringen kan bli forstyrret av støy på linken, og bitfeil og pakketap kan oppstå.

Vi skal se hvordan IP-pakken ikke overføres “som den er”, men at den legges i en ny konvolutt som passer til egenskapene på linken. Denne konvolutten kaller vi en “ramme” (evt. link-ramme).

Jeg ønsker å gjøre denne teksten praktisk anvendelig, så presentasjonen vil konsentrere seg om de to typer av linker som du oftest vil benytte: WiFi og Ethernet.

Ethernet

Ethernet baserer seg på overføring av elektriske signaler gjennom et elektrisk ledende medium. Opprinnelig var Ethernet utformet som en skjermet kabel (såkalt coaksial-kabel) som snodde seg fra maskin til maskin. Med tiden har Ethernet utviklet seg til å bestå av en Ethernet-svitsj (heretter bare kalt svitsj) koplet med egne kabler til hver enkelt maskin. Figur 1 viser en slik konfigurasjon med to linker sammenkoplet med en ruter. Alle kabler koplet til en svitsj utgjør én og samme link. De to linkene er vist med rød og blå farge.

Figur 1: To linker koplet sammen med en ruter. Alle kabler
med samme farge hører til samme link

Kablene som brukes er ikke kostbare coaksialkabler som må strekkes separat for formålet, men uskjermede kabler som også brukes brukes til telefon og som trolig er lagt i veggene da huset ble bygget. Billigere og enklere installasjon i bygninger var en viktig fordel ved å gå bort fra coaksialkabler. Kabelen som brukes kalles UTP-5, og det står vanligvis trykket på selve kabelen. Pluggen i enden av kabelen kalles RJ-45.

Figur 2: UTP-5 kabel

Sammenkopling av maskiner gjennom en svitsj fremfor fysisk kopling til en coaksialkabel gir også visse tekniske fordeler:

  • Maskinene er elektrisk isolert, slik at om én maskin kortslutter sin kabel påvirker ikke det alle andre på linken.
  • Maskinene som er tilkoplet trenger ikke sende med samme hastighet.
  • Om flere maskiner sender helt samtidig vil kollisjoner oppstå på en coaksialkabel. En svitsj vil sørge for å mellomlagre rammene slik at de kan sendes etter tur.
  • Den total lengden på nettverket, altså avstanden mellom ytterpunktene, kan økes.
  • Ytelsen øker, fordi svitsjene kan overføre flere datastrømmer i parallell mellom adskilte sett av porter.

En svitsj og en ruter ser nesten lik ut: En boks med stikkontakt og et sett med kontakter for RJ-45 plugger. I hjemmet står gjerne en boks som kopler huset til Internet, slik som vist på Figur 3. Den har begge funksjonene og er både en ruter og en svitsj, og har også WiFi-link.

Router Configuration
Figur 3: Hjemmeruter med ruterfunksjoner (grønn port) og svitsjfunksjon (røde porter)

WiFi – radiobasert link

Bruk av radiosignaler som linker er av nyere dato enn Ethernet, og har utviklet seg til å bli stadig raskere og billigere. Fortsatt er hastigheten lavere enn Ethernet, men fordelene ved å slippe å trekke kabler gjør at WiFi ofte foretrekkes.

En WiFi-link er forankret i et Aksesspunkt (AP) som har den sentrale funksjonen med å la endepunkter (maskiner) kople seg til linken, og med å formidle link-rammene mellom dem (trafikken går altså ikke direkte mellom maskinene). Figur 4 viser en slik Wi-Fi link.

Figur 4: En WiFi link med tre endepunkter, og en kablet gren til en fjerde maskin.
Ruteren sørger for videresending av IP-pakker til andre subnett.

Vi viser her at endepunkter som benytter Ethernet og WiFi kan betraktes som samme link. Dette er tilfellet med en hjemmeruter, hvor svitsjeportene (de røde på Figur 3) deler link med WiFi-endepunktene. Det knytter seg visse begrensninger til en slik blanding av Ethernet og WiFi i samme link, bl.a. kan man ikke forbinde svitsjer med hverandre via WiFi.

Et radiosignal er mer utsatt for forstyrrelser og signaldempning enn en kabel, og WiFi kan skape mange slags problemer knyttet til stabilitet og ytelse. Dersom mange linker bruker samme radiofrekvens vil de forstyrre hverandre, og signalet blir dempet når det går gjennom vinduer og vegger. Dersom signalet blir svakt vil linken redusere hastigheten for å holde påliteligheten oppe, og det er sjelden at man oppnår den hastigheten som loves av utstyrsleverandøren. Generelt bør man foretrekke linker basert på Ethernet der det er praktisk mulig å strekke kabler.

En svitsj vidersender rammer innen samme subnett, mens en ruter videresender pakker mellom subnett.

Link-rammer

Jeg har innledningsvis nevnt at vi benytter en ekstra “konvolutt” for å overføre IP-pakker over en link. Denne konvolutten er tilpasset linkens fysiske forutsetninger slik at overføringen blir nyttig og pålitelig. Denne konvolutten kalles link-ramme og er vist i en forenklet form på Figur 5. Merk at Ethernet og Wi-Fi har litt ulike link-rammer på det mer detaljerte nivået.

Figur 5: Forenklet fremstilling av en link-ramme. Merk
opplysningene som legges i link-hodet.

I likhet med de andre konvoluttene som vi pakker dataene våre inn i før sending, er det det link-hodet (altså det vi skriver utenpå konvolutten) som forteller mye om hvordan linken fungerer. Vi skal beskrive elementene i link-hodet enkeltvis:

  • Fordi det kan være mange endepunkter koplet til linken må vi angi hvem som skal motta rammen, og hvem som har sendt den. Derfor trenger vi disse to adressene i link-hodet. Vi kan ikke bruke IP-adressene til dette, fordi det ikke er sikkert at innholdet i rammen er en IP-pakke (selv om Figur 5 viser nettopp dette).

    Adressene brukt på linken kalles MAC-adresser og en sekvens av 48 biter. Om du skriver ipconfig/all i et Windows-konsoll får du se MAC-adressene til adaptrene på maskinen din (kalt “Physical address”), på Linux skriver du $ip a og på MAC $ifconfig. MAC-adressene er aldri noe du bestemmer selv, de er bestemt av utstyrsleverandøren, er globalt unike og uendret gjennom utstyrets levetid. MAC-adressen skrives på heksadesimal form, f.eks. slik: 08:07:2a:bc:67:00.
  • Link-hodet må inkludere et angivelse av innholdet i “lasterommet”, dvs. den gule firkanten på Figur 5. Denne opplysningen er nødvendig for at mottakeren skal sende innholdet av rammen til riktig programvare i operativsystemet som kan behandle den videre.
  • En sjekksum er et slags fingeravtrykk som representerer innholdet i rammen på en måte som gjør det mulig å se om det er skjedd endringer under overføring. Avsenderen bruker en regnemetode over innholdet som resulterer i en sjekksum som påføres link-hodet (egentlig ligger sjekksummen bakerst i rammen). Mottaker gjør den samme beregningen og sammenligner resultatet. Dersom disse to verdiene ikke er like er det altså skjedd endringer i rammen underveis, og rammen vil ikke bli godkjent. I Ethernet blir pakken bare kastet uten å orientere avsenderen, mens i WiFi blir avsenderen bedt om å sende rammen på nytt.

Link-rammer kan studeres i Wireshark, i de midterste vinduet er det en seksjon som viser frem enkeltelementene i link-hodet.

En svitsj vidersender rammer innen samme subnett, mens en ruter videresender pakker mellom subnett.

Hvordan finner vi mottagerens MAC-adresse? ARP-protokollen

Når vi ber maskinen vår om å sende en IP-pakke til en mottaker på samme subnett, vil den lage en link-ramme hvor mottakerens MAC-adresse inngår i link-hodet. Men hvordan finner den mottakerens MAC-adresse når dens IP-adresse er det eneste som er kjent? Det eksisterer jo ingen sammenheng mellom de to verdiene, siden de bestemmes av helt uavhengige forhold.

Teknikken for å løse denne oppgaven ligger i det faktum at en link er et kringkastingsmedium, hvor alle hører det som blir sendt. Det er altså mulig for vår maskine å “rope” til alle endepunktene på linken: “Hvem har IP-adressen 1.2.9.8 ?”. Denne meldingen mottas av alle, og hver sjekker om dette er den adressen de selv har. Den ene som måtte ha denne adressen svarer tilbake til vår maskin med opplysninger om dens MAC-adresse. Vår maskin lagrer denne opplysningen en stund (noen minutter), slik at den ikke trenger å gjøre denne handlingen for hver eneste IP-pakke som skal sendes.

Vi kaller denne metoden for Address Resolution Protocol, til daglig kun kalt ARP. Spørsmålet som ropes ut, som forklart i forrige avsnitt, er ikke en IP-pakke, og er eksempel på link-rammer som ikke inneholder IP-pakker. Vi finner ARP-trafikken med Wireshark og kan filtrere den med filteret “ARP”, ellers ser vi lite til denne protokollen mens vi bruker en datamaskin. Med konsollkommandoen arp -a (på Windows) eller arp -an (Mac og Linux) får vi se innholdet av ARP-tabellen, altså de lagrede opplysningene om MAC- og IP-adresser.

Videresending av rammer gjennom en svitsj

Nå skal jeg gå litt mer i detalj om hvordan en svitsj kan sammenkople maskiner som om de var koplet til samme fysiske kabel. Husk at det var slik Ethernet begynte, og vi ønsket at mange av de egenskapene skulle fortsatt beholdes da vi siden erstattet denne kabelen med en svitsj.

I likhet med postvesenet vil heller ikke svitsjen åpne link-konvolutten og se inni, den vil kun forholde seg til opplysningene som er skrevet i link-hodet. Og det er først og fremst MAC-adressen til mottakeren som har interesse for svitsjen, som har som sin eneste oppgave å vidersende rammen på den kabelen som fører til mottageren.

Svitsjen har en tabell i sitt egen internminne over hvilke MAC-adresser som knytter seg til hvilken port. Ta nå en titt på Figur 1 igjen og legg merke til at svitsjene på den røde linken har flere endepunkter på noen av portene, nemlig portene som knytter de to svitsjene sammen. Og hvordan fylles denne tabellen med opplysninger? Her kreves nemlig ingen manuell konfigurasjon, svitsjen lærer av å studere avsenderadressen på rammer som mottas, og lagrer adressen sammen med opplysninger om mottakerporten. Neste gang denne adressen er mottaker av en ramme så vet altså svitsjen hvilken port som skal brukes.

Og dersom den ikke har noen opplysninger om hvilken port som skal brukes? Da velger svitsjen å sende til alle portene (unntatt mottakerporten). Det samme gjelder om rammen har en kringkastingsadresse, da sendes også rammen ut på alle porter, slik som tilfellet er med forespørsler i ARP-protokollen.

På grunn av denne mekanismen kalles svitsjen en MAC-learning switch, og den sørger for at alle hører en ramme når det er påkrevet, mens det med enkeltsendinger kun vil sendes til enkeltporter. Dette øker ytelsen i nettverket, og gjør det vanskeligere å avlytte annen trafikk på linken. Svitsjen er svært enkel i bruk: Vi kopler til kabler og slår på strømmen, det er det hele.

WiFi og Media Access

En link basert på WiFi vil ha andre fysiske egenskaper enn en Ethernet-link, og jeg vil gjerne si noen setninger om hva slags problemstillinger en WiFi link byr på.

Alle rammer blir kringkastet på en WiFi link, så hver mottager må studere alle rammene som mottas for å bestemme om den er adressaten for rammen (enten den er påført egen MAC-adresse eller en kringkastingsadresse). Dette gir dårligere vilkår for den skjermingen mot avlytting som en Ethernet-svitsj tilbyr, og en WiFi link regnes som svært dårlig beskyttet.

Et annet forhold er at to endepunkter som sender akkurat på samme tid vil skape en kollisjon på nettet, slik at radiosignaler fra to sendere vil blandes, med det resultat at rammene vil mistes eller mottas med feil. I begge tilfeller vil de bli forsøkt sendt på nytt, men da vil avsenderne velge et nytt tilfeldig tidspunkt for dette, for å unngå en ny kollisjon. Dessuten vil alle endepunktene lytte til radiofrekvensen før sending og avstå dersom andre allerede sender. Dette reduserer risikoen for kollisjoner, men fjerner ikke risikoen helt. Vi kaller disse operasjonene for Medie-aksess og kollisjonshåndtering.

Forslag til praktiske oppgaver

  1. Vi kopler alle maskinene i klassen til en sentral svitsj-struktur med ethernet-kabler. Maskinene konfigureres med IP-adresser som tilhører tre ulike subnett. Vi skal dermed se at maskinene kommuniserer innad i tre subnett, men ikke mellom subnettene. De tre subnettene er:
    192.168.10.0/28 (pultrad til venstre velger adresser, fremste pult først)
    192.168.20.0/28 (midtre pultrad)
    192.168.30.0/28 (høyre pultrad)

    Skru av Windows brannmur og konfigurere ethernetadapteret med IP-adresse og nettmaske. Sett opp en enkel web-tjener slik som i 2. samling.
  2. Alle maskinene “pinger” adresser innen sitt eget subnett, og adresser på de andre subnettene. Noter resultatet. Studer trafikken som ping-kommandoen skaper med Wireshark. Bruk filteret “icmp” for dette formålet. Bruk også filteret “arp” for å se trafikken som knytter seg til ARP-protokollen.
  3. Alle maskinene henter hverandres web-sider med en nettleser. Bruk Wireshark med filteret “http” for å få bedre oversikt. Med Wireshark, studere svaret som kommer fra web-tjeneren. Se etter sammenheng med hva som vises i web-leseren.
  4. Avlutningsvis, endre din IP-adresse til en ledig adresse på et av de andre subnettene og gjenta punkt 2.

Foreslått lesing fra denne samlingen

Om ethernet-switcher (les frem til avsnittet “Spanning Tree Protocol”):

https://www.oreilly.com/library/view/ethernet-switches/9781449367299/ch01.html

Om WiFi (les frem til avsnittet “Societal Aspects”): https://en.wikipedia.org/wiki/Wi-Fi

MDI og Auto-MDI: https://en.wikipedia.org/wiki/Medium-dependent_interface

Om ARP-protokollen: https://www.geeksforgeeks.org/how-address-resolution-protocol-arp-works/

Leave a Reply

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

one × 4 =