Når to computere skal udveksle data, skal de være enige om en lang række ting: hvordan data pakkes, hvem der taler først, hvad et svar betyder, og hvad der sker, hvis noget går galt. De aftaler kaldes netværksprotokoller, og internettet er i bund og grund en stor samling af dem, der arbejder sammen.
Denne guide er et overblik: hvad en protokol er, hvorfor protokollerne er bygget i lag, hvordan de afhænger af hinanden, og hvordan de håndterer fejl. Undervejs henviser vi til de guides, der går i dybden med de enkelte protokoller.
Hvad er en protokol?
En protokol fastlægger tre ting: formatet (hvordan en besked ser ud, og hvor hvert felt står), rækkefølgen (hvem sender hvad hvornår) og betydningen (hvad modtageren skal gøre med beskeden). Tag en browser, der henter en side med HTTP. Formatet siger, at forespørgslen starter med en metode og en adresse. Rækkefølgen siger, at klienten spørger, og serveren svarer. Og betydningen siger, at svaret 404 betyder, at siden ikke findes. Fordi reglerne er skrevet ned og offentlige, kan en browser fra ét firma tale med en server fra et helt andet uden at de nogensinde har mødt hinanden.
Lag og indkapsling
Ingen enkelt protokol løser hele opgaven. I stedet er de organiseret i lag, hvor hvert lag løser ét problem og bygger på laget under. Nederst handler det om at få signaler over en ledning eller gennem luften. Derover om at finde vej mellem netværk, derover om at levere data pålideligt mellem to programmer, og øverst om det, programmerne faktisk vil sige til hinanden.
Lagene arbejder sammen gennem indkapsling. Når et program sender en besked, tilføjer hvert lag sit eget hoved med de oplysninger, det har brug for, og giver resultatet videre ned. Hos modtageren sker det omvendt: hvert lag læser og fjerner sit hoved og giver resten videre op.
Applikation [ HTTP-besked ]
Transport [ TCP-hoved | HTTP-besked ]
Internet [ IP-hoved | TCP-hoved | HTTP-besked ]
Link [ Ethernet | IP-hoved | TCP-hoved | HTTP-besked | Ethernet ]Det smukke ved det er, at lagene ikke behøver at kende hinanden. TCP ved ikke, om det bærer HTTP eller e-mail, og IP ved ikke, om pakken sendes over fiber eller wifi. Derfor kan et lag udskiftes eller forbedres, uden at resten skal ændres. Det er grunden til, at samme webside kan hentes over et mobilnet, et kabel eller en satellit. Nederst er det hele bare bits, som vi forklarer i guiden om binære tal.
Der findes to modeller for lagene. OSI-modellen har syv lag og bruges mest som fælles sprog og i undervisning. TCP/IP-modellen har fire og beskriver det, internettet faktisk er bygget af. Når nogen taler om “lag 3” og “lag 4”, mener de OSI’s netværks- og transportlag, som svarer til IP og TCP. Den praktiske model gennemgår vi i guiden om TCP/IP.
Med eller uden forbindelse
Protokoller kan groft deles i to familier. Forbindelsesorienterede protokoller, som TCP, starter med at etablere en forbindelse, før der sendes data. Begge parter ved derefter, at de taler sammen, og protokollen kan holde styr på, hvad der er modtaget, sende det manglende igen og levere alt i rækkefølge. Det ligner et telefonopkald: man ringer op, taler og lægger på.
Forbindelsesløse protokoller, som UDP og IP selv, sender hver besked for sig uden forudgående aftale, mere som at sende et postkort. Der er intet, der skal sættes op først og intet, der skal ryddes op bagefter, men heller ingen garanti for, at beskeden kommer frem.
Ingen af dem er bedre. En filoverførsel eller en hjemmeside skal komme frem hel, og så er det værd at betale for forbindelsen. Et DNS-opslag er ét spørgsmål og ét svar, og et videoopkald vil hellere miste et billede end vente på det, så der er den forbindelsesløse model det rigtige. Moderne protokoller som QUIC blander de to: de bygger en forbindelse oven på forbindelsesløs UDP for at få det bedste fra begge.
Netværkets arkitektur
Det meste på internettet følger klient-server-modellen: en klient, fx en browser, sender forespørgsler til en server, der svarer. Det er enkelt at styre og sikre, fordi data og logik ligger centralt. Peer-to-peer er alternativet, hvor alle deltagere både spørger og svarer, som i fildeling og nogle videoopkald. Det skalerer godt, men er sværere at styre.
Fysisk er netværk bygget op af lokalnetværk (LAN), som dit hjem eller kontor, forbundet af større netværk (WAN) og til sidst af internettets store knudepunkter. Lokalnetværk er i dag næsten altid bygget som en stjerne, hvor alle enheder er forbundet til en central switch eller et wifi-adgangspunkt. Hvordan enhederne finder hinanden på tværs af alt det, er et spørgsmål om adresser, som vi gennemgår i guiden om IP-adresser.
Hvordan protokollerne afhænger af hinanden
Selv noget så hverdagsagtigt som at åbne en hjemmeside på en bærbar, der lige er blevet tændt, trækker på en hel kæde af protokoller, og hver af dem skal lykkes, før den næste kan gå i gang:
- DHCP giver computeren en IP-adresse og fortæller, hvor routeren og DNS-serveren er.
- ARP finder routerens MAC-adresse på det lokale netværk.
- DNS oversætter hjemmesidens navn til en IP-adresse.
- TCP (eller QUIC) åbner en forbindelse til serveren.
- TLS krypterer forbindelsen og tjekker serverens certifikat.
- HTTP henter selve siden.
Kæden viser både styrken og sårbarheden. Hver protokol kan holdes enkel, fordi den kan regne med de andre. Men fejler ét led, stopper det hele, og fejlen viser sig ofte et helt andet sted, end den opstår. En DNS-server, der er nede, ligner for brugeren “internettet virker ikke”, selv om alt andet er i orden. Derfor er de protokoller, alle andre afhænger af, som DNS, også dem, der bygges med mest redundans.
Fejl og robusthed
Netværk er upålidelige af natur: pakker går tabt, bits bliver ødelagt, og servere går ned. Protokollerne er designet ud fra, at det vil ske. Kontrolsummer i pakkerne afslører data, der er blevet ødelagt undervejs. Kvitteringer og genafsendelse sikrer, at tabte data sendes igen. Timeouts sørger for, at en part ikke venter for evigt på et svar, der aldrig kommer, og mange protokoller har indbygget alternativer, så en klient kan prøve en anden server eller falde tilbage til en ældre version.
Der ligger også en designfilosofi bag, kendt som robusthedsprincippet (på engelsk): vær streng med det, du sender, og tolerant med det, du modtager. Det har gjort det muligt for tusindvis af forskellige implementeringer at arbejde sammen, men erfaringen har vist, at for meget tolerance kan skjule fejl og skabe sikkerhedshuller, så nyere protokoller er mere præcise i, hvad der er tilladt.
Hvem bestemmer protokollerne?
Internettets protokoller er åbne standarder. De fleste udvikles i IETF (Internet Engineering Task Force), hvor alle kan deltage, og beskrives i dokumenter kaldet RFC’er. Andre organisationer står for andre dele: IEEE for ethernet og wifi og W3C for mange webstandarder. At ingen enkelt virksomhed ejer protokollerne, har været vigtigt for, at internettet har kunnet vokse, som det har. Hvordan det er foregået, kan du læse i vores guide til protokollernes historie.