Dette indlæg er skrevet som en del mit PhD-kursus i populærvidenskablig formidling, og er oprindeligt publiceret på videnskab.dk.

Forestil dig en verden hvor internettet altid er tilgængeligt, uden forsinkelser, udfald eller andre irritationsmomenter. Det er denne fremtidsvision som et hold af internationale forskere arbejder på at gøre til virkelighed.

De fleste har prøvet det: “klumper i strømmen” som tilsyneladende helt uden grund får internetforbindelsen til at virke langsom, så man føler sig hensat til 90’ernes larmende modem-æra. Sekunder senere virker alting igen, men så er det for sent – man er blevet fragget, eller venindens ansigt på videochatten er blevet til små hakkende blokke og stemmen lyder som en robot med alvorlig halsbetændelse.

Hvorfor kan det ikke bare virke? Det kan vel ikke være så svært? Lige præcis sådan tænker en gruppe internationale forskere som arbejder på at udvikle teknik der kan få internettet til bare at virke – hele tiden. Blandt andet arbejder forskerne med at gøre de routere der styrer trafikken på internettet mere intelligente. Dermed kan man undgå en hyppig årsag til problemer: noget så simpelt og dagligdags som kødannelse.

Mere end båndbredde

Når en internetudbyder reklamerer for “hurtigt internet”, er den primære målestok for hastigheden båndbredde, dvs. hvor meget data der kan sendes per sekund, typisk målt i megabit. Men i praksis er der et andet tal der også har stor betydelse, nemlig forsinkelsen, eller den tid det tager for et signal at nå frem til modtageren. Tænk på et vandrør: båndbredden svarer til hvor meget vand der kan komme igennem per sekund (som afgøres af rørets diameter), mens forsinkelsen er den tid det tager en dråbe vand at løbe igennem røret (som afgøres af hvor hurtigt vandet bevæger sig). Forsinkelsen er især afgørende for ting der er interaktive, dvs. som mennesker skal vente på, fx en telefonsamtale, et computerspil eller almindelig surfen på nettet.

Når data sendes over internettet bliver det splittet op i små pakker, som sendes hver for sig. Ind imellem kan der opstå en flaskehals et sted i nettet, og pakkerne er derfor tvunget til at stå i kø. Hvis denne kø bliver for lang skaber det ekstra forsinkelse, som er det vi oplever som mystiske udfald i forbindelsen. Kødannelsen opstår altså når der sendes mere data end der er båndbredde til. På den måde kan båndbredde og forsinkelse påvirke hinanden, og det gælder derfor om at få alle computere der er koblet til nettet til at sende data med lige præcis den båndbredde der er tilgængelig på det givne tidspunkt.

Dette besværliggøres af at internettet består af en række forskellige netværk, der i princippet er helt uafhængige af hinanden, og som deles af mange brugere. Det betyder at en computer som skal sende data gennem nettet ikke på forhånd kan vide hvor stor båndbredde der faktisk er til rådighed, og dermed med hvilken hastighed den skal sende. Derfor er de protokoller der styrer trafikken på nettet programmeret til at prøve sig frem. Ved at starte langsomt, og derefter eksponentielt øge hastigheden, kan en afsender meget hurtigt finde ud af hvor meget båndbredde der faktisk er til rådighed.

Men hvordan finder en afsender så ud af at den har fundet frem til den tilgængelige båndbredde? Ganske simpelt ved at antage at hvis man sender data hurtigere end der er båndbredde til, er der nogle af de afsendte pakker som ikke når frem. Modtageren sender en bekræftelse tilbage for hver pakke der når frem, så hvis en bekræftelse udebliver kan afsenderen registrere det. Så hvis fx pakkerne med nummer 1, 3 og 4 bliver bekræftet, men pakke nummer 2 ikke gør, kan afsenderen gå ud fra at den er gået tabt på vejen. Dette fortolkes som at den tilgængelige båndbredde er overskredet og afsenderen sætter hastigheden ned – og sender derefter den tabte pakke igen.

Denne fremgangsmåde betyder at en lille smule data skal sendes flere gange. Men i praksis er mekanismen ganske effektiv, så længe den centrale antagelse holder: at pakker går tabt så snart den tilgængelige båndbredde overskrides. Og det er her kødannelse kan give problemer. For hvis der et sted på vejen opstår en lang kø, går der længere tid fra båndbredden overskrides til der går data tabt, og afsenderen kan derfor ikke reagere i tide og sætte hastigheden ned. Når køen så endelig er fuld og pakkerne går tabt, er det allerede for sent: De efterfølgende pakker er nødt til at vente på at køen bliver afviklet, og det kan tage adskillige sekunder – nok til at skabe de irriterende udfald.

Forbindelserne på hver side af en router kan have forskellig båndbredde, så der opstår en flaskehals for den trafik som passerer gennem routeren. Pakkerne må  derfor stå i kø og vente på at de kan komme igennem flaskehalsen. Her må den røde pakke må vente på de blå pakker før den kan komme igennem flaskehalsen.

Forbindelserne på hver side af en router kan have forskellig båndbredde, så der opstår en flaskehals for den trafik som passerer gennem routeren. Pakkerne må derfor stå i kø og vente på at de kan komme igennem flaskehalsen. Her må den røde pakke må vente på de blå pakker før den kan komme igennem flaskehalsen.

Smarte køer

Men hvis det er lange køer der er problemet, kan man så ikke bare gøre dem mindre? Desværre er det ikke så simpelt. For hvor stor skal køen egentlig være? Det der kan være en passende kø for en transatlantisk forbindelse er alt for stor for en almindelig forbrugers internetforbindelse. Og man kan ikke helt undgå køer: på samme måde som en tragt gør det nemmere at hælde vand fra en stor beholder ned i en lille flaskehals, kan en midlertidig kø hjælpe når datapakker skal fra en hurtig til en langsommere forbindelse. Det er når køen bliver for lang, eller ikke forsvinder igen, at problemet opstår.

Man må altså skelne mellem den “gode kø” som fungerer som en tragt, og den “dårlige kø” som giver forsinkelser. Og eftersom køen opstår inde i internettets routere, er det dem der skal gøres mere intelligente. En sådan intelligent router holder hele tiden øje med hvordan køen udvikler sig, og reagerer ved at smide en pakke ud så snart køen begynder at vokse. Herefter holder routeren øje med om det faktisk får afsenderen til at sætte farten ned, og køen dermed holder op med at vokse. Hvis ikke, smider routeren flere pakker ud med kortere og kortere mellemrum – indtil afsenderen opfatter signalet og sætter farten ned.

Denne teknik hedder aktiv køstyring (forkortet AQM for Active Queue Management på engelsk). Teknikken kan kombineres med andre metoder til smart kø-styring som tilsammen kan forbedre netværkets ydelse markant – og i mange tilfælde stort set eliminere problemet med unødig kødannelse. I løbet af de sidste par år har forskere fra hele verden foreslået en række forskellige fremgangsmåder, eller algoritmer, der forsøger at løse problemet. De virker alle efter nogenlunde det princip der er beskrevet ovenfor, men har forskellige måder at gribe det an på.

På vej mod det pålidelige internet

Selvom de nye metoder giver lovende resultater, kan der desværre gå noget tid inden visionen om et pålideligt internet der altid virker bliver til virkelighed. For de nye algoritmer skal installeres alle steder i netværket der kan opstå kø – og det er stort set overalt. Det drejer sig om i hundredevis af millioner af enheder. Nogle af dem kan opgraderes, mens andre skal skiftes ud. Og det tager tid.

For at gøre teknologien tilgængelig for flest mulige har udviklerne af algoritmerne gjort dem frit tilgængelige for alle, og de indgår i open source-operativsystemet Linux, som også har dannet base for en stor del af forskningen i køstyring i nettet. Er man teknisk indstillet kan man allerede nu downloade softwaren med de nye algoritmer og installere den på sin router derhjemme. Men de fleste vil nok vente på at deres internetudbyder skifter routeren ud, og der kan altså gå noget tid inden det sker.

Derudover er der andre faktorer der kan bidrage til forsinkelse i netværket. Internettet er formentlig den mest komplekse maskine menneskeheden nogensinde har bygget, og det ændrer sig konstant i takt med at teknologien udvikles og mere og mere foregår via nettet. I løbet af de seneste år er der kommet et øget fokus på at sikre pålidelighed og forhindre forsinkelser. Arbejdet med at forhindre kødannelse har været en del af dette, og forskere og udviklere fra hele verden arbejder intensivt med at skabe teknologi der kan understøtte fremtidens krævende interaktive applikationer. Målet er klart: Et internet som altid virker.