C語言中文網 目錄
首頁 > socket 閱讀:2,467

OSI網絡七層模型簡明教程

如果你讀過計算機專業,或者學習過網絡通信,那你一定聽說過 OSI 模型,它曾無數次讓你頭大。OSI 是 Open System Interconnection 的縮寫,譯為“開放式系統互聯”。

OSI 模型把網絡通信的工作分為 7 層,從下到上分別是物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。

OSI 只是存在于概念和理論上的一種模型,它的缺點是分層太多,增加了網絡工作的復雜性,所以沒有大規模應用。后來人們對 OSI 進行了簡化,合并了一些層,最終只保留了 4 層,從下到上分別是接口層、網絡層、傳輸層和應用層,這就是大名鼎鼎的 TCP/IP 模型。

OSI 七層網絡模型和 TCP/IP 四層網絡模型的對比
圖1:OSI 七層網絡模型和 TCP/IP 四層網絡模型的對比

這個網絡模型究竟是干什么呢?簡而言之就是進行數據封裝的。

我們平常使用的程序(或者說軟件)一般都是通過應用層來訪問網絡的,程序產生的數據會一層一層地往下傳輸,直到最后的網絡接口層,就通過網線發送到互聯網上去了。數據每往下走一層,就會被這一層的協議增加一層包裝,等到發送到互聯網上時,已經比原始數據多了四層包裝。整個數據封裝的過程就像俄羅斯套娃。

當另一臺計算機接收到數據包時,會從網絡接口層再一層一層往上傳輸,每傳輸一層就拆開一層包裝,直到最后的應用層,就得到了最原始的數據,這才是程序要使用的數據。

給數據加包裝的過程,實際上就是在數據的頭部增加一個標志(一個數據塊),表示數據經過了這一層,我已經處理過了。給數據拆包裝的過程正好相反,就是去掉數據頭部的標志,讓它逐漸現出原形。

你看,在互聯網上傳輸一份數據是多么地復雜啊,而我們卻感受不到,這就是網絡模型的厲害之處。我們只需要在代碼中調用一個函數,就能讓下面的所有網絡層為我們工作。

我們所說的 socket 編程,是站在傳輸層的基礎上,所以可以使用 TCP/UDP 協議,但是不能干「訪問網頁」這樣的事情,因為訪問網頁所需要的 http 協議位于應用層。

兩臺計算機進行通信時,必須遵守以下原則:
  • 必須是同一層次進行通信,比如,A 計算機的應用層和 B 計算機的傳輸層就不能通信,因為它們不在一個層次,數據的拆包會遇到問題。
  • 每一層的功能都必須相同,也就是擁有完全相同的網絡模型。如果網絡模型都不同,那不就亂套了,誰都不認識誰。
  • 數據只能逐層傳輸,不能躍層。
  • 每一層可以使用下層提供的服務,并向上層提供服務。

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo