Почему основной клиент ограничивает количество исходящих подключений до 8?

Основной биткойн-клиент ограничивает количество исходящих подключений до 8, но допускает общее количество подключений до 125. Для достижения более 8 подключений (из-за исходящих ограничений) требуется либо использование uPnp, либо переадресация портов, чтобы клиент мог принимать входящие подключения.

Почему существует ограничение в 8 подключений и только на исходящие подключения? Почему бы не разрешить клиенту создавать 20 или 125 исходящих подключений?

Ответы (3)

Это проблема наследия.

Когда сеть была впервые внедрена, ощущалась острая нехватка серверов, которые могли бы надежно принимать входящие соединения. Многие запускали клиент за NAT и не могли принимать входящие соединения. Тем временем они потребляли доступную пропускную способность входящих подключений более ограниченного числа машин, которые могли их принять. Теперь клиент по умолчанию включает обход uPNP.

Во-вторых, были проблемы с клиентским кодом, из-за которых он не мог поддерживать столько соединений, сколько должен был поддерживать. Многие узлы не могли даже поддерживать 125 подключений по умолчанию, хотя их использование ЦП и сети было далеко не максимальным.

В эти дни это просто застряло. Мои исправления «режима концентратора» позволяют клиентам легко поддерживать 1500 подключений. Но они почти никогда не видят более 200 клиентов, потому что ограничения пропускной способности сети давно сняты.

Вам необходимо достаточное количество исходящих подключений, потому что злоумышленник может использовать все ваши слоты для входящих подключений, постоянно подключаясь к вам и оставаясь на связи с различных IP-адресов. Биткойн-клиент на самом деле имеет код, чтобы попытаться получить разнообразие IP-адресов в своих исходящих соединениях, чтобы защитить от какой-то сущности, создающей миллион серверов и имеющей высокие шансы получить все 8 ваших исходящих слотов.

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

Спасибо. Так почему же разработчики не увеличили лимит в основном клиенте? Можно было бы подумать, что с каждой версией они будут вносить некоторые коррективы. Глядя на раздел для новичков на форуме Bitcointalk, можно заметить, что медленная и нестабильная загрузка блокчейна — это постоянная проблема. По мере того, как цепочка блоков прекращает свое существование, ограничения в 8 соединений кажутся мне все более и более архаичными. По крайней мере, увеличение его до 16 позволит увеличить пропускную способность для новых клиентов.
Я думаю, что медленная скорость синхронизации блоков связана с двумя проблемами, ни одна из которых не связана с ограничением количества подключений. Одной из них была ошибка, которая была исправлена, но старые клиенты по-прежнему портят новые. Во-вторых, клиент проверяет каждый блок, каждый хэш и каждую транзакцию. Существует более 100 000 блоков, и обычные ПК не могут проверять более 15 блоков в секунду.

Биткойн-клиент, который принимает входящие соединения, позволяет называть его сервером, может принимать ограниченное их количество. Предполагая, что количество клиентов больше, чем количество серверов, если у клиентов нет жестких ограничений на количество исходящих подключений, это приведет к перегрузке серверов и отказу в доступе к данным блокчейна для некоторых клиентов.

Для иллюстрации представьте себе ситуацию, когда в сети есть только один сервер и много биткойн-клиентов, если клиенты могут резервировать столько подключений к серверу, сколько они хотят, что наверняка предотвратит подключение некоторых клиентов к серверу.

константы для установки количества соединений находятся в src/net.h

static const int MAX_OUTBOUND_CONNECTIONS = 8;

в репозитории на github: https://github.com/bitcoin/bitcoin/blob/3bf06e9bac57b5b5a746677b75e297a7b154bdbd/src/net.h#L59

изменить на то, что вам нравится, и перекомпилировать