標籤:

計算機網路:數據鏈路層

計算機網路:數據鏈路層

來自專欄 Java之鏈

互聯網是指很多異構的網路由路由器聯繫起來的一個大網路。在研究這個大網路之前,我們要庖丁解牛,先研究其局部和單元。最小的網路單元就是區域網,區域網是一個單位所擁有,且地理範圍和站點數量都很有限。

區域網內的計算機通信不需要路由器,所以不會用到網路層的協議,而是依賴數據鏈路層。

上圖說明了數據鏈路層在整個互聯網體系中的位置。數據鏈路層的信道分為兩種:

  • 點對點信道:一對一通信
  • 廣播信道:一對多的廣播通信(使用共享信道協議)

數據鏈路層的協議數據單元是。數據鏈路層把網路層交下來的數據構成幀,發到鏈路上,以及把接收到的幀中的數據取出來,交給網路層。

在點到點信道的數據鏈路層協議上,可以採用簡化的三層模型。無論是主機和主機,主機和路由器,或者兩個路由器之間,我們都可以看成結點和結點之間的通信。

數據鏈路層不必考慮物理層是如何實現比特傳輸的細節,我們甚至可以簡單攝像,節點A沿著數據鏈路層的水平方向把幀輸出給結點B。

數據鏈路層的協議有多個,但有三個共性問題。

  • 封裝成幀

從上圖可以得出以下結論:

  1. 幀 = 幀首部 + 數據部分 + 幀尾部。
  2. 首部和尾部是控制信息,由數據鏈路層封裝而成。
  3. 數據部分存在上限——最大傳輸單元MTU。可以推斷,通信中傳輸數據必須考慮大小

幀的首部標誌著幀的開始,尾部標誌著幀的結束。通過這些控制信息,我們能保證收到一個完整的幀。比如ASCII中的不可列印字元當作首部和尾部。

  • 透明傳輸

利用轉義字元(ESC,十六進位編碼0x1B)來解決幀的數據部分包含控制字元的問題,

  • 差錯檢驗

信道往往不是理想的,所以通信會帶來誤差。常用誤碼率來衡量傳輸誤差。誤碼率BER(bit error rate)等於錯誤的比特佔全部比特的百分比。

那麼我們怎麼知道所接受到的幀有沒有錯誤比特呢?這就需要校驗機制,目前數據鏈路層廣泛採用循環冗餘校驗CRC((Cyclic Redundancy Check)。其原理是在幀的數據部分後面加上冗餘碼(FCS),接受方利用冗餘碼校驗數據部分。具體細節請參考《計算機網路》。

綜上,封裝成幀和透明傳輸保證收到完整的幀,差錯檢驗保證收到正確的幀。這三種機制能保證幀的無差錯傳輸,但不能保證可靠傳輸(發送什麼就接收到什麼)。造成不可靠傳輸的原因有兩類:

  1. 幀中的比特錯誤
  2. 幀重複,幀丟失,幀失序

數據鏈路層的幀的三種機制只能消除第一種錯誤,至於第二種則需要確認和重傳機制。在早期互聯網中,數據鏈路層曾經保證可靠傳輸,但隨著光纖技術的發展,誤碼率大大下降,數據鏈路層就採用了簡單的不可靠傳輸協議,把可靠運輸的實現放在了運輸層中。實踐證明,這樣可以提高通信效率。

最後,我們可以看到,計算機網路本質是通信問題,裡面包含了很多通信元素:完整,誤差,校驗,重複,丟失,失序,可靠傳輸等。

鳴謝:《計算機網路》


推薦閱讀:

計算機網路(筆記)03--計算機網路結構
小明當網管的第三天
計算機網路應用筆記
如何評價「流氓捆綁」軟體?
前端最容易理解的網路知識匯總

TAG:計算機網路 |