Различия между версиями 9 и 10
Версия 9 от 2008-07-04 03:49:07
Размер: 6317
Редактор: VladimirLysikov
Комментарий:
Версия 10 от 2008-07-04 09:57:05
Размер: 6477
Редактор: VladimirLysikov
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 36: Строка 36:

Прим. У меня Debian, проверьте, как на ПСПО все это работает. -- VladimirLysikov <<DateTime(2008-07-04T06:57:05Z)>>

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

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

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

Сокеты могут иметь различное физическое представление. Существуют сетевые сокеты, которые могут передавать данные с одного компьютера на другой, а существуют локальные сокеты 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

PspoClasses/080703/03NetworkService (последним исправлял пользователь VsevolodKrishchenko 2008-10-04 10:54:50)