Bitcoin-Core
全節點如何決定擁有哪些出站節點?
我了解一個完整節點最多可以有 10 個出站連接(8 個完整中繼對等點和 2 個僅塊中繼對等點)。我想知道我的完整節點如何決定連接到哪些節點以進行出站。節點用於評估對等點是否良好的選擇標準是什麼?
如果我想連接到一個新的特定對等點(假設我知道節點的所有者 IRL 或其他東西)但我已經達到了我的出站容量,我的節點使用什麼特定標準來決定刪除哪個出站對等方以騰出空間為新同行?
出站連接的地址在很大程度上是隨機選擇的。在地址被添加到地址數據庫之前,節點首先接收到地址時進行地址過濾。此過濾器檢查節點提供的服務、它們所在的網路(例如 IPv4、IPv6、TOR)以及報告它們最後一次被看到的時間。您的節點將選擇儲存最近的地址,使用您的節點連接到的網路,並提供完整的節點服務(
NODE_NETWORK
和NODE_NETWORK_LIMITED
)。我們還避免最近斷開或禁止的節點。這些地址儲存在桶中。這些儲存桶基於 IPv4 的 /16 和 IPv6 的 /32。未來,這些桶將由自治系統決定。
在進行出站連接時,節點基本上是隨機選擇的。您的節點將確保每個出站節點屬於不同的儲存桶。如果選擇的節點屬於已具有出站連接的儲存桶,則跳過該節點。我們還嘗試選擇最近沒有嘗試連接的節點,除非我們已經建立了很多失敗的連接嘗試。最後,除非有很多失敗的連接嘗試,否則您的節點將嘗試使用預設埠連接到節點。
對於您專門添加的
addnode
節點,這些節點不佔用標準的出站連接槽。還有額外的 8 個 addnode 連接槽。如果這些已滿,那麼您要添加的節點將簡單地等待,直到其中一個節點斷開連接,然後再嘗試連接。所以根本沒有出站同行的踢。