Bitcoin-Core
全節點在什麼情況下會斷開對等節點?
我知道如果該節點“行為不端”,則完整節點將與該節點斷開連接。例如,如果一個節點發送太多不符合規則(什麼規則?)的消息以及發送大量過期、重複或其他無用消息的節點,節點的連接將被斷開。全節點與對等節點斷開連接的其他原因是什麼?
例如,完整節點是否會與未發送足夠數據的連接斷開連接?
對於要斷開連接的節點,預設閾
banscore
值為 100。在 v0.18 之前的版本中,阻止行為不端的對等方重新連接的預設時間是 86,400 秒或 1 天。但是,這被具有多個 IP 地址的攻擊者規避了。v0.18 版本,如果您有未使用的傳入連接槽,則允許您的節點因不當行為(例如發送無效數據)而自動斷開連接的對等方重新連接到您的節點。如果您的插槽已滿,行為不端的節點將被斷開,以便為沒有問題歷史的節點騰出空間(除非行為不端的節點以其他方式幫助您的節點,例如通過連接到您不使用的 Internet 的一部分) t 有許多其他同行)。
以下是斷開連接或增加
banscore
.
- 在 IBD 期間提供的鏈的工作量少於 minimum-chain-work 的對等點將斷開連接
- 如果節點提供了無效數據,例如變異塊或不符合共識要求的數據
- 如果緊湊塊有一個有效的頭,但包含無效的 txs,那麼對等點不應該受到懲罰
- 如果在無效鏈上,則禁止出站(但不是入站)對等方。
- 無效的標頭、無效的塊檢查點和無效的前一個塊將導致徹底禁止
- 如果前一個塊失去,
banscore
則增加 10。這樣做是為了防止 DoS 攻擊- 如果對等方發送的
getblocktxn
tx 索引越界,將導致禁令- 還有其他與綻放版本和綻放大小相關的項目可能會導致禁令
- 第一條消息應該是版本消息,每個連接只能發送一次版本消息。如果不是,
banscore
則增加 1- 如果節點正在發送超過 1000 個地址的 addr 消息,則
banscore
遞增 20- 發送
inv
超過最大大小的消息,然後banscore
增加 20。- 發送包含超過 2000 個元素的標頭消息,導致增加
banscore
20。- 節點絕不能發送大於 520 字節的數據項,否則行為不端的分數會增加 100
還有其他幾個可能被忽略的原因。您可以出於所有原因在netprocessing.cpp文件中搜尋“行為不端” 。
完整節點是否與未發送足夠數據的連接斷開連接?
不是特別是,但有點是。當鏈提示超過 30 分鐘沒有前進時,全節點假定該提示可能是陳舊的,因此將嘗試連接到額外的出站對等點。有一個定期檢查,以確保如果額外的對等連接正在使用中,節點將斷開最近最少宣布新塊的對等連接。