1. 程式人生 > >瑣碎的想法(二)網路協議——人們給計算機的一組“約定”

瑣碎的想法(二)網路協議——人們給計算機的一組“約定”

## 網路協議學習方式一 學習網路協議的入門多種多樣,如果是從術語上來講協議,大概是這樣的。 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