Протокол NNTP
NNTP (Network News Transfer Protocol) — это протокол прикладного уровня, предназначенный для передачи сообщений в сетях новостей Usenet, а также для их чтения, публикации и распространения между серверами. Работает поверх TCP. Определён в RFC 3977 (актуальная версия) и RFC 977 (первая спецификация).
История
Протокол NNTP был разработан в 1986 году Ларри Уоллом, Стэном Барбером и Эриком Фэром для замены более ранних методов обмена новостями, основанных на UUCP (Unix-to-Unix Copy). Основной целью было создание протокола, работающего в реальном времени по сети TCP/IP, что позволяло пользователям получать доступ к новостным группам напрямую с сервера, а не через пакетную передачу файлов.
Первая стандартизация была выполнена в RFC 977 (1986). В 2006 году вышла обновлённая спецификация RFC 3977, которая уточнила команды, добавила поддержку расширений (например, STARTTLS для шифрования) и исправила неоднозначности.
С развитием веб-форумов и социальных сетей популярность Usenet и NNTP снизилась, однако протокол продолжает использоваться в специализированных сообществах, для распространения файлов (например, в бинарных группах) и в корпоративных системах обмена сообщениями.
Архитектура и принцип работы
NNTP использует клиент-серверную архитектуру. Сервер новостей (новостной сервер) хранит сообщения (статьи) иерархически организованных новостных групп. Клиент (например, почтовая программа или специализированный новостной ридер) подключается к серверу по TCP-порту 119 (или 563 для NNTP через SSL/TLS — NNTPS).
Основные операции
- Чтение новостей: Клиент запрашивает список доступных групп, затем список статей в выбранной группе, а затем — содержимое конкретных статей.
- Публикация статей: Клиент отправляет новую статью на сервер. Сервер проверяет её на соответствие правилам (например, размер, наличие заголовков) и добавляет в соответствующую группу.
- Распространение (feed): Серверы обмениваются статьями между собой. Когда один сервер получает новую статью, он передаёт её другим серверам, с которыми у него установлены связи. Это обеспечивает глобальную репликацию контента Usenet.
Команды и ответы
Протокол является текстовым (ASCII). Команды отправляются строками, ответы сервера начинаются с трёхзначного кода состояния (аналогично HTTP или SMTP). Примеры команд:
LIST— получить список групп.GROUP <groupname>— выбрать группу.ARTICLE <message-id>— получить статью по её идентификатору.POST— начать публикацию новой статьи.NEWNEWS— получить список новых статей за определённый период.
Ответы сервера кодируются по стандартной схеме: 1xx — информационные, 2xx — успешное выполнение, 3xx — требуется дополнительная команда, 4xx — временная ошибка, 5xx — постоянная ошибка.
Формат сообщений
Сообщения в NNTP, как и в Usenet в целом, имеют формат, основанный на RFC 5322 (Internet Message Format), с дополнительными заголовками, специфичными для новостей.
Основные заголовки
From:— адрес отправителя.Newsgroups:— список групп, в которые публикуется статья.Subject:— тема сообщения.Message-ID:— уникальный идентификатор статьи (обязателен).Date:— дата и время публикации.Path:— путь, по которому прошла статья (список серверов).References:— ссылки на родительские сообщения (для организации обсуждений в виде дерева).
Тело сообщения отделяется от заголовков пустой строкой. В бинарных группах (например, alt.binaries.*) тело может содержать закодированные в Base64 или yEnc файлы.
Классификация новостных групп
Новостные группы Usenet организованы в иерархию, где каждая группа имеет имя, разделённое точками. Наиболее известные иерархии:
- **comp.* — компьютерные технологии и программирование.
- **sci.* — научные обсуждения.
- **rec.* — хобби, развлечения, спорт.
- **soc.* — социальные и культурные темы.
- **talk.* — дискуссии на острые темы.
- **alt.* — альтернативные группы (не проходят строгую модерацию, могут содержать любой контент).
- **news.* — обсуждение самого Usenet и NNTP.
- **misc.* — разное.
В России и русскоязычном сегменте исторически была популярна иерархия **relcom.* (Relcom — одна из первых российских компьютерных сетей), а также **fido7.* (для обмена сообщениями из сети Фидонет).
Применение
- Usenet: Основная сфера применения. NNTP обеспечивает работу глобальной системы новостных групп, используемой для обсуждений, обмена информацией и файлами.
- Корпоративные системы: Некоторые организации используют NNTP для внутренних досок объявлений, обсуждений проектов или распространения технической документации.
- Архивирование: NNTP используется для доступа к архивам новостных групп, например, в проекте Google Groups (ранее Deja News).
- Распространение файлов: Бинарные группы Usenet (например,
alt.binaries.*) активно используются для распространения больших файлов, часто с использованием утилит для восстановления повреждённых данных (PAR2) и архиваторов (RAR).
Критика и ограничения
- Отсутствие встроенной аутентификации и шифрования: В базовой спецификации RFC 977 не предусмотрена защита. Пароли и данные передаются в открытом виде. Расширение STARTTLS (RFC 4642) частично решает эту проблему, но не все серверы его поддерживают.
- Спам: Usenet исторически страдает от массовой рассылки спама. Для борьбы используются фильтры, блокировки по IP и ручная модерация групп.
- Управление трафиком: Глобальный обмен новостями требует значительных ресурсов серверов и каналов связи. Бинарные группы особенно требовательны к объёму хранилища и пропускной способности.
- Сложность настройки: Для полноценного использования Usenet требуется подключение к новостному серверу (часто платному), настройка клиента и понимание иерархии групп.
Сравнение с другими протоколами
- NNTP vs HTTP: HTTP используется для передачи веб-страниц и не поддерживает встроенную иерархию групп и механизм распространения (feed). NNTP оптимизирован для массового обмена сообщениями.
- NNTP vs SMTP: SMTP предназначен для индивидуальной переписки (email), а NNTP — для публичных обсуждений. SMTP не имеет механизма группировки сообщений по темам.
- NNTP vs IMAP/POP3: IMAP и POP3 предназначены для доступа к почтовым ящикам, а NNTP — к новостным группам.
Источники
- RFC 977 — Network News Transfer Protocol (1986).
- RFC 3977 — Network News Transfer Protocol (NNTP) (2006).
- RFC 4642 — Using Transport Layer Security (TLS) with Network News Transfer Protocol (NNTP).
- RFC 5322 — Internet Message Format.
- Spencer, H. (1998). The Usenet Handbook. O'Reilly Media.
- Громов, А. (2000). Usenet: сеть новостей.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →