В обычных условиях программа-сервер связывается с некоторым портом (ресурсом, для идентификации которого используется тип протокола и число в интервале от 1 до 65535). В зависимости от номера порта, указанного в запросе, этот запрос направляется тому или иному серверу. Например, почтовый сервер, поддерживающий SMTP (Simple Mail Transfer Protocol — простой протокол передачи почты), традиционно использует TCP-порт 25, a HTTP (Hypertext Transfer Protocol — протокол передачи гипертекстовой информации), как правило, связывается с портом 80.
Программа inetdявляется одним из суперсерверов, используемых в операционной системе Linux. Суперсервер выполняет функции посредника. Вместо набора серверов в системе запускается один суперсервер, который связывается со всеми портами, соответствующими серверам из набора. При установлении соединения суперсервер загружает сервер, порт которого указан в запросе, после чего этот сервер выполняет требуемые действия по передаче данных. Использование суперсервера обеспечивает два основных преимущества по сравнению с постоянным выполнением обычных серверов. Во-первых, при таком подходе уменьшается объем используемой оперативной памяти; в особенности это заметно, если на компьютере должно присутствовать большое количество программ- серверов. Во-вторых, перед тем как запрос будет передан обычном серверу, его получает суперсервер, который может выполнять необходимую фильтрацию данных; это повышает безопасность системы. Недостаток использования суперсервера состоит в том, что продолжительность обработки запроса увеличивается (как правило, на одну-две секунды). Это связано с тем, что для загрузки сервера требуется определенное время. Поэтому суперсервер лучше применять для серверов, которые вызываются достаточно редко. Если запросы к серверу приходят часто, лучше, если такой сервер постоянно присутствует в памяти компьютера.
Формат файла /etc/inetd.conf
Для настройки inetdиспользуется конфигурационный файл /etc/inetd.conf. Если не принимать во внимание комментарии (строки, начинающиеся с символа #), то можно сказать, что содержимое файла inetd.confпредставляет собой набор строк, каждая из которых определяет отдельный сервер. Пример записи, содержащейся в файле /etc/inetd.confприведен ниже.
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
Каждая строка файла состоит из нескольких полей, которые отделяются друг от друга с помощью пробелов или символов табуляции.
• Имя сервера. Первое поле в строке идентифицирует протокол, используемый сервером. Имя протокола должно соответствовать имени, указанному в файле /etc/services. Например, обратившись к этому файлу, можно выяснить, что имени telnetсоответствует значение 23/tcp, т.е. сервер, поддерживающий протокол telnet, должен использовать для взаимодействия порт 23. Для того чтобы программа inetdмогла управлять сервером, для этого сервера должна существовать запись в файле /etc/services. Очевидно, что, планируя запуск редко встречающегося сервера посредством inetd, надо позаботиться о том, чтобы соответствующая запись была включена в этот файл. Подавляющее большинство серверов изначально учтено в /etc/services.
• Тип гнезда. Второе поле указывает тип гнезда, используемого при поддержке протокола. Допустимы типы stream, dgram, raw, rdmи seqpacket.
• Тип протокола. Третье поле указывает тип протокола. В данном случае речь идет о нижележащем протоколе транспортного уровня, например TCP или UDP. Допустимые протоколы указаны в /etc/protocols, однако в подавляющем большинстве случаев в этом поле указывается значение tcpили udp.
• wait / nowait . Четвертое поле записи содержит одно из двух значений: waitили nowait. Значение waitимеет смысл только для дейтаграмм (тип гнезда dgram). В остальных случаях предполагается значение nowait. Большинство серверов, поддерживающих обмен с помощью дейтаграмм, связываются с гнездом и освобождают inetdдля обслуживания последующих обращений. Эти серверы называются многопотоковыми (multi-threaded); для них в рассматриваемом здесь поле должно содержаться значение nowait. Серверы, которые связываются с гнездом, обрабатывают все данные, а затем по истечении времени тайм-аута завершают работу, называются однопотоковыми (single-threaded); для них в данном поле должно содержаться значение wait. В этом поле можно также задать числовое значение, отделив его от ключевого слова waitточкой, например wait.60. Число указывает максимальное количество серверов данного типа, которые inetdможет загрузить в течение одной минуты. По умолчанию принимается значение, равное 40.
Читать дальше