9.1. Varför nätverk

Hårdvarustyrning gav kameran sätt att prata med en specifik annan enhet på en specifik annan kabel. UART mellan kameran och ett enda kompanjonkort. I2C mellan kameran och de sensorer som hänger på samma korta buss. CAN mellan en liten uppsättning moduler som delar en robust buss. Varje fall följer samma form: två parter (eller en liten känd grupp), ett delat medium, en överenskommelse mellan dem om vad byten på det mediet betyder.

9.1.1. Den formen slutar skala

Punkt-till-punkt-mönstret fungerar så länge båda ändar är i närheten, båda ändar är kända i förväg, och skriptet får välja vilken kabel det pratar via. Så snart någon av dessa begränsningar bryts räcker kablingen inte längre till.

  • Många motparter. Ett nätverk med femtio kameror som rapporterar till en server kan inte kopplas en-till-en; det finns inte tillräckligt med UART:er på servern, och kabeldragningarna vore omöjliga.

  • Motparter inte på samma kabel. En kamera i en fabrik och en instrumentpanel på ett kontor tvärs över staden kan inte dela en seriell kabel. Någon väg måste finnas mellan dem genom vilken infrastruktur som än redan löper mellan de två byggnaderna.

  • Motparter inte kända i förväg. En kamera som publicerar sina resultat till molnet väljer inte vilken server den pratar med i kopplingsschemat; molnets adress är något skriptet slår upp vid körning och dirigerar data till.

  • Många program på en kabel. En bärbar dator kör idag en webbläsare, en chattapp, ett videosamtal och en säkerhetskopiering, alla pratande genom samma nätverksgränssnitt samtidigt. Kabeln kan inte ”ägas” av en konversation på det sätt en UART är.

Var och en av dessa brister är ett annorlunda slags adresseringsproblem. Att lösa dem alla tillsammans kräver mer än en kabel och en baudhastighet.

9.1.2. Vad ett nätverk är

Ett nätverk är den infrastruktur som låter vilken som helst av ett stort antal datorer utbyta meddelanden med vilken annan som helst, utan att varje par behöver sin egen dedikerade länk. Tre egenskaper gör ett nätverk till något mer än en stor seriell kabel:

  • Delat medium. Många enheter ansluts till samma kabel, switch eller radiokanal. De turas om eller multiplexar så att mer än en konversation kan rymmas på samma fysiska länk.

  • Logiska adresser. Varje enhet har ett nummer som identifierar den oberoende av vilken kabel den är inkopplad i. Att skicka ett meddelande innebär att skriva det numret på meddelandet, inte att koppla in en specifik kabel.

  • Routing. När avsändaren och mottagaren inte är på samma lokala segment bär infrastrukturen mellan dem meddelandet hopp för hopp. Ändpunkterna känner inte till vägen; de känner bara varandras adress.

En bärbar dator på kontorets Wi-Fi som når en server i ett avlägset datacenter använder alla tre. Wi-Fi-länken är ett delat radiomedium; den bärbara datorn och servern har var sin egen logiska adress; meddelandet trär sig genom vilken infrastruktur som än ligger mellan de två, vidarebefordrat ett hopp i taget. Användaren klickar på en länk, den bärbara datorn skickar ett paket, och nätverket sköter resten.

9.1.3. Hur är det med kameran?

Kameran spelar exakt samma roll på ett nätverk som den bärbara datorn. Den plockar upp en logisk adress när den ansluter till nätverket, adresserar utgående meddelanden till andra enheters logiska adresser, och låter infrastrukturen dirigera dem.

Vad som förändras från hårdvarustyrningskapitlen är gränssnittet. Istället för att öppna en UART-instans och skriva byte till den öppnar skriptet en socket och skriver byte till den. Socketen är en ändpunkt in i nätverket, på samma sätt som en UART-instans är en ändpunkt in i en kabel. Delarna mellan socketen och kabeln – ramar, paket, routingtabeller, switchar, radior – ligger alla under och är mestadels osynliga för Python-koden.

Sidorna framöver stavar ut dessa delar, lager för lager, så att abstraktionen ”öppna en socket och skicka byte” känns oundviklig istället för magisk.