Протокол обмена новостями и принципы построения системы

Протокол NNTP пришел на смену UUCP, и его целью было упорядочить обмен информацией между серверами Usenet. Кро­ме того, использование интерактивного протокола привело к разработке интерфейсных программ-клиентов, позволяющих просматривать почту на удаленных серверах.

При передаче новостей по протоколу UUCP новые сообще­ния передавались от одного сервера другому, затем следующему и т. д. При этом часто возникали ненужные дубли сообщений, и сеть в этом случае загружалась непроизводительно.

С использованием NNTP ситуация изменилась, поскольку при использовании интерактивного протокола серверы могут обмениваться информацией о наличии сообщений и заказывать только те, на которые есть запросы.

К другим серверам Рис. 6.12. Классификация серверов согласно протоколу NNTP
Пользователи master-cepeepa
Пользователи slave-cepeepa

В рамках протокола предусмотрены два уровня серверов (рис. 6.12). Центральный сервер обеспечивает централизованное хранение новостей в локальных сетях. Пользователи просматри­вают информацию с помощью программ-клиентов. На этом же сервере хранятся списки подписчиков на группы новостей. Про­межуточный, или подчиненный (slave), сервер обычно устанавли­вается на машинах с большим числом пользователей и хранит
только последние поступления, а за остальной информацией он обращается к центральному серверу сети.

Протокол NNTP определяет механизм запросов и ответов для обмена сообщениями между серверами, а также между сер­вером и программами-клиентами. Для этой цели в протоколе определен набор команд и ответов на них. Весь диалог осущест­вляется в текстах ASCII, причем каждая команда состоит из идентификатора и параметров.

По команде group выбирается группа новостей. При этом указатель статьи в группе устанавливается на первую запись в группе. По команде help можно получить список разрешенных для использования команд.

Команды last и next перемещают указатель текущей стро­ки в группе, команда list выдает список групп с указанием ко­личества новых статей в них и начальным и конечным номерами статей. По командам newgroups и newnews можно получить списки новых групп и новых статей соответственно, а по коман­де post отправить свою статью на сервер.

По командам article, body, head, stat запрашиваются статьи или их части. Существует два способа запросить статью: либо по ее идентификатору (указывается в заголовке), либо по номеру статьи в группе. Команда article возвращает заголовок и через пустую строку текст статьи, body — только тело статьи, head — только заголовок, а по команде stat устанавливается текущая позиция в группе по идентификатору статьи. При этом никакая информация не возвращается.

По команде ihave клиент, а это может быть как удаленный клиент, так и сервер (последнее более вероятно), сообщает сер­веру, что он уже имеет статью, чей идентификатор указан в ка­честве параметра команды.

Команда slave сообщает о наличии в качестве клиента под­чиненного сервера, команда quit позволяет завершить сеанс.