9.1. Waarom netwerken¶
Hardwarebesturing gaf de camera manieren om met een specifiek ander apparaat op een specifieke andere draad te praten. UART tussen de camera en één begeleidend bord. I2C tussen de camera en de sensoren die aan dezelfde korte bus hangen. CAN tussen een kleine set modules die één robuuste bus delen. Elk geval volgt dezelfde vorm: twee partijen (of een kleine bekende groep), één gedeeld medium, een afspraak tussen hen over wat de bytes op dat medium betekenen.
9.1.1. Die vorm houdt op te schalen¶
Het punt-naar-puntpatroon werkt zolang beide kanten dichtbij zijn, beide kanten van tevoren bekend zijn, en het script mag kiezen langs welke draad het praat. Zodra een van die beperkingen wegvalt, is de bedrading niet meer genoeg.
Veel tegenpartijen. Een netwerk van vijftig camera’s die aan één server rapporteren kan niet één-op-één bedraad worden; er zijn niet genoeg UART’s op de server, en de kabelroutes zouden onmogelijk zijn.
Tegenpartijen niet op dezelfde draad. Een camera in een fabriek en een dashboard in een kantoor aan de andere kant van de stad kunnen geen seriële kabel delen. Er moet een pad tussen hen bestaan via welke infrastructuur dan ook die al tussen de twee gebouwen loopt.
Tegenpartijen niet van tevoren bekend. Een camera die zijn resultaten naar de cloud publiceert kiest niet in het bedradingsschema met welke server hij praat; het adres van de cloud is iets dat het script tijdens runtime opzoekt en waar het data naartoe routeert.
Veel programma’s op één kabel. Een laptop draait tegenwoordig een browser, een chat-app, een videogesprek en een back-up, die allemaal tegelijk via dezelfde netwerkinterface praten. De draad kan niet “eigendom” zijn van één gesprek zoals een UART dat is.
Elk van die mislukkingen is een ander soort adresseringsprobleem. Ze allemaal samen oplossen vereist meer dan een draad en een baudrate.
9.1.2. Wat een netwerk is¶
Een netwerk is de infrastructuur waarmee elk van een groot aantal computers berichten kan uitwisselen met elk ander, zonder dat elk paar zijn eigen toegewijde verbinding nodig heeft. Drie eigenschappen maken van een netwerk iets meer dan een grote seriële kabel:
Gedeeld medium. Veel apparaten zijn aangesloten op dezelfde kabel, switch of radiokanaal. Ze nemen om de beurt of multiplexen zodat er meer dan één gesprek op dezelfde fysieke verbinding past.
Logische adressen. Elk apparaat heeft een nummer dat het identificeert onafhankelijk van op welke kabel het is aangesloten. Een bericht versturen betekent dat nummer op het bericht schrijven, niet een specifieke draad aansluiten.
Routing. Wanneer de zender en de ontvanger zich niet op hetzelfde lokale segment bevinden, draagt de infrastructuur tussen hen het bericht hop voor hop over. De eindpunten kennen de route niet; ze kennen alleen elkaars adres.
Een laptop op de Wi-Fi van het kantoor die een server in een ver datacentrum bereikt, gebruikt alle drie. De Wi-Fi-verbinding is een gedeeld radiomedium; de laptop en de server hebben elk hun eigen logische adres; het bericht baant zich een weg door welke infrastructuur dan ook die zich tussen de twee bevindt, hop voor hop doorgestuurd. De gebruiker klikt op een link, de laptop stuurt een pakket, en het netwerk regelt de rest.
9.1.3. En de cam dan?¶
De camera speelt op een netwerk precies dezelfde rol als de laptop. Hij pikt een logisch adres op wanneer hij het netwerk binnengaat, adresseert uitgaande berichten aan de logische adressen van andere apparaten, en laat de infrastructuur ze routeren.
Wat verandert ten opzichte van de hoofdstukken over hardwarebesturing is de interface. In plaats van een UART-instantie te openen en daar bytes naartoe te schrijven, opent het script een socket en schrijft het daar bytes naartoe. De socket is een eindpunt naar het netwerk, op dezelfde manier als een UART-instantie een eindpunt naar een draad is. De stukken tussen de socket en de draad – frames, pakketten, routingtabellen, switches, radio’s – zitten allemaal eronder en zijn grotendeels onzichtbaar voor de Python-code.
De volgende pagina’s spellen die stukken uit, laag voor laag, zodat de abstractie “open een socket en stuur bytes” onvermijdelijk aanvoelt in plaats van magisch.