XMPP

Поделись знанием:
Перейти к: навигация, поиск

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

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





История

Проект 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]. Однако, в мае 2013 Google объявил о сокращении поддержки межсерверных коммуникаций в связи с продвижением своего сервиса Google Hangouts[8]. Тем не менее, несмотря на официальные завяления, Google Talk всё ещё поддерживает XMPP[9][10].

Протокол

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

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

  • Децентрализация: Архитектура сети 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 внутри протокола[14][15][16].
  • Гибкость: Настраиваемая функциональность может быть надстроена поверх XMPP; для поддержки возможности взаимодействия различных сетей стандартные расширения поддерживаются XMPP Software Foundation. Приложения XMPP в дополнение к функциональности клиента сетевого общения включают в себя администрирование сети, распределение ресурсов, утилиты для совместной работы, обмен файлами, игры и мониторинг удалённых систем.

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

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

Боты

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

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

  • Neutron[22] — англоязычный бот на Python (библиотека «xmpppy»), один из первых xmpp-ботов;
  • FreQ — многофункциональный xmpp-бот, зарекомендовавший себя стабильностью в работеК:Википедия:Статьи без источников (тип: не указан)[источник не указан 3024 дня], написан на Python (библиотека Twisted);
  • Sulci — бот-говорун, какое-то время был крайне популярен в качестве развлечения;
  • Gluxi — многофункциональный бот, написанный на C++;
  • Talisman — русскоязычная модификация бота Neutron, примечателен наличием множества модификаций и является наиболее популярным[23] ботом в русскоязычных Jabber-конференциях;
  • EndLess — модификация бота Talisman. Примечателен тем, что он стал первым ботом, использующим более одного JID’а. По заявлениям разработчика бот является обладателем своеобразного рекорда: одна копия длительное время обслуживала ~500 конференций. Исходного кода бота нет в свободном доступе;
  • Fatal [Neutrino][24] — модификация бота Talisman/Neutron со слегка измененной библиотекой «xmpppy». В последних версиях полностью переписан и практически не имеет ничего общего со своими предками. Для обеспечения наибольшего быстродействия его код распространяется в скомпилированном виде, что, однако, не противоречит GNU GPL v2. Примечателен высокой надёжностью и отказоустойчивостью. Локализации EN и RU.
  • Snapi[25] — изначально являлся модификацией бота Talisman, но позже его «перерос». Можно охарактеризовать, как «Talisman с корректным кодом». Примечателен тем, что базируется на полностью переписанной библиотеке «xmpppy»;
  • BlackSmith mark.1[26] — активно развивающийся бот, написанный на Python. Примечателен широкой функциональностью, высокой стабильностью и устойчивостью к различным проявлениям флуда. Имеет свою систему плагинов а также частично совместим с ботом Talisman посредством специального модуля. Является open-source проектом и распространяется по лиценции Apache 2;
  • BlackSmith mark.2[27] — имеет мало чего общего с предыдущим ботом, не считая названия. Написан на Python и использует слегка модифицированную библиотеку «xmpppy». Примечателен поддержкой нескольких JID’ов, высокой стабильностью и наличием трёх языковых пакетов (EN, RU, FI). Большая часть архитектурно независимых функций портировано на mark.1;
  • Taho[28] — бот для конференций, написанный на Tcl.
  • Pako[29] — бот, распространённый в англоязычной части Jabber-сети. Написан на C#;
  • Isida[30] — многофункциональный и многоязычный бот, написан на Python (библиотека «xmpppy»). Примечателен тем, что это единственный бот, который в полной мере использует muc-filter[31], а также тем, что его код противоречит большинству пунктов Python Style Guide[32];
  • Erl[33] — бот, написанный на 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 систем являются транспорты, или шлюзы, позволяющие пользователям получать доступ к сетям, использующим другие протоколы. Это могут быть другие протоколы мгновенного обмена сообщениями, IRC или такие протоколы, как SMS и электронная почта.

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

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

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

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

XMPP-серверы

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

См. также

Напишите отзыв о статье "XMPP"

Примечания

  1. 1 2 [www.jabber.com/CE/AboutUs Jabber Inc. — About Us]
  2. [developers.facebook.com/docs/chat Facebook Developers: Chat API]
  3. [xmpp.org/about/history.shtml History of XMPP]
  4. [tech.slashdot.org/article.pl?sid=99/01/04/1621211 Open Real Time Messaging System]
  5. [stpeter.im/index.php/2010/01/04/another-birthday/ Запись в блоге Питера Сен-Андре]
  6. [xmpp.org/xsf/press/2007-01-16.shtml Jabber Software Foundation Renamed to XMPP Standards Foundation]
  7. Gary Burd. [googletalk.blogspot.com/2006/01/xmpp-federation.html XMPP Federation] (17 января 2006). Проверено 30 ноября 2007. [www.webcitation.org/616XUEY2V Архивировано из первоисточника 21 августа 2011].
  8. Sean Gallagher. [arstechnica.com/information-technology/2013/05/hands-on-with-hangouts-googles-new-text-and-video-chat-architecture/ Google will not allow server-to-server connections] (17 мая 2013). Проверено 20 мая 2013. [www.webcitation.org/6GksheV7V Архивировано из первоисточника 20 мая 2013].
  9. [developers.google.com/talk/open_communications?hl=ru#what Google FAQ: Open Communications ]
  10. [xmpp.org/2015/03/no-its-not-the-end-of-xmpp-for-google-talk/ The XMPP Blog: No, it's not the end of XMPP for Google Talk]
  11. [xmpp.org/rfcs/ XMPP RFCs]
  12. [jabberlive.org/index.php?option=com_content&task=view&id=24&Itemid=25 Can I use Jabber when I’m behind a firewall?] JabberLive!, 9 марта 2007
  13. [www.jabber80.com Jabber available behind a firewall or proxy. Free]
  14. [psi-im.org/features/ Psi]
  15. [docs.kde.org/development/en/kdenetwork/kopete/plugins.html#plugins-otr Kopete OTR plugin]
  16. [addons.miranda-im.org/details.php?action=viewfile&id=3485 Miranda GnuPG Plugin]
  17. [mail.jabber.org/pipermail/standards/2006-May/011158.html Standards-JIG] Distribution of stanza types]
  18. [mail.jabber.org/pipermail/standards/2006-May/011182.html Standards-JIG] proto-JEP: Smart Presence Distribution]
  19. [xmpp.org/extensions/xep-0138.html XEP-0138: Stream Compression]
  20. [tools.ietf.org/html/rfc3749#section-3 Transport Layer Security Protocol Compression Methods]
  21. [mail.jabber.org/pipermail/standards/2006-February/010028.html Standards-JIG] MUC traffic issues]
  22. [code.google.com/p/neutron/ Neutron (Jabber bot)]
  23. [www.google.com/trends/explore#q=Talisman%20bot%2C%20Fatal%20bot%2C%20Isida%20bot%2C%20BlackSmith%20bot%2C%20EndLess%20bot&cmpt=q Google Trends]
  24. [fatal-dev.ru/ fatal-dev]
  25. [code.google.com/p/snapi-bot/ Snapi XMPP bot]
  26. [code.google.com/p/blacksmith-bot/ BlackSmith XMPP bot]
  27. [code.google.com/p/blacksmith-2/ BlackSmith mark.2 (New XMPP bot)]
  28. [code.google.com/p/taho/ Taho на GoogleCode]
  29. [code.google.com/p/pako/ pako — Pako Jabber bot (C#)].
  30. [isida-bot.com/ Disabler Production Labaratory]
  31. [www.jabber.ru/ Крупнейший XMPP сервер в России]
  32. [www.python.org/dev/peps/pep-0008/ Python Style Guide]
  33. [a7x-im.com/ a7x-im (Erl bot developers)]
  34. [xmpp.org/software/servers.shtml XMPP Software: Servers]. XMPP Standards Foundation. Проверено 12 февраля 2009. [www.webcitation.org/616XUjYuL Архивировано из первоисточника 21 августа 2011].

Ссылки

  • [xmpp.org XMPP Standards Foundation] (англ.)
  • [book.itep.ru/4/45/xmpp.htm Частичный перевод RFC 3920 XMPP Core на русский]
  • Перевод RFC 3921 на русский язык
  • [www.jabber.ru Национальный российский jabber-сервер]
  • [jabberon.ru Российский открытый jabber-сервер]
  • [jawiki.ru Вики-система по теме Jabber]
  • [jabberworld.info Вики-система по миграции с ICQ на Jabber]

Отрывок, характеризующий XMPP

Платон Каратаев был для всех остальных пленных самым обыкновенным солдатом; его звали соколик или Платоша, добродушно трунили над ним, посылали его за посылками. Но для Пьера, каким он представился в первую ночь, непостижимым, круглым и вечным олицетворением духа простоты и правды, таким он и остался навсегда.
Платон Каратаев ничего не знал наизусть, кроме своей молитвы. Когда он говорил свои речи, он, начиная их, казалось, не знал, чем он их кончит.
Когда Пьер, иногда пораженный смыслом его речи, просил повторить сказанное, Платон не мог вспомнить того, что он сказал минуту тому назад, – так же, как он никак не мог словами сказать Пьеру свою любимую песню. Там было: «родимая, березанька и тошненько мне», но на словах не выходило никакого смысла. Он не понимал и не мог понять значения слов, отдельно взятых из речи. Каждое слово его и каждое действие было проявлением неизвестной ему деятельности, которая была его жизнь. Но жизнь его, как он сам смотрел на нее, не имела смысла как отдельная жизнь. Она имела смысл только как частица целого, которое он постоянно чувствовал. Его слова и действия выливались из него так же равномерно, необходимо и непосредственно, как запах отделяется от цветка. Он не мог понять ни цены, ни значения отдельно взятого действия или слова.


Получив от Николая известие о том, что брат ее находится с Ростовыми, в Ярославле, княжна Марья, несмотря на отговариванья тетки, тотчас же собралась ехать, и не только одна, но с племянником. Трудно ли, нетрудно, возможно или невозможно это было, она не спрашивала и не хотела знать: ее обязанность была не только самой быть подле, может быть, умирающего брата, но и сделать все возможное для того, чтобы привезти ему сына, и она поднялась ехать. Если князь Андрей сам не уведомлял ее, то княжна Марья объясняла ото или тем, что он был слишком слаб, чтобы писать, или тем, что он считал для нее и для своего сына этот длинный переезд слишком трудным и опасным.
В несколько дней княжна Марья собралась в дорогу. Экипажи ее состояли из огромной княжеской кареты, в которой она приехала в Воронеж, брички и повозки. С ней ехали m lle Bourienne, Николушка с гувернером, старая няня, три девушки, Тихон, молодой лакей и гайдук, которого тетка отпустила с нею.
Ехать обыкновенным путем на Москву нельзя было и думать, и потому окольный путь, который должна была сделать княжна Марья: на Липецк, Рязань, Владимир, Шую, был очень длинен, по неимению везде почтовых лошадей, очень труден и около Рязани, где, как говорили, показывались французы, даже опасен.
Во время этого трудного путешествия m lle Bourienne, Десаль и прислуга княжны Марьи были удивлены ее твердостью духа и деятельностью. Она позже всех ложилась, раньше всех вставала, и никакие затруднения не могли остановить ее. Благодаря ее деятельности и энергии, возбуждавшим ее спутников, к концу второй недели они подъезжали к Ярославлю.
В последнее время своего пребывания в Воронеже княжна Марья испытала лучшее счастье в своей жизни. Любовь ее к Ростову уже не мучила, не волновала ее. Любовь эта наполняла всю ее душу, сделалась нераздельною частью ее самой, и она не боролась более против нее. В последнее время княжна Марья убедилась, – хотя она никогда ясно словами определенно не говорила себе этого, – убедилась, что она была любима и любила. В этом она убедилась в последнее свое свидание с Николаем, когда он приехал ей объявить о том, что ее брат был с Ростовыми. Николай ни одним словом не намекнул на то, что теперь (в случае выздоровления князя Андрея) прежние отношения между ним и Наташей могли возобновиться, но княжна Марья видела по его лицу, что он знал и думал это. И, несмотря на то, его отношения к ней – осторожные, нежные и любовные – не только не изменились, но он, казалось, радовался тому, что теперь родство между ним и княжной Марьей позволяло ему свободнее выражать ей свою дружбу любовь, как иногда думала княжна Марья. Княжна Марья знала, что она любила в первый и последний раз в жизни, и чувствовала, что она любима, и была счастлива, спокойна в этом отношении.
Но это счастье одной стороны душевной не только не мешало ей во всей силе чувствовать горе о брате, но, напротив, это душевное спокойствие в одном отношении давало ей большую возможность отдаваться вполне своему чувству к брату. Чувство это было так сильно в первую минуту выезда из Воронежа, что провожавшие ее были уверены, глядя на ее измученное, отчаянное лицо, что она непременно заболеет дорогой; но именно трудности и заботы путешествия, за которые с такою деятельностью взялась княжна Марья, спасли ее на время от ее горя и придали ей силы.
Как и всегда это бывает во время путешествия, княжна Марья думала только об одном путешествии, забывая о том, что было его целью. Но, подъезжая к Ярославлю, когда открылось опять то, что могло предстоять ей, и уже не через много дней, а нынче вечером, волнение княжны Марьи дошло до крайних пределов.
Когда посланный вперед гайдук, чтобы узнать в Ярославле, где стоят Ростовы и в каком положении находится князь Андрей, встретил у заставы большую въезжавшую карету, он ужаснулся, увидав страшно бледное лицо княжны, которое высунулось ему из окна.
– Все узнал, ваше сиятельство: ростовские стоят на площади, в доме купца Бронникова. Недалече, над самой над Волгой, – сказал гайдук.
Княжна Марья испуганно вопросительно смотрела на его лицо, не понимая того, что он говорил ей, не понимая, почему он не отвечал на главный вопрос: что брат? M lle Bourienne сделала этот вопрос за княжну Марью.
– Что князь? – спросила она.
– Их сиятельство с ними в том же доме стоят.
«Стало быть, он жив», – подумала княжна и тихо спросила: что он?
– Люди сказывали, все в том же положении.
Что значило «все в том же положении», княжна не стала спрашивать и мельком только, незаметно взглянув на семилетнего Николушку, сидевшего перед нею и радовавшегося на город, опустила голову и не поднимала ее до тех пор, пока тяжелая карета, гремя, трясясь и колыхаясь, не остановилась где то. Загремели откидываемые подножки.
Отворились дверцы. Слева была вода – река большая, справа было крыльцо; на крыльце были люди, прислуга и какая то румяная, с большой черной косой, девушка, которая неприятно притворно улыбалась, как показалось княжне Марье (это была Соня). Княжна взбежала по лестнице, притворно улыбавшаяся девушка сказала: – Сюда, сюда! – и княжна очутилась в передней перед старой женщиной с восточным типом лица, которая с растроганным выражением быстро шла ей навстречу. Это была графиня. Она обняла княжну Марью и стала целовать ее.
– Mon enfant! – проговорила она, – je vous aime et vous connais depuis longtemps. [Дитя мое! я вас люблю и знаю давно.]
Несмотря на все свое волнение, княжна Марья поняла, что это была графиня и что надо было ей сказать что нибудь. Она, сама не зная как, проговорила какие то учтивые французские слова, в том же тоне, в котором были те, которые ей говорили, и спросила: что он?
– Доктор говорит, что нет опасности, – сказала графиня, но в то время, как она говорила это, она со вздохом подняла глаза кверху, и в этом жесте было выражение, противоречащее ее словам.
– Где он? Можно его видеть, можно? – спросила княжна.
– Сейчас, княжна, сейчас, мой дружок. Это его сын? – сказала она, обращаясь к Николушке, который входил с Десалем. – Мы все поместимся, дом большой. О, какой прелестный мальчик!
Графиня ввела княжну в гостиную. Соня разговаривала с m lle Bourienne. Графиня ласкала мальчика. Старый граф вошел в комнату, приветствуя княжну. Старый граф чрезвычайно переменился с тех пор, как его последний раз видела княжна. Тогда он был бойкий, веселый, самоуверенный старичок, теперь он казался жалким, затерянным человеком. Он, говоря с княжной, беспрестанно оглядывался, как бы спрашивая у всех, то ли он делает, что надобно. После разорения Москвы и его имения, выбитый из привычной колеи, он, видимо, потерял сознание своего значения и чувствовал, что ему уже нет места в жизни.
Несмотря на то волнение, в котором она находилась, несмотря на одно желание поскорее увидать брата и на досаду за то, что в эту минуту, когда ей одного хочется – увидать его, – ее занимают и притворно хвалят ее племянника, княжна замечала все, что делалось вокруг нее, и чувствовала необходимость на время подчиниться этому новому порядку, в который она вступала. Она знала, что все это необходимо, и ей было это трудно, но она не досадовала на них.
– Это моя племянница, – сказал граф, представляя Соню, – вы не знаете ее, княжна?
Княжна повернулась к ней и, стараясь затушить поднявшееся в ее душе враждебное чувство к этой девушке, поцеловала ее. Но ей становилось тяжело оттого, что настроение всех окружающих было так далеко от того, что было в ее душе.
– Где он? – спросила она еще раз, обращаясь ко всем.
– Он внизу, Наташа с ним, – отвечала Соня, краснея. – Пошли узнать. Вы, я думаю, устали, княжна?
У княжны выступили на глаза слезы досады. Она отвернулась и хотела опять спросить у графини, где пройти к нему, как в дверях послышались легкие, стремительные, как будто веселые шаги. Княжна оглянулась и увидела почти вбегающую Наташу, ту Наташу, которая в то давнишнее свидание в Москве так не понравилась ей.
Но не успела княжна взглянуть на лицо этой Наташи, как она поняла, что это был ее искренний товарищ по горю, и потому ее друг. Она бросилась ей навстречу и, обняв ее, заплакала на ее плече.
Как только Наташа, сидевшая у изголовья князя Андрея, узнала о приезде княжны Марьи, она тихо вышла из его комнаты теми быстрыми, как показалось княжне Марье, как будто веселыми шагами и побежала к ней.
На взволнованном лице ее, когда она вбежала в комнату, было только одно выражение – выражение любви, беспредельной любви к нему, к ней, ко всему тому, что было близко любимому человеку, выраженье жалости, страданья за других и страстного желанья отдать себя всю для того, чтобы помочь им. Видно было, что в эту минуту ни одной мысли о себе, о своих отношениях к нему не было в душе Наташи.
Чуткая княжна Марья с первого взгляда на лицо Наташи поняла все это и с горестным наслаждением плакала на ее плече.
– Пойдемте, пойдемте к нему, Мари, – проговорила Наташа, отводя ее в другую комнату.
Княжна Марья подняла лицо, отерла глаза и обратилась к Наташе. Она чувствовала, что от нее она все поймет и узнает.
– Что… – начала она вопрос, но вдруг остановилась. Она почувствовала, что словами нельзя ни спросить, ни ответить. Лицо и глаза Наташи должны были сказать все яснее и глубже.
Наташа смотрела на нее, но, казалось, была в страхе и сомнении – сказать или не сказать все то, что она знала; она как будто почувствовала, что перед этими лучистыми глазами, проникавшими в самую глубь ее сердца, нельзя не сказать всю, всю истину, какою она ее видела. Губа Наташи вдруг дрогнула, уродливые морщины образовались вокруг ее рта, и она, зарыдав, закрыла лицо руками.
Княжна Марья поняла все.
Но она все таки надеялась и спросила словами, в которые она не верила:
– Но как его рана? Вообще в каком он положении?
– Вы, вы… увидите, – только могла сказать Наташа.
Они посидели несколько времени внизу подле его комнаты, с тем чтобы перестать плакать и войти к нему с спокойными лицами.
– Как шла вся болезнь? Давно ли ему стало хуже? Когда это случилось? – спрашивала княжна Марья.
Наташа рассказывала, что первое время была опасность от горячечного состояния и от страданий, но в Троице это прошло, и доктор боялся одного – антонова огня. Но и эта опасность миновалась. Когда приехали в Ярославль, рана стала гноиться (Наташа знала все, что касалось нагноения и т. п.), и доктор говорил, что нагноение может пойти правильно. Сделалась лихорадка. Доктор говорил, что лихорадка эта не так опасна.
– Но два дня тому назад, – начала Наташа, – вдруг это сделалось… – Она удержала рыданья. – Я не знаю отчего, но вы увидите, какой он стал.
– Ослабел? похудел?.. – спрашивала княжна.
– Нет, не то, но хуже. Вы увидите. Ах, Мари, Мари, он слишком хорош, он не может, не может жить… потому что…


Когда Наташа привычным движением отворила его дверь, пропуская вперед себя княжну, княжна Марья чувствовала уже в горле своем готовые рыданья. Сколько она ни готовилась, ни старалась успокоиться, она знала, что не в силах будет без слез увидать его.
Княжна Марья понимала то, что разумела Наташа словами: сним случилось это два дня тому назад. Она понимала, что это означало то, что он вдруг смягчился, и что смягчение, умиление эти были признаками смерти. Она, подходя к двери, уже видела в воображении своем то лицо Андрюши, которое она знала с детства, нежное, кроткое, умиленное, которое так редко бывало у него и потому так сильно всегда на нее действовало. Она знала, что он скажет ей тихие, нежные слова, как те, которые сказал ей отец перед смертью, и что она не вынесет этого и разрыдается над ним. Но, рано ли, поздно ли, это должно было быть, и она вошла в комнату. Рыдания все ближе и ближе подступали ей к горлу, в то время как она своими близорукими глазами яснее и яснее различала его форму и отыскивала его черты, и вот она увидала его лицо и встретилась с ним взглядом.
Он лежал на диване, обложенный подушками, в меховом беличьем халате. Он был худ и бледен. Одна худая, прозрачно белая рука его держала платок, другою он, тихими движениями пальцев, трогал тонкие отросшие усы. Глаза его смотрели на входивших.
Увидав его лицо и встретившись с ним взглядом, княжна Марья вдруг умерила быстроту своего шага и почувствовала, что слезы вдруг пересохли и рыдания остановились. Уловив выражение его лица и взгляда, она вдруг оробела и почувствовала себя виноватой.
«Да в чем же я виновата?» – спросила она себя. «В том, что живешь и думаешь о живом, а я!..» – отвечал его холодный, строгий взгляд.
В глубоком, не из себя, но в себя смотревшем взгляде была почти враждебность, когда он медленно оглянул сестру и Наташу.
Он поцеловался с сестрой рука в руку, по их привычке.
– Здравствуй, Мари, как это ты добралась? – сказал он голосом таким же ровным и чуждым, каким был его взгляд. Ежели бы он завизжал отчаянным криком, то этот крик менее бы ужаснул княжну Марью, чем звук этого голоса.
– И Николушку привезла? – сказал он также ровно и медленно и с очевидным усилием воспоминанья.
– Как твое здоровье теперь? – говорила княжна Марья, сама удивляясь тому, что она говорила.
– Это, мой друг, у доктора спрашивать надо, – сказал он, и, видимо сделав еще усилие, чтобы быть ласковым, он сказал одним ртом (видно было, что он вовсе не думал того, что говорил): – Merci, chere amie, d'etre venue. [Спасибо, милый друг, что приехала.]
Княжна Марья пожала его руку. Он чуть заметно поморщился от пожатия ее руки. Он молчал, и она не знала, что говорить. Она поняла то, что случилось с ним за два дня. В словах, в тоне его, в особенности во взгляде этом – холодном, почти враждебном взгляде – чувствовалась страшная для живого человека отчужденность от всего мирского. Он, видимо, с трудом понимал теперь все живое; но вместе с тем чувствовалось, что он не понимал живого не потому, чтобы он был лишен силы понимания, но потому, что он понимал что то другое, такое, чего не понимали и не могли понять живые и что поглощало его всего.