Различия между версиями 2 и 3
Версия 2 от 2008-07-03 22:32:14
Размер: 5412
Редактор: MaximByshevskiKonopko
Комментарий:
Версия 3 от 2008-07-03 22:33:05
Размер: 6593
Редактор: MaximByshevskiKonopko
Комментарий: Первый проход.
Удаления помечены так. Добавления помечены так.
Строка 2: Строка 2:
Со стороны ОС прикладной уровень очень развесистый. Вроде бы мы, говоря б ОС вцелом, не должны говорить о конкретных вебсерверах и так далее. Тем не менее, со стороны ОС есть некий универс. инструмент, который позв. оформ. сетевые службы достаточно быстро на скорую руку. Рассм. очень-очень вкратце, как вообще написать сетевой сервер. Существует такой интерфейс для синхроннго и асинхронного обмена данными. Этот интерфейс называется сокеты. Общая идея сокета состоит вот в чём: у вас есть некий протокол обмена данными, который состоит вот в чём: вы данные записываете в некое отверстие, не сообразуясь с тем, читает кто-то их или не читает. А кто-то другой из этого отверстия читает. В отличие от файлового ИО, обмен с помощью сокета асинхронный. При этом для программ, которые осущ. запись и чтение существует дост. простой API для отсылки и получения. Суть этого изобр. состоит в том, что у этой дырки две стороны. И, вообще говоря, дна сторона этой дырки может быть на одном компьютере, а другая сторона на другом компьютере. Это сетевй сокет. При этом, вне зависимости от того, разнеено это по интернету, или в ФС, программы, которые считывают, они этого не видят. с чем параллель: параллель с нез. сетевых протоколов. ... Как заводится сервер:
Строка 4: Строка 3:
 * Заводится сокет
 * Бинд
 * Листен
 * Аксепт
 * Сенд/Ресив
 * Клозе
Со стороны ОС прикладной уровень очень развесистый. Вроде бы мы, говоря об ОС в целом, не должны говорить о конкретных веб-серверах и так далее. Тем не менее, со стороны ОС есть некий универсальный инструмент, который позволяет оформлять сетевые службы достаточно быстро на скорую руку. Рассмотрим очень-очень вкратце, как вообще написать сетевой сервер. Существует интерфейс для синхронного и асинхронного обмена данными, называемый сокетами. Общая идея сокета: у вас есть некий протокол обмена данными, который работает следующим образом: вы данные записываете в некое отверстие, не сообразуясь с тем, читает кто-то их или не читает (вероятно, до некоторого предела). А кто-то другой из этого отверстия с другой стороны читает. В отличие от файлового I/O, обмен с помощью сокета асинхронный. При этом существует достаточно простой API для отсылки и получения. Суть этого процесса состоит в том, что у этой дырки две стороны. И, вообще говоря, одна сторона этой дырки может быть на одном компьютере, а другая сторона на другом компьютере. Это сетевой сокет. При этом, разнесено это по интернету, или сокеты находятся в локальной ФС, для программ, которые считывают и записывают, разницы нету. В этом есть параллель с независимостью сетевых протоколов. Как заводится сервер (с точки зрения работы непосредственно с сокетами):
 * socket --- сообщить системе, что мы хотим сокет
 * bind --- привязать сокет к конкретному порту
 * listen --- начать ожидание соединения с портом
 * accept --- принять соединение
 * send/receive (в цикле) --- обмениваться данными
 * close --- завершить соединение
Написать такой сервер --- задача нетривиальная. Обратите внимание, что если речь идёт о unix-среде, то тут сокетом просто так (читай --- из шелла) воспользоваться не получится. Причина в том, что стандартные программы окружения в Unix суть фильтры, пропускающие через себя в синхронном режиме ввод и выдающие его сразу же на вывод, в отличие от сокетного соединения, изначально являющегося асинхронным. Есть сетевая метаслужба inetd, в линуксе в последнее время используется xinetd (extended). В общем случае, какова задача этого метадаймона: он осуществляет связку между транспортным и прикладным уровнем. Он производит внутри себя все перечисленные операции с сокетами. И в тот момент, когда надо обрабатывать данные, то он передоверяет это другой программе, котрая написана в классическом unix-стиле, как фильтр ввода на вывод. Как это сделать:
Строка 11: Строка 12:
Написать такой сервер --- задача нетривиальная. Обратите внимание, что если речь идёт о юних-среде, то ... тут сокетом просто так восп. не получится. Есть сетевая метаслужба inetd, в линуксе в пследнее время исп. xinetd (extended). В общем случае, какова задача этого метадемона: он осуществляет связку между транспортным и прикладным уровнем. Он всё делает, что мы перечисляли. И в тот момент, кгда надо обраб. данные, то он передоверяет это другой программе, котрая написана в классическом unix-стиле, как сетевой фильтр. Как это сделать:

 * перейдём в /etc/xinit.d/. Тут уже мжно видеть несколько имеющихся служб
 * Сначала пределимся с портом, например, 26000
 * перейдём в /etc/xinit.d/. Тут уже мжно видеть несколько конфигов имеющихся служб
 * Сначала определимся с портом, например, 26000
Строка 16: Строка 15:
 * Написать файл. след вид:
 * Редактируем:
Строка 21: Строка 19:
        socket_type     = stream
        protocol        = tcp
        wait            = no
        user            = demo
        server          = /bin/date
        disable         = no
 socket_type = stream
 protocol = tcp
 wait  = no
 user  = demo
 server  = /bin/date
 disable  = no
Строка 29: Строка 27:
Теперь нам потребуется перезвпусттиь xinetd. Обычн он запущен только тогда, когда есть службы. Для проверки можно сказать chkconfig. Если он не запущен, то нужно сказать service xinetd restart. Теперь мжно сказать telnet localhost quake и увидеть текущую дату.
Теперь нам потребуется перезапусттиь xinetd. Обычно он запущен только тогда, когда есть службы (в ПСПО там одна служба, ktalk, есть по умолчанию сразу). Для проверки можно сказать chkconfig. Если он не запущен, то нужно сказать service xinetd restart. Теперь можно сказать telnet localhost 26000 и увидеть текущую дату.
Строка 38: Строка 37:
|| Готовность (%) || Продолжительность (ак. ч.) || Подготовка (календ. ч.) || Полный текст (раб. д.) || Предварительные знания || Level || Maintainer || Start date || End date ||
|| 0 || 1 || 1 || 1 || || 1 || MaximByshevskiKonopko, VladimirLysikov || || ||


----
|| Готовность (%) || Продолжительность (ак. ч.) || Подготовка (календ. ч.) || Полный текст (раб. д.) || Предварительные знания || Level || Maintainer                             || Start date || End date ||
|| 15 || 1                          || 1                       || 1                      || || 1 || MaximByshevskiKonopko, VladimirLysikov ||            || ||
-

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

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

  • socket --- сообщить системе, что мы хотим сокет
  • bind --- привязать сокет к конкретному порту
  • listen --- начать ожидание соединения с портом
  • accept --- принять соединение
  • send/receive (в цикле) --- обмениваться данными
  • close --- завершить соединение

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

  • перейдём в /etc/xinit.d/. Тут уже мжно видеть несколько конфигов имеющихся служб
  • Сначала определимся с портом, например, 26000
  • Скопируем, напирмер, cups-tcp в quake-tcp: cp cups-tcp quake-tcp
  • Редактируем:

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

15

1

1

1

1

MaximByshevskiKonopko, VladimirLysikov

-

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