XMPP

Материал из Википедии — свободной энциклопедии
(перенаправлено с «Jabber»)
Перейти к навигации Перейти к поиску
XMPP
Изображение логотипа
Порт/ID 5222и5269
Логотип ВикискладаМедиафайлы на Викискладе

XMPP(англ.eXtensibleMessaging andPresenceProtocol«расширяемый протокол обмена сообщениями и информацией о присутствии»), ранее известный какджа́ббер(англ.Jabber[1][ˈʤæbə(r)]«болтовня, трёп, тарабарщина») —открытый,основанный на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 CapitalWebb Interactive Services, Inc.[1]

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

Схема устройства работы 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, а также использование компрессии в рамках шифрования соединения TLSRFC 3749,глава 3[22].
    На 2006 год XMPP страдает от фактически той же проблемы избыточности, но применительно кчат-комнатами возможностямпубликации информации[23].Решение этих проблем также ожидается в видеXEP-расширений. Пока они не введены, большие чат-комнаты образуют избыточный трафик.
  • Неэффективность передачи бинарных данных:Так как XMPP является, по сути, одним длинным XML-документом, невозможно передать немодифицированную двоичную информацию. В результате для передачи файлов стараются использовать дополнительные расширения, напримерHTTP(http upload). Для передачи же файлов и другой бинарной информации непосредственно в XMPP-потоке используется кодированиеbase64.С другой стороны, некоторые клиентские программы для передачи используют технологииp2p,не задействуя при этом сервер.

Расширения XMPP

[править|править код]
Проверка доступности серверных расширений в клиентеConversations.Сравнение серверовhttps://xmpp.jphttps://jabber.ruhttps://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, будет иметь адрес: [email protected].

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

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

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

[править|править код]
Алиса посылает сообщение через сеть Jabber к ICQ-транспорту. Дальше сообщение передаётся Бобу через сеть ICQ.

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

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

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

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

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

[править|править код]

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

  • Firebase Cloud Messaging— миллиарды пользователей, кроссплатформенный сервис уведомлений и сообщений (ранее Google Cloud Messaging) — поддержка XMPP будет удалена в июне 2024 года[38]
  • Google~ 1,5 миллиарда пользователей,push-уведомления[39]
  • WhatsApp~ 800 млн пользователей, использует модифицированный протокол XMPP[40]для чатов
  • Apple~ 500 миллионов пользователей, push-уведомления[41]
  • Kik Messenger~ 300 миллионов пользователей, использует разновидность XMPP[42]для своего популярного чат-сервиса
  • Fortnite~ 250 пользователей, совместная игра на выживание, использующая XMPP для сообщений присутствия, всплывающих уведомлений, личных сообщений и группового чата
  • Logitech Harmony Hub— миллионы пользователей, система домашней автоматизации и дистанционного управления мультимедиа[43]
  • Jitsi— бесплатный проект с открытым исходным кодом, который позволяет проводить видеоконференции, использует XMPP для функции чата
  • Movim— основанная на XMPP распределённая платформа социальных сетей
  • Talky— видеочат и общий доступ к экрану для групп до 6 человек

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

[править|править код]

https://xmpp.org/software/?platform=linux

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

Веб-клиенты

[править|править код]

Для Linux/macOS/Windows

[править|править код]
  • Dino- клиент для семейств Linux и BSD с поддержкойOMEMO.Написан на языке Vala с использованием тулкита GTK
  • Gajim— кроссплатформенный клиент, поддерживающийOTR,PGP,OMEMO
  • Monal IM—XMPP-клиент для iOS и macOS
  • Erlang/Elixir XMPP— библиотека синтаксического анализа и сериализации поверх Fast XML
  • Martin— клиентская библиотека XMPP для Swift
  • QXmpp— кроссплатформенная клиентская и серверная библиотека C++/Qt XMPP
  • Slidge— фреймворк XMPP-шлюза на Python

Некоторые публичные XMPP-серверы

[править|править код]
  1. 12Jabber Inc. — About UsАрхивировано3 июля 2007 года.
  2. Facebook Developers: Chat API.Дата обращения: 7 июля 2016. Архивировано изоригинала25 сентября 2015 года.
  3. Яндекс прекращает поддержку Jabber’a и об этом никто не знает / Geektimes.Дата обращения: 28 ноября 2016.Архивировано29 ноября 2016 года.
  4. Яндекс вслед за остальными закрывает свой jabber сервер / Geektimes.Дата обращения: 28 ноября 2016.Архивировано29 ноября 2016 года.
  5. History of XMPP.Дата обращения: 8 сентября 2009.Архивировано12 февраля 2011 года.
  6. Open Real Time Messaging System
  7. Запись в блоге Питера Сен-Андре(недоступная ссылка)
  8. Jabber Software Foundation Renamed to XMPP Standards Foundation:[Press release]:(недоступная ссылка):[англ.]:[арх.21 января 2007] // xmpp.org. — XSF, 2007. — 16 January.
  9. Gary Burd.XMPP Federation(17 января 2006). Дата обращения: 30 ноября 2007.Архивировано21 августа 2011 года.
  10. Sean Gallagher.Google will not allow server-to-server connections(17 мая 2013). Дата обращения: 20 мая 2013.Архивировано20 мая 2013 года.
  11. Google FAQ: Open Communications.Дата обращения: 7 июля 2016.Архивировано5 октября 2016 года.
  12. The XMPP Blog: No, it’s not the end of XMPP for Google Talk.Дата обращения: 7 июля 2016.Архивировано17 июня 2016 года.
  13. XMPP RFCs.Дата обращения: 8 сентября 2009.Архивировано17 сентября 2009 года.
  14. Can I use Jabber when I’m behind a firewall?Архивировано20 мая 2007 года.JabberLive!, 9 марта 2007
  15. Jabber available behind a firewall or proxy. Free.Дата обращения: 23 мая 2022.Архивировано25 января 2021 года.
  16. Psi.Дата обращения: 24 января 2009.Архивировано1 ноября 2020 года.
  17. Kopete OTR plugin.Дата обращения: 24 января 2009.Архивировано17 октября 2008 года.
  18. Miranda GnuPG PluginАрхивировано20 декабря 2010 года.
  19. Standards-JIG] Distribution of stanza types.Дата обращения: 14 августа 2009.Архивировано15 июня 2009 года.
  20. Standards-JIG] proto-JEP: Smart Presence Distribution.Дата обращения: 14 августа 2009.Архивировано10 июня 2009 года.
  21. XEP-0138: Stream Compression.Дата обращения: 14 августа 2009.Архивировано15 августа 2009 года.
  22. Transport Layer Security Protocol Compression Methods.Дата обращения: 14 августа 2009.Архивировано12 октября 2009 года.
  23. Standards-JIG] MUC traffic issues.Дата обращения: 14 августа 2009.Архивировано10 мая 2009 года.
  24. Neutron (Jabber bot).Дата обращения: 20 июля 2011.Архивировано22 августа 2011 года.
  25. Google Trends.Дата обращения: 5 мая 2013.Архивировано8 октября 2016 года.
  26. fatal-dev.Дата обращения: 26 ноября 2011.Архивировано27 мая 2013 года.
  27. Snapi XMPP bot.Дата обращения: 20 июля 2011.Архивировано24 апреля 2014 года.
  28. BlackSmith XMPP bot.Дата обращения: 4 декабря 2011.Архивировано18 сентября 2011 года.
  29. BlackSmith mark.2 (New XMPP bot).Дата обращения: 20 июля 2011.Архивировано25 ноября 2011 года.
  30. Taho на GoogleCode.Дата обращения: 20 июля 2011.Архивировано28 февраля 2011 года.
  31. pako — Pako Jabber bot (C#).Дата обращения: 14 августа 2013.Архивировано7 октября 2013 года.
  32. Disabler Production LabAratory.Дата обращения: 11 февраля 2020.Архивировано16 февраля 2020 года.
  33. Крупнейший XMPP сервер в России.Дата обращения: 16 июля 2004.Архивировано29 июля 2004 года.
  34. Python Style Guide.Дата обращения: 20 июля 2011.Архивировано29 октября 2009 года.
  35. a7x-im (Erl bot developers).Дата обращения: 20 июля 2011.Архивировано8 февраля 2011 года.
  36. ejabberd Massive Scalability: 1 Node — 2+ Million Concurrent Users | ProcessOne Blog.Дата обращения: 22 июня 2018.Архивировано22 июня 2018 года.
  37. XMPP | Uses of XMPP.Дата обращения: 22 июня 2018.Архивировано22 июня 2018 года.
  38. Переход с устаревших API FCM на HTTP v1 Firebase Cloud Messaging.
  39. About GCM Connection Server | Cloud Messaging | Google Developers.web.archive.org(6 марта 2017). Дата обращения: 29 сентября 2023.Архивировано6 марта 2017 года.
  40. F. Karpisek, I. Baggili, F. Breitinger.WhatsApp network forensics: Decrypting and understanding the WhatsApp call signaling messages// Digital Investigation. — 2015-12-01. —Т. 15.—С. 110–118.—ISSN1742-2876.—doi:10.1016/j.diin.2015.09.002.
  41. What technology does the iOS Apple Push Notification Service (APNS) use to maintain a persistent connection with each device to receive s...(англ.).Quora.Дата обращения: 29 сентября 2023.
  42. Tomer.Kik Bot API.— 2023-09-26.Архивировано25 октября 2021 года.
  43. Hollister, SeanLogitech pulls 180, will un-break third-party Harmony home automation(амер. англ.).The Verge(21 декабря 2018). Дата обращения: 29 сентября 2023.Архивировано2 июня 2023 года.
  44. Statistics(9 августа 2017). Дата обращения: 18 апреля 2018. Архивировано изоригинала9 августа 2017 года.