引言
最近LZ有了一點時間,於是便拿出TCP/IP的書本開始啃。開始的時候,啃起來枯燥無味,現在好不容易有點開竅,於是趕忙記錄一下,生怕自己一轉眼就給忘了。不過計算機系統原理就有點可惜了,最近一直沒時間看,選來選去,還是覺得TCP更加重要一些,或者說現階段更加重要一些。
好了,廢話不多說,我們開始記錄吧。
TCP/IP是什么
要討論tcp/ip,就必須知道它究竟是什么東西。這是開始逐漸深入一個東西的前提,tcp/ip也不例外。
LZ用自己的話回答一下這個問題,tcp/ip是什么?
簡單的說,tcp/ip就是一套規矩。兩個計算機要互相通信,就得有規矩,一個非常普遍的例子就是發信件。想像一下,如果信件上面的地址和郵編等信息是隨便寫的,那么目的地的郵遞員收到信件時,一定會一頭霧水,不知道到底要送到哪。同樣的,如果收件人是“額買瑞肯”,而你寫的字是“拆泥漬”,對方肯定是看不懂的,所以雙方的語言也要相通。
計算機之間要通信,也需要規矩,於是tcp/ip就出現了。tcp和ip分別是兩個協議,而tcp/ip一般泛指一個協議族。這個協議族一共包含四層,分別是鏈路層,網絡層,傳輸層以及應用層。其中tcp是傳輸層的協議,ip則是網絡層的協議。
之所以分層,原因就像mvc框架的作用一樣,是為了讓專業的人做專業的事。還記得設計模式當中的單一職責原則嗎,這里其實也正是這個原則的體現。每一層都只做自己應該做的事情,並且把它做好,這樣有利於擴展和維護。
四層簡介
接下來,LZ就自己的理解,給大家簡單介紹一下各個分層。
鏈路層:這是最接近硬件的一層,也是俗稱的“底層”。它主要指我們俗稱的網卡和網卡驅動程序,網卡是硬件,驅動程序則負責控制網卡。鏈路層主要負責與傳輸介質(比如光纖)配合完成實際的數據傳輸工作。你可以把它想像成高速公路上可惡的收費站,每一條公路的入口和出口都有一個收費站,而這些收費站之間是有協議的,比如按路程收費。這些收費站就像網絡接口一樣,而公路則像光纖一樣。
網絡層:這一層凌駕於鏈路層之上,主要負責數據報在網絡中的活動,比如該往哪走。這一層就像高速公路上的路標,路標決定了你每到一個路口應該怎么走。網絡層恰恰就是做這件事,比如ip協議,其實就是制定一套規則,讓數據按照這套規則可以找到目的地。
傳輸層:這一層已經比較接近我等屌絲了,它負責應用程序之間端到端的通信,這么說可能比較難理解。這個比較像物流中的一個場景,比如現在LZ在北京,並且在上海買了一個女朋友要送過來,那么過程應該是這樣的。首先由上海的快遞小哥把LZ的女朋友拿走,然后交給向北京出發運送貨物的司機,接下來LZ的女朋友到北京后會被交給物流公司的統一發貨處,最終由快遞小哥負責把女朋友送到LZ手中。請注意,這個過程中,貨車司機並不關心貨物到底送到哪,他只管送到北京,而最終快遞小哥需要把貨物送給具體的收貨人。這和網絡層與傳輸層的關系類似,網絡層只管把數據報從一個計算機送給另外一個計算機,具體是哪個進程的數據,網絡層可不管,這便是傳輸層負責的事了。這里的端到端通信,其實就是指端口到端口的通信。
應用層:這一層與我等屌絲已經有肌膚之親,可謂是再熟悉不過了。比如你天天要用的http協議,它就是應用層的一個協議。http定義了各種協議頭,什么請求協議頭,響應協議頭,亂七八糟的。這些協議頭都是干嘛的呢,既然是應用層,當然是給應用程序用的了。比如響應協議頭中有文本格式這個頭,它就定義了瀏覽器應該如何展示web服務器發回來的響應信息,比如xml,html還是什么其它的玩意。
四層小結
這么一看,其實tcp/ip協議族挺好理解的,接下來LZ還用上面物流的例子來說明。
鏈路層就是負責運輸LZ女朋友的那個司機,他是實際負責運輸工作的(也就是實際傳輸數據的工作)。網絡層就是高速路上的路標,負責指引司機在高速上該如何走(也就是在網絡上的活動),並讓司機正確到達目的地。傳輸層則是快遞小哥,負責在具體的發貨人和收獲人之間(也就是發送端口和接收端口)的接收。應用層就像是LZ女朋友的使用說明,這就是LZ和賣家之間(也就是應用程序之間)的事了。
文章花絮
本篇就到此為止吧,畢竟內容不在多,有精就行。只是為了更好的說明本文的內容,LZ犧牲了自己的形象,只是希望媳婦不要看到這篇文章。LZ發誓,本文中的所有例子都純屬虛構。
待續待續吧!
