1

Скажем, у меня процесс веб-сервера прослушивает порт 80. Когда клиент посещает этот сайт, сервер выберет новый порт для установления соединения для передачи данных или просто использует порт 80? Используйте настройки по умолчанию apache, lighttpd или nginx.

1 ответ1

1

Любое TCP-соединение идентифицируется кортежем из 4 чисел:

source_ip, source_port, target_ip, target_port

Требуется только, чтобы комбинация всех 4 чисел была уникальной. Для веб-сервера в нашем примере target_ip будет публичным IP-адресом этого сервера, а target_port будет 80 (или 443 для HTTPS).

Чтобы ответить на ваш вопрос: сервер НЕ выбирает новый порт при ответе на соединение - он всегда прослушивает порт 80 , но клиент делает выбор порта на стороне клиента!

Например, предположим, что у нас есть веб-сервер с публичным IP-адресом 10.0.0.1 и клиенты 192.168.1.1 , 192.168.1.2 и 192.168.1.3 . Если соединение от клиента к серверу все еще активно, netstat -4n напечатает что-то вроде этого:

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address   Foreign Address    State
tcp        0      0 10.0.0.1:80     192.168.1.1:65510  ESTABLISHED
tcp        0      0 10.0.0.1:80     192.168.1.2:49166  ESTABLISHED
tcp        0      0 10.0.0.1:80     192.168.1.3:49166  ESTABLISHED

Как видите, вполне возможно, что 2 разных клиента могут иметь одинаковый номер порта (49166) на своей стороне - в этом нет ничего плохого.

Другими словами, веб-сервер продолжает говорить по исходному TCP-соединению, к которому подключен клиент (порт 80), пока этот разговор не будет завершен и соединение не будет закрыто. Все ответные пакеты с веб-сервера отправляются обратно с использованием кортежа (source_ip, source_port) качестве адреса назначения и (target_ip, target_port) качестве адреса источника.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .