計算機網路——資料鏈路層

語言: CN / TW / HK

3.0 資料鏈路層

資料鏈路層使用的通道主要有以下兩種型別:

點對點通道:這種通道使用一對一的點對點通訊方式。

廣播通道:這種通道使用一對多的廣播通訊方式,因此過程比較複雜。廣播通道上連線的主機很多,因此必須使用專用的共享通道協議來協調這些主機的資料傳送。

資料鏈路層的簡單模型

image.png

3.1 使用點對點通道的資料鏈路層

3.1.1 資料鏈路和幀

鏈路(link)是一條無源的點到點的物理線路段,中間沒有任何其他的交換結點。

一條鏈路只是一條通路的一個組成部分。

資料鏈路(data link) 除了物理線路外,還必須有通訊協議來控制這些資料的傳輸。若把實現這些協議的硬體和軟體加到鏈路上,就構成了資料鏈路。

現在最常用的方法是使用介面卡(即網絡卡)來實現這些協議的硬體和軟體。

一般的介面卡都包括了資料鏈路層和物理層這兩層的功能。

資料鏈路層傳送的是幀

image.png

資料鏈路層像個數字管道

常常在兩個對等的資料鏈路層之間畫出一個數字管道,而在這條數字管道上傳輸的資料單位是

image.png

3.1.2 三個基本問題

(1) 封裝成幀

封裝成幀(framing)就是在一段資料的前後分別新增首部和尾部,然後就構成了一個幀。

首部和尾部的一個重要作用就是進行幀定界

image.png

(2) 透明傳輸

image.png

解決透明傳輸問題

傳送端的資料鏈路層在資料中出現控制字元“SOH”或“EOT”的前面插入一個轉義字元“ESC”(其十六進位制編碼是 1B)。

位元組填充(byte stuffing)或字元填充(characterstuffing)——接收端的資料鏈路層在將資料送往網路層之前刪除插入的轉義字元。

如果轉義字元也出現數據當中,那麼應在轉義字元前面插入一個轉義字元。當接收端收到連續的兩個轉義字元時,就刪除其中前面的一個。

image.png

(3) 差錯控制

在傳輸過程中可能會產生位元差錯:1 可能會變成 0 而 0 也可能變成 1。

在一段時間內,傳輸錯誤的位元佔所傳輸位元總數的比率稱為誤位元速率 BER (Bit Error Rate)。

誤位元速率與信噪比有很大的關係。

迴圈冗餘檢驗的原理

在資料鏈路層傳送的幀中,廣泛使用了迴圈冗餘檢驗 CRC 的檢錯技術。

在傳送端,先把資料劃分為組。假定每組 k個位元。

假設待傳送的一組資料 M = 101001(現在k = 6)。我們在 M 的後面再新增供差錯檢測用的 n 位冗餘碼一起傳送。

冗餘碼的計算

用二進位制的模 2運算進行 2^n 乘 M 的運算,這相當於在 M 後面新增 n 個 0。

得到的 (k + n) 位的數除以事先選定好的長度為 (n + 1) 位的除數 P,得出是 Q 而餘數是 R,餘數 R 比除數 P 少 1 位,即 R 是 n 位。

image.png

image.png

幀檢驗序列 FCS

在資料後面新增上的冗餘碼稱為幀檢驗序列 FCS (Frame Check Sequence)。

CRC 是一種常用的檢錯方法,而 FCS 是新增在資料後面的冗餘碼。

FCS 可以用 CRC 這種方法得出,但 CRC 並非用來獲得 FCS 的唯一方法。

接收端對收到的每一幀進行 CRC 檢驗

(1) 若得出的餘數 R = 0,則判定這個幀沒有差錯,就接受(accept)。

(2) 若餘數 R ≠ 0,則判定這個幀有差錯,就丟棄。

我的理解:看到這邊,明白了計算冗餘碼的過程就是在校驗資料是否存在錯誤的過程。除數的選擇必須讓正確的資料除以該除數時得到的餘數等於 0 。

但這種檢測方法並不能確定究竟是哪一個或哪幾個比特出現了差錯。

只要經過嚴格的挑選,並使用位數足夠多的除數 P,那麼出現檢測不到的差錯的概率就很小很小。

僅用迴圈冗餘檢驗 CRC 差錯檢測技術只能做到無差錯接受(accept)。

“無差錯接受”是指:“凡是接受的幀(即不包括丟棄的幀),我們都能以非常接近於 1 的概率認為這些幀在傳輸過程中沒有產生差錯”。也就是說:“凡是接收端資料鏈路層接受的幀都沒有傳輸差錯”(有差錯的幀就丟棄而不接受)。

要做到“可靠傳輸”(即傳送什麼就收到什麼)就必須再加上確認重傳機制。

3.2 點對點協議 PPP

3.2.1 PPP 協議的特點

現在全世界使用得最多的資料鏈路層協議是點對點協議 PPP (Point-to-Point Protocol)。

使用者使用撥號電話線接入因特網時,一般都是使用 PPP 協議。

使用者到 ISP 的鏈路使用 PPP 協議

image.png

1. PPP 協議應滿足的需求

簡單——這是首要的要求

封裝成幀

透明傳輸

差錯檢測

……

2. PPP 協議不需要的功能

糾錯

流量控制

序號

多點線路

半雙工或單工鏈路

3. PPP 協議的組成

1992 年制訂了 PPP 協議。經過 1993 年和 1994 年的修訂,現在的 PPP 協議已成為因特網的正式標準[RFC 1661]。

PPP 協議有三個組成部分

一個將 IP 資料報封裝到序列鏈路的方法。

鏈路控制協議 LCP (Link Control Protocol)。

網路控制協議 NCP (Network Control Protocol)。

3.2.2 PPP 協議的幀格式

image.png

標誌欄位F = 0x7E (符號“0x”表示後面的字元是用十六進位制表示。十六進位制的7E 的二進位制表示是 01111110)。

地址欄位 A 只置為 0xFF。地址欄位實際上並不起作用。

控制欄位 C 通常置為 0x03。

PPP 是面向位元組的,所有的 PPP 幀的長度都是整數字節。

PPP 有一個 2 個位元組的協議欄位

當協議欄位為 0x0021 時,PPP 幀的資訊欄位就是 IP 資料報。

若為 0xC021, 則資訊欄位是 PPP 鏈路控制資料。

若為 0x8021,則表示這是網路控制資料。

透明傳輸問題

當 PPP 用在同步傳輸鏈路時,協議規定採用硬體來完成位元填充(和 HDLC 的做法一樣)。

當 PPP 用在非同步傳輸時,就使用一種特殊的字元填充法

零位元填充

PPP 協議用在 SONET/SDH 鏈路時,是使用同步傳輸(一連串的位元連續傳送)。這時 PPP 協議採用零位元填充方法來實現透明傳輸。

在傳送端,只要發現有 5 個連續 1,則立即填入一個 0。接收端對幀中的位元流進行掃描。每當發現 5 個連續1時,就把這 5 個連續 1 後的一個 0 刪除。

image.png

字元填充

若資訊欄位中出現一個 0x7D 的位元組, 則將其轉變成為 2 位元組序列(0x7D, 0x5D)。

若資訊欄位中出現 ASCII 碼的控制字元(即數值小於 0x20 的字元),則在該字元前面要加入一個 0x7D 位元組,同時將該字元的編碼加以改變。

不提供使用序號和確認的可靠傳輸

PPP 協議之所以不使用序號和確認機制是出於以下的考慮:

(1)在資料鏈路層出現差錯的概率不大時,使用比較簡單的 PPP 協議較為合理。

(2)在因特網環境下,PPP 的資訊欄位放入的資料是 IP 資料報。資料鏈路層的可靠傳輸並不能夠保證網路層的傳輸也是可靠的。

(3)幀檢驗序列 FCS 欄位可保證無差錯接受。

3.3 使用廣播通道的資料鏈路層

3.3.1 區域網的資料鏈路層

區域網最主要的特點是:網路為一個單位所擁有,且地理範圍和站點數目均有限。

區域網具有如下的一些主要優點:

(1)具有廣播功能,從一個站點可很方便地訪問全網。區域網上的主機可共享連線在區域網上的各種硬體和軟體資源。

(2)便於系統的擴充套件和逐漸地演變,各裝置的位置可靈活調整和改變。

(3)提高了系統的可靠性、可用性和殘存性。

區域網的拓撲

image.png

資料鏈路層的兩個子層

為了使資料鏈路層能更好地適應多種區域網標準,802 委員會就將區域網的資料鏈路層拆成兩個子層:

(1)邏輯鏈路控制 LLC (Logical Link Control) 子層

(2)媒體接入控制 MAC (Medium Access Control) 子層。

與接入到傳輸媒體有關的內容都放在 MAC 子層,而 LLC 子層則與傳輸媒體無關,不管採用何種協議的區域網對 LLC 子層來說都是透明的。

image.png

以後一般不考慮 LLC 子層

介面卡的作用

網路介面板又稱為通訊介面卡(adapter)或網路介面卡 NIC (Network Interface Card),或“網絡卡”。

介面卡的重要功能:

(1)進行序列/並行轉換。

(2)對資料進行快取。

(3)在計算機的作業系統安裝裝置驅動程式。

(4)實現乙太網協議。

計算機通過介面卡和區域網進行通訊

image.png

3.3.2 CSMA/CD 協議

最初的乙太網是將許多計算機都連線到一根總線上。當初認為這樣的連線方法既簡單又可靠,因為總線上沒有有源器件。

image.png

乙太網的廣播方式傳送

總線上的每一個工作的計算機都能檢測到 B 傳送的資料訊號。

由於只有計算機 D 的地址與資料幀首部寫入的地址一致,因此只有 D 才接收這個資料幀。

其他所有的計算機(A, C 和 E)都檢測到不是傳送給它們的資料幀,因此就丟棄這個資料幀而不能夠收下來。

具有廣播特性的總線上實現了一對一的通訊。

乙太網提供的服務

乙太網提供的服務是不可靠的交付,即盡最大努力的交付。

當目的站收到有差錯的資料幀時就丟棄此幀,其他什麼也不做。差錯的糾正由高層來決定。

如果高層發現丟失了一些資料而進行重傳,但乙太網並不知道這是一個重傳的幀,而是當作一個新的資料幀來發送。

乙太網傳送的資料都使用曼徹斯特(Manchester)編碼

image.png

我的理解:曼徹斯特編碼中0和1的影象是相反的。而差分曼徹斯特編碼中0和1的影象並不是固定的,而是當碰到1時影象就做一次變換,碰到0時保持不變。

載波監聽多點接入/碰撞檢測(CSMA/CD)

多點接入”表示許多計算機以多點接入的方式連線在一根總線上。

載波監聽”是指每一個站在傳送資料之前先要檢測一下總線上是否有其他計算機在傳送資料,如果有,則暫時不要傳送資料,以免發生碰撞。

碰撞檢測(衝突檢測)

碰撞檢測”就是計算機邊傳送資料邊檢測通道上的訊號電壓大小。

當幾個站同時在總線上傳送資料時,總線上的訊號電壓擺動值將會增大(互相疊加)。當一個站檢測到的訊號電壓擺動值超過一定的門限值時,就認為總線上至少有兩個站同時在傳送資料,表明產生了碰撞。

在發生碰撞時,總線上傳輸的訊號產生了嚴重的失真,無法從中恢復出有用的資訊來。每一個正在傳送資料的站,一旦發現總線上出現了碰撞,就要立即停止傳送,免得繼續浪費網路資源,然後等待一段隨機時間後再次傳送。

傳播時延對載波監聽的影響

image.png

image.png

重要特性

使用 CSMA/CD 協議的乙太網不能進行全雙工通訊而只能進行雙向交替通訊(半雙工通訊)。

每個站在傳送資料之後的一小段時間內,存在著遭遇碰撞的可能性。

這種傳送的不確定性使整個乙太網的平均通訊量遠小於乙太網的最高資料率。

爭用期

最先發送資料幀的站,在傳送資料幀後至多經過時間 2τ (兩倍的端到端往返時延)就可知道傳送的資料幀是否遭受了碰撞。

乙太網的端到端往返時延 2τ 稱為爭用期,或碰撞視窗。

經過爭用期這段時間還沒有檢測到碰撞,才能肯定這次傳送不會發生碰撞。

二進位制指數型別退避演算法(truncated binary exponential type)

發生碰撞的站在停止傳送資料後,要推遲(退避)一個隨機時間才能再發送資料。

基本退避時間取為爭用期 2τ。從整數集合[0,1,…, (2^k −1)]中隨機地取出一個數,記為 r。重傳所需的時延就是 r 倍的基本退避時間。

引數 k 按這個公式計算:k = Min[重傳次數, 10]。當 k < 10 時,引數 k 等於重傳次數。

當重傳達 16 次仍不能成功時即丟棄該幀,並向高層報告。

爭用期的長度與最短有效幀長

乙太網取 51.2 μs 為爭用期的長度。

對於 10 Mb/s 乙太網,在爭用期內可傳送 512 bit,即 64 位元組。

乙太網在傳送資料時,若前 64 位元組沒有發生衝突,則後續的資料就不會發生衝突。所以如果發生衝突,就一定是在傳送的前 64 位元組之內。

由於一檢測到衝突就立即中止傳送,這時已經發送出去的資料一定小於 64 位元組。乙太網規定了最短有效幀長為 64 位元組,凡長度小於 64 位元組的幀都是由於衝突而異常中止的無效幀。

強化碰撞

當傳送資料的站一旦發現發生了碰撞時:

(1)立即停止傳送資料;

(2)再繼續傳送若干位元的人為干擾訊號(jamming signal),以便讓所有使用者都知道現在已經發生了碰撞。

image.png