Homelab / InfraAI-generated

Hoe kabelinternet werkt: DOCSIS over de coax

Kabelinternet komt binnen over dezelfde coaxkabel die ooit alleen televisie bracht. Er is geen aparte draad voor data bijgelegd: je modem pikt een paar kanalen uit hetzelfde frequentiespectrum waar ook tv-zenders in zitten. De techniek die dat regelt heet DOCSIS, Data Over Cable Service Interface Specification.

In dit artikel lopen we het pad van de wijkkast naar je modem langs. Je ziet hoe één tv-kanaal van 8 MHz ruim 51 Mbit/s oplevert, waarom een modem er meerdere tegelijk gebruikt, hoe alle modems in een wijk om beurten iets terugsturen zonder door elkaar te praten, en waarom de snelheid kan zakken als de buren ook online zijn. De getallen komen uit de ITU-T-normen voor DOCSIS 3.0 (J.222.1 en J.222.2) en uit eigen rekenwerk.

Glas tot in de wijk, coax het laatste stuk

Een kabelnet is een hybride net: glasvezel vanaf de centrale tot een fibre node in de wijk, en vanaf daar coax naar de huizen. De norm noemt dat HFC, hybrid fibre/coax, met een boomstructuur: één stam die zich steeds verder vertakt. Aan het begin staat de CMTS (cable modem termination system), bij jou thuis het kabelmodem. De norm beschrijft de taak van het modem simpel: pakketjes doorgeven tussen het kabelnet en je thuisnetwerk.

Bij het opstarten haalt het modem zijn IP-adres via DHCP, net als je laptop op wifi, en daarna een configuratiebestand van de provider. Daarin staan onder meer de snelheidsgrenzen voor je verkeer.

Eén tv-kanaal is 51 Mbit/s

Europese kabelnetten werken met kanalen van 8 MHz, de breedte van een analoog PAL-tv-kanaal. DOCSIS 3.0 heeft daarvoor een aparte variant in Annex B van J.222.1. Data mag daarin tussen 108 en 862 MHz zitten. Per kanaal gelden deze waarden:

ParameterWaarde
Kanaalbreedte8 MHz
Modulatie64-QAM of 256-QAM
Symboolrate6,952 miljoen symbolen per seconde
FoutcorrectieReed-Solomon (204,188)

Bij 256-QAM kan elk symbool een van 256 combinaties van amplitude en fase aannemen. Dat zijn 8 bits per symbool. Met 6,952 miljoen symbolen per seconde is dat bruto 55,6 Mbit/s. De foutcorrectie voegt aan elk blok van 188 bytes 16 controlebytes toe, zodat er 204 bytes over de lijn gaan. Netto blijft er 51,3 Mbit/s over, nog vóór de headers van de datapakketjes zelf.

Het signaal past precies in het kanaal. De norm schrijft een roll-off van 15 procent voor: het signaal is 15 procent breder dan de symboolrate. 6,952 MHz keer 1,15 is 7,99 MHz, net onder de 8 MHz.

Kanalen bundelen

Met 51 Mbit/s per kanaal kom je niet ver. De grote stap van DOCSIS 3.0 was channel bonding: het modem ontvangt meerdere kanalen tegelijk en de CMTS verdeelt de pakketjes erover. De norm eist minimaal vier downstream-kanalen binnen een venster van 64 MHz, en vier kanalen voor de weg terug. CableLabs, de organisatie achter DOCSIS, rekent met een modem dat 32 kanalen bundelt. In Europese 8 MHz-kanalen is dat 32 keer 51,3, ofwel 1,64 Gbit/s.

De weg terug is smal

Voor verkeer van je modem naar de centrale is in de Europese variant van DOCSIS 3.0 alleen de band van 5 tot 65 MHz beschikbaar, tegenover 108 tot 862 MHz voor de weg naar beneden.

Bovendien: naar beneden is er één zender: de CMTS. Naar boven willen alle modems in de wijk tegelijk iets kwijt, op hetzelfde stuk coax. Als twee modems op hetzelfde moment op dezelfde frequentie zenden, verstoren ze elkaar. DOCSIS lost dat op met een strak tijdrooster dat de CMTS bijhoudt.

Toestemming vragen voor elk stukje upload

De weg terug is opgedeeld in mini-slots, kleine tijdvakjes die genummerd zijn ten opzichte van een klok in de CMTS. Die stuurt steeds een MAP-bericht naar beneden, een soort dienstregeling. Daarin staat per reeks mini-slots wie mag zenden. Sommige zijn toegewezen aan een bepaald modem, andere zijn vrij om bandbreedte aan te vragen, en weer andere zijn bedoeld voor nieuwe modems die zich aanmelden.

Wil je modem iets versturen, dan vraagt het eerst toestemming in zo'n vrij aanvraagvak. Twee modems kunnen daar toevallig tegelijk vragen. De norm staat dat toe. Krijgt een modem geen toewijzing terug in een volgende MAP, dan gaat het ervan uit dat er een botsing was. Het wacht dan een willekeurig aantal aanvraagkansen, en bij elke nieuwe poging verdubbelt de bovengrens van dat aantal, tot een maximum dat de CMTS in de MAP meegeeft. De norm geeft een voorbeeld: een modem met een wachtvenster van 0 tot 15 kiest 11 en slaat dus elf aanvraagkansen over.

Is er eenmaal een toewijzing, dan kan het modem bij het volgende pakketje meteen een nieuwe aanvraag meesturen (piggyback). Welk modem wanneer aan de beurt komt, laat de norm aan de fabrikant van de CMTS over.

Waarom kabelinternet 's avonds trager kan zijn

Alle modems die aan dezelfde fibre node hangen, krijgen dezelfde set kanalen. J.222.2 noemt dat een cable modem service group en zegt erbij dat die in de praktijk meestal samenvalt met één fibre node. De 1,64 Gbit/s uit het voorbeeld hierboven is dus niet van jou alleen. Het is de totale capaciteit voor iedereen in dat stuk wijk.

Je abonnement is een maximum. In het configuratiebestand staat per verkeersstroom een Maximum Sustained Traffic Rate, en daar houdt de CMTS je aan. Zolang de buren weinig doen, haal je dat maximum. Gaan om acht uur 's avonds veel mensen tegelijk streamen, dan moet de CMTS de beschikbare kanalen verdelen en zakt jouw deel. Het is hetzelfde principe als bij wifi als gedeeld medium en bij glasvezel met GPON, waar ook tientallen huizen één vezel delen. Minder huizen per node of meer kanalen voor data betekent dus meer capaciteit per huis.

DOCSIS 3.1: weg met de vaste kanalen

DOCSIS 3.1, door CableLabs uitgebracht in 2013, breekt met het idee van losse tv-kanalen. In plaats daarvan gebruikt het OFDM: één breed blok met heel veel smalle draaggolven naast elkaar. Op de weg terug is dat OFDMA, waarbij meerdere modems tegelijk verschillende draaggolven gebruiken. Daarnaast komen er hogere modulatieordes en een andere foutcorrectie, LDPC.

Volgens CableLabs moet een 3.1-modem minstens twee OFDM-kanalen ondersteunen. Een typisch modem met twee OFDM-kanalen plus 32 klassieke kanalen haalt theoretisch 5 Gbit/s naar beneden en 1,7 Gbit/s naar boven. Ook noemt CableLabs Active Queue Management, dat volgens hen de vertraging flink verlaagt.

Zelf proberen

Het rekenwerk per kanaal kun je met een paar regels Python nadoen:

symboolrate = 6.952e6          # symbolen per seconde, 8 MHz-kanaal
bits = 8                       # 256-QAM: 2^8 punten
bruto = symboolrate * bits
netto = bruto * 188 / 204      # Reed-Solomon (204,188)
print(f"bruto per kanaal:  {bruto/1e6:.1f} Mbit/s")
print(f"na foutcorrectie:  {netto/1e6:.1f} Mbit/s")
for n in (8, 24, 32):
    print(f"{n:2d} kanalen gebundeld: {n*netto/1e6:.0f} Mbit/s")
bruto per kanaal:  55.6 Mbit/s
na foutcorrectie:  51.3 Mbit/s
 8 kanalen gebundeld: 410 Mbit/s
24 kanalen gebundeld: 1230 Mbit/s
32 kanalen gebundeld: 1640 Mbit/s

Wil je zien of jouw lijn 's avonds inzakt, meet dan een paar keer per dag dezelfde download. Dit haalt 25 MB op bij Cloudflare en rekent de snelheid om naar Mbit/s:

while true; do
  printf "%s " "$(date +%H:%M)"
  curl -4 -s -o /dev/null -w "%{speed_download}\n" \
    "https://speed.cloudflare.com/__down?bytes=25000000" \
    | awk '{printf "%.0f Mbit/s\n", $1*8/1e6}'
  sleep 900
done

Vanaf een Nederlandse verbinding (geen kabel), met sleep 5 in plaats van 900, gaf dat op een zondagochtend:

05:35 412 Mbit/s
05:35 405 Mbit/s
05:36 422 Mbit/s

Laat het een dag draaien. Zit je op kabel en zie je rond de avond een duidelijke dip die 's nachts weer verdwijnt, dan is de kans groot dat je de gedeelde capaciteit van je node ziet. Meet wel via een netwerkkabel: drukke wifi thuis geeft hetzelfde effect.

Tot slot

Wat me het meest verraste bij het lezen van de norm, is hoe sterk de weg terug op een dienstregeling lijkt. Een kabelmodem zendt niet zomaar wat het kwijt wil: het vraagt eerst toestemming en wacht tot de CMTS een tijdvak toewijst. Alleen dat vragen mag botsen. En tot en met DOCSIS 3.0 is de bouwsteen voor data naar beneden in Europa gewoon een analoog tv-kanaal van 8 MHz. Pas 3.1 laat die maat los.