瑣碎的想法(二)網路協議——人們給電腦的一組「約定」

網路協議學習方式一

學習網路協議的入門多種多樣,如果是從術語上來講協議,大概是這樣的。

  1. 協議的作用意義
  2. 協議的定義。
  3. 協議的發展。
  4. 協議的特點。

這是一種靠強記,通過實踐來加深印象,最後不自知地了解網路協議的過程。有效但趣味寥寥。

網路協議學習方式二

這一次,我想從開創者的角度來分析,如何讓兩台電腦的應用進行通訊。
試想,如果我們拋棄所有現有的網路協議思維,把自己當做一個科研人員,那麼如何才能讓兩台電腦的軟體進行通訊呢?
這就需要我們發明一種機制能夠實現通訊。
但是,做事最好不要從頭開始,應該多借鑒前人的思想,回憶一下最初資訊是如何傳遞的。

烽火對照電腦

還記得歷史課本講過的烽火台(敵人白天來臨時就燃煙,夜間來犯就點火)嗎?

假設,只有一個烽火台,給一個城傳遞資訊。
我們可以從這個具體事務中提取他能夠傳遞資訊的幾個最基礎的要素。

要素名 對應物
資訊發布者 烽火台的士兵
資訊接收者 城的士兵
資訊 煙、火
資訊傳遞的規則 敵人白天來臨時就燃煙,夜間來犯就點火

而我們把幾個基礎要素轉化到兩台電腦上。

要素名 對應烽火台 對應電腦
資訊發布者 烽火台的士兵 電腦A的軟體a
資訊接收者 城的士兵 電腦B的軟體a
資訊 煙、火 數據
資訊傳遞的規則 敵人白天來臨時就燃煙,夜間來犯就點火 兩台電腦之間的「約定」

郵寄對照電腦

前三者都是實體,第四點需要我們好好理解,烽火台的士兵和城的士兵應該是在之前都清楚「敵人白天來臨時就燃煙,夜間來犯就點火」這個規則,那麼我們要實現通訊也需要實現一個規則,並且讓雙方事先清楚。

總結:通訊是需要雙方默認都事先理解的一套「約定」

這時候,我們可以參考最常見的通訊方式之一的郵寄。

如果將一封郵件的構成要素和電腦的概念進行對比

信的構成 電腦元素
收信人地址(城市、門牌號) 電腦A的地址
收信人姓名 電腦A中的a應用的位置
寄信人地址(城市、門牌號) 電腦B的地址
寄信人姓名 電腦B中的a應用的位置
郵件 數據

如果我們對每台計算器進行編號,並對我們使用的應用,也進行編號,記在一個記事本中。
如果這兩台電腦都存著這個記事本,那麼它們就可以區分,每一台電腦的每一個應用。
由此,我們就設計出一個能夠實現數據傳輸的協議了。

電腦對照TCP協議

而現實中的協議也是如此,下面引用TCP協議來對比我們上面所描述的各個基本元素。(注意:事實上TCP不僅僅是實現了基本的數據傳輸,還處理了可靠性、流量控制、多路復用、連接數、優先與安全等問題,是一個值得深入學習的協議。)

信的構成 電腦元素 對應協議中的專業術語
收信人地址(城市、門牌號) 電腦A的地址 A電腦的地址(IP地址加MAC地址)
收信人姓名 電腦A中的a應用的位置 a應用在A電腦中佔用的埠
寄信人地址(城市、門牌號) 電腦B的地址 B電腦的地址(IP地址加MAC地址)
寄信人姓名 電腦B中的a應用的位置 a應用在A電腦中佔用的埠
郵件 數據 數據包

以上內容僅僅涉及到了基本的數據傳輸,如有興趣,可以想想如下的問題。

  1. 如何保證數據傳輸正確?需要涉及到數據校驗的問題。
  2. 如何保證數據的可靠性?需要涉及到三次握手、四次揮手機制。
  3. 數據量過大怎麼辦?涉及數據擁塞控制(Reno、BBR)。