Bitcoin-Core
請求塊
我一直在考慮這個問題,似乎無法理解網路的一部分。
假設我是一個已經離線 5 個月的節點,我想檢索新塊。當我廣播 getblocks 消息時,不同的節點會看到它,我的所有對等節點是否都響應或其中一些響應而其他節點因為其他響應而忽略它?如果他們都回复,我的節點會選擇它想要從哪個/那些獲取數據,還是從所有節點獲取數據?如果它從所有這些人那裡獲取數據,那麼這不會大大降低系統速度並在網路上產生更多流量嗎?
一個節點不知道其對等點之一連接到的其他節點。他們將響應您的節點向他們提出的任何請求,即使這最終成為重複塊。
因為網路連接是直接流,所以您的節點確切地知道它向每個對等點發送和接收的內容。因此,您的節點將選擇它想要從中下載塊的對等點,並向他們發送對這些塊的特定請求。由於 Bitcoin Core 使用 headers first sync,因此無需發送 getblocks 消息;相反,它可以使用 getdata 消息來請求特定塊並將下載分散到多個對等方。
在以前版本的比特幣核心中,它會選擇一個節點來同步並從該節點下載所有塊。然而,這種行為不再發生,儘管它仍然是協議的一部分並且仍然可以完成。