9.20. Zaključak¶
Prošli ste kroz slojeve koje mrežna poruka prelazi na svom putu od kamere do ostatka svijeta:
Motivacija – mreže postoje jer ožičenje od točke do točke prestaje skalirati u trenutku kada više od nekoliko uređaja treba razgovarati, ili kada suprotna strana nije na istoj žici, ili kada mnogo programa istovremeno dijeli istu vezu. Odgovor su dijeljeni mediji, logičke adrese i usmjeravanje.
Slojeviti model – pet slojeva, svaki rješava jedan problem i nudi čisto sučelje sljedećem. Fizički sloj i sloj veze rukuju bitovima i okvirima između neposrednih susjeda, mrežni sloj rukuje adresiranjem i usmjeravanjem preko interneta, transportni sloj rukuje isporukom od programa do programa, a aplikacijski protokoli grade se na svemu tome.
Donji slojevi – Ethernet i Wi-Fi kao praktične tehnologije veze; MAC adrese identificiraju hardver na lokalnom segmentu. Modul
networkkamere izlaže jedan gumb vrijedan poznavanja: kojoj se Wi-Fi mreži pridružiti. Nakon toga, sve ispod je automatsko.Mrežni sloj (IP) – IPv4 i IPv6 adrese identificiraju domaćine neovisno o tome u koji su kabel uključeni. Usmjerivači prosljeđuju pakete između lokalnih segmenata dok ne stignu. Privatni rasponi adresa i NAT razlog su zašto kućne i uredske mreže imaju vlastiti unutarnji adresni prostor i jednu dijeljenu javnu adresu na rubu; odlazni promet radi slobodno, dolazni treba pomoć.
Transportni sloj – portovi identificiraju programe unutar domaćina; potpuni par
(IP, port)identificira jednu specifičnu utičnicu. UDP je tanak sloj koji šalje jedan samostalan datagram odjednom bez ikakvih jamstava – brz, jeftin i pravi alat kada je gubitak prihvatljiv. TCP je tok bajtova orijentiran na vezu, pouzdan i uređen – radni konj za većinu internetskog prometa, plaćen jednim povratnim putovanjem kašnjenja rukovanja.Python API –
socket.socketje jedina klasa za oba protokola.sendto()/recvfrom()za UDP; obrasci connect-ili-listen plussend()/recv()za TCP. Utičnice se uredno uparuju sasyncio:asyncio.open_connection()iasyncio.start_server()daju svakoj TCP vezi par reader/writer, tako da mnogo istovremenih razgovora dijeli jednu petlju događaja bez nitiranja.Imena i vrijeme –
socket.getaddrinfo()pretvara ime poputexample.comu IP adresu spremnu za predaju utičnici.network.hostname()postavlja kamerino vlastito ime, koje usmjerivači registriraju pod svojim lokalnim DNS-om i na koje kamerin ugrađeni mDNS odgovaratelj odgovara kao<name>.local.ntptime.settime()ista je ideja „potraži stvar na mreži” primijenjena na zidno vrijeme, postavljajući ugrađeni sat na UTC s javnog NTP poslužitelja.Šifriranje –
sslomotava utičnicu u TLS. Kamera se isporučuje bez pohrane certifikacijskih tijela, pa odmah po vađenju iz kutije dobivate samo šifriranje – razgovor više nije u čistom obliku, ali kamera ne provjerava tko je odgovorio. Za stvarnu autentifikaciju – provjeru javnih HTTPS poslužitelja, pokretanje kamere kao TLS poslužitelja, uzajamni TLS – radni tok temeljen na certifikatima obrađen je u Rad s TLS certifikatima. DTLS (TLS preko UDP-a) koristi isti modul na isti način.Stvarni aplikacijski protokol – MQTT kao razrađeni primjer svakog sloja ispod njega povezanog zajedno. Jedan bajt vrste-i-zastavica, polje preostale duljine promjenjive duljine, UTF-8 tema s prefiksom duljine i korisni sadržaj, sve putujući preko TCP-a (i opcionalno unutar TLS-a) do brokera koji raspršuje poruku svakom pretplatniku na temu. Priloženi
mqttklijent omotava format na žici uconnect/publish/subscribeAPI dovoljno malen da se pročita u jednom sjedenju.
To je dovoljno za pisanje aplikacija za kameru koje razgovaraju s drugim strojevima, objavljuju podatke udaljenim uslugama, prihvaćaju veze od klijenata na lokalnoj mreži i sve to rade istovremeno s ostatkom posla kamere.
9.20.1. Korištenje ove reference kasnije¶
Tretirajte poglavlja o umrežavanju kao referentni materijal; vraćanje po točan oblik UDP slušatelja ili obrasca TLS-s-asyncio jest namjeravana uporaba. Referentne stranice network — konfiguracija mreže, socket — modul socket, ssl — SSL/TLS modul i ntptime — jednostavni NTP klijent na jednom mjestu navode svaku metodu, zastavicu i konstantu kada je pitanje samo „koji je točan naziv ovog poziva”.
9.20.2. Kamo dalje odavde¶
Web poslužitelji sljedeća su glavna tema. Uz utičnice koje rade i dostupan TLS, prirodni sljedeći sloj iznad jesu protokoli koji se grade na njima: HTTP za posluživanje sadržaja i API-ja, WebSocketi za održavanje veza otvorenima u oba smjera te mali okviri koji skrivaju standardni kod. Sve iz ovog odjeljka nosi se dalje – web poslužitelj je, naposljetku, samo TCP poslužitelj koji govori HTTP na svojim prihvaćenim utičnicama, često s TLS-om koji omotava cijelu stvar.