Skip to main content Spring til indhold

Sådan fungerer TCP/IP: IP, TCP og UDP forklaret

TCP/IP er fundamentet under næsten al kommunikation på internettet. Når du åbner en hjemmeside, sender en e-mail eller ringer over nettet, er det TCP/IP, der sørger for, at data bliver delt op i pakker, finder vej gennem et hav af netværk og bliver samlet korrekt igen hos modtageren.

Navnet dækker over en hel familie af protokoller, men tre af dem bærer det meste: IP, der finder vej, TCP, der sørger for, at alt kommer frem, og UDP, der ofrer garantierne for hastighed. Denne guide gennemgår alle tre. Er du helt ny i emnet, så start med vores introduktion til netværksprotokoller.

Lagene i TCP/IP-modellen

TCP/IP er bygget i lag, hvor hvert lag løser én opgave og stoler på, at laget nedenunder klarer sin. Et program, der sender en besked, behøver ikke vide, om den rejser over fiber, wifi eller mobilnet, og routeren, der videresender pakken, behøver ikke vide, om den indeholder en hjemmeside eller en e-mail.

LagOpgaveEksempler
ApplikationDet, programmerne taler omHTTP, DNS, SMTP, SSH
TransportLevering mellem to programmerTCP, UDP, QUIC
InternetAdressering og vej gennem netværkeneIPv4, IPv6
LinkSelve overførslen på det lokale netværkEthernet, wifi

Du vil også støde på OSI-modellen med syv lag. Den er en mere teoretisk opdeling, men lag 3 og 4 i OSI svarer til internet- og transportlaget her, og det er derfor, man taler om IP som “lag 3” og TCP som “lag 4”.

IP: at finde vej

IP (Internet Protocol) har én opgave: at få en pakke fra én computer til en anden, uanset hvor mange netværk der ligger imellem. Alt, der sendes over internettet, bliver delt op i pakker, og hver pakke får et IP-hoved med blandt andet afsenderens og modtagerens adresse. Til syvende og sidst er det hele bare bytes, altså bits med værdien 0 eller 1, som vi forklarer i guiden om binære tal.

Adressen er nøglen. En IP-adresse identificerer en netværksforbindelse og er opbygget, så den første del peger på et netværk og resten på en bestemt enhed i det. Hvordan adresserne er opbygget, og hvordan netværk deles op med subnetmasker, gennemgår vi i guiden om IP-adresser.

Ingen enkelt maskine kender hele vejen til modtageren. I stedet sendes pakken fra router til router. Hver router kigger på modtageradressen, slår op i sin routingtabel, hvilken nabo der er tættest på målet, og sender pakken videre dertil. En pakke fra København til en server i Frankfurt passerer typisk en række routere, og to pakker i samme samtale kan godt tage forskellige veje. For at en pakke ikke kan cirkulere for evigt, hvis routingen går i ring, har den en levetid (TTL i IPv4, hop limit i IPv6), som tælles ned for hver router og får pakken kasseret, når den når nul.

Det vigtigste at forstå ved IP er, hvad protokollen ikke lover. IP er “best effort”: pakker kan gå tabt, når en router er overbelastet, de kan ankomme i en anden rækkefølge, end de blev sendt, og i sjældne tilfælde kan de ankomme to gange. IP opdager det ikke og retter det ikke. Det er et bevidst valg, der holder routerne enkle og hurtige, og som overlader pålideligheden til laget ovenover, typisk TCP.

Pakkerne har også en maksimal størrelse, der afhænger af netværket (MTU), typisk omkring 1.500 bytes på almindelig ethernet. Er en pakke for stor til et netværk undervejs, skal den enten deles op eller sendes igen i mindre størrelse, og det er en af de klassiske kilder til svære netværksfejl.

I dag kører to versioner side om side. IPv4 har 32-bit-adresser og dermed omkring fire milliarder mulige adresser, hvilket for længst ikke er nok. IPv6 har 128-bit-adresser og et enklere pakkehoved, og en stadig større del af trafikken bruger den (på engelsk). For de fleste hjemmesider betyder det blot, at serveren bør være tilgængelig på begge.

TCP: pålidelig levering

TCP (Transmission Control Protocol) bygger et pålideligt lag oven på det upålidelige IP. For programmet, der bruger det, ser en TCP-forbindelse ud som et rør: bytes, der lægges ind i den ene ende, kommer ud i den anden, i samme rækkefølge og uden huller. Under overfladen arbejder TCP hårdt for at opretholde den illusion.

Det starter med, at de to parter etablerer en forbindelse med det såkaldte tretrinshåndtryk:

  1. Klienten sender en SYN-pakke med sit startnummer for sekvensen.
  2. Serveren svarer med SYN-ACK: den bekræfter klientens nummer og sender sit eget.
  3. Klienten svarer med ACK, og forbindelsen er åben.

Håndtrykket koster én rundtur, før der kan sendes data, og kommer der TLS-kryptering oveni, koster det mere. Det er en af grundene til, at nyere protokoller som QUIC forsøger at slå de to trin sammen.

Selve pålideligheden hviler på sekvensnumre og kvitteringer. Hver byte, der sendes, har et nummer, og modtageren fortæller løbende, hvor langt den har modtaget alt i rækkefølge. Kommer der ingen kvittering inden for en vis tid, eller ser afsenderen, at modtageren gentagne gange beder om den samme byte, sendes de manglende data igen. Pakker, der ankommer i forkert rækkefølge, holdes tilbage og sorteres, før de gives videre til programmet. En kontrolsum i hver pakke fanger data, der er blevet ødelagt undervejs.

TCP skal også undgå at sende hurtigere, end modtageren og netværket kan klare. Flowkontrol tager sig af modtageren: den annoncerer et vindue, der fortæller, hvor mange bytes den har plads til, og afsenderen holder sig inden for det. Overbelastningskontrol tager sig af netværket, som afsenderen ikke kan se ind i. En ny forbindelse starter forsigtigt og øger tempoet hurtigt, så længe alt går godt (slow start). Tabes der pakker, tolkes det som et tegn på, at en router undervejs er overbelastet, og tempoet sættes ned. Det er den mekanisme, der gør, at millioner af forbindelser kan dele de samme ledninger uden at kvæle hinanden, og den er også grunden til, at en frisk forbindelse ikke med det samme udnytter hele båndbredden.

Prisen for pålideligheden er ventetid. Fordi TCP afleverer alt i rækkefølge, må alle efterfølgende data vente, hvis én pakke går tabt, indtil den er sendt igen. For en filoverførsel er det lige meget, men for en videosamtale er et billede, der kommer for sent, værdiløst. Det er her, UDP kommer ind.

Når en af parterne er færdig, lukkes forbindelsen pænt med FIN-pakker i begge retninger, så ingen data går tabt i sidste øjeblik. Mange programmer holder dog forbindelsen åben og genbruger den, fordi det er dyrt at åbne en ny.

UDP: hurtigt og uden garantier

UDP (User Datagram Protocol) er TCP’s minimalistiske søskende. Der er intet håndtryk, ingen kvitteringer, ingen genafsendelse og ingen sortering: en UDP-pakke sendes afsted, og så er afsenderens arbejde gjort. Kommer den ikke frem, opdager UDP det ikke.

Det lyder som en dårlig handel, men det er præcis det, mange programmer har brug for. Et DNS-opslag er ét spørgsmål og ét svar, og det er hurtigere blot at spørge igen end at oprette en forbindelse først. Videoopkald, livestreaming og onlinespil vil hellere springe et tabt øjeblik over end vente på det. Og fordi UDP ikke bestemmer noget, kan programmer selv bygge den pålidelighed, de har brug for, ovenpå. Det er netop, hvad QUIC gør: den giver TCP’s garantier, men uden at én tabt pakke stopper alle andre, og den er grundlaget for HTTP/3.

Porte

IP-adressen får pakken frem til den rigtige maskine, men på maskinen kører mange programmer. Portnummeret i TCP- og UDP-hovedet afgør, hvilket program pakken er til. Servere lytter på faste porte, som webservere på port 443 for HTTPS og 80 for HTTP, SSH og SFTP på 22 og DNS på 53, mens klienten får en tilfældig port for hver forbindelse. Kombinationen af de to adresser og de to porte identificerer en forbindelse entydigt, og det er også porte, en firewall typisk åbner og lukker for.

En sidevisning fra start til slut

Lad os samle trådene og følge, hvad der sker, når du skriver en adresse i browseren og trykker enter.

Først skal navnet oversættes til en IP-adresse. Browseren spørger via DNS, typisk i en enkelt UDP-pakke til port 53, og får en adresse tilbage. Så åbner den en TCP-forbindelse til port 443 på den adresse med tretrinshåndtrykket, og oven på den forhandler den en krypteret TLS-forbindelse. Under det hele pakker IP hver eneste bid ind med afsender og modtager og sender den fra router til router, uden at nogen af dem ved, at der er tale om en hjemmeside.

Først nu kan browseren sende sin egentlige forespørgsel, en HTTP-besked, der beder om siden. Serverens svar deles op i mange TCP-segmenter, som hver får sit eget IP-hoved og måske tager forskellige veje. Går et af dem tabt, sender TCP det igen, og browseren får det hele i den rigtige rækkefølge uden at vide, at noget gik galt. Siden henviser til billeder, stylesheets og scripts, og for hver af dem gentages en del af processen, ofte over den samme forbindelse. Hvordan HTTP styrer den del, og hvordan HTTP/3 flytter det hele over på QUIC og UDP, kan du læse i vores guide til HTTP.

Ofte stillede spørgsmål

Er TCP/IP det samme som internettet?

Næsten. Internettet er netværket af netværk, og TCP/IP er de fælles regler, der får dem til at kunne tale sammen. De samme protokoller bruges også i lukkede netværk, fx på et kontor.

Hvornår bruger man UDP i stedet for TCP?

Når lav forsinkelse er vigtigere end, at alt kommer frem, som i opkald og spil, eller når programmet selv håndterer pålideligheden, som DNS og QUIC.

← Alle indlæg

Lad os høre mere om dig

Er din webshop langsom, ustabil eller bare svær at arbejde med? Skriv et par linjer, så får du en ærlig vurdering direkte fra udvikleren.