XMPP: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
отмена правки 90174013 участника 195.178.207.66 (обс.) может и официально закрыт, но все ещё работает
Метка: отмена
Нет описания правки
Строка 88: Строка 88:


====Для ПК и ноутбуков====
====Для ПК и ноутбуков====
*[[Pidgin]] — мультипротокольный клиент споддержкой OTR, PGP
*[[Pidgin]] — кроссплатформенный клиент споддержкой OTR, PGP
*[[Psi]] — кроссплатформенный клиент поддерживающий OTR, PGP, OMEMO
*Psi+ — активно развивающийся форк джаббер клиента [[Psi]]
*Psi+ — доработанная версия XMPP клиента [[Psi]] (все новые функции вначале появляются в Psi+, а затем постепенно переносятся в Psi)
*[[Gajim]] — кроссплатформенный клиент поддерживающий OTR, PGP, OMEMO
*[[Gajim]] — кроссплатформенный клиент поддерживающий OTR, PGP, OMEMO



Версия от 17:57, 4 марта 2018

Логотип XMPP Standards Foundation

XMPP (Extensible Messaging and Presence Protocol) — расширяемый протокол обмена сообщениями и информацией о присутствии, ранее известный как Jabber[1] ([ˈʤæbə(r)], джа́ббер — «болтовня», «трёп», «тарабарщина») — открытый, основанный на XML, свободный для использования протокол для мгновенного обмена сообщениями и информацией о присутствии (см. список контактов) в режиме, близком к режиму реального времени. Изначально спроектированный легко расширяемым, протокол, помимо передачи текстовых сообщений, поддерживает передачу голоса, видео и файлов по сети.

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

История

Проект Jabber был основан Джереми Миллером в начале 1998 года с разработки сервера 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].

Протокол

Схема устройства работы XMPP

Семейство протоколов XMPP принято как стандарт RFC[13]. Стандартный порт для XMPP — 5222[14]. Также возможно использовать порт 80 и/или 443[15], если возникают проблемы с файрволом.

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

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

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

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

Боты

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

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

  • Neutron[24] — англоязычный бот на Python (библиотека «xmpppy»), один из первых xmpp-ботов;
  • FreQ — многофункциональный xmpp-бот, зарекомендовавший себя стабильностью в работе[источник не указан 3253 дня], написан на Python (библиотека Twisted);
  • Sulci — бот-говорун, какое-то время был крайне популярен в качестве развлечения;
  • Gluxi — многофункциональный бот, написанный на C++;
  • Talisman — русскоязычная модификация бота Neutron, примечателен наличием множества модификаций и является наиболее популярным[25] ботом в русскоязычных Jabber-конференциях;
  • EndLess — модификация бота Talisman. Примечателен тем, что он стал первым ботом, использующим более одного JID’а. По заявлениям разработчика бот является обладателем своеобразного рекорда: одна копия длительное время обслуживала ~500 конференций. Исходного кода бота нет в свободном доступе;
  • Fatal [Neutrino][26] — модификация бота Talisman/Neutron со слегка изменённой библиотекой «xmpppy». В последних версиях полностью переписан и практически не имеет ничего общего со своими предками. Для обеспечения наибольшего быстродействия его код распространяется в скомпилированном виде, что, однако, не противоречит GNU GPL v2. Примечателен высокой надёжностью и отказоустойчивостью. Локализации 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 могут также использоваться без явного указания имени пользователя (с указанием имени ресурса или без такового) для системных сообщений и для контроля специальных возможностей на сервере.

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

Элис посылает сообщение через сеть джаббер к ICQ-транспорту. Дальше сообщение передаётся Бобу через сеть ICQ

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

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

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

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

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

  • ejabberd — свободный распределённый и отказоустойчивый XMPP-сервер, написанный на Erlang. Работает на крупнейшем российском XMPP-сервере jabber.ru.
  • CommuniGate Pro
  • Openfire (ранее Wildfire, ещё ранее Jive Messenger) — свободный многофункциональный и отказоустойчивый XMPP-сервер, написанный на Java. Занимал первое место в рейтинге по возможностям на jabber.org (по состоянию рейтинга на конец марта 2007 года)[36]
  • Prosody — кроссплатформенный XMPP-сервер, написанный на языке программирования Lua
  • jabberd2 — свободный сервер, написанный на языке C

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

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

  • Pidgin — кроссплатформенный клиент споддержкой OTR, PGP
  • Psi — кроссплатформенный клиент поддерживающий OTR, PGP, OMEMO
  • Psi+ — доработанная версия XMPP клиента Psi (все новые функции вначале появляются в Psi+, а затем постепенно переносятся в Psi)
  • Gajim — кроссплатформенный клиент поддерживающий OTR, PGP, OMEMO

Для Android

  • Xabber — xmpp-клиент с поддержкой OTR, PGP
  • Conversations — xmpp-клиент с поддержкой OTR, PGP, OMEMO. Есть возможность отправки картинок, файлов, записи голоса.
  • IM+ — мультипротокольный мессенджер с OTR

Примечания

  1. 1 2 Jabber Inc. — About Us Архивировано 3 июля 2007 года.
  2. Facebook Developers: Chat API
  3. Яндекс прекращает поддержку Jabber'a и об этом никто не знает / Geektimes
  4. Яндекс вслед за остальными закрывает свой jabber сервер / Geektimes
  5. History of XMPP
  6. Open Real Time Messaging System
  7. Запись в блоге Питера Сен-Андре
  8. Jabber Software Foundation Renamed to XMPP Standards Foundation Архивировано 15 июня 2010 года.
  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
  12. The XMPP Blog: No, it's not the end of XMPP for Google Talk
  13. XMPP RFCs
  14. Can I use Jabber when I’m behind a firewall? JabberLive!, 9 марта 2007
  15. Jabber available behind a firewall or proxy. Free
  16. Psi
  17. Kopete OTR plugin
  18. Miranda GnuPG Plugin
  19. Standards-JIG] Distribution of stanza types
  20. Standards-JIG] proto-JEP: Smart Presence Distribution
  21. XEP-0138: Stream Compression
  22. Transport Layer Security Protocol Compression Methods
  23. Standards-JIG] MUC traffic issues
  24. Neutron (Jabber bot)
  25. Google Trends
  26. fatal-dev
  27. Snapi XMPP bot
  28. BlackSmith XMPP bot
  29. BlackSmith mark.2 (New XMPP bot)
  30. Taho на GoogleCode
  31. pako — Pako Jabber bot (C#).
  32. Disabler Production Labaratory
  33. Крупнейший XMPP сервер в России
  34. Python Style Guide
  35. a7x-im (Erl bot developers)
  36. XMPP Software: Servers. XMPP Standards Foundation. Дата обращения: 12 февраля 2009. Архивировано 21 августа 2011 года.
  37. Most popular instant messengers in the xmpp-server of 404.city

Ссылки