Суперсервер inetd

Опубликовано в Технологии > Серверные технологии

В поставку большинства систем UNIX, включая Linux, входит суперсервер, который поддерживает широкий набор служб. Вероятно, наибольшую известность получил суперсервер UNIX под названием inetd; версию inetd включают в свои системы большинство поставщиков.

Первоначально стимулом к созданию суперсервера inetd явилось стремление создать эффективный механизм, способный обеспечить поддержку множества служб без использования слишком большого объема системных ресурсов. В частности, хотя такие службы TCP/IP, как ECHO и CHARGEN, необходимы для проверки или отладки, они редко применяются в производственной системе. Развертывание сервера для каждой из таких служб требует затрат системных ресурсов (например, резервирования записей в таблице процессов и места в области подкачки). Кроме того, отдельные процессы конкурируют за доступ к памяти, если они работают параллельно. Поэтому объединение серверов в один суперсервер позволяет уменьшить издержки без потери функциональных возможностей. Это интересно! Молниезащита на http://www.groze.net.

Суперсервер inetd является динамически настраиваемым3; информация о его конфигурации хранится в виде текста ASCII в файле /etc/inetd.conf. Каждая запись в этом файле может включать от шести и более полей, как показано в табл. 15.1. Первые шесть полей являются обязательными и не должны содержать пробельных символов; последние  слова в строке представляют собой параметры.

Таблица 15.1. Поля записи в файле конфигурации inetd

Поле Назначение
service name Имя предоставляемой службы (имя должно присутствовать в базе данных служб системы)
socket type Тип используемого сокета (должен представлять собой допустимый тип сокета, такой как stream или dgram)
protocol Имя протокола, используемого со службой (должен представлять собой допус­тимый протокол, такой как ten или udp)
wait status Значение wait, которое указывает, что суперсервер inetd должен ждать завер­шения обработки программой поддержки службы одного запроса, и только после этого приступать к обработке другого, или nowait, которое разрешающего парал­лельную обработку
userid Имя учетной записи пользователя, с правами которого должна работать про­грамма поддержки службы. Специальная учетная запись root предоставляет

Сразу после запуска или реконфигурации суперсервер inetd должен создать ведущий сокет для каждой новой службы, указанной в файле конфигурации. Для этого сервер inetd интерпретирует файл конфигурации и извлекает из него значения отдельных полей. Поле с обозначением типа сокета используется для определения того, какой тип сокета (stream или dgram) должен применяться для ведущего сокета. Сервер inetd должен также выполнить привязку к сокету локального порта протокола. Чтобы определить номер порта протокола, сервер inetd извлекает из файла поля с именем службы и протокола и использует их для передачи запроса в базу данных служб операционной системы. База данных возвращает номер порта протокола, предназначенного для использования с этой службой; если база данных служб не содержит записи, соответствующей комбинации значений полей с именем службы и протокола, суперсервер inetd не может поддерживать такую службу.