TCP/IP, sockets og klient-server-arkitektur.
Hvem snakker, og hvordan?
Når programmer kommuniserer over et nettverk – lokalt eller over internett – bruker de protokoller for å sikre at data sendes og mottas korrekt. Den grunnleggende modellen er klient-server-arkitekturen. Klienten sender forespørsler – det kan være en nettleser eller en app – og serveren mottar dem og sender svar. Når du ber om en nettside, sender webserveren HTML tilbake. Når Spotify-appen ber om en sang, streamer serveren musikk. Det avgjørende er at serveren alltid er i gang og venter, mens klienten starter samtalen.
Under dette ligger TCP/IP-modellen, en stabel med fire lag. Øverst er applikasjonslaget, der protokoller som HTTP, HTTPS, FTP og DNS bor – det laget programmet ditt jobber med direkte. Under det er transportlaget, der TCP og UDP håndterer levering og portnumre. Så kommer internettlaget, der IP står for adressering og ruting med IP-adresser. Og nederst er linklaget, den fysiske overføringen via Ethernet eller Wi-Fi. Når du sender data, pakker applikasjonslaget det inn, TCP deler det i segmenter og legger til portnummer, IP legger til adresser, og til slutt sendes det fysisk over nettverket. Hvert lag har sin oppgave.
TCP, UDP, adresser og porter
I transportlaget finnes to konkurrerende protokoller med ulik personlighet. TCP (Transmission Control Protocol) er pålitelig: den garanterer at data kommer frem, i riktig rekkefølge, med feilsjekking. Prisen er mer overhead og dermed lavere fart. TCP brukes til HTTP, e-post og filoverføring. UDP (User Datagram Protocol) er den raske, men hensynsløse motparten: mindre overhead, intet forbindelsesoppsett, men ingen garanti for at data kommer frem eller i riktig rekkefølge. UDP brukes til videostreaming, gaming og DNS. Tommelfingerregelen: bruk TCP når data må være korrekt, UDP når hastighet betyr mer enn perfeksjon.
For å finne fram trenger nettverket to typer adresser. En IP-adresse identifiserer en enhet – IPv4 ser ut som 192.168.1.10, mens IPv6 er lengre og gir langt flere adresser. Adressen 127.0.0.1, også kalt localhost, er alltid din egen maskin. Et portnummer identifiserer hvilken tjeneste på enheten du snakker med, fra 0 til 65535. De velkjente portene under 1024 er reservert: 80 for HTTP, 443 for HTTPS, 22 for SSH og 21 for FTP. Sammen skriver vi dem som IP:PORT, for eksempel localhost:5000. Slik kan én server tilby mange tjenester på samme IP, fordelt på ulike porter.
Sockets og HTTP under panseret
Grensesnittet mellom programmet ditt og nettverket kalles en socket – et endepunkt for kommunikasjon. En socket identifiseres av IP-adresse, portnummer og protokoll. En stream socket bruker TCP og gir en pålitelig toveis datastrøm, mens en datagram socket bruker UDP. Python har en innebygd socket-modul for slik lavnivåprogrammering. En enkel TCP-server lager en socket med socket.socket(socket.AF_INET, socket.SOCK_STREAM) – der AF_INET betyr IPv4 og SOCK_STREAM betyr TCP – binder seg til en adresse og port med bind(), gjør seg klar med listen(), og venter på en klient med accept(). Klienten lager sin egen socket og bruker connect() for å koble seg til. Deretter sendes data fram og tilbake med send() og recv().
Det fine er at HTTP, som vi har brukt så mye, egentlig bare er tekstmeldinger over TCP. En HTTP-forespørsel har en startlinje med metode, URL og versjon, deretter headere med metadata, en tom linje, og eventuelt en body. Svaret har en statuslinje, headere, en tom linje og en body. Sender du en rå HTTP-forespørsel med en socket til port 80, får du tilbake nøyaktig denne teksten. Men som du ser, er det mye manuelt arbeid å lage forespørselen, parse svaret, håndtere encoding og HTTPS. Derfor bruker vi requests-biblioteket, som gjør alt dette automatisk på én linje. Regelen er klar: bruk requests for HTTP og API-er i 99 prosent av tilfellene, og bare gå ned til sockets når du lager egne protokoller eller trenger full kontroll – som en chat-server, der hver klient gjerne håndteres i sin egen tråd.
Oppsummering
Vi tittet under panseret på nettverkskommunikasjon. Grunnmodellen er klient-server: klienten ber, serveren venter og svarer. Under ligger TCP/IP-modellen med fire lag – applikasjon, transport, internett og link. I transportlaget velger vi mellom TCP (pålitelig og ordnet) og UDP (rask, men upålitelig), mens IP-adresser identifiserer enheter og portnumre identifiserer tjenester (80 for HTTP, 443 for HTTPS).
En socket er endepunktet der programmet møter nettverket, og med Pythons socket-modul kan vi bygge enkle servere og klienter. Vi så at HTTP egentlig bare er strukturert tekst over TCP – men siden det er tungt å håndtere manuelt, bruker vi requests for nesten all HTTP-bruk, og reserverer sockets for egne protokoller. Med dette har du fullført seksjonen om API-er og nett. I neste seksjon går vi inn i databaser.
Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.