Extensible Messaging and Presence Protocol ( сокращенно XMPP , первоначально называвшийся Jabber [1] ) — открытый протокол связи, разработанный для обмена мгновенными сообщениями (IM), информации о присутствии и ведения списка контактов . [2] Основанный на XML (Extensible Markup Language), он обеспечивает обмен структурированными данными между двумя или более сетевыми объектами в режиме , близком к реальному времени . [3] Разработанный как расширяемый , протокол предлагает множество приложений за пределами традиционного обмена мгновенными сообщениями в более широкой области промежуточного программного обеспечения, ориентированного на сообщения , включая сигнализацию для VoIP , видео, передачу файлов , игр и других применений.
В отличие от большинства коммерческих протоколов обмена мгновенными сообщениями, XMPP определен в открытом стандарте на прикладном уровне . Архитектура сети XMPP похожа на электронную почту ; любой может запустить свой собственный сервер XMPP, и нет центрального главного сервера. Этот подход федеративной открытой системы позволяет пользователям взаимодействовать с другими на любом сервере, используя учетную запись пользователя «JID», похожую на адрес электронной почты. Реализации XMPP могут быть разработаны с использованием любой лицензии на программное обеспечение, и многие реализации серверов, клиентов и библиотек распространяются как бесплатное и открытое программное обеспечение . Также существуют многочисленные реализации бесплатного и коммерческого программного обеспечения .
Первоначально разработанные сообществом открытого исходного кода , протоколы были формализованы как утвержденный стандарт обмена мгновенными сообщениями в 2004 году и постоянно развивались с новыми расширениями и функциями. Различные клиентские программы XMPP доступны как на настольных компьютерах, так и на мобильных платформах и устройствах - к 2003 году протокол использовали более десяти миллионов человек по всему миру в сети, согласно XMPP Standards Foundation . [4] [ требуется обновление ]
Архитектура сети XMPP напоминает Simple Mail Transfer Protocol (SMTP), модель клиент-сервер ; клиенты не общаются друг с другом напрямую, поскольку она децентрализована — любой может запустить сервер. По замыслу, здесь нет центрального уполномоченного сервера, как в службах обмена сообщениями, таких как AIM , WLM , WhatsApp или Telegram . В этом вопросе часто возникает некоторая путаница, поскольку в сети работает публичный сервер XMPP jabber.org
, на который подписаны многие пользователи. Однако любой может запустить свой собственный сервер XMPP на своем собственном домене.
Каждый пользователь в сети имеет уникальный адрес XMPP, называемый JID [5] (по историческим причинам адреса XMPP часто называют Jabber ID ). JID структурирован как адрес электронной почты с именем пользователя и доменным именем (или IP-адресом [6] ) для сервера, на котором находится этот пользователь, разделенные знаком ( ) @
— например, « [email protected]
«: здесь alice
имя пользователя и example.com
сервер, на котором зарегистрирован пользователь.
Поскольку пользователь может захотеть войти из нескольких мест, он может указать ресурс . Ресурс идентифицирует конкретного клиента, принадлежащего пользователю (например, домашний, рабочий или мобильный). Это может быть включено в JID путем добавления косой черты, за которой следует имя ресурса. Например, полный JID мобильного аккаунта пользователя может быть [email protected]/mobile
.
Каждый ресурс может иметь указанное числовое значение, называемое приоритетом . Сообщения, просто отправленные на , [email protected]
будут отправлены клиенту с наивысшим приоритетом, но отправленные на , [email protected]/mobile
будут отправлены только мобильному клиенту. Наивысший приоритет — это тот, у которого наибольшее числовое значение.
JID без части имени пользователя также допустимы и могут использоваться для системных сообщений и управления специальными функциями на сервере. Ресурс остается необязательным и для этих JID.
Средства маршрутизации сообщений на основе логического идентификатора конечной точки (JID), а не явного IP-адреса, предоставляют возможности использования XMPP в качестве реализации сети Overlay поверх различных базовых сетей. [7]
Исходным и «родным» транспортным протоколом для XMPP является Transmission Control Protocol (TCP), использующий открытые потоки XML через долгоживущие соединения TCP. В качестве альтернативы транспорту TCP сообщество XMPP также разработало транспорт HTTP для веб-клиентов, а также пользователей за ограниченными брандмауэрами . В исходной спецификации XMPP мог использовать HTTP двумя способами: опрос [8] и привязка . Метод опроса, в настоящее время устаревший, по сути подразумевает, что сообщения, хранящиеся в базе данных на стороне сервера, регулярно извлекаются (и публикуются) клиентом XMPP с помощью HTTP-запросов «GET» и «POST». Метод привязки, реализованный с использованием двунаправленных потоков по синхронному HTTP ( BOSH ), [9] позволяет серверам отправлять сообщения клиентам сразу после их отправки. Эта модель push-уведомлений более эффективна, чем опрос, при котором многие опросы не возвращают новых данных.
Поскольку клиент использует HTTP, большинство брандмауэров позволяют клиентам получать и отправлять сообщения без каких-либо помех. Таким образом, в сценариях, где порт TCP, используемый XMPP, заблокирован, сервер может прослушивать обычный порт HTTP, и трафик должен проходить без проблем. Различные веб-сайты позволяют людям входить в XMPP через браузер. Кроме того, существуют открытые публичные серверы, которые прослушивают стандартные порты http (порт 80) и https (порт 443) и, следовательно, разрешают соединения из-за большинства брандмауэров. Однако зарегистрированный IANA порт для BOSH на самом деле 5280, а не 80.
XMPP Standards Foundation или XSF (ранее Jabber Software Foundation) активно разрабатывает открытые расширения XMPP, так называемые XEP . [10] Однако расширения также могут быть определены любым лицом, программным проектом или организацией. Для поддержания взаимодействия общие расширения управляются XSF. Приложения XMPP за пределами IM включают: чаты , управление сетями , синдикацию контента , инструменты для совместной работы, обмен файлами , игры, удаленное управление системами и мониторинг, геолокацию , промежуточное программное обеспечение и облачные вычисления , VoIP и службы идентификации.
Благодаря своей способности поддерживать обнаружение в локальных сетевых доменах , XMPP хорошо подходит для облачных вычислений , где виртуальные машины, сети и брандмауэры в противном случае представляли бы препятствия для альтернативного обнаружения сервисов и решений на основе присутствия. Облачные вычисления и системы хранения данных полагаются на различные формы связи на нескольких уровнях, включая не только обмен сообщениями между системами для передачи состояния, но и миграцию или распределение более крупных объектов, таких как хранилища или виртуальные машины. Наряду с аутентификацией и защитой транзитных данных, XMPP может применяться на различных уровнях и может оказаться идеальным в качестве расширяемого промежуточного программного обеспечения или протокола промежуточного программного обеспечения, ориентированного на сообщения (MOM).
На данный момент XMPP не поддерживает качество обслуживания (QoS); гарантированная доставка сообщений должна быть построена поверх уровня XMPP. Для решения этой проблемы предложено два XEP: XEP-0184 Message delivery receipts, который в настоящее время является проектом стандарта, и XEP-0333 Chat Markers, который считается экспериментальным.
Поскольку XML основан на тексте, обычный XMPP имеет более высокие сетевые издержки по сравнению с чисто бинарными решениями. Эта проблема решалась экспериментальным XEP-0322: Efficient XML Interchange (EXI) Format, где XML сериализуется эффективным бинарным способом, особенно в режиме с информацией о схеме. Этот XEP в настоящее время отложен.
Внутриполосная передача двоичных данных ограничена. Двоичные данные должны быть сначала закодированы в base64 , прежде чем их можно будет передать внутриполосно. Поэтому любой значительный объем двоичных данных (например, передача файлов ) лучше всего передавать внеполосно , используя внутриполосные сообщения для координации. Лучшим примером этого является протокол расширения Jingle XMPP, XEP-0166.
Используя расширение Jingle , XMPP может предоставить открытое средство для поддержки связи между машинами или одноранговыми сетями в различных сетях. Эта функция в основном используется для IP-телефонии (VoIP).
XMPP поддерживает конференции с несколькими пользователями, используя спецификацию Multi-User Chat (MUC) (XEP-0045). С точки зрения обычного пользователя, это сопоставимо с Internet Relay Chat (IRC).
Серверы XMPP могут быть изолированы (например, в интрасети компании ), а безопасная аутентификация ( SASL ) и шифрование «точка-точка» ( TLS ) встроены в основные спецификации XMPP.
Off-the-Record Messaging (OTR) — это расширение XMPP, позволяющее шифровать сообщения и данные. С тех пор оно было заменено лучшим расширением, multi-end-to-multi-end шифрованием ( OMEMO , XEP-0384) end-to-end шифрованием между пользователями. Это обеспечивает более высокий уровень безопасности, шифруя все данные от исходного клиента и снова расшифровывая их на целевом клиенте; оператор сервера не может расшифровать данные, которые он пересылает.
Сообщения также можно зашифровать с помощью OpenPGP , например, с помощью программы Gajim .
Хотя сегодня существует несколько протоколов обнаружения служб (например, zeroconf или Service Location Protocol ), XMPP обеспечивает надежную основу для обнаружения служб, находящихся локально или в сети, а также доступности этих служб (через информацию о присутствии), как указано в XEP-0030 DISCO. [11]
Одной из первоначальных целей разработки раннего сообщества открытого исходного кода Jabber было предоставление пользователям возможности подключаться к нескольким системам мгновенного обмена сообщениями (особенно к системам, не относящимся к XMPP) через одно клиентское приложение. Это было сделано с помощью сущностей, называемых транспортами или шлюзами, к другим протоколам мгновенного обмена сообщениями, таким как ICQ , AIM или Yahoo Messenger , а также к таким протоколам, как SMS , IRC или электронная почта . В отличие от многопротокольных клиентов , XMPP предоставляет этот доступ на уровне сервера, взаимодействуя через специальные службы шлюзов, работающие вместе с сервером XMPP. Любой пользователь может «зарегистрироваться» в одном из этих шлюзов, предоставив информацию, необходимую для входа в эту сеть, и затем может общаться с пользователями этой сети, как если бы они были пользователями XMPP. Таким образом, такие шлюзы функционируют как клиентские прокси (шлюз аутентифицируется от имени пользователя в службе, не относящейся к XMPP). В результате любой клиент, который полностью поддерживает XMPP, может получить доступ к любой сети со шлюзом без дополнительного кода в клиенте и без необходимости для клиента иметь прямой доступ к Интернету. Однако модель клиентского прокси может нарушать условия обслуживания используемого протокола (хотя такие условия обслуживания не имеют юридической силы в ряде стран), а также требует от пользователя отправки своего имени пользователя и пароля для обмена мгновенными сообщениями на сторонний сайт, который управляет транспортом (что может вызывать проблемы с конфиденциальностью и безопасностью).
Другой тип шлюза — шлюз «сервер-сервер», который позволяет развертыванию сервера без XMPP подключаться к собственным серверам XMPP с использованием встроенных функций междоменной федерации XMPP. Такие шлюзы «сервер-сервер» предлагаются несколькими программными продуктами корпоративного IM, включая:
XMPP реализован многими клиентами, серверами и библиотеками кода. [15] Эти реализации предоставляются в соответствии с различными лицензиями на программное обеспечение.
Существует множество программного обеспечения XMPP-серверов, среди которых наиболее известны ejabberd и Prosody .
Большое количество клиентского программного обеспечения XMPP существует на различных современных и устаревших платформах, включая как графические клиенты, так и клиенты на основе командной строки. Согласно веб-сайту XMPP, некоторые из самых популярных программ включают Conversations и Quicksy ( Android ), Dino ( BSD , Windows , Unix , Linux ), Converse.js (веб-браузер, Linux , Windows , macOS ), [16] Gajim ( Windows , Linux ), [16] Monal ( macOS , iOS ) и Swift.IM (macOS, Windows, Linux). В последнее время Monal был разветвлен как релиз Quicksy для iOS .
Среди других клиентов: Bombus, ChatSecure , Coccinella , Miranda NG , [16] Pidgin , Psi , [16] Tkabber , Trillian и Xabber .
По всему миру существуют тысячи серверов XMPP, многие из которых являются публичными, а также частными лицами или организациями, которые используют свои собственные серверы без коммерческих намерений. На многочисленных веб-сайтах представлен список публичных серверов XMPP, на которых пользователи могут зарегистрироваться (например, на веб-сайте XMPP.net).
Несколько крупных публичных служб обмена мгновенными сообщениями изначально используют или использовали XMPP, включая LiveJournal 's "LJ Talk", [17] Nimbuzz и HipChat . Различные хостинговые службы, такие как DreamHost , позволяют клиентам хостинга выбирать XMPP-сервисы наряду с более традиционными веб-сервисами и службами электронной почты. Специализированные XMPP-хостинговые службы также существуют в виде облака , так что владельцам доменов не нужно напрямую запускать свои собственные XMPP-серверы, включая Cisco Webex Connect, Chrome.pl, Flosoft.biz, i-pobox.net и hosted.im.
XMPP также используется при развертывании не-IM-сервисов, включая интеллектуальные сетевые системы, такие как приложения реагирования на спрос , промежуточное программное обеспечение, ориентированное на сообщения, а также в качестве замены SMS для обеспечения обмена текстовыми сообщениями на многих смартфонах- клиентах.
Некоторые из крупнейших поставщиков услуг обмена сообщениями используют или использовали различные формы протоколов на основе XMPP в своих внутренних системах, не обязательно раскрывая этот факт своим конечным пользователям. [18] [19] Одним из примеров является Google , который в августе 2005 года представил Google Talk , комбинацию VoIP и IM-системы, которая использует XMPP для обмена мгновенными сообщениями и в качестве основы для протокола сигнализации передачи голоса и файлов под названием Jingle . Первоначальный запуск не включал связь между серверами ; Google включил эту функцию 17 января 2006 года. [20] Позже Google добавил функциональность видео в Google Talk, также используя протокол Jingle для сигнализации. В мае 2013 года Google объявил, что совместимость с XMPP будет исключена из Google Talk для федерации сервер-сервер, хотя он сохранит поддержку клиент-сервер. [21] С тех пор Google Talk был исключен из линейки продуктов Google.
В январе 2008 года AOL представила экспериментальную поддержку XMPP для своего сервиса AOL Instant Messenger (AIM), [22] позволяя пользователям AIM общаться с помощью XMPP. Однако в марте 2008 года эта услуга была прекращена. [ необходима цитата ] По состоянию на май 2011 года AOL предлагает ограниченную поддержку XMPP. [23]
В феврале 2010 года сайт социальной сети Facebook открыл свою функцию чата для сторонних приложений через XMPP. [24] Некоторые функции были недоступны через XMPP, и поддержка была прекращена в апреле 2014 года. [25] Аналогичным образом, в декабре 2011 года Microsoft выпустила интерфейс XMPP для своей службы Microsoft Messenger . [26] Skype , его фактический преемник, также предоставлял ограниченную поддержку XMPP. [27] Apache Wave — еще один пример. [28]
XMPP является фактическим стандартом для приватного чата на игровых платформах, таких как Origin [ 29] и PlayStation , а также на ныне прекращенных Xfire и Raptr [30] . Двумя заметными исключениями являются Steam [31] и Xbox LIVE ; оба используют собственные фирменные протоколы обмена сообщениями.
Джереми Миллер начал работать над технологией Jabber в 1998 году и выпустил первую версию сервера jabberd
4 января 1999 года. [32] Раннее сообщество Jabber было сосредоточено на программном обеспечении с открытым исходным кодом, в основном на сервере jabberd, но его главным результатом стала разработка протокола XMPP.
Internet Engineering Task Force (IETF) сформировала рабочую группу XMPP в 2002 году для формализации основных протоколов в качестве технологии мгновенного обмена сообщениями и присутствия IETF. Ранний протокол Jabber , разработанный в 1999 и 2000 годах, лег в основу XMPP, опубликованного в RFC 3920 и RFC 3921 в октябре 2004 года (основными изменениями во время формализации рабочей группой XMPP IETF были добавление TLS для шифрования канала и SASL для аутентификации). Рабочая группа XMPP также разработала спецификации RFC 3922 и RFC 3923. В 2011 году RFC 3920 и RFC 3921 были заменены RFC 6120 и RFC 6121 соответственно, причем RFC 6122 определял формат адреса XMPP. В 2015 году RFC 6122 был заменен RFC 7622. Помимо этих основных протоколов, стандартизированных в IETF, XMPP Standards Foundation (ранее Jabber Software Foundation) активно занимается разработкой открытых расширений XMPP.
Первым IM-сервисом на основе XMPP был Jabber.org, [16] который работал непрерывно и предлагал бесплатные аккаунты с 1999 года. [33] С 1999 года по февраль 2006 года сервис использовал jabberd в качестве своего серверного программного обеспечения, после чего он перешел на ejabberd (оба являются серверами приложений с бесплатным программным обеспечением ). В январе 2010 года сервис перешел на фирменное серверное программное обеспечение M-Link, производимое Isode Ltd. [34]
В сентябре 2008 года компания Cisco Systems приобрела компанию Jabber, Inc., создателей коммерческого продукта Jabber XCP. [35]
XMPP Standards Foundation (XSF) разрабатывает и публикует расширения XMPP посредством процесса стандартизации, основанного на протоколах расширения XMPP (XEP, ранее известных как предложения по улучшению Jabber - JEP). Особенно широко используются следующие расширения:
Такие функции XMPP, как федерация между доменами, публикация/подписка, аутентификация и ее безопасность даже для мобильных конечных точек, используются для внедрения Интернета вещей . Несколько расширений XMPP являются частью экспериментальной реализации: Формат эффективного обмена XML (EXI); [44] Данные датчиков; [45] Предоставление; [46] Управление; [47] Концентраторы; [48] Обнаружение. [49]
Эти усилия задокументированы на странице в вики XMPP, посвященной Интернету вещей [50] и в списке рассылки XMPP IoT. [51]
Рабочая группа IETF XMPP подготовила серию документов Request for Comments (RFC):
Наиболее важными и наиболее широко применяемыми из этих спецификаций являются:
XMPP часто рассматривался как конкурент SIMPLE , основанного на протоколе SIP (Session Initiation Protocol ), как стандартный протокол для обмена мгновенными сообщениями и уведомлений о присутствии. [52] [53]
Расширение XMPP для многопользовательского чата [38] можно рассматривать как конкурента IRC , хотя IRC гораздо проще, имеет гораздо меньше функций и гораздо более широко используется. [ необходима цитата ]
Расширения XMPP для публикации-подписки [39] предоставляют многие из тех же функций, что и протокол расширенной очереди сообщений (AMQP).