初學者如何理解網絡協議編程
網絡協議是什麼?協議分層是怎麼回事?什麼是協議的實現?服務器
回想當年初識網絡協議,被一張網絡層次模型圖中的「物理層、數據鏈路層、網絡層、傳輸層……」搞得雲裏霧裏。花了很長時間才搞明白網絡協議大概是怎麼回事,甚至己經作出了幾個網絡程序,但仍感受對網絡協議的本質認識還不夠清楚。網絡
一直在思考這些問題,忽然有一天,我發現我對網絡協議的認識已經變得明朗。直到今天,我心血來潮寫下這篇文章,但願對初學網絡編程的朋友有所幫助。數據結構
第一部分 學習
1、網絡協議通俗地講就是網絡上兩臺計算機之間通訊所要遵照的共同標準。spa
這麼講仍是不夠通俗易懂,因此咱們能夠打個比方:.net
有兩我的,一箇中國人,一個法國人,以下:計算機網絡
(用英語交流)翻譯
中國人------------------------------------法國人blog
(講中文) (講法語)
[會英語] [會英語]
<英語協議> <英語協議>
這兩我的要想交流,必須講一門雙方都懂的語言。若是你們都不會講對方的民族語言,那麼能夠選擇雙方都懂的第三方的語言來交流,好比「講英語」。那麼這時候「英語」實際上就成爲一種「網絡協議」。
把網絡協議比作通用語言只是一種形象比喻,實際上協議自己比天然語言要簡單的多,可是卻比天然語言更嚴謹。協議規定了一種交流信息的格式或者說規範,好比:字符「LOVE」表示什麼意思,第2個字節表示什麼含義等……只要你們都按一樣的規範來表達本身的意思,對方就能「聽懂」你的意思。
同一種「規範」遵照的人多了,就成爲一種事實上的「標準」。好比TCP/IP協議就成爲了一種最流行的網絡協議。
2、協議的實現
協議自己並非一種軟件,它只是一種通信標準,但協議最終要由軟件來實現。網絡協議的實現就是在不一樣的軟件和硬件環境下,執行可運行於該種環境的「協議」翻譯程序。這些程序可能在WINDOWS下,也可能在UNIX下,也可能運行於一臺我的電腦,也可能運行於一臺服務器,也可能在你的手機中,這些程序可能都不同,但卻都會翻譯同一種網絡協議,好比(TCP/IP)協議。就如上圖中的翻譯都懂「英語」同樣。
實現網絡協議,聽起來就象是給全部接入網絡的設備配備了一個「通用語言翻譯器」,這些翻譯都懂通用語言「英語」,同時也懂得本國語言,這樣就能實現不一樣國家不一樣環境的人接入同一個網絡並進行交流了。
那麼,能否選擇「中文」做爲網絡協議呢?固然能夠,但前提是你們都願意遵照你的標準,都願意說中文。實際上,「中文」也是一種網絡協議,但它只是屬於中國人的網絡協議。
3、協議的分層
協議分層僅僅是爲了技術上的便利所作的人爲劃分,並不是是協議天生必備的。
仍以上圖爲例,咱們再也不考慮中國人或是法國人,只考慮協議自己。
我用英語說:「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協議爲基礎,制定本身的傳輸協議。
不一樣的設備能夠安裝不一樣的協議,識別不一樣層次的協議。
好比:
一、能夠安排一我的,只要能識別字母「a、b、c……」就成。這是最低層協議的實現。
二、再安排一我的,可以識別字母組成的單詞,並刪除錯誤單詞。這就是第二層協議的實現。
三、再安排一我的,可以識別單詞組成的句子,並理解句子。這就是第三層協議
四、再安排一我的,這我的可以翻譯英語「黑話」,這個就最第四層協議了
五、還能夠安排更高層的人,可以把黑話中隱藏的更專業的意思解讀出來
根據須要,你能夠隨時發明本身的協議,若是這種協議高效易用,被大衆所認同,那就成爲了一種流行標準。
說到底:協議是人規定的一套通訊規範,因此任何人均可以規定本身的協議,只要通訊的雙方可以共同遵照,你就實現了你的協議。
事實上協議自己是能夠無所謂分層的概念,分層只是爲了方便人們處理複雜的協議而人爲作出的劃分。
因此,初學者請不要網絡協議深遂的面孔嚇倒,更不要被網絡分層的假相所迷惑。你只要認清了網絡協議的本質,大膽得去實踐,你徹底能夠創造出屬於你本身的網絡協議。
舊的協議日益成熟,新的協議層出不窮,正是那些敢於創新的開拓者們創新了突飛猛進的網絡世界。向發明網絡協議的創新者們致敬!
以我本身的經歷:網絡通訊技術初學者接解到的第一本網絡教程,應該首先避免過多技術層次的東西,少用專業術語,最好能經過接近生活實際的例子,將網絡技術的基本原理解釋清楚。我認爲初學者越早搞懂網絡協議的本質,學習後續網絡課程就會越容易。
後記:
從事軟件開發多年,最先接觸網絡協議是在20年前,那個時候沒有老師教,徹底靠啃教材自學。固然,教材的做者就是個人老師。但是這些教材無一例外上來就是專業術語、技術性太強。什麼協議標準,協議分層,什麼數據結構,讓初學計算機沒幾年的我雲裏霧裏。花了很長時間也沒把網絡協議這東西搞清楚,網絡編程因而成爲令我感到「難」的一件事情。
事實上,大概不少人都認爲網絡編程是很「難」的。的確,當我弄清楚網絡協議和網絡編程是怎麼回事之後,反而更加深入得理解了網絡編程的難度。不過回過頭來看一看,若是當年能有遇到一本深刻淺出的教材幫我很快理解網絡協議的本質,若是這本書能讓我感受網絡協議很簡單,那麼我學習的速度和效率將會高得多。
以上只是本身一些我的經驗,跟你們交流,有不足之處,歡迎批評指正!謝謝。
參考:http://blog.csdn.net/fyl_077/article/details/17557853