網(wǎng)絡(luò)七層協(xié)議的通俗理解
通過兩臺機(jī)器通信過程簡單介紹OSI七層:
需求1:
科學(xué)家要解決的***個問題是,兩個硬件之間怎么通信。具體就是一臺發(fā)些比特流,然后另一臺能收到。于是,科學(xué)家發(fā)明了物理層:
主要定義物理設(shè)備標(biāo)準(zhǔn),如網(wǎng)線的接口類型、光纖的接口類型、各種傳輸介質(zhì)的傳輸速率等。它的主要作用是傳輸比特流(就是由1、0轉(zhuǎn)化為電流強(qiáng)弱來進(jìn)行傳輸,到達(dá)目的地后在轉(zhuǎn)化為1、0,也就是我們常說的數(shù)模轉(zhuǎn)換與模數(shù)轉(zhuǎn)換)。這一層的數(shù)據(jù)叫做比特。
需求2:
現(xiàn)在通過電線能發(fā)數(shù)據(jù)流了,但是,還希望通過無線電波,通過其它介質(zhì)來傳輸。然后還要保證傳輸過去的比特流是正確的,要有糾錯功能。于是,發(fā)明了數(shù)據(jù)鏈路層:
定義了如何讓格式化數(shù)據(jù)以進(jìn)行傳輸,以及如何讓控制對物理介質(zhì)的訪問。這一層通常還提供錯誤檢測和糾正,以確保數(shù)據(jù)的可靠傳輸。
需求3:
現(xiàn)在能發(fā)正確的發(fā)比特流數(shù)據(jù)到另一臺計算機(jī)了,但是當(dāng)發(fā)大量數(shù)據(jù)時候,可能需要好長時間,例如一個視頻格式的,網(wǎng)絡(luò)會中斷好多次(事實上,即使有了物理層和數(shù)據(jù)鏈路層,網(wǎng)絡(luò)還是經(jīng)常中斷,只是中斷的時間是毫秒級別的)。那么,還須要保證傳輸大量文件時的準(zhǔn)確性。于是,要對發(fā)出去的數(shù)據(jù)進(jìn)行封裝。就像發(fā)快遞一樣,一個個地發(fā)。于是,先發(fā)明了傳輸層(傳輸層在OSI模型中網(wǎng)絡(luò)層上面):
例如TCP,是用于發(fā)大量數(shù)據(jù)的,發(fā)了1萬個包出去,另一臺電腦就要告訴是否接受到了1萬個包,如果缺了3個包,就告訴是第1001,234,8888個包丟了,那再發(fā)一次。這樣,就能保證對方把這個視頻完整接收了。
例如UDP,是用于發(fā)送少量數(shù)據(jù)的。發(fā)20個包出去,一般不會丟包,所以不管你收到多少個。在多人互動游戲,也經(jīng)常用UDP協(xié)議,因為一般都是簡單的信息,而且有廣播的需求。如果用TCP,效率就很低,因為它會不停地告訴主機(jī)收到了20個包,或者收到了18個包,再發(fā)兩個!如果同時有1萬臺計算機(jī)都這樣做,那么用TCP反而會降低效率,還不如用UDP,主機(jī)發(fā)出去就算了,丟幾個包你就卡一下,算了,下次再發(fā)包你再更新。
TCP協(xié)議是會綁定IP和端口的協(xié)議,下面會介紹IP協(xié)議。
需求4:
傳輸層只是解決了打包的問題。但是如果有多臺計算機(jī),怎么找到要發(fā)的那臺?或者,A要給F發(fā)信息,中間要經(jīng)過B,C,D,E,但是中間還有好多節(jié)點如K.J.Z.Y。怎么選擇***路徑?這就是路由要做的事。于是,發(fā)明了網(wǎng)絡(luò)層,即路由器:交換價那些具有尋址功能的設(shè)備所實現(xiàn)的功能,這一層定義的是IP地址,通過IP地址尋址。所以產(chǎn)生了IP協(xié)議。
需求5:
現(xiàn)在已經(jīng)保證給正確的計算機(jī),發(fā)送正確的封裝過后的信息了。但是用戶級別的體驗好不好?難道我每次都要調(diào)用TCP去打包,然后調(diào)用IP協(xié)議去找路由,自己去發(fā)?當(dāng)然不行,所以我們要建立一個自動收發(fā)包,自動尋址的功能。于是,發(fā)明了會話層:會話層的作用就是建立和管理應(yīng)用程序之間的通信。
需求6:
現(xiàn)在能保證應(yīng)用程序自動收發(fā)包和尋址了。但是要用Linux給window發(fā)包,兩個系統(tǒng)語法不一致,就像安裝包一樣,exe是不能在linux下用的,shell在window下也是不能直接運行的。于是發(fā)明了表示層(presentation):解決不同系統(tǒng)之間的通信語法問題。
需求7:
OK,現(xiàn)在所有必要條件都準(zhǔn)備好了,可以寫個android程序、web程序去實現(xiàn)需求吧。