• Как работает веб сервер?

    @agurman
    Это все может быть реализавано от системы к системе по разному. Но на обычном компьютере, в большинстве случаев, это работает примерно так. ОС (точнее драйвер сетевой карты) получает аппаратное прерывание, когда приходят данные на карту. К слову сказать есть так называемый механизм "опложенных прерываний". Если не вдаваться в подробности, то прерывания будут приходить не на каждый кусок данных полученных картой, а только тогда, когда софт разрешит себя прерывать. То есть: получил прерывание, запретил прерывания, начал обрабатывать все что пришло и приходит, закончил, разрешил прерывания. В зависимости от системы или ее настроек, драйвер уже может что-то сделать с данными. Намеренно не употребляю слово "пакет", ибо это пока только данные, лежащие в буфере. Потом после всех проверок, они могут быть переданы сетевому стеку OS. Сетевой стэк, собственно как и драйвер, как правило является модулем ядра. На самом деле сетевой стек - это, сильно конфигурируемая и многослойная/многоуровневая и сложная подсистема ядра, и как правило представляет не один модуль, а множество. На каждом уровне, в зависимости от его настройки и/или типа данных (толко теперь уместно их называть фреймами/пакетами/дейтаграммами) может приниматься решение, что с ним делать дальше. Например: форварднуть куда-нибудь, или скипнуть, или ответить на них прямо в ядре, не передавая наверх в юзер-спайс, или все же передать. Вот если это свой пакет, то есть cвой/правильный ip, если открыт порт на прослушку, например WEB сервером (80/tcp), с помощью описанного выше механизма сокетов, тогда он будет передан в юзе-спейс web серверу на обработку. Серверы могут его тоже обрабатывать по разному. Аппачи например, по крайней мере ранние его версии, не парился особо, выделял каждому соединению по потоку загружал туда что-то, что обработает этот запрос, и уходил слушать дальше. Но сильно-нагруженные серверы, так работать не смогут, ибо потоки много "весят", поэтому есть еще куча, более продвинутых, способов обработки запросов сервером. К слову сказать, есть серверы которые прямо в ядре и живут. Зоопарк серверов, ровно как и сетевых стеков, большой и слишком сложный для одного поста. Будет время опишу полнее и грамотнее. Но "вкратце" должно быть понятно.
    Ответ написан
    Комментировать