Nettverksprosessering er en av de mest ytelseskritiske aspektene av alle operativsystemer, enten det fungerer som en klient, server, ruter, eller brannmur.
- Vet du hvordan en brannmur håndterer nettverkspakker?
I begynnelsen av internett, typisk hastighet lå på 14kbps (kilobits per sekund) (1993), deretter 512kbps (2000 – Introduksjonen av ADSL), 2Mbps (megabits per sekund) (2005), og det eskalerte til 500Mbps (2015 – Introduksjon av fiber-optikk).
Vi er nå på et stadium der store virksomheter krever enda høyere hastighet, en hastighet på terabits per sekund. Nettverks-stakken er derfor i kontinuerlig utvikling for å øke kapasiteten for å håndtere flere nettverkspakker samtidig som sikkerheten opprettholdes.
Hvorfor er det derfor viktig å vite om nettverks-stakken?
Feil eller dårlig implementasjon av programvare og sikkerhetsløsninger vil skape treghet og innvirke drift. Istedenfor å oppnå 10+ Gbps prosesseringsevne, oppnår man kun ytelsesevne på 1Gbps.
La oss definere to nøkkelbegreper: Kernel Space og User Space.
Fundament i systemsikkerhet: Separasjon mellom Kernel og User Space
Skillet mellom Kernel Space (kjernen) og User Space er en grunnleggende designbeslutning i operativsystemer. Dette har en direkte påvirkning på ytelse og databeskyttelse i hvordan nettverkspakker blir håndtert.
Kernel Space har full tilgang til maskinen, inkludert:
Fysisk minnehåndtering og virtuell adressering
Hardware interrupt og driverbehandling
Nettverkspakkehåndtering, med tilhørende protokoller
Sikkerhetskontroll og filtrering
User Space er et begrenset miljø:
Applikasjoner kjører innenfor et beskyttet minneområde
Aksess til minne er håndtert gjennom systemkall til kjernen.
Nettverkstilgang skjer gjennom sockets, API fra kjernen.
Analogi – Husinndeling:
Se for deg huset ditt med inngang, stue, kjøkken og oppholdsrom; Inngangen er kjernen, og rommene er applikasjoner med best formål (User Space).
Operativsystem skiller minne inn i to deler (over-simplifisert): Kjerne- og applikasjonsområde. Applikasjoner i User Space kan ikke aksessere kjerneminne direkte.
Men med bruk av spesielle drivere kan applikasjonen aksessere et delt minneområde hva nettverkspakkene blir lagt. Men dette er ikke standard metode i operativsystemer.
For at applikasjoner skal håndtere pakker fra nettverkskortet må data ifra kjerneminnet kopieres over til user-space minne. Denne operasjon tar tid og krever litt av CPUen og gjennomføre, og derfor kan båndbredden bli begrenset under slike operasjoner.
Analogi – Pakkeflytting
En stor pakke ankommer foran døren, og du får den bæret inn i gangen (kjernen). Deretter er du nødt til å flytte den inn i riktig rom (user space), noe som krever litt energi. Se for deg at du får en del slike store pakker, og det blir veldig slitsomt etter hvert.
Det er en metode som kalles zero-copy aksess. Denne metoden gjør det mulig for applikasjoner i user space å aksessere direkte nettverksbufferen, noe som eliminerer kopiering fra kjerneminne til user space minne.
Når en slik metode blir brukt, så blir et minnesegment allokert med delt tilgang for applikasjoner. Nettverkspakker som kommer inn blir plassert på det minnesegmenet, tilgjengelig for håndtering av både kjernen og eventuelle applikasjoner.
Det sparer CPUen millioner av sykluser (cycles) ved bruk av denne metoden, avhengig av implementasjon.
Analogi – Etterlate bokser i gangen
Istedenfor å flytte bokser inn hvert tildelte rom, så kan personen som vil ha pakken komme å håndtere den selv. Pakken blir da værende i gangen.
Når nettverkspakker ankommer nettverksporten, NIC kontrolleren vil da sende et interrupt signal til CPUen. Kjernen vil deretter prosesser pakkene gjennom nettverks-stakken.
Analogi – Interrupt håndtering
Bildet ovenfor viser at 8 CPU kjerner blir overbelastet med håndtering interrupt signalkø (si), og prosessen ansvarlig er ksoftirqd. Årsaken til signalkøen er en backlog av datapakker, og dette vil redusere tilgjengelig ressurser for kjørende applikasjoner.
Dette er ikke så vanskelig å få til. Ved å sende mange små pakker (single flow) til en maskin med en av disse metodene:
hping3 -S -p 80 --rand-source --flood target_ip
nmap -sS --max-rate 10000 -p 80 target_ip
Analogi – Konstante avbrudd
Se for deg at 50 postmenn møter opp hyppig etterhverandre, og alle sammen skal ringe på dørklokken.
Du blir konstant avbrutt fra det du holder på med
Du bruker mesteparten av tiden på å svare på døren
Matlaging og TV-titting blir det liten tid til
Dette er det som skjer under et tjenestenektangrep – CPUen bruker mesteparten av tiden med å håndtere interrupt signaler.
Denne fasen er en av de stadiene hvor vi kan implementere kontrollfunksjoner for å håndtere store mengder trafikk (DoS). Det er to steg i denne fasen: (1) klassifisering og (2) forming.
Hva er nettverks-klassifisering?
Klassifisering er prosessen med å kategorisere nettverkspakker in i forskjellige classes og flows basert på forskjellige egenskaper som:
Lag 3/4 Headers: Source/Destination IP addresser, protokoll type (TCP/UDP/ICMP), port numre
Lag 2 Informasjon: VLAN tagger, MAC addresser, nettverksport ID
QoS Markering: DSCP (Differentiated Services Code Point), Traffic Class, IP precedence
Flow karakteristikk: Pakkestørrelse, ankomsttid, koblingsstatus
Hva er nettverks-forming?
Traffic shaping kontrollerer hvordan nettverkspakkene flyter:
Frekvensbegrensning: Setter en begrensning på antall pakker i sekundet (båndbredde)
Burst kontroll: Utjevner trafikk spikes ved bruk av algoritmer
Køhåndtering: Organiserer nettverkspakker in prioritert rekkefølge
Overbelastning unngåelse: Kaste nettverkspakker før køen overfylles
Forsinkelse: Legge til kontrollert forsinkelse på spesifiserte trafikkgrupper
Målet med denne fasen – “Device Processing” – er å optimalisere nettverksytelsen imens kritiske systemer får prioritert båndbredde.
Analogi – Forskjellige typer gjester (Nettverkspakker)
Nødtjenester (high-priority packets):
Alltid er rask med svare og oppmerskom
Vanlig postbud (normal packets):
Håndterer det i rolig, normal tilstand
Tulle-ringere (junk packets):
Prøver å bruke minst mulig energi på dem
«Policy Engine» er et kontrollpunkt i kjernen hvor nettverkspakker blir håndtert imot regler i en definert rekkefølge. Reglene bestemmer hva som skal tillates, kastes, endres på, eller sende videre til et program for dypere analyse.
Analogi – Husregler
Du har regler og en standard i hjemmet ditt, på hva som er tillat. Du tar for eksempel ikke inn en boks som har insekter i seg. Eller hvis pakken ikke inneholder noe du har bestilt, så kommer du kanskje til å returnere den eller kaste den.
Og når du bor med andre, så holder sikkert et øye med hvem som bestiller hva. Når partneren din bestiller en rekke med pakker så vet du at det er til han/henne, atter en gang.
Etter at filtrering og policy listen er utført, blir hver pakke underlagt en rutings-beslutning. En av de viktigste valgene i en slik beslutning er enten:
Lokal mottakelse: Nettverkspakker som er angitt med en lokal adresse går denne veien. Pakkene blir levert til en applikasjon som lytter på en socket.
Videresending: Nettverkspakker med adresse som ikke tilhører system går via denne veien. Transit-pakker blir sent ut en annen nettverksport i henhold til ruting tabell.
Disse valgene blir håndtert ved at system slår opp i ruting tabellen (Forwarding Information Base/FIB). Ruting tabellene kartlegger destinasjonsadresse til enten lokalhåndtering, utgående nettverksport og next-hop gateway.
Ruting oppslag og Policy
Vanlig rutingsoppslag involverer spørringer om lengste prefiks-treff mot en eller flere rutingstabeller. Men det er ikke den eneste måte å gjøre det på, systemene har også støtte for:
Policybasert ruting: Beslutninger er basert på mer enn bare destinasjons IP, for eksempel: nettverksport, source-IP, eller merker/tags.
Virtuell ruting/VRF: Segregerte "rutingdomener" på ett system.
Flerveis ruting: Pakken kan bli sendt til flere tilgjengelige destinasjoner.
Merk: «Policy Engine» kan påvirke nettverkspakkene både før og etter nettverksruting.
Analogi – Kjent mottager
Det er naturlig at du er klar over dem som bor i sammen med deg, og du er litt kjent med naboene dine. Så når det kommer en pakke på døren så vet du om den skal til en i huset, eller om den er feilplassert og du legger den foran naboens dør.
Når nettverkspakken har passert hele kjernens nettverkssystem, ender nettverkspakken i brukerapplikasjonen. Denne overgangen fra kjernen til User Space foregår via Sockets.
En Socket er en abstraksjon formidlet av kjernen for å forenkle nettverkskommunikasjon. Brukerapplikasjonen vil starte kommunikasjonen med å opprette en socket som enten skal opprette kobling eller lytte til innkommende tilkoblinger.
Når et signal fra kjernen blir utløst (SoftIRQ) og blir videresendt til applikasjonen, vil applikasjonen vite at det er nødvendig å lese fra minne til socket’en. Pakkene vil deretter blir håndtert i henhold til den programmerte logikken i applikasjonen. Og som oftest vil applikasjonen være programmert til å sende et svar igjennom den samme socket som nettverkspakken kom på.
Analogi – Å gi en pakke
Når du har fått en pakke innenfor gangen, roper du ut mottakerens navn og begynner å bære pakken inn. Du vet hvilket rom du skal gå til, med pakken. Når du kommer inn i rommet finner du en ledig plass å legge pakken. Mottageren av pakken vil deretter åpne og håndtere den slik mottageren ønsker.
Primære prosesseringssteg:
Fysisk Lag – Mottak av nettverkspakker og signal generering
Driver Lag – OS-spesifikk nettverksdriver-prosessering
Valgfri “Fast-Path Bypass”– Høytytende nullkopieringsmekanisme
Reinjeksjon – Mekanisme for å returnere pakker tilbake til nettverksstakken
Device Processing - Trafikkontroll, forming, køhåndtering
Valgfri Overvåkings Tap– Passiv pakkefangst for analyse
Policy Engine – Sikkerhetsregler, brannmur, NAT, og tilgangskontroll
Nettverksruting – Bestemme pakkedestinasjon (lokal vs videresending)
Socket tilkobling – Tilkobling til lyttende eller etablert socket
Applikasjonsbehandling – Applikasjon mottar pakker fra
socketAnalogisammendrag: Hjemlevering
Nettverksstakken har blitt representert som et organisert hus som mottar pakker ved inngangsdøren (nettverksport).
Inngangen (Kernel Space): Hver pakke må først stoppe ved inngangen for å bli håndtert av deg. Du har full oversikt over hvem som bor i huset.
Dørklokke (Interrupts): Når du mottar en pakke, blir du alltid varslet av dørklokken. Men det kan hende at mange leveranser ankommer hyppig, og du vil bli avbrutt og distrahert fra viktig arbeid.
Ulike besøkende (Pakketyper): Du vet, ved å se på pakkene, hvilke som er viktige og hvilke som ikke er det. Basert på dette kan du prioritere én av dem foran den andre.
Flytte esker inn (Minnekopiering): Du må drasse hver pakke fra inngangen gjennom smale ganger (kernel-user space kopiering), noe som tar krefter og tid.
Alternativ: Behandling ved døren (Zero-Copy): Riktig person kommer til inngangen for å hente pakken sin direkte, noe som sparer tid og energi.
Husregler (Security Policies): Du har standarder i huset – avvis feil, rapporter uventede leveranser, godtar pakker adressert til kjente beboere og videresender nabopakker etter behov.
Sende den videre (Socket): Etter at pakken er godtatt, havner den hos den tiltenkte mottakeren (applikasjonen) som åpner den og får innholdet.