Открыть сервис

DHT-сеть

DHT-сеть (от англ. Distributed Hash Tableраспределённая хеш-таблица) — это децентрализованная структура данных, реализующая ассоциативный массив (словарь) для хранения пар «ключ — значение» в одноранговой (peer-to-peer, P2P) сети. В отличие от традиционных централизованных баз данных, DHT-сеть не имеет единого сервера или координирующего узла: каждый участник (узел) хранит лишь часть данных и отвечает за определённый диапазон ключей. Основное назначение DHT — обеспечение масштабируемого, отказоустойчивого и самоорганизующегося распределённого хранения, поиска и маршрутизации запросов в децентрализованных сетях.

История

Идея распределённых хеш-таблиц возникла в начале 2000-х годов как ответ на потребность в децентрализованных системах, способных заменить централизованные серверы в P2P-сетях. Первые протоколы DHT были предложены в 2001 году: Chord (Массачусетский технологический институт), CAN (Content-Addressable Network, Калифорнийский университет в Беркли), Pastry (Университет Райса) и Tapestry (Калифорнийский университет в Беркли). Эти протоколы заложили теоретические основы: каждый из них предлагал свой способ организации кольцевого или многомерного пространства ключей и алгоритмы маршрутизации с логарифмической сложностью (O(log N), где N — число узлов).

В 2003 году появился протокол Kademlia, разработанный Петаром Маймуновичем и Дэвидом Мазиером. Kademlia стал наиболее популярным благодаря своей простоте, эффективности и устойчивости к атакам. В отличие от предшественников, он использовал XOR-метрику для определения расстояния между ключами и узлами, что позволило упростить алгоритмы поиска и обновления таблиц маршрутизации. Kademlia лёг в основу многих современных P2P-сетей, включая BitTorrent (используется для поиска пиров), eDonkey2000, а также блокчейн-проектов, таких как Ethereum (для поиска узлов в сети).

С середины 2000-х годов DHT-сети стали активно применяться в децентрализованных файлообменных сетях (например, в системе BitTorrent DHT, известной как Mainline DHT, запущенной в 2005 году). В 2010-х годах интерес к DHT возрос в связи с развитием технологий блокчейна и распределённых реестров: многие проекты (например, IPFS, Sia, Storj) используют DHT для хранения метаданных, адресов узлов и индексов файлов.

Принцип работы

Хеширование ключей и идентификация узлов

В DHT-сети каждому узлу и каждому хранимому значению присваивается уникальный идентификатор (ID) — обычно хеш от IP-адреса или имени файла, полученный с помощью криптографической хеш-функции (например, SHA-1). Пространство идентификаторов (например, от 0 до 2^160-1) представляет собой кольцо или многомерное пространство. Каждый узел отвечает за хранение значений, чьи идентификаторы попадают в определённый диапазон (например, от ID узла до ID следующего узла в кольце).

Маршрутизация запросов

Для поиска значения по ключу узел не знает, какой узел сети хранит нужные данные. Вместо этого он использует таблицу маршрутизации — локальную структуру, содержащую информацию о небольшом числе других узлов (обычно O(log N)). При запросе узел вычисляет расстояние от ключа до ID каждого известного ему узла (в метрике, определённой протоколом) и пересылает запрос узлу, чей ID наиболее близок к искомому ключу. Этот процесс повторяется рекурсивно или итеративно, пока не будет найден узел, ответственный за данный ключ. В протоколах с логарифмической сложностью (например, Kademlia) количество шагов (хопов) составляет O(log N), что позволяет находить данные даже в сети из миллионов узлов за несколько десятков шагов.

Хранение и репликация

Каждый узел хранит только те пары «ключ — значение», за которые он отвечает. Для обеспечения отказоустойчивости данные реплицируются: одно и то же значение хранится на нескольких узлах (обычно на k узлах, ближайших к ключу). При выходе узла из сети его данные автоматически перераспределяются между соседними узлами. При добавлении нового узла он получает свою долю данных от соседей.

Классификация протоколов DHT

По способу организации пространства ключей и алгоритму маршрутизации выделяют несколько основных типов:

  • Кольцевые (ring-based): Chord — узлы организованы в кольцо, каждый узел знает своего преемника и предшественника. Маршрутизация осуществляется по часовой стрелке с использованием «пальцевых таблиц» (finger tables).
  • Многомерные (multidimensional): CAN — пространство ключей представляет собой d-мерный тор, каждый узел отвечает за гиперкуб. Маршрутизация происходит по координатам.
  • На основе XOR-метрики: Kademlia — расстояние между узлами вычисляется как XOR их ID. Протокол использует k-корзины (k-buckets) для хранения информации о ближайших узлах.
  • Гибридные: Pastry, Tapestry — комбинируют элементы кольцевой и многомерной маршрутизации, используя префиксные деревья.

Применение

Файлообменные сети

Наиболее известное применение DHT — децентрализованные P2P-сети для обмена файлами. В сети BitTorrent DHT (Mainline DHT) используется для поиска пиров, раздающих торренты, без необходимости в центральном трекере. Это делает сеть устойчивой к блокировкам и цензуре. По состоянию на 2024 год Mainline DHT насчитывает десятки миллионов активных узлов.

Блокчейн и криптовалюты

В блокчейн-проектах DHT применяется для:

  • Поиска узлов: в Ethereum используется протокол Kademlia (реализация devp2p) для обнаружения и поддержания связей между узлами сети.
  • Хранения метаданных: в IPFS (InterPlanetary File System) DHT служит для хранения адресов узлов, предоставляющих данные, и для маршрутизации запросов к контенту.
  • Децентрализованных хранилищ: проекты Sia, Storj, Filecoin используют DHT для хранения индексов файлов и информации о хранителях данных.

Децентрализованные приложения (dApps)

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

Системы имен

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

Преимущества и недостатки

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

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

Недостатки

  • Задержки: поиск данных может занимать несколько секунд, особенно в больших сетях, из-за необходимости последовательных запросов.
  • Уязвимости к атакам: возможны атаки «Сивилла» (создание множества поддельных узлов), атаки на маршрутизацию (например, Eclipse-атака, когда злоумышленник изолирует узел от честной сети), а также атаки на хранение (например, «Pollution» — подмена хранимых данных).
  • Непостоянство данных: в динамичных сетях с частыми подключениями и отключениями узлов данные могут временно становиться недоступными.
  • Сложность обеспечения конфиденциальности: в стандартных DHT-сетях любой узел может узнать, какие данные хранятся на других узлах, что может быть проблемой для приватных приложений.

Критика и ограничения

Основная критика DHT-сетей связана с их уязвимостью к целенаправленным атакам. В крупных публичных сетях (например, Mainline DHT) злоумышленники могут контролировать значительную долю узлов, что позволяет им манипулировать маршрутизацией или подменять данные. Для противодействия применяются механизмы репутации, криптографические подписи и доказательства работы (Proof of Work), однако полностью устранить риски не удаётся.

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

Интересные факты

  • Протокол Kademlia, используемый в BitTorrent DHT, был разработан в 2002 году как часть диссертации Петара Маймуновича в Университете Нью-Йорка.
  • В сети Mainline DHT, по оценкам 2023 года, одновременно активно около 10-15 миллионов узлов, что делает её одной из крупнейших децентрализованных сетей в мире.
  • Некоторые блокчейн-проекты (например, Ethereum) используют DHT не для хранения данных, а только для поиска узлов, а сами данные хранятся в блокчейне или в других структурах.
  • DHT-сети могут быть использованы для построения децентрализованных социальных сетей, мессенджеров и систем обмена сообщениями, однако из-за проблем с конфиденциальностью и модерацией такие проекты остаются нишевыми.

Источники

  • Maymounkov, P., Mazières, D. (2002). Kademlia: A Peer-to-Peer Information System Based on the XOR Metric.
  • Stoica, I., Morris, R., Karger, D., Kaashoek, M. F., Balakrishnan, H. (2001). Chord: A Scalable Peer-to-peer Lookup Service for Internet Applications.
  • Ratnasamy, S., Francis, P., Handley, M., Karp, R., Shenker, S. (2001). A Scalable Content-Addressable Network.
  • Rowstron, A., Druschel, P. (2001). Pastry: Scalable, Decentralized Object Location and Routing for Large-Scale Peer-to-Peer Systems.
  • Zhao, B. Y., Huang, L., Stribling, J., Rhea, S. C., Joseph, A. D., Kubiatowicz, J. D. (2004). Tapestry: A Resilient Global-scale Overlay for Service Deployment.
  • BitTorrent Inc. (2005). DHT Protocol Specification (BEP 5).
  • IPFS Documentation. (2023). Distributed Hash Tables.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →