初學者如何理解網路協議

2021-08-28 23:28:04 字數 4364 閱讀 1958

網路協議是什麼?協議分層是怎麼回事?什麼是協議的實現?

回想當年初識網路協議,被一張網路層次模型圖中的「物理層、資料鏈路層、網路層、傳輸層……」搞得雲裡霧裡。花了很長時間才搞明白網路協議大概是怎麼回事,甚至己經做出了幾個網路程式,但仍感覺對網路協議的本質認識還不夠清楚。

一直在思考這些問題,突然有一天,我發現我對網路協議的認識已經變得明朗。直到今天,我心血來潮寫下這篇文章,希望對初學網路程式設計的朋友有所幫助。

第一部分

一、網路協議通俗地講就是網路上兩台計算機之間通訊所要遵守的共同標準。

這麼講還是不夠通俗易懂,所以我們可以打個比方:

有兩個人,乙個中國人,乙個法國人,如下:

(用英語交流)

中國人------------------------------------法國人

(講中文)                                      (**語)

[會英語]                                             [會英語]

《英語協議》                                    《英語協議》

這兩個人要想交流,必須講一門雙方都懂的語言。如果大家都不會講對方的民族語言,那麼可以選擇雙方都懂的第三方的語言來交流,比如「講英語」。那麼這時候「英語」實際上就成為一種「網路協議」。

把網路協議比做通用語言只是一種形象比喻,實際上協議本身比自然語言要簡單的多,但是卻比自然語言更嚴謹。協議規定了一種交流資訊的格式或者說規範,比如:字元「love」表示什麼意思,第2個位元組表示什麼含義等……只要大家都按同樣的規範來表達自己的意思,對方就能「聽懂」你的意思。

同一種「規範」遵守的人多了,就成為一種事實上的「標準」。比如tcp/ip協議就成為了一種最流行的網路協議。

二、協議的實現

協議本身並不是一種軟體,它只是一種通訊標準,但協議最終要由軟體來實現。網路協議的實現就是在不同的軟體和硬體環境下,執行可執行於該種環境的「協議」翻譯程式。這些程式可能在windows下,也可能在unix下,也可能執行於一台個人電腦,也可能執行於一台伺服器,也可能在你的手機中,這些程式可能都不一樣,但卻都會翻譯同一種網路協議,比如(tcp/ip)協議。就如上圖中的翻譯都懂「英語」一樣。

實現網路協議,聽起來就象是給所有接入網路的裝置配備了乙個「通用語言翻譯器」,這些翻譯都懂通用語言「英語」,同時也懂得本國語言,這樣就能實現不同國家不同環境的人接入同乙個網路並進行交流了。

那麼,可否選擇「中文」作為網路協議呢?當然可以,但前提是大家都願意遵守你的標準,都願意說中文。實際上,「中文」也是一種網路協議,但它只是屬於中國人的網路協議。

三、協議的分層

協議分層僅僅是為了技術上的便利所做的人為劃分,並非是協議天生必備的。

仍以上圖為例,我們不再考慮中國人或是法國人,只考慮協議本身。

我用英語說:「how are you.」 不一定表示「你好!」,我們可以事先約定,這句話表示「再看一遍」的意思。這就象是所謂的江湖「黑話」,或叫「專業術語」。實際上,這時我們自己制定了乙個新的通訊標準,乙個新的「高層協議」己經誕生了。這個協議在「英語」的基礎上,再制定自己的通訊標準,這種新的通訊標準就是基於「英語」這種「底層協議」的「高層協議」,我們可以把這種協議取名為「講課協議」。

以後你還可以在「講課協議」之上建立「講網路通訊課程的協議」等更高階的協議。

第二部分

再對比計算機網路:有以ip協議為基礎的tcp協議,以tcp協議為基礎的http協議,以tcp協議為基礎的ftp協議等。這裡http和ftp是同一層次的兩種不同協議。

如下圖:

高層3:http協議、ftp協議                (應用層)

中層2:tcp協議、udp協議                 (網路層

底層1:ip協議                             (傳輸層)

我們通常把上圖中的底層1和中層2合在一起稱為tcp/ip協議。所以,協議並不一定非要分層,有時候一種協議是幾層協議的乙個結合,事實上,協議分層並不是必須的。

那麼有沒有比「英語」更底層的協議呢?當然有。但一般我們沒必要把「英語」協議再分層。現在為了講解的需要,我把「英語」這種協議人為再分一下,英語由「單詞」構成,單詞不考慮語法問題。「單詞」就是比「英語」低一級的協議。「單詞」又由「字母」構成,字母不考慮組合成詞的問題,所以26個英文「字母」就成為比「單詞」更低一級的協議。

現實意義:中國人和法國人一般都認識英文本母,法文字母跟英文本母有很多都相同,但我們從小認字母當拼音,人家認來組單詞。所以可以說,在字母這一層協議上,中國人和法國人是可以交流的,換個說法:中國人寫的字母法國人也認識。但是,這沒有太多實際意義。所以才需要更高一級的「英語」協議來支援。

同樣道理,上圖中「底層1:ip協議」以下還有更底層的協議。「高層3:http」協議以上還可以有更高層的應用協議。我們可以任意一層協議為基礎制訂自己的更高一層的協議。

比如:我們可以以字母這一層為基礎,重新創立一種新的語言。也可以以ip協議為基礎,制定自己的傳輸協議。

不同的裝置可以安裝不同的協議,識別不同層次的協議。

比如:1、可以安排乙個人,只要能識別字母「a、b、c……」就成。這是最低層協議的實現。

2、再安排乙個人,能夠識別字母組成的單詞,並刪除錯誤單詞。這就是第二層協議的實現。

3、再安排乙個人,能夠識別單詞組成的句子,並理解句子。這就是第三層協議

4、再安排乙個人,這個人能夠翻譯英語「黑話」,這個就最第四層協議了

5、還可以安排更高層的人,能夠把黑話中隱藏的更專業的意思解讀出來

根據需要,你可以隨時發明自己的協議,如果這種協議高效易用,被大眾所認同,那就成為了一種流行標準。

說到底:協議是人規定的一套通訊規範,所以任何人都可以規定自己的協議,只要通訊的雙方能夠共同遵守,你就實現了你的協議。

事實上協議本身是可以無所謂分層的概念,分層只是為了方便人們處理複雜的協議而人為做出的劃分。

所以,初學者請不要網路協議深遂的面孔嚇倒,更不要被網路分層的假相所迷惑。你只要認清了網路協議的本質,大膽得去實踐,你完全可以創造出屬於你自己的網路協議。

舊的協議日益成熟,新的協議層出不窮,正是那些勇於創新的開拓者們創新了日新月異的網路世界。向發明網路協議的創新者們致敬!

以我自己的經歷:網路通訊技術初學者接解到的第一本網路教程,應該首先避免過多技術層次的東西,少用專業術語,最好能通過接近生活實際的例子,將網路技術的基本原理解釋清楚。我認為初學者越早搞懂網路協議的本質,學習後續網路課程就會越容易。

這篇文章寫的不錯,可以結合之前阮一峰的文章看一看,更明了網路協議為什麼這樣設計。

要注意,網路協議之所以是今天這樣很大程度上是歷史原因。

我來模擬一下網路協議的發展(以下過程是我編的,真實的網路協議不是這樣發展的,這只是我的理解,打個比方而已)

1、乙太網的誕生

最開始的時候某地只有幾台機子,為了交流,於是使用同軸電纜弄了個區域網,制定個乙太網來規定乙太網的資料幀如何和電訊號進行轉換以及乙太網的資料幀如何與應用層資料轉換(假設最初只有應用層和資料鏈路層之間沒有其他層)就行了,比如主機a向主機b傳送一句話「你好嗎?」,過程可能如下:

主機a內部把「你好嗎?」這個字串按照應用層協議封裝成資料報,把資料報加個乙太網標頭轉換為對應的資料幀,按照乙太網協議把資料幀轉化為對應的電訊號,電訊號在同軸電纜中傳送,按照乙太網協議傳送到主機b的電訊號被重新組裝成資料幀,資料幀去掉乙太網標頭轉換為資料報,資料報按照應用層協議轉換為對應的字串「你好嗎?」。

上述過程其實忽略了同在乙個區域網的主機c同樣接收到了這個資料幀,只不過看了一下mac位址,不是給自己的,所以就丟棄了。

2、ip的誕生

後來全世界各地的小區域網越來越多,為了互相交流,大家互相連線起來構成了乙個大網路,這時為了溝通方便,需要引入一種新的位址來彌補mac位址定址困難的缺陷,於是大家一商量,整了個ip位址,這種位址有層次性,方便定址。然後針對ip位址的具體格式,內容,意義等等作說明,順便規定一下相關功能,這些東西合在一起統稱ip協議。

3、tcp的誕生

機子裡邊的程式越來越多,有聊天的,有看圖的,有上網的。。。  各個程式都要跟其他機子通訊,接到別的機子傳過來的資料報,不知道應該分給哪個程式,於是每個程式分配個埠號解決這個問題。

埠格式,如何分配,如何使用等等,就是tcp協議的內容,順便擴充套件延伸一下,把資料報如何在網路上傳輸(超時重發等等)說明一下。。。  最終形成了tcp協議。

。。。

初學者如何理解遞迴

0 遞迴的定義 如果你沒明白遞迴的定義,參見本文 0.遞迴的定義 1 從斐波那契數列開始 斐波那契的遞推公式 斐波那契數列遞迴演算法和遞推公式類似 int fibo int x 就這麼簡單?沒錯,通過這個例子可以看出,遞迴函式只需要寫兩部分,乙個是遞迴終止條件 if x 3 return 1 乙個是...

網路 初學者如何學習orac

網路 初學者如何學習oracle?simba 建議首先看一些oracle基礎方面的書,比如oracle管理基礎等,然後學習一些oracle中sql,pl sql等的語法知識,可以看一些oracle系統效能調整或oracle資料庫的高階開發方面的書和資料.同時要多練習,多想,多看.推薦書 完全接觸 o...

簡單網路管理協議SNMP初學者指南

什麼是snmp?簡單網路管理協議用於在網路管理系統和網路元素之間傳遞管理資訊。使用snmp,網路運營者可以管理其網路元素,識別故障並配置遠端系統。讓我們舉乙個簡單的例子來理解snmp。考慮具有1000個網路元素的網路,如路由器,交換機,閘道器和其他網路裝置。有一天,由於一些內部故障導致網路元件癱瘓。...