9.6. Paket dan routing¶
Alamat IP menunjukkan kepada siapa sebuah pesan ditujukan. Mekanisme yang sebenarnya mengantarkannya disebut routing, yaitu proses lompatan demi lompatan di mana sebuah paket berjalan dari jaringan lokal pengirim ke jaringan lokal penerima, yang mungkin sangat jauh.
9.6.1. Paket, secara singkat¶
Paket adalah unit kerja lapisan IP -- sekumpulan byte dengan header kecil dan payload. Header memiliki dua field yang penting untuk routing:
Alamat IP sumber (dari mana paket berasal).
Alamat IP tujuan (ke mana paket akan pergi).
Payload adalah apa pun yang diminta lapisan transport kepada lapisan jaringan untuk dikirim. Header paket juga mencakup penghitung time-to-live, checksum atas header, dan beberapa flag kontrol. Tidak satu pun dari itu yang disentuh langsung oleh kode Python kamera.
Paket tidak menjanjikan lebih dari "kami sudah mencoba" -- paket dapat hilang, terduplikasi, atau diterima tidak sesuai urutan. Keandalan dan pengurutan adalah masalah yang diselesaikan oleh lapisan transport di atasnya; lapisan jaringan hanya berusaha sebaik mungkin untuk meneruskan setiap paket menuju tujuannya.
9.6.2. Lompatan demi lompatan¶
Paket meninggalkan kamera dan tiba di perangkat pertama yang tidak berada di segmen lokal kamera: gateway default. (Halaman sebelumnya menyebutkan bahwa DHCP memberikan alamat gateway kepada kamera saat jaringan terhubung.) Perangkat tersebut adalah router -- sebuah kotak yang tugasnya menerima paket, melihat tujuannya, dan meneruskannya.
Paket dari kamera ke tujuan melompat antar router, masing-masing selangkah lebih dekat.¶
Router memiliki sebuah tabel routing -- daftar "untuk tujuan yang cocok dengan pola ini, kirim paket keluar melalui antarmuka ini". Untuk tujuan yang berada di jaringan yang sama dengan kamera, entri tersebut mengatakan "kirim kembali melalui kabel yang datang". Untuk tujuan di internet yang lebih luas, entri mengatakan "kirim ke router hulu". Untuk pola tujuan yang diketahui (VPN perusahaan, jaringan mitra bisnis tertentu, tautan satelit), router mungkin memiliki entri yang lebih spesifik yang mengesampingkan default.
Router hulu melakukan hal yang sama. Dan yang berikutnya. Dan seterusnya. Setiap lompatan memiliki bentuk yang sama: terima paket, cari tujuan dalam tabel, kirim melalui antarmuka yang tepat. Akhirnya paket tiba di router yang berada di segmen lokal yang sama dengan IP tujuan. Router tersebut mengantarkan lompatan terakhir, tujuan menerima paket, dan perjalanan selesai.
9.6.3. Endpoint tidak mengetahui rute¶
Kamera yang mengirim paket ke server jarak jauh tidak mengetahui bagaimana paket akan sampai di sana. Kamera hanya mengetahui IP tujuan dan alamat gateway default miliknya sendiri. Semua yang ada di antaranya -- router mana, serat mana, kabel bawah laut mana -- adalah sesuatu yang diputuskan oleh router di sepanjang jalur seiring berjalannya waktu, berdasarkan tabel mereka sendiri. Router itu sendiri hanya mengetahui tetangga langsungnya dan arah kasar dari tujuan-tujuan umum; tidak ada satu pun perangkat di internet yang memiliki peta lengkap dari seluruh internet.
Desentralisasi itulah yang membuat jaringan tetap bekerja ketika jalur-jalur individual gagal. Kabel yang putus di suatu tempat di tengah menjadi peristiwa re-routing di beberapa router; endpoint tidak pernah menyadarinya. Itulah juga mengapa paket dari kamera di Tokyo ke server di Dublin dapat berhasil tanpa salah satu pihak mengetahui negara-negara mana yang ada di antaranya.
9.6.4. Apa artinya ini bagi skrip Python¶
Tugas kamera pada lapisan jaringan hanya mencakup:
Memiliki alamat IP.
Mengetahui alamat gateway default (DHCP mengisinya secara otomatis).
Menyerahkan paket keluar, yang ditujukan ke alamat IP mana pun, kepada gateway tersebut dan mempercayai sisa jalur.
Sebuah skrip tidak pernah memilih rute, tidak pernah menyebutkan lompatan perantara, dan tidak pernah melihat router di tengah. Skrip menuliskan IP tujuan pada paket dan lapisan jaringan mengambil alih. Dari sudut pandang skrip Python, semua routing hanyalah properti dari jaringan yang telah diikuti kamera -- "gateway mengirim paket ke suatu tempat yang berguna bagi saya".
Lapisan transport yang datang berikutnya mengasumsikan routing bekerja dengan baik, dan membangun keandalan, pengurutan, serta pengalamatan program-ke-program di atas itu.