HMP / structured_md /docs /dht_protocol.md
GitHub Action
Sync from GitHub with Git LFS
1bd0039
|
raw
history blame
5.26 kB
---
title: DHT Protocol Specification (Draft)
description: '## 1. Общие положения * DHT-протокол предназначен для обмена информацией
о пирах между агентами. * Используется **DID** (Decentralized Identifier) как уникальный
идентификатор агента. * Для проверки ...'
type: Article
tags:
- Agent
- JSON
---
# DHT Protocol Specification (Draft)
## 1. Общие положения
* DHT-протокол предназначен для обмена информацией о пирах между агентами.
* Используется **DID** (Decentralized Identifier) как уникальный идентификатор агента.
* Для проверки подлинности применяется криптоподпись (публичный/приватный ключ).
* Для защиты от спама/флуда используется **Proof-of-Work (PoW)**.
* Каждый агент может иметь несколько сетевых интерфейсов (адресов).
* У агента может быть только **одна устойчивая пара DID + pubkey**.
---
## 2. Интерфейсы
Формат интерфейса:
```json
{
"addr": "tcp://1.2.3.4:4000",
"nonce": 123456,
"pow_hash": "abcd1234...",
"difficulty": 22,
"datetime": "2025-09-14T21:00:00Z",
"type": "internet"
}
```
### Поддерживаемые протоколы
* `tcp://`
* `udp://`
### Поле `type` (опционально)
* `localhost` — адреса локальной машины.
* `lan:[маска_подсети]` — локальная сеть, пример: `lan:192.168.10.0`.
(Один агент может иметь несколько сетевых интерфейсов и, соответственно, несколько LAN-сегментов.)
* `internet` — обычное TCP/UDP-подключение через глобальную сеть.
* `yggdrasil` — узел доступен через Yggdrasil overlay.
* `i2p` — узел доступен через I2P.
### Правила
* Если `port = 0` → интерфейс считается **отключённым**.
* Корректный интерфейс с более новой датой заменяет аналогичный старый (после проверки PoW).
* При обмене рекомендуется **не передавать локальные интерфейсы** в Интернет (исключение: Yggdrasil и I2P).
---
## 3. Proof-of-Work (PoW)
* Каждый интерфейс сопровождается PoW.
* Сложность PoW должна быть выбрана так, чтобы генерация занимала **несколько минут** (операция нечастая).
* Поля:
* `nonce` — число, подобранное агентом.
* `pow_hash` — хэш значения (`addr + nonce`).
* `difficulty` — число ведущих нулей (или иное условие).
---
## 4. Сообщения
### 4.1 DISCOVERY
Используется для объявления себя в локальной сети.
```json
{
"type": "DISCOVERY",
"id": "did:example:123",
"name": "Agent_X",
"pubkey": "base58...",
"addresses": [ { ... }, { ... } ]
}
```
### 4.2 PEER\_EXCHANGE\_REQUEST / RESPONSE
Запрос и обмен известными пирами.
```json
{
"type": "PEER_EXCHANGE_REQUEST",
"id": "did:example:123",
"name": "Agent_X",
"addresses": [ { ... } ]
}
```
Ответ:
```json
[
{
"id": "did:example:456",
"name": "Agent_Y",
"pubkey": "base58...",
"addresses": [ { ... } ]
}
]
```
---
## 5. Обработка ошибок и нестыковок
* **Разные pubkey для одного DID** → принимается **первый**, остальные игнорируются.
* **Адрес подписан чужим ключом** → запись отклоняется.
* **Адрес без PoW / с некорректным PoW** → запись отклоняется.
* **Несколько интерфейсов** → сохраняются все; новый с более свежей датой заменяет старый.
---
## 6. Безопасность
* Для всех сообщений требуется **подпись отправителя** (в будущем: обязательная проверка).
* Сообщения без подписи или с невалидным PoW могут игнорироваться.
* В перспективе можно добавить шифрование трафика (например, на уровне TCP/TLS или QUIC).
---
> ⚡ [AI friendly version docs (structured_md)](../index.md)
```json
{
"@context": "https://schema.org",
"@type": "Article",
"name": "DHT Protocol Specification (Draft)",
"description": "# DHT Protocol Specification (Draft) ## 1. Общие положения * DHT-протокол предназначен для обмена ..."
}
```