1. 程式人生 > >為啥計算機網路需要分層?難道是多此一舉

為啥計算機網路需要分層?難道是多此一舉

多點頭髮,少點程式碼

我是龍叔,一個分享網際網路技術和心路歷程的大叔

本文已經收錄至我的GitHub,歡迎大家踴躍star 和 issues。

https://github.com/midou-tech/articles

最近很忙,寫技術文章還是很花費時間的。但是,就在前幾天出了一篇TCP粘包問題的文章 (TCP粘包,難道說這是一個偽命題???),反映不錯。本來計劃計算機網路文章慢慢的出,現在看來必須的加快速度了。

龍叔在學習網路的時候有這樣幾個疑惑:

  • 為什麼需要抽象出五層模型出來?
  • 難道不是直接在網線(光纖傳輸)中傳輸資料就好了麼?大不了到了端點用的是WIFI傳輸(無線訊號)。

這兩個問題真的很困惑我,不知道大家有沒有這樣的疑惑?如果有的話,龍叔將為你答疑解惑。如果有其他的疑惑歡迎加我微信溝通 (公眾號回覆【龍叔】即可獲得龍叔的聯絡方式)。

在回答問題之前我先帶你領略下使用最為廣泛的五層模型,分別是哪五層?各層解決了什麼問題?

五層模型是哪五層?

網路模型

左邊是OSI的七層模型,這模型很牛逼。但是現在基本是存在教科書的啦,學習網路的同學都是知道有這個模型,實際情況使用很少的。

右邊是TCP/IP五層分層模型。分別是物理層(硬體)、資料鏈路層(網絡卡層)、網路層(網際網路層)、傳輸層、應用層。在日常工作中接觸最多的是上兩層,偶爾會去觸碰網路層。資料鏈路層和物理層不是我們工作範圍。當然如果是一些專門的網路安全部門,網管(不是網咖的網管)等崗位,下面幾層就是非常熟悉的。

五層模型還是很清楚明瞭的,每層用到的重要協議都表示在圖中,還表示了作業系統的核心工作範圍和使用者工作範圍。

各層解決了什麼問題?

應用層:

應用層是網路體系架構中的最高層。這意味著什麼?想想就知道,最高層就是要和人互動的層次嘛。

應用層是計算機網路與使用者互動的介面或者介面,直接向用戶提供服務。

提供哪些服務呢?

這個…,就非常多了,比如Web服務、E-mail服務、DNS服務、DHCP服務、FTP服務等等。

所以很明瞭,應用層解決的問題就是如何為使用者提供服務,以及提供高效、可靠、滿意的服務。如何解決這些問題也就是我們這些攻城獅存在的必要了,根據不同的業務場景用不同的方法解決這些問題。例如使用多執行緒、協程,高併發的web框架,使用epoll處理模式,分散式處理等等技術來解決提供高效、可靠、滿意的服務。

總結下,應用層是為使用者提供服務介面或者介面,同時要解決服務的高效、可靠、滿意。

傳輸層

負責端到端的通訊,是面向網路通訊的低三層和麵向資訊處理的高三層之間的中間一層,起到橋樑作用。很明顯了,傳輸層解決的問題就是端到端的傳輸問題。

看到這句話肯定很多人有疑問,先別說,繼續看(我知道有人會說,網路層不是已經把資料轉發到對應的主機了麼,為何還要傳輸層?)。

位於兩臺網路主機間的真正資料通訊主體不是這兩臺主機,而是兩臺主機中的各種網路應用程序,也就是應用程式。一臺主機上有很多應用程式,很多應用程式都在進行網路通訊,這時候就必須使用到傳輸層的知識去解決了。

怎樣完成端到端的傳輸呢?

分為兩個步驟:一是虛擬傳輸連線的建立(此處仍僅針對面向連線的傳輸層協議),二是源端使用者資料沿著傳輸連線傳送到目的端。

在整個資料傳輸過程中,傳輸層服務需要完成以下8個方面的基本功能:傳輸層定址、傳輸連線建立、資料傳輸、傳輸連線釋放、流量控制、擁塞控制、多路複用和解複用、崩潰恢復。

這裡面每個功能都能細說一篇文章,這裡就不一一展開了,後面會出系列的文章,所以點關注,不迷路。每個功能都是面試的考點,所以我後面一定會快速更新出來的。

總結下,傳輸層主要是為了解決端到端(這裡的端到端指的是程序到程序)的通訊,起到網路通訊橋樑作用。

網路層

網路層也被稱為中轉層,是網路體系結構中非常重要的一層,在技術上又是非常複雜的一層,因為它既要解決不同網路的節點間通訊的路由和協議識別問題,又要通過路由選擇策略解決網路擁塞問題,儘可能提高網路通訊的可靠性。

網路層解決的主要問題是,從A主機把資料運送到B主機是走高速呢、飛機呢、還是火車呢或者是多種混合的方案呢。一句話就是,網路層關注的是如何將分組從源端沿著網路路徑傳送到目的端(這個端指的是主機不是應用程式)。

為了實現這個目標,網路層必須知道通訊子網的拓撲結構,並且在拓撲結構中選擇適當的路徑。同時網路層還必須謹慎地選擇路由路徑,以避免發生某些通訊線路和路由器負載過重,而其他線路和路由器空閒的情形。

總結下,網路層主要是為了解決不同網路之間資料傳輸和轉發問題。

資料鏈路層

物理層中也有許多規程或協議,但它們是用來構建物理傳輸線路、建立物理意義的網路通訊,不是用來控制資料傳輸的。

設計資料鏈路層的主要解決的問題就是在原始的、有差錯的物理傳輸線路的基礎上,採取差錯檢測、差錯控制與流量控制等方法,將有差錯的物理線路改進成邏輯上無差錯的資料鏈路,以便向它的上一層(網路層)提供高質量的服務。一句話總結就是 控制資料傳輸。

總結下,資料鏈路層是為了解決資料傳輸的控制作用。

物理層

物理層位於各計算機網路體系結構的最底層,主要負責在物理介質上為資料鏈路層提供原始位元流傳輸的物理連結。

物理層解決的問題就是資料傳輸。上面的所有層都是封裝資料和管理,物理層是傳輸資料的唯一出口,所有資料到達物理層都會變成二進位制的載波訊號。

總結下,物理層就是真正傳輸資料。

為什麼不是直接在物理線路中進行通訊就行了?而是搞出這麼多層網路模型呢?

我覺得在學習計算機網路時能思考這個問題的都是非常