9.1. Proč sítě¶
Hardwarové řízení dalo kameře způsoby, jak komunikovat s jedním konkrétním zařízením na jednom konkrétním vodiči. UART mezi kamerou a jednou doprovodnou deskou. I2C mezi kamerou a senzory visícími na stejné krátké sběrnici. CAN mezi malou sadou modulů sdílejících jednu robustní sběrnici. Každý případ má stejný tvar: dvě strany (nebo malá známá skupina), jedno sdílené médium, dohoda mezi nimi o tom, co bajty na tomto médiu znamenají.
9.1.1. Tento tvar přestává škálovat¶
Vzor bod-bod funguje, dokud jsou oba konce blízko sebe, oba konce jsou předem známé a skript si může vybrat, kterým vodičem komunikuje. Jakmile kterékoli z těchto omezení padne, kabeláž přestane stačit.
Mnoho protějšků. Síť padesáti kamer hlásících jednomu serveru nelze zapojit jedna ku jedné; na serveru není dost UARTů a vedení kabelů by bylo nemožné.
Protějšky, které nejsou na stejném vodiči. Kamera v továrně a řídicí panel v kanceláři na druhém konci města nemohou sdílet sériový kabel. Mezi nimi musí existovat nějaká cesta skrz jakoukoli infrastrukturu, která už mezi oběma budovami běží.
Protějšky, které nejsou předem známé. Kamera, která publikuje své výsledky do cloudu, si v zapojovacím schématu nevybírá, se kterým serverem komunikuje; adresa cloudu je něco, co skript za běhu vyhledá a kam směruje data.
Mnoho programů na jednom kabelu. Notebook dnes provozuje prohlížeč, chatovací aplikaci, videohovor a zálohu, vše komunikuje stejným síťovým rozhraním ve stejnou dobu. Vodič nemůže být „vlastněn“ jednou konverzací tak, jak je tomu u UARTu.
Každé z těchto selhání je jiný druh problému s adresováním. Vyřešit je všechny dohromady vyžaduje více než vodič a přenosovou rychlost (baud rate).
9.1.2. Co je síť¶
Síť je infrastruktura, která umožňuje kterémukoli z velkého počtu počítačů vyměňovat si zprávy s kterýmkoli jiným, aniž by každý pár potřeboval vlastní vyhrazené spojení. Tři vlastnosti dělají ze sítě něco víc než jen velký sériový kabel:
Sdílené médium. K témuž kabelu, přepínači nebo rádiovému kanálu je připojeno mnoho zařízení. Střídají se nebo multiplexují tak, aby se na stejné fyzické spojení vešlo více než jedna konverzace.
Logické adresy. Každé zařízení má číslo, které jej identifikuje nezávisle na tom, do kterého kabelu je zapojeno. Odeslání zprávy znamená napsat na ni toto číslo, nikoli připojit konkrétní vodič.
Směrování. Když odesílatel a příjemce nejsou na stejném lokálním segmentu, infrastruktura mezi nimi přenáší zprávu skok po skoku. Koncové body neznají trasu; znají jen vzájemné adresy.
Notebook na kancelářské Wi-Fi, který se dostává na server ve vzdáleném datovém centru, používá všechny tři. Spojení Wi-Fi je sdílené rádiové médium; notebook i server mají každý svou vlastní logickou adresu; zpráva se prokličkuje jakoukoli infrastrukturou, která se mezi nimi nachází, přeposílaná po jednom skoku. Uživatel klikne na odkaz, notebook odešle paket a o zbytek se postará síť.
9.1.3. Co kamera?¶
Kamera hraje v síti přesně stejnou roli jako notebook. Při připojení k síti získá logickou adresu, adresuje odchozí zprávy na logické adresy jiných zařízení a nechá infrastrukturu je směrovat.
Co se oproti kapitolám o hardwarovém řízení mění, je rozhraní. Místo otevření instance UART a zápisu bajtů do ní skript otevře socket a zapisuje bajty do něj. Socket je koncový bod do sítě, stejně jako instance UART je koncovým bodem do vodiče. Části mezi socketem a vodičem – rámce, pakety, směrovací tabulky, přepínače, rádia – všechny leží pod ním a jsou pro kód v jazyce Python z velké části neviditelné.
Následující stránky vysvětlují tyto části vrstvu po vrstvě, aby abstrakce „otevři socket a pošli bajty“ působila nevyhnutelně, nikoli jako kouzlo.