概述
從數據鏈路層來看,兩個主機之間的通信,可以看成是在幾段不同的鏈路上的通信組成的。
鏈路(Link):就是從一個結點到相鄰結點的一段物理線路,而中間沒有任何其他的交換結點。
數據鏈路(Data Link):是指把實現通信協議的硬件和軟件加到鏈路上,就構成了數據鏈路。
在數據鏈路層上傳輸的數據包,又稱為幀。也就是說,數據鏈路層以幀為單位傳輸和處理數據。
數據鏈路層的三個重要問題:封裝成幀、差錯檢測、可靠傳輸。
封裝成幀
封裝成幀:數據鏈路層給上層交付的協議數據單元添加幀頭和幀尾使之成為幀。
幀頭和幀尾中包含有重要的控制信息,幀頭和幀尾的作用之一就是幀定界。
透明傳輸:是指數據鏈路層對上層交付的傳輸數據沒有任何限制,就好像數據鏈路層不存在一樣。
- 面向字節的物理鏈路使用字節填充(或稱字符填充)的方法實現透明傳輸。
- 面向比特的物理鏈路使用比特填充的方法實現透明傳輸。
為了提高幀的傳輸效率,應當使幀的數據部分的長度盡可能大些。考慮到差錯控制等多種因素,每一種數據鏈路層協議都規定了幀的數據部分的長度上限,即最大傳送單元 MTU(Maximum Transfer Unit)。
差錯檢測
比特差錯:實際的通信鏈路都是不理想的,比特在傳輸過程中可能會產生差錯:1 可能會變成 0,而 0 也可能變成 1。這稱為比特差錯。
誤碼率BER(Bit Error Rate):在一段時間內,傳輸錯誤的比特占所傳輸比特總數的比率稱為誤碼率。
奇偶校驗
在待發送的數據后面添加 1 位奇偶校驗位,使整個數據(包括所添加的校驗位在內)中“1”的個數為奇數(奇校驗)或偶數(偶校驗)。
- 如果有奇數個位發生誤碼,則奇偶性發生變化,可以檢查出誤碼;
- 如果有偶數個位發生誤碼,則奇偶性不發生變化,不能檢查出誤碼(漏檢)。
由於漏檢率較高,因而計算機網絡的數據鏈路層一般不會采用這種檢測方法。
循環冗余校驗 CRC(Cyclic Redundancy Check)
- 收發雙方約定好一個生成多項式 G(x);(算法要求生成多項式必須包含最低次項,即 1)
- 發送方基於待發送的數據和生成多項式計算出差錯檢測碼(冗余碼),將其添加到待傳輸數據的后面一起傳輸;
- 接收方通過生成多項式來計算收到的數據是否產生了誤碼。
檢錯碼只能檢測出幀在傳輸過程中出現了差錯,但並不能定位錯誤,因此無法糾正錯誤。
要想糾正傳輸中的差錯,可以使用冗余信息更多的糾錯碼進行前向糾錯。但糾錯碼的開銷比較大,在計算機網絡中較小使用。
循環冗余檢驗 CRC 有很好的檢錯能力(漏檢率非常低),雖然計算比較復雜,但非常易於用硬件實現,因此被廣泛應用於數據鏈路層。
在計算機網絡中通常采用我們后續課程中將要討論的檢錯重傳方式來糾正傳輸中的差錯,或者僅僅是丟棄檢測到差錯的幀,這取決於數據鏈路層向其上層提供的是可靠傳輸服務還是不可靠傳輸服務。
可靠傳輸
基本概念
出現誤碼(比特錯誤)后的處理取決於數據鏈路層向上層提供的服務類型:
- 不可靠傳輸服務:僅僅丟失有誤碼的幀,其他什么也不做;
- 可靠傳輸服務:想辦法實現發送端發送什么,接收端就收到什么。
一般情況下,有線鏈路的誤碼率比較低,為了減小開銷,並不要求數據鏈路層向上提供可靠傳輸服務。即使出現了誤碼,可靠傳輸的問題由其上層處理。
無線鏈路易受干擾,誤碼率比較高,因此要求數據鏈路層必須向上層提供可靠傳輸服務。
比特差錯只是傳輸差錯中的一種。從整個計算機網絡體系結構來看,傳輸差錯還包括分組丟失、分組亂序以及分組重復。(對於數據鏈路層,分組指幀)夢幻聯動:基因突變
分組丟失、分組亂序與分組重復這些傳輸差錯,一般不會出現在數據鏈路層,而會出現在其上層。可靠傳輸服務並不僅局限於數據鏈路層,其他各層均可選擇實現可靠傳輸。
實現機制
- 停止——等待協議(SW)
- 回退 N 幀協議(GBN)
- 選擇重傳協議(SR)
這三種可靠傳輸實現機制的基本原理並不僅限於數據鏈路層,可以應用到計算機網絡體系結構的各層協議中。
停止——等待協議(SW)(Stop-and-Wait)
發送方每發送完一個數據分組后,就停止發送下一個數據分組,等待來自接收方的確認分組(ACK)或否認分組(NAK)。若收到確認分組(ACK),則可繼續發送下一個數據分組;若收到否認分組(NAK),則重發之前發送的那個數據分組。
- 針對發送數據分組丟失,使用超時重傳。(超世紀時期的重傳時間略大於“從發送方到接收方的平均往返時間”)
- 針對接收方的確認分組(ACK)丟失,使用一個比特(與上一次不同即可)對分組進行編號。
- 針對確認分組(ACK)遲到,對確認分組(ACK)也進行編號。
對於數據鏈路層(點對點信道),往返時間較固定,不必為確認分組(ACK)編號。
停止——等待協議的信道利用率
\(T_D(Data)\):發送方發送數據分組所耗費的發送時延。
\(RTT\):收發雙方之間的往返時間。
\(T_A(Answer)\):接收方發送確認分組(ACK)所耗費的發送時延。
\(U = \frac{T_D}{T_D + RTT + T_A}\)(忽略了處理時延)
\(T_A\)遠小於\(T_D\),可忽略;當\(RTT\)遠大於\(T_D\)時(例如使用衛星鏈路),信道利用率\(U\)會非常低。
回退 N 幀協議(GBN)(Go-Back-N)
針對停止——等待協議,采用流水線傳輸可提高信道利用率。
回退 N 幀協議在流水線傳輸的基礎上,利用發送窗口來限制發送方可連續發送數據分組的個數。
- 采用 3 個比特給分組編序號,即序號 0~7;
- 發送窗口的尺寸\(W_T\)的取值:\(1 < W_T \leq 2^3 - 1\);
- 接收窗口的尺寸\(W_R\)的取值:\(W_R = 1\)。(可以按序接收數據分組)
累計確認:接收方在收到幾個數據分組后,對按序到達的最后一個分組發送確認。\(ACKn\)表示序號\(n\)及以前的所有數據分組都已正確接收。
累計確認優點:即使確認分組丟失,發送方也可能不必重傳。
當通信線路質量不好時,回退 N 幀協議的信道利用率並不比停止——等待協議高。
選擇重傳協議 SR(Selective Request)
回退 N 幀協議的接收窗口尺寸\(W_R\)只能等於\(1\),因此接收方只能按序接收正確到達的數據分組。
一個數據分組的誤碼就會導致其后續多個數據分組不能被接收方按序接收而丟棄(盡管它們無亂序和誤碼),這是對通信資源的極大浪費。
為了進一步提高性能,可設法只重傳出現誤碼的數據分組。因此,接收窗口的尺寸\(W_R\)不應再等於\(1\)(而應大於\(1\)),以便接收方先手下失序到達但無誤碼並且序號落在接收窗口內的那些數據分組,等到所缺分組收齊后再一並送交上層,這就是選擇重傳協議。
注意:選擇重傳協議為了使發送放近重傳出現差錯的分組,接收方不能再采用累計確認,而需要對每個正確接收到的數據分組進行逐一確認!
- 采用 3 個比特給分組編序號,即序號 0~7;
- 發送窗口的尺寸\(W_T\)的取值:\(1 < W_T \leq 2^{(3-1)}\);
- 接收窗口的尺寸\(W_R\)的取值:\(W_R = W_T\)。
發送方每按序收到一個確認分組,發送窗口就向前滑動一個位置。
點對點協議 PPP(Point-to-Point Protocol)
點對點協議 PPP(Point-to-Point Protocol)是目前使用最廣泛的點對點數據鏈路層協議。現在的 PPP 協議已稱為因特網的正式標准。
PPP 協議為在點對點鏈路傳輸各種協議數據報提供了一個標准方法,主要由以下三部分構成:
- 對各種協議數據報的封裝方法(封裝成幀)
- 鏈路控制協議 LCP:用於建立、配置以及測試數據鏈路的連接
- 一套網絡控制協議 NCPs:其中的每一個協議支持不同的網絡層協議
幀格式
| F | A | C | P | Data | FCS | F |
|---|---|---|---|---|---|---|
| 標志字段 | 地址字段 | 控制字段 | 協議字段 | 數據字段 | 幀檢驗序列字段 | 標志字段 |
| 1 字節 | 1 字節 | 1 字節 | 2 字節 | 不超過 1500 字節 | 2 字節 | 1 字節 |
(F、A、C、P)為幀的首部,(FCS、F)為幀的尾部
標志(Flag)字段:PPP 幀的定界符,取值為\(0 \times 7E\)
地址(Address)字段:取值為\(0 \times FF\),預留(目前沒有什么作用)
控制(Control)字段:取值為\(0 \times 03\),預留(目前沒有什么作用)
協議(Protocol)字段:指明幀的數據部分送交哪個協議處理
- 取值\(0 \times 0021\)表示:幀的數據部分為 IP 數據報
- 取值\(0 \times C021\)表示:幀的數據部分為 LCP 分組
- 取值\(0 \times 8021\)表示:幀的數據部分為 NCP 分組
幀檢驗序列(Frame Check Sequence)字段:CRC 計算出的檢驗位,用於檢查 PPP 幀是否存在誤碼。
透明傳輸
PPP 協議實現透明傳輸的方法取決於所使用的鏈路類型。
- 面向字節的異步鏈路:字節填充法(插入“轉義字符”)
- 面向字符的同步鏈路:比特填充法(插入“比特 0”)
差錯檢測
使用 PPP 的數據鏈路層向上不提供可靠傳輸服務。
媒體接入控制
- 靜態划分信道
預先固定分配好信道,這類方法非常不靈活,對於突發性數據傳輸信道利用率會很低。通常在無線網絡的物理層中使用,而不是在數據鏈路層中使用。- 頻分多址
- 時分多址
- 碼分多址
- 動態接入控制
- 受控接入(淘汰)
- 集中控制
- 分散控制
- 隨機接入
- 受控接入(淘汰)
靜態划分信道
復用(Multiplexing)是通信技術中的一個重要概念。復用就是通過一條物理線路同時傳輸多路用戶的信號。
隨機接入——CSMA/CD 協議
早期以太網使用的奇數
載波監聽多址接入/碰撞檢測 CSMA/CD(Carrier Sense Multiple Access/Collision Detection)
曾經用於各種總線結構以太網和雙絞線以太網的早期版本中。
現在的以太網基於交換機和全雙工連接,不會有碰撞,因此沒有必要使用 CSMA/CD。
隨機接入——CSMA/CA 協議(無線局域網使用的協議)
載波監聽多址接入/碰撞避免 CSMA/CA(Carrier Sense Multiple Access/Collision Avoidance)
MAC 地址、IP 地址以及 ARP 協議
- MAC 地址是以太網的 MAC 子層所使用的地址;
- IP 地址是 TCP/IP 體系結構網際層所使用的地址;
- ARP 協議屬於 TCP/IP 體系結構的網際層,其作用是已知設備所分配到的 IP 地址,使用 ARP 協議可以通過該 IP 地址獲取到設備的 MAC 地址;
MAC 地址
當多個主機連接在同一個廣播信道上,要想實現兩個主機之間的通信,則每個主機都必須有一個唯一的標識,即一個數據鏈路層地址。
在每個主機發送的幀中必須攜帶標識發送主機和接收主機的地址。由於這類地址是用於媒體接入控制 MAC(Media Access Control),因此這類地址被稱為 MAC 地址。
MAC 地址一般被固化在網卡(網絡適配器)的電可擦可編程只讀存儲器 EEPROM 中,因此 MAC 地址也被稱為硬件地址、物理地址。
一般情況下,用戶主機會包含兩個網絡適配器:有線局域網適配器(有線網卡)和無線局域網適配器(無線網卡)。每個網絡適配器都有一個全球唯一的 MAC 地址。
而交換機和路由器往往擁有更多的網絡接口,所以會擁有更多的 MAC 地址。
綜上所述,嚴格來說,MAC 地址是對網絡上各接口的唯一標識,而不是對網絡上各設備的唯一標識。
MAC 地址格式(EUI-48)
前 3 個字節:組織唯一標識符 OUI,即代表廠商信息
后 3 個字節:網絡接口標識符,由獲得 OUI 的廠商自行隨意分配
EUI-48 目標壽命為 100 年(直到 2080),鼓勵采用 EUI-64 作為替代
IP 地址
IP 地址是因特網(Internet)上的主機和路由器所使用的地址,用於標識兩部分信息:
- 網絡編號:標識因特網上數以百萬計的網絡
- 主機編號:標識同一網絡上不同主機(或路由器接口)
數據包轉發過程中源 IP 地址和目的 IP 地址保持不變;
數據包轉發過程中源 MAC 地址和目的 MAC 地址逐個鏈路(或逐個網絡)改變。
ARP 協議
由 IP 地址解析出 MAC 地址
基本原理:發送廣播幀請求 MAC 地址
ARP 協議只能在一段鏈路或一個網絡上使用,而不能跨網絡使用
ARP 協議沒有安全驗證機制,存在 ARP 欺騙(攻擊)問題
