Saya menyadari hari ini bahwa pada dasarnya saya tidak mengerti cara kerja komunikasi pelabuhan.
Jika saya menjalankan instance server web yang mendengarkan pada port 80, ia dapat menanggapi banyak permintaan dari banyak tab browser yang berbeda, semuanya berkomunikasi melalui port 80.
Namun, saya tidak dapat memulai dua contoh server, keduanya mendengarkan pada port 80, karena mengakibatkan konflik port.
Saya selalu menganggap ini sebagai suatu pemberian, (hanya satu proses yang dapat mengikat ke port tertentu pada waktu tertentu) tanpa pernah benar-benar memikirkannya - tidakkah ada beberapa proses berkomunikasi pada port 80? (mis., masing-masing tab yang berjalan di browser?)
sumber
recv()
dalam setiap proses.Browser terhubung dari port acak tinggi (yaitu> 1024) pada komputer Anda ke port server jauh 80. Oleh karena itu tidak ada konflik port pada mesin Anda.
Jika Anda menggunakan banyak tab untuk terhubung ke server jarak jauh yang sama (atau ada banyak pengguna yang terhubung ke server) mereka semua pergi ke port yang sama dan dilayani oleh proses yang sama (yaitu server web situs).
sumber
Server mendengarkan pada port 80 tidak HARUS menangani beberapa proses. Daemon TCP sederhana dari tahun-tahun yang lebih tua hanya dapat menangani satu koneksi pada satu waktu. Anda dapat meniru perilaku ini dengan memiliki program seperti
netcat
mendengarkan pada port tertentu dan mencoba menghubungkan dua mesin ke sana. Satu akan masuk, yang lain akan bangkit tanpa koneksi. Daemon ini sebagian besar tidak berguna sehingga Anda tidak akan melihatnya lagi.Untuk sesuatu seperti server web, ia mendengarkan langsung di port. Yang perlu diingat adalah bahwa ia berada di atas perpustakaan soket sistem operasi. Ketika koneksi baru dibuat, perpustakaan soket meneruskan soket baru ke perangkat lunak server web. Pada titik itu, perangkat lunak server web memiliki beberapa opsi.
Satu kemungkinan adalah bahwa ia melewati objek-soket ke utas baru dalam proses yang sama. Setiap kali komunikasi terjadi melalui soket ini, utas ini akan menanganinya. Proses induk memediasi thread mana yang aktif pada waktu tertentu, yang bisa banyak.
Kemungkinan lain adalah bahwa ia memutar proses baru dan meneruskan objek soket ke proses. Seperti yang saya pahami, sekarang tergantung pada sistem soket sistem operasi yang memediasi komunikasi antara proses anak ini dan target mereka. Proses induk masih memiliki beberapa kontrol atas proses, seperti membunuh yang digantung dan komunikasi antar-proses lainnya.
Mana dari pendekatan ini yang lebih efisien tergantung pada sistem operasi. IIRC, Apache dapat berjalan di kedua mode.
Pada dasarnya, perpustakaan soket menyediakan tingkat pemrosesan paralel ke server web. Ia dapat menangani beberapa koneksi simultan yang secara aktif mentransfer data, semuanya sambil menerima koneksi baru.
Untuk peramban yang dapat memutar beberapa upaya koneksi ke server web untuk meningkatkan waktu pemuatan, paralelisme juga berlaku pada ujung peramban, ini adalah hal yang baik dan luar biasa. Browser melacak keadaan halaman saat memuat, dan beberapa upaya koneksi yang diputarnya adalah bagian dari proses.
sumber
Ada, secara efektif, dua "tipe" soket aliran. Satu memiliki wildcard "ujung lain", satu memiliki host spesifik: port untuk ujung lainnya.
Tidak ada dua soket yang dapat (atau, lebih tepatnya, seharusnya) memiliki pengidentifikasi "ujung ini" dan "ujung lainnya" yang sama. Soket yang "didengarkan" (menerima koneksi masuk) adalah soket yang memiliki wildcard "ujung", sehingga hanya satu per satu yang bisa ada. Ketika koneksi tiba, sebuah
accept
selesai, mengembalikan sebuah socket dengan sebuah host: port tuple untuk ujung lainnya.sumber
Pertanyaan Anda mengingatkan saya pada diri saya beberapa tahun yang lalu sebelum Cisco CCNA - memiliki keraguan yang sama :)
Pertama, membuat beberapa koneksi HTTP tidak selalu terkait dengan jumlah tab yang Anda buka di browser Anda. Ketika mengunjungi situs dengan iklan atau kode analitik google misalnya, Anda akan terhubung ke beberapa situs meskipun hanya di satu tab.
Bagaimanapun, ketika browser Anda berkomunikasi dengan server web, port tujuan lalu lintas yang dikirim ke server web, adalah port 80, sedangkan port sumber adalah nomor acak. Port sumber adalah untuk memberi tahu server web port mana yang harus ia komunikasikan kembali kepada Anda. Setiap koneksi http yang dibuat akan memiliki port sendiri terbuka di komputer Anda. Coba jalankan netstat dengan beberapa situs web terbuka dan Anda akan segera melihat apa yang saya maksud.
Anda mungkin tertawa tetapi buku ini adalah cara yang hebat & cepat untuk mendapatkan dasar-dasar TCP / IP. Itu banyak membantu saya.
sumber