Tek bir web sunucusuna birden çok istemci bağlantısı nasıl yapılır?


16

Aslında Bilgisayar Ağları öğreniyorum ve bu sırada bir web sunucusunun birden çok bağlantıyı nasıl koruduğuna kafam karıştı ?

Basitçe söylemek gerekirse, bazı googling ile öğrendim, yuvalar her bir istemci isteğini ele alıyor.

Diyelim ki bir web sunucusu var ve diyelim ki IP'li 2 istemci

Client A: 5.5.5.5
Client B: 10.10.10.10 

Her ikisi de 80 numaralı bağlantı noktasından sunucuya bağlanmaya çalışır .

Şimdi, sahip olduğum googling gelen sunucu , gelen istekleri 80 numaralı bağlantı noktasında dinler . Sonra A istemcisinin sunucuya bağlanmaya çalıştığını varsayalım (TCP / IP bağlantısı kurun). Bu ikisi arasında bir soket oluşturulur. Ardından, sunucunun söz konusu bağlantı noktasındaki diğer istemci isteklerini yeniden dinlemesini sağlamak için daha fazla iletişimi için ayrı bir iş parçacığı olarak yürütülür. Ve Müşteri B aynı şekilde bağlar.

Şimdi ilk sorum:

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

Şimdi pratik olarak sadece 2 istemci değil, binlerce ve milyonlarca kullanıcı bir sunucuya bağlanabilir.

O zaman bir sonraki sorum:

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?

Son olarak, 3. sorum:

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.

Bunlar benim elde edemediğim temel sorularım. Her şeyi yanlış anlıyorsam lütfen beni düzeltin. Cevapların ayrıntılı olması veya kısmen belirli bir bölüme odaklanmaması durumunda bana bazı kitapları / PDF'leri okumasını önerebilirsiniz. Teşekkürler


Herhangi bir cevap size yardımcı oldu mu? Öyleyse, cevabı kabul etmelisiniz, böylece soru sonsuza kadar ortaya çıkmayacak, bir cevap arıyor. Alternatif olarak, kendi cevabınızı verebilir ve kabul edebilirsiniz.
Ron Maupin

Yanıtlar:


6

Şimdi, sahip olduğum googling gelen sunucu, gelen istekleri 80 numaralı bağlantı noktasında dinler.

Aslında, daha özel olarak "dinleme" soketi adı verilen özel bir soket türü vardır.

Normalde bir soket yerel IP, yerel bağlantı noktası, uzak IP ve uzak bağlantı noktası birleşimi ile ilişkilendirilir.

Bir dinleme soketi farklıdır. Belirli bir uzak IP ve bağlantı noktasıyla ilişkili değildir. Belirli bir yerel bağlantı noktasıyla ilişkilendirilir. Belirli bir yerel IP ile ilişkili olabilir veya olmayabilir.

Normalde web sunucunuzda yerel bağlantı noktası 80 olan bir dinleme soketi bulunur.

Sonra A istemcisinin sunucuya bağlanmaya çalıştığını varsayalım (TCP / IP bağlantısı kurun). Bu ikisi arasında bir soket oluşturulur.

Bir çift soket aslında biri istemcide, diğeri sunucuda.

İstemci uygulaması bir yuva oluşturur ve istemci işletim sisteminden onu sunucuya bağlamasını ister.

İstemci işletim sistemi rastgele bir yerel bağlantı noktası ayırır, yerel bir IP seçer (normalde paketin gönderileceği arabirime göre) ve istemci uygulaması tarafından istenen uzak IP'yi ve bağlantı noktasını doldurur. Sonra sunucuya bağlanma işlemini başlatır.

Sunucu işletim sistemi, dinleme soketinin sahibine yeni bir bağlantının geldiğini bildirir. Sunucu uygulaması bağlantıyı kabul eder ve işlemek için yeni bir soket oluşturulur.

Birden çok iş parçacığı ve hatta işlem aynı giriş soketini izleyebilir. İşletim sistemi, tam olarak bir tanesinin belirli bir bağlantıyı kabul etmesini sağlayacaktır.

Sonra daha fazla iletişim için ayrı bir iş parçacığı olarak yürütülür

Bu sunucu uygulamasının uygulayıcısıdır. Birden çok iş parçacığı kullanmayı seçebilirler veya tek bir iş parçacığının etkinlik için birden çok soketi izlemesini sağlayan "select" veya "anket" gibi bir API kullanmayı seçebilirler.


  1. Bağlantı kurulduktan sonra sunucu bu iki istemciyle aynı anda nasıl iletişim kurar?

Sunucu işletim sistemi paketleri kaynak IP, kaynak bağlantı noktası, hedef IP ve hedef bağlantı noktası birleşimiyle soketlerle eşleştirecek ve uygun sokete teslim edecektir.

  1. Şimdi, bu binlerce istemci tek bir sunucuya nasıl bağlanır?

    Her istemcinin sunucuya kabloyla bağlandığını varsayarsak, bağlantı için bir donanımdaki birçok soketin korunması pratik olarak mümkün değildir. Bu binlerce bağlantı nasıl yapılır ve ele alınır?

Bu bağlamdaki "soket", fiziksel bir sokete değil, yalnızca işletim sistemindeki bir veri yapısına işaret eder.

Hala sınırlar var, binlerce modern sunucuda kolayca yapılabilir, milyonlar zorlaşır.

Bir öğrenci bir öğretmene soru sorurken öyle değil mi, diğer öğrenci aynı anda soramaz, çünkü o öğrenci meşgul ya da şu anda öğretmeni işgal ediyor, bu yüzden diğerleri beklemeli, B müşterisinden beklemeliyiz A istemcisi iletişim kurarken.

Bilgisayarlar dikkatlerini insanlardan ayırmada çok daha iyidir. Açıkçası sunucu sadece bir işlemci çekirdeğine sahipse, aynı anda sadece bir şey yapıyor olabilir, ancak işler arasında hızlı bir şekilde geçiş yapabiliyorsa, müşteriler bunu fark etmeyecektir.

Ve elbette günümüzde birçok sunucunun birden fazla işlemci çekirdeği var.


Soket değil, yeni bir bağlantı oluşturulur. Bence OP'nin bir soketin ne olduğu konusundaki karışıklığını arttırıyorsunuz.

Sorun, rfc'nin soket tanımındaki gerçek uygulamadan farklı olduğu anlaşılıyor.

Ben sadece üç büyük işletim sistemi için "kabul" belgelerini aradım, hepsi yeni bir soket oluşturmayı kabul etmek hakkında konuşuyor.

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


Cevap 1 için. Soketin benzersizliğini biliyorum. Sormak istediğim 2 benzersiz soket olup olmadığını ve sunucu farklı olduklarını biliyor olmasıdır. O zaman sunucu isteği aynı anda işleyerek her sokete bir zaman dilimi verir mi? Google'a bağlanırsam ve isteğimi işleme koyarsam, diğer milyon kullanıcı isteğinin beklemede olduğu anlamına gelmez?
Sagaryal

Ayrıca 2. LAN'da olduğu gibi bir ağa bağlanmak istediğinizde gerçek fiziksel gibi portları kastediyorum. Buradaki kelimeleri yanlış yorumluyordum. Diyelim ki Google'a tekrar bağlandım. Ve milyonlarca insan gibi o tek google sunucusuna bağlanıyor. Google'a evimden ve benzer şekilde bu milyon kişiden kablosuz olarak bağlanıyorum. Bu bağlantılar sunucu tarafından nasıl yönetilir? Bilgisayarımın internet kullanması gibi yönlendiricimdeki bir bağlantı noktasına veya kablosuz olarak bağlanmam gerekiyor. Fiziksel olarak bu tür milyonlarca limanı var mı? Şimdi onun sunucu hakkında değil kablosuz bağlantı olduğunu düşünüyorum?
Sagaryal

" Normalde bir soket yerel IP, yerel bağlantı noktası, uzak IP ve uzak bağlantı noktası birleşimi ile ilişkilidir. " RFC'nin tanımına göre bir soket yerel IP adresi ve TCP bağlantı noktasıdır ve uzak adreslerle ilgisi yoktur. . Bir bağlantı böylece yerel IP adresi, yerel TCP portu, uzak IP adresi ve uzak TCP portu, yerel ve uzak soketlerinin kombinasyonudur. Sorunu karıştırdınız.
Ron Maupin

2
" Sunucu işletim sistemi dinleme soketinin sahibine yeni bir bağlantının geldiğini bildirir. Sunucu uygulaması bağlantıyı kabul eder ve işlemek için yeni bir soket oluşturulur. " Soket değil, yeni bir bağlantı oluşturulur. Bence OP'nin bir soketin ne olduğu konusundaki karışıklığını arttırıyorsunuz.
Ron Maupin

" Sunucu OS kaynak IP, kaynak portu, hedef IP ve hedef port kombinasyonu ile yuvalarına karşı paketlerini eşleştirmek ve uygun sokete onları teslim edecek. " Yine, karıştırıyorsun soketi ile bağlantılı .
Ron Maupin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.