談談網路協議 - 資料鏈路層( Data Link)

悠悠清風~發表於2021-08-13

資料鏈路層( Data Link)

  • 鏈路:從1個節點到相鄰節點的一段物理線路(有線或無線),中間沒有其他交換節點

    案例

    上圖可以看出,總共由5條鏈路組成:

    • 第1條:計算機0 => 路由器0,使用CSMA/CD協議,中間雖然有經過集線器,但集線器沒有任何功能,就相當於一條網線
    • 第2條:路由器0 => 路由器1,使用PPP協議
    • 第3條:路由器1 => 路由器2,使用PPP協議,與上一條的資料有區別就是目標MAC與源MAC地址都會發生變化
    • 第4條:**路由器2 ** => 交換機0,使用CSMA/CD協議
    • 第5條:**交換機0 ** => 計算機1,使用CSMA/CD協議,與第4條的資料完全一樣,交換機只做判斷轉換髮哪臺裝置
  • 資料鏈路:在一條鏈路上傳輸資料時,需要有對應的通訊協議來控制資料的傳輸

    • 不同型別的資料鏈路,所用的通訊協議可能是不同的
      • 廣播通道:CSMA/CD協議(比如同軸電纜、集線器等組成的網路)
      • 點對點通道:PPP協議(比如2個路由器之間的通道)
  • 資料鏈路層的3個基本問題

    • 封裝成幀
    • 透明傳輸
    • 差錯檢驗

封裝成幀

image-20210315131543075

  • 幀(Frame)的資料部分
    • 就是網路層傳遞下來的資料包(IP資料包,Packet)
  • 最大傳輸單元MTU(Maximum Transfer Unit)
    • 每一種資料鏈路層協議都規定了所能夠傳送的幀的資料長度上限
    • 乙太網的MTU為1500個位元組

透明傳輸

image-20210315131830865

  • 使用SOH(Start Of Header)作為幀開始符
  • 使用EOT(End Of Transmission)作為幀結束符
  • 資料部分一旦出現了SOH、EOT,就需要進行轉義
    • 對中間出現了SOH、EOT的資料後面新增 ESC 標識,有了這個標識就知道前面的資料是不是開始或結束符了
    • 到了接收端拆包的時候會先去掉轉義字元,還原資料,這個過程被稱為:透明傳輸

image-20210315132118656

差錯檢驗

image-20210315132539689

  • FCS 是根據資料部分 + 首部計算得出的,主要用於資料完整性校驗
    • 在傳送端生成 FCS
    • 在接收端再通過同樣的演算法生成 FCS,再去判斷是現有的 FCS 是否一至,一至資料則是完整的
  • 注:Ethernet(乙太網) V2的版本是沒有 幀開始符和 幀結束符的,後面會講

CSMA/CD 協議

  • CSMA/CD(Carrier Sense Multiple Access with Collision Detectio)
    • 載波偵聽多路訪問/衝突檢測 (多路訪問:廣播)
  • 使用了CSMA/CD的網路可以稱為是乙太網(Ethernet),它傳輸的是乙太網幀
    • 乙太網幀的格式有:Ethernet V2標準、IEEE的802.3標準
    • 使用最多的是:Ethernet V2標準
  • 為了能夠檢測正在傳送的幀是否產生了衝突,乙太網的幀至少要64位元組
    • 如果小於 64位元組,那樣就監聽不到衝突了,衝突監聽如下:
      • 當兩邊都在傳送資料,資料在鏈路中間相撞的時候如何判斷資料是從哪裡發過來的,再重發呢?
      • 如果兩段資料都很短,那在中間碰撞肯定是不知道資料是從哪裡發過來的
      • 如果資料很長,在中間碰撞的時候,這邊還有資料沒傳送完還在繼續傳,這個時候就能知道資料當前是從哪裡發出的,並且能中斷並重發
  • 用交換機組建的網路,已經支援全雙工通訊,不需要再使用CSMA/CD,但它傳輸的幀依然是乙太網幀
    • 所以,用交換機組建的網路,依然可以叫做乙太網

Ethernet(乙太網) V2幀的格式

image-20210315133956084

  • 首部:目標MAC(6位元組)+源MAC(6位元組) + 網路型別 (2位元組)(IPV4/IPV6,用二進位制表式 4 / 6)
  • 尾部:FCS (4位元組)(差錯檢驗值)
  • 乙太網幀:首部 + 資料 + FCS(尾部)
  • 幀 最小為 64 位元組
  • 資料的長度至少是:64 – 6 – 6 – 2 – 4 = 46位元組,最多 1500
  • 注:V2版本是沒有 幀開始符 和 幀結束符的
    • 使用的曼徹斯特編碼,接收端接收幀過程,只要發現沒有訊號跳變,就認為是幀結束
    • 將乙太網幀傳到物理層後,會在前面再加上8位元組的頭部資料,前7位元組為前同步碼(處理時鐘同步之類的),後1位元組為 幀開始定界符

Ethernet (乙太網) V2標準

  • 當資料部分的長度小於46位元組時

    • 資料鏈路層會在資料的後面加入一些位元組填充,填充至46位元組
    • 接收端會將新增的位元組去掉

  • 長度總結

    • 乙太網幀的資料長度:46~1500位元組
    • 乙太網幀的長度:64~1518位元組(目標MAC +源MAC + 網路型別 + 資料 + FCS)

網路卡

image-20210315141151452

  • 網路卡是具有 物理層和資料鏈路層的功能
    • 物理層:物理連線和資料訊號同步、資料的編碼與解碼
    • 資料鏈路層:幀的封裝與拆封、幀的差錯校驗、介質訪問控制(CSMA/CD)
  • 網路卡接收到一個幀,首先會進行差錯校驗,如果校驗通過則接收,否則丟棄
  • Wireshark抓到的幀沒有FCS ,因為它抓到的是差錯校驗通過的幀(幀尾的FCS會被硬體去掉)
    • Wireshark抓不到差錯校驗失敗的幀

PPP協議(Point to Point Protocol)

  • 點到點協議

image-20210315141633456

  • Address欄位:圖中的值是0xFF,形同虛設,點到點通道不需要源MAC、目標MAC地址
  • Control欄位:圖中的值是0x03,目前沒有什麼作用
  • Protocol欄位:內部用到的協議型別
  • 幀開始符、幀結束符:0x7E

PPP協議 - 位元組填充

image-20210315142110592

  • 當資料中含有7D或7E時,為了解決資料衝突的問題,將對應資料進行轉義
    • 0x7E 替換成 0x7D5E
    • 0x7D 替換成 0x7D5D

相關文章