Распределённая хеш-таблица

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

DHT (англ. distributed hash table — «распределённая хеш-таблица») — это класс децентрализованных распределённых систем поискового сервиса, работающего подобно хеш-таблице. Структура ассоциативного массива (ключ-значение) хранится в DHT, а каждый участвующий узел может искать значение, ассоциированное с данным ключом. Ответственность за поддержание связи между именем и значением распределяется между узлами, в силу чего изменение набора участников является причиной минимального количества разрывов. Это позволяет легко масштабировать DHT и постоянно отслеживать добавление и удаление узлов и ошибки в их работе.

DHT — это инфраструктура, которая может быть использована для построения многих сложных сервисов, таких как распределённые файловые системы, пиринговое распространение файлов и сети доставки содержимого, кооперативный web-кэш, многоадресное вещание (multicast), anycast, служба доменных имен и система мгновенных сообщений. Основные распределённые сети, которые используют DHT: сеть I2P, BitTorrent, eDonkey network (Kad Network)К:Википедия:Статьи без источников (тип: не указан)[источник не указан 3477 дней], YaCy, Tox и Coral Content Distribution Network. Существует возможность создания поисковых машин по сети DHT.





История

Исследования в области DHT изначально были мотивированы в частности пиринговыми системами, такими, как I2P, Napster, Gnutella, Freenet, которые использовали распределённые в интернете ресурсы для создания одного единственного приложения. В частности они использовали широкополосный интернет и пространство на жёстких дисках для предоставления сервиса распространения файлов.

Эти системы различаются тем, как они находили данные пиров:

  • Napster имел центральный индексный сервер: каждый узел, после присоединения, должен отправить список локально хранящихся файлов на сервер, который должен произвести поиск и направить запрос к узлам, содержащим результаты. Этот центральный компонент делал систему уязвимой для атак и рисков.
  • Gnutella и похожие сети двинулись к модели лавинных запросов — в основном, каждый поиск привёл бы к сообщению, передаваемому на все машины сети. Избегая централизованного отказа, этот метод был значительно менее эффективным, чем Napster.
  • Наконец, Freenet был также полностью распределённым, но маршрутизация работает на базе эвристического ключа, в котором каждый файл имеет ассоциированный с ним ключ, а файлы с похожими ключами имели тенденцию к объединению в кластеры на похожем наборе узлов. Запрос, скорее всего, направлялся таким кластерам без надобности опрашивать всех пиров. Однако Freenet не мог гарантировать, что данные будут найдены.

DHT используют маршрутизацию на базе более структурированного ключа, чтобы достигнуть децентрализации I2P, Gnutella и Freenet, а также эффективности и гарантируемых результатов Napster. Один из недочётов в том, что, как Freenet, DHT поддерживает только поиск по точному совпадению, а не по ключевым словам, хотя эти возможности могут наслаиваться поверх DHT.

Первые четыре DHT — CAN, Chord, Pastry и Tapestry (англ. Tapestry) — были введены приблизительно в 2001 году. С тех пор эта область изысканий была достаточно активна. Вне научных кругов DHT-технологию приняли как компонент BitTorrent и Coral Content Distribution Network.

Свойства

DHT характеризуется следующими свойствами:

  • Децентрализация: форма системы коллективных узлов без координации;
  • Масштабируемость: система будет одинаково эффективно функционировать при тысячах или миллионах узлов;
  • Отказоустойчивость: система будет одинаково надёжна (в некотором смысле) с узлами постоянно подключающимися, отключающимися и выдающими ошибки.

Ключевая методика достижения цели заключается в том, что любой узел должен координировать работу только с несколькими узлами в системе — как правило, О(logn), где n — количество участников (смотри ниже) — так, чтобы только ограниченный объём работы был сделан для каждого изменения количества участников.

Некоторые DHT-проекты стремятся обеспечить защиту от вредоносных пользователей и позволять участникам оставаться анонимными, хотя это меньше распространено, чем во многих других P2P-системах (особенно при распространении файлов); см. Анонимные сети.

Наконец, DHT приходится иметь дело с более традиционными распределёнными системами, такими как распределение нагрузки, целостность данных и производительность (в частности, гарантируя, что операции, такие как маршрутизация и хранение данных или поиск, завершаются быстро).

Структура

Структура DHT может быть разбита на несколько основных компонентов. Она основывается на абстрактном пространстве ключей (keyspace), таком как набор 160-битных строк (количество бит может варьироваться). Схема разбиения пространства ключей распределяет принадлежность ключей среди участвующих узлов. Затем оверлейная сеть соединяет узлы, помогая найти владельца любого ключа в пространстве ключей.

Когда все компоненты на месте, типичное использование DHT для хранения и выдачи информации происходит следующим образом: Предположим, keyspace составляет 160-битные строки. Чтобы сохранить файл с данным именем и информацией в DHT, находится SHA1 хеш от имени файла, из которого формируется 160-битный ключ k, после чего формируется сообщение put(k, data) и посылается любому участвующему узлу в DHT. Послание идёт от одного узла к другому через оверлейную сеть до тех пор, пока оно не достигнет единственного узла, ответственного за ключ k, в соответствии со схемой разбиения keyspace, где и будет храниться пара (k, data). Любой другой клиент может получить содержание файла сделав ключ (k), т. е. получив хеш имени файла, для того, чтобы найти данные, связанные с ключом, послав сообщение get(k). Сообщение снова пройдёт через оверлей к узлу, ответственному за ключ, который ответит, что нужные данные есть в наличии.

Компоненты разбиения пространства ключей и оверлейной сети описаны ниже с целью представления основных идей обычных для большинства DHT систем. Многие разработки отличаются в деталях.

Разбиение пространства ключей

Большинство DHT используют различные варианты консистентного хеширования для отображения ключей в узлы. В основе этого способа разбиения лежит функция <math>\delta(k_1, k_2)</math>, определяющая абстрактное понятие расстояния между ключами <math>k_1</math> и <math>k_2</math>, которое не имеет никакого отношения к географическому расстоянию или к сетевой задержке. Каждому узлу присваивается единичный ключ, называемый его идентификатором (ID). Узел с ID <math>i_n</math> владеет всеми ключами <math>k_m</math>, для которых <math>i_n</math> — ближайший ID, вычисленный с помощью <math>\delta(k_m, i_n)</math>.

Пример. Chord DHT рассматривает ключи как точки на окружности, а <math>\delta(k_1, k_2)</math> — это расстояние, пройденное по часовой стрелке по окружности от ключа <math>k_1</math> к <math>k_2</math>. Таким образом круг пространства ключей разделён на смежные сегменты, чьи концы являются идентификаторами узлов. Если <math>i_1</math> и <math>i_2</math> смежные ID, то узел с ID <math>i_2</math> содержит все ключи, которые находятся между <math>i_1</math> и <math>i_2</math>.

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

DHT и BitTorrent

И DHT, и PEX фактически выполняют основную функцию BitTorrent-трекера — помогают участникам файлообмена узнать друг о друге. Они могут:

  • Помочь участникам быстрее найти друг друга
    Например, на раздаче есть пир X с недоступным портом. К раздаче подключается пир Z, который не может сам начать соединение с X и вынужден ждать, пока Х о нём узнает. Х только что обращался к трекеру и в следующий раз собирается это сделать через час.
    Но вот пир Y в очередной раз обращается к трекеру и узнаёт про нового пира Z. Если при этом Y сам давно уже соединён и занимается файлообменом с X, то он через PEX сообщает X адрес этого нового пира Z. Таких пиров Y на раздаче может быть много. Теперь X может начать соединение с Z не ожидая очередного запроса к трекеру, что особенно важно, если к тому времени Z отключится. При большой доле приходящих и уходящих раздающих это сокращает ожидание начала загрузки с них.
  • Снизить нагрузку на трекер
    Получая адреса пиров через DHT или PEX, клиенты реже обращаются к трекеру, тем самым снижая нагрузку.
  • Поддержать раздачу в периоды недоступности трекера
    Если трекер является единственным источником информации о пирах, то при его неработоспособности раздача постепенно остановится. Используя PEX, клиенты могут обмениваться друг с другом информацией о пирах, с которыми у них были сеансы связи, тем самым замедляя процесс остановки раздачи. DHT же позволяет полностью заменить трекер.
  • DHT позволяет раздавать без трекера
    Такая раздача называется бестрекерной (trackerless). Торрент для неё создаётся без адреса трекера и клиенты находят друг друга через DHT. Правда при этом, начавший раздачу должен иметь реальный IP-адрес, доступный извне. При участии в trackerless-раздачах BitTorrent-клиенты приобретают определённое сходство с eMule, использующим сеть Kad.

Закрытый ключ

В публичных (открытых) трекерах, где каждый желающий может скачать торрент и участвовать в раздаче, DHT и PEX служат на благо всех участников.

Частным (закрытым) трекерам в первую очередь важно, чтобы в раздачах могли участвовать только зарегистрированные пользователи и чтобы они соблюдали определённые правила. При первом обращении клиента частный трекер имеет возможность не допустить его к раздаче, просто не сообщая ему адреса других клиентов-участников. Поэтому для закрытого трекера важно, чтобы клиенты не получали эти адреса через DHT/PEX.

DHT и PEX появились в клиентах Azureus и BitComet примерно летом 2005 года. Администраторы многих частных трекеров были недовольны такой новой функциональностью и поэтому стали запрещать на трекере эти новые версии клиентов.

Тогда разработчики клиентов предложили новый ключ внутри торрент-файла: private. Если он равен 1, то клиент обязан для этого торрента автоматически отключать DHT/PEX независимо от желания пользователя. Такой торрент называют Secure Torrent.

Практически все современные частные трекеры сами принудительно вставляют private:1 во все торренты, выкладываемые на трекере, а также запрещают несколько устаревших версий клиентов, поддерживающих DHT или PEX, но ещё не знающих про private key. Считается, что пользователи трекера просто не могут на раздачах использовать DHT/PEX, и проблемы нет. На самом же деле для того, чтобы не учитывался рейтинг, достаточно заменить свой passkey на любой другой. И даже не надо его воровать. Достаточно зарегистрировать ещё одну учётную запись, чтобы взять из неё passkey.

DHT и статистика

Этот раздел касается только закрытых трекеров, на которых private key в торренты принудительно не вставляется, и на некоторых раздачах (в зависимости от того, вставил ли раздающий сам в торрент private key) можно использовать DHT и PEX.

Часто встречается мнение, что включённый в клиенте DHT влияет на учёт статистики клиента трекером, например «раздавал через DHT, значит статистика шла мимо трекера». Это неверно.

Во-первых, DHT/PEX используется только для получения адресов пиров. Ни файлообмена, ни какого-либо учёта статистики по ним не ведётся. Клиент рапортует статистику скачанного и отданного только на трекер.

То есть «раздавал через DHT» фактически означает «о некоторых (или о всех) пирах получил информацию по DHT, и, вероятно, некоторые пиры тоже нашли меня через DHT».

Во-вторых, хотя клиенты обычно и знают, откуда ими получены адреса пиров, ни один клиент не разделяет трафик на «полученный/отданный DHT пирам» и «полученный/отданный пирам, полученным от трекера». Даже при желании это было бы клиенту сделать затруднительно — некоторые пиры могут быть получены и от трекера и через DHT или PEX, и часто клиент не знает, как его адрес получил пир, сам начинающий к нему соединение.

Клиент рапортует трекеру суммарные данные об объёмах им скачанного и отданного всем пирам, с которыми он общался, независимо от того, узнал клиент об отдельных пирах через трекер, DHT или PEX, или тот пир вообще начал соединение сам. То есть даже если из-за DHT/PEX на раздаче появятся «левые» пользователи (не обращающиеся к трекеру), клиент всё равно сообщит на трекер всё, что у них скачал и отдал.

Правильный учёт статистики зависит только от состояния трекера: работает трекер — статистика учитывается, не работает — не учитывается. Только в случае длительно неработающего трекера DHT/PEX может играть косвенную роль, не давая постепенно затухнуть файлообмену на такой «раздаче без учёта статистики».

Механизм работы DHT

Реализация распределённой сети в BitTorrent-клиентах основана на варианте DHT, называемом Kademlia. А вообще говоря, DHT (Distributed hash table) означает децентрализованную распределённую систему для объединения большого количества постоянно исчезающих и появляющихся узлов и эффективной передачи сообщений между ними. На основе структур DHT строят разные более сложные системы, такие как файлообмен P2P, кооперативное веб-кэширование, службы DNS и т. п.

DHT использует протокол UDP. Клиенты BitTorrent «слушают» тот же номер порта UDP, который они используют для входящих TCP-соединений. Если вы активно используете DHT, то открытие этого UDP-порта для доступа снаружи желательно, но не обязательно — DHT будет работать и так.

Каждый подключённый клиент является в сети DHT отдельным узлом. У него есть свой уникальный ID (идентификатор), случайно выбираемый из того же 160-битного пространства, что и infohash’и торрентов.

Каждый узел хранит таблицу маршрутизации, содержащую контактную информацию о многих «ближайших» к нему узлах, и о нескольких более далёких. «Близость» двух узлов вычисляется из «сходства» их ID, и не имеет никакого отношения к их географической близости.

Когда узел хочет найти пиров для раздачи, он сравнивает infohash этой раздачи с ID известных ему узлов, и затем посылает запрос тому узлу, чей ID наиболее похож на этот infohash. Тот узел возвращает ему адрес узла, чей ID ещё ближе к infohash торрента.

Тогда наш узел посылает запрос тому новому узлу, и получает от него адрес следующего узла, чей ID ещё более похож на infohash торрента.

Таким образом, запросы от клиентов, участвующих в раздаче торрента с определённым infohash, постепенно стекаются к узлам, чьи ID наиболее похожи на этот infohash. Эти узлы помнят предыдущие запросы, и всем следующим запрашивающим узлам вернут адреса предыдущих пиров с той же раздачи.

Недостатки

  1. Существует несколько несовместимых между собой протоколов, которые обслуживают различные сети.
  2. Работа клиента, как DHT-узла, создаёт большую нагрузку на маршрутизатор (роутер).
  3. Хеши публикуются открыто, что позволяет интерактивно отслеживать раздачи (чем и пользуются правообладатели).[1][2][3]

Связанные статьи

Напишите отзыв о статье "Распределённая хеш-таблица"

Примечания

  1. [www.theregister.co.uk/2010/04/30/bittorrent_continuous_spying/ Researchers spy on BitTorrent users in real-time]
  2. [bittorrent.org/beps/bep_0005.html DHT Protocol]
  3. [bittorrent.org/beps/bep_0009.html Extension for Peers to Send Metadata Files]

Внешние ссылки

  • [www.btdigg.org/ www.btdigg.org/] — BTDigg, поисковая машина по сети BitTorrent DHT  (рус.)  (англ.)
  • [translatedby.com/you/protocol-dht/ Описание протокола DHT] (Перевод)  (рус.)
  • [www.bittorrent.org/beps/bep_0005.html Описание протокола DHT] на сайте BitTorrent.org  (англ.)
  • [www.azureuswiki.com/index.php/Secure_Torrents в Azureus Wiki]  (англ.)
  • [wiki.bitcomet.com/help/SecureTorrent на сайте BitComet]  (англ.)

Отрывок, характеризующий Распределённая хеш-таблица

– Где суд, там и неправда, – вставил маленький человек.
– А ты давно здесь? – спросил Пьер, дожевывая последнюю картошку.
– Я то? В то воскресенье меня взяли из гошпиталя в Москве.
– Ты кто же, солдат?
– Солдаты Апшеронского полка. От лихорадки умирал. Нам и не сказали ничего. Наших человек двадцать лежало. И не думали, не гадали.
– Что ж, тебе скучно здесь? – спросил Пьер.
– Как не скучно, соколик. Меня Платоном звать; Каратаевы прозвище, – прибавил он, видимо, с тем, чтобы облегчить Пьеру обращение к нему. – Соколиком на службе прозвали. Как не скучать, соколик! Москва, она городам мать. Как не скучать на это смотреть. Да червь капусту гложе, а сам прежде того пропадае: так то старички говаривали, – прибавил он быстро.
– Как, как это ты сказал? – спросил Пьер.
– Я то? – спросил Каратаев. – Я говорю: не нашим умом, а божьим судом, – сказал он, думая, что повторяет сказанное. И тотчас же продолжал: – Как же у вас, барин, и вотчины есть? И дом есть? Стало быть, полная чаша! И хозяйка есть? А старики родители живы? – спрашивал он, и хотя Пьер не видел в темноте, но чувствовал, что у солдата морщились губы сдержанною улыбкой ласки в то время, как он спрашивал это. Он, видимо, был огорчен тем, что у Пьера не было родителей, в особенности матери.
– Жена для совета, теща для привета, а нет милей родной матушки! – сказал он. – Ну, а детки есть? – продолжал он спрашивать. Отрицательный ответ Пьера опять, видимо, огорчил его, и он поспешил прибавить: – Что ж, люди молодые, еще даст бог, будут. Только бы в совете жить…
– Да теперь все равно, – невольно сказал Пьер.
– Эх, милый человек ты, – возразил Платон. – От сумы да от тюрьмы никогда не отказывайся. – Он уселся получше, прокашлялся, видимо приготовляясь к длинному рассказу. – Так то, друг мой любезный, жил я еще дома, – начал он. – Вотчина у нас богатая, земли много, хорошо живут мужики, и наш дом, слава тебе богу. Сам сем батюшка косить выходил. Жили хорошо. Христьяне настоящие были. Случилось… – И Платон Каратаев рассказал длинную историю о том, как он поехал в чужую рощу за лесом и попался сторожу, как его секли, судили и отдали ь солдаты. – Что ж соколик, – говорил он изменяющимся от улыбки голосом, – думали горе, ан радость! Брату бы идти, кабы не мой грех. А у брата меньшого сам пят ребят, – а у меня, гляди, одна солдатка осталась. Была девочка, да еще до солдатства бог прибрал. Пришел я на побывку, скажу я тебе. Гляжу – лучше прежнего живут. Животов полон двор, бабы дома, два брата на заработках. Один Михайло, меньшой, дома. Батюшка и говорит: «Мне, говорит, все детки равны: какой палец ни укуси, все больно. А кабы не Платона тогда забрили, Михайле бы идти». Позвал нас всех – веришь – поставил перед образа. Михайло, говорит, поди сюда, кланяйся ему в ноги, и ты, баба, кланяйся, и внучата кланяйтесь. Поняли? говорит. Так то, друг мой любезный. Рок головы ищет. А мы всё судим: то не хорошо, то не ладно. Наше счастье, дружок, как вода в бредне: тянешь – надулось, а вытащишь – ничего нету. Так то. – И Платон пересел на своей соломе.
Помолчав несколько времени, Платон встал.
– Что ж, я чай, спать хочешь? – сказал он и быстро начал креститься, приговаривая:
– Господи, Иисус Христос, Никола угодник, Фрола и Лавра, господи Иисус Христос, Никола угодник! Фрола и Лавра, господи Иисус Христос – помилуй и спаси нас! – заключил он, поклонился в землю, встал и, вздохнув, сел на свою солому. – Вот так то. Положи, боже, камушком, подними калачиком, – проговорил он и лег, натягивая на себя шинель.
– Какую это ты молитву читал? – спросил Пьер.
– Ась? – проговорил Платон (он уже было заснул). – Читал что? Богу молился. А ты рази не молишься?
– Нет, и я молюсь, – сказал Пьер. – Но что ты говорил: Фрола и Лавра?
– А как же, – быстро отвечал Платон, – лошадиный праздник. И скота жалеть надо, – сказал Каратаев. – Вишь, шельма, свернулась. Угрелась, сукина дочь, – сказал он, ощупав собаку у своих ног, и, повернувшись опять, тотчас же заснул.
Наружи слышались где то вдалеке плач и крики, и сквозь щели балагана виднелся огонь; но в балагане было тихо и темно. Пьер долго не спал и с открытыми глазами лежал в темноте на своем месте, прислушиваясь к мерному храпенью Платона, лежавшего подле него, и чувствовал, что прежде разрушенный мир теперь с новой красотой, на каких то новых и незыблемых основах, воздвигался в его душе.


В балагане, в который поступил Пьер и в котором он пробыл четыре недели, было двадцать три человека пленных солдат, три офицера и два чиновника.
Все они потом как в тумане представлялись Пьеру, но Платон Каратаев остался навсегда в душе Пьера самым сильным и дорогим воспоминанием и олицетворением всего русского, доброго и круглого. Когда на другой день, на рассвете, Пьер увидал своего соседа, первое впечатление чего то круглого подтвердилось вполне: вся фигура Платона в его подпоясанной веревкою французской шинели, в фуражке и лаптях, была круглая, голова была совершенно круглая, спина, грудь, плечи, даже руки, которые он носил, как бы всегда собираясь обнять что то, были круглые; приятная улыбка и большие карие нежные глаза были круглые.
Платону Каратаеву должно было быть за пятьдесят лет, судя по его рассказам о походах, в которых он участвовал давнишним солдатом. Он сам не знал и никак не мог определить, сколько ему было лет; но зубы его, ярко белые и крепкие, которые все выкатывались своими двумя полукругами, когда он смеялся (что он часто делал), были все хороши и целы; ни одного седого волоса не было в его бороде и волосах, и все тело его имело вид гибкости и в особенности твердости и сносливости.
Лицо его, несмотря на мелкие круглые морщинки, имело выражение невинности и юности; голос у него был приятный и певучий. Но главная особенность его речи состояла в непосредственности и спорости. Он, видимо, никогда не думал о том, что он сказал и что он скажет; и от этого в быстроте и верности его интонаций была особенная неотразимая убедительность.
Физические силы его и поворотливость были таковы первое время плена, что, казалось, он не понимал, что такое усталость и болезнь. Каждый день утром а вечером он, ложась, говорил: «Положи, господи, камушком, подними калачиком»; поутру, вставая, всегда одинаково пожимая плечами, говорил: «Лег – свернулся, встал – встряхнулся». И действительно, стоило ему лечь, чтобы тотчас же заснуть камнем, и стоило встряхнуться, чтобы тотчас же, без секунды промедления, взяться за какое нибудь дело, как дети, вставши, берутся за игрушки. Он все умел делать, не очень хорошо, но и не дурно. Он пек, парил, шил, строгал, тачал сапоги. Он всегда был занят и только по ночам позволял себе разговоры, которые он любил, и песни. Он пел песни, не так, как поют песенники, знающие, что их слушают, но пел, как поют птицы, очевидно, потому, что звуки эти ему было так же необходимо издавать, как необходимо бывает потянуться или расходиться; и звуки эти всегда бывали тонкие, нежные, почти женские, заунывные, и лицо его при этом бывало очень серьезно.
Попав в плен и обросши бородою, он, видимо, отбросил от себя все напущенное на него, чуждое, солдатское и невольно возвратился к прежнему, крестьянскому, народному складу.
– Солдат в отпуску – рубаха из порток, – говаривал он. Он неохотно говорил про свое солдатское время, хотя не жаловался, и часто повторял, что он всю службу ни разу бит не был. Когда он рассказывал, то преимущественно рассказывал из своих старых и, видимо, дорогих ему воспоминаний «христианского», как он выговаривал, крестьянского быта. Поговорки, которые наполняли его речь, не были те, большей частью неприличные и бойкие поговорки, которые говорят солдаты, но это были те народные изречения, которые кажутся столь незначительными, взятые отдельно, и которые получают вдруг значение глубокой мудрости, когда они сказаны кстати.
Часто он говорил совершенно противоположное тому, что он говорил прежде, но и то и другое было справедливо. Он любил говорить и говорил хорошо, украшая свою речь ласкательными и пословицами, которые, Пьеру казалось, он сам выдумывал; но главная прелесть его рассказов состояла в том, что в его речи события самые простые, иногда те самые, которые, не замечая их, видел Пьер, получали характер торжественного благообразия. Он любил слушать сказки, которые рассказывал по вечерам (всё одни и те же) один солдат, но больше всего он любил слушать рассказы о настоящей жизни. Он радостно улыбался, слушая такие рассказы, вставляя слова и делая вопросы, клонившиеся к тому, чтобы уяснить себе благообразие того, что ему рассказывали. Привязанностей, дружбы, любви, как понимал их Пьер, Каратаев не имел никаких; но он любил и любовно жил со всем, с чем его сводила жизнь, и в особенности с человеком – не с известным каким нибудь человеком, а с теми людьми, которые были перед его глазами. Он любил свою шавку, любил товарищей, французов, любил Пьера, который был его соседом; но Пьер чувствовал, что Каратаев, несмотря на всю свою ласковую нежность к нему (которою он невольно отдавал должное духовной жизни Пьера), ни на минуту не огорчился бы разлукой с ним. И Пьер то же чувство начинал испытывать к Каратаеву.
Платон Каратаев был для всех остальных пленных самым обыкновенным солдатом; его звали соколик или Платоша, добродушно трунили над ним, посылали его за посылками. Но для Пьера, каким он представился в первую ночь, непостижимым, круглым и вечным олицетворением духа простоты и правды, таким он и остался навсегда.
Платон Каратаев ничего не знал наизусть, кроме своей молитвы. Когда он говорил свои речи, он, начиная их, казалось, не знал, чем он их кончит.
Когда Пьер, иногда пораженный смыслом его речи, просил повторить сказанное, Платон не мог вспомнить того, что он сказал минуту тому назад, – так же, как он никак не мог словами сказать Пьеру свою любимую песню. Там было: «родимая, березанька и тошненько мне», но на словах не выходило никакого смысла. Он не понимал и не мог понять значения слов, отдельно взятых из речи. Каждое слово его и каждое действие было проявлением неизвестной ему деятельности, которая была его жизнь. Но жизнь его, как он сам смотрел на нее, не имела смысла как отдельная жизнь. Она имела смысл только как частица целого, которое он постоянно чувствовал. Его слова и действия выливались из него так же равномерно, необходимо и непосредственно, как запах отделяется от цветка. Он не мог понять ни цены, ни значения отдельно взятого действия или слова.


Получив от Николая известие о том, что брат ее находится с Ростовыми, в Ярославле, княжна Марья, несмотря на отговариванья тетки, тотчас же собралась ехать, и не только одна, но с племянником. Трудно ли, нетрудно, возможно или невозможно это было, она не спрашивала и не хотела знать: ее обязанность была не только самой быть подле, может быть, умирающего брата, но и сделать все возможное для того, чтобы привезти ему сына, и она поднялась ехать. Если князь Андрей сам не уведомлял ее, то княжна Марья объясняла ото или тем, что он был слишком слаб, чтобы писать, или тем, что он считал для нее и для своего сына этот длинный переезд слишком трудным и опасным.
В несколько дней княжна Марья собралась в дорогу. Экипажи ее состояли из огромной княжеской кареты, в которой она приехала в Воронеж, брички и повозки. С ней ехали m lle Bourienne, Николушка с гувернером, старая няня, три девушки, Тихон, молодой лакей и гайдук, которого тетка отпустила с нею.
Ехать обыкновенным путем на Москву нельзя было и думать, и потому окольный путь, который должна была сделать княжна Марья: на Липецк, Рязань, Владимир, Шую, был очень длинен, по неимению везде почтовых лошадей, очень труден и около Рязани, где, как говорили, показывались французы, даже опасен.
Во время этого трудного путешествия m lle Bourienne, Десаль и прислуга княжны Марьи были удивлены ее твердостью духа и деятельностью. Она позже всех ложилась, раньше всех вставала, и никакие затруднения не могли остановить ее. Благодаря ее деятельности и энергии, возбуждавшим ее спутников, к концу второй недели они подъезжали к Ярославлю.
В последнее время своего пребывания в Воронеже княжна Марья испытала лучшее счастье в своей жизни. Любовь ее к Ростову уже не мучила, не волновала ее. Любовь эта наполняла всю ее душу, сделалась нераздельною частью ее самой, и она не боролась более против нее. В последнее время княжна Марья убедилась, – хотя она никогда ясно словами определенно не говорила себе этого, – убедилась, что она была любима и любила. В этом она убедилась в последнее свое свидание с Николаем, когда он приехал ей объявить о том, что ее брат был с Ростовыми. Николай ни одним словом не намекнул на то, что теперь (в случае выздоровления князя Андрея) прежние отношения между ним и Наташей могли возобновиться, но княжна Марья видела по его лицу, что он знал и думал это. И, несмотря на то, его отношения к ней – осторожные, нежные и любовные – не только не изменились, но он, казалось, радовался тому, что теперь родство между ним и княжной Марьей позволяло ему свободнее выражать ей свою дружбу любовь, как иногда думала княжна Марья. Княжна Марья знала, что она любила в первый и последний раз в жизни, и чувствовала, что она любима, и была счастлива, спокойна в этом отношении.
Но это счастье одной стороны душевной не только не мешало ей во всей силе чувствовать горе о брате, но, напротив, это душевное спокойствие в одном отношении давало ей большую возможность отдаваться вполне своему чувству к брату. Чувство это было так сильно в первую минуту выезда из Воронежа, что провожавшие ее были уверены, глядя на ее измученное, отчаянное лицо, что она непременно заболеет дорогой; но именно трудности и заботы путешествия, за которые с такою деятельностью взялась княжна Марья, спасли ее на время от ее горя и придали ей силы.
Как и всегда это бывает во время путешествия, княжна Марья думала только об одном путешествии, забывая о том, что было его целью. Но, подъезжая к Ярославлю, когда открылось опять то, что могло предстоять ей, и уже не через много дней, а нынче вечером, волнение княжны Марьи дошло до крайних пределов.
Когда посланный вперед гайдук, чтобы узнать в Ярославле, где стоят Ростовы и в каком положении находится князь Андрей, встретил у заставы большую въезжавшую карету, он ужаснулся, увидав страшно бледное лицо княжны, которое высунулось ему из окна.