Instant Messaging
на пути от электронной почты к видеоконференциям.
Обзор основных протоколов и клиентов

Сегодня большинство пользователей Интернета настолько привыкли к таким вещам,  как электронная почта, веб-пейджеры, видеоконференции, и так далее, что мало кто из активно использующих веб-пейджеры сегодня сможет вспомнить время, когда их, в смысле веб-пейджеров, еще не было в природе, как, впрочем, и видеоконференций. А ведь было это всего лишь пятнадцать лет назад, но, учитывая суровые реалии развития Интернета в нашей стране, самая активная на сегодня часть его пользователей, да и автор этого материала, еще спокойно учились в начальной школе и лишь краем уха слышали о существовании Всемирной паутины. Среди постсоветских сетевиков, использующих dial-up подключение, тогда актуально было общение в fido. Самые продвинутые знали, что такое IRC. И это были, пожалуй, все возможности для on-line общения в то время, не считая форумов и довольно страшных в плане интерфейса чатов. Время шло, но многие так и прообщались в fido года этак до 2003-го, пропустив знаковое событие, произошедшее в ноябре 1996 года, которое во многом изменило представление общественности об удобстве общения в Интернете – израильская компания Mirabilis, основанная четырьмя молодыми программистами, выпускает в свет ICQ. Продукт стал настолько популярным, что уже в мае следующего года количество пользователей ICQ перевалило за миллион, а в 1998 году Mirabilis отрапортовала – каждые 23 дня ICQ приобретает миллион новых пользователей. Естественно, столь успешным детищем не могли не заинтересоваться крупные компании, и в итоге в июне 1998 года все права на ICQ были проданы за смешную на сегодняшний день сумму в 407 миллионов долларов крупнейшему американскому провайдеру America Online. Некоторые считали большим недостатком ICQ закрытость протокола OSCAR, на котором основывалась работа аськи (надеемся, что сленговое обозначение ICQ всем понятно), поэтому во все том же 1998 году Джереми Миллер приступил к разработке открытого протокола, результатом которой стал Jabber – протокол, составляющий на сегодня сильную конкуренцию и даже местами вытесняя протокол OSCAR. В гонку протоколов включились и другие программисты, результатом чего стало множество созданных протоколов и клиентов для них. Некоторые из этих протоколов сегодня живы, некоторые уже нет, а иные даже получили весьма широкое распространение в отдельных странах.  

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

Протоколы IM 

Рассмотрение протоколов мы начнем, конечно же, с OSCAR. Именно этот протокол лежит в основе работы популярного мессенджера ICQ.  

OSCAR 

OSCAR – это, как вы, наверное, догадались, аббревиатура Open System for CommunicAtion in Realtime, что можно перевести, как "Открытая система для взаимодействия в реальном времени". Стоит заметить, что ICQ изначально основывалась не на протоколе OSCAR – она работала на основе протокола UDP, который был не очень надежным. Но к моменту покупки ICQ у America Online (AOL) была своя программа обмена мгновенными сообщениями - AOL Instant Messenger, работа которого основывалась на протоколе TCP. Но так как AOL требовался унифицированный протокол, родился OSCAR, за основу которого был взят TCP. Однако не все так просто – передача файлов в этом протоколе реализована посредством UDP.  

Хватит истории – взглянем все же на особенности работы протокола OSCAR. Ключевым здесь является то, что для идентификации пользователей используются специальные личные номера - UIN'ы, что даже удобнее, чем использовать привязку к какому-то персональному имени пользователя – юзер волен выбрать себе любое имя, хоть Вася, пускай их уже и десятки тысяч. А как вяжутся UIN'ы с протоколом TCP, спросите вы, ведь этот протокол работает с IP-адресами. Все верно, для этого клиенту приходится подключаться к центральному серверу, который и запоминает его IP. Также сервер хранит информацию о вашем статусе пользователя, и после запросов других пользователей им передается ваш IP-адрес и статус, после чего общение ведется напрямую, минуя сервер. Если же миновать сервер не получается, то есть пользователь на другом конце провода по каким-то причинам оказывается недоступен, ваше сообщение отправляется на сервер, который и передает его вашему собеседнику после его подключения. 

Instant

Ключевыми понятиями ICQ являются статус и список контактов. Статус фактически являет ваше состояние в текущий момент времени и передает его всем пользователям, UIN'ы которых содержатся в вашем списке контактов. Аналогично вам передается статус пользователей, в списках контактов которых содержится ваш идентификационный номер.  

Несколько углубимся в то, как реализована передача данных в протоколе OSCAR. Вся информация, которой обмениваются клиент и сервер, упаковывается в так называемые FLAP-пакеты. Каждый из них имеет обязательные поля: Command Start, Channel ID, Sequence Number, Data Length и Data. Command Start имеет длину один байт - это заголовок пакета. Channel ID - идентификатор канала, который обозначает разные виды каналов, к которым может относиться пакет, будь то канал соединения или канал данных и т.д. Чаще всего это именно канал данных. Длина этого поля также один байт. Sequence Number - это анахронизм, оставшийся от UDP, когда порядковый номер пакета с каждым следующим посланным пакетом увеличивался на единицу для обеспечения целостности передаваемых данных, что сегодня делает за нас TCP. Data Length - длина поля данных. Data – это просто передаваемые данные, длина произвольная, но ограниченная двумя байтами.  

Процесс работы с ICQ начинается с коннекта к серверу login.icq.com через порт 5190. Сервер принимает UIN и пароль, передавая FLAP-пакет со значением Data, равным единице.  

В ICQ используется формат записи данных TLV. TLV является аббревиатурой от Type, Length, Value. В TLV упаковываются почти все данные, включая сами сообщения, однако напрямую эти пакеты используются редко. Обычно они упакованы в еще один вид пакетов - SNAC. SNAC-пакеты используются исключительно в канале данных. Внутри этого пакета есть следующие поля: FamilyID (тип Word) – идентификатор типа данных, SubTypeID (Word) - идентификатор подтипа, Flags[0] и Flags[1] (byte) - служебные флаги, RequestID (dword) - идентификатор запроса и SNACData (произвольная длина) - сами данные.  

Следовательно, SNAC-пакет записывается в поле Data FLAP-пакета, а FLV-пакет – в поле Data SNAC-пакета. 

Как видим, структуру данных, передаваемых по протоколу OSCAR, особо простой не назовешь. А если начать углубляться дальше, окажется, что все еще сложнее: каждой возможной комбинации FamilyID и SubTypeID для SNAC-пакетов соответствуют разнообразные вложенные FLV-пакеты, которые могут быть разными даже для одинаковых SNAC'ов. Поэтому, пожалуй, прекратим углубляться в дебри протокола OSCAR, т.к. дальнейшее рассмотрение будет интересно, наверное, лишь программистам, желающим написать собственный клиент – большинство пользователей, скорее всего, уже успело запутаться и в приведенной информации. 

До 2008 года протокол OSCAR оставался открытым, и лишь в марте текущего года AOL  в рамках проекта Open AIM 2.0 открыла его полные спецификации, но с условием: Open AIM можно использовать для построения клиентских приложений только при соблюдении любых двух условий из списка:  

Думается, что мало кто из разработчиков стороннего софта, использующего протокол OSCAR, возьмется за выполнение этих условий. 

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

Jabber 

История этого протокола, как мы уже писали выше, началась в 1998 году с разработки Джереми Миллером сервера Jabberd. Вскоре к проекту присоединились еще несколько разработчиков, которые стали работать над сервером Jabberd, клиентами Jabber для Windows и GNU/Linux, а также шлюзами в основные системы IM (AIM, ICQ, MSN, и Yahoo). Позже, в 1999 году, у разработчиков появились спонсоры, что ускорило процесс создания проекта. В то время появилась основа протокола Jabber, а также сервер Jabberd и ранние клиенты, такие, как WinJab, который получил развитие в Exodus, и Gabber. Этот ранний период постоянных изменений закончился в мае 2000-го с выпуском Jabberd 1.0.

Instant

С тех пор протокол Jabber продолжает развиваться (с августа 2001-го под контролем Jabber Software Foundation). Например, в 2003 году было, по крайней мере, четыре реализации сервера, несколько библиотек для немалого количества языков программирования, клиенты Jabber для многих платформ Amiga до Microsoft Windows

Как же работает Jabber, название которого переводится, как болтовня?  Jabber основан на протоколе XMPP, в основе которого лежит язык XML. У него имеется поддержка шлюзов в другие IM-сети, однако их реализация зависит от конкретного Jabber-сервера и подвержена нестабильности из-за закрытости коммерческих IM-сервисов. Семейство протоколов Jabber принято как стандарт RFC. Стандартный порт для Jabber — 5222. Также возможно использовать порт 80 и/или 443, если возникают проблемы с фаерволом. 

Подробно работу протокола иллюстрирует следующий рисунок: 

Instant

Адресация в Jabber происходит следующим образом: каждый пользователь имеет уникальный идентификатор, адрес — Jabber ID (JID). Во избежание необходимости существования сервера с полным списком всех адресов, JID, подобно адресу электронной почты, содержит имя пользователя и DNS-адрес сервера, на котором зарегистрирован пользователь, разделенные знаком "@". Например, пользователь Andrey, зарегистрированный на сервере techlabs.by, будет иметь следующий адрес (JID): Andrey@techlabs.by

Пользователь также может подключаться, находясь в разных местах - сервер позволяет определять дополнительное значение, называемое ресурсом, которое идентифицирует клиента пользователя в данный момент. Так можно включить в адрес пользователя (JID) имя его ресурса, добавив через слэш в конце адреса. К примеру, пусть полный адрес пользователя будет Andrey@techlabs.by/office, тогда сообщения, посланные на адрес Andrey@techlabs.by, дойдут на указанный адрес вне зависимости от имени ресурса, но сообщения для Andrey@techlabs.by/office дойдут на указанный адрес только при соответствующем подключенном ресурсе ("/office" в терминологии Jabber и именуется ресурсом). Проще говоря, если автор данного текста оставляет Jabber-клиента включенным дома и, приезжая в офис, включает рабочую машину, которая в сети идентифицируется, как Andrey@techlabs.by/office, то все сообщения придут на машину, приоритет которой выше. В целом весьма грамотная реализация.

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

Стоит, наверное, указать преимущества, которыми, по мнению большинства, обладает Jabber перед коммерческими системами IM:

Таким образом, в этом протоколе наблюдается некоторое сходство с IRC, не находите? В плюсы Jabber можно отнести и отсутствие проблем с кодировками, так как в нем реализована полноценная поддержка Unicode, а также отсутствие лимита на размер передаваемого сообщения – вам гарантируется, что сообщение размером до 64 килобайт будет передано, но реальный максимум размера сообщения неизвестен. Есть и несколько минусов, таких как отсутствие поиска юзеров ввиду децентрализованности сети и в связи с этим же проблемы с восстановлением забытых паролей. Но вы поймете, что это мелочи, если внимательно прочитаете лицензионное соглашение о подключении к ICQ. Там вы найдете строки следующего содержания (дословно): "При отправке или рассылке документов, информации или иных материалов ("Материалы") в ICQ или при направлении информации, вводимой в различные указатели и инструментарии ICQ, и любых сообщений на доске сообщений ICQ вы (1) гарантируете, что не обладаете никакими правами в отношении Материалов, и на основании имеющейся у вас информации никакая сторона не имеет никаких прав на эти Материалы; (2) предоставляете ICQ неограниченное, бессрочное, неотзывное разрешение использовать, воспроизводить, демонстрировать, исполнять, адаптировать, изменять, передавать и распределять Материалы с использованием всех средств аудиовизуальной информации; и (3) соглашаетесь, что ICQ свободна в использовании любых идей, ноу-хау, концепций, методов или иных материалов, которые отправлены вами в связи с любой целью." Более того, ICQ снимает с себя всякую ответственность за то, что передаваемые данные могут быть каким-то образом украдены или просмотрены другими пользователями. Не самый приятный факт, согласитесь. Jabber лишен данного ограничения.

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

"Экзотические" и не очень протоколы 

Начнем с не очень "экзотических" протоколов. Первым приходит на ум IRC, появившийся на свет в далеком уже 1988 году, на десять лет раньше вышерассмотренного Jabber'a. IRC расшифровывается как Internet Relay Chat – ретранслируемый Интернет-чат. И создал его, как это часто бывает, студент, финн Ярко Ойкариненом (Jarkko Oikarinen). 

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

В целом IRC весьма удобное средство общения, но основным минусом здесь является то, что сеть состоит из нескольких серверов, связь между которыми зачастую весьма нестабильна, в итоге иногда просто отсутствует возможность связаться с пользователем, "сидящем" на другом сервере.  

Существует еще несколько протоколов обмена быстрыми сообщениями. Один из них SIP, быстрые сообщения в котором скорее "побочный эффект", т.к. протокол используется для обмена мультимедиасообщениями. В его основе так же, как и в основе OSCAR, лежат протоколы TCP и UDP

В природе существуют тоже протоколы, которые получили популярность в отдельных странах, например, QQ  в Китае или Gadu-Gadu в Польше. Sametime – протокол, используемый системой IBM Lotus Sametime. Многие крупные Интернет-проекты, такие как Yahoo! также имеют в своем арсенале собственные мессенджеры и протоколы, однако большинство из них используют наработки, взятые из других общераспространенных протоколов. 

На этом мы закончим рассмотрение протоколов IM и перейдем к программному обеспечению для работы с ними – IM-месенджерам. 

ICQ 6 

Запуск ICQ 6 напоминает о временах, когда понятие веб-пейджера тесно ассоциировалось именно с ICQ, и мы не утруждали себя поиском альтернативных клиентов. Сколько ностальгии вызывает один фирменный ярлык в виде цветка на рабочем столе! Официальное происхождение программы, созданной разработчиками протокола OSCAR, гарантирует вам отсутствие проблем с совместимостью, поскольку AOL время от времени изменяет версии протокола, дабы затруднить его использование разработчикам сторонних клиентов. Возможно, что после открытия протокола в марте текущего года AOL и перестанет строить козни разработчикам альтернативного ПО, но мы в этом несколько сомневаемся, поскольку не думаем, что все они пойдут на выполнение поставленных условий, о которых мы писали выше.  

Вернемся к ICQ 6. Программа предназначена для обмена сообщений посредством использования протокола OSCAR. Никакие другие протоколы не поддерживаются. Внешне программа смотрится довольно просто и приятно. Использование зелено-синих оттенков в оформлении радует глаз. В целом оформление стало куда приятнее, чем у предыдущей версии, основные окна программы не выглядят сильно нагроможденными.  

Instant

Помимо возможности обмена мгновенными сообщениями, ICQ 6 предлагает нам возможность отправки SMS, которая в нашей стране не функционирует, а также возможности голосового и видеочата, которые нам также не удалось активировать.  

Приятно, что при общении с несколькими людьми не открывается на каждого отдельное окно – наконец-то, разработчики вспомнили о возможности делать вкладки в одном общем окне. Во время использования программы постоянно отображаются немалых размеров рекламные баннеры, "кушая" дополнительный трафик. 

Instant

Звуковая схема, примененная в ICQ 6, значительно отличается от предыдущей версии. Звуки стали более нейтральными, не так явно обращающими на себя внимание. Классно смотрится и набор анимированных смайлов – они большие и хорошо передают эмоции. 

В целом можно констатировать, что ICQ 6 нас приятно порадовала, чего мы не могли сказать о предыдущих версиях программы, напичканных всяческими не особо полезными бонусами в виде игр и т.п. 

QIP 2005 

Сборок этого клиента, созданного российскими разработчиками, существует множество, последняя на данный момент 8060 (не считая бета-версии Infium). QIP 2005 – довольно распространенный альтернативный клиент, также использующий протокол OSCAR. Своей популярности он обязан множеством настроек, позволяющих персонализировать внешний вид программы, и тем, что в использовании он довольно прост. Здесь нет ничего лишнего вроде возможностей отправить SMS или совершить телефонный звонок, которые все равно на наших просторах не функционируют.  

Зато при использовании QIP вы получаете возможность воспользоваться дополнительными статусами, использовать широкий набор графических смайлов, которые вы можете даже добавлять сами, если руки на месте. Но для полноценного использования всех смайлов на другом конце провода у человека, с которым вы общаетесь, должен быть установлен QIP с точно таким же набором рожиц. Грамотно реализована функция приватности – вы можете выставить режим невидимости как для всех, так и только для тех, кто не находится в вашем списке контактов, а также несколько других вариантов. Неплохо реализована и защита от спама и флуда. Интересна также возможность удаления себя из контакт-листа любого пользователя. 

Instant

Внешний вид программы изначально довольно скромный, однако стоит установить нравящуюся вам оболочку, и все коренным образом меняется. На скриншотах вы можете видеть внешний вид QIP 2005, который использует автор этого материала.

Instant

Изначальная звуковая схема не поражает чем-то особенным – стандартные звуки старых версий ICQ, однако она также легко изменяется.  

Приятно, что во время работы QIP не показывает нам никакой рекламы, не потребляя тем самым лишний трафик.  

Этот клиент нам нравится своей простотой и гибкостью настройки, а также возможностями персонализации внешнего вида. 

Miranda 0.6 

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

Instant

Miranda дает возможность работать не только с протоколом OSCAR, но и со многими другими, в частности с Jabber и IRC. В основном окне программы находится минимальный набор компонентов, как и в окне сообщений. В меню Options в разделе Network производится ввод учетных записей для каждого из протоколов, для которых можно создать по одной учетной записи. В целом настройки довольно просты и понятны. 

Instant

Miranda имеет полную поддержку Unicode, что лишает проблем с использованием кириллических шрифтов. Да и, в общем-то, протокол Jabber в целом лишен этой проблемы.  

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

В целом Miranda – это клиент для тех, кто не желает ограничивать себя тем функционалом, который изначально предлагают разработчики, и желает иметь полностью настроенный "под себя" клиент.

Pidgin 2.4 

Pidgin, именуемый ранее Gaim, – это кросс-платформенный клиент рабочей среды GNOME, который прекрасно работает и в Windows. Он поддерживает многие протоколы, как распространенные OSCAR, Jabber или IRC и при этом не перегружен лишним функционалом, коим явно перегружена ICQ. 

Выглядит главное окно программы весьма интересно – его элементы довольно большие, что некоторые ставят в минус клиенту. В этом окне отображается много информации о пользователе – его статус, время бездействия, аватар.  На наш взгляд, выглядит главное окно скромно, но со вкусом.  

Instant

Программа полностью справляется с кириллическими шрифтами даже при обмене сообщениями через протокол ICQ.  

Сообщения от новых собеседников появляются на новых вкладках окна диалога, что позволяет не загромождать панель задач множеством открытых окон. Интересным выглядит набор смайлов, которые имеют довольно крупный размер и неплохо прорисованы. В целом оформление пускай и простое, но довольно приятное. Радуют слух и довольно мягкая звуковая схема.

Instant

До недавних пор в Pidgin не было настроек приватности – сейчас они есть, реализованы практически так же, как и в QIP 2005. Плюс ко всему присутствует возможность ICQ-чата, а также возможность назначить каждому пользователю из списка контактов персональный аватар. 

Pidgin 2.4 понравился нам в первую очередь своим аккуратным оформлением и простотой в использовании.  

R&Q 

R&Q – это еще один IM-клиент, использующий протокол ICQ. Своим внешним видом главное окно сильно напоминает окно QIP и старых версий ICQ. Да и своим функционалом этот клиент во многом похож на QIP. Похожие настройки невидимости, возможность удаления себя из контакт-листов пользователей, дополнительные статусы. В правой части главного окна видно, каким клиентом пользуется юзер из списка контактов.  

Instant

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

Большим минусом можно назвать то, что R&Q не позволяет хранить список контактов на сервере – его можно лишь импортировать оттуда.  

Окно чата выглядит довольно просто, при написании вам сообщений новым собеседником оно появляется в отдельной вкладке. Там же можно видеть аватар собеседника. Интересным плюсом является возможность цитировать последнее сообщение. 

Instant

Звуковая схема не особо приятна, возникает желание ее ощутить. 

В целом программа выглядит довольно просто, да и обладает весьма скромным функционалом, хотя большего зачастую и не нужно. Зато отсутствует реклама, и программа "кушает" совсем мало ресурсов. 

Trillian 

Trillian – один из самых красивых и мощных инструментов обмена мгновенными сообщениями. Поддерживаются протоколы ICQ и IRC, а также Jabber, который активируется в настройках. 

Instant

Несомненным плюсом этого клиента является возможность активировать сразу несколько пользователей, что является огромным плюсом, например, в семье, где несколько человек работают одновременно за одним компьютером. 

Присутствует возможность проведения видеоконференций. Естественно, для этого понадобится веб-камера.  

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

Instant

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

С русскими кодировками Trillian справляется хорошо, по крайней мере, за время использования никаких проблем с ними не наблюдалось.  

Звуковая схема настолько шикарна и приятна слуху, что это просто не передать словами. Это вкупе с великолепным оформлением делает Trillian одним из самых удобных и уж точно самым красивым клиентом для обмена мгновенными сообщениями. Ни о какой рекламе в окнах программы, естественно, нет и речи. 

Trillian нам понравился. Это очень красивое и удобное средство обмена сообщениями, в котором к тому же отлично реализован IRC-чат. 

Заключение 

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