目錄
一、比特幣網絡架構
1.1 節點加入與離開
二、消息傳播方式
三、交易處理機制
四、網絡傳播問題
五、實際應用問題及解決
本章節講比特幣網絡的工作原理,講解新創建的區塊是如何在比特幣網絡中傳播的。
一、比特幣網絡架構
比特幣工作在應用層,底層是 p2p 網絡,運行比特幣協議。其 p2p 網絡中所有節點對等,無超級節點或主節點。
- 工作層次:比特幣工作在應用層,其底層是一個 P2P(點對點)網絡。在應用層上運行比特幣協議,而在底層的網絡層運行的是 P2P 類型的網絡。
- 節點特性:比特幣的 P2P 網絡非常簡單,所有節點都是對等的,不存在像其他某些 P2P 網絡中所謂的超級節點(super node)或者主節點(master node)。這種設計使得網絡更加去中心化,每個節點在網絡中的地位平等,沒有特殊的控制節點。
- 節點的加入:若要加入比特幣網絡,首先必須知道至少一個種子節點,然后與這個種子節點建立聯系。種子節點會告知新節點它所知道的網絡中的其他節點信息。節點之間通過 TCP(傳輸控制協議)來進行通信,這樣做的好處是有利于穿透防火墻,便于節點之間建立穩定的連接,順利加入網絡。
- 節點的離開:當節點要離開比特幣網絡時,不需要進行任何特殊操作,也不用通知其他節點,只需直接退出自身的應用程序即可。其他節點在一段時間內沒有收到該節點的消息后,就會將其從自身的節點列表中刪除。這種機制使得節點的離開過程非常簡便,不會對網絡的運行產生復雜的影響。
通過這些架構特點,比特幣網絡構建了一個相對簡單、去中心化且節點進出自由的 P2P 網絡環境,為比特幣系統的運行提供了基礎的網絡支撐。
1.1 節點加入與離開
新節點加入網絡需知道至少一個種子節點,通過 tcp 通信建立連接;離開時無需通知其他節點,直接退出應用程序,一段時間后其他節點長時間無法與其建立通訊后就會將其刪除。
- 節點的加入:
- 前提條件:想要加入比特幣網絡的節點,首先要獲取至少一個種子節點的相關信息,即必須知道至少有一個種子節點的存在。
- 建立連接:與已知的種子節點取得聯系。種子節點在收到新節點的連接請求后,會將自己所知曉的網絡中其他節點的信息告知新節點。
- 通信方式:節點之間采用 TCP(傳輸控制協議)進行通信。TCP 協議的優勢在于其能夠更好地穿透防火墻,保證節點之間通信的穩定性和可靠性,使得新節點能夠順利地與其他節點建立連接,融入比特幣網絡。
- 節點的離開:
- 操作簡便:當某個節點想要離開比特幣網絡時,無需進行專門的操作來通知其他節點。節點只需直接退出自身運行的比特幣應用程序即可。
- 自動刪除:對于網絡中的其他節點而言,在一段時間內如果沒有接收到該節點發送的消息,它們就會判定該節點已經離開網絡,并自動將該節點從自己維護的鄰居節點集合中刪除。這種機制使得節點的離開過程對網絡的影響較小,并且實現起來相對簡單,不需要復雜的通知和確認流程。
這種節點加入與離開的機制,既保證了新節點能夠方便快捷地接入比特幣網絡,又使得節點離開時不會對網絡造成過多的干擾,維持了比特幣網絡的動態穩定性和運行效率。
二、消息傳播方式
每個節點維護鄰居節點集合,消息傳播采用 flooding 方式,首次收到消息時轉發給所有鄰居節點并記錄,再次收到則不再轉發。節點選取隨機,不考慮底層拓撲結構,雖增強了魯棒性,但犧牲了效率。
- 鄰居節點集合維護:比特幣網絡中的每個節點都需要維護一個鄰居節點的集合。這個集合記錄了該節點所連接和知曉的其他節點信息,是消息傳播的基礎網絡結構。
- 消息傳播機制(flooding 方式):采用 flooding(泛洪)方式進行消息傳播。當一個節點第一次接收到某個消息時,它會將這個消息轉發給除了消息來源節點之外的所有其他鄰居節點。通過這種方式,消息能夠迅速在網絡中擴散開來。
- 消息記錄與重復處理:節點在轉發消息的同時,會對已接收的消息進行記錄。當再次收到相同的消息時,節點會識別出該消息已經接收過,此時就不會再將其轉發給鄰居節點。這樣可以避免消息在網絡中無限循環傳輸,減少網絡資源的浪費。
- 節點選取特點:鄰居節點的選取是隨機的,不考慮底層的拓撲結構。例如,一個位于加利福尼亞的節點,它所選擇的鄰居節點可能遠在阿根廷。這種隨機選取的方式雖然犧牲了一定的效率,但增強了網絡的魯棒性。因為不依賴于特定的拓撲結構,即使部分節點出現問題或者網絡局部發生變化,消息仍然有較大概率能夠通過其他路徑傳播,保證了網絡的可靠性和穩定性。
- 對效率的影響:由于不考慮底層拓撲結構,在這種消息傳播方式下,節點向身邊的人轉賬和向美國轉賬的速度在網絡傳播層面上其實差不多。也就是說,這種設計雖然增強了魯棒性,但在一定程度上犧牲了消息傳播的效率,無法根據節點之間的實際距離或網絡拓撲優化傳播路徑,可能導致一些不必要的長距離消息傳輸。
通過以上消息傳播方式,比特幣網絡在保證消息能夠盡可能廣泛傳播的同時,也在一定程度上控制了消息的重復傳輸和資源消耗,以簡單的設計實現了相對可靠的網絡通信,適應了比特幣網絡去中心化的特點。
三、交易處理機制
每個節點維護等待確認(等待寫入區塊鏈)的交易集合,收到合法交易(有合法簽名且未被花費過)加入集合并轉發,若收到沖突交易則根據情況判斷處理。新發布的區塊傳播方式與交易類似,節點需檢查區塊內容合法性及是否在最長合法鏈上,比特幣協議限制區塊大小為一兆字節,因網絡傳播方式受帶寬限制,大區塊傳播速度慢。
- 等待確認交易集合的維護:比特幣系統中,每個節點都要維護一個等待確認的交易集合。這個集合用于暫存那些已經接收到但尚未被包含在區塊中進行確認的交易。
- 新交易的處理:當節點第一次聽到某個交易時,會對該交易進行合法性檢查。如果該交易具有合法的簽名,并且所使用的幣以前沒有被花費過(即不存在雙花問題),那么這個交易就被認為是合法的。合法的交易將被加入到等待確認的交易集合中,并且節點會把這個交易轉發給它的鄰居節點。此后,當再次收到相同的交易時,就無需再進行轉發,避免了交易在網絡上的無限傳輸。
- 沖突交易的處理(race condition):存在一種情況,即可能有兩個有沖突的交易差不多同時被廣播到網絡上。例如,一個交易是 A 轉錢給 B,另一個交易是 A 轉錢給 C,且假設他們花的是同一個幣。由于網絡傳播的延遲和節點位置的不同,不同節點接收這兩個交易的順序會有所差異。
- 對于先收到 A 轉給 B 交易的節點,會將其加入等待確認的交易集合。當后續收到 A 轉給 C 的交易時,由于與已存在的交易沖突,這個交易就會被判定為非法,節點會忽略它。
- 而對于先收到 A 轉給 C 交易的節點,會將其加入集合,此時若再收到 A 轉給 B 的交易,這個交易就不能被加入集合,并且之前已加入的與當前沖突的交易(比如 A 轉給 C 的交易)可能需要從集合中刪掉。
- 交易從集合中刪除的情況:當節點聽到一個新發布的區塊時,如果等待確認交易集合中的某個交易被包含在這個新區塊中,那么該交易就可以從集合中刪掉,因為它已經得到了確認。另外,如果新發布的區塊中包含了與集合中某個交易沖突的交易,那么集合中對應的沖突交易也需要被刪除,因為此時該交易已被證明為非法(已被寫入區塊的交易具有更高的優先級和合法性)。
通過以上交易處理機制,比特幣網絡能夠有效地管理和處理交易,在存在網絡延遲和交易沖突的情況下,盡可能保證交易的合法性和一致性,為比特幣系統的正常運行提供了重要的基礎保障。
四、網絡傳播問題
比特幣網絡傳播屬于 best effort,交易發布后不一定所有節點都能收到,且不同節點收到交易的順序可能不同,網絡傳播存在延遲,部分節點可能不按協議轉發,導致合法交易收不到或轉發不合法交易。
- 傳播特性(best effort):比特幣網絡的傳播屬于 “best effort”(盡力而為)類型。這意味著一個交易發布到比特幣網絡上后,并不能保證所有的節點都能收到該交易。而且,不同的節點接收到這個交易的順序也不一定是相同的。這種不確定性是由比特幣網絡的去中心化特性以及其采用的傳播方式所決定的。
- 網絡傳播延遲:網絡傳播存在延遲,并且有時這種延遲可能會很長。由于比特幣網絡中的節點數量眾多,分布廣泛,且消息傳播采用泛洪(flooding)等方式,交易或區塊消息從一個節點傳播到其他所有節點需要一定的時間。在這個過程中,不同節點接收到消息的時間會有較大差異,導致整個網絡在信息同步上存在一定的滯后。
- 節點不按協議轉發問題:并非所有節點都會嚴格按照比特幣協議的要求進行轉發操作。有些節點可能不轉發應該轉發的合法交易,這可能導致某些節點無法接收到這些合法交易信息,影響交易的正常處理和確認。同時,也有一些節點可能會轉發一些不合法的交易,例如存在雙花問題或者簽名不合法的交易。這種情況破壞了網絡中交易信息的一致性和合法性,給比特幣系統的運行帶來了潛在風險。
- 對系統的影響及本質:這些網絡傳播問題是去中心化系統中面臨的實際問題。在去中心化的比特幣網絡中,沒有一個中心機構來統一管理和協調節點的行為,每個節點都有一定的自主性,這就不可避免地會出現上述問題。這些問題的存在對交易的可靠性和整個比特幣系統的穩定性構成了挑戰,需要通過一定的機制(如共識機制等)來盡量減少其影響,確保系統的正常運行。
比特幣網絡傳播方面存在的這些問題,反映了去中心化系統在信息傳播和節點行為管理上的復雜性和挑戰,也凸顯了比特幣系統中其他機制(如共識機制、交易驗證機制等)對于保障系統安全和穩定運行的重要性。
五、實際應用問題及解決
比特幣交易存在雙花攻擊風險,惡意節點可能通過算力優勢使分叉鏈成為最長合法鏈。交易完成后,若商家不發貨,比特幣系統內部無法解決,可選擇找信譽良好的商家交易,或向銷售平臺投訴。此外,出現糾紛時可通過產生新的交易(如退款交易)解決,無需回滾原交易。
- 雙花攻擊問題及節點行為分析:惡意節點可能實施雙花攻擊,比如將已經花過的錢再重新花一遍。為達成目的,惡意節點可能會采用各種手段將重復花費的交易轉發到各個節點上。正常節點從理論上不應該轉發非法交易,但實際上并非所有節點都按規則行事。若惡意節點算力足夠強,存在將分叉鏈變成最長合法鏈的可能性,從而使雙花攻擊成功。這體現了在比特幣網絡中,部分節點的不規范行為以及算力在共識達成中的影響,對交易的安全性構成威脅。
- 支付后商家不發貨問題:當用戶作為付錢方完成比特幣轉賬交易,且交易被確認寫入區塊后,存在商家不發貨的情況。在比特幣系統中,一旦交易被記錄在區塊里,就無法像傳統系統那樣直接回滾交易來解決問題。因為回滾交易的成本對于普通用戶來說可能遠遠超過支付金額,例如用戶支付幾百塊購買商品,想要回滾交易消耗的資源可能遠超該數額。
- 問題性質及與其他支付系統對比:這類商家不發貨的問題屬于線下問題,即使是傳統的支付系統,如銀行轉賬或支付寶支付,也存在類似情況。當用戶支付后商家不提供商品或服務,支付系統內部無法自動解決,用戶無法直接讓交易回滾。這表明無論是去中心化的比特幣系統,還是中心化的傳統支付系統,在處理線下交易糾紛方面都存在局限性,無法單純依靠支付系統自身來保證交易雙方都履行義務。
- 解決方法:
- 選擇信譽良好的商家:用戶在交易時可以盡量選擇比較靠譜、有信譽的大商家進行交易。因為對于有信譽的商家而言,若經常出現不發貨等欺詐行為,會損害其商業聲譽,導致客戶流失,影響其長期利益,所以它們更有可能遵守交易規則。
- 向平臺投訴:如果商家是在某個銷售平臺上進行銷售,例如類似淘寶這樣的平臺,用戶可以向該平臺進行投訴。銷售平臺為了維護自身的信譽和正常運營,通常會對商家的行為進行監管和處理,幫助用戶解決糾紛。
- 產生新交易解決糾紛:比特幣系統中,當出現交易糾紛時,并非通過回滾交易來解決。例如用戶把比特幣轉給商家后商家不發貨,若商家承認錯誤并愿意退款,他可以把比特幣再轉回給用戶。從底層比特幣系統來看,后一個交易可被理解為對前一個交易的退款,這種方式不需要回滾交易,而是通過產生新的交易來實現資金的退還和糾紛的解決 。
?相關文章:【BTC】密碼學原理-CSDN博客
? ? ? ? ? ? ? ?? ?【BTC】數據結構-CSDN博客
? ? ? ? ? ? ? ?? ?【BTC】協議(共識機制)-CSDN博客
? ? ? ? ? ? ??? ??【BTC】比特幣系統的具體實現-CSDN博客