W jaki sposób serwer jest powiadamiany o żądaniu HTTP?


8

Rozumiem, jak działa HTTP . Rozumiem, że klient (przeglądarka internetowa) wysyła żądanie, a serwer odpowiada na żądanie. Jednak nie rozumiem, skąd serwer internetowy wie, kiedy klient wysyła żądanie?

Jeśli ktoś do mnie zadzwoni, mój telefon zadzwoni, a ja otrzymam powiadomienie. Podobnie, w jaki sposób serwer WWW jest powiadamiany o żądaniu?


2
Jak to nie jest duplikat 5 lat po uruchomieniu Super User?
Peter Mortensen

Odpowiedzi:


28

Jest w tym wiele warstw. Co ważne, wiele z nich jest wymiennych.

Na przykład możesz mieć sieć koncentryczną, Ethernet lub Wi-Fi na poziomie fizycznym. HTTP działa na wszystkich, ale każdy z nich ma nieco inną obsługę wysyłanego ładunku.

HTTP działa na innym protokole, zwanym TCP, który z kolei mniej więcej działa na innym protokole, zwanym IP (obecnie głównie w dwóch wariantach - IPv4 i IPv6).

Tak więc serwer HTTP rejestruje w systemie operacyjnym adres IP (jak 184.38.45.1, lub najczęściej „dowolny”) wraz z portem TCP ( 80domyślnym dla HTTP, ale ogólnie od czegoś 1do 65535). Teraz serwer HTTP informuje system operacyjny, aby wysłał polecenie ping, gdy pojawią się dane (lub inna wiadomość). System operacyjny wie, kiedy to nastąpi, ponieważ sterownik karty sieciowej tak mówi. A sterownik karty sieciowej jest informowany przez samą kartę sieciową, która faktycznie ma własne oprogramowanie do interpretacji sygnałów elektrycznych na kablu sieciowym (lub sygnałów bezprzewodowych w powietrzu itp., Masz pomysł).

Uwaga dodatkowa :

Jeśli chcesz dowiedzieć się więcej o tym, jak karta sieciowa może zainicjować komunikację ze sterownikiem / systemem operacyjnym, możesz poszukać podstawowych informacji o przerwaniach sprzętowych - w zasadzie to, co aktualnie wykonuje procesor, jest zatrzymywane, a przepływ programu przechodzi w przerwanie procedura obsługi - niezwykle prosty fragment kodu, który zajmuje się powiadamianiem systemu, a następnie natychmiast przywraca kontrolę do pierwotnej czynności wykonywanej przez procesor. W rzeczywistości może odpowiedzieć na wiele pytań na temat wewnętrznego działania systemu operacyjnego i samego komputera - na przykład, w jaki sposób system operacyjny może „ukraść” procesor z uruchomionych aplikacji i przetasować zasoby procesora między różnymi aplikacjami działającymi w tym samym czasie, nawet jeśli nie współpracują.

Powrót do biznesu:

W analogii ręcznego telefonu wyobraź sobie, że telefon tak naprawdę nie dzwoni. Aby wiedzieć, czy próbujesz zadzwonić, musisz okresowo patrzeć na ekran i sprawdzać. Aby ułatwić zarządzanie serwerem HTTP (ponieważ istnieje już kilka warstw, które wykonują tę kontrolę okresową), możesz faktycznie zablokować próbę sprawdzenia.

Zamiast więc sprawdzać, widzieć, że nic tam nie ma i sprawdzać ponownie, w zasadzie cały czas patrzysz na ekran. Jednak w zasadzie masz do czynienia z całym oddzielnym systemem (w twoim przypadku centrum słuchu, które sprawdza wibracje powietrza pod kątem przydatnych informacji, pierścień), więc tak naprawdę nie wymaga twojej uwagi (czasu procesora).

Jest to dodatkowo ulepszone przez techniki, które pozwalają monitorować wiele połączeń jednocześnie (IOCP). Zbliża się to coraz bardziej do systemu dzwonienia telefonu - masz pokój z dziesięcioma tysiącami telefonów, ale dbasz tylko o te, które w tej chwili dzwonią, a inni nie zwracają na ciebie uwagi.


Ostrożnie, „ping” ma inne całkowicie niezwiązane znaczenie w sieci. Ponadto, dlaczego nikt nie wspominał o „przerwaniach sprzętowych”?
Lie Ryan

1
@LieRyan Cóż, tak, w tej części karta sieciowa informuje sterownik karty sieciowej. Czuje się jak drobna plamka na ogromnej liście abstrakcji, które są w to zaangażowane, i naprawdę, poza ludźmi bawiącymi się oldschoolowymi architekturami, urządzeniami wbudowanymi lub twórcami sterowników, jest to dość niejasna wiedza, niestety. Ale cóż, chyba dodam krótką wzmiankę.
Luaan

1
Czy porty to tylko liczby? czy są to fizyczne szpilki na karcie NIC? Trudno mi wyobrazić sobie, że może istnieć 65536 portów
Dhiwakar Ravikumar

2
@DhiwakarRavikumar: Tak, porty to tylko liczby. Są tworzone przez program lub system operacyjny, nie odpowiadają one żadnemu sprzętowi.
sleske

1
@DhiwakarRavikumar Porty to tylko cyfry, ale przerwania sprzętowe były tak naprawdę sprzętowymi pinami procesora (więc miałeś inny pin dla „dostałem podział przez zero!” I inny dla „budzika dzwoni”). Mieliście tylko trzy lub siedem różnych przerwań lub przez większość czasu. Jest to porównywalne ze starymi stacjami telefonicznymi - kiedyś miały fizyczne piny, które trzeba było podłączyć, aby zadzwonić, ale obecnie są one wyposażone w oprogramowanie, podobnie jak porty TCP.
Luaan

9

Komputery używają koncepcji zwanej „portami”, analogicznej do „rozszerzeń” dla centrali telefonicznej: Klient nie tylko „dzwoni” do adresu IP serwera, ale także wysyła żądanie do określonego portu na tym serwerze.

Istnieją tysiące portów ( lista wikipedia ), np. Port 80 jest domyślny dla HTTP.

Sztuka polega na tym, że program, np. Serwer WWW, może się zarejestrować, aby nasłuchiwać na określonym porcie. Następnie system operacyjny przekaże wszelkie żądania przychodzące przez ten port do tego programu.

Istotą posiadania kilku portów jest to, że możesz mieć wiele usług działających na tym samym serwerze w tym samym czasie, używając różnych portów, które nie będą ze sobą kolidować.


Dokładnie 65 535 portów
ub3rst4r

3

Serwer sieciowy powiadomił o następującym procesie

Accept ()
Liseten()
bind()
socket()

Powiedzmy, że serwer nasłuchuje na porcie 80, gdy żądanie klienta pojawi się na porcie 80, zaakceptuje połączenie z wywołaniem systemowym accept (). To połączenie zwykle blokuje się, dopóki klient nie połączy się z serwerem.

Następnie nasłuchuj połączeń z wywołaniem systemowym listen () i powiąż gniazdo z adresem za pomocą wywołania systemowego bind ().

Atlast tworzy gniazdo za pomocą wywołania systemowego socket ().

Mam nadzieję że to pomoże!


0

Masz katalog / var / log / apache2 z następującym katalogiem:

access.log
error.log
other_vhosts_access.log

Jest to związane z tym, że chcesz od klienta i jak powiadamiać, sms, e-mail i tak dalej.

Moja sugestia:

Możesz utworzyć serwer dziennika i wysłać każdy dziennik, taki jak serwer poczty, serwer DNS, serwer WWW itd., Następnie możesz go przeanalizować, Nawet ten sam serwer używa bazy danych i możesz uruchomić zapytanie.


Dziękuję za odpowiedź, ale myślę, że źle zrozumiałeś moje pytanie. Miałem na myśli, kiedy dostaję telefon, mój telefon dzwoni. Wiem, że dostałem telefon, ponieważ zadzwonił mój telefon. Podobnie, kiedy klient zgłasza żądanie, w jaki sposób serwer WWW jest powiadamiany?
raj ciekawy

0

Wydaje mi się, że serwer WWW rejestruje funkcje oddzwaniania na porcie.

Tak więc za każdym razem, gdy cokolwiek jest odbierane na tym konkretnym porcie, system wywołuje tę funkcję zwrotną zarejestrowaną wcześniej. Wewnątrz tego wywołania może ustawić zdarzenie lub coś takiego, a wtedy serwer WWW będzie miał dedykowany wątek czekający na to zdarzenie. Wątek ten uruchomi się i ustawi w kolejce to żądanie na głównej liście żądań, które serwer WWW już przetwarza.

To, co tu podałem, jest bardzo powierzchownym i makroopowiedzią tego, co się dzieje. Aby uzyskać bardziej precyzyjne odpowiedzi, poczekajmy na przybycie ekspertów.

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.