Обслуживают ли веб-серверы все запросы, используя один порт?

#apache #http #webserver

#apache #http #веб-сервер

Вопрос:

Если веб-сервер обрабатывает трафик на порту 80, каждый клиент должен установить соединение между собой и сервером на этом порту. Предполагая, что клиент поддерживает соединение, как сервер может параллельно обслуживать других клиентов?

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

Ответ №1:

Порт — это один конец канала связи.

Инициалы сервера настраивают прослушивающий порт (80 в случае HTTPS-сервера). Клиент создает порт (операционная система назначит ему случайный доступный номер порта) и подключается к прослушивающему порту. В этот момент канал связи однозначно описывается IP-адресом сервера, портом 80 на сервере и IP-адресом клиента вместе с номером порта клиента. Если вы посмотрите на вывод netstat , вы увидите множество сокетов / портов на разных этапах подключения:

 symcbean@skynet ~ $ netstat -t
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 192.168.1.202:47206     stackoverflow.com:https ESTABLISHED
tcp        0      1 192.168.1.202:50894     aba1c1ff9d2ec5376.:smtp SYN_SENT
tcp        0      0 192.168.1.202:47210     stackoverflow.com:https ESTABLISHED
tcp        0      0 192.168.1.202:60806     ec2-34-213-90-136:https ESTABLISHED
tcp        0      0 192.168.1.202:51124     151.101.1.69:https      ESTABLISHED
tcp        0      0 192.168.1.202:34784     i0.wp.com:https         ESTABLISHED
tcp        0      0 192.168.1.202:54082     lhr25s14-in-f10.1:https ESTABLISHED
tcp        0      0 192.168.1.202:38412     172-155-250-212.s:https ESTABLISHED
  

То, как сервер обрабатывает одновременное взаимодействие по нескольким каналам, варьируется. Я никогда не сталкивался с сервером, который одновременно обрабатывает только одно соединение.

На (предварительном) веб-сервере Apache процесс, открывший прослушивающий сокет, отключает соединение с уже существующим дочерним процессом для обработки. Некоторые серверы выполняются как единый процесс, но с несколькими потоками выполнения. Некоторые (такие как nginx и lighthttpd) выполняются как единый поток и сначала обращают внимание на канал, отправляющий данные.