XMPP
XMPP (Extensible Messaging and Presence Protocol — расширяемый протокол обмена сообщениями и информацией о присутствии), ранее известный как Jabber[1] ([ˈʤæbə(r)], джа́ббер — «болтовня», «трёп», «тарабарщина», сленг. — жабер, жаббер, жабёр[2]) — основанный на XML, открытый, свободный для использования протокол для мгновенного обмена сообщениями и информацией о присутствии (см. список контактов) в режиме, близком к режиму реального времени. Изначально спроектированный легко расширяемым, протокол, помимо передачи текстовых сообщений, поддерживает передачу голоса, видео и файлов по сети.
В отличие от коммерческих систем мгновенного обмена сообщениями, таких, как AIM, ICQ, WLM и Yahoo, XMPP является децентрализованной, расширяемой и открытой системой. Любой желающий может открыть свой сервер мгновенного обмена сообщениями, регистрировать на нём пользователей и взаимодействовать с другими серверами XMPP. На основе протокола XMPP уже открыто множество частных и корпоративных серверов XMPP. Среди них есть достаточно крупные проекты, такие как Facebook, Google Talk, В Контакте, Одноклассники.ru, Я.Онлайн, QIP, LiveJournal, Juick и др.
Содержание |
[править] История
Проект Jabber был основан Джереми Миллером в начале 1998 года с разработки сервера jabberd[3]. Первое сообщение о проекте появилось 4 января 1999 года на сайте Slashdot[4]. Эту дату принято считать днем рождения технологии[5]. Вскоре после этого к проекту присоединилось несколько основных разработчиков, которые стали работать над сервером 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[6]), для более точного описания своей работы развития расширений собственно протокола, в отличие от линии развития программы с одноименным названием.
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 года такая возможность была добавлена[7].
[править] Протокол
Семейство протоколов XMPP принято как стандарт RFC[8]. Стандартный порт для XMPP — 5222[9]. Также возможно использовать порт 80 и/или 443[10], если возникают проблемы с файрволом.
[править] Преимущества
- Децентрализация: Архитектура сети 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 внутри протокола[11][12][13].
- Гибкость: Настраиваемая функциональность может быть надстроена поверх XMPP; для поддержки возможности взаимодействия различных сетей стандартные расширения поддерживаются XMPP Software Foundation. Приложения XMPP в дополнение к функциональности клиента сетевого общения включают в себя администрирование сети, распределение ресурсов, утилиты для совместной работы, обмен файлами, игры и мониторинг удалённых систем.
[править] Слабые стороны
- Избыточность передаваемой информации: Как правило, более 70 % межсерверного трафика XMPP составляют сообщения о присутствии[14], около 60 % которых являются излишними[15]. XMPP на данный момент создаёт избыточный трафик при доставке сообщений о присутствии (то есть «статус-сообщений») нескольким пользователям. Для решения этой проблемы разрабатываются новые протоколы. Также решением является расширение XEP-0138[16] — компрессия передаваемых данных протокола алгоритмами lzw и zlib, а также использование компрессии в рамках шифрования соединения TLS RFC 3749, глава 3[17].
- Масштабируемость: XMPP сейчас страдает от фактически той же проблемы избыточности, но применительно к чат-комнатам и возможностям публикации информации[18]. Решение этих проблем также ожидается в виде XEP-расширений. Пока они не введены, большие чат-комнаты интенсивно образуют избыточный трафик.
- Неэффективность передачи бинарных данных: Так как XMPP является, по сути, одним длинным XML-документом, невозможно передать не модифицированную двоичную информацию. В результате этого, для передачи файлов стараются использовать дополнительные протоколы, например, HTTP. Для передачи же файлов и другой бинарной информации непосредственно в XMPP потоке используется кодирование base64. С другой стороны, некоторые клиентские программы, например Gajim, для передачи используют технологии p2p, не задействуя при этом сервер.
[править] Боты
Неотъемлемой частью Jabber’а являются боты для конференций. Они широко используются: для защиты конференций от спама, в качестве цензора, ведения различной статистики, парсинга веб сайтов (анекдоты, новости и т. п.), создания «мостов» между чатами, ведения логов, управления конференциями, и так далее. Функционал xmpp ботов и область их применения ограничены только остроумием их разработчиков.
[править] Наиболее примечательные боты
- Neutron[19] — англоязычный бот на Python (библиотека «xmpppy»), один из первых xmpp ботов;
- FreQ — многофункциональный xmpp бот, зарекомендовавший себя стабильностью в работе, написан на Python (библиотека «twisted»);
- Sulci — бот говорун, абсолютно бесполезен, но какое-то время был крайне популярен в качестве развлечения;
- Gluxi — многофункциональный бот, написанный на C;
- Talisman — русскоязычная модификация бота Neutron, примечателен наличием множества модификаций и является наиболее популярным ботом в русскоязычных Jabber-конференциях;
- EndLess — модификация бота Talisman. Примечателен *less тем, что он стал первым ботом, использующим более одного JID’а. Бот является обладателем своеобразного рекорда: одна копия длительное время обслуживала ~500 конференций. (исходного кода бота нет в свободном доступе);
- Fatal [Neutrino][20] — модификация бота Talisman/Neutron со слегка измененной библиотекой «xmpppy». В последних версиях полностью переписан и практически не имеет ничего общего со своими предками. Для обеспечения наибольшего быстродействия, его код распространяется в скомпилированном виде, что однако не противоречит GNU GPL v2. Примечателен высокой надежностью и отказоустойчивостью. Локализации EN и RU.
- Snapi[21] — изначально являлся модификацией бота Talisman, но позже его «перерос». Можно охарактеризовать, как «Talisman с корректным кодом». Примечателен, тем что базируется на полностью переписанной библиотеке «xmpppy»;
- BlackSmith mark.1[22] — бот написанный по образу и подобию Neutron, содержит части кода бота Talisman, примечателен широким функционалом;
- BlackSmith mark.2[23] — имеет мало чего общего с предыдущим ботом, не считая названия. Написан на Python и использует слегка модифицированную «xmpppy» библиотеку. Примечателен поддержкой нескольких JID’ов, высокой стабильностью, и двумя языкам в пакете (EN, RU);
- Taho[24] — бот для конференций написанный на Tcl.
- Antispam[25] — бот предназначенный для защиты конференций. Написан на Python и использует модифицированную «xmpppy» библиотеку;
- Pako — бот довольно популярный в англоязычной части Jabber’а, бот написан на C#;
- Isida[26] — многофункциональный и мультиязычный бот, написан на Python (библиотека «xmpppy»). Примечательна тем, что это единственный бот, который в полной мере использует jabber.ru/muc-filter[27], а так же кодом, противоречащим большинству пунктов Python Style Guide[28];
- Erl[29] — бот написанный на 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 могут также использоваться без явного указания имени пользователя (с указанием имени ресурса или без такового) для системных сообщений и для контроля специальных возможностей на сервере.
[править] Соединение с другими протоколами
Полезной особенностью XMPP систем являются транспорты, или шлюзы, позволяющие пользователям получать доступ к сетям, использующим другие протоколы. Это могут быть другие протоколы мгновенного обмена сообщениями или такие протоколы, как SMS и электронная почта.
В отличие от мультипротокольных клиентов, XMPP предоставляет доступ на уровне сервера, посредством коммуникации через специальные сервисы-шлюзы, выполняющиеся на удалённом компьютере.
Любой пользователь может «зарегистрироваться» на одном из этих шлюзов, предоставив информацию, необходимую для входа в сеть, и может общаться с пользователями сети так, как если бы они были пользователями сети джаббер. Это значит, что любой клиент, полностью поддерживающий XMPP, может быть использован для доступа к любой сети, для которой существуют шлюзы, без какого-либо дополнительного кода в клиенте и без необходимости клиенту иметь прямой доступ в Интернет.
Реализация шлюзов зависит от конкретного XMPP-сервера и подвержена нестабильности из-за закрытости коммерческих IM-сервисов.
[править] Программное обеспечение
[править] XMPP-серверы
- DJabberd — высокоскоростной расширяемый каркас для создания XMPP-серверов, разработанный компанией Danga Interactive. Применяется для общения пользователей ЖЖ.
- ejabberd — свободный распределённый и отказоустойчивый XMPP-сервер, написанный на Erlang. Работает на крупнейшем российском XMPP-сервере jabber.ru.
- jabberd14 (англ.)
- CommuniGate Pro
- iChat Server (англ.)
- Openfire (ранее Wildfire, ещё ранее Jive Messenger) — свободный многофункциональный и отказоустойчивый XMPP-сервер, написанный на Java. Занимал первое место в рейтинге по возможностям на jabber.org (по состоянию рейтинга на конец марта 2007 года)[30]
- Prosody
- Tigase (англ.)
[править] Библиотеки
[править] Русскоязычные игры через XMPP
- «Камень судьбы» — текстовая RPG, jid: sof@jabbergames.ru Сайт игры «Камень судьбы»
- «Остров отчаянных» — текстовая RPG, jid: ds_game_beta@jabber.org Об игре «Остров отчаянных»
- Движок многопользовательских игр через XMPP «Game Runes»
- «Мафия» — ролевая игра, jid: mafiozo@worldskynet.net «Мафия»
[править] См. также
[править] Примечания
- ↑ 1 2 Jabber Inc. — About Us
- ↑ жабер, жаббер, жабёр, жаба
- ↑ History of XMPP
- ↑ Open Real Time Messaging System
- ↑ Запись в блоге Питера Сен-Андре
- ↑ Jabber Software Foundation Renamed to XMPP Standards Foundation
- ↑ Gary Burd. XMPP Federation (17 января 2006). Архивировано из первоисточника 21 августа 2011. Проверено 30 ноября 2007.
- ↑ XMPP RFCs
- ↑ Can I use Jabber when I’m behind a firewall? JabberLive!, 9 марта 2007
- ↑ Jabber available behind a firewall or proxy. Free
- ↑ Psi
- ↑ Kopete OTR plugin
- ↑ Miranda GnuPG Plugin
- ↑ Standards-JIG] Distribution of stanza types
- ↑ Standards-JIG] proto-JEP: Smart Presence Distribution
- ↑ XEP-0138: Stream Compression
- ↑ Transport Layer Security Protocol Compression Methods
- ↑ Standards-JIG] MUC traffic issues
- ↑ Neutron (Jabber bot)
- ↑ fatal-dev
- ↑ Snapi XMPP bot
- ↑ BlackSmith XMPP bot
- ↑ BlackSmith mark.2 (New XMPP bot)
- ↑ Taho на GoogleCode
- ↑ simpleApps
- ↑ Disabler Production Labaratory
- ↑ Крупнейший XMPP сервер в России
- ↑ Python Style Guide
- ↑ a7x-im (Erl bot developers)
- ↑ XMPP Software: Servers. XMPP Standards Foundation. Архивировано из первоисточника 21 августа 2011. Проверено 12 февраля 2009.
[править] Ссылки
| XMPP на Викискладе? |
- XMPP Standards Foundation (англ.)
- Частичный перевод RFC 3920 XMPP Core на русский
- Перевод RFC 3921 на русский язык
- Национальный российский jabber-сервер
- Вики-система по теме Jabber
- Вики-система по миграции с ICQ на Jabber
- Перенос ростера (контакт листа) jabber с одного сервера на другой.
|
|
|
|---|---|
| Официальные | aaa: • aaas: • acap: • cap: • cid: • crid: • data: • dav: • dict: • dns: • fax: • file: • ftp: • go: • gopher: • h323: • http: • https: • im: • imap: • ldap: • mailto: • mid: • news: • nfs: • nntp: • pop: • pres: • rtsp: • sip: • sips: • snmp: • tel: • telnet: • urn: • wais: • xmpp: |
| Неофициальные | about: • aim: • bolo: • btc: • bzr: • callto: • chrome: • cvs: • daap: • ed2k: • ed2kftp: • feed: • fish: • git: • gizmoproject: • iax2: • irc: • ircs: • lastfm: • ldaps: • magnet: • mms: • msnim: • psyc: • rsync: • secondlife: • skype: • ssh: • svn: • sftp: • smb: • sms: • soldat: • steam: • unreal: • ut2004: • view-source: • vzochat: • webcal: • xfire: • ymsgr: |
| Основные протоколы TCP/IP по уровням модели OSI | |||||||
|---|---|---|---|---|---|---|---|
| Прикладной |
BGP • HTTP • HTTPS • DHCP • IRC • SNMP • DNS • DNSSEC • NNTP • XMPP • SIP • BitTorrent • IPP • NTP • SNTP
|
||||||
| Представления | XDR • SSL | ||||||
| Сеансовый | ADSP • H.245 • iSNS • NetBIOS • PAP • RPC • L2TP • PPTP • RTCP • SMPP • SCP • SSH • ZIP • SDP | ||||||
| Транспортный | TCP • UDP • SCTP • DCCP • RUDP • RTP | ||||||
| Сетевой | IPv4 • IPv6 • IPsec • ICMP • IGMP • ARP • RARP • RIP2 • OSPF | ||||||
| Канальный | Ethernet • PPPoE • PPP • L2F • 802.11 Wi-Fi • 802.16 WiMax • Token ring • ARCNET • FDDI • HDLC • SLIP • ATM • DTM • X.25 • Frame relay • SMDS • STP | ||||||
| Физический | Ethernet • RS-232 • EIA-422 • RS-449 • RS-485 | ||||||
| Список портов TCP и UDP | |||||||