Как сокет меняет порты с HTTP 80 на другой порт, когда мы хотим общаться через WebSocket с использованием Javascript? - PullRequest
0 голосов
/ 05 ноября 2018

Допустим, у меня есть сервер XYZ, который прослушивает порт 50000 для клиентов TCP и порт 80 для клиентов HTTP. А с другой стороны, у меня есть клиент, который использует WebSocket для установки сокет-соединения с портом 50000 и будет использовать HTTP-порт 80 для рукопожатия (конечно).

Теперь, когда клиент запускается, он сначала отправит запрос на сервер XYZ через HTTP-порт 80, и сервер получит свой запрос на порт 80 для квитирования и отправит ответ для приветствия. Таким образом, в этом случае обе стороны используют порт 80 (конечно).

Теперь, когда рукопожатие завершено, в стандартной документации сказано, что то же самое TCP-соединение, которое используется для HTTP-запроса / ответа в целях рукопожатия, затем преобразуется в соединение TCP-сокета. Хорошо, верно.

Но, но если весь этот процесс рукопожатия и TCP-соединение для HTTP-запроса / ответа использует порт 80 в первый раз, и то же самое TCP-соединение преобразуется в соединение TCP-сокета, и весь этот процесс выполняется через порт 80 Тогда как же TCP-соединение преобразуется в порт 50000 для сокета TCP на обеих сторонах? Клиент инициализирует другое TCP-соединение для перехода на порт 50000?

Итак, кто-нибудь может сказать, как выполняется преобразование порта и работает в WebSocket с порта 80 на другой порт в обеих сторонах? Как установить полное соединение с одним сокетом на разных портах? Как одно и то же TCP-соединение меняет / переворачивает свои порты?

1 Ответ

0 голосов
/ 06 ноября 2018

Соединение через сокет TCP не может менять порты вообще. Как только соединение установлено, его порты заблокированы и не могут быть изменены. Если у вас есть соединение через сокет TCP через порт 80, единственный способ установить соединение через порт 50000 - это создать совершенно отдельное соединение через сокет TCP.

WebSocket не может подключиться к порту 80, а затем переключиться на порт 50000. Однако HTML-страница, которая подается в браузер из порта 80, может содержать сценарии на стороне клиента, которые позволяют браузеру создавать объект WebSocket и подключать его к порт 50000. Два TCP-соединения (HTTP и WebSocket) полностью отделены друг от друга (на самом деле, соединение HTTP-сокета даже не должно оставаться открытым после обслуживания HTML, поскольку HTTP является протоколом без сохранения состояния).

...