Czytałem o WebSockets i zastanawiam się, dlaczego przeglądarka nie mogła po prostu otworzyć trywialnego połączenia TCP i komunikować się z serwerem jak każda inna aplikacja desktopowa. I dlaczego ta komunikacja jest możliwa przez websockety?
167
80
. Z definicji jeden port można podłączyć TYLKO do jednej aplikacji . A co, jeśli klient chce skorzystać z usługi innej niż WWW (HTTP), ale dostępny jest tylko jeden port? Voila! Websockets!Odpowiedzi:
Komunikacja przez gniazda TCP jest łatwiejsza, gdy pracujesz w granicach intranetu, ponieważ prawdopodobnie masz kontrolę nad komputerami w tej sieci i możesz otwierać porty odpowiednie do nawiązywania połączeń TCP.
Przez Internet komunikujesz się z serwerem innej osoby na drugim końcu. Są niesamowicie mało prawdopodobne, aby jakiekolwiek stare gniazdo było otwarte dla połączeń. Zwykle mają tylko kilka standardowych, takich jak port 80 dla HTTP lub 443 dla HTTPS. Tak więc, aby komunikować się z serwerem, musisz połączyć się za pomocą jednego z tych portów.
Biorąc pod uwagę, że są to standardowe porty dla serwerów internetowych, które generalnie mówią po HTTP, jesteś zobowiązany do przestrzegania protokołu HTTP, w przeciwnym razie serwer nie będzie z tobą rozmawiać. Celem gniazd sieciowych jest umożliwienie zainicjowania połączenia przez HTTP, a następnie negocjowanie użycia protokołu gniazd sieciowych (zakładając, że serwer jest w stanie to zrobić), aby zezwolić na strumień komunikacyjny bardziej podobny do gniazda TCP.
źródło
Przeglądarki internetowe działają w warstwie aplikacji, podczas gdy TCP działa w warstwie transportowej. Jako twórca aplikacji internetowych łatwiej jest wysyłać wiadomości przez sieć kablową za pośrednictwem warstwy aplikacji zamiast surowych bajtów w warstwie transportowej.
Podstawą WebSockets jest TCP, jest on po prostu wyodrębniony dla uproszczenia.
źródło
Websocket jest protokołem warstwy aplikacji, podczas gdy TCP jest protokołem warstwy transportowej. W warstwie transportowej mamy zwykle protokoły TCP i UDP. Każda wiadomość z warstwy aplikacji musi przejść przez warstwę transportową, aby została przesłana do innej maszyny. Dlatego websocket i tcp są ze sobą powiązane i nie mogą być porównywalne.
źródło
Aby to uprościć, komunikacja przez gniazdo sieciowe odbywa się za pośrednictwem portu TCP numer 80 (lub 443 w przypadku połączeń szyfrowanych TLS), co jest korzystne dla środowisk, które blokują połączenia internetowe inne niż internetowe za pomocą zapory .
Czy chcesz użyć istniejącego portu TCP, czy otworzyć nowy port TCP, który może być blokowany przez zaporę?
źródło