Использование
Обзор
Все узлы сети имеют идентичную базу данных, что позволяет клиентам взаимодействовать с любым узлом без опасений несогласованности данных. Клиент может переключаться между узлами "внутри сессии", может использовать API для повышения производительности или для дополнительной проверки "честности" узла. Один и тот же метод API можно вызвать на двух или более узлах, чтобы убедиться, что данные согласованы и корректны.
Со стороны клиента сеть узлов может быть представлена как единое облако со стандартизированным API. Вот несколько парадигм, которые должен обеспечивать каждый узел в таком облаке:
- Узел должен обеспечивать доступ к облаку как минимум с одной точкой входа, предоставляя минимальный API для работы с данными.
- Узел должен иметь минимальный набор публичного сервисного API (getnodeinfo, getpeerinfo).
- Узел должен иметь механизмы валидации базы данных - например, сумму всех рейтингов или хеш данных.
Публичный доступ
Узел должен обеспечивать доступ к API следующими способами:
- HTTP через порт
38081
- WS TCP через порт
38082
- WS UDP через порт
38083
- WS TCP через динамический порт, определяемый методом STUN с использованием пиров с внешне доступными интерфейсами 1-3
- WS UDP через динамический порт, определяемый методом STUN с использованием пиров с внешне доступными интерфейсами 1-3
Порты STUN
Для реализации доступа к узлу через NAT, узел должен запустить UDP или TCP сокет для определения своего внешнего IP-адреса (STUN-Address
) и порта (STUN-Port
), которые могут отличаться из-за использования маршрутизации NAT.
Для реализации этого механизма узел должен запустить один сокет STUN-Server
и N STUN-Client
сокетов, по одному для каждого подключенного пира.
Сокет STUN-Server
действует как STUN-сервер и помогает другим узлам определить их внешний IP и порт.
Сокеты STUN-Client
используются для определения внешнего IP-адреса узла и "резервирования" порта в таблице маршрутизации NAT.
Таким образом, каждый узел, помимо локального IP-адреса и статических открытых портов, может получить внешний IP-адрес и набор портов для внешних подключений. Пока узел поддерживает соединение с пиром, порт остается открытым, и в большинстве случаев NAT будет пропускать входящие запросы на подключение от клиентов.
Узлы должны обеспечивать обмен информацией об известных данных STUN между узлами и клиентами:
API методы
getnodeinfo
иgetpeerinfo
должны возвращать данныеSTUN
Узлы должны получать и отправлять свои данные
STUN
известным пирамУзлы должны сохранять данные
STUN
пиров, запросивших данные черезSTUN-Server