Elaine's Blog 朝著 senior 前進的工程師

OSI 模型

2019-09-30

全名 Open System Interconnection Reference Model

OSI 模型是幹嘛用的?

難道你上網的時候都不會有疑問

  1. 為什麼我們可以打開瀏覽器輸入 google.com 就可以連到 google 的網頁?
  2. 電腦和電腦之間是怎麼溝通的?
  3. acer 的電腦和 asus 的電腦為什麼可以通?
  4. linux 和 windows 怎麼溝通?
  5. 我家網路是中華電信和我朋友家是遠傳,阿怎麼可以通?

所以那麼多的作業系統、硬體設備要進行網路溝通 就得要制訂共同遵守的標準才行

『初探資訊』 OSI網路通訊架構

簡介

  • 這個標準是由國際組織規範的,你的系統裡面只要提供可以加入該標準的程式碼, 那你就能夠透過這個標準與其他系統進行溝通
  • OSI 定義了網路互聯的 7 層框架
    1. 實體層
    2. 資料連結層
    3. 網路層
    4. 傳輸層
    5. 會議層
    6. 表達層
    7. 應用層

應用層 Application Layer

  • 定義應用程式是如何進入 OSI 模式
  • 例如: HTTP、HTTPS、FTP、TELNET、SSH、SMTP、POP3 等

表達層 Presentation Layer

  • 能為不同的用戶端提供資料語法的轉換,使系統能解讀正確的資料,同時亦提供加密/解密、壓縮/解壓縮的功能
    • 格式轉換
      • 如傳送端用 Unicode 碼,接收端用 EBCDIC 碼,傳送端就必須在表達層中將資料轉換成接收端可識別的格式
    • 加密解密
      • 為避免資料在傳送過程中被窺探,可在傳送端作加密的動作,待送達接收端時,再作解密的動作
    • 壓縮解壓縮
      • 壓縮可使資料在傳輸過程中更具有效率,所以同樣的,可在傳送端作壓縮的動作,送達接收端後,再作解壓縮的動作

會議層 Session Layer

  • 定義了如何連接和掛斷連接﹐和在網路上面的數據如何交換
    • 允許程式以電腦名稱註冊成為網路上唯一的位址
    • 在電腦之間建立﹑監測﹑和結束虛擬電路 (Virtual Circuit)
    • 負責電腦之間的信息同步﹐監測資料溝通狀態﹐並對錯誤信息做出處理
  • 負責建立、管理、終止兩個通訊主機間的連線對話(會議)
  • 對話控制
    • 判斷兩個通訊主機當下所扮演的角色
      • 當下誰是 Server、誰是 Client
    • 判斷使用全雙工還是半雙工
      • 全雙工 (雙向同時對話)
        • 會議層幾乎不干涉對話,讓兩台電腦的其他層來管理
      • 半雙工 (雙向交互通訊)
        • 需使用會議層資料記號,讓主機輪流傳送訊息

傳輸層 Transport Layer

  • 傳送資料單位稱為段 Segment
  • 提供 port 到 port 可靠的、透明的數據傳輸服務
  • 傳輸層會將 Data or Message 切割成 Segment 並加上編號,以利接收端重組區段 Segment
    • 流量控制:網路壅塞時,會停止資料傳送
    • 偵錯處理:當接收端收到 Segment 時,會檢查區段編號,若有遺失,就會發出錯誤訊息告知,或要求重送
  • 例如:TCP、UDP
    • TCP 可靠,在進行通訊時,彼此會互傳確認訊息,同時進行資料處理,確保資料完整無遺漏,像是網頁、信箱、檔案共享
    • UDP 即時,像是網路電話,速度優於一切

網路層 Network Layer

  • 傳送資料單位稱為封包 Packet
  • 定義了和相同或不同網路設備連線時,如何將封包送達目的地的路由
    • 邏輯定址
      • Segment 加上傳輸雙方的 IP 位址,以產生 Packet
    • 路徑選擇
      • 考慮網路的壅塞程度、發送的優先權等,以規劃 Packet 最佳傳輸路徑
  • 例如:IP、路由器
    • IP 地址是作業系統所設定的邏輯位置
    • MAC 地址是燒錄在電腦網卡中的實體位置

  • 傳送資料單位稱為幀 Frame
  • 這層的主要作用是通過校驗、確認和反饋重發等手段,將不可靠的物理鏈路轉換成對網絡層來說無差錯的數據鏈路
  • 分為兩個子層進行資料的轉換動作
    • 邏輯鏈路控制(logical link control,LLC)
      • 偏軟體
      • 主要是將上層的 Packet 轉成 Frame
        • 訊息交換
          • Packet 加上傳輸雙方的實體位址 (MAC 位址),以產生 frame
        • 偵錯處理
          • 為資料加上錯誤檢查碼,例如:漢明碼、CRC 碼,讓接收端檢查是否正確。若錯誤就會選擇丟棄或重送
    • 媒介存取控制(Medium access control,MAC)
      • 偏硬體
      • 主要是將 Frame 轉成可被實體所接受的bit
  • 例如:乙太網路、記號環網路、橋接器

  • 每一張網卡都有一個獨一無二的卡號 MAC Address
    • 硬體位址最小由 00:00:00:00:00:00FF:FF:FF:FF:FF:FF (16 進位法)
    • 這 6 bytes 當中,前 3 bytes 為網卡廠商的代碼,後 3 bytes 則是該廠商自行設定的裝置碼了

實體層 Physical Layer

  • 傳送資料單位稱為 bit,只有 0 和 1
  • 定義了網路線的材質、連接器的類型及 Pin 腳排列方式等所有的實體網路器材
  • 例如:針腳、電壓、線纜規範、集線器、中繼器、網卡、主機介面卡等

各個封包的相關性

結論

OSI 七層協定只是一個參考的模型 (model),目前的網路社會並沒有什麼很知名的作業系統在使用 OSI 七層協定的聯網程式碼。那…講這麼多幹嘛?這是因為 OSI 所定義出來的七層協定在解釋網路傳輸的情況來說,可以解釋的非常棒,因此大家都拿 OSI 七層協定來做為網路的教學與概念的理解。至於實際的程式碼,那就交給 TCP/IP 這個東東

那 TCP/IP 是如何運作的呢?舉例常常連上的 Yahoo 入口網站來做個說明好了,整個連線的狀態可以這樣看:

  1. 應用程式階段
    • 打開瀏覽器,在瀏覽器上面輸入網址,按下 Enter。此時網址與相關資料會被瀏覽器包成一個資料,並向下傳給 TCP/IP 的應用層
  2. 應用層
    • 由應用層提供的 HTTP 通訊協定,將來自瀏覽器的資料包起來,並給予一個應用層表頭,再向傳送層丟去
  3. 傳送層
    • 由於 HTTP 為可靠連線,因此將該資料丟入 TCP 封包內,並給予一個 TCP 封包的表頭,向網路層丟去
  4. 網路層
    • TCP 包裹包進 IP 封包內,再給予一個 IP 表頭 (主要就是來源與目標的 IP),向鏈結層丟去
  5. 鏈結層
    • 如果使用乙太網路時,此時 IP 會依據 CSMA/CD 的標準,包裹到 MAC 訊框中,並給予 MAC 表頭,再轉成位元串後, 利用傳輸媒體傳送到遠端主機上。

參考資料


Content