DHT

DHT (Distributed Hash Table) — распределённая структура хранения «ключ → значение», где нет центрального сервера, а данные разложены по тысячам узлов. Каждый узел знает свою часть таблицы и умеет найти любую другую за O(log N) хопов. Основа для BitTorrent, IPFS, Ethereum и многих P2P-сетей.

Идея

  1. Каждый узел имеет уникальный ID (обычно 160-256 бит, случайный).
  2. Каждый ключ хешируется до того же пространства ID.
  3. Значение для ключа K хранится на узле с ближайшим ID к K (по метрике DHT).
  4. Узлы поддерживают таблицу маршрутизации — список некоторых других узлов, покрывающий пространство ID.
  5. Чтобы найти K: спрашиваем ближайшего известного узла, он говорит «попробуй у него», и т.д. рекурсивно.

Основные алгоритмы DHT

АлгоритмМетрикаГде используется
KademliaXORBitTorrent, IPFS, Ethereum, I2P
ChordКольцо, arc-distanceИсторически, редко
PastryNumerical prefixFreenet, некоторые CDN
TapestryПохоже на PastryOceanStore
CANd-мерный торАкадемический интерес

Kademlia выиграл — он симметричен (query = ping), эффективен, устойчив к сбоям.

Kademlia — детали

BitTorrent DHT

Изначально BitTorrent использовал только трекеры — централизованные серверы. С 2005 добавлен Mainline DHT (mDHT) — Kademlia-сеть где сами peer'ы делят таблицу «инфохеш → список пиров».

Кладём в DHT: ключ = SHA-1(info) торрента, значение = список [IP:port] сидов. Чтобы получить пиров — GET по инфохешу.

Сегодня десятки миллионов узлов в BT-DHT.

IPFS DHT

IPFS использует Kademlia (libp2p-kad-dht) для content routing: «у кого лежит CID QmXxx...?». Значения — «provider records»: узел объявляет «у меня есть этот CID».

Проблемы DHT

DHT для деанонимизации

Правоохранители иногда «садят» узлы в BT-DHT рядом с известным инфохешем — все запросчики → потенциально скачивающие. Использовалось в делах о правах в 2010-х. Защита — I2P, Tor.

См. также