Zrozumienie portów: Jak komunikuje się wiele kart przeglądarki jednocześnie? [Zamknięte]


18

Zrozumiałem dzisiaj, że zasadniczo nie rozumiem, jak działa komunikacja portowa.

Jeśli odpalę instancję serwera WWW nasłuchującego na porcie 80, może on odpowiedzieć na wiele żądań z wielu różnych kart przeglądarki, wszystkie komunikują się przez port 80.

Nie mogę jednak uruchomić dwóch instancji serwera, obydwu nasłuchujących na porcie 80, ponieważ powoduje to konflikt portów.

Zawsze traktowałem to jako dane (tylko jeden proces może się połączyć z określonym portem w danym momencie) bez zastanowienia się nad tym - czy na porcie 80 nie komunikuje się wiele procesów? (tj. każda z kart działających w przeglądarce?)

Odpowiedzi:


24

Zasadniczo tylko jeden proces może SŁUCHAĆ jednocześnie portu (technicznie jedno gniazdo jest przeznaczone do nasłuchiwania). Ale port może obsłużyć wiele gniazd przesyłających dane, gniazdo to połączenie lokalnego adresu IP / portu i zdalnego adresu IP / portu zdalnego. W ten sposób, gdy serwer zaakceptuje połączenie przychodzące podczas ODTWARZANIA, otwiera nowe gniazdo dedykowane tej rozmowie i przekazuje przetwarzanie innemu, a następnie wraca do ODTWARZANIA.

Więcej szczegółów tutaj .


W rzeczywistości można mieć wiele procesów nasłuchujących na tym samym porcie. Jeśli zrobisz to na przykład z wieloma czytnikami udp, uzyskasz równoważenie obciążenia na poziomie jądra. Najpierw otwórz gniazdo do słuchania, a następnie rozwidlaj i spróbuj recv()w każdym procesie.
viraptor

5
@viraptor: To prawda, ale ponieważ UDP nie ma połączenia, tak naprawdę nie ma różnicy między „nasłuchiwaniem” a „odbieraniem”.
Adam Robinson

Ten sam pomysł działa z TCP, rozwidlając proces z gniazdem nasłuchującym i akceptując () na obu.
viraptor,

W rzeczywistości gniazdo to tylko jeden „punkt końcowy” do komunikacji. Myślę, że chciałeś powiedzieć, że podłączone gniazdo jest kombinacją lokalnego adresu IP / portu i zdalnego adresu IP / adresu / zdalnego portu. Słowo „ gniazdo” jest tak często używane, że trudno mi było zorientować się, jaki jest jego rzeczywisty opis
westoque 19.09.16

14

Przeglądarka łączy się z losowo wysokiego (tj.> 1024) portu w komputerze z portem 80 serwera zdalnego. Dlatego nie ma konfliktu portów na twoim komputerze.

Jeśli korzystasz z wielu kart, aby połączyć się z tym samym zdalnym serwerem (lub wielu użytkowników łączy się z serwerem), wszyscy przechodzą do tego samego portu i są obsługiwani przez ten sam proces (tj. Serwer WWW witryny).


2
To jest poprawna odpowiedź. Połączenia TCP mają numer portu na obu końcach. Oba zaangażowane komputery mogą rozróżnić między witryną połączenia: 80 <-> przeglądarka: 12397 a inną witryną połączenia: 80 <-> przeglądarka: 22958.
pjc50,

7

Serwer nasłuchujący na porcie 80 NIE MUSI obsługiwać wielu procesów. Proste demony TCP starszych lat mogły obsługiwać tylko jedno połączenie na raz. Możesz naśladować to zachowanie, mając program taki jak netcatnasłuch na określonym porcie i spróbuj podłączyć do niego dwie maszyny. Jeden wejdzie, drugi odbije się bez połączenia. Te demony są w większości bezużyteczne, więc już ich nie widzisz.

W przypadku czegoś takiego jak serwer WWW nasłuchuje bezpośrednio na porcie. Należy pamiętać, że znajduje się on nad biblioteką gniazd systemu operacyjnego. Po ustanowieniu nowego połączenia biblioteka gniazd przekazuje zupełnie nowe gniazdo do oprogramowania serwera WWW. W tym momencie oprogramowanie serwera WWW ma pewne opcje.

Jedną z możliwości jest to, że przekazuje obiekt gniazda do nowego wątku w tym samym procesie. Ilekroć komunikacja odbywa się przez to gniazdo, ten wątek sobie z tym poradzi. Proces nadrzędny pośredniczy w tym, które wątki są aktywne w danym momencie, co może być dużo.

Inną możliwością jest to, że rozpędza nowy proces i przekazuje obiekt gniazda do procesu. Jak rozumiem, teraz system gniazdowy systemu operacyjnego pośredniczy w komunikacji między tymi procesami potomnymi a ich celami. Proces nadrzędny nadal ma pewną kontrolę nad procesami, takimi jak zabijanie zawieszonych i inna komunikacja między procesami.

To, które z tych podejść jest bardziej wydajne, zależy od systemu operacyjnego. IIRC, Apache może działać w dowolnym trybie.

Zasadniczo biblioteka gniazd zapewnia poziom równoległego przetwarzania do serwera WWW. Może obsługiwać wiele jednoczesnych połączeń aktywnie przesyłających dane, a wszystko to przy jednoczesnym akceptowaniu nowych połączeń.

W przypadku przeglądarki, która może rozdzielić wiele prób połączenia z serwerem sieciowym w celu skrócenia czasu ładowania, równoległość dotyczy również końca przeglądarki, jest to dobra i cudowna rzecz. Przeglądarka śledzi stan strony podczas wczytywania, a wszystkie próby połączenia, które wykręca, są częścią tego procesu.


+1 za to, że ma rację na wiele sposobów :)
Michael Lowman,

2

Istnieją dwa „typy” gniazd strumieniowych. Jeden ma „drugi koniec” z dziką kartą, jeden ma określony host: port dla drugiego końca.

Żadne dwa gniazda nie mogą (a raczej powinny nigdy) mieć takie same identyfikatory „ten koniec” i „drugi koniec”. Gniazdo „nasłuchiwane” (przyjmujące połączenia przychodzące) to gniazdo, które ma „drugi koniec” z dziką kartą, więc może istnieć tylko jedno na raz. Gdy nadchodzą połączenia, następuje zakończenie accept, zwracane jest gniazdo z krotką host: port dla drugiego końca.


1

Twoje pytanie przypomina mi się kilka lat temu przed Cisco CCNA - miałem te same wątpliwości :)

Po pierwsze, nawiązywanie wielu połączeń HTTP niekoniecznie wiąże się z liczbą kart otwartych w przeglądarce. Na przykład odwiedzając witrynę z reklamami lub kodem Google Analytics, łączysz się z wieloma witrynami, mimo że znajduje się tylko na jednej karcie.

W każdym razie, kiedy twoja przeglądarka komunikuje się z serwerem, docelowym portem ruchu wysyłanego do serwera jest port 80, podczas gdy port źródłowy jest liczbą losową. Port źródłowy ma poinformować serwer WWW, w którym porcie powinien się z tobą skontaktować. Każde nawiązane połączenie HTTP będzie miało własny port otwarty na twoim komputerze. Spróbuj uruchomić netstat z kilkoma otwartymi stronami, a natychmiast zobaczysz, co mam na myśli.

Możesz się śmiać, ale ta książka to świetny i szybki sposób na zapoznanie się z podstawami TCP / IP. Bardzo mi pomogło.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.