9.8. Port¶
Alamat IP menunjukkan host mana yang dituju sebuah paket. Host modern menjalankan banyak program sekaligus -- browser web, klien chat, panggilan video, tugas pencadangan -- dan masing-masing mengirim dan menerima paket secara paralel. Lapisan IP tidak memiliki cara untuk membedakan mereka; ia hanya menyerahkan setiap paket yang tiba ke "host". Sesuatu harus memutuskan paket mana yang milik program mana.
Nomor port adalah jawabannya. Setiap paket di lapisan transport membawa dua bidang tambahan di luar header IP: port sumber dan port tujuan. Masing-masing adalah bilangan bulat 16-bit, sehingga ada 65535 kemungkinan nomor port per host. Dikombinasikan dengan alamat IP, port mengidentifikasi satu endpoint spesifik di dalam host -- percakapan spesifik dari program tertentu.
Banyak program berbagi satu alamat IP; port tujuan mengarahkan setiap paket yang tiba ke yang tepat.¶
9.8.1. Port yang terkenal¶
1024 nomor port pertama dicadangkan oleh konvensi untuk layanan standar. Beberapa yang akan ditemui pembaca:
22 -- SSH (protokol Secure Shell, digunakan untuk login jarak jauh terenkripsi).
53 -- DNS, Domain Name System (dibahas di Nama dan DNS).
80 -- HTTP, Hypertext Transfer Protocol -- protokol web yang tidak terenkripsi.
123 -- NTP, Network Time Protocol (cara perangkat mengatur jam mereka dari server waktu).
443 -- HTTPS, HTTP yang dibawa melalui TLS (Transport Layer Security, pembungkus enkripsi standar untuk protokol internet) -- protokol di balik setiap halaman web yang menampilkan ikon kunci di browser.
Konvensi inilah yang memungkinkan browser terhubung ke http://example.com tanpa menentukan port -- diasumsikan 80 karena itulah port yang terkenal untuk HTTP. Kamera yang terhubung ke server web melakukan hal yang sama.
Di atas 1024, nomor port tidak dibatasi dan program apa pun dapat mengklaimnya. Server database (5432 untuk PostgreSQL, 3306 untuk MySQL), server aplikasi, dan protokol kustom semuanya berada di suatu tempat dalam rentang yang lebih tinggi.
9.8.2. Port sementara¶
Server mendengarkan pada port yang dikenal. Klien menggunakan port yang berbeda di ujung mereka sendiri, dipilih baru untuk setiap koneksi keluar.
Ketika kamera terhubung ke server web pada port 443, percakapan terjadi antara
camera IP : <some-port> <--> server IP : 443
<some-port> adalah port sementara -- MicroPython memilih nomor yang tidak digunakan dari rentang tinggi, menggunakannya selama koneksi berlangsung, dan melepaskannya setelahnya. Skrip tidak perlu peduli nomor mana yang dipilih; lapisan socket menanganinya.
9.8.3. Mendengarkan vs berbicara¶
Peran yang dimainkan port bergantung pada sisi percakapan mana ia berada. Dua kasus yang berbeda:
Port mendengarkan milik program yang ingin menerima koneksi yang tidak diminta. Program memberi tahu MicroPython "paket masuk apa pun yang ditujukan ke saya di port 80 adalah milik saya", dan menunggu. Server melakukan ini.
Port terhubung milik program yang ingin memulai percakapan. Program memilih (atau meminta MicroPython memilih) port sementara, mengirim paket dengan itu sebagai port sumber dan port terkenal server sebagai tujuan, dan menggunakan pasangan port yang sama untuk sisa percakapan.
Satu program dapat melakukan keduanya sekaligus, memegang port yang berbeda untuk setiap peran. Kamera mungkin mendengarkan pada port 8000 untuk koneksi HTTP masuk dari antarmuka pengguna konfigurasi dan memegang koneksi HTTPS keluar ke server jarak jauh pada port 443. Kedua peran tidak saling mengganggu -- setiap percakapan diidentifikasi oleh quadruple penuh (src IP, src port, dst IP, dst port), dan tidak ada dua percakapan yang berbagi quadruple yang sama.
9.8.4. Apa yang dibuka port¶
Dengan port tersedia, lapisan transport akhirnya dapat memecahkan masalah pengiriman program-ke-program. Paket sekarang membawa informasi yang cukup untuk diarahkan bukan hanya ke host yang tepat (alamat IP) tetapi ke socket yang tepat di dalam host itu (nomor port).
Dua halaman berikutnya mencakup dua varian yang ditawarkan lapisan transport di atas pengalamatan tersebut: UDP (User Datagram Protocol -- setiap paket independen, tanpa jaminan) dan TCP (Transmission Control Protocol -- stream yang terhubung, andal, dan terurut).