Основной биткойн-клиент ограничивает количество исходящих подключений до 8, но допускает общее количество подключений до 125. Для достижения более 8 подключений (из-за исходящих ограничений) требуется либо использование uPnp, либо переадресация портов, чтобы клиент мог принимать входящие подключения.
Почему существует ограничение в 8 подключений и только на исходящие подключения? Почему бы не разрешить клиенту создавать 20 или 125 исходящих подключений?
Это проблема наследия.
Когда сеть была впервые внедрена, ощущалась острая нехватка серверов, которые могли бы надежно принимать входящие соединения. Многие запускали клиент за NAT и не могли принимать входящие соединения. Тем временем они потребляли доступную пропускную способность входящих подключений более ограниченного числа машин, которые могли их принять. Теперь клиент по умолчанию включает обход uPNP.
Во-вторых, были проблемы с клиентским кодом, из-за которых он не мог поддерживать столько соединений, сколько должен был поддерживать. Многие узлы не могли даже поддерживать 125 подключений по умолчанию, хотя их использование ЦП и сети было далеко не максимальным.
В эти дни это просто застряло. Мои исправления «режима концентратора» позволяют клиентам легко поддерживать 1500 подключений. Но они почти никогда не видят более 200 клиентов, потому что ограничения пропускной способности сети давно сняты.
Вам необходимо достаточное количество исходящих подключений, потому что злоумышленник может использовать все ваши слоты для входящих подключений, постоянно подключаясь к вам и оставаясь на связи с различных IP-адресов. Биткойн-клиент на самом деле имеет код, чтобы попытаться получить разнообразие IP-адресов в своих исходящих соединениях, чтобы защитить от какой-то сущности, создающей миллион серверов и имеющей высокие шансы получить все 8 ваших исходящих слотов.
Если вы параноик, включите это. Вы по-прежнему можете настроить 32 исходящих соединения, если взамен вы также можете добавить не менее 64 слотов входящих соединений. Вы будете помогать сети. Для этого вы можете использовать мои патчи режима концентратора.
Биткойн-клиент, который принимает входящие соединения, позволяет называть его сервером, может принимать ограниченное их количество. Предполагая, что количество клиентов больше, чем количество серверов, если у клиентов нет жестких ограничений на количество исходящих подключений, это приведет к перегрузке серверов и отказу в доступе к данным блокчейна для некоторых клиентов.
Для иллюстрации представьте себе ситуацию, когда в сети есть только один сервер и много биткойн-клиентов, если клиенты могут резервировать столько подключений к серверу, сколько они хотят, что наверняка предотвратит подключение некоторых клиентов к серверу.
константы для установки количества соединений находятся в src/net.h
static const int MAX_OUTBOUND_CONNECTIONS = 8;
в репозитории на github: https://github.com/bitcoin/bitcoin/blob/3bf06e9bac57b5b5a746677b75e297a7b154bdbd/src/net.h#L59
изменить на то, что вам нравится, и перекомпилировать
Смерть И Налоги
Дэвид Шварц