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

Со стороны ОС прикладной уровень очень развесистый. Вроде бы мы, говоря об ОС в целом, не должны говорить о конкретных веб-серверах и так далее. Тем не менее, со стороны ОС есть некий универсальный инструмент, который позволяет оформлять сетевые службы достаточно быстро на скорую руку. Рассмотрим очень-очень вкратце, как вообще написать сетевой сервер. Существует интерфейс для синхронного и асинхронного обмена данными, называемый сокетами. Общая идея сокета: у вас есть некий протокол обмена данными, который работает следующим образом: вы данные записываете в некое отверстие, не сообразуясь с тем, читает кто-то их или не читает (вероятно, до некоторого предела). А кто-то другой из этого отверстия с другой стороны читает. В отличие от файлового I/O, обмен с помощью сокета асинхронный. При этом существует достаточно простой API для отсылки и получения. Суть этого процесса состоит в том, что у этой дырки две стороны. И, вообще говоря, одна сторона этой дырки может быть на одном компьютере, а другая сторона на другом компьютере. Это сетевой сокет. При этом, разнесено это по интернету, или сокеты находятся в локальной ФС, для программ, которые считывают и записывают, разницы нету. В этом есть параллель с независимостью сетевых протоколов на разных уровнях стэка. Как заводится сервер (с точки зрения работы непосредственно с сокетами):

Написать такой сервер --- задача нетривиальная. Обратите внимание, что если речь идёт о unix-среде, то тут сокетом просто так (читай --- из шелла) воспользоваться не получится. Причина в том, что стандартные программы окружения в Unix суть фильтры, пропускающие через себя в синхронном режиме ввод и выдающие его сразу же на вывод, в отличие от сокетного соединения, изначально являющегося асинхронным. Есть сетевая метаслужба inetd, в линуксе в последнее время используется xinetd (extended). В общем случае, какова задача этого метадаймона (metadaemon): он осуществляет связку между транспортным и прикладным уровнем. Он производит внутри себя все перечисленные операции с сокетами. И в тот момент, когда надо обрабатывать данные, то он передоверяет это другой программе, котрая написана в классическом unix-стиле, как фильтр ввода на вывод. Как это сделать:

service quake
{
        socket_type     = stream
        protocol        = tcp
        wait            = no
        user            = demo
        server          = /bin/date
        disable         = no
}

Теперь нам потребуется перезапусттиь xinetd. Обычно он запущен только тогда, когда есть службы (в ПСПО там одна служба, ktalk, есть по умолчанию сразу). Для проверки можно сказать chkconfig. Если он не запущен, то нужно сказать service xinetd restart. Теперь можно сказать telnet localhost 26000 и увидеть текущую дату.

ALT-specific: по умолчанию всё выключено. Кроме того, по умолчанию в /etc/xinetd.conf указано, что по умолчанию можно подключаться только с локалхоста.


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

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

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

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

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

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

Level

Maintainer

Start date

End date

17

1

1

1

1

MaximByshevskiKonopko, VladimirLysikov

-