OSI七層模式簡單通俗理解
這個模型學了好屢次,老是記不住。今天又看了一遍,發現用歷史推演的角度去看問題會更有邏輯,更好記。本文不必定嚴謹,可能有錯漏,主要是拋磚引玉,幫助記性很差的人。整體來講,OSI模型是從底層往上層發展出來的。
這個模型推出的最開始,是是由於美國人有兩臺機器之間進行通訊的需求。
需求1:
科學家要解決的第一個問題是,兩個硬件之間怎麼通訊。具體就是一臺發些比特流,而後另外一臺能收到。
因而,科學家發明了
物理層:
主要定義物理設備標準,如網線的接口類型、光纖的接口類型、各類傳輸介質的傳輸速率等。它的主要做用是傳輸比特流(就是由一、0轉化爲電流強弱來進行傳輸,到達目的地後在轉化爲一、0,也就是咱們常說的數模轉換與模數轉換)。這一層的數據叫作比特。
需求2:
如今經過電線我能發數據流了,可是,我還但願經過無線電波,經過其它介質來傳輸。而後我還要保證傳輸過去的比特流是正確的,要有糾錯功能。
因而,發明了
數據鏈路層:
定義瞭如何讓格式化數據以進行傳輸,以及如何讓控制對物理介質的訪問。這一層一般還提供錯誤檢測和糾正,以確保數據的可靠傳輸。
需求3:
如今我能發正確的發比特流數據到另外一臺計算機了,可是當我發大量數據時候,可能須要好長時間,例如一個視頻格式的,網絡會中斷好屢次(事實上,即便有了物理層和數據鏈路層,網絡仍是常常中斷,只是中斷的時間是毫秒級別的)。
那麼,我還需要保證傳輸大量文件時的準確性。因而,我要對發出去的數據進行封裝。就像發快遞同樣,一個個地發。
因而,先發明瞭
傳輸層(傳輸層在OSI模型中,是在網絡層上面)
例如TCP,是用於發大量數據的,我發了1萬個包出去,另外一臺電腦就要告訴我是否接受到了1萬個包,若是缺了3個包,就告訴我是第1001,234,8888個包丟了,那我再發一次。這樣,就能保證對方把這個視頻完整接收了。
例如UDP,是用於發送少許數據的。我發20個包出去,通常不會丟包,因此,我無論你收到多少個。在多人互動遊戲,也常常用UDP協議,由於通常都是簡單的信息,並且有廣播的需求。若是用TCP,效率就很低,由於它會不停地告訴主機我收到了20個包,或者我收到了18個包,再發我兩個!若是同時有1萬臺計算機都這樣作,那麼用TCP反而會下降效率,還不如用UDP,主機發出去就算了,丟幾個包你就卡一下,算了,下次再發包你再更新。
TCP協議是會綁定IP和端口的協議,下面會介紹IP協議。
需求4:
傳輸層只是解決了打包的問題。可是若是我有多臺計算機,怎麼找到我要發的那臺?或者,A要給F發信息,中間要通過B,C,D,E,可是中間還有好多節點如K.J.Z.Y。我怎麼選擇最佳路徑?這就是路由要作的事。
因而,發明了
網絡層。即路由器,交換價那些具備尋址功能的設備所實現的功能。這一層定義的是IP地址,經過IP地址尋址。因此產生了IP協議。
需求5:
如今咱們已經保證給正確的計算機,發送正確的封裝事後的信息了。可是用戶級別的體驗好很差?難道我每次都要調用TCP去打包,而後調用IP協議去找路由,本身去發?固然不行,因此咱們要創建一個自動收發包,自動尋址的功能。
因而,發明了
會話層。會話層的做用就是創建和管理應用程序之間的通訊。
需求6:
如今我能保證應用程序自動收發包和尋址了。可是我要用Linux給window發包,兩個系統語法不一致,就像安裝包同樣,exe是不能在linux下用的,shell在window下也是不能直接運行的。因而須要
表示層(presentation),幫咱們解決不一樣系統之間的通訊語法問題。
需求7:
OK,如今全部必要條件都準備好了,咱們能夠寫個android程序,web程序去實現需求把。
補充:
Socket:
這不是一個協議,而是一個通訊模型。其實它最初是伯克利加州分校軟件研究所,簡稱BSD發明的,主要用來一臺電腦的兩個進程間通訊,而後把它用到了兩臺電腦的進程間通訊。因此,能夠把它簡單理解爲進程間通訊,不是什麼高級的東西。主要作的事情不就是:
A發包:發請求包給某個已經綁定的端口(因此咱們常常會訪問這樣的地址182.13.15.16:1235,1235就是端口);收到B的容許;而後正式發送;發送完了,告訴B要斷開連接;收到斷開容許,立刻斷開,而後發送已經斷開信息給B。
B收包:綁定端口和IP;而後在這個端口監聽;接收到A的請求,發容許給A,並作好接收準備,主要就是清理緩存等待接收新數據;而後正式接收;接受到斷開請求,容許斷開;確認斷開後,繼續監聽其它請求。
可見,Socket其實就是I/O操做。Socket並不只限於網絡通訊。在網絡通訊中,它涵蓋了網絡層、傳輸層、會話層、表示層、應用層——其實這都不須要記,由於Socket通訊時候用到了IP和端口,僅這兩個就代表了它用到了網絡層和傳輸層;並且它無視多臺電腦通訊的系統差異,因此它涉及了表示層;通常Socket都是基於一個應用程序的,因此會涉及到會話層和應用層。