Библиотека сайта rus-linux.net
Linux Network Administrators Guide | ||
---|---|---|
Назад | Вперед |
Глава 22. NNTP и nntpd Daemon
Протокол передачи сетевых новостей (Network News Transfer Protocol, NNTP) предусматривает разные подходы к обмену новостей. Здесь поддерживается все: от пакетной технологии (аналог UUCP), до интерактивного обмена по сети. NNTP не просто пакет программ, это стандарт Internet, описанный в RFC-977. Он основан на поточных соединениях, обычно по TCP, между клиентами в сети и сервером новостей. Поточная схема позволяет клиентам и серверу гибко управлять передачей статей.
Различные команды позволяют клиентам принимать, посылать и отправлять по почте статьи. Различие между посылкой и отправкой в том, что последняя может включать статьи с незавершенной информацией заголовка. Поиск статьи может использоваться клиентом передачи новостей также, как программами чтения (newsreaders). Это делает NNTP превосходным средством для обеспечения доступа к новостям клиентам в локальной сети без применения NFS.
NNTP также обеспечивает активый и пассивный способы передачи новостей, которые называются "pushing" и "pulling". Выталкивание (pushing), в основном, представляет собой то же самое, что и C-News протокол ihave/sendme, который рассмотрен в главе 21). Клиент предлагает статью серверу через IHAVE msgid, а сервер возвращает код ответа, который указывает, имеет ли он уже эту статью, или она требуется. В последнем случае, клиент посылает статью, завершенную одиночной точкой в отдельной строке.
Выталкивание новостей имеет один недостаток: оно вызывает значительную загрузку сервера, так как он должен искать в базе данных хронологий каждую конкретную статью.
Противоположная методика: перемещать (pulling) новости. Клиент запрашивает список всех доступных статей группы, которые прибыли после заданной даты. Этот запрос выполняется командой NEWNEWS. Из возвращенного списка сообщений, клиент выбирает те статьи, которые он еще не имеет, используя команду ARTICLE для каждой из них.
Проблема с перемещением новостей состоит в том, что требуется хорошее управление сервером, которое позволяет клиенту запрашивать группы и распределения. Например, оно должно гарантировать, что никакой конфиденциальный материал из локальных групп не будет послан несанкционированной клиентуре.
Имеется также ряд команд для newsreaders, которые разрешают им отыскивать заголовок и тело статьи отдельно или даже находтьь коекретные строки заголовка из набора статей. Это дает возможность хранить все новости на центральной машине, используя nntp-основанные клиентские программы для чтения и регистрации. Это альтернатива экспорту каталогов новостей через NFS, который описан в главе 21.
Полная проблема NNTP состоит в том, что он позволяет хорошо осведомленному специалисту вставлять статьи в поток новостей с ложной спецификацией отправителя. Это называется news faking или spoofing. Расширение NNTP позволяет требовать установления подлинности пользователя для некоторых команд.
Имеется ряд доступных пакетов NNTP. Один из наиболее широко известных: NNTP daemon. Первоначально, он был написан Stan Barber и Phil Lapsley, чтобы проиллюстрировать подробности RFC-977. Вы можете найти его в большинстве дистрибутивов Linux, а также получить исходники и откомпилировать их.
Пакет nntpd состоит из сервера и двух клиентов для перемещения и выталкивания новостей, соответственно, и свою версию программы inews. Они живут в среде B-news, но с небольшими дополнениями, они будут работать с C-news. Однако, если Вы планируете использовать NNTP больше, чем для доступа newsreaders к серверу новостей, эта реализация недостаточна. Мы обсудим только NNTP daemon, содержащийся в пакете nntpd и не будем останавливаться на клиентских программах.
Если Вы желаете использовать большой сайт новостей, Вы должны рассмотреть пакет InterNet News (INN), который был написан Rich Salz. Этот пакет обеспечивает NNTP и UUCP-доставку новостей, что определенно лучше, чем nntpd. INN подробно рассматривается в главе 23.
Протокол NNTP
Мы упомянули две команды NNTP, которые являются ключевыми при передаче статей между серверами. Теперь мы рассмотрим их в контексте фактического NNTP-сеанса, чтобы показать Вам насколько прост этот протокол. Используем простой клиент telnet, чтобы соединиться с INN-сервером новостей Virtual Brewery с именем news.vbrew.com. Чтобы сделать примеры короткими, сервер запущен в минимальной конфигурации. Мы рассмотрим как завершить конфигурацию этого сервера в главе 23. В нашем тестировании мы будем очень осторожны: все статьи будут генерироваться только в группе новостей junk, чтобы никому не мешать.
Соединение с сервером новостей
Для связи с сервером нужно просто открыть TCP-соединение с портом для NNTP. После этого будет показано приветственное приглашение сервера. Одна из первых команд, которые Вы могли бы попробовать: help. Ответ, который Вы получите, зависит от того, чем считает Вас сервер: удаленным NNTP-сервером или программой чтения новостей (newsreader), так как имеются различные наборы команд. Вы можете изменять режим доступа, используя команду mode:
$ |
Ответы NNTP всегда клнчаются точкой (.) в начале строки. Числа в выводе задают коды ответа (response codes) и означают результат запроса (норма или произошла какая-то ошибка). Они описаны в RFC-977; мы будем говорить о наиболее важных.
Выталкивание (Pushing) статьи на сервер
Я упомянул команду IHAVE когда говорил о выталкивании статей на сервер новостей. Давайте посмотрим, как она работает:
|
Все команды NNTP нечувствительны к регистру, так что Вы можете вводить их в любом. Команда IHAVE берет один обязательный параметр, это Message ID статьи, которая помещается на сервер. Каждая статья имеет уникальный message ID. Команда IHAVE будет выдана для каждой статьи, которую сервер желает передать. Если код ответа команды находится в диапазоне "3xx", NNTP-сервер передаст полную статью с заголовком и точкой в отдельной строке в качестве маркера конца статьи. Если код ответа был в диапазоне "4xx", принимающий сервер данную статью принять не может из-за ее наличия или какой-то технической проблемы.
Когда статья передана, принимающий сервер генерирует код сообщающий, успешно ли он принял статью.
Изменение режимиа работы с NNTP
Программы работы с новостями (Newsreaders) используют собственный набор команд при работе с сервером новостей. Чтобы активизировать эти команды, сервер должен перейти в режим читателя (reader). Большинство серверов так и делают, если IP-адрес соединяющейся машины не перечислен в списке серверов новостей (news-forwarding). В любом случае NNTP обеспечивает команду для явного переключения в режим reader:
|
Режим NNTP reader имеет много команд. Многие из их разработаны, чтобы облегчить работу с новостями. Я упомянул ранее, что там есть команды, которые предписывают серверу высылать заголовок и тело статьи по отдельности. Имеются также команды, которые вносят в список доступные группы и статьи, и другие, которые позволяют регистрировать альтернативные средства посылки новостей.
Получение списка групп
Команда list выводит список групп с их краткими описаниями:
|
Перечень активных групп
Команда list active
показывает каждую группу и
данные о ней. Два числа в каждой строке вывода задают старший и младший
номера статей в каждой группе. Программы работы с новостями на основании этих
чисел узнают, сколько статей сейчас в группе. Последнее поле в выводе
отображает флажки контроля: разрешено ли посылать статьи в груупу, является
ли она модерируемой, и хранятся ли статьи на сервере на самом деле, или
только данные о них. Подробно эти флажки описаны в
главе 23. Рассмотрим пример:
|
Посылка статьи
Раньше уже упоминалось различие между передачей статьи и ее посылкой. Когда Вы передаете статью, имеется неявное предположение, что статья уже существует, что она имеет идентификатор сообщения, который уникален и назначен сервером, первоначально обработавшем статью. Такая статья имеет полный заголовок. При регистрации (посылке) статья имеет лишь заголовок из заданных Вами полей (тема, группа, в которую направлена и т.п.). Сервер новостей добавит все остальные поля заголовка и создаст message ID для передачи статьи дальше.
Все это означает, что посылка статьи проще, чем передача:
|
Сгенерируйте еще парочку сообщений самостоятельно, они нам понадобятся.
Перечень новых статей
После установления связи с сервером программа чтения новостей обычно
запрашивает перечень новых статей, которые поступили после последнего
соединения с этим сервером. Это делается командой
newnews
. Три обязательных параметра должны быть
заданы: имя группы или групп, чтобы сделать запрос, дата и время,
относительно которых вносить в список. Дата и время определены как числа с
шестью цифрами в формате; yymmdd
и
hhmmss
:
|
Выбор группы для дальнейшей работы
Когда пользователь выбирает группу для просмотра, newsreader может
сообщить серверу, что некая группа была выбрана. Это упрощает взаимодействие
между ними: исчезает потребность постоянно в каждой команде указывать имя
группы новостей. Команда group
просто берет имя
выбранной группы как параметр. Многие команды используют группу, выбранную
по умолчанию сервером:
|
Команда group
возвращает сообщение с числом
активных сообщений, старшим и младшим номерами и именем группы. Обратите
внимание, что хотя в нашем примере число активных сообщений и старший номер
статьи совпадают, такое бывает нечасто: некоторые статьи, возможно, устарели
и были удалены, понижая число активных сообщений, но оставляя старший номер
прежним! Здесь надо проявлять внимание.
Перечень статей в группе
Чтобы адресовать статьи newsreader должен знать, какие числа представляют
активные статьи. Команда listgroup
предлагает список
активных чисел статей в текущей или явно заданной группе, если имя группы
указано дополнительным параметром:
|
Получение только заголовка статьи
Пользователь должен иметь некоторую информацию относительно статьи прежде,
чем он сможет решить желает ли он читать ее. Я упомянул ранее, что некоторые
команды позволяют передавать заголовок и тело статьи отдельно. Команда
head
используется, чтобы запросить этот режим. Сервер
передает только заголовок определенной статьи. Если пользователь не хочет
читать эту статью, он не потратит впустую время и трафик.
Статьи могут быть определены, используя любой их номер (из вывода команды
listgroup
) или их message id:
|
Получение только тела статьи
Если, с другой стороны, пользователь решает, что он хочет читать статью,
newsreader нуждается в способе попросить выслать ему тело статьи. Команда
body
используется для этой цели. Это работает
аналогично команде head
, за исключением того, что
будет возвращено только тело статьи:
|
Чтение статьи из группы
Иногда требуется передавать статьи целиком (заголовок и тело). Часто этим пользуются разные программы кэширования NNTP, например, leafnode.
Естественно, NNTP обеспечивает средства для выполнения этого, которые
работают почти аналогично команде head
. Команда
article
принимает номер статьи или message ID как
параметр, но возвращает статью целиком с заголовком:
|
Если Вы пытаетесь получить неизвестную статью, сервер вернет сообщение об ошибке с соответствующим кодом ответа, а иногда и текстовым комментарием:
|
Здесь я рассмотрел, как используются наиболее важные команды NNTP. Если Вы заинтересовались разработкой программного обеспечения, которое осуществляет работу по протоколу NNTP, обратитесь к соответствующим документам RFC: они предоставят много технических подробностей
Назад | Глобальное оглавление | Вперед |
Средства и задачи администрирования | Установка сервера NNTP |