XMPP
XMPP (Extensible Messaging and Presence Protocol, расширяемый протокол обмена сообщениями и информацией о присутствии) — это открытый, основанный на XML протокол для мгновенного обмена сообщениями, передачи информации о присутствии (статусе пользователя) и других данных в реальном времени. Протокол децентрализован, использует клиент-серверную архитектуру и позволяет создавать распределённые сети обмена сообщениями, аналогичные электронной почте.
История
Предшественники и создание
Протокол был разработан в 1998 году американским программистом Джерими Миллером (Jabber) как альтернатива закрытым и централизованным протоколам мгновенных сообщений (ICQ, AOL Instant Messenger). Первая версия носила название Jabber. В 2000 году был основан Jabber Software Foundation, который взял на себя разработку и стандартизацию протокола.
Стандартизация
В 2002 году проект был передан в Internet Engineering Task Force (IETF) для официальной стандартизации. В 2004 году были опубликованы основные RFC: RFC 3920 (базовый протокол) и RFC 3921 (расширения для мгновенных сообщений и присутствия). В 2011 году протокол был обновлён и переиздан как RFC 6120, RFC 6121 и RFC 6122. В 2015 году была опубликована версия 1.0 протокола.
Эволюция названия
Изначально протокол назывался Jabber. В 2002 году, после стандартизации в IETF, он получил официальное название XMPP. Тем не менее, термин «Jabber» продолжает использоваться как синоним для XMPP-сетей и клиентов.
Архитектура и принципы работы
Децентрализация
Ключевая особенность XMPP — децентрализация. Сеть состоит из множества независимых серверов, которые могут обмениваться сообщениями друг с другом. Пользователь регистрируется на одном сервере (например, user@example.org), но может общаться с пользователями на любом другом сервере (например, friend@server.com). Это обеспечивает устойчивость сети и независимость от одного провайдера.
Протокол на основе XML
XMPP использует XML (Extensible Markup Language) для представления всех данных. Каждое сообщение, запрос или ответ представляет собой XML-элемент («стрим»). Это делает протокол расширяемым: новые функции могут быть добавлены путём определения новых XML-пространств имён (XMLNS).
Клиент-серверная модель
Взаимодействие происходит по схеме «клиент — сервер — сервер». Клиент подключается к своему серверу, который обрабатывает его запросы и пересылает сообщения другим серверам. Серверы общаются напрямую, используя протокол S2S (Server-to-Server). Клиент использует протокол C2S (Client-to-Server).
Идентификация (JID)
Каждый пользователь в сети XMPP имеет уникальный идентификатор — JID (Jabber ID). JID имеет формат user@domain/resource, где:
user— имя пользователя на сервере.domain— доменное имя сервера.resource— необязательный идентификатор конкретного клиентского приложения (например,home,work,phone). Позволяет пользователю быть одновременно в сети с нескольких устройств.
Основные функции
Мгновенный обмен сообщениями
Базовая функция — отправка и получение текстовых сообщений в реальном времени. Сообщения могут быть как одноадресными (1:1), так и многоадресными (групповые чаты).
Информация о присутствии
Протокол позволяет пользователям публиковать свой статус (онлайн, отошёл, занят, не в сети) и получать информацию о статусе других пользователей из своего списка контактов (ростера). Статус может содержать произвольный текст (например, «на работе» или «в отпуске»).
Список контактов (Ростер)
Сервер хранит список контактов пользователя, включая их JID, группы и подписки на статус. Управление ростром осуществляется через протокол.
Групповые чаты (MUC)
Функция Multi-User Chat (MUC) позволяет создавать виртуальные комнаты для общения нескольких пользователей одновременно. Комнаты могут быть публичными или приватными, с модерацией и без.
Передача файлов
XMPP поддерживает передачу файлов, обычно через протоколы SOCKS5 (S5B) или IBB (In-Band Bytestreams). Передача файлов может быть как прямой (P2P), так и через сервер.
Расширения (XEP)
Протокол XMPP расширяется через механизм XEP (XMPP Extension Protocol). XEP — это документы, описывающие новые возможности, которые могут быть реализованы в клиентах и серверах. Наиболее известные XEP:
- XEP-0030 (Service Discovery) — позволяет узнавать, какие протоколы и функции поддерживает сервер или клиент.
- XEP-0045 (Multi-User Chat) — групповые чаты.
- XEP-0060 (Publish-Subscribe) — механизм публикации и подписки на события.
- XEP-0077 (In-Band Registration) — регистрация нового пользователя на сервере через протокол.
- XEP-0084 (User Avatar) — передача аватаров пользователей.
- XEP-0163 (Personal Eventing Protocol) — публикация личных событий (например, статуса, аватара).
- XEP-0198 (Stream Management) — восстановление соединения после разрыва.
- XEP-0280 (Message Carbons) — копирование сообщений на все устройства пользователя.
- XEP-0313 (Message Archive Management) — хранение истории сообщений на сервере.
- XEP-0363 (HTTP File Upload) — загрузка файлов через HTTP.
Критика и недостатки
Производительность
XML-формат является избыточным, что приводит к большему объёму передаваемых данных по сравнению с бинарными протоколами (например, MTProto в Telegram). Это может быть критично для мобильных устройств с ограниченным трафиком.
Отсутствие встроенного шифрования
Изначально XMPP не предусматривал обязательного шифрования. Шифрование трафика (TLS) и сквозное шифрование (OMEMO, OTR) реализуются через расширения, но не являются обязательными для всех серверов и клиентов.
Сложность настройки
Для запуска собственного XMPP-сервера требуется определённая техническая квалификация. Настройка DNS-записей, SSL-сертификатов и конфигурация сервера могут быть нетривиальными.
Фрагментация
Из-за большого количества расширений (XEP) и необязательности их реализации, разные серверы и клиенты могут поддерживать разный набор функций. Это может приводить к несовместимости.
Применение
Корпоративные коммуникации
XMPP используется в корпоративных средах для внутренней связи. Примеры: Cisco Jabber, Atlassian HipChat (ранее). Он позволяет развернуть собственную, защищённую и контролируемую систему обмена сообщениями.
Открытые сети
Существует несколько крупных открытых XMPP-сетей, объединяющих множество серверов. Наиболее известные: jabber.ru, 404.city, snopyta.org. Пользователи могут регистрироваться на любом сервере и общаться с пользователями других серверов.
Интеграция с другими системами
XMPP используется для интеграции с системами мониторинга, уведомлений, чат-ботами и автоматизацией. Например, системы мониторинга (Nagios, Zabbix) могут отправлять уведомления через XMPP.
Мессенджеры на основе XMPP
- Conversations — популярный клиент для Android.
- Gajim — клиент для настольных систем (Linux, Windows).
- Psi — кроссплатформенный клиент.
- Monal — клиент для iOS.
Сравнение с другими протоколами
| Характеристика | XMPP | Matrix | Telegram (MTProto) | Signal (Signal Protocol) |
|---|---|---|---|---|
| Архитектура | Децентрализованная | Децентрализованная | Централизованная | Централизованная |
| Формат данных | XML | JSON | Бинарный | Бинарный |
| Сквозное шифрование | Опционально (OMEMO) | Встроено (Megolm) | Не для всех чатов | Встроено |
| Открытость | Полностью открытый | Полностью открытый | Проприетарный | Проприетарный |
| Расширяемость | Высокая (XEP) | Высокая (MSC) | Ограниченная | Ограниченная |
Будущее протокола
Несмотря на снижение популярности в массовом сегменте из-за распространения централизованных мессенджеров (WhatsApp, Telegram, Viber), XMPP сохраняет свою нишу в корпоративных и открытых сообществах, где важны децентрализация, открытость и контроль над данными. Развитие протокола продолжается: появляются новые расширения, улучшается поддержка мобильных устройств, внедряется сквозное шифрование. В 2023 году была опубликована версия 1.1 протокола.
Источники
- RFC 6120: Extensible Messaging and Presence Protocol (XMPP): Core
- RFC 6121: Extensible Messaging and Presence Protocol (XMPP): Instant Messaging and Presence
- XMPP Standards Foundation (XSF) — официальный сайт
- Документация XEP (XMPP Extension Protocols)
- Книга: «XMPP: The Definitive Guide» by Peter Saint-Andre, Kevin Smith, Remko Tronçon
- Статья «Jabber» в Википедии
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →