9.2. Protokol berlapis¶
Mengirim bingkai dari kamera ke server di kota lain berarti menyelesaikan beberapa masalah sekaligus. Sinyal listrik harus melewati kabel pertama. Byte-byte di kabel tersebut harus menemukan jalannya melalui switch lokal. Jaringan lokal harus menyerahkan pesan ke apa pun yang berada di antara jaringan itu dan sisa internet. Paket-paket yang berhasil dalam perjalanan harus dirakit kembali secara berurutan. Penerima harus mengetahui program mana yang harus menerimanya. Dan byte-byte itu sendiri harus memiliki arti yang disepakati oleh kedua belah pihak.
Mencoba menyelesaikan semua itu dalam satu blok kode akan sangat sulit dikelola. Jawaban standarnya adalah membagi pekerjaan menjadi lapisan. Setiap lapisan menyelesaikan satu masalah yang terdefinisi dengan baik dan mengekspos layanan sederhana ke lapisan di atasnya. Sebuah program hanya berbicara dengan lapisan tepat di bawahnya; lapisan-lapisan di bawahnya tidak terlihat.
Setiap lapisan dari tumpukan jaringan menyelesaikan satu masalah dan memberikan abstraksi yang bersih ke lapisan berikutnya.¶
9.2.1. Lima lapisan¶
Nama-nama di bawah ini adalah yang digunakan sisa bagian ini. Nama-nama tersebut berasal dari model standar yang menjadi dasar perancangan jaringan. Batas tepat antar lapisan terkadang tidak jelas, namun peran yang dimainkan masing-masing lapisan bersifat stabil.
Lapisan fisik. Memindahkan bit antara dua perangkat di kabel atau radio yang sama. Level tegangan, pulsa cahaya, modulasi RF. Tugas kamera di sini sebagian besar adalah mencolokkan kabel yang tepat atau bergabung dengan jaringan nirkabel yang tepat; silicon melakukan sisanya.
Lapisan link. Memindahkan bingkai (potongan kecil byte) antara dua perangkat yang berbagi segmen lokal. Menambahkan alamat hardware sehingga setiap bingkai dapat diarahkan ke satu tetangga tertentu. Ethernet dan Wi-Fi adalah dua teknologi link yang ditemui kamera dalam praktiknya.
Lapisan jaringan. Memindahkan paket antara dua perangkat mana pun di internet, tidak hanya di segmen lokal yang sama. Menambahkan alamat tingkat perangkat lunak yang mengidentifikasi host secara independen dari kabel mana yang terhubung, dan mekanisme routing yang menghop paket dari satu segmen lokal ke berikutnya hingga tiba. Ini adalah lapisan pertama di mana kode Python kamera mulai memiliki peran.
Lapisan transport. Berada di atas paket dan menawarkan pengiriman antara program pada dua host, bukan hanya host itu sendiri. Dua varian yang umum: satu mengirimkan stream byte yang terhubung dan terurut (andalan untuk sebagian besar traffic), yang lain mengirimkan pesan mandiri yang berjalan secara independen satu sama lain (digunakan ketika overhead rendah lebih penting daripada jaminan). Menambahkan nomor port sehingga beberapa program di host yang sama dapat melakukan percakapan secara paralel.
Lapisan aplikasi. Segalanya di atas transport: protokol yang memberi makna pada byte. Yang digunakan browser web untuk memuat halaman -- dan yang ada di balik hampir setiap layanan internet lain yang sudah digunakan pembaca setiap hari -- berada di sini. Tutorial ini membahas transport secara mendalam; lapisan ini mendapat bagian lanjutan tersendiri.
9.2.2. Cara lapisan-lapisan ditumpuk saat runtime¶
Ketika kamera mengirim byte melalui jaringan, setiap lapisan menambahkan header-nya sendiri di depan data, seperti memasukkan amplop ke dalam amplop lain:
Byte-byte aplikasi dimasukkan pertama kali.
Lapisan transport membungkusnya dengan header kecil yang mengatakan program mana yang menjadi tujuannya (nomor port).
Lapisan jaringan membungkus itu dengan header yang mengatakan host mana yang menjadi tujuannya (alamat tingkat perangkat lunak).
Lapisan link membungkus itu dengan header yang mengatakan perangkat mana di segmen lokal yang harus menerimanya (alamat hardware).
Lapisan fisik mengubah seluruh bundel menjadi bit di kabel.
Di ujung yang lain, setiap lapisan mengupas header-nya sendiri dan menyerahkan sisanya ke atas. Aplikasi penerima mendapatkan byte-nya kembali tanpa menyadari bahwa lapisan jaringan, link, dan fisik pernah ada.
Penumpukan ini adalah alasan tutorial berjalan dari bawah ke atas. Memahami apa yang dilakukan lapisan di bawah membuat lapisan di atas terasa tak terelakkan. Dua lapisan terbawah dibahas dalam satu halaman masing-masing karena hampir tidak ada yang perlu dikonfigurasi dari Python. Dari lapisan jaringan ke atas, langkahnya melambat seiring peran Python semakin besar.