6458
Комментарий:
|
7415
|
Удаления помечены так. | Добавления помечены так. |
Строка 2: | Строка 2: |
На прикладном уровне существует много протоколов. Общая схема работы сетевого сервера, реализующего один из этих протоколов, следующая: сервер принимает данные, передаваемые на определенный порт, обрабатывает их, и посылает ответ. В большом количестве протоколов запросы и ответы имеют текстовый формат. | На прикладном уровне стека TCP/IP существует множество разнообразных протоколов, например протокол обмена почтой SMTP или протокол обмена файлами FTP. Общая схема работы сетевой программы-сервера, реализующего один из этих протоколов, следующая: она принимает данные, передаваемые программой-клиентом на определенный порт TCP или UDP, обрабатывает их, и отправляет ответ клиенту. Запросы и ответы протокола прикладного уровня часто являются командами в виде обычного текста. |
Строка 4: | Строка 4: |
Операционная система предоставляет специальный инструмент для создания серверов такого типа. Этот инструмент --- механизм сокетов. Сокеты предоставляют интерфейс асинхронного обмена данными, то есть если при чтении из сокета в нем нет данных, программа будет ждать, пока эти данные появятся. Сокеты могут использоваться также и для синхронного обмена данными, этот режим в терминологии сокетов называется неблокирующим. | Операционная система предоставляет специальный инструмент для создания серверов такого типа. Этот инструмент --- механизм сокетов. Сокеты предоставляют интерфейс асинхронного обмена данными, то есть если при чтении из сокета в нем нет данных, программа будет ждать, пока эти данные появятся. Сокеты в unix-системах могут иметь различное физическое представление. Кроме сетевых сокетов, которые могут передавать данные с одного компьютера на другой, существуют и локальные сокеты Unix, находящиеся в файловой системе. Интерфейс работы с обоими видами сокетов одинаков, за исключением создания сокета. Сетевые сокеты являются низкоуровневым программным интерфейсом к транспортному уровню сетевого взаимодействия в лице протокола TCP или UDP. |
Строка 6: | Строка 6: |
Сокеты могут иметь различное физическое представление. Существуют сетевые сокеты, которые могут передавать данные с одного компьютера на другой, а существуют локальные сокеты Unix, находящиеся в файловой системе, при этом интерфейс работы с ними одинаков. Сетевые сокеты предоставляют программный интерфейс(API) к транспортному уровню сетевого взаимодействия, т.е. протоколам TCP и UDP. | Работающие на машине с ПСПО программы, передающие данные по сети, используют для доступа к сети именно механизм сокетов. Однако, существует способ создания простых сетевых сервисов, не требующий изучения программирования сокетов. Он напоминает объединение команд в конвейер, с тем отличием, что ввод-вывод должен производиться асинхронно. Стандартные же программы окружения Unix являются "фильтрами", которые преобразовывают ввод и выдают результат на вывод синхронно. Для решения это проблемы существует сетевой супер-сервер {{{xinetd}}}, а ранее эту же задачу решал сервер {{{inetd}}}. Сам он не реализует сетевого сервиса, но дает возможность сделать из программы, которая работает с синхронным вводом-выводом, сетевой сервис, который принимает данные по сети и передает их обратно в сеть. |
Строка 8: | Строка 8: |
Программа, использующая механизм сокетов, например, сетевой сервер, использует этот API. Однако существует способ создания сетевых сервисов, не требующий его изучения. Он напоминает объединение команд в конвейер, с тем отличием, что ввод-вывод должен производиться асинхронно. Стандартные же программы окружения Unix являются "фильтрами", которые преобразовывают ввод и выдают результыт на вывод синхронно. Для создания сетевого сервиса, который принимает данные по сети и передает их обратно в сеть, предоставляя обработку какой-нибудь программе, которая работает с синхронным вводом-выводом, существует сетевой метадемон inetd. В последнее время в качестве метадемона используется xinetd, он же входит в состав ПСПО. Попробуем создать сетевую службу, которая будет выдавать текущую дату. Для этого создадим в каталоге {{{/etc/xinetd.d}}} файл со следующим содержанием: |
Попробуем создать с помощью {{{xinetd}}} сетевую службу, которая будет выдавать текущую дату. Для этого создадим файл с полным именем {{{/etc/xinetd.d/test}}} и со следующим содержанием: |
Строка 24: | Строка 22: |
Эта запись означает, что сервер будет принимать TCP-соединения на порт 10000 и передавать принятую информацию команде /bin/date, которая игнорирует ввод и выдает текущую дату. Запускаться эта команда будет от имени пользователя nobody. Теперь перезапустим xinetd командой {{{service xinetd restart}}} и проверим работоспособность сервиса, подключившись к нему командой {{{telnet localhost 10000}}}: | Эта запись означает, что создаваемый сервер будет принимать TCP-соединения на порт 10000 и передавать принятую информацию команде {{{/bin/date}}}, которая игнорирует ввод и выдает текущую дату. Запускаться эта команда будет от имени пользователя {{{nobody}}}. Теперь перезапустим xinetd командой {{{service xinetd restart}}} и проверим работоспособность сервиса, подключившись к нему командой {{{telnet localhost 10000}}}: |
Строка 33: | Строка 31: |
Если мы укажем в поле server команду /bin/cat, то наш сервер будет отправлять полученные данные обратно отправителю, и т.п. | А если мы укажем в поле {{{server}}} команду {{{/bin/cat}}}, то наш сервер будет отправлять полученные данные обратно отправителю (эхо-сервер). |
Строка 35: | Строка 33: |
В ALT Linux и ПСПО по умолчанию все встроенные службы xinetd выключены. Кроме того, по умолчанию в /etc/xinetd.conf указано, что к службам xinetd можно подключаться только с локальной машины, но не по сети. | В системе ALT Linux и ПСПО по умолчанию все встроенные службы супер-сервера {{{xinetd}}} выключены. Кроме того, по умолчанию в файле {{{/etc/xinetd.conf}}} указано, что к службам {{{xinetd}}} можно подключаться только с локальной машины, но не с другого компьютера по сети: {{{only_from = 127.0.0.1}}}. |
Строка 37: | Строка 35: |
Прим. У меня Debian, проверьте, как на ПСПО все это работает. -- VladimirLysikov <<DateTime(2008-07-04T06:57:05Z)>> | Примечания 1. Это не работает в ALJ, потому что там нет клиента telnet! Разбираюсь с вопросом. VsevolodKrishchenko. 2. Я выкинул про неблокирующие сокеты, во-первых нахывать их синхронными - на мой взгляд некорректно, во-вторых это все-таки сильно отдеьная тема, так и до select/ioctl можно дойти ненароком. VsevolodKrishchenko. |
Строка 44: | Строка 47: |
|| 50 || 1 || 1 || 1 || || 1 || MaximByshevskiKonopko, VladimirLysikov || || || | || 50 || 1 || 1 || 1 || || 1 || MaximByshevskiKonopko, VladimirLysikov, VsevolodKrishchenko || || || |
Сетевые сервисы
На прикладном уровне стека 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 и проверим работоспособность сервиса, подключившись к нему командой 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 можно подключаться только с локальной машины, но не с другого компьютера по сети: only_from = 127.0.0.1.
Примечания
1. Это не работает в ALJ, потому что там нет клиента telnet! Разбираюсь с вопросом. VsevolodKrishchenko. 2. Я выкинул про неблокирующие сокеты, во-первых нахывать их синхронными - на мой взгляд некорректно, во-вторых это все-таки сильно отдеьная тема, так и до select/ioctl можно дойти ненароком. VsevolodKrishchenko.
Сведения о ресурсах
Готовность (%) |
Продолжительность (ак. ч.) |
Подготовка (календ. ч.) |
Полный текст (раб. д.) |
Предварительные знания |
Level |
Maintainer |
Start date |
End date |
50 |
1 |
1 |
1 |
|
1 |
|
|