從系統、網路到區塊鏈:工程師該如何理解「協定(Protocol)」

 

為什麼工程師一定要搞懂協定?

在工程實務中,我們很常聽到這些說法:

  • 「這個系統之間要先定好協定」

  • 「跨系統整合最麻煩的是協定沒講清楚」

  • 「區塊鏈要跨鏈,一定需要一個協定」

但很多時候,「協定」這個詞被大量使用,卻沒有被好好解釋過。本文會從 系統層面、網路層面、以及區塊鏈跨鏈場景,一步一步說清楚:

協定到底是什麼?它在架構中扮演什麼角色?為什麼沒有協定,系統一定會失控?

一、先給結論:協定是什麼?

協定(Protocol)是一份「規範(Specification / Contract)」

它本身不是程式碼,也不是某個套件,而是一組被明確定義的規則,用來回答以下問題:

  • 雙方怎麼開始互動?

  • 資料格式長什麼樣?

  • 流程順序是什麼?

  • 失敗時要怎麼處理?

  • 哪些行為是合法的?

程式的責任不是發明規則,而是「實作並遵守協定」。


二、系統層面:協定是「模組邊界」

1️⃣ 為什麼系統一定要有協定?

在中大型系統中,不同模組通常由:

  • 不同人

  • 不同團隊

  • 不同時間

開發完成。如果模組之間沒有協定,系統會變成:

  • 互相猜資料格式

  • 靠口頭約定流程

  • 出錯時不知道責任歸屬

2️⃣ 系統協定實際在規範什麼?

以常見的後端系統為例:

  • API 請求/回應格式

  • 狀態碼與錯誤語義

  • 同步 / 非同步流程

  • Idempotency 規則

這些加起來,才是真正的「系統協定」。

3️⃣ 沒有協定會怎樣?

「今天能跑,不代表明天還能跑。」

系統會逐漸變成:

  • 無法重構

  • 無法擴充

  • 無法測試

協定的存在,本質上是在保護系統的可維運性。


三、網路層面:協定是「分層信任機制」

1️⃣ 為什麼網路世界一定靠協定?

在網路中:

  • 你不知道對方是誰

  • 不知道對方的作業系統

  • 不知道網路會不會丟包

唯一能依賴的,就是「大家是否遵守同一套協定」。

2️⃣ 協定如何支撐分層架構?

以 TCP/IP 為例,每一層協定只保證一件事:

  • IP:我幫你找路

  • TCP:我幫你保證資料完整、有順序

  • HTTP:我幫你定義請求與回應的語義

上層不用知道下層怎麼實作,只需要相信協定的承諾

3️⃣ 協定不是程式,而是「所有實作的共同依據」

HTTP 本身不是程式,而是 RFC 文件;

  • Nginx

  • Apache

  • ASP.NET

都只是「HTTP 協定的不同實作」。


四、區塊鏈層面:跨鏈協定不是「網路協定」

1️⃣ 一個常見誤解

很多人會以為:

「跨鏈協定 = 統一每條鏈的網路規範 + Oracle」

這個理解並不完整

每條區塊鏈本來就有自己的:

  • P2P 網路協定

  • 共識機制

跨鏈協定不是去改這些底層網路行為


2️⃣ 跨鏈協定真正規範的是什麼?

跨鏈協定關心的是「跨鏈狀態如何被理解與信任」,包含:

  1. 什麼是可跨鏈引用的事件

  2. 狀態如何被證明(Proof)

  3. 跨鏈流程順序

  4. Finality 與 Reorg 處理

  5. 回滾與補償機制

這些本質上是一個跨鏈狀態機協定


3️⃣ Oracle 在協定中的正確角色

Oracle:

  • ❌ 不是協定本身

  • ❌ 不定義流程

  • ✅ 是「依協定提交外部狀態證據的角色」

協定先存在,Oracle 才能依規則行事。


五、用一句話貫穿三個層面

系統層面,協定是模組邊界
網路層面,協定是分層信任
區塊鏈層面,協定是跨狀態共識

它們本質相同,只是作用對象不同。


結語:為什麼「會設計協定」是一種高階能力?

能寫程式,只代表你會實作;

能設計協定,代表你:

  • 能預期失敗

  • 能定義邊界

  • 能讓系統長期演進

在大型系統、跨組織整合、甚至跨鏈架構中:

真正決定系統能否活下來的,不是程式碼,而是協定。


如果你是工程師,下一次聽到「我們要先定協定」,你就知道:

那其實是在為整個系統的未來負責。 

留言

熱門文章