9.1. Dlaczego sieci¶
Sterowanie sprzętem dało kamerze sposoby na rozmowę z jednym konkretnym innym urządzeniem na jednym konkretnym przewodzie. UART między kamerą a pojedynczą płytką towarzyszącą. I2C między kamerą a sensorami zawieszonymi na tej samej krótkiej magistrali. CAN między niewielkim zestawem modułów współdzielących jedną solidną magistralę. Każdy przypadek ma ten sam kształt: dwie strony (lub niewielka znana grupa), jedno współdzielone medium, umowa między nimi co do tego, co znaczą bajty na tym medium.
9.1.1. Ten kształt przestaje się skalować¶
Wzorzec punkt-punkt działa tak długo, jak oba końce są blisko, oba końce są znane z wyprzedzeniem, a skrypt sam decyduje, którym przewodem rozmawia. Gdy tylko któreś z tych ograniczeń pęknie, samo okablowanie przestaje wystarczać.
Wielu rozmówców. Sieci pięćdziesięciu kamer raportujących do jednego serwera nie da się okablować jeden do jednego; na serwerze nie ma dość portów UART, a poprowadzenie kabli byłoby niemożliwe.
Rozmówcy nie na tym samym przewodzie. Kamera w fabryce i pulpit nawigacyjny w biurze po drugiej stronie miasta nie mogą współdzielić kabla szeregowego. Między nimi musi istnieć jakaś ścieżka przez infrastrukturę, która już łączy te dwa budynki.
Rozmówcy nieznani z wyprzedzeniem. Kamera, która publikuje swoje wyniki do chmury, nie wybiera w schemacie okablowania, z którym serwerem rozmawia; adres chmury jest czymś, co skrypt wyszukuje w czasie działania i dokąd trasuje dane.
Wiele programów na jednym kablu. Laptop działa dziś z przeglądarką, aplikacją czatu, rozmową wideo i kopią zapasową, a wszystkie komunikują się przez ten sam interfejs sieciowy w tym samym czasie. Przewód nie może być „posiadany” przez jedną rozmowę tak, jak UART.
Każda z tych porażek to inny rodzaj problemu z adresowaniem. Rozwiązanie ich wszystkich razem wymaga czegoś więcej niż przewodu i szybkości transmisji (baud).
9.1.2. Czym jest sieć¶
Sieć to infrastruktura, która pozwala dowolnemu z dużej liczby komputerów wymieniać komunikaty z dowolnym innym, bez konieczności posiadania przez każdą parę własnego dedykowanego łącza. Trzy właściwości czynią sieć czymś więcej niż wielkim kablem szeregowym:
Współdzielone medium. Wiele urządzeń podłącza się do tego samego kabla, przełącznika lub kanału radiowego. Działają na zmianę lub multipleksują, aby na tym samym fizycznym łączu mogła zmieścić się więcej niż jedna rozmowa.
Adresy logiczne. Każde urządzenie ma numer, który identyfikuje je niezależnie od tego, do którego kabla jest podłączone. Wysłanie komunikatu oznacza zapisanie tego numeru na komunikacie, a nie podłączenie konkretnego przewodu.
Trasowanie. Gdy nadawca i odbiorca nie znajdują się w tym samym lokalnym segmencie, infrastruktura między nimi przenosi komunikat przeskok po przeskoku. Punkty końcowe nie znają trasy; znają jedynie wzajemne adresy.
Laptop w biurowej sieci Wi-Fi docierający do serwera w odległym centrum danych korzysta ze wszystkich trzech. Łącze Wi-Fi to współdzielone medium radiowe; laptop i serwer mają każdy własny adres logiczny; komunikat przewija się przez infrastrukturę leżącą między tymi dwoma, przekazywany dalej po jednym przeskoku naraz. Użytkownik klika łącze, laptop wysyła pakiet, a sieć zajmuje się resztą.
9.1.3. A co z kamerą?¶
Kamera odgrywa w sieci dokładnie tę samą rolę co laptop. Pobiera adres logiczny, gdy dołącza do sieci, adresuje wychodzące komunikaty do adresów logicznych innych urządzeń i pozwala infrastrukturze je trasować.
Tym, co zmienia się względem rozdziałów o sterowaniu sprzętem, jest interfejs. Zamiast otwierać instancję UART i zapisywać do niej bajty, skrypt otwiera gniazdo (socket) i zapisuje bajty do niego. Gniazdo jest punktem końcowym wchodzącym do sieci, tak samo jak instancja UART jest punktem końcowym wchodzącym do przewodu. Elementy między gniazdem a przewodem – ramki, pakiety, tablice trasowania, przełączniki, radia – wszystkie leżą pod spodem i są w większości niewidoczne dla kodu Python.
Kolejne strony rozpisują te elementy, warstwa po warstwie, tak aby abstrakcja „otwórz gniazdo i wyślij bajty” wydawała się nieunikniona, a nie magiczna.