9.1. Miért van szükség hálózatokra¶
A hardvervezérlés módokat adott a kamerának arra, hogy egy adott másik eszközzel beszéljen egy adott másik vezetéken. UART a kamera és egyetlen társkártya között. I2C a kamera és az ugyanazon a rövid buszon lógó érzékelők között. CAN egy kis modulkészlet között, amelyek egy robusztus buszon osztoznak. Minden eset ugyanazt a formát követi: két fél (vagy egy kis ismert csoport), egy közös médium, és egy megállapodás közöttük arról, hogy mit jelentenek az adott médiumon lévő bájtok.
9.1.1. Ez a forma nem skálázódik tovább¶
A pont-pont minta addig működik, amíg mindkét vég közel van, mindkét vég előre ismert, és a szkript választhatja meg, melyik vezetéken kommunikál. Amint ezen megkötések bármelyike megtörik, a huzalozás már nem elegendő.
Sok partner. Ötven kamera hálózata, amely egyetlen szervernek jelent, nem huzalozható egy-egy módon; nincs elég UART a szerveren, és a kábelhosszak lehetetlenek lennének.
Nem ugyanazon a vezetéken lévő partnerek. Egy gyárban lévő kamera és egy iroda műszerfala a város másik részén nem oszthat meg egy soros kábelt. Valamilyen útvonalnak léteznie kell közöttük azon az infrastruktúrán keresztül, amely már fut a két épület között.
Előre nem ismert partnerek. Egy kamera, amely az eredményeit a felhőbe teszi közzé, nem a huzalozási rajzon választja ki, melyik szerverrel beszél; a felhő címe olyasmi, amit a szkript futásidőben keres ki, és oda irányítja az adatokat.
Sok program egy kábelen. Egy laptop manapság fut egy böngészőt, egy chatalkalmazást, egy videohívást és egy biztonsági mentést, mind ugyanazon a hálózati interfészen keresztül kommunikálva ugyanabban az időben. A vezetéket nem „birtokolhatja” egyetlen beszélgetés úgy, ahogy egy UART-ot.
Ezek a hibák mindegyike egy másfajta címzési probléma. Mindegyikük együttes megoldásához többre van szükség, mint egy vezetékre és egy átviteli sebességre (baud).
9.1.2. Mi az a hálózat¶
Egy hálózat az az infrastruktúra, amely lehetővé teszi, hogy nagyszámú számítógép bármelyike üzeneteket cseréljen bármelyik másikkal, anélkül hogy minden párnak saját dedikált kapcsolatra lenne szüksége. Három tulajdonság tesz egy hálózatot többé, mint egy nagy soros kábel:
Közös médium. Sok eszköz csatlakozik ugyanahhoz a kábelhez, switchhez vagy rádiócsatornához. Felváltva használják, vagy multiplexelik, hogy egynél több beszélgetés is elférjen ugyanazon a fizikai kapcsolaton.
Logikai címek. Minden eszköznek van egy száma, amely attól függetlenül azonosítja, hogy melyik kábelbe van bedugva. Egy üzenet küldése azt jelenti, hogy ezt a számot ráírjuk az üzenetre, nem pedig egy adott vezeték csatlakoztatását.
Útválasztás. Amikor a küldő és a fogadó nem ugyanazon a helyi szegmensen van, a közöttük lévő infrastruktúra ugrásról ugrásra továbbítja az üzenetet. A végpontok nem ismerik az útvonalat; csak egymás címét ismerik.
Egy laptop az iroda Wi-Fi-jén, amely egy távoli adatközpontban lévő szervert ér el, mindhármat használja. A Wi-Fi kapcsolat egy közös rádiómédium; a laptopnak és a szervernek is megvan a saját logikai címe; az üzenet áthalad azon az infrastruktúrán, amely a kettő között helyezkedik el, egyszerre egy ugrással továbbítva. A felhasználó rákattint egy hivatkozásra, a laptop küld egy csomagot, a hálózat pedig elintézi a többit.
9.1.3. Mi a helyzet a kamerával?¶
A kamera pontosan ugyanazt a szerepet játssza egy hálózaton, mint a laptop. Logikai címet vesz fel, amikor csatlakozik a hálózathoz, a kimenő üzeneteket más eszközök logikai címeire címzi, és hagyja, hogy az infrastruktúra útválasztja őket.
Ami a hardvervezérlési fejezetekhez képest megváltozik, az az interfész. Ahelyett, hogy egy UART példányt nyitna meg és bájtokat írna rá, a szkript egy socketet nyit meg, és arra ír bájtokat. A socket egy végpont a hálózatba, ahogy egy UART példány egy végpont egy vezetékbe. A socket és a vezeték közötti darabok – képkockák, csomagok, útválasztási táblák, switchek, rádiók – mind alatta helyezkednek el, és többnyire láthatatlanok a Python kód számára.
Az előttünk álló oldalak rétegről rétegre kifejtik ezeket a darabokat, hogy az „nyiss meg egy socketet és küldj bájtokat” absztrakció elkerülhetetlennek tűnjön a varázslat helyett.