Как выбирается порт при использовании TCP для подключения к веб-серверу? Выбирает ли веб-браузер, какой порт он будет использовать?

#apache #sockets #tcp #port

#apache #сокеты #tcp #порт

Вопрос:

Как выбирается порт при использовании TCP для подключения к веб-серверу? Выбирает ли веб-браузер, какой порт он будет использовать?

Веб-сервер обычно прослушивает порт 80. Веб-сервер Apache является популярным веб-сервером, а nginx — другим популярным веб-сервером. Возможно ли, чтобы веб-сервер Apache и nginx были запущены на моем сервере одновременно?

Сколько сокетов (на всех задействованных компьютерах) требуется для TCP-соединения? Сколько портов требуется для UDP-соединения?

Комментарии:

1. 1. Целевой порт выбирается из URL-адреса или используется по умолчанию, например, 80. Исходный порт динамически выделяется операционной системой. 2. Да. 3. Три сокета и два порта. 4. Такого понятия, как UDP-соединение, не существует, но обоим одноранговым узлам нужны сокет и порт.

Ответ №1:

Когда http-клиент анализирует uri http://www.my_site.net/ , поскольку порт явно не указан, по умолчанию предполагается, что 80 достигает сервера. С другой стороны, если uri выглядит как http://www.my_site.net:8080/ , то для доступа к серверу будет использоваться явно указанный номер порта 8080. Обратите внимание, что это порт назначения с точки зрения клиента; порт источника клиента обычно является произвольным свободным портом, автоматически назначаемым системой.

Вы не можете иметь несколько TCP-серверов, прослушивающих один и тот же порт (например, 80) в одной системе. Если вы хотите, чтобы apache и nginx работали в одной системе, вам придется изменить порт прослушивания для одного из них.

С точки зрения клиента, в TCP-соединении задействован один единственный сокет; клиент создает этот сокет, подключает его к серверу, затем отправляет / получает данные через этот же сокет. С точки зрения сервера для TCP-соединения необходимы два сокета, и в более общем случае для N соединений необходимы N 1 сокетов. Сокет 1 называется listen-socket; он привязан к порту (например, 80), по которому должен быть достигнут сервер. Как только клиент подключается к этому прослушивающему сокету, сервер должен принять это соединение, после чего появляется диалоговое окно-сокет; это диалоговое окно-сокет используется для отправки / получения данных с подключенным клиентом.

Ответ №2:

  1. как выбирается порт?

Веб-браузер (или любой другой TCP-клиент) может выбрать клиентский порт, но обычно это делается операционной системой. Когда TCP-клиент просто вызывает, socket() а затем connect() затем ОС выбирает временный порт. Точный алгоритм зависит от внутренней ОС, и это довольно случайный порт с точки зрения приложения.

  1. Возможно ли, чтобы веб-сервер Apache и nginx были запущены на моем сервере одновременно?

Да, это возможно, но они не могут использовать один и тот же порт. Например, вы можете настроить nginx для прослушивания порта 8080 и сохранить конфигурацию apache по умолчанию на порту 80.

  1. Сколько сокетов …?

Для TCP-соединения имеется один сокет на стороне клиента и 2 сокета на стороне сервера. На стороне сервера есть один прослушивающий сокет и один сокет для каждого подключенного клиента.

Для UDP есть один сокет на стороне клиента и один сокет на стороне сервера.

Комментарии:

1. Спасибо! Порт TCP на стороне клиента выбирается операционной системой. Я не был уверен, что мы можем изменить порт с помощью веб-браузера. Я думаю, вы можете изменить на стороне клиента, но серверная сторона также должна принять ваш запрос, чтобы заставить его работать?

2. @user9531853 Ваш вопрос неясен. (1) Я никогда не использовал браузер, который позволял бы вам выбирать локальный порт. (2) Удаленный порт указан в URL явно или неявно и должен согласовываться с прослушивающим портом на сервере. Все это уже указано в обоих ответах и моем комментарии.