一文看懂什么是OSI七層協(xié)議
我們都知道互聯(lián)網(wǎng)的本質(zhì)是一系列的網(wǎng)絡(luò)協(xié)議,這個協(xié)議就叫做OSI協(xié)議。按照功能不同分工不同,認(rèn)為的分為七層。實(shí)際上這七層是并不存在的,也就是說沒有這些概念,而我們今天提到的七層概念,只是人為的劃分而已。目的只是為了讓大家更好地理解這些都是用來做什么的。
從專業(yè)的角度來說,OSI就是一個開放的通信系統(tǒng)互聯(lián)參考模型,也是一個定義的很好的協(xié)議規(guī)范。OSI模型有7層結(jié)構(gòu),每層都可以有幾個子層。OSI的7層從下到上分別是7-應(yīng)用層、6-表示層、5-會話層、4-傳輸層、3-網(wǎng)絡(luò)層、2-數(shù)據(jù)鏈路層、1-物理層。
1. 七層協(xié)議詳解
物理層:是參考模型的最低層。該層是網(wǎng)絡(luò)通信的數(shù)據(jù)傳輸介質(zhì),由連接不同結(jié)點(diǎn)的電纜與設(shè)備共同構(gòu)成。主要跟功能是:利用傳輸介質(zhì)為數(shù)據(jù)鏈路層提供物理連接,負(fù)責(zé)處理數(shù)據(jù)傳輸并監(jiān)控?cái)?shù)據(jù)出錯率,以便數(shù)據(jù)流的透明傳輸。
數(shù)據(jù)鏈路層:四參考模型的第二層。主要功能是:在物理層提供的服務(wù)基礎(chǔ)上,在通信的實(shí)體間建立數(shù)據(jù)鏈路連接,傳輸以“幀”為單位的數(shù)據(jù)包,并采用差錯控制與流量控制方法,使有差錯的物理線路變成無差錯的數(shù)據(jù)鏈路。
網(wǎng)絡(luò)層:是參考模型的第三層。主要功能是:為數(shù)據(jù)在節(jié)點(diǎn)之間傳輸創(chuàng)建邏輯鏈路,通過路由選擇算法為分組通過通信子網(wǎng)選擇最適當(dāng)?shù)穆窂?,以及?shí)現(xiàn)擁塞控制、網(wǎng)絡(luò)互連等功能。
傳輸層:是參考模型的第四層。主要功能是:向用戶提供可靠地端到端服務(wù),處理數(shù)據(jù)包錯誤、數(shù)據(jù)包次序,以及其他一些關(guān)鍵傳輸問題。傳輸層向高層屏蔽了下層數(shù)據(jù)通信的細(xì)節(jié)。因此,它是計(jì)算機(jī)通信體系結(jié)構(gòu)中關(guān)鍵的一層。
會話層:是參考模型的第五層。主要功能是:負(fù)責(zé)維擴(kuò)兩個結(jié)點(diǎn)之間的傳輸連接,以便確保點(diǎn)到點(diǎn)傳輸不中斷,以及管理數(shù)據(jù)交換等功能。
表示層:是參考模型的第六層。主要功能是:用于處理在兩個通信系統(tǒng)中交換信息的表示方法,主要包括數(shù)據(jù)格式變換、數(shù)據(jù)加密與解密、數(shù)據(jù)壓縮與恢復(fù)等功能。
應(yīng)用層:是參考模型的最高層。主要功能是:為應(yīng)用軟件提供了很多服務(wù),比如文件服務(wù)器、數(shù)據(jù)庫服務(wù)、電子郵件與其他網(wǎng)絡(luò)軟件服務(wù)。
2. OSI歷史
忘記告訴大家,這個協(xié)議是從下到上倒推出來的。
我們來回顧一下這段有趣的歷史吧~
OSI模型最初是因?yàn)槊绹说膬膳_機(jī)器之間有進(jìn)行通信的需求。
需求1:兩個硬件之間如何進(jìn)行通信,具體就是一臺發(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ù)據(jù)是比特。
需求2:現(xiàn)在通過電線我能發(fā)數(shù)據(jù)流了,但是我還是希望能通過無線電波,通過其他介質(zhì)來進(jìn)行傳輸。然后我還要保證傳輸過去的比特流是正確的,需要由糾正錯誤的功能。
數(shù)據(jù)鏈路層:定義了如何讓格式化數(shù)據(jù)進(jìn)行傳輸,以及如何讓控制對物理介質(zhì)的訪問。這一層通常還提供錯誤檢測和糾正,以確保數(shù)據(jù)的可靠傳輸。
需求3:現(xiàn)在我能發(fā)正確的比特流數(shù)據(jù)到另一臺計(jì)算機(jī)了,但是當(dāng)我發(fā)大量數(shù)據(jù)的時候,可能需要很長時間,例如:一個視頻格式的,網(wǎng)絡(luò)會中斷好多次,實(shí)際上,即使有了物理層和數(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ā)出去一萬個包,另一臺電腦就需要告訴我是否接收到一萬個包,如果缺少3個包,就告訴我是第1001/234/8888個包丟了,那我再發(fā)一次。這樣,就能保證對方把這個視頻完整接收了。
例如UDP,適用于發(fā)送少量數(shù)據(jù)的。我發(fā)20個包出去,一般不會丟包,所以 ,我不管你收到多少,在多人互動游戲中,也經(jīng)常受到UDP協(xié)議,因?yàn)橐话愣际呛唵蔚念~信息,而且有廣播的需求。如果用TCP,效率就會很低,因?yàn)樗鼤煌5馗嬖V主機(jī)我收到20個包,或者18個包,再發(fā)我兩個!如果同時有1萬臺計(jì)算機(jī)都這樣做,那么用TCP反而會降低效率,還不如用UDP,主機(jī)發(fā)出去就算了,丟幾個包就卡一下,算了,下次再發(fā)包更新。
TCP協(xié)議是會綁定IP和端口的協(xié)議,下面會介紹IP協(xié)議。
需求4:傳輸層是解決了打包的問題。但是如果我有多臺計(jì)算機(jī),怎么能找到我要發(fā)的那臺?或者A要給F發(fā)信息,中間要經(jīng)過B/C/D/E,但是中間還有好多節(jié)點(diǎn),如K/J/Z/Y.我怎么選擇最佳路徑?這就是路由要做的事情。
于是,發(fā)明了網(wǎng)絡(luò)層,也就是路由器,交換那些具有尋址功能的設(shè)備所實(shí)現(xiàn)的功能。這一層定義的是IP復(fù)制,通過IP地址尋址,所以產(chǎn)生了協(xié)議。
需求5:現(xiàn)在已經(jīng)能夠給指定計(jì)算機(jī)發(fā)送正確的封裝過的信息了,但是用戶級別的體驗(yàn)并不是很好?難道我每次都要調(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也也是不能直接運(yùn)行的。
于是需要表示層,幫我們解決不同系統(tǒng)之間的通信語法問題。
需求7:現(xiàn)在所有必要條件都準(zhǔn)備好了,我們可以寫個Android程序,web程序去實(shí)現(xiàn)需求吧。
補(bǔ)充:不知道有沒有小伙伴熟悉Socket,這不是一個協(xié)議,而是一個通信模型。其實(shí)它最初是伯克利加州分校軟件研究所,簡稱BSD發(fā)明的,主要是一臺電腦兩個進(jìn)程之間進(jìn)行通信,然后把它用到兩臺電腦的進(jìn)程間通信。所以,可以把它簡單理解為進(jìn)程間通信,不是什么高級的東西,主要是這么做的:A發(fā)包:發(fā)請求包給某個已經(jīng)綁定的端口;收到B的允許后,正式開始發(fā)送,發(fā)送完了,高速B要斷開連接;收到斷開允許后,馬上斷開,然后發(fā)送已經(jīng)斷開信息給B。
B收包:綁定端口和IP,然后在這個端口監(jiān)聽接收到A的請求,發(fā)給A,并做好接收準(zhǔn)備,主要就是清理緩存等待接收新數(shù)據(jù);然后正式接收,接收到斷開請求,并允許斷開,確認(rèn)斷開后,繼續(xù)監(jiān)聽其他請求。
換句話說,socket就是I/O操作,socket并不僅限于網(wǎng)絡(luò)通信。在網(wǎng)絡(luò)通信中,它涵蓋了網(wǎng)絡(luò)層、傳輸層、會話層、表示層、應(yīng)用層。
3. OSI七層協(xié)議中每一層的特征
第一層:物理層
機(jī)械性能:接口的形狀,尺寸的大小,引腳的數(shù)目和排列方式等;
電氣性能:接口規(guī)定信號的電壓、電流、阻抗、波形、速率好平衡特性等;
工程規(guī)范:接口引腳的意義、特性、標(biāo)準(zhǔn)。
工作方式:確定數(shù)據(jù)位流的傳輸方式,如:半雙工、全雙工等。
物理層協(xié)議:美國電子工業(yè)協(xié)會(EIA)的RS232/RS422/RS423等;
國際電報(bào)電話咨詢委員會(CCITT)的X.25/X.21等;
物理層的數(shù)據(jù)單位是位(BIT),典型設(shè)備時集線器HUB。
這主要是和硬件有關(guān),與軟件關(guān)系不大。
第二層:鏈路層
鏈路層屏蔽傳輸介質(zhì)的物理特征,使數(shù)據(jù)可靠傳送。
內(nèi)容包括介質(zhì)訪問控制、連接控制、順序控制、流量控制、差錯控制和仲裁協(xié)議等。
鏈路層協(xié)議有:協(xié)議有面向字符的通訊協(xié)議(PPP)和面向位的通訊協(xié)議(HDLC)。
仲裁協(xié)議:CSMA/CD(Carrier Sense Multiple Access with Collision Detection)、Token Bus、Token Ring
鏈路層數(shù)據(jù)單位是幀,實(shí)現(xiàn)對MAC地址的訪問,典型設(shè)備是交換機(jī)SWITCH。
第三層:網(wǎng)絡(luò)層
網(wǎng)絡(luò)層管理連接方式和路由選擇。
連接方式:虛電路和數(shù)據(jù)報(bào)服務(wù)。
虛電路是面向連接的,數(shù)據(jù)通訊一次路由,通過會話建立的一條通路。數(shù)據(jù)報(bào)是非連接的,每個數(shù)據(jù)報(bào)都有路由能力。網(wǎng)絡(luò)層的數(shù)據(jù)單位是包,使用的是IP地址,典型設(shè)備時路由器Router。
這一層可以進(jìn)行流量控制,但流量控制更多的是使用第二層或第四層。
第四層:傳輸層
提供端到端的服務(wù),可以實(shí)現(xiàn)流量控制、負(fù)載均衡。
傳輸層信息包括端口、控制字和校驗(yàn)和。
傳輸層協(xié)議主要是TCP和UDP。
傳輸層位于OSI的第四層,這層使用的設(shè)備時主機(jī)本身。
第五層:會話層
會話層主要內(nèi)容時通過 繪畫進(jìn)行身份驗(yàn)證、繪畫管理和確定通訊方式。一旦建立連接,會話層的任務(wù)就是管理會話。
第六層:表示層
表示層主要是解釋通訊數(shù)據(jù)的意義,如代碼轉(zhuǎn)換、格式變換等,使不同的終端可以表示。
還包括加密與解密、壓縮與解壓等。
第七層:應(yīng)用層
應(yīng)用層應(yīng)該是直接面向用戶的程序或服務(wù),包括系統(tǒng)程序和用戶程序,比如www、FTP、DNS、POP3和SMTP等都是應(yīng)用層服務(wù)。
數(shù)據(jù)再發(fā)送時是數(shù)據(jù)從應(yīng)用層至物理層的一個大包的過程,接收時是數(shù)據(jù)從物理層至應(yīng)用層的一個解包過程。
從功能角度可以分為三組:1/2層解決網(wǎng)絡(luò)通信問題,3/4層解決傳輸問題,5/6/7層處理對應(yīng)用進(jìn)程的訪問。
從控制角度可分為二組:1/2/3層是通信子網(wǎng),4/5/6/7是主機(jī)控制層。
今天之所以會分享一下這種文章,是因?yàn)橛行』锇閱栃【幠懿荒芙忉屢幌戮W(wǎng)絡(luò)7層協(xié)議之間的關(guān)系,所以就整理了這么一篇文章,感覺有用的小伙伴記得關(guān)注、轉(zhuǎn)發(fā)或收藏哦~如果覺得還有什么疑惑,還請?jiān)诹粞詤^(qū)留言,小編看到或者其他小伙伴看到也會及時給出回復(fù)的。