天天看點

【計算機網絡】網絡為什麼要分層?

網絡為什麼需要分層?

我覺得最準确的回答應該是:封裝對下層的變化。

如果學過或者了解過設計模式就知道,實作一個複雜的、多功能的程式,為了便于維護與拓展,程式的功能之間應該是解耦和的。是以,複雜的程式都要分層,這是程式設計的要求。(好好了解這句話)

舉個例子,對于複雜的電商網站,會分為 Dao 層(專門負責資料庫連接配接、增删改查等操作),Service層(專門負責業務邏輯處理),Controller層(專門負責業務子產品的流程控制)等,除此之外,為了進一步解耦和,在這些層中還需要首先設計接口,再設計其實作類。每個層單獨完成一份任務,專注一份任務,這就是分層的設計思路。

同樣的道理,在計算機網絡中,每一層的協定負責的工作都是不一樣的,也就對應有了不同裝置來處理(二層裝置、三層裝置)。同時,對下層的變化進行封裝,這裡有必要了解深刻一點。實體層隻關心 0 和 1 是如何傳輸的,而對他們所表達的内容毫不關心;往上一層,資料鍊路層隻關心資料幀是否準确地送到了對應MAC位址的目的主機,而不關心是通過光纖也好,同軸電纜也好,wifi也好,隻要目的主機收到的資料幀沒錯就ok;繼續往上,同理。

是以,這裡引用極客時間中的兩點作為總結:
  • 始終想像自己是一個處理網絡包的程式:如何拿到網絡包,如何根據規則進行處理,如何發送出去。
  • 始終牢記一個原則:隻要在網絡上跑的包,都是完整的。可以有下層沒上層,但絕不能有上層而沒下層。