Как полный узел решает, какие исходящие одноранговые узлы иметь?

Я понимаю, что полный узел может иметь до 10 исходящих подключений (8 пиров с полной ретрансляцией и 2 пира только с блочной ретрансляцией). Интересно, как мой полный узел решает, к каким узлам подключаться для исходящего трафика. Какие критерии выбора использует узел, чтобы оценить, хорош ли пир?

Если я хочу подключиться к новому определенному одноранговому узлу (скажем, я знаю IRL владельца узла или что-то в этом роде), но я уже достиг своей исходящей емкости, какие конкретные критерии использует мой узел, чтобы решить, какой исходящий одноранговый узел отбросить, чтобы освободить место? для нового сверстника?

Ответы (1)

Адреса для исходящих соединений обычно выбираются случайным образом. Фильтрация адресов происходит в тот момент, когда адреса впервые получены узлом, прежде чем они будут добавлены в базу данных адресов. Этот фильтр проверяет, какие услуги предлагают узлы, в какой сети они находятся (например, IPv4, IPv6, TOR) и время, когда они последний раз были замечены. Ваш узел будет хранить последние адреса, использовать сеть, к которой подключен ваш узел, и предлагать полные услуги узла ( NODE_NETWORKи NODE_NETWORK_LIMITED). Мы также избегаем узлов, которые были недавно отключены или заблокированы.

Эти адреса хранятся в сегментах. Эти сегменты основаны на /16 для IPv4 и /32 для IPv6. В дальнейшем эти корзины будут определяться Автономной системой .

При выполнении исходящих соединений узлы в основном выбираются случайным образом. Ваш узел гарантирует, что каждый исходящий узел принадлежит разным корзинам. Если выбран узел, принадлежащий корзине, у которой уже есть исходящее соединение, он пропускается. Мы также стараемся выбирать узлы, к которым мы еще не пытались подключиться в последнее время, если у нас не было много неудачных попыток подключения. Наконец, ваш узел попытается подключиться к узлам, используя порт по умолчанию, если не было много неудачных попыток подключения.

Для узлов, которые вы специально добавляете с помощью addnode, эти узлы не занимают стандартные слоты исходящих подключений. Есть дополнительные 8 слотов для подключения дополнительных узлов. Если они заполнены, то добавляемый узел будет просто ждать, пока один из этих узлов не отключится, прежде чем будет предпринята попытка подключения к нему. Таким образом, исходящих пиров вообще не пинают.

@ Энди Чоу, я понимаю, что это старый пост, но что касается проверок фильтров, которые определяют услуги, которые могут предлагать узлы, не могли бы вы помочь уточнить доступные услуги? Вы имеете в виду роли полных узлов и облегченных клиентов, где полные узлы могут полностью проверять транзакции/блоки и помогать облегченным узлам передавать свои транзакции в сеть и уведомлять их, когда транзакция затрагивает их кошелек? Глядя на подключенные пиры через мое биткойн-ядро, есть ли способ определить, являются ли пиры полными узлами или облегченными узлами?
Флаги @TuanP Sservice указывают, что узел может отправлять по сети, но не проверяют ли они что-либо отправленное. В настоящее время используются 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), но нет никаких гарантий.
Большое спасибо! Я использовал getpeerinfo через консоль и смог получить имена служб, как описано. "servicesnames": [ "NETWORK", "WITNESS", "NETWORK_LIMITED" ], есть ли какая-либо важная информация относительно параметра "тип подключения"? От своих пиров я получил: "connection_type": "outbound-full-relay" (это самый значимый тип для моих пиров ~80%), и "connection_type": "block-relay-only"
@TuanP Нет, нет. Это просто то, что ваш узел настроил для этого конкретного соединения. Некоторые соединения ограничены только блочной ретрансляцией, будь то потому, что одноранговый узел запросил его, или ваш узел экономит пропускную способность. Это не имеет никакого отношения к предлагаемым услугам и тому, проверяет ли партнер.