Skip to content

DHT (Kademlia)

Статус: не используется — feature "kad" подключена в Cargo.toml, но ни одна Behaviour-структура не включает Kademlia.

Что такое DHT (Kademlia)

Distributed Hash Table (DHT) — распределённая хеш-таблица, позволяющая пирам находить друг друга и обмениваться данными без центрального сервера.

Kademlia — конкретная реализация DHT, используемая в libp2p:

  • XOR-метрика — расстояние между узлами определяется как XOR(peer_id_a, peer_id_b), что формирует дерево маршрутизации
  • O(log N) поиск — для нахождения любого пира в сети из N узлов требуется не более log₂(N) hop-ов
  • k-buckets — каждый узел хранит таблицу известных пиров, разделённую на бакеты по расстоянию
  • Самоорганизация — таблица маршрутизации обновляется автоматически при взаимодействии с пирами

Текущее состояние в Kontinuum

Cargo.toml

Feature "kad" включена в зависимости libp2p (backend/Cargo.toml:37), но код Kademlia нигде не инстанцируется:

toml
# backend/Cargo.toml:26-38
libp2p = { version = "0.56", features = [
  "tokio",
  "mdns",
  "noise",
  "yamux",
  "tcp",
  "identify",
  "request-response",
  "json",
  "serde",
  "macros",
  "kad",        # ← подключена, но не используется
] }

Behaviour-структуры

Все четыре Behaviour в проекте содержат только mdns + request_response, без Kademlia:

СтруктураФайлСостав
mdns::tokio::Behaviourp2p/network.rs:37голый mDNS
SharingBehavioursharing/libp2p_sharing.rs:17-21mdns + request_response
PairingBehaviourpairing/libp2p_pairing.rs:52-56mdns + request_response
DiscoveryBehaviourpairing/libp2p_pairing.rs:396-400mdns + request_response

Ограничения текущего подхода

mDNS работает только в пределах одного широковещательного домена (LAN). Это означает:

  • Пиры обнаруживают друг друга только в одной Wi-Fi/Ethernet сети
  • Нет связи между устройствами в разных сетях (дом ↔ офис, мобильный в LTE ↔ desktop)
  • NAT traversal невозможен без внешнего координатора

Forward-work по включению DHT/Kademlia (обнаружение вне LAN, NAT traversal через relay+dcutr, P2P file-sync без S3, sharing между пользователями, план внедрения и трейдоффы) вынесен в GitLab-issue #47.

Ссылки