Bagaimana beberapa koneksi klien dibuat ke server web tunggal?

16

Sebenarnya saya sedang belajar Jaringan Komputer dan saat itu, saya bingung bagaimana server web memelihara banyak koneksi?

Secara sederhana, saya belajar melalui beberapa googling adalah bahwa soket menangani setiap permintaan klien.

Jadi katakanlah ada server web dan katakanlah 2 klien dengan IP

Client A: 5.5.5.5
Client B: 10.10.10.10 

Keduanya mencoba terhubung ke server di port 80.

Sekarang, dari googling apa yang saya dapatkan adalah, server mendengarkan di port 80 untuk permintaan yang masuk. Kemudian katakanlah klien A mencoba terhubung ke server (melakukan koneksi TCP / IP). Selama soket dibuat di antara keduanya. Kemudian dieksekusi sebagai utas terpisah untuk komunikasi selanjutnya yang membuat server kembali mendengarkan permintaan klien lain di port tertentu. Dan Klien B menghubungkan dengan cara yang sama.

Sekarang pertanyaan pertama saya adalah:

1. How does server communicate with these two clients simultaneously  
   after the connection has been established?

Sekarang praktis tidak hanya 2 klien tetapi ribuan dan jutaan pengguna dapat terhubung ke server.

Maka pertanyaan saya selanjutnya adalah:

2. Now, how do those thousands of clients get connected to a single server?

   If we assume every client is connected to the server through wire, it is not 
   practically possible to maintain that many sockets on a hardware for
   connection. How those thousands connections are made and handled?

Terakhir, pertanyaan ketiga saya adalah:

3. Above I said (actually heard) how **client A** connected to the the server
   and similarly the client B.

   But I didn't get the part stating "after a TCP/IP connection is made they
   continue separately in a separate socket and making server to listen for 
   other client requests." What does that mean? If one client is communicating
   to the server, how come other can communicate at the same time to same server.

   Isn't it like while a student is asking question to a teacher, other can't
   ask at the same time since that particular student is busy or occupying the
   teacher at the moment so others should wait, which we compare than client B 
   should wait when client A is communicating.

Ini adalah pertanyaan dasar saya yang tidak saya dapatkan. Harap perbaiki saya jika saya salah mengerti. Anda dapat menyarankan saya beberapa buku / pdf untuk dibaca jika jawabannya terperinci atau tidak sebagian terfokus pada bagian tertentu. Terima kasih

Sagaryal
sumber
Apakah ada jawaban yang membantu Anda? Jika demikian, Anda harus menerima jawabannya sehingga pertanyaan tidak terus muncul selamanya, mencari jawaban. Atau, Anda bisa memberikan dan menerima jawaban Anda sendiri.
Ron Maupin

Jawaban:

6

Sekarang, dari googling apa yang saya dapatkan adalah, server mendengarkan di port 80 untuk permintaan yang masuk.

Memang, lebih khusus lagi ada jenis soket khusus yang disebut soket "mendengarkan".

Biasanya soket dikaitkan dengan kombinasi IP lokal, port lokal, IP jarak jauh dan port jarak jauh.

Soket mendengarkan berbeda. Ini tidak terkait dengan IP dan port jarak jauh tertentu. Itu terkait dengan port lokal tertentu. Ini mungkin atau mungkin tidak terkait dengan IP lokal tertentu.

Biasanya server web Anda akan memiliki soket mendengarkan dengan port lokal 80

Kemudian katakanlah klien A mencoba terhubung ke server (melakukan koneksi TCP / IP). Selama soket dibuat di antara keduanya.

Sepasang soket sebenarnya satu di klien, satu di server.

Aplikasi klien membuat soket dan meminta OS klien untuk menghubungkannya ke server.

OS klien mengalokasikan port lokal acak, memilih IP lokal (biasanya berdasarkan pada interface mana paket akan dikirim) dan mengisi IP jarak jauh dan port yang diminta oleh aplikasi klien. Kemudian mulai proses menghubungkan ke server.

OS server memberi tahu pemegang soket pendengaran bahwa ada koneksi baru. Aplikasi server menerima koneksi dan soket baru dibuat untuk menanganinya.

Beberapa utas atau bahkan proses dapat memantau soket cantuman yang sama. OS akan memastikan bahwa salah satu dari mereka dapat menerima koneksi yang diberikan.

Kemudian dieksekusi sebagai utas terpisah untuk komunikasi selanjutnya

Itu terserah pelaksana aplikasi server. Mereka dapat memilih untuk menggunakan beberapa utas atau mereka dapat memilih untuk menggunakan API seperti "pilih" atau "jajak pendapat" yang memungkinkan satu utas untuk memantau beberapa soket untuk aktivitas.

  1. Bagaimana cara server berkomunikasi dengan dua klien ini secara bersamaan
    setelah koneksi dibuat?

OS server akan mencocokkan paket dengan soket dengan kombinasi IP sumber, port sumber, IP tujuan, dan port tujuan dan mengirimkannya ke soket yang sesuai.

  1. Sekarang, bagaimana ribuan klien itu terhubung ke satu server?

    Jika kami menganggap setiap klien terhubung ke server melalui kabel, praktis tidak mungkin untuk mempertahankan banyak soket pada perangkat keras untuk koneksi. Bagaimana ribuan koneksi itu dibuat dan ditangani?

"Socket" dalam konteks ini tidak merujuk ke soket fisik, hanya pada struktur data dalam sistem operasi.

Masih ada batasan, ribuan dapat dilakukan dengan mudah di server modern, jutaan menjadi sulit.

Bukankah itu seperti ketika seorang siswa mengajukan pertanyaan kepada seorang guru, yang lain tidak dapat bertanya pada saat yang sama karena siswa tersebut sedang sibuk atau menduduki guru pada saat itu sehingga orang lain harus menunggu, yang kita bandingkan daripada klien B harus menunggu ketika klien A berkomunikasi.

Komputer jauh lebih baik dalam membagi perhatian mereka daripada orang lain. Jelas jika server hanya memiliki satu inti prosesor, itu hanya dapat melakukan satu hal pada satu waktu tetapi jika itu dapat beralih di antara berbagai hal dengan cukup cepat, klien tidak akan menyadari hal itu.

Dan tentu saja banyak server saat ini memang memiliki beberapa inti prosesor.


Koneksi baru, bukan soket, akan dibuat. Saya pikir Anda memperluas kebingungan OP tentang apa itu soket.

Tampaknya masalahnya adalah bahwa rfc berbeda dari praktik sebenarnya dalam definisi soketnya.

Saya baru saja pergi dan mencari dokumentasi untuk "menerima" untuk tiga sistem operasi utama, semuanya berbicara tentang menerima membuat soket baru.

http://man7.org/linux/man-pages/man2/accept.2.html

https://www.freebsd.org/cgi/man.cgi?query=accept&sektion=2

https://msdn.microsoft.com/en-us/library/windows/desktop/ms737526%28v=vs.85%29.aspx

Peter Green
sumber
Untuk jawaban 1. Saya tahu tentang keunikan soket. Yang ingin saya tanyakan adalah apakah ada 2 soket unik dan server tahu mereka berbeda. Lalu apakah server memberi setiap soket waktu untuk berjalan dengan menangani permintaan pada saat yang sama? Seperti jika saya terhubung ke Google dan sedang memproses permintaan saya, itu tidak berarti permintaan juta pengguna lain sedang menunggu keputusan?
Sagaryal
Juga 2. Yang saya maksud adalah port-port seperti port fisik aktual ketika Anda ingin terhubung ke jaringan, seperti di LAN. Saya mungkin salah menafsirkan kata-kata di sini. Katakanlah saya terhubung ke google lagi. Dan seperti jutaan orang lainnya yang terhubung ke server google tunggal itu. Saya terhubung ke google secara nirkabel dari rumah saya dan juga jutaan orang itu. Bagaimana koneksi ini ditangani oleh server. Seperti untuk komputer saya menggunakan internet saya harus terhubung ke port pada router saya atau secara nirkabel. Apakah mereka memiliki jutaan port seperti itu secara fisik? Sekarang saya pikir ini bukan tentang server tetapi koneksi nirkabel bukan?
Sagaryal
" Biasanya soket dikaitkan dengan kombinasi IP lokal, port lokal, IP jarak jauh dan port jarak jauh. " Soket , menurut definisi RFC adalah alamat IP lokal dan port TCP, dan tidak ada hubungannya dengan alamat jarak jauh . Sebuah koneksi adalah kombinasi dari soket lokal dan remote, sehingga alamat IP lokal, TCP port lokal, alamat IP remote, dan port TCP jarak jauh. Anda telah membingungkan masalah ini.
Ron Maupin
2
" Server OS memberi tahu pemegang soket pendengaran bahwa ada koneksi baru. Aplikasi server menerima koneksi dan soket baru dibuat untuk menanganinya. " Koneksi baru , bukan soket , akan dibuat. Saya pikir Anda memperluas kebingungan OP tentang apa itu soket.
Ron Maupin
" Server OS akan mencocokkan paket dengan soket dengan kombinasi IP sumber, port sumber, IP tujuan dan port tujuan dan mengirimkannya ke soket yang sesuai. " Sekali lagi, Anda membingungkan soket dengan koneksi .
Ron Maupin