Различия между версиями 20 и 21
Версия 20 от 2008-07-06 18:21:01
Размер: 8308
Редактор: eSyr
Комментарий:
Версия 21 от 2008-07-06 22:48:50
Размер: 8303
Редактор: VsevolodKrishchenko
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 4: Строка 4:
Операционная система предоставляет специальный инструмент для создания серверов такого типа. Этот инструмент --- механизм сокетов. Сокеты предоставляют интерфейс синхронного и асинхронного обмена данными. В случае синхронного, или блокирующего, обмена в случае отсутствия данных для чтения при чтении из сокета программа будет ждать, пока эти данные появятся; в случае асинхроннго, или неблокирующего, взаимодействия, программа продолжит работу. Сокеты в UNIX-системах могут иметь различное физическое представление. Кроме сетевых сокетов, которые могут передавать данные с одного компьютера на другой, существуют и локальные сокеты Unix, находящиеся в файловой системе. Интерфейс работы с обоими видами сокетов одинаков, за исключением создания сокета. Сетевые сокеты являются низкоуровневым программным интерфейсом к транспортному уровню сетевого взаимодействия в лице протокола TCP или UDP. Операционная система предоставляет специальный инструмент для создания серверов такого типа. Этот инструмент --- механизм сокетов. Сокеты предоставляют интерфейс синхронного и асинхронного обмена данными. В случае синхронного, или блокирующего, обмена в случае отсутствия данных для чтения при чтении из сокета программа будет ждать, пока эти данные появятся; в случае асинхронного, или неблокирующего, взаимодействия, программа продолжит работу. Сокеты в UNIX-системах могут иметь различное физическое представление. Кроме сетевых сокетов, которые могут передавать данные с одного компьютера на другой, существуют и локальные сокеты Unix, находящиеся в файловой системе. Интерфейс работы с обоими видами сокетов одинаков, за исключением создания сокета. Сетевые сокеты являются низкоуровневым программным интерфейсом к транспортному уровню сетевого взаимодействия в лице протокола TCP или UDP.
Строка 24: Строка 24:
user@host:~$ netcat localhost 10000 $ netcat localhost 10000
Строка 38: Строка 38:
  

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

На прикладном уровне стека TCP/IP существует множество разнообразных протоколов, например протокол обмена почтой SMTP или протокол обмена файлами FTP. Общая схема работы сетевой программы-сервера, реализующего один из этих протоколов, следующая: она принимает данные, передаваемые программой-клиентом на определенный порт TCP или UDP, обрабатывает их, и отправляет ответ клиенту. Запросы и ответы протокола прикладного уровня часто являются командами в виде обычного текста.

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

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

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

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 и проверим работоспособность сервиса, подключившись к нему командой netcat localhost 10000:

$ netcat localhost 10000
Fri Jul  4 04:31:17 MSD 2008

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

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

Примечания

1. ALJ: telnet -> netcat. VsevolodKrishchenko.

2. Я выкинул про неблокирующие сокеты, во-первых, называть их синхронными - на мой взгляд некорректно, а во-вторых это все-таки сильно отдельная тема, так и до select/ioctl можно дойти ненароком. VsevolodKrishchenko.

  • Добавил про неблокирующие сокеты, чтобы не грешить против истины — -- eSyr 2008-07-06 18:21:01

3. Не стоит ли мне добавить про /etc/services сюда же, а так же вставить список основных сервисов под дистрибутивам и методов их запуска (в ALJ xinetd как я вижу не используется, Мастер сейчас ставлю)?

  • Думаю, про сам /etc/services вряд ли стоит, так как он упоминается уже в PspoClasses/080702/05TCP, а вот насчет "основных сервисов" - надо поразмыслить. -- DmitryChistikov 2008-07-06 09:54:59


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

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

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

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

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

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

Level

Maintainer

Start date

End date

65

1

1

1

1

MaximByshevskiKonopko, VladimirLysikov, VsevolodKrishchenko

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