9.20. Özet¶
Bir ağ mesajının kameradan dünyanın geri kalanına giderken aştığı katmanları baştan sona gezdiniz:
Motivasyon – ağlar var çünkü birkaçtan fazla cihazın konuşması gerektiği anda, ya da karşı taraf aynı kabloda olmadığında, ya da birçok program aynı bağlantıyı aynı anda paylaştığında noktadan noktaya kablolama ölçeklenmeyi durdurur. Cevap, paylaşılan ortam, mantıksal adresler ve yönlendirmedir.
Katmanlı model – her biri tek bir sorunu çözen ve bir sonrakine temiz bir arayüz sunan beş katman. Fiziksel ve bağlantı katmanları, hemen komşular arasındaki bitleri ve çerçeveleri ele alır, ağ katmanı internet genelinde adresleme ve yönlendirmeyi ele alır, taşıma katmanı programdan programa teslimatı ele alır ve uygulama protokolleri tüm bunların üzerine inşa edilir.
Alt katmanlar – pratik bağlantı teknolojileri olarak Ethernet ve Wi-Fi; MAC adresleri yerel bir segmentteki donanımı tanımlar. Kameranın
networkmodülü, bilmeye değer tek bir düğme açığa çıkarır: hangi Wi-Fi ağına katılınacağı. Bundan sonra, alttaki her şey otomatiktir.Ağ katmanı (IP) – IPv4 ve IPv6 adresleri, ana bilgisayarları hangi kabloya takılı olduklarından bağımsız olarak tanımlar. Yönlendiriciler, paketleri varana kadar yerel segmentler arasında sektirir. Özel adres aralıkları ve NAT, ev ve ofis ağlarının kendi dahili adres alanlarına ve kenarda paylaşılan tek bir genel adrese sahip olmasının nedenidir; giden trafik serbestçe çalışır, gelen trafik yardıma ihtiyaç duyar.
Taşıma katmanı – portlar, bir ana bilgisayar içindeki programları tanımlar; tam
(IP, port)çifti tek bir belirli soketi tanımlar. UDP, hiçbir garanti olmadan tek seferde kendi kendine yeten bir veri birimi gönderen ince bir katmandır – hızlı, ucuz ve kaybın kabul edilebilir olduğu durumda doğru araç. TCP, bağlantı yönelimli, güvenilir, sıralı bir bayt akışıdır – internet trafiğinin çoğu için iş atı, bir gidiş-dönüşlük el sıkışma gecikmesi karşılığında.Python API’si –
socket.socket, her iki protokol için de tek sınıftır. UDP içinsendto()/recvfrom(); TCP için bağlan-ya-da-dinle desenleri artısend()/recv(). Soketlerasyncioile temiz bir şekilde eşleşir:asyncio.open_connection()veasyncio.start_server()her TCP bağlantısına bir okuyucu/yazıcı çifti verir, böylece birçok eşzamanlı konuşma iş parçacığı (threading) kullanmadan tek bir olay döngüsünü paylaşır.Adlar ve zaman –
socket.getaddrinfo(),example.comgibi bir adı, bir sokete teslim edilmeye hazır bir IP adresine dönüştürür.network.hostname(), kameranın kendi adını ayarlar; yönlendiriciler bu adı yerel DNS’leri altında kaydeder ve kameranın yerleşik mDNS yanıtlayıcısı bunu<name>.localolarak yanıtlar.ntptime.settime(), aynı “ağda bir şey ara” fikrinin duvar saati zamanına uygulanmış halidir; yerleşik saati genel bir NTP sunucusundan UTC’ye ayarlar.Şifreleme –
ssl, bir soketi TLS ile sarar. Kamera, hiçbir sertifika otoritesi deposu olmadan gelir, dolayısıyla kutudan çıktığı haliyle yalnızca şifreleme elde edersiniz – konuşma artık açık değildir, ancak kamera kimin yanıt verdiğini doğrulamaz. Gerçek kimlik doğrulama için – genel HTTPS sunucularını doğrulama, kamerayı bir TLS sunucusu olarak çalıştırma, karşılıklı TLS – sertifika tabanlı iş akışı TLS sertifikalarıyla çalışma sayfasında ele alınmıştır. DTLS (UDP üzerinden TLS), aynı modülü aynı şekilde kullanır.Gerçek bir uygulama protokolü – altındaki her katmanın birbirine bağlandığı çalışılmış örnek olarak MQTT. 1 baytlık bir tür-ve-bayraklar baytı, değişken uzunluklu bir kalan-uzunluk alanı, uzunluk önekli bir UTF-8 konusu ve yük; hepsi, mesajı konudaki her aboneye dağıtan bir aracıya (broker) TCP üzerinden (ve isteğe bağlı olarak TLS içinde) ilerler. Birlikte gelen
mqttistemcisi, kablo formatını tek oturuşta okunacak kadar küçük birconnect/publish/subscribeAPI’sinde sarmalar.
Bu, diğer makinelerle konuşan, uzak hizmetlere veri yayınlayan, yerel ağdaki istemcilerden bağlantı kabul eden ve tüm bunları kameranın geri kalan işiyle eşzamanlı olarak yapan kamera uygulamaları yazmak için yeterlidir.
9.20.1. Bu referansı daha sonra kullanmak¶
Ağ bölümlerine referans materyali olarak yaklaşın; bir UDP dinleyicisinin ya da asyncio ile TLS deseninin tam şekli için geri dönmek, amaçlanan kullanımdır. network — ağ yapılandırması, socket — socket modülü, ssl — SSL/TLS modülü ve ntptime — basit NTP istemcisi referans sayfaları, soru sadece “bu çağrının tam adı nedir” olduğunda her yöntemi, bayrağı ve sabiti tek bir yerde listeler.
9.20.2. Buradan nereye gidilir¶
Web sunucuları, bir sonraki büyük konudur. Soketler çalışırken ve TLS kullanılabilirken, bir üst doğal katman bunların üzerine inşa edilen protokollerdir: içerik ve API’leri sunmak için HTTP, bağlantıları her iki yönde açık tutmak için WebSocket’ler ve şablon kodu gizleyen küçük çerçeveler. Bu bölümdeki her şey ileriye taşınır – ne de olsa bir web sunucusu, kabul ettiği soketlerde HTTP konuşan, çoğunlukla tüm her şeyi TLS ile saran bir TCP sunucusundan başka bir şey değildir.