Я думал об этом какое-то время и не могу понять часть сети.
Предположим, что я являюсь узлом, который был отключен в течение 5 месяцев, и я хочу получить новые блоки. Когда я передаю сообщение getblocks, его видят разные узлы, все ли мои одноранговые узлы отвечают или некоторые из них отвечают, а другие игнорируют его из-за других ответов? И если все они ответят, будет ли мой узел выбирать, от каких из них он хочет получить данные, или он получит данные от всех? Если он получит данные от всех, то не сильно ли это замедлит работу системы и создаст намного больше трафика в сети?
Узел не знает о других узлах, к которым подключен один из его одноранговых узлов. Они ответят всем, что ваш узел запрашивает у них, даже если в конечном итоге это будут дубликаты блоков.
Поскольку сетевые соединения являются прямыми потоками, ваш узел точно знает, что он отправил и получил от каждого из своих одноранговых узлов. Таким образом, ваш узел будет выбирать одноранговые узлы, с которых он хочет загружать блоки, и отправлять им конкретные запросы для этих блоков. Поскольку Bitcoin Core использует первую синхронизацию заголовков, нет необходимости просто отправлять сообщение getblocks; вместо этого он может использовать сообщения getdata для запроса определенных блоков и распределения загрузки по нескольким одноранговым узлам.
В предыдущих версиях Bitcoin Core он выбирал один узел для синхронизации и загружал все блоки только с этого узла. Однако такое поведение больше не используется, хотя оно по-прежнему является частью протокола и все еще может выполняться.
ага эбрахими
Эндрю Чоу