Мир твоих увлечений · статьи сайта

Почему XMPP?

Часть 1. Приоритет.

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

Однако, прежде, чем я начну, я отвечу на вопрос - а почему "XMPP", а не "Jabber"? Ну, вообще-то, два этих термина равнозначны и я совсем не против использования одного термина вместо другого до тех пор, пока они используются правильно. Но, все-таки, есть небольшая разница. XMPP - это основной протокол Jabber, обертка, если позволите, которая используется Google Talk, Jabber.org и другими Jabber-серверами. Jabber же - термин, использующийся в отношении чего-то большего, нежели протокол. Jabber - компания, сервер-демон и приложение с открытым исходным кодом. XMPP - просто движок. Таким образом, здесь и далее, я буду говорить и об XMPP, и о Jabber, используя термин 'Jabber'.

С термином разобрались, давайте теперь обсудим основную, на мой взгляд, вкусность Jabber - приоритет. Представим себе следующее: допустим, из IM-сетей вы используете исключительно ICQ. Залогинившись дома, вы можете общаться с друзьями и родными с помощью ICQ. Однако, вы оставляете домашний компьютер и ICQ на нем включенными, уходя на работу, а придя на работу, вы снова логинитесь в сеть ICQ. Что происходит? Правильно, ваш домашний ICQ отключается, а вы входите в сеть с работы. (Прим. пере.: А ведь еще может и зациклиться логин дома и на работе, и вы вообще конкретно обломаетесь с выходом в сеть с работы - на полчаса забанят, дабы не доканывали вы сервер АОЛа священный логинами своими нечистивыми.) Иначе говоря, вы можете выходить в сеть под одним аккаунтом только с одного клиента в одно и то же время. Так же обстоит ситуация и с другими проприетарными протоколами: например, MSN, AIM или Yahoo!.

Теперь вы уходите с работы. Вы выключаете компьютер и отправляетесь домой. Из-за того, что вы вне сети дома, а компьютер на работе уже выключен, ваш аккаунт находится вне сети. И что же случается, если в это время кто-то из вашего контакт-листа хочет связаться с вами? Конечно, есть множество других способов: сотовый телефон или электронная почта, например. Однако, зачем же быть столь ограниченным из-за своих клиента и IM-сети? Если я хочу присутствовать в сети 24 часа в сутки, 7 дней в неделю, независимо от моего местонахождения, у меня вряд ли это получится с ICQ или другим проприетарным протоколом. По крайней мере, это будет очень непросто. К счастью, с Jabber все намного проще.

Во-первых, Jabber поддерживает несколько соединений с сервером, независимо от местонахождения и клиента. Это означает, что вы можете быть в сети одновременно и дома, и на работе, при этом оба соединения будут постоянно работать. И независимо от того, отключились ли вы на работе или нет, вы всегда будете подключены с домашнего компьютера (если конечно не случится конец света или провод не оборвется). Удобно, не правда ли? Вы можете быть подключены к сети из дома, школы, с работы, у друзей или где-нибудь еще.

Тут же возникает вопрос. Допустим, вы подключились дважды из дома: с настольного компьютера и лаптопа, при этом ваш компьютер на работе тоже подключен к Jabber-сети. Таким образом, вы подключены сразу с 3 клиентов. Теперь, ваш друг хочет прислать вам сообщение. На какой клиент оно поступит? К счастью, Jabber не упускает из виду и этот момент. При каждом подключении вы устанавливаете значение приоритета. Клиент с самым высоким приоритетом и получит это сообщение. На нижеприведенном графике (позаимствованном у O'Relly) приведена схема подобной ситуации.

[картинка не сохранилась]

Таким образом, если приоритет подключения вашего лаптопа - 5, настольного компьютера - 15, а на работе - 8, то сообщение поступит на настольный домашний компьютер, так как у него самый высокий приоритет. Все просто. Где бы вы ни были, вы можете быть уверены, что сообщение поступит именно на тот клиент, доступ к которому вы имеете в данный момент времени: вы выставляете наиболее высокий приоритет и получаете новые сообщения без каких бы то ни было проблем независимо от числа подключенных к вашему аккаунту клиентов. Наибольший приоритет - 127, наименьший - 0.

Я думаю, теперь все поняли, что первая причина, по которой стоит переходить на Jabber - это наличие приоритетов и возможность множественного подключения. Можете ли вы получить нечто подобное от других IM-провайдеров? Сомневаюсь. Я, например, постоянно подключен с помощью centericq в screen на моем сервере. Приоритет равен 5, а статус постоянно away. Я им пользуюсь, когда я не нахожусь дома или на работе. И если кто-то хочет отправить мне сообщения, я постоянно доступен и могу получить сообщение в любой момент, подключившись к серверу по SSH. Дома и на работе я использую Gajim, с высоким приоритетом, чтобы всегда получать сообщения там, где я нахожусь (дома установлен приоритет 10, на работе - 15 на случай, если забуду отключиться дома).

© Aaron Toponce, 'Why XMPP Part 1- It's All About Priority', немного вольный перевод: vonderer.

PS. После того, как этот пост появился на моей странице на beta.ya.ru, мне в комментариях deadcat указал на следующее:

"согласно RFC 3921, минимальное значение приориетета: -128 (минус 128).

http://tools.ietf.org/html/rfc3921

2.2.2.3. Priority

The OPTIONAL element contains non-human-readable XML character data that specifies the priority level of the resource. The value MUST be an integer between -128 and +127."

То есть, приоритетов может быть не 128, а вдвое больше. Единственная неувязка заключается здесь в том, что далеко не всякий клиент поддерживает отрицательные значения приоритета. Например, kopete (а значит, скорее всего и pidgin) не позволяет назначить отрицательное значение, а tkabber совершенно спокойно выставляет отрицательный приоритет.

Часть 2. Сберегая ресурсы.

Я пытаюсь давать своим постам названия поинтереснее. Боюсь, у меня не всегда это получается.

В моем предыдущем посте, посвященном XMPP, я говорил о приоритетах, функции №1, которая интересует меня в Jabber-клиенте. Если я не могу изменить значение приоритета на то, которое мне необходимо, то такой клиент мне неинтересен. Хоть приоритеты рулят и педалят, но они бессмысленны без другой функции Jabber - ресурсов.

Как я уже говорил раньше, спецификации XMPP поддерживают множественное подключение. Однако, когда мы подключаемся к нашему аккаунту больше одного раза, серверу необходим способ различия соединений. Для этих целей и существуют ресурсы. Некоторые провайдеры автоматически выставляют уникальные ресурсы. Однако, хоть это и является удачным решением, мне больше нравится устанавливать ресурс собственноручно. Итак, я хочу изменить ресурс, но почему?

Вне зависимости от клиента процесс прост. При создании нового аккаунта или изменения существующего, в окне обычно есть поле, которое называется "Ресурс". Заполните его таким образом, чтобы значение соответствовало вашим нуждам. Выше я писал, что серверу необходимо различать между собой ваши подключения, поэтому ресурсы должны быть уникальными (прим. пер.: в рамках вашего аккаунта, конечно же - в клиенте у некоего дяди Васи может стоять такой же ресурс как и у вас, и никому это не навредит). Если вы попытаетесь подключить клиент, и у вас это не удастся - проверьте ресурс. Скорее всего, соединение с таким же ресурсом уже установлено.

Большинство клиентов автоматически заполняют это поле. Для Gajim умолчательное значение - 'Gajim', для CenterICQ - 'centericq', для Bitlbee (несложно догадаться) - 'bitlbee'. Я уже писал, что предпочитаю указывать тот ресурс, который подходит ситуации. Посмотрите на приведенный ниже скриншот Gajim:

[картинка не сохранилась]

Как я уже говорил, некоторые сервера устанавливают ваш ресурс сами, не давая вам его изменить, или вам кажется, что ресурс устанавливаете вы, а сервер генерирует случайный набор символов, именуемый хэшем, и добавляет его после вашего ресурса. Например, разработчики Google Talk использовали этот прием для того, чтобы ресурс пользователя был уникальным при каждом подключении независимо от того, какой ресурс задал пользователь. Причина такого решения в том, что пользователь может не разбираться в ресурсах и приоритетах, поэтому он оставит в поле "ресурс" умолчательное значение, заданное клиентом. Однако пользователям, которые знают, что они делают, это может мешать. Например, мне нужна возможность изменять мои ресурс и приоритет так, как я этого хочу, поэтому я не использую Jabber на Gmail.com.

Зачем менять ресурс? В чем "фишка"? Ну, с одной стороны нам нужны уникальные названия для каждого соединения. С другой стороны, использование ресурса может помочь вам в информировании пользователей в вашем ростере (прим. пер. для пользователей ICQ: контакт-лист Jabber'а называется roster) о вашем текущем местоположении, например 'Home', 'Work', 'School', о вашей текущей операционной системе, например 'Mac' или 'Linux', или о сервере, на котором установлен клиент, например 'hercules' или 'athena'. Всегда может возникнуть новый повод обозначить свой ресурс. Почему нужна возможность изменять его? Потому что она у вас есть.

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

Мы только что достигли вершины айсберга. Существует еще много причин перейти на Jabber, чем вы можете предположить, и я собираюсь рассказать обо всех, в надежде, что вы увидите причину перейти на лучший IM протокол в мире.

© Aaron Toponce, 'Why XMPP Part 2- Saving Your Resources', немного вольный перевод: vonderer.

Часть 3. Децентрализация - вот в чем соль.

Если вы следите за моими постами, повествующими, почему же XMPP/Jabber лучше, чем все остальные проприетарные протоколы, вы, скорее всего, уже начали понимать, почему же Jabber - король мгновенных сообщений. Нижеприведенная статья расскажет, почему же корона принадлежит Jabber.

Для начала, я хочу, чтобы вы задумались на минуту: когда вы отправляете электронную почту вашему другу, разве вы можете посылать ее только на почтовый ящик того же провайдера, что и ваш? Иными словами, разве, пользуясь Gmail, вы можете посылать сообщения только другим пользователям Gmail? Конечно нет! Это же глупо. Вы можете посылать e-mail другим людям независимо от того, каким почтовым провайдером они пользуются, будь это Yahoo!, Hotmail или сервер какой-то фирмы, а они могут отвечать и пересылать письма вам. Тогда у меня есть вопрос: почему провайдеры IM-систем заставляют вас общаться только со своими пользователями? Почему пользователи MSN могут отправлять сообщения только пользователям MSN? Почему пользователи Yahoo! могут отправлять сообщения только пользователям Yahoo!? AIM? ICQ? Видите? Проблема в том, что только пользователи MSN могут подключаться к "официальным" серверам MSN. То же самое и с остальными. Коммерческие IM-провайдеры попросту "запирают" пользователей в своих сетях.

Нечестно, не правда ли? У меня есть родственники, у которых есть только MSN-аккаунты, таким образом, они могут общаться только с другими пользователями MSN. Это неудобно, потому что я не собираюсь использовать проприетарные IM-протоколы, таким образом, я не могу общаться с ними, если у них нету аккаунтов Jabber (хотя, у некоторых есть). Однако я могу спокойно отправлять им электронную почту. Система e-mail абсолютно децентрализована, а IM-системы - нет. Jabber решает эту проблему. А значит, мои родственники могут использовать Jabber-аккаунты Gmail, в то время как у меня есть свой домашний сервер и я могу общаться с ними без проблем. По правде говоря, если бы вы могли увидеть мой ростер, вы бы заметили, что большинство моих контактов используют Gmail, хотя есть среди них и пользователи LiveJournal, и пользователи jabber.org, и несколько пользователей собственных домашних серверов. Разве это не прекрасно? Независимо от провайдера Jabber, я могу общаться со всеми.

Волшебство децентрализации заключается в службе, которая называется 'server-to-server'. Когда я регистрирую аккаунт, например на jabber.org, я могу добавлять в свой контакт-лист кого угодно, независимо от провайдера. Во время аутентификации мой провайдер (jabber.org) соединяется с провайдером другого пользователя (использующего например gmail.com) и запрашивает информацию о пользователе. Его IM-провайдер уведомляет его об аутентификации, и, если пользователь соглашается, его провайдер соединяется с моим и сообщает ему, что "все OK", и пользователь добавляется в мой ростер. Задумайтесь. Один сервер общается с другим сервером, даже вне домена. Способен ли MSN на такое? Yahoo!? AIM? ICQ? Естественно, нет.

[картинка не сохранилась]

Я знаю, что подумают об этом те, кто пользуется проприетарными IM-протоколами. Даже при том, что Jabber децентрализован, вы можете получать сообщения только от пользователей Jabber, то есть Jabber, по сути, тоже "закрыт". Вы не можете отправлять сообщения пользователям MSN или ICQ - только другим пользователям Jabber. Да, это так, но это не вина Jabber, скорее наоборот. MSN и ICQ противостоят соединению Jabber с их серверами. Подумайте над этим: у вас есть аккаунт Gmail, и вы отправляете письмо пользователю Hotmail. Возникает окошко, которое говорит вам о том, что вы не являетесь пользователем Hotmail, поэтому вы не можете отправлять почту другим пользователям Hotmail. Представьте себе, как это кощунственно. Система e-mail децентрализована, но Hotmail хочет "запереть" своих пользователей. Примерно такая же игра ведется среди IM. Jabber решил проблему "запирания" пользователей, открыв спецификации и сделав IM децентрализованным, однако другие провайдеры отказались поступить подобным образом. Поэтому, в настоящее время, вы можете отправлять сообщения только другим пользователям Jabber, но мне кажется, с учетом растущей популярности Jabber, что долго такая ситуация не продлится.

Когда я услышал о том, что Jabber децентрализован, я был поражен и заинтересован. Мне казалось, что это откроет путь к развитию IM, и если другие провайдеры не присоединятся, они разделят судьбу Титаника. Оказалось, что не казалось. С момента появления Jabber, если верить Википедии, он стал вторым по популярности после AOL (прим. пер.: однако, в силу децентрализации Jabber, никто никогда не сможет узнать точное количество пользователей Jabber ). На сегодняшний день количество пользователей Jabber оценивается почти в 90 миллионов. То есть, каждый третий IM-аккаунт - аккаунт Jabber. Я думаю, что постепенно все больше и больше пользователей будет как я переходить на Jabber, что в конце концов выкопает могилу его проприетарным аналогам. Было бы прекрасно, если бы существовала абсолютно децентрализованная IM-система, такая же, как e-mail, не правда ли? Я надеюсь, что мои статьи об XMPP (Прим. пер.: и мои переводы этих статей ) убедят вас, дорогие читатели, что XMPP/Jabber - лучший среди аналогов, и вы зарегистрируете собственные Jabber-аккаунты у того провайдера, которого выберете сами.

© Aaron Toponce, 'Why XMPP Part 3- Decentralization Is Key', немного вольный перевод: vonderer.

PS. В комментариях к оригиналу этой статьи фигурирует одна очень интересная ссылка на статью о неудачной попытке создания возможности для пользователей MSN и Yahoo! общаться с пользователями AIM, благополучно задавленной AOL'ом. AOL blocks Microsoft Net messaging от 23 июля далекого 1999 года.

Часть 4. Безопасность и покой.

Одним из самых насущных вопросов для людей, пользующихся проприетарными протоколами, является вопрос безопасности (например, шифрования), а вернее - ее отсутствия. XMPP с этой точки зрения превосходен, и, более того, продолжает развиваться в этом направлении.

Шифрование данных - одна из моих самых любимых тем. Я много раз писал о безопасности и давал много презентаций. Я не считаю себя экспертом, но вполне разбираюсь в этой теме, по крайней мере с тех пор, как в 2001 году создал свой GnuPG ключ. Поскольку шифрование данных является столь важной частью моей повседневной жизни, для меня важно использовать протокол, который поддерживает его нативно. Это еще одна причина тому, чтобы выбрать Jabber. Присмотримся получше и включим воображение.

Для начала, воображение. Представьте, что вы работаете на крупном предприятии. Вы используете icq для связи со своими коллегами и возможно даже клиентами. В течение дня вы спорите с коллегой о том, что он(а) делает, на ваш взгляд, неправильно. У нее к вам тоже есть аналогичные претензии. Постепенно вы приходите в праведный гнев и перестаете стесняться каких бы то ни было выражений. Вы ведь никогда не ладили с ним(с ней), и у него(нее) есть несколько друзей, которые хотят ему(ей) помочь любыми доступными способами. Зная о том, что сообщения icq передаются по сети открытым текстом, вы запускаете Wire Shark и отлавливаете все icq пакеты, наблюдая за его(ее) разговором с друзьями о вас. Да, вы сможете видеть весь текст после очистки TCP дампа.

Я не смирюсь со сниффингом пакетов в копоративной сети. Речь о том, что если вас поймают, то вас уволят (если, конечно, вы не из персонала IT). Но, урок есть урок. Используя доступные инструменты сниффинга пакетов, вы можете заполучить логины, пароли и целые разговоры по протоколам IM, которые не используют шифрования. В их числе MSN, AIM, icq, Yahoo! и большинство других. С моей точки зрения все, что передается без шифрования, есть дыра в безопасности. Итак, используя протоколы, которые не шифруют свой траффик, вы просто сами напрашиваетесь на неприятности.

И тут на сцене появляется Jabber. Когда появился XMPP, SSL был явлением первой важности. Каждый аккаунт Jabber, должен был быть соединен шифрованным потоком. Конечно же, изначально SSL использовался по умолчанию. Теперь, с появлением TLS, Jabber по умолчанию использует TLS. Некоторые сервера Jabber поддерживают и SSL, и TLS для максимальной обратной совместимости. В любом случае, вы можете быть уверены, что траффик между вами и сервером на 100% шифрован. Это означает, что сколько бы времени злоумышленник не пытался отловить пакеты с помощью сниффинга, он не сможет заполучить информацию аккаунта, пароль или содержание разговора.

К сожалению, шифрование производится дважды: на клиенте и на сервере. Это означает, что на компьютере пользователя и на сервере могут открытым текстом храниться логи разговоров. В качестве примера: если вы используете Gmail в качестве аккаунта Jabber, вы можете заглянуть во вкладку "Чаты" в веб-интерфейсе Gmail. По умолчанию, логи всех ваших бесед хранятся в вашем аккаунте Gmail (но при желании их можно отключить). Они хранятся открытым текстом после расшифровки их сервером. Меня, и, к счастью, команду разработчиков XMPP, это беспокоит. Почему мы не можем использовать механизм шифрования "клиент-клиент" вместо "клиент-сервер(-сервер)-клиент"? К счастью, в следующих релизах XMPP планируется поддержка такой функции. В любом случае, по проводам идет шифрованный поток и вы можете не беспокоиться насчет не в меру ретивых сотрудников, пытающихся сниффить ваши пакеты в надежде выведать, что же вы говорите о них друзьям.

Шифрованием данных никого не удивишь. Многие клиенты включают в себя различные плагины сторонних разработчиков, дающие возможность шифрования в режиме "клиент-клиент" вне зависимости от протокола. Я уже когда-то писал об этом, в надежде хотя бы на какое-то подобие стандарта в этой области. Однако, все эти инструменты просто шифруют текст сообщений, оставляя доступным IP в пакете. Представьте себе шифрование целого пакета "от и до", без единого нешифрованного байта. Именно к этой цели и стремятся разработчики XMPP.

Благодаря децентрализации XMPP, установка Jabber в локальной сети - это еще один способ достичь безопасности. Не только шифруя пакеты, но и изолируя их от внешней сети в принципе - о таком уровне безопасности многие даже и не мечтали! Используя проприетарные IM-сети, вы автоматически ставите себя в зависимость от двух вещей: Интернета и IM-провайдера. Установив на предприятии собственный сервер XMPP, вы получаете невероятно удобное положение: вам совсем не нужно подключение к Интернету и надежный внешний IM-провайдер. В этом случае именно вы держите штурвал в своих руках, и мне кажется, что такого уровня безопасности другими методами вам просто не достичь. Зачем рассылать пакеты по всему Интернету, если они все равно вернутся к вам на предприятие?

Надеюсь, что этот плюс в пользу XMPP убедит пользователей других IM-сетей перейти на Jabber и избавиться от своих проприетарных аккаунтов. Безопасность важна всегда, и почему другие сети до сих пор не занялись ею, остается для меня загадкой. Объединив сторонние плагины шифрования и внутреннюю корпоративную сеть, вы сделаете ваш сервер Jabber защищенным от ненужных глаз. Команда разработчиков XMPP занята усовершенствованием безопасности Jabber, поэтому мне кажется, что этот протокол должен стать единственным используемым всеми. Просто вглядитесь в возможности.

© Aaron Toponce, 'Why XMPP Part 4- Security Means Peace Of Mind', немного вольный перевод: vonderer.

PS. К слову сказать, в пользовательском соглашении icq черным по белому (или какими-то другими, но все равно довольно контрастными цветами) явно прописано примерно следующее: "пользователь icq отказывается от всех интеллектуальных прав на материал, переданный с помощью icq". Как люди после такого прямого заявления о том, что все, что они пишут, может быть на совершенно законных основаниях прочитано (а еще более меня раздражает, что об этом говорят напрямую, вероятно исходя из мнения "пользователь==идиот"), соглашаются и начинают этим пользоваться, мне до сих пор не понятно. Единственная причина, как мне кажется, - у нас, в России, никто не читает пользовательских соглашений, только флажки ставят - лишь бы быстрее начать писать.

‹ Подключение к серверу Portal-on.ru через прокси Вверх Путеводитель по IM-клиентам ›

Оригинал: снимок Wayback Machine от 05.05.2016; в архиве есть ещё адресов: 1.

Статичная копия: без входа, поиска, комментариев и скриптов. Ники и тексты авторов — как были; адреса почты скрыты.