【BTC】比特幣網絡

目錄

一、比特幣網絡架構

1.1 節點加入與離開

二、消息傳播方式

三、交易處理機制

四、網絡傳播問題

五、實際應用問題及解決


本章節講比特幣網絡的工作原理,講解新創建的區塊是如何在比特幣網絡中傳播的。

一、比特幣網絡架構

比特幣工作在應用層,底層是 p2p 網絡,運行比特幣協議。其 p2p 網絡中所有節點對等,無超級節點或主節點。

  1. 工作層次:比特幣工作在應用層,其底層是一個 P2P(點對點)網絡。在應用層上運行比特幣協議,而在底層的網絡層運行的是 P2P 類型的網絡。

  1. 節點特性:比特幣的 P2P 網絡非常簡單,所有節點都是對等的,不存在像其他某些 P2P 網絡中所謂的超級節點(super node)或者主節點(master node)。這種設計使得網絡更加去中心化,每個節點在網絡中的地位平等,沒有特殊的控制節點。
  2. 節點的加入:若要加入比特幣網絡,首先必須知道至少一個種子節點,然后與這個種子節點建立聯系。種子節點會告知新節點它所知道的網絡中的其他節點信息。節點之間通過 TCP(傳輸控制協議)來進行通信,這樣做的好處是有利于穿透防火墻,便于節點之間建立穩定的連接,順利加入網絡。
  3. 節點的離開:當節點要離開比特幣網絡時,不需要進行任何特殊操作,也不用通知其他節點,只需直接退出自身的應用程序即可。其他節點在一段時間內沒有收到該節點的消息后,就會將其從自身的節點列表中刪除。這種機制使得節點的離開過程非常簡便,不會對網絡的運行產生復雜的影響。

通過這些架構特點,比特幣網絡構建了一個相對簡單、去中心化且節點進出自由的 P2P 網絡環境,為比特幣系統的運行提供了基礎的網絡支撐。

1.1 節點加入與離開

新節點加入網絡需知道至少一個種子節點,通過 tcp 通信建立連接;離開時無需通知其他節點,直接退出應用程序,一段時間后其他節點長時間無法與其建立通訊后就會將其刪除。

  • 節點的加入:
    • 前提條件:想要加入比特幣網絡的節點,首先要獲取至少一個種子節點的相關信息,即必須知道至少有一個種子節點的存在。
    • 建立連接:與已知的種子節點取得聯系。種子節點在收到新節點的連接請求后,會將自己所知曉的網絡中其他節點的信息告知新節點。
    • 通信方式:節點之間采用 TCP(傳輸控制協議)進行通信。TCP 協議的優勢在于其能夠更好地穿透防火墻,保證節點之間通信的穩定性和可靠性,使得新節點能夠順利地與其他節點建立連接,融入比特幣網絡。
  • 節點的離開:
    • 操作簡便:當某個節點想要離開比特幣網絡時,無需進行專門的操作來通知其他節點。節點只需直接退出自身運行的比特幣應用程序即可。
    • 自動刪除:對于網絡中的其他節點而言,在一段時間內如果沒有接收到該節點發送的消息,它們就會判定該節點已經離開網絡,并自動將該節點從自己維護的鄰居節點集合中刪除。這種機制使得節點的離開過程對網絡的影響較小,并且實現起來相對簡單,不需要復雜的通知和確認流程。

這種節點加入與離開的機制,既保證了新節點能夠方便快捷地接入比特幣網絡,又使得節點離開時不會對網絡造成過多的干擾,維持了比特幣網絡的動態穩定性和運行效率。

二、消息傳播方式

每個節點維護鄰居節點集合,消息傳播采用 flooding 方式,首次收到消息時轉發給所有鄰居節點并記錄,再次收到則不再轉發。節點選取隨機,不考慮底層拓撲結構,雖增強了魯棒性,但犧牲了效率。

  1. 鄰居節點集合維護:比特幣網絡中的每個節點都需要維護一個鄰居節點的集合。這個集合記錄了該節點所連接和知曉的其他節點信息,是消息傳播的基礎網絡結構。
  2. 消息傳播機制(flooding 方式):采用 flooding(泛洪)方式進行消息傳播。當一個節點第一次接收到某個消息時,它會將這個消息轉發給除了消息來源節點之外的所有其他鄰居節點。通過這種方式,消息能夠迅速在網絡中擴散開來。
  3. 消息記錄與重復處理:節點在轉發消息的同時,會對已接收的消息進行記錄。當再次收到相同的消息時,節點會識別出該消息已經接收過,此時就不會再將其轉發給鄰居節點。這樣可以避免消息在網絡中無限循環傳輸,減少網絡資源的浪費。
  4. 節點選取特點:鄰居節點的選取是隨機的,不考慮底層的拓撲結構。例如,一個位于加利福尼亞的節點,它所選擇的鄰居節點可能遠在阿根廷。這種隨機選取的方式雖然犧牲了一定的效率,但增強了網絡的魯棒性。因為不依賴于特定的拓撲結構,即使部分節點出現問題或者網絡局部發生變化,消息仍然有較大概率能夠通過其他路徑傳播,保證了網絡的可靠性和穩定性。
  5. 對效率的影響:由于不考慮底層拓撲結構,在這種消息傳播方式下,節點向身邊的人轉賬和向美國轉賬的速度在網絡傳播層面上其實差不多。也就是說,這種設計雖然增強了魯棒性,但在一定程度上犧牲了消息傳播的效率,無法根據節點之間的實際距離或網絡拓撲優化傳播路徑,可能導致一些不必要的長距離消息傳輸。

通過以上消息傳播方式,比特幣網絡在保證消息能夠盡可能廣泛傳播的同時,也在一定程度上控制了消息的重復傳輸和資源消耗,以簡單的設計實現了相對可靠的網絡通信,適應了比特幣網絡去中心化的特點。

三、交易處理機制

每個節點維護等待確認(等待寫入區塊鏈)的交易集合,收到合法交易(有合法簽名且未被花費過)加入集合并轉發,若收到沖突交易則根據情況判斷處理。新發布的區塊傳播方式與交易類似,節點需檢查區塊內容合法性及是否在最長合法鏈上,比特幣協議限制區塊大小為一兆字節,因網絡傳播方式受帶寬限制,大區塊傳播速度慢。

  1. 等待確認交易集合的維護:比特幣系統中,每個節點都要維護一個等待確認的交易集合。這個集合用于暫存那些已經接收到但尚未被包含在區塊中進行確認的交易。
  1. 新交易的處理:當節點第一次聽到某個交易時,會對該交易進行合法性檢查。如果該交易具有合法的簽名,并且所使用的幣以前沒有被花費過(即不存在雙花問題),那么這個交易就被認為是合法的。合法的交易將被加入到等待確認的交易集合中,并且節點會把這個交易轉發給它的鄰居節點。此后,當再次收到相同的交易時,就無需再進行轉發,避免了交易在網絡上的無限傳輸。
  2. 沖突交易的處理(race condition):存在一種情況,即可能有兩個有沖突的交易差不多同時被廣播到網絡上。例如,一個交易是 A 轉錢給 B,另一個交易是 A 轉錢給 C,且假設他們花的是同一個幣。由于網絡傳播的延遲和節點位置的不同,不同節點接收這兩個交易的順序會有所差異。
    • 對于先收到 A 轉給 B 交易的節點,會將其加入等待確認的交易集合。當后續收到 A 轉給 C 的交易時,由于與已存在的交易沖突,這個交易就會被判定為非法,節點會忽略它。
    • 而對于先收到 A 轉給 C 交易的節點,會將其加入集合,此時若再收到 A 轉給 B 的交易,這個交易就不能被加入集合,并且之前已加入的與當前沖突的交易(比如 A 轉給 C 的交易)可能需要從集合中刪掉。

  1. 交易從集合中刪除的情況:當節點聽到一個新發布的區塊時,如果等待確認交易集合中的某個交易被包含在這個新區塊中,那么該交易就可以從集合中刪掉,因為它已經得到了確認。另外,如果新發布的區塊中包含了與集合中某個交易沖突的交易,那么集合中對應的沖突交易也需要被刪除,因為此時該交易已被證明為非法(已被寫入區塊的交易具有更高的優先級和合法性)。

通過以上交易處理機制,比特幣網絡能夠有效地管理和處理交易,在存在網絡延遲和交易沖突的情況下,盡可能保證交易的合法性和一致性,為比特幣系統的正常運行提供了重要的基礎保障。

四、網絡傳播問題

比特幣網絡傳播屬于 best effort,交易發布后不一定所有節點都能收到,且不同節點收到交易的順序可能不同,網絡傳播存在延遲,部分節點可能不按協議轉發,導致合法交易收不到或轉發不合法交易。

  1. 傳播特性(best effort):比特幣網絡的傳播屬于 “best effort”(盡力而為)類型。這意味著一個交易發布到比特幣網絡上后,并不能保證所有的節點都能收到該交易。而且,不同的節點接收到這個交易的順序也不一定是相同的。這種不確定性是由比特幣網絡的去中心化特性以及其采用的傳播方式所決定的。
  1. 網絡傳播延遲:網絡傳播存在延遲,并且有時這種延遲可能會很長。由于比特幣網絡中的節點數量眾多,分布廣泛,且消息傳播采用泛洪(flooding)等方式,交易或區塊消息從一個節點傳播到其他所有節點需要一定的時間。在這個過程中,不同節點接收到消息的時間會有較大差異,導致整個網絡在信息同步上存在一定的滯后。
  2. 節點不按協議轉發問題:并非所有節點都會嚴格按照比特幣協議的要求進行轉發操作。有些節點可能不轉發應該轉發的合法交易,這可能導致某些節點無法接收到這些合法交易信息,影響交易的正常處理和確認。同時,也有一些節點可能會轉發一些不合法的交易,例如存在雙花問題或者簽名不合法的交易。這種情況破壞了網絡中交易信息的一致性和合法性,給比特幣系統的運行帶來了潛在風險。
  3. 對系統的影響及本質:這些網絡傳播問題是去中心化系統中面臨的實際問題。在去中心化的比特幣網絡中,沒有一個中心機構來統一管理和協調節點的行為,每個節點都有一定的自主性,這就不可避免地會出現上述問題。這些問題的存在對交易的可靠性和整個比特幣系統的穩定性構成了挑戰,需要通過一定的機制(如共識機制等)來盡量減少其影響,確保系統的正常運行。

比特幣網絡傳播方面存在的這些問題,反映了去中心化系統在信息傳播和節點行為管理上的復雜性和挑戰,也凸顯了比特幣系統中其他機制(如共識機制、交易驗證機制等)對于保障系統安全和穩定運行的重要性。

五、實際應用問題及解決

比特幣交易存在雙花攻擊風險,惡意節點可能通過算力優勢使分叉鏈成為最長合法鏈。交易完成后,若商家不發貨,比特幣系統內部無法解決,可選擇找信譽良好的商家交易,或向銷售平臺投訴。此外,出現糾紛時可通過產生新的交易(如退款交易)解決,無需回滾原交易。

  1. 雙花攻擊問題及節點行為分析:惡意節點可能實施雙花攻擊,比如將已經花過的錢再重新花一遍。為達成目的,惡意節點可能會采用各種手段將重復花費的交易轉發到各個節點上。正常節點從理論上不應該轉發非法交易,但實際上并非所有節點都按規則行事。若惡意節點算力足夠強,存在將分叉鏈變成最長合法鏈的可能性,從而使雙花攻擊成功。這體現了在比特幣網絡中,部分節點的不規范行為以及算力在共識達成中的影響,對交易的安全性構成威脅。
  1. 支付后商家不發貨問題:當用戶作為付錢方完成比特幣轉賬交易,且交易被確認寫入區塊后,存在商家不發貨的情況。在比特幣系統中,一旦交易被記錄在區塊里,就無法像傳統系統那樣直接回滾交易來解決問題。因為回滾交易的成本對于普通用戶來說可能遠遠超過支付金額,例如用戶支付幾百塊購買商品,想要回滾交易消耗的資源可能遠超該數額。
  2. 問題性質及與其他支付系統對比:這類商家不發貨的問題屬于線下問題,即使是傳統的支付系統,如銀行轉賬或支付寶支付,也存在類似情況。當用戶支付后商家不提供商品或服務,支付系統內部無法自動解決,用戶無法直接讓交易回滾。這表明無論是去中心化的比特幣系統,還是中心化的傳統支付系統,在處理線下交易糾紛方面都存在局限性,無法單純依靠支付系統自身來保證交易雙方都履行義務。
  3. 解決方法:
    • 選擇信譽良好的商家:用戶在交易時可以盡量選擇比較靠譜、有信譽的大商家進行交易。因為對于有信譽的商家而言,若經常出現不發貨等欺詐行為,會損害其商業聲譽,導致客戶流失,影響其長期利益,所以它們更有可能遵守交易規則。
    • 向平臺投訴:如果商家是在某個銷售平臺上進行銷售,例如類似淘寶這樣的平臺,用戶可以向該平臺進行投訴。銷售平臺為了維護自身的信譽和正常運營,通常會對商家的行為進行監管和處理,幫助用戶解決糾紛。
    • 產生新交易解決糾紛:比特幣系統中,當出現交易糾紛時,并非通過回滾交易來解決。例如用戶把比特幣轉給商家后商家不發貨,若商家承認錯誤并愿意退款,他可以把比特幣再轉回給用戶。從底層比特幣系統來看,后一個交易可被理解為對前一個交易的退款,這種方式不需要回滾交易,而是通過產生新的交易來實現資金的退還和糾紛的解決 。

?相關文章:【BTC】密碼學原理-CSDN博客
? ? ? ? ? ? ? ?? ?【BTC】數據結構-CSDN博客
? ? ? ? ? ? ? ?? ?【BTC】協議(共識機制)-CSDN博客
? ? ? ? ? ? ??? ??【BTC】比特幣系統的具體實現-CSDN博客

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/88102.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/88102.shtml
英文地址,請注明出處:http://en.pswp.cn/web/88102.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Clickhouse 的歷史發展過程

20.5.3 開始支持多線程20.6.3 支持explainmysql 20.8 實時同步mysql📌 ?一、早期版本階段(1.1.x系列)??版本范圍?:1.1.54245(2017-07)→ 1.1.54394(2018-07)?核心特性?&#x…

玩轉n8n工作流教程(一):Windows系統本地部署n8n自動化工作流(n8n中文漢化)

在Windows系統下使用 Docker 本地部署N8N中文版的具體操作,進行了詳盡闡述,玩轉n8n工作流教程系列內容旨在手把手助力從0開始一步一步深入學習n8n工作流。想研究n8n工作流自動化的小伙伴們可以加個關注一起學起來。后續也會持續分享n8n自動化工作流各種玩…

mini-program01の系統認識微信小程序開發

一、官方下載并安裝 1、下載(I選了穩定版) https://developers.weixin.qq.com/miniprogram/dev/devtools/download.htmlhttps://developers.weixin.qq.com/miniprogram/dev/devtools/download.html 2、安裝(A FEW MOMENT LATER)…

如何將 Java 項目打包為可執行 JAR 文件

如何將 Java 項目打包為可執行 JAR 文件我將詳細介紹將 Java 項目打包為可執行 JAR 文件的完整流程,包括使用 IDE 和命令行兩種方法。方法一:使用 IntelliJ IDEA 打包步驟 1:配置項目結構打開項目點擊 File > Project Structure在 Project…

【Starrocks 異常解決】-- mysql flink sync to starrocks row error

1、異常信息 flink 1.20 starrocks 3.3.0 mysql 8.0 errorLog: Error: Target column count: 35 doesnt match source value column count: 28. Column separator: \t, Row delimiter: \n. Row: 2025-05-22 6 23400055 214 dssd 1 1 1928 mm2er 360 20000.00000000 1…

Jenkins 使用宿主機的Docker

背景:不想在Jenkins 內部安裝Docker,想直接使用Jenkins服務所在的系統安裝的docker當你在 Jenkins 中執行 docker 命令時,實際上是通過 Docker 客戶端與 Docker 守護進程進行通信。Docker 客戶端和守護進程之間的通信是通過一個名為 /var/run/docker.soc…

工具+服務雙驅動:創客匠人打造中醫IP差異化競爭力

一、技術工具場景化定制:中醫專業的可視化破圈在中醫IP同質化嚴重的行業現狀下,創客匠人以場景化技術工具破解專業傳播難題。系統內置的“體質測試”模塊可生成個性化調理報告,“案例庫”支持前后對比圖上傳,“直播問診”自動添加…

JVM對象分配內存如何保證線程安全?

大家好,我是鋒哥。今天分享關于【JVM對象分配內存如何保證線程安全?】面試題。希望對大家有幫助; JVM對象分配內存如何保證線程安全? 超硬核AI學習資料,現在永久免費了! 在Java中,JVM&#xf…

機器學習中的數據對齊

文章目錄前言數據集怎么理解數據數據對齊為什么偏偏是這樣對齊?前言 在神經網絡中,我們往往會根據數據集構建訓練集、測試集,有時會有驗證集。但是,在構建完成后,如果直接將這些數據直接扔進模型訓練,輸入…

機器學習:更多分類回歸算法之決策樹、SVM、KNN

下面介紹的這幾種算法,既能用于回歸問題又能用于分類問題,接下來了解下吧。 決策樹 可參考: 決策樹(Decision Tree) | 菜鳥教程 決策樹(Decision Tree)是一種常用的監督學習算法,可用…

Vue 整合 Vue Flow:從零構建交互式流程圖

目錄引言目的適用場景環境準備基礎組件 (index.vue)自定義組件 (矩形、菱形等)RectangleNode.vue (矩形節點):DiamondNode.vue (菱形節點):ImageNode(自定義圖片節點):操作實現 (#操作實現) 拖拽節點 (#拖拽節點) 連線 (多連接點) 刪除節點 …

C# WPF - Prism 學習篇:搭建項目(一)

一、前期準備開發工具:Visual Studio 2022二、創建項目1、創建WPF 應用“WpfApp.StudyDemo”:2、項目結構如下: 三、安裝 Prism1、選中項目“WpfApp.PrismDemo”,在右鍵菜單中選擇“管理 NuGet 程序包(N)...”。2、在搜索框中輸入…

單片機 基于rt-thread 系統 使用 CCM內存

一、開發環境 開發板:野火stm32f407 系統:rt-thread V4.1.1 二、鏈接腳本配置 ; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ****************************…

【UnityAssetBundle】AB包卸載資源

AB包的卸載高效穩定游戲開發的強制要求,它解決了資源管理中的內存泄漏問題,為動態的內容加載、熱更新、大型世界的構建提供了內存保障,最終提升了游戲性能、穩定性和用戶體驗。卸載資源方式一(推薦使用):卸…

【萬字長文】深度學習2 yolov5修改為自己的數據集

數據預處理 使用labelme可以直接導出適用于yolo模型的txt文本數據,也可以直接導出默認的json數據結構,后面我會提供代碼進行轉換。自行進行標注,圖片與標注一一對應,更多要求不贅述。因為我做最簡單的檢索模型,不做切…

ubuntu18編譯RealSense SDK 2.0

參考文章:https://dev.intelrealsense.com/docs/compiling-librealsense-for-linux-ubuntu-guide1、安裝依賴 sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade sudo apt-get install libssl-dev libusb-1.0-0-dev libud…

算法學習筆記:9.Kruskal 算法——從原理到實戰,涵蓋 LeetCode 與考研 408 例題

在圖論的眾多算法中,Kruskal 算法以其簡潔高效的特性,成為求解最小生成樹(Minimum Spanning Tree,MST)的經典方法。無論是在通信網絡的優化設計、電路布線的成本控制,還是在計算機考研 408 的備考過程中&am…

Vue+Openlayers加載OSM、加載天地圖

文章目錄1. 介紹2. 加載底圖2.1 加載默認OSM地圖2.2 加載天地圖1. 介紹 Openlayers官網:https://openlayers.org/ 安裝依賴:npm i ol 2. 加載底圖 參考博客: vueopenlayers環境配置:https://blog.csdn.net/cuclife/article/det…

Python處理電子表格文件庫之pyexcel使用詳解

概要 pyexcel是一個功能強大的Python第三方庫,專門用于處理各種格式的電子表格文件。核心價值在于提供了統一的接口來讀取、寫入和操作Excel、CSV、ODS等多種電子表格格式,極大簡化了數據處理工作流程。與傳統的單一格式處理庫不同,pyexcel采用了插件化架構,使開發者能夠通…

【網絡安全】惡意 Python 包“psslib”仿冒 passlib,可導致 Windows 系統關閉

文章目錄惡意 Python 包“psslib”仿冒 passlib如何避免psslib的威脅惡意 Python 包“psslib”仿冒 passlib Socket 的威脅研究團隊發現了一個名為 psslib 的惡意 Python 包,旨在以提供密碼安全功能為幌子突然關閉 Windows 系統。 該軟件包由威脅行為者使用別名 u…