Jak wiele połączeń klienckich jest nawiązywanych z jednym serwerem WWW?

16

Właściwie uczę się sieci komputerowych i jestem przy tym zdezorientowany, w jaki sposób serwer WWW utrzymuje wiele połączeń?

Mówiąc krótko, nauczyłem się przez Google, że gniazda obsługują każde żądanie klienta.

Powiedzmy, że istnieje serwer WWW, i powiedzmy 2 klientów z adresami IP

Client A: 5.5.5.5
Client B: 10.10.10.10 

Oboje próbują połączyć się z serwerem na porcie 80.

Teraz, od googlingu, co mam, serwer nasłuchuje na porcie 80 dla przychodzących żądań. Powiedzmy, że klient A próbuje połączyć się z serwerem (nawiązać połączenie TCP / IP). Podczas którego między nimi powstaje gniazdo. Następnie jest wykonywany jako osobny wątek dla dalszej komunikacji, dzięki czemu serwer ponownie nasłuchuje innych żądań klienta na tym konkretnym porcie. A klient B łączy się w ten sam sposób.

Teraz moje pierwsze pytanie brzmi:

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

Teraz praktycznie nie tylko 2 klienci, ale tysiące użytkowników mogą połączyć się z serwerem.

Moje następne pytanie brzmi:

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?

Wreszcie moje trzecie pytanie brzmi:

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.

To są moje podstawowe pytania, których nie dostaję. Proszę mnie poprawić, jeśli wszystko popełniam źle. Możesz zasugerować mi kilka książek / pdf do przeczytania, jeśli odpowiedzi są szczegółowe lub nie są szczególnie skoncentrowane na konkretnej części. Dzięki

Sagaryal
źródło
Czy jakaś odpowiedź ci pomogła? Jeśli tak, powinieneś zaakceptować odpowiedź, aby pytanie nie wyskakiwało wiecznie, szukając odpowiedzi. Alternatywnie możesz podać i zaakceptować własną odpowiedź.
Ron Maupin

Odpowiedzi:

6

Teraz, od googlingu, co mam, serwer nasłuchuje na porcie 80 dla przychodzących żądań.

Rzeczywiście, bardziej konkretnie istnieje specjalny typ gniazda zwany gniazdem „nasłuchującym”.

Zwykle gniazdo jest powiązane z kombinacją lokalnego adresu IP, portu lokalnego, zdalnego adresu IP i portu zdalnego.

Gniazdo nasłuchowe jest inne. Nie jest powiązany z żadnym konkretnym zdalnym adresem IP ani portem. Jest powiązany z określonym portem lokalnym. Może, ale nie musi być związany z konkretnym lokalnym adresem IP.

Zwykle twój serwer będzie miał gniazdo nasłuchiwania z lokalnym portem 80

Powiedzmy, że klient A próbuje połączyć się z serwerem (nawiązać połączenie TCP / IP). Podczas którego między nimi powstaje gniazdo.

Para gniazd w rzeczywistości jedno na kliencie, jedno na serwerze.

Aplikacja kliencka tworzy gniazdo i prosi system operacyjny klienta o połączenie go z serwerem.

System operacyjny klienta przydziela losowy port lokalny, wybiera lokalny adres IP (zwykle na podstawie interfejsu, na który pakiet zostanie wysłany) i wypełnia zdalny adres IP oraz port żądany przez aplikację kliencką. Następnie rozpoczyna się proces łączenia z serwerem.

System operacyjny serwera powiadamia posiadacza gniazda nasłuchującego, że nadchodzi nowe połączenie. Aplikacja serwera akceptuje połączenie i tworzone jest nowe gniazdo, aby je obsłużyć.

Wiele wątków lub nawet procesów może monitorować to samo gniazdo listy. System operacyjny zapewni, że dokładnie jeden z nich zaakceptuje dane połączenie.

Następnie jest wykonywany jako osobny wątek do dalszej komunikacji

To zależy od implementatora aplikacji serwera. Mogą wybrać użycie wielu wątków lub interfejs API, taki jak „select” lub „poll”, który pozwala pojedynczemu wątkowi monitorować wiele gniazd pod kątem aktywności.

  1. W jaki sposób serwer komunikuje się z tymi dwoma klientami jednocześnie
    po ustanowieniu połączenia?

System operacyjny serwera dopasuje pakiety do gniazd przez połączenie źródłowego adresu IP, portu źródłowego, docelowego adresu IP i portu docelowego i dostarczy je do odpowiedniego gniazda.

  1. Jak te tysiące klientów łączą się z jednym serwerem?

    Jeśli założymy, że każdy klient jest podłączony do serwera przewodowo, praktycznie nie jest możliwe utrzymanie tylu gniazd na sprzęcie do połączenia. Jak te tysiące połączeń są tworzone i obsługiwane?

„Gniazdo” w tym kontekście nie odnosi się do fizycznego gniazda, a jedynie do struktury danych w systemie operacyjnym.

Nadal istnieją ograniczenia, tysiące można łatwo wykonać na nowoczesnym serwerze, miliony stają się trudne.

Czy to nie jest tak, że gdy uczeń zadaje nauczycielowi pytanie, inny nie może zadawać jednocześnie, ponieważ ten konkretny uczeń jest w tej chwili zajęty lub zajmuje nauczyciela, więc inni powinni poczekać, co porównujemy, niż klient B powinien poczekać gdy klient A się komunikuje.

Komputery są znacznie lepsze w dzieleniu uwagi niż ludzie. Oczywiście, jeśli serwer ma tylko jeden rdzeń procesora, może wykonywać tylko jedną czynność naraz, ale jeśli może wystarczająco szybko przełączać się między rzeczami, klienci tego nie zauważą.

Oczywiście wiele serwerów ma obecnie wiele rdzeni procesorów.


Zostanie utworzone nowe połączenie, a nie gniazdo. Myślę, że pogłębiasz zamieszanie OP dotyczące tego, czym jest gniazdo.

Wydaje się, że problemem jest to, że RFC różni się od rzeczywistej praktyki w definicji gniazda.

Po prostu poszedłem i poszukałem dokumentacji „Akceptuję” dla trzech głównych systemów operacyjnych, wszystkie mówią o akceptacji tworzenia nowego gniazda.

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
źródło
Na odpowiedź 1. Wiem o wyjątkowości gniazda. Chciałem zapytać, czy istnieją 2 unikalne gniazda i serwer wie, że są różne. Czy serwer daje każdemu gniazdu przedział czasu do uruchomienia, obsługując żądanie w tym samym czasie? Na przykład, jeśli połączę się z Google i przetwarzam moje żądanie, nie oznacza to, że oczekują na nie kolejne miliony użytkowników?
Sagaryal
Również 2. Miałem na myśli porty, takie jak fizyczny, gdy chcesz połączyć się z siecią, np. W sieci LAN. Być może źle interpretuję słowa tutaj. Powiedzmy, że ponownie łączę się z Google. I podobnie jak miliony innych ludzi łączą się z tym pojedynczym serwerem Google. Łączę się z Google bezprzewodowo z mojego domu i podobnie tych milionów ludzi. Jak te połączenia są obsługiwane przez serwer? Podobnie jak w przypadku mojego komputera do korzystania z Internetu, muszę połączyć się z portem routera lub bezprzewodowo. Czy fizycznie mają miliony takich portów? Teraz myślę, że nie chodzi o serwer, ale połączenie bezprzewodowe, prawda?
Sagaryal
Zwykle gniazdo jest powiązane z kombinacją lokalnego adresu IP, portu lokalnego, zdalnego adresu IP i portu zdalnego.Gniazdo , z definicji RFC, to lokalny adres IP i port TCP i nie ma to nic wspólnego z adresami zdalnymi . Połączenie jest połączeniem lokalnych i zdalnych gniazd, więc lokalny adres IP, TCP port lokalny, zdalny adres IP i port TCP zdalnego. Pomyliłeś problem.
Ron Maupin
2
System operacyjny serwera powiadamia posiadacza gniazda nasłuchującego, że nadchodzi nowe połączenie. Aplikacja serwera akceptuje połączenie i tworzone jest nowe gniazdo do obsługi. ” Zostaje utworzone nowe połączenie , a nie gniazdo . Myślę, że pogłębiasz zamieszanie OP dotyczące tego, czym jest gniazdo.
Ron Maupin
System operacyjny serwera dopasuje pakiety do gniazd poprzez połączenie źródłowego adresu IP, portu źródłowego, docelowego adresu IP i docelowego portu i dostarczenie ich do odpowiedniego gniazda. ” Ponownie, mylisz gniazdo z połączeniem .
Ron Maupin