資料鏈路層( 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個基本問題
- 封裝成幀
- 透明傳輸
- 差錯檢驗
封裝成幀
- 幀(Frame)的資料部分
- 就是網路層傳遞下來的資料包(IP資料包,Packet)
- 最大傳輸單元MTU(Maximum Transfer Unit)
- 每一種資料鏈路層協議都規定了所能夠傳送的幀的資料長度上限
- 乙太網的MTU為1500個位元組
透明傳輸
- 使用SOH(Start Of Header)作為幀開始符
- 使用EOT(End Of Transmission)作為幀結束符
- 資料部分一旦出現了SOH、EOT,就需要進行轉義
- 對中間出現了SOH、EOT的資料後面新增 ESC 標識,有了這個標識就知道前面的資料是不是開始或結束符了
- 到了接收端拆包的時候會先去掉轉義字元,還原資料,這個過程被稱為:透明傳輸
差錯檢驗
- 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位元組,那樣就監聽不到衝突了,衝突監聽如下:
- 當兩邊都在傳送資料,資料在鏈路中間相撞的時候如何判斷資料是從哪裡發過來的,再重發呢?
- 如果兩段資料都很短,那在中間碰撞肯定是不知道資料是從哪裡發過來的
- 如果資料很長,在中間碰撞的時候,這邊還有資料沒傳送完還在繼續傳,這個時候就能知道資料當前是從哪裡發出的,並且能中斷並重發
- 如果小於 64位元組,那樣就監聽不到衝突了,衝突監聽如下:
- 用交換機組建的網路,已經支援全雙工通訊,不需要再使用CSMA/CD,但它傳輸的幀依然是乙太網幀
- 所以,用交換機組建的網路,依然可以叫做乙太網
Ethernet(乙太網) V2幀的格式
- 首部:目標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)
網路卡
- 網路卡是具有 物理層和資料鏈路層的功能
- 物理層:物理連線和資料訊號同步、資料的編碼與解碼
- 資料鏈路層:幀的封裝與拆封、幀的差錯校驗、介質訪問控制(CSMA/CD)
- 網路卡接收到一個幀,首先會進行差錯校驗,如果校驗通過則接收,否則丟棄
- Wireshark抓到的幀沒有FCS ,因為它抓到的是差錯校驗通過的幀(幀尾的FCS會被硬體去掉)
- Wireshark抓不到差錯校驗失敗的幀
PPP協議(Point to Point Protocol)
- 點到點協議
- Address欄位:圖中的值是0xFF,形同虛設,點到點通道不需要源MAC、目標MAC地址
- Control欄位:圖中的值是0x03,目前沒有什麼作用
- Protocol欄位:內部用到的協議型別
- 幀開始符、幀結束符:0x7E
PPP協議 - 位元組填充
- 當資料中含有7D或7E時,為了解決資料衝突的問題,將對應資料進行轉義
- 將 0x7E 替換成 0x7D5E
- 將 0x7D 替換成 0x7D5D