資料鏈路層( 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/293487.html
標籤:其他
上一篇:ROS——基于python3實作opencv影像處理任務(Melodic)
下一篇:OpenCV 之 特征匹配
