Сетевые сервисы

На прикладном уровне существует много протоколов. Общая схема работы сетевого сервера, реализующего один из этих протоколов, следующая: сервер принимает данные, передаваемые на определенный порт, обрабатывает их, и посылает ответ. В большом количестве протоколов запросы и ответы имеют текстовый формат.

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

Сокеты могут иметь различное физическое представление. Существуют сетевые сокеты, которые могут передавать данные с одного компьютера на другой, а существуют локальные сокеты Unix, находящиеся в файловой системе, при этом интерфейс работы с ними одинаков. Сетевые сокеты предоставляют программный интерфейс(API) к транспортному уровню сетевого взаимодействия, т.е. протоколам TCP и UDP.

Программа, использующая механизм сокетов, например, сетевой сервер, использует этот API. Однако существует способ создания сетевых сервисов, не требующий его изучения. Он напоминает объединение команд в конвейер, с тем отличием, что ввод-вывод должен производиться асинхронно. Стандартные же программы окружения Unix являются "фильтрами", которые преобразовывают ввод и выдают результыт на вывод синхронно.

Для создания сетевого сервиса, который принимает данные по сети и передает их обратно в сеть, предоставляя обработку какой-нибудь программе, которая работает с синхронным вводом-выводом, существует сетевой метадемон inetd. В последнее время в качестве метадемона используется xinetd, он же входит в состав ПСПО. Попробуем создать сетевую службу, которая будет выдавать текущую дату. Для этого создадим в каталоге /etc/xinetd.d файл со следующим содержанием:

service test
{
        disable         = no
        type            = UNLISTED
        socket_type     = stream
        protocol        = tcp
        port            = 10000
        wait            = no
        user            = nobody
        server          = /bin/date
}

Эта запись означает, что сервер будет принимать TCP-соединения на порт 10000 и передавать принятую информацию команде /bin/date, которая игнорирует ввод и выдает текущую дату. Запускаться эта команда будет от имени пользователя nobody. Теперь перезапустим xinetd командой service xinetd restart и проверим работоспособность сервиса, подключившись к нему командой telnet localhost 10000:

user@host:~$ telnet localhost 10000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Fri Jul  4 04:31:17 MSD 2008
Connection closed by foreign host.

Если мы укажем в поле server команду /bin/cat, то наш сервер будет отправлять полученные данные обратно отправителю, и т.п.

В ALT Linux и ПСПО по умолчанию все встроенные службы xinetd выключены. Кроме того, по умолчанию в /etc/xinetd.conf указано, что к службам xinetd можно подключаться только с локальной машины, но не по сети.

Прим. У меня Debian, проверьте, как на ПСПО все это работает. -- VladimirLysikov 2008-07-04 09:57:05


Сведения о ресурсах

Готовность (%)

Продолжительность (ак. ч.)

Подготовка (календ. ч.)

Полный текст (раб. д.)

Предварительные знания

Level

Maintainer

Start date

End date

50

1

1

1

1

MaximByshevskiKonopko, VladimirLysikov