Memahami Port: Bagaimana beberapa tab browser berkomunikasi pada saat yang sama? [Tutup]

18

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?)

Marty Pitt
sumber

Jawaban:

24

Pada dasarnya, hanya satu proses yang dapat MENDENGARKAN pada satu port pada satu waktu (secara teknis, satu soket didedikasikan untuk mendengarkan). Tapi, sebuah port dapat menangani banyak soket yang mentransfer data, sebuah soket adalah kombinasi dari IP / port lokal dan alamat IP jarak jauh / port jarak jauh. Dengan cara itu, setelah server menerima koneksi yang masuk sementara MENDENGARKANnya membuka soket baru yang didedikasikan untuk percakapan itu dan menyerahkan pemrosesan ke sesuatu yang lain, kemudian kembali ke MENDENGARKAN.

Lebih detail di sini .

EightBitTony
sumber
Sebenarnya Anda dapat memiliki beberapa proses mendengarkan pada port yang sama. Jika Anda melakukannya dengan beberapa pembaca udp misalnya, Anda akan mendapatkan penyeimbangan beban pada level kernel. Pertama buka soket untuk mendengarkan, lalu garpu dan coba recv()dalam setiap proses.
viraptor
5
@ Viraptor: Benar, tetapi karena UDP tidak terhubung, sebenarnya tidak ada perbedaan antara "mendengarkan" dan "menerima".
Adam Robinson
Gagasan yang sama bekerja dengan TCP, proses forking dengan socket mendengarkan dan accept () pada keduanya.
viraptor
Sebenarnya, soket hanya satu "titik akhir" untuk komunikasi. Saya kira apa yang Anda katakan adalah bahwa soket yang terhubung adalah kombinasi dari IP / port lokal dan IP / address / port jarak jauh. Soket kata sangat sering digunakan sehingga sulit bagi saya untuk mencari tahu apa itu deskripsi sebenarnya
westoque
14

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).

Paweł Brodacki
sumber
2
Ini jawaban yang benar. Koneksi TCP memiliki nomor port di kedua ujungnya. Kedua komputer yang terlibat dapat membedakan antara situs web koneksi: 80 <-> browser: 12397 dan situs web koneksi yang berbeda: 80 <-> browser: 22958.
pjc50
7

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 netcatmendengarkan 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.

sysadmin1138
sumber
+1 karena benar dalam banyak hal :)
Michael Lowman
2

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 acceptselesai, mengembalikan sebuah socket dengan sebuah host: port tuple untuk ujung lainnya.

Vatine
sumber
1

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.

Amivit
sumber