Kapittel 3 · Transportlaget

Tjenester, multipleksing
og UDP

Hva transportlaget egentlig gjør, hvordan riktig prosess finner riktig pakke, og den enkleste protokollen som klarer seg uten garantier.

00 · Transportlagets tjenester

Hva transportlaget egentlig gjør

Nettverkslaget leverer pakker mellom maskiner. Transportlaget løfter kommunikasjonen ett nivå opp — til prosesser.

Forestill deg et hus der tolv barn bor. Et annet hus, på andre siden av byen, huser også tolv barn. Hver dag sender barna brev til hverandre. Postsystemet leverer konvoluttene til riktig hus — men det er Ann og Bill, et barn i hvert hus, som tar imot posten og deler den ut til riktig søsken. Postsystemet er nettverkslaget: det leverer til husadressen. Ann og Bill er transportlaget: de leverer til riktig person inni huset.

Denne analogien fanger den helt sentrale forskjellen:

LagKommunikasjon
NettverkslagetLogisk kommunikasjon mellom verter (hosts) — IP-adresser identifiserer maskiner.
TransportlagetLogisk kommunikasjon mellom prosesser — portnumre identifiserer applikasjoner.

Transportlaget bygger videre på nettverkslaget, men kan ikke gjøre mirakler. Nettverkslaget (IP) tilbyr en best-effort-tjeneste uten noen garantier. Transportlaget kan legge til pålitelighet og rekkefølge (TCP), men det kan ikke tvinge nettverket til å gi bedre båndbredde eller lavere forsinkelse.

Senderens og mottakerens handlinger

Transportlaget gjør konkrete ting på begge sider:

Sender

Mottar en applikasjonsmelding fra laget over. Bestemmer headerverdier (portnumre m.m.), lager et segment, og leverer segmentet ned til IP.

Mottaker

Mottar et segment fra IP. Sjekker headerverdiene. Trekker ut applikasjonsdataene. Demultiplekser meldingen opp til riktig socket (og dermed riktig prosess).

To transportprotokoller

Internett gir applikasjoner to valg:

ProtokollEgenskaper
TCPPålitelig, ordnet levering. Flytkontroll, metningskontroll, forbindelsesetablering. Koster tid og ressurser.
UDPUpålitelig, uordnet levering. Ingen håndtrykk, ingen tilstandsinformasjon, minimal overhead. Rask og enkel.
Hva transportlaget ikke kan gi Verken TCP eller UDP kan garantere forsinkelse eller båndbredde. Disse egenskapene krever støtte i nettverkets kjerne, og IP gir ikke slike garantier.
Sjekk forståelsen

Hva er den fundamentale forskjellen mellom nettverkslaget og transportlaget?

01 · Multipleksing og demultipleksing

Riktig pakke til riktig prosess

Kjerneoppgaven til transportlaget: samle data fra mange sockets på sendersiden, og levere dem til riktig socket på mottakersiden.

Multipleksing og demultipleksing er to sider av samme sak. Multipleksing skjer hos senderen: transportlaget samler data fra ulike applikasjonssockets, legger på transportheadere (med bl.a. portnumre), og sender segmentene nedover. Demultipleksing skjer hos mottakeren: transportlaget ser på headerinformasjonen i innkommende segmenter og leverer dataene opp til riktig socket.

Hvordan demultipleksing fungerer

Når en vert mottar et IP-datagram, inneholder det:

  • Kilde-IP-adresse Hvem som sendte datagrammet.
  • Destinasjons-IP Hvem som skal motta det.
  • Kilde-portnummer Fra segmentheaderen — 16 bit.
  • Dest.-portnummer Fra segmentheaderen — 16 bit.

Verten bruker IP-adresser og portnumre til å dirigere segmentet til riktig socket. Men hvordan dette skjer, er forskjellig for UDP og TCP.

Forbindelsesløs demultipleksing (UDP)

En UDP-socket identifiseres av bare to ting: destinasjons-IP og destinasjonsport. Konsekvensen er enkel men viktig:

Nøkkelinnsikt

Hvis to UDP-datagrammer har forskjellig kilde-IP og/eller kilde-port, men samme destinasjons-IP og -port, havner de i samme socket hos mottakeren. UDP bryr seg bare om hvor pakken skal hen, ikke hvor den kommer fra.

Klient A Server Klient B port 9157 port 6428 port 5775 src:9157 dst:6428 src:5775 dst:6428 Begge havner i samme socket (port 6428)
UDP-demultipleksing: to klienter med forskjellig kilde-port sender til samme destinasjonsport. Begge pakker leveres til samme socket.

Forbindelsesorientert demultipleksing (TCP)

TCP gjør det annerledes. En TCP-socket identifiseres av et 4-tuppel:

  • kilde-IP
  • kilde-port
  • destinasjons-IP
  • destinasjons-port

Konsekvensen: selv om tre segmenter ankommer samme server med samme destinasjons-IP og -port (f.eks. port 80), vil de bli levert til forskjellige sockets dersom de har forskjellig kilde-IP eller kilde-port. En webserver kan dermed ha hundrevis av samtidige TCP-forbindelser — alle på port 80 — og holde dem adskilt fordi hver forbindelse har en unik 4-tuppel.

Host A (IP: A) Server B (IP: B) Host C (IP: C) A:9157 C:5775 C:9157 P4 (A:9157,B:80) P5 (C:5775,B:80) P6 (C:9157,B:80) Alle tre til port 80, men tre forskjellige sockets
TCP-demultipleksing: tre segmenter til port 80 demultiplekses til tre ulike sockets basert på 4-tuppelet (kilde-IP, kilde-port, dest-IP, dest-port).
Sjekk forståelsen

To UDP-datagrammer ankommer en server. De har ulik kilde-IP, men samme destinasjons-IP og -port. Hva skjer?

02 · UDP

Forbindelsesløs transport: UDP

UDP gjør nesten ingenting — og nettopp det er poenget. Minimalt med overhead, maksimalt med frihet.

User Datagram Protocol er den enkleste transportprotokollen på internett. Den gjør nesten ingenting utover det IP allerede gir. Ingen forbindelsesetablering, ingen tilstand, ingen garanti for levering, ingen rekkefølgegaranti, ingen flytkontroll, ingen metningskontroll. Hvert UDP-segment håndteres uavhengig av alle andre.

Hvorfor velge noe så primitivt? Fordi fravær av garantier har konkrete fordeler:

EgenskapFordelen
Ingen håndtrykkIngen ekstra RTT for å sette opp forbindelse — data kan sendes umiddelbart.
Ingen tilstandSender og mottaker holder ingen forbindelsesinformasjon. Servere kan håndtere mange flere klienter.
Liten headerBare 8 bytes overhead vs. 20+ bytes for TCP.
Ingen metningskontrollApplikasjonen kan sende så fort den vil — nyttig for sanntidsapplikasjoner som tåler litt tap.

Hvem bruker UDP?

UDP er overraskende utbredt:

  • DNS — raskt oppslag uten å sette opp en forbindelse
  • SNMP — nettverksovervåking der enkelhet teller
  • Strømming — tapstolerant, hastighetssensitiv (dog bruker tjenester som Netflix ofte TCP)
  • HTTP/3 — bygger pålitelighet og metningskontroll over UDP via QUIC
Pålitelighet oppå UDP Dersom en applikasjon trenger pålitelig levering men bruker UDP (f.eks. HTTP/3), må den selv implementere pålitelighet og metningskontroll i applikasjonslaget.

UDP-segmentets anatomi

UDP-headeren er minimalistisk — bare 8 bytes:

Source Port16 bit
Dest Port16 bit
Length16 bit · bytes i hele segmentet
Checksum16 bit
Application data (payload)
UDP-segmentet — bare fire felt i headeren, totalt 8 bytes. Sammenlikn med TCPs minimum 20 bytes.
FeltFormål
Source PortAvsenderens portnummer. Mottakeren kan bruke dette til å sende et svar tilbake.
Dest PortPortnummeret segmentet skal leveres til hos mottakeren.
LengthLengden på hele UDP-segmentet (header + data) i bytes.
ChecksumBrukes til å oppdage bit-feil i headeren eller dataene.

Sender- og mottakerhandlinger

UDP-sender

Mottar en applikasjonsmelding. Setter kilde- og destinasjonsport. Beregner lengde og sjekksum. Pakker alt inn i et segment og leverer det til IP.

UDP-mottaker

Mottar et segment fra IP. Sjekker sjekksummen. Trekker ut applikasjonsdataene. Demultiplekser meldingen opp til riktig socket basert på destinasjonsporten.

03 · UDP-sjekksummen

Feildeteksjon med one's complement

Sjekksummen er UDPs eneste forsvarslinje. Den er enkel, billig, og langt fra perfekt.

Tanken bak sjekksummen er rett frem: senderen summerer alle 16-bits ord i segmentet (header + data + deler av IP-headeren), tar one's complement av summen, og legger resultatet i checksum-feltet. Mottakeren gjør samme beregning. Hvis svaret ikke stemmer, vet hun at noe har blitt endret underveis.

Steg for steg

Beregning

1. Behandle innholdet som en sekvens av 16-bits heltall.
2. Summer dem med one's complement-addisjon (der en carry ut fra bit 15 legges tilbake til bit 0 — wraparound).
3. Ta one's complement av summen (inverter alle bits). Dette er sjekksummen.

Et eksempel

Si at vi adderer to 16-bits tall:

Beregning

1110 0110 0110 0110
1101 0101 0101 0101
────────────────────
1 1011 1011 1011 1011 ← wraparound-carry
  1011 1011 1011 1100 ← sum (etter wraparound)
  0100 0100 0100 0011 ← checksum (one's complement)

Svak, men bedre enn ingenting

Sjekksummen fanger mange vanlige feil — som en enkelt bit-flip. Men den er svak: hvis to bits flipper på riktig måte, kan de «nulle ut» hverandre uten å endre summen. Sjekksummen gir ingen garanti for at dataene er uendret — den gir bare en rimelig sjanse for å oppdage feil.

Hvorfor one's complement? One's complement-addisjon har en nyttig egenskap: den er rekkefølgeuavhengig. Du kan summere ordene i vilkårlig rekkefølge og få samme resultat. Dette forenkler implementeringen.
Sjekk forståelsen

Hva er en svakhet ved UDP-sjekksummen?

✶ ✶ ✶

Med transportlagets grunnprinsipper, multipleksing/demultipleksing og UDP på plass, er neste steg å forstå hvordan vi bygger pålitelighet steg for steg: Prinsipper for pålitelig dataoverføring.