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 network kamere 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 APIsocket.socket je jedina klasa za oba protokola. sendto() / recvfrom() za UDP; obrasci connect-ili-listen plus send() / recv() za TCP. Utičnice se uredno uparuju s asyncio: asyncio.open_connection() i asyncio.start_server() daju svakoj TCP vezi par reader/writer, tako da mnogo istovremenih razgovora dijeli jednu petlju događaja bez nitiranja.

  • Imena i vrijemesocket.getaddrinfo() pretvara ime poput example.com u 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.

  • Šifriranjessl omotava 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 mqtt klijent omotava format na žici u connect / publish / subscribe API 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.