Peer-Discovery
平均需要多長時間才能發現比特幣網路中的所有其他節點並連接到它們?這有技術障礙嗎?
我想知道一個節點平均需要多長時間才能發現比特幣網路中的所有其他節點並連接到它們?這有技術障礙嗎?
一個節點平均需要多長時間才能發現所有其他節點
沒有普通節點會這樣做。
一個普通節點只與極少數其他節點直接連接(例如,最多 8 個出站節點,最多 125 個入站節點),並依賴這些其他節點將資訊傳遞給它們所接觸的少數節點。通過這種方式,資訊在整個網路中傳播。
由於節點不斷出現和消失,任何联系所有節點的嘗試基本上都是無止境的,或者既不完整又不正確(它包括自發現過程開始以來已被刪除的節點)
發現比特幣網路中的所有其他節點並連接到它們
發現和連接有點不同。要發現一個節點,該節點必須使用
addr
消息通告自己。我相信不接受傳入連接(沒有偵聽埠)的節點不會這樣做,因此除非您的節點偵聽傳入連接並啟動連接,否則無法發現它們。連接到已知節點很簡單,並且是諸如bitnodes之類的統計工具所做的事情,我假設這是您的想法,否則@RedGrittyBrick 沒有意義。
它可以從使用 DNS 播種器的初始對等發現開始,然後通過它們偵聽的埠(幾乎總是主網和測試網的預設 8333 和 18333)與每個節點的 IP 地址建立 TCP 連接並執行握手(
version
+verack
) 這不會超過一秒鐘。可以向每個節點發送一條getaddr
消息,詢問他們知道的節點列表,以建構一個列表並連接到每個節點。我認為遍歷所有可到達的節點(大約 10k)不會超過一分鐘。