Протокол обмена новостями и принципы построения системы
Протокол NNTP пришел на смену UUCP, и его целью было упорядочить обмен информацией между серверами Usenet. Кроме того, использование интерактивного протокола привело к разработке интерфейсных программ-клиентов, позволяющих просматривать почту на удаленных серверах.
При передаче новостей по протоколу UUCP новые сообщения передавались от одного сервера другому, затем следующему и т. д. При этом часто возникали ненужные дубли сообщений, и сеть в этом случае загружалась непроизводительно.
С использованием 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 позволяет завершить сеанс.