Русская Википедия:XMPP

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Шаблон:Карточка протокола XMPP (Шаблон:Lang-en «расширяемый протокол обмена сообщениями и информацией о присутствии»), ранее известный как джа́ббер (Шаблон:Lang-en[1] Шаблон:IPA «болтовня, трёп, тарабарщина») — открытый, основанный на XML, свободный для использования протокол для мгновенного обмена сообщениями и информацией о присутствии (см. список контактов) в режиме, близком к режиму реального времени. Изначально спроектированный легко расширяемым, протокол, помимо передачи текстовых сообщений, поддерживает передачу голоса, видео и файлов по сети.

Расширяемость протокола предназначена для добавления в единую коммуникационную сеть мессенджеров, социальных сетей, сайтов, использующих разные, несовместимые стандарты. Предполагалось, что крупные компании будут открывать межсерверное общение с другими IM и описывать свои методы шифрования, передачи мультимедиа и других данных через публикацию расширений XMPP. Расширения будут приниматься или отклоняться глобальным сообществом путём наибольшего распространения, но при этом всегда будет доступна базовая функциональность для передачи сообщений для пользователей разных мессенджеров. В реальности данная идея не получила должного распространения, и большинство крупных компаний не стало открывать возможность коммуникации для своих пользователей с другими сервисами.

В отличие от коммерческих систем мгновенного обмена сообщениями, таких как AIM, ICQ, WLM и Yahoo, XMPP является федеративной, расширяемой и открытой системой. Любой желающий может запустить свой сервер мгновенного обмена сообщениями, регистрировать на нём пользователей и взаимодействовать с другими серверами XMPP. На основе протокола XMPP уже открыто множество частных и корпоративных серверов XMPP. Среди них есть или были крупные проекты, такие как Google Talk, Одноклассники.ru, LiveJournal, Juick, Facebook[2], ВКонтакте, Яндекс[3][4].

История

Проект Jabber был основан Джереми Миллером в начале 1999 года с разработки сервера jabberd[5]. Первое сообщение о проекте появилось 4 января 1999 года на сайте Slashdot[6]. Эту дату принято считать днём рождения технологии[7]. Вскоре после этого к проекту присоединилось несколько основных разработчиков, которые стали работать над сервером jabberd, клиентами для Windows и GNU/Linux, а также шлюзами в основные системы IM (AIM, ICQ, MSN и Yahoo). Позже, в 1999 году, Webb Interactive Services начало спонсировать основных разработчиков, что ускорило процесс создания проекта. В то время появилась основа протокола Jabber, а также сервер jabberd и ранние клиенты, такие, как WinJab (устарел и получил своё развитие в Exodus) и Gabber. Этот ранний период постоянных изменений закончился в мае 2000 года с выпуском jabberd 1.0.

Ранний протокол Jabber сформировал основы для стандарта XMPP, опубликованного как RFC 3920. Часто этот момент рассматривается как начало соперничества с SIMPLE, основанным на протоколе SIP, как стандартного протокола для мгновенного обмена сообщениями и информацией о присутствии.

С августа 2001 года протокол Jabber переходит под контроль Jabber Software Foundation (16 января 2007 года Jabber Software Foundation была переименована в XMPP Standards Foundation[8]), для более точного описания своей работы развития расширений собственно протокола, в отличие от линии развития программы с одноимённым названием.

Jabber, Inc. занимается развитием двух проектов — Jabber Extensible Communications Platform (Jabber XCP) и JabberNow. Первый является фреймворком, а второй — программно-аппаратное решение (специально собранный и настроенный компьютер). Сайт jabber.org всё ещё функционирует. Инвесторами проекта Jabber являются Jona, Inc., France Telecom, Intel Capital, и Webb Interactive Services, Inc.[1]

В августе 2005 года Google представил сервис Google Talk — комбинацию VoIP и клиента для обмена сообщениями, использующий XMPP для функций переписки, а также как основу для передачи голоса и файлов. Первоначальный запуск сервиса Google не поддерживал межсерверного общения, но к 17 января 2006 года такая возможность была добавлена[9]. Однако, в мае 2013 Google объявил о сокращении поддержки межсерверных коммуникаций в связи с продвижением своего сервиса Google Hangouts[10]. Тем не менее, несмотря на официальные заявления, Google Talk всё ещё поддерживает XMPP[11][12].

Протокол

Файл:Jabberd-Scheme-Russian2.svg
Схема устройства работы XMPP

Семейство протоколов XMPP принято как стандарт RFC[13]. Стандартный порт для XMPP — 5222[14]. Также возможно использовать порт 80 и/или 443[15], если возникают проблемы с файрволом. Протокол описывает клиент-серверные (c2s) и интерсерверные коммуникации (s2s). Мессенджер с поддержкой XMPP не обязательно должен соблюдать c2s-стандарт, чтобы поддерживать федеративную связь по s2s с другими XMPP-мессенджерами.Шаблон:Что? Ряд XMPP-мессенджеров с регистрацией по номеру телефона не позволяет использовать другие XMPP-клиенты или подключаться к другим серверам, но их серверы поддерживают федеративное общение (взаимодействуют с другими серверами XMPP).

Преимущества

  • Децентрализация: Архитектура сети XMPP схожа с электронной почтой; кто угодно может запустить свой собственный XMPP-сервер и нет какого-либо центрального сервера.
  • Открытый стандарт: Internet Engineering Task Force формализовал XMPP как стандарт мгновенного обмена сообщениями и технологии присутствия под названием XMPP, и спецификации XMPP были опубликованы как RFC 3920 и RFC 3921. Никаких привилегий не требуется для добавления поддержки этих спецификаций, и их разработка не привязана к какому-либо разработчику. Существует множество реализаций серверов и клиентов, а также библиотек с открытым исходным кодом.
  • Бесконечная расширяемость. Любой может написать своё расширение XEP и добавить его в протокол. Изначально предполагалось, что крупные компании будут создавать свои расширения протокола для интеграции собственных мессенджеров. Это бы позволило создать универсальный протокол общения между разными менеджерами. На практике этого не произошло. Крупные Интернет-компании стали предпочитать собственные, закрытые протоколы.
  • История: Технологии XMPP используются с 1998 года. При поддержке таких крупных компаний, как Sun Microsystems и Google, создано множество дополнений к стандартам XMPP для клиентов, серверов, компонент и библиотек кодов. В настоящее время XMPP существует практически без инвестиций, однако это не мешает дальнейшему развитию протокола сообществом, и постоянно появляются новые расширения.
  • Безопасность: XMPP-серверы могут быть изолированы от публичных сетей XMPP (например, во внутренней сети компании) и хорошо защищены (благодаря использованию SASL и TLS) встроенными в ядро XMPP спецификациями. Для поддержки использования шифрования канала XMPP Standards Foundation также использовал вспомогательный Центр сертификации xmpp.net, обеспечивая цифровые сертификаты для администраторов XMPP-серверов при содействии StartCom Certification Authority (который является основным хранителем сертификатов для всех вспомогательных). Многие реализации серверов используют SSL при обмене между клиентом и сервером, и немало клиентов поддерживает шифрование с помощью PGP/GPG внутри протокола[16][17][18].
  • Гибкость: Настраиваемая функциональность может быть надстроена поверх XMPP; для поддержки возможности взаимодействия различных сетей стандартные расширения поддерживаются XMPP Software Foundation. Приложения XMPP в дополнение к функциональности клиента сетевого общения включают в себя администрирование сети, распределение ресурсов, утилиты для совместной работы, обмен файлами, игры и мониторинг удалённых систем.

Слабые стороны

  • Экономическая невыгодность для крупных мессенджеров. Открытый протокол приводит к оттоку пользователей у крупных мессенджеров, на множество мелких частных серверов и других поставщиков услуг.
  • Избыточность передаваемой информации: Более 70 % межсерверного трафика XMPP составляют сообщения о присутствии[19], около 60 % которых являются излишними[20]. XMPP создаёт избыточный трафик при доставке сообщений о присутствии (то есть «статус сообщений») нескольким пользователям. Для решения существует несколько расширений. XEP-0352 передаёт только сообщения вместо статуса присутствия. Также решением является расширение XEP-0138[21] — компрессия передаваемых данных протокола алгоритмами lzw и zlib, а также использование компрессии в рамках шифрования соединения TLS RFC 3749, глава 3[22].
    На 2006 год XMPP страдает от фактически той же проблемы избыточности, но применительно к чат-комнатам и возможностям публикации информации[23]. Решение этих проблем также ожидается в виде XEP-расширений. Пока они не введены, большие чат-комнаты образуют избыточный трафик.
  • Неэффективность передачи бинарных данных: Так как XMPP является, по сути, одним длинным XML-документом, невозможно передать немодифицированную двоичную информацию. В результате для передачи файлов стараются использовать дополнительные расширения, например HTTP (http upload). Для передачи же файлов и другой бинарной информации непосредственно в XMPP-потоке используется кодирование base64. С другой стороны, некоторые клиентские программы для передачи используют технологии p2p, не задействуя при этом сервер.

Расширения XMPP

Файл:Conversations.jpg
Проверка доступности серверных расширений в клиенте Conversations. Сравнение серверов https://xmpp.jp https://jabber.ru https://404.city

Протокол XMPP включает лишь базовую основу для передачи сообщений. Для реализации дополнительных возможностей используются расширения XEP (XMPP Extension Protocols). Модульная система позволяет собирать системы на основе XMPP, как для передачи сообщений, так и для передачи данных IoT-устройств и других задач. Для полноценной работы Jabber-клиентов требуется поддержка соответствующих расширений. Одними из наиболее важных для работы XMPP-клиентов являются расширения:

  • XEP-0163 Personal Eventing Protocol. Размещение аватарок, передача ключей OMEMO
  • XEP-0191 Блокирование контактов. Чёрный список собеседников
  • XEP-0198 Менеджер потоков. Необходим для доставки сообщений при нестабильном интернет-канале и выключенном архиве сообщений. Если сервер не получает уведомления о доставке, он повторно отправляет сообщение
  • XEP-0237 Версии ростера. Вместо полной загрузки данных собеседников передаются лишь обновлённые данные
  • XEP-0280 Дублирование сообщений. Отправка сообщения на все включённые устройства. Используется, если не включён архив сообщений
  • XEP-0352 Состояние клиента. Если XMPP-клиент свёрнут, сервер передаёт лишь сообщения. Это экономит расход батареи и интернет-трафик
  • XEP-0363 HTTP File Upload. Универсальная передача файлов между разными клиентами (через HTTP)

Боты

Большой популярностью в Jabber’е пользуются боты для конференций. Они широко используются для защиты конференций от спама, в качестве цензора, ведения различной статистики, парсинга веб-сайтов (анекдоты, новости и т. п.), создания «мостов» между чатами, ведения логов, управления конференциями и так далее. Функциональность xmpp-ботов и область их применения ограничены только фантазией их разработчиков.

Известные боты

Шаблон:Список примеров

  • Neutron[24] — англоязычный бот на Python (библиотека «xmpppy»), один из первых xmpp-ботов;
  • FreQ — многофункциональный xmpp-бот, написан на Python (библиотека Twisted);
  • Sulci — бот-говорун, какое-то время был крайне популярен в качестве развлечения;
  • Gluxi — многофункциональный бот, написанный на C++;
  • Talisman — русскоязычная модификация бота Neutron, примечателен наличием множества модификаций и является наиболее популярным[25] ботом в русскоязычных Jabber-конференциях;
  • EndLess — модификация Talisman. Примечателен тем, что он стал первым ботом, использующим более одного JID’а. По заявлениям разработчика, бот является обладателем своеобразного рекорда: одна копия длительное время обслуживала ~500 конференций. Исходного кода бота нет в свободном доступе;
  • Fatal [Neutrino][26] — модификация бота Talisman/Neutron со слегка изменённой библиотекой «xmpppy». В последних версиях полностью переписан и практически не имеет ничего общего со своими предками. Написан на Python. Имеет широкий набор плагинов. Примечателен высокой надёжностью и отказоустойчивостью. Локализации EN и RU.
  • Snapi[27] — изначально являлся модификацией бота Talisman, но позже его «перерос». Можно охарактеризовать как «Talisman с корректным кодом». Примечателен тем, что базируется на полностью переписанной библиотеке «xmpppy»;
  • BlackSmith mark.1[28] — активно развивающийся бот, написанный на Python. Примечателен широкой функциональностью, высокой стабильностью и устойчивостью к различным проявлениям флуда. Имеет свою систему плагинов, а также частично совместим с ботом Talisman посредством специального модуля. Является open-source проектом и распространяется по лицензии Apache 2;
  • BlackSmith mark.2[29] — имеет мало чего общего с предыдущим ботом, не считая названия. Написан на Python и использует слегка модифицированную библиотеку «xmpppy». Примечателен поддержкой нескольких JID’ов, высокой стабильностью и наличием трёх языковых пакетов (EN, RU, FI). Большая часть архитектурно независимых функций портировано на mark.1;
  • Taho[30] — бот для конференций, написанный на Tcl.
  • Pako[31] — бот, распространённый в англоязычной части Jabber-сети. Написан на C#;
  • Isida[32] — многофункциональный и многоязычный бот, написан на Python (библиотека «xmpppy»). Примечателен тем, что это единственный бот, который в полной мере использует muc-filter[33], а также тем, что его код противоречит большинству пунктов Python Style Guide[34];
  • Erl[35] — бот, написанный на Erlang, примечателен функциями защиты конференций от спама.

Адресация

Каждый пользователь в сети Jabber имеет уникальный идентификатор — Jabber ID (сокращённо JID). Адрес JID, подобно адресу электронной почты, содержит имя пользователя и доменное имя сервера, на котором зарегистрирован пользователь, разделённые знаком @. Например, пользователь user, зарегистрированный на сервере example.com, будет иметь адрес: user@example.com.

Пользователь может иметь одновременно несколько подключений, для различения которых используется дополнительный атрибут JID, называемый ресурсом и добавляемый через слэш в конец адреса. К примеру, пусть полный адрес пользователя будет user@example.com/work, тогда сообщения, посланные на адрес user@example.com, дойдут на указанный адрес вне зависимости от имени ресурса, но сообщения для user@example.com/work дойдут на указанный адрес только при соответствующем подключённом ресурсе.

Адреса JID могут также использоваться без явного указания имени пользователя (с указанием имени ресурса или без такового) для системных сообщений и для управления специальными возможностями на сервере.

Соединение с другими протоколами

Файл:Wie ein Jabber-Transport funktioniert.svg
Алиса посылает сообщение через сеть Jabber к ICQ-транспорту. Дальше сообщение передаётся Бобу через сеть ICQ.

Полезной особенностью XMPP систем являются транспорты, или шлюзы, позволяющие пользователям получать доступ к сетям, использующим другие протоколы. Это могут быть другие протоколы мгновенного обмена сообщениями, IRC или такие протоколы, как SMS и электронная почта.

В отличие от мультипротокольных клиентов, XMPP предоставляет доступ на уровне сервера, посредством коммуникации через специальные сервисы-шлюзы, выполняющиеся на удалённом компьютере.

Любой пользователь может «зарегистрироваться» на одном из этих шлюзов, предоставив информацию, необходимую для входа в сеть, и может общаться с пользователями сети так, как если бы они были пользователями сети джаббер. Это значит, что любой клиент, полностью поддерживающий XMPP, может быть использован для доступа к любой сети, для которой существуют шлюзы, без какого-либо дополнительного кода в клиенте и без необходимости клиенту иметь прямой доступ в Интернет.

Реализация шлюзов зависит от конкретного XMPP-сервера и подвержена нестабильности из-за закрытости коммерческих IM-сервисов.

Примеры глобальных интеграций XMPP

Высокая отказоустойчивость и низкие издержки XMPP-серверов[36] способствуют тому, что ряд крупных компаний использует XMPP как базовую платформу для создания закрытых мессенджеров и чатов, а также для доставки push-уведомлений[37]

  • WhatsApp ~ 800 млн пользователей, использует модифицированный протокол XMPP для чатов
  • Electronic Arts ~40 млн пользователей, использует XMPP для чатов
  • Nintendo Switch NPNS ~ 35 млн устройств. Доставка новостей, уведомлений и других сообщений[38]
  • Одноклассники (социальная сеть) — 42 млн пользователей. Внутренняя доставка сообщений между пользователями. Доступно подключение к социальной сети через XMPP-клиент
  • League of Legends~ 27 млн пользователей, использует XMPP для чатов
  • Neverwinter (MMORPG) −16 млн пользователей, использует XMPP для чатов
  • Fortnite ~ 250 млн пользователей, использует XMPP для чатов
  • EVE Online~ 1 млн пользователей, использует XMPP для чатов
  • Star Trek Online ~900 тысяч пользователей, использует XMPP для чатов
  • Google ~1,5 млрд пользователей. Доставка push-уведомлений
  • Apple ~ 500 млн пользователей. Доставка push-уведомлений
  • Агентство национальной безопасности США использует XMPP для внутренних коммуникаций[39]
  • Военные США[40] и НАТО[41] используют протокол для передачи сообщений в военных мессенджерах
  • НАТО использует XMPP в военном клиенте JChat
  • Фермилаб — Национальная ускорительная лаборатория им. Энрико Ферми использует XMPP для организации внутренней связи.
  • Европейский парламент — Служба безопасности европейского парламента рекомендует использовать парламентариям Cisco Jabber вместо Signal и WhatsApp[42]
  • Федеральная полиция Германии использует секретный мессенджер на основе XMPP[43] и Conversations

Программное обеспечение

XMPP-серверы

  • CommuniGate Pro
  • ejabberd — свободный распределённый и отказоустойчивый XMPP-сервер, написанный на Erlang. Работает на крупнейшем российском XMPP-сервере jabber.ru.
  • jabberd2 — свободный легковесный сервер, написанный на языке C, не развивается с 2018 года
  • Openfire (ранее Wildfire, ещё ранее Jive Messenger) — свободный многофункциональный и отказоустойчивый XMPP-сервер, написанный на Java. Занимал первое место в рейтинге по возможностям на jabber.org (по состоянию рейтинга на конец марта 2007 года)[44]
  • Prosody — кроссплатформенный XMPP-сервер, написанный на языке программирования Lua, лёгкий в настройке и нетребовательный к ресурсам
  • Tigase XMPP Server — сервер, поддерживающий кластеризацию «из коробки»[45]
  • Wokkel — библиотека, добавляющая поддержку расширений XMPP в Twisted[46]
  • Xabber Server — сервер, основанный на форке ejabberd. Код проекта распространяется под лицензией AGPLv3[47].

XMPP-клиенты

По статистике публичного XMPP-сервера 404.city[48](на лето 2017 года), самые популярные клиенты для десктопов и ноутбуков — Pidgin и Psi+ . На Android лидируют Xabber и Conversations.

Для ПК и ноутбуков

  • Miranda NG — мультипротокольный мессенджер для MS-Windows с поддержкой OTR, PGP, OMEMO и собственного плагина SecureIm, работающего на основе открытой библиотеки Crypto++
  • Pidgin — кроссплатформенный клиент с поддержкой OTR, PGP. OMEMO поддерживается с помощью подключаемого модуля в тестовом режиме.
  • Psi — кроссплатформенный клиент, поддерживающий OTR, PGP, OMEMO.
  • Psi+ — доработанная версия XMPP-клиента Psi (все новые функции вначале появляются в Psi+, а затем постепенно переносятся в Psi).
  • Gajim — кроссплатформенный клиент, поддерживающий OTR, PGP, OMEMO.
  • Dino - клиент для семейств Linux и BSD с поддержкой OMEMO. Написан на языке Vala с использованием тулкита GTK

Для Android

  • Pix-Art Messenger — форк известного клиента Conversations с дополнительными функциями. Большой выбор серверов. Поддерживает OMEMO, OTR, OpenPGP.
  • Xabber — XMPP-клиент с поддержкой OTR, PGP.
  • Conversations — XMPP-клиент с поддержкой OTR (с версии 2.0.0 данная функция не поддерживается), PGP, OMEMO. Есть возможность отправки картинок, файлов различных типов, геокоординат, записи и отправки голосовых сообщений.
  • IM+ — мультипротокольный мессенджер с OTR.
  • yaxim.

Для iOS

  • ChatSecure — XMPP-клиент с поддержкой OTR, OMEMO от коллектива Шаблон:Iw.
  • Zom — XMPP-клиент с поддержкой OTR, OMEMO. Является ответвлением от проекта ChatSecure. Поддержка отправки файлов и голосовых сообщений.

См. также

Примечания

Шаблон:Примечания

Ссылки

Шаблон:Программы мгновенного обмена сообщениями Шаблон:URI scheme Шаблон:IPstack

Шаблон:Rq