談一談計算機網絡---網絡分層

教科書,老師,網絡上的文章往往對網絡分層有個不恰當的比喻,“爲什麼網絡要分層呀?因爲不同的層次之間有不同的溝通方式,這個叫作協議。例如,一家公司也是分“層次”的,分總經理、經理、組長、員工。總經理之間有他們的溝通方式,經理和經理之間也有溝通方式,同理組長和員工。”
爲什麼說不恰當呢?
第一個問題: 請問經理在握手的時候,員工在幹什麼?很多人聽過 TCP 建立連接的三次握手協議,也會把它當知識點背誦。同理問你,TCP 在進行三次握手的時候,IP 層和 MAC 層對應都有什麼操作呢?
**第二個問題:**在學習第三層協議的時候,IP 協議裏面包含目標地址和源地址。第三層裏往往還會學習路由協議。路由就像中轉站,我們從原始地址 A 到目標地址 D,中間經過兩個中轉站 A->B->C->D,是通過路由轉發的。A 知道自己的下一個中轉站是 B,那從 A 發出來的包,應該把 B 的 IP 地址放在哪裏呢?B 知道自己的下一個中轉站是 C,從 B 發出來的包,應該把 C 的 IP 地址放在哪裏呢?如果放在 IP 協議中的目標地址,那包到了中轉站,怎麼知道最終的目的地址是 D 呢?
**第三個問題:**關於二層設備、三層設備都聽過。二層設備處理的通常是 MAC 層的東西。那我發送一個 HTTP 的包,是在第七層工作的,那是不是不需要經過二層設備?或者即便經過了,二層設備也不處理呢?或者換一種問法,二層設備處理的包裏,有沒有 HTTP 層的內容呢?
網絡分層
到底爲什麼需要分層?在計算機的世界裏,複雜的程序都要分層。比如寫電商系統的時候,複雜的電商還會分數據庫層、緩存層、Compose 層、Controller 層和接入層,每一層專注做本層的事情。要符合設計模式裏面的單一職責原則。那麼網絡也有網絡處理程序,這個程序需要跑在個人計算機上,服務器上,路由器上,處理的內容就可以理解爲內存中一段有格式的數據,格式很複雜。要完成這麼複雜的程序,自然是需要分層處理的。
網絡處理程序工作流程
在這裏插入圖片描述
接受流程是這樣的:
1 網絡包到達網口以後,先看看是否需要處理。如果配置了混雜模式則全部拿進來
2 取下二層的頭,查看MAC地址是不是自己的
3 取下三層的頭,看看IP地址是不是自己的,如果是自己的則判斷是調用TCP處理,還是UDP處理,如果不是則轉發
4 假設是TCP,則判斷四層的頭,看這是一個發起,還是一個應答,又或者是一個正常的數據包,然後分別由不同的邏輯進行處理。如果是發起或者應答,接下來可能要發送一個回覆包;如果是一個正常的數據包,就需要交給上層了。
5 通過四層的頭,找到端口號,交給應用程序,至於應用程序怎麼處理,那是應用程序的事情了。
發送流程:
1 小明點擊了瀏覽器上的某個按鈕,然後瀏覽器通過端口號發給了傳輸層
2 傳輸層看到了是TCP請求,添加一個TCP頭,加上瀏覽器給你的目的端口號
3 TCP頭和HTTP頭已經有了,添加一個IP頭,包括目的IP地址和源IP地址
4 添加MAC頭,包括源MAC地址和目的MAC地址
開頭指出的比喻不對,就是因爲現實生活中,往往是員工說一句,組長補充兩句,然後經理補充兩句,最後總經理再補充兩句。但是在網絡世界,應該是總經理說話,經理補充兩句,組長補充兩句,員工再補充兩句。
總結來說:只要是在網絡上跑的包,都是完整的。可以有下層沒上層,絕對不可能有上層沒下層。
沒有MAC地址只有IP地址的包是發佈出去的。
所以如果一個 HTTP 協議的包跑在網絡上,它一定是完整的。無論這個包經過哪些設備,它都是完整的。
那麼二層設備,三層設備的意思就很明顯了
所謂的二層設備、三層設備,都是這些設備上跑的程序不同而已。
一個 HTTP 協議的包經過一個二層設備,二層設備收進去的是整個網絡包。這裏面 HTTP、TCP、 IP、 MAC 都有。
什麼叫二層設備呀,就是隻把 MAC 頭摘下來,看看到底是丟棄、轉發,還是自己留着。
那什麼叫三層設備呢?就是把 MAC 頭摘下來之後,再把 IP 頭摘下來,看看到底是丟棄、轉發,還是自己留着。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章