Attack

是什麼保護記憶體池免受 DDOS 攻擊?

  • April 2, 2017

記憶體池目前似乎包含近 6 萬筆未經確認的交易,而且這個數字似乎還在增長。根據這個問題,似乎最終清除了未經確認的交易。

其他答案表明,通過嘗試用自己的交易填充區塊來阻礙其他人的交易是不切實際的。然而,這個問題並沒有提到節點在處理過多的交易時將面臨的問題(根本不考慮它們被包含在塊中)。

惡意使用者是否有可能向網路發送大量交易(比如從同一個有效地址),目的是增加節點記憶體池的大小,從而導致問題?有沒有發生過這樣的事情?

或者清除發生的速度是否足夠快,未使用的交易是否足夠小,以至於不斷增長的記憶體池不會成為網路節點的問題?是否有任何其他常見的功能可以防止記憶體池膨脹?

首先,沒有“記憶體池”。每個完整節點都有一個單獨的記憶體池,並且由於這些記憶體池不包含已經在塊中的交易(已確認的交易),根據定義,節點不能保證就它達成一致。所以,你看到的是 blockchain.info 的記憶體池,它可能與其他節點的記憶體池相似,也可能不同。

什麼會導致記憶體池之間的差異?一個明顯的例子是雙花:不允許有衝突的交易,所以如果兩個不同的交易花費相同的輸入被廣播到網路的不同地方,一些會接受一個,另一些會接受另一個,基於他們首先聽到的。不過,這不是唯一的區別。節點也可以有不同的記憶體池接受策略。

節點的記憶體池最終是它對中短期內可以合理確認的交易的期望。良好的記憶體池接受政策正試圖模擬這種期望。如果一筆交易的費用非常低,那麼如果有大量費用較高的交易需要先探勘,則可能不值得保留。

這就是在 Bitcoin Core 0.12 中添加的記憶體池 DoS 保護的基礎。粗略地說,每當 mempool 的記憶體使用量超過某個預先配置的大小(-maxmempool設置)時,我們就會踢出費用最低的交易,並(暫時)將未來進入的最低費用增加到被驅逐的交易。這解決了無限記憶體使用的問題。

但是頻寬呢?像 BIP125 和上面描述的這種驅逐本質上導致能夠繼續廣播交易,並讓它們被接受並替換其他交易,而無需真正支付任何費用。我說在這裡付款,因為我們基於記憶體池政策決策的基本規則是,因為我們希望記憶體池中的交易得到確認,從而支付他們的費用。因此,我們需要一個規則,即無論何時從記憶體池中驅逐某些東西(出於確認之外的任何其他原因),其他東西都會為該中繼支付“某些東西”。在實踐中,這是通過單獨配置的中繼費率(在記憶體池滿時不會改變)來實現的,它指定了中繼的“價格”。在記憶體池驅逐的情況下,

引用自:https://bitcoin.stackexchange.com/questions/51205