9.20. Kesimpulan

Anda telah menelusuri lapisan-lapisan yang dilalui pesan jaringan dalam perjalanannya dari kamera ke seluruh dunia:

  • Motivasinya -- jaringan ada karena pengkabelan titik ke titik berhenti memperluas skala saat lebih dari beberapa perangkat perlu berkomunikasi, atau lawan bicara tidak berada di kabel yang sama, atau banyak program berbagi tautan yang sama sekaligus. Jawabannya adalah media bersama, alamat logis, dan perutean.

  • Model berlapis -- lima lapisan, masing-masing memecahkan satu masalah dan menawarkan antarmuka yang bersih ke yang berikutnya. Lapisan fisik dan tautan menangani bit dan bingkai antara tetangga langsung, lapisan jaringan menangani pengalamatan dan perutean di seluruh internet, lapisan transport menangani pengiriman antar-program, dan protokol aplikasi dibangun di atas semua itu.

  • Lapisan bawah -- Ethernet dan Wi-Fi sebagai teknologi tautan yang praktis; alamat MAC mengidentifikasi perangkat keras pada segmen lokal. Modul network kamera mengekspos satu pengaturan yang perlu diketahui: jaringan Wi-Fi mana yang harus diikuti. Setelah itu, semua yang ada di bawah berjalan otomatis.

  • Lapisan jaringan (IP) -- Alamat IPv4 dan IPv6 mengidentifikasi host secara independen dari kabel mana yang terhubung. Router melompat-lompat paket antara segmen lokal hingga tiba. Rentang alamat privat dan NAT adalah alasan mengapa jaringan rumah dan kantor memiliki ruang alamat internal sendiri dan satu alamat publik bersama di tepi; lalu lintas keluar bekerja dengan bebas, lalu lintas masuk memerlukan bantuan.

  • Lapisan transport -- port mengidentifikasi program di dalam host; pasangan penuh (IP, port) mengidentifikasi satu socket tertentu. UDP adalah lapisan tipis yang mengirim satu datagram mandiri sekaligus tanpa jaminan -- cepat, murah, dan alat yang tepat ketika kehilangan dapat diterima. TCP adalah aliran byte yang berorientasi koneksi, andal, dan berurutan -- andalan untuk sebagian besar lalu lintas internet, dengan biaya satu putaran jabat tangan latensi.

  • Python API -- socket.socket adalah satu kelas untuk kedua protokol. sendto() / recvfrom() untuk UDP; pola connect-or-listen ditambah send() / recv() untuk TCP. Socket berpasangan dengan baik dengan asyncio: asyncio.open_connection() dan asyncio.start_server() memberikan setiap koneksi TCP sepasang reader/writer, sehingga banyak percakapan bersamaan berbagi satu event loop tanpa threading.

  • Nama dan waktu -- socket.getaddrinfo() mengubah nama seperti example.com menjadi alamat IP yang siap diberikan ke socket. network.hostname() menetapkan nama kamera itu sendiri, yang didaftarkan oleh router di bawah DNS lokal mereka dan yang dijawab oleh responder mDNS bawaan kamera sebagai <name>.local. ntptime.settime() adalah ide "cari sesuatu di jaringan" yang sama diterapkan pada waktu jam dinding, mengatur jam internal ke UTC dari server NTP publik.

  • Enkripsi -- ssl membungkus socket dalam TLS. Kamera dikirimkan tanpa penyimpanan otoritas sertifikat, sehingga secara bawaan Anda hanya mendapatkan enkripsi -- percakapan tidak lagi terlihat jelas, tetapi kamera tidak memverifikasi siapa yang menjawab. Untuk autentikasi nyata -- memverifikasi server HTTPS publik, menjalankan kamera sebagai server TLS, mutual TLS -- alur kerja berbasis sertifikat dibahas di Bekerja dengan sertifikat TLS. DTLS (TLS melalui UDP) menggunakan modul yang sama dengan cara yang sama.

  • Protokol aplikasi nyata -- MQTT sebagai contoh yang dikerjakan dari setiap lapisan di bawahnya yang terhubung bersama. Byte tipe-dan-flag 1 byte, bidang panjang-sisa dengan panjang variabel, topik UTF-8 dengan awalan panjang, dan payload, semuanya melakukan perjalanan melalui TCP (dan opsional di dalam TLS) ke broker yang meneruskan pesan ke setiap pelanggan topik. Klien mqtt yang disertakan membungkus format kabel dalam API connect / publish / subscribe yang cukup kecil untuk dibaca dalam sekali duduk.

Itu sudah cukup untuk menulis aplikasi kamera yang berkomunikasi dengan mesin lain, mempublikasikan data ke layanan jarak jauh, menerima koneksi dari client di jaringan lokal, dan melakukan semuanya secara bersamaan dengan pekerjaan kamera lainnya.

9.20.1. Menggunakan referensi ini nanti

Perlakukan bab-bab jaringan sebagai bahan referensi; kembali untuk bentuk tepat dari UDP listener atau pola TLS-dengan-asyncio adalah penggunaan yang dimaksudkan. Halaman referensi network --- konfigurasi jaringan, socket --- modul socket, Modul ssl --- SSL/TLS, dan ntptime --- klien NTP sederhana mencantumkan setiap metode, flag, dan konstanta di satu tempat ketika pertanyaannya hanya "apa nama tepat dari panggilan ini".

9.20.2. Ke mana selanjutnya

Server Web adalah topik utama berikutnya. Dengan socket yang berfungsi dan TLS tersedia, lapisan alami berikutnya adalah protokol yang dibangun di atasnya: HTTP untuk melayani konten dan API, WebSocket untuk menjaga koneksi terbuka dua arah, dan kerangka kecil yang menyembunyikan kode boilerplate. Semua dari bagian ini berlanjut -- server web, bagaimanapun, hanyalah server TCP yang berbicara HTTP pada socket yang diterimanya, seringkali dengan TLS yang membungkus semuanya.