File size: 5,261 Bytes
1bd0039 e991e15 973e821 1bd0039 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 | ---
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-протокол предназначен для обмена ..."
}
```
|