網路七層協議的通俗理解
通過兩臺機器通訊過程簡單介紹OSI七層:
需求1:
科學家要解決的第一個問題是,兩個硬體之間怎麼通訊。具體就是一臺發些位元流,然後另一臺能收到。於是,科學家發明了物理層:
主要定義物理裝置標準,如網線的介面型別、光纖的介面型別、各種傳輸介質的傳輸速率等。它的主要作用是傳輸位元流(就是由1、0轉化為電流強弱來進行傳輸,到達目的地後在轉化為1、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程式去實現需求吧。