Я понимаю, что полный узел может иметь до 10 исходящих подключений (8 пиров с полной ретрансляцией и 2 пира только с блочной ретрансляцией). Интересно, как мой полный узел решает, к каким узлам подключаться для исходящего трафика. Какие критерии выбора использует узел, чтобы оценить, хорош ли пир?
Если я хочу подключиться к новому определенному одноранговому узлу (скажем, я знаю IRL владельца узла или что-то в этом роде), но я уже достиг своей исходящей емкости, какие конкретные критерии использует мой узел, чтобы решить, какой исходящий одноранговый узел отбросить, чтобы освободить место? для нового сверстника?
Адреса для исходящих соединений обычно выбираются случайным образом. Фильтрация адресов происходит в тот момент, когда адреса впервые получены узлом, прежде чем они будут добавлены в базу данных адресов. Этот фильтр проверяет, какие услуги предлагают узлы, в какой сети они находятся (например, IPv4, IPv6, TOR) и время, когда они последний раз были замечены. Ваш узел будет хранить последние адреса, использовать сеть, к которой подключен ваш узел, и предлагать полные услуги узла ( NODE_NETWORK
и NODE_NETWORK_LIMITED
). Мы также избегаем узлов, которые были недавно отключены или заблокированы.
Эти адреса хранятся в сегментах. Эти сегменты основаны на /16 для IPv4 и /32 для IPv6. В дальнейшем эти корзины будут определяться Автономной системой .
При выполнении исходящих соединений узлы в основном выбираются случайным образом. Ваш узел гарантирует, что каждый исходящий узел принадлежит разным корзинам. Если выбран узел, принадлежащий корзине, у которой уже есть исходящее соединение, он пропускается. Мы также стараемся выбирать узлы, к которым мы еще не пытались подключиться в последнее время, если у нас не было много неудачных попыток подключения. Наконец, ваш узел попытается подключиться к узлам, используя порт по умолчанию, если не было много неудачных попыток подключения.
Для узлов, которые вы специально добавляете с помощью addnode
, эти узлы не занимают стандартные слоты исходящих подключений. Есть дополнительные 8 слотов для подключения дополнительных узлов. Если они заполнены, то добавляемый узел будет просто ждать, пока один из этих узлов не отключится, прежде чем будет предпринята попытка подключения к нему. Таким образом, исходящих пиров вообще не пинают.
ТуанП
Эндрю Чоу
NODE_NETWORK
(могут обслуживать всю цепочку блоков),NODE_BLOOM
(могут обслуживать фильтры Блума BIP 37),NODE_WITNESS
(могут обслуживать блоки и tx-сообщения со свидетелями на BIP 144),NODE_COMPACT_FILTERS
(могут обслуживать блочные фильтры BIP 157) иNODE_NETWORK_LIMITED
(могут обслуживать самые последние 288 блоков на BIP 159). Вы можете делать предположения (например, отсутствиеNODE_NETWORK
иNODE_NETWORK_LIMITED
может подразумевать одноранговые SPV), но нет никаких гарантий.ТуанП
Эндрю Чоу