9.20. Shrnutí¶
Prošli jste vrstvami, které síťová zpráva překračuje na své cestě od kamery do zbytku světa:
Motivace – sítě existují proto, že kabeláž typu bod-bod přestává škálovat ve chvíli, kdy spolu potřebuje mluvit více než pár zařízení, nebo když protějšek není na stejném vodiči, nebo když mnoho programů sdílí stejnou linku najednou. Odpovědí jsou sdílená média, logické adresy a směrování.
Vrstvený model – pět vrstev, každá řeší jeden problém a nabízí čisté rozhraní té další. Fyzická a linková vrstva obsluhují bity a rámce mezi bezprostředními sousedy, síťová vrstva obsluhuje adresování a směrování napříč internetem, transportní vrstva obsluhuje doručování mezi programy a aplikační protokoly staví na tom všem.
Spodní vrstvy – Ethernet a Wi-Fi jako praktické linkové technologie; MAC adresy identifikují hardware na lokálním segmentu. Modul
networkna kameře vystavuje jeden ovládací prvek, který stojí za to znát: ke které Wi-Fi síti se připojit. Poté je vše níže automatické.Síťová vrstva (IP) – adresy IPv4 a IPv6 identifikují hostitele nezávisle na tom, do kterého kabelu jsou zapojeni. Směrovače posílají pakety mezi lokálními segmenty, dokud nedorazí. Privátní rozsahy adres a NAT jsou důvodem, proč mají domácí a kancelářské sítě svůj vlastní vnitřní adresní prostor a jednu sdílenou veřejnou adresu na okraji; odchozí provoz funguje volně, příchozí potřebuje pomoc.
Transportní vrstva – porty identifikují programy uvnitř hostitele; úplná dvojice
(IP, port)identifikuje jeden konkrétní soket. UDP je tenká vrstva, která posílá jeden samostatný datagram po druhém bez záruk – rychlé, levné a správný nástroj, když je ztráta přijatelná. TCP je spojově orientovaný, spolehlivý, seřazený proud bajtů – tažný kůň většiny internetového provozu, zaplacený jedním round-tripem latence při navazování spojení.Python API –
socket.socketje jediná třída pro oba protokoly.sendto()/recvfrom()pro UDP; vzory connect-nebo-listen plussend()/recv()pro TCP. Sokety se čistě párují sasyncio:asyncio.open_connection()aasyncio.start_server()dávají každému TCP spojení dvojici reader/writer, takže mnoho souběžných konverzací sdílí jednu smyčku událostí bez vláken.Jména a čas –
socket.getaddrinfo()převádí jméno jakoexample.comna IP adresu připravenou předat soketu.network.hostname()nastavuje vlastní jméno kamery, které směrovače registrují pod svým lokálním DNS a na které odpovídá vestavěný mDNS responder kamery jako<name>.local.ntptime.settime()je stejná myšlenka „vyhledat něco v síti“ aplikovaná na hodinový čas, který nastavuje palubní hodiny na UTC z veřejného NTP serveru.Šifrování –
sslzabalí soket do TLS. Kamera se dodává bez úložiště certifikačních autorit, takže ihned po vybalení získáte pouze šifrování – konverzace již není v otevřené podobě, ale kamera neověřuje, kdo odpověděl. Pro skutečnou autentizaci – ověřování veřejných HTTPS serverů, provoz kamery jako TLS serveru, vzájemné TLS – je pracovní postup založený na certifikátech popsán v Práce s TLS certifikáty. DTLS (TLS přes UDP) používá stejný modul stejným způsobem.Skutečný aplikační protokol – MQTT jako názorný příklad propojení každé vrstvy pod ním. Jeden bajt typu a příznaků, pole zbývající délky s proměnnou délkou, téma v UTF-8 s délkovým prefixem a užitečný obsah, vše putuje přes TCP (a volitelně uvnitř TLS) k brokeru, který zprávu rozešle každému odběrateli daného tématu. Přibalený klient
mqttzabaluje drátový formát do APIconnect/publish/subscribenatolik malého, že jej lze přečíst na jedno posezení.
To stačí k psaní aplikací kamery, které komunikují s jinými stroji, zveřejňují data vzdáleným službám, přijímají spojení od klientů v lokální síti a dělají to vše souběžně se zbytkem práce kamery.
9.20.1. Pozdější používání této reference¶
Berte kapitoly o síťování jako referenční materiál; návrat pro přesný tvar UDP posluchače nebo vzoru TLS s asyncio je zamýšleným použitím. Referenční stránky network — konfigurace sítě, socket — modul socket, ssl — modul SSL/TLS a ntptime — jednoduchý NTP klient uvádějí každou metodu, příznak a konstantu na jednom místě, když je otázka jen „jaký je přesný název tohoto volání“.
9.20.2. Kam dál odsud¶
Webové servery jsou dalším hlavním tématem. Když sokety fungují a TLS je k dispozici, přirozenou další vrstvou výše jsou protokoly, které na nich staví: HTTP pro poskytování obsahu a API, WebSockets pro udržování spojení otevřených oběma směry a malé frameworky, které skrývají kostru kódu. Vše z této sekce se přenáší dál – webový server je koneckonců jen TCP server, který na svých přijatých soketech mluví HTTP, často s TLS obalujícím celou věc.