🖧 Как веб-сервер обрабатывает одновременные запросы на одном порту |

🖧 Как веб-сервер обрабатывает одновременные запросы на одном порту

Статьи

Введение

Веб-сервер – это программа, которая обслуживает входящие запросы HTTP-сообщений.

Эти запросы могут поступать откуда угодно, подключаясь к серверу, который прослушивает определенный порт.

В этом уроке мы рассмотрим, как веб-сервер обрабатывает несколько запросов одновременно (concurrently) на одном порту.

Для начала мы рассмотрим жизненный цикл веб-запроса и поймем, что такое параллельный запрос.

Далее мы изучим типы компьютерных портов и сокетов и разберемся, как они работают.

Наконец, мы обсудим механизм обработки таких запросов.

Жизненный цикл веб-запроса

Веб-запрос начинается с того, что клиент отправляет сообщение в формате HTTP на веб-сервер с помощью сокета TCP/IP, а затем получает ответ:

На схеме выше веб-сервер передает запрос веб-приложению, которое, в свою очередь, обрабатывает его и составляет ответ для отправки обратно клиенту.

Обратите внимание, что на схеме разделены веб-сервер и веб-приложение.

Мы можем настроить веб-приложение так, чтобы оно также обрабатывало входящие запросы, например, установив интерпретатор PHP в качестве модуля Apache.

Однако в производственной среде это не рекомендуется по соображениям безопасности.

🌐 6 основных советов по безопасности для защиты вашего сайта на PHP от хакеров

Параллельные запросы

Параллельные запросы возникают, когда на веб-сервер одновременно поступает несколько запросов:

Мы можем обрабатывать либо один запрос за раз (последовательно), либо несколько запросов одновременно (параллельно), каждый из которых имеет свои преимущества.

На диаграмме выше показано, как веб-сервер обрабатывает одновременные запросы с помощью асинхронного механизма.

Этот механизм означает, что веб-приложение использует неблокирующие вызовы для обработки входящих запросов.

Давайте проанализируем, как один и тот же порт может быть задействован несколькими запросами одновременно.

Порты

Для начала необходимо понять, что такое компьютерные порты.

Мы можем разделить компьютерные порты на два типа: физические и логические.

К физическим портам относятся последовательные порты, порты USB, порты Ethernet и так далее.

С другой стороны, логические порты – это программные конечные точки в диапазоне от 0 до 65535.

Мы можем настроить наши приложения на использование определенного номера порта, однако некоторые порты зарезервированы.

Логические порты также называются сетевыми портами, которые мы используем для различения различных служб или процессов на сетевом устройстве, комбинируя IP-адрес устройства и порт.

Например, мы идентифицируем веб-службу по определенному IP-адресу устройства и порту 80 или 443.

Кроме того, на том же устройстве могут быть и другие службы, например SSH, прослушивающий порт 22.

Физические порты, такие как последовательный и USB, обычно имеют только одно соединение.

Логические порты (через Ethernet или Wi-Fi) могут поддерживать соединения “многие-ко-многим”.

Обработка одновременных запросов на одном порту

Все сетевые устройства используют сокеты для взаимодействия в сети.

При программировании сокетов и клиентская, и серверная стороны должны вызывать набор API-интерфейсов сокетов для взаимодействия.

Для серверной стороны это такие API, как bind(), listen(), accept(), receive(), send() и close().

Когда мы запускаем веб-сервер, он создает сокет (с дескриптором файла сокета listenfd) для прослушивания порта и затем ожидает входящих соединений.

Более того, когда сервер получает запрос на соединение от клиента, он создает еще один сокет (clientfd) для обработки запроса:

Если запросы поступают одновременно, и сервер способен их обработать, то он просто создаст новый сокет (clientfd*) для каждого запроса:

Дескриптор файла сокета – это целочисленное значение, уникальное для каждого сокета.

Операционная система ассоциирует дескрипторы файлов сокетов с различными значениями в фоновом режиме, такими как комбинация IP и порта клиента, IP и порта сервера, а также протокола связи.

В результате, когда сервер хочет связаться с клиентом, ему нужно только передать дескриптор файла сокета в API сокета, и тогда ОС будет знать, какой канал использовать.

Заключение

В этой статье мы проанализировали, как веб-сервер может обрабатывать несколько запросов от клиентов одновременно на одном и том же порту.

Сначала мы рассмотрели основной жизненный цикл веб-запроса и сценарий одновременных запросов. Затем мы изучили типы компьютерных портов и различия между ними.

Наконец, мы изучили, как веб-сервер обрабатывает одновременные запросы на одном и том же порту.

см. также:

 

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий