9.3. A kábel és a képkocka¶
A verem két legalsó rétegét a legkönnyebb adottnak venni a kamerán, mert minden, amit csinálnak, a chipen belül történik, és a kamera anélkül kezeli őket, hogy bármilyen Python kód érintve lenne. Mégis érdemes egy rövid körutat tenni rajtuk, mert megmagyarázzák, mit jelent a „helyi hálózat”, és hol kezdődik az infrastruktúra többi részével szembeni határ.
9.3.1. A fizikai réteg¶
A legalsó réteg maga a tényleges jeltovábbítás – a vezetékek, az optikai szálak vagy a rádióhullámok, amelyek a biteket két eszköz között szállítják. A sodrott érpáras kábeleken futó Ethernet minden bitet egy rögzített ütemben végbemenő feszültségátmenetként kódol. A Wi-Fi ugyanezeket a biteket modulálja egy rádiós vivőjelre a 2,4 GHz-es vagy az 5 GHz-es sávban. Mindkettő bináris számjegyek folyamát állítja elő két hardvereszköz között; mindkettő olyan részlet, amelyet a kamera szilíciuma anélkül kezel, hogy a szoftvernek foglalkoznia kellene vele.
Egy Python szkript szemszögéből a fizikai réteg annyit jelent, hogy „a kapcsolat él” vagy „a kapcsolat nem él”. A network modul ezt az állapotot a Wi-Fi interfész isconnected() metódusán keresztül, illetve egy vezetékes Ethernet interfész esetén a kapcsolat állapotán keresztül jelzi. Ezen túl minden más, amit ez a réteg csinál, rejtve marad.
9.3.2. A kapcsolati réteg¶
Egy lépéssel feljebb található a kapcsolati réteg – a szabályok, amelyek egy bájtcsomag (egy képkocka) küldését írják le két, ugyanazon a fizikai szegmensen osztozó eszköz között. A kapcsolati réteg két dolgot ad hozzá a nyers jeltovábbításhoz:
Hardvercímzés. Minden hálózati interfész egy egyedi, 48 bites azonosítóval érkezik, amelyet MAC-címnek neveznek (Media Access Control). Ethernet esetén ezt a chipbe égetik; Wi-Fi esetén ugyanilyen azonosítót égetnek a vezeték nélküli modulba. A MAC-címek alapján dönti el egy switch – az a doboz több Ethernet-porttal, amelyekbe a közeli eszközök csatlakoznak –, hogy egy adott képkocka melyik porton menjen ki. Egy Wi-Fi hozzáférési pont ugyanezt a szerepet tölti be a csatornáján lévő vezeték nélküli eszközök számára.
Keretezés. A magasabb réteg által átadott bájtokat egy képkockába csomagolják, amely egy kis fejlécből, a hasznos adatból és a végén egy ellenőrző összegből áll. A fejléc hordozza a forrás és a cél MAC-címét; az ellenőrző összeg lehetővé teszi a fogadó számára, hogy észlelje azt a képkockát, amelynek bájtjai átvitel közben megsérültek. Az ellenőrzésen megbukó képkockák csendben eldobásra kerülnek – akinek a megbízhatóság számít, annak azt egy magasabb rétegen kell visszaállítania.
Egy helyi szegmens azoknak az eszközöknek a csoportja, amelyek közvetlenül látják egymás képkockáit – egy switch vezetékes portjai, egy Wi-Fi hozzáférési ponthoz társított összes eszköz, vagy egymással összekötött switchek kis hálója. A kapcsolati réteg nem ér túl ezen a szegmensen. Amint a cél egy másik szegmensen helyezkedik el, az üzenetet át kell adni a felette lévő rétegnek.
9.3.3. Mit tesz elérhetővé a kamera¶
A kamera minden egyes hálózati interfészéhez tartozik egy MAC-cím – egy Wi-Fi-s, ha a kamera vezeték nélküli támogatással rendelkezik, és egy Ethernetes, ha a panelen van megfelelő port. A network modul a network_interface.config("mac") hívással biztosít hozzáférést ehhez azon az interfészobjektumon, amelyet az alkalmazás éppen használ, amikor be kell olvasnia a címet. Néhány alkalmazásnak erre szüksége van, például hogy regisztrálja az eszközt egy flottakezelő rendszerben. Egyébként ez az egyetlen szabályozó, amelyet a kapcsolati réteg átad a Pythonnak.
Minden más – a keretezés, a tényleges MAC-forgalom a vezetéken vagy a levegőben, a kamera és a hozzáférési pont közötti egyeztetés arról, hogy melyik csatornát és sebességet használják – teljes egészében a vezeték nélküli vagy az Ethernet hardveren belül történik. A következő oldal azt az egyetlen helyet tárgyalja, ahol egy Python szkriptnek mégis van beleszólása a kapcsolati rétegbe: megmondani a kamerának, melyik hálózathoz csatlakozzon.