天天看點

資料鍊路層 要解決的三個問題 封裝成幀 透明傳輸 差錯控制

鍊路 (link) 是一條無源的點到點的實體線路段,中間沒有任何其他的交換結點。 一條鍊路隻是一條通路的一個組成部分。

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

  1. 現在最常用的方法是使用擴充卡(即網卡)來實作這些協定的硬體和軟體。(網卡工作在資料鍊路層)
  2. 一般的擴充卡都包括了資料鍊路層和實體層這兩層的功能。(路由器的接口也是工作在資料鍊路層)

也有人采用另外的術語。這就是把鍊路分為實體鍊路和邏輯鍊路。

實體鍊路就是上面所說的鍊路。

邏輯鍊路就是上面的資料鍊路,是實體鍊路加上必要的通信協定。

早期的資料通信協定曾叫做通信規程 (procedure)。是以在資料鍊路層,規程和協定是同義語。 

在資料鍊路層,探讨的是如何将一段資料傳遞給另外一個節點的接口。在傳遞的時候變成電信号,光信号,還是無線信号,我們并不關心這個,因為這是實體層需要做的事情。

資料鍊路層 要解決的三個問題 封裝成幀 透明傳輸 差錯控制

資料鍊路層像個數字管道 

常常在兩個對等的資料鍊路層之間畫出一個數字管道,而在這條數字管道上傳輸的資料機關是幀。

資料鍊路層 要解決的三個問題 封裝成幀 透明傳輸 差錯控制

 資料鍊路層不必考慮實體層如何實作比特傳輸的細節。甚至還可以更簡單地設想好像是沿着兩個資料鍊路層之間的水準方向把幀直接發送到對方。

 三個基本問題

資料鍊路層協定有許多種,不管是哪種資料鍊路協定,但有三個基本問題則是共同的。這三個基本問題是:

  • 封裝成幀
  • 透明傳輸
  • 差錯控制

1.封裝成幀

​分組​

​:當一台端系統向另外一台端系統發送資料時,通常會将資料進行分片,然後為每段加上首部位元組,進而形成計算機網絡的專業術語:分組。這些分組通過網絡發送到端系統,然後再進行資料處理。

  • 封裝成幀 (framing) 就是在一段資料的前後分别添加首部和尾部,然後就構成了一個幀。(網絡層給你了資料包,網卡就要将其封裝一下,加上頭和尾部,從網絡層給到資料鍊路層的ip資料報大小是有限制的,叫做最大傳輸單元,以太網是1500個位元組,如果超過了這個大小,那麼網絡層的IP資料包就要分片)(封裝成幀的意思就是給網絡層的資料包加上頭和尾,有頭有尾代表一個完整的資料)
  • 首部和尾部的一個重要作用就是進行幀定界。
資料鍊路層 要解決的三個問題 封裝成幀 透明傳輸 差錯控制

 舉例:用控制字元進行幀定界的方法舉例

當資料是由可列印的 ASCII 碼組成的文本檔案時,幀定界可以使用特殊的幀定界符。

控制字元 SOH (Start Of Header) 放在一幀的最前面,表示幀的首部開始。另一個控制字元 EOT (End Of Transmission) 表示幀的結束。

資料鍊路層 要解決的三個問題 封裝成幀 透明傳輸 差錯控制

ASCII表裡面有非列印的字元,這些字元不是鍵盤輸入的,都是一些控制字元。 

資料鍊路層 要解決的三個問題 封裝成幀 透明傳輸 差錯控制

2. 透明傳輸

如果資料中的某個位元組的二進制代碼恰好和 SOH 或 EOT 一樣,資料鍊路層就會錯誤地“找到幀的邊界”。當作無效幀丢棄就産生錯誤了。 

資料鍊路層 要解決的三個問題 封裝成幀 透明傳輸 差錯控制

解決透明傳輸問題

解決方法:位元組填充 (byte stuffing) 或字元填充 (character stuffing)。

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

接收端的資料鍊路層在将資料送往網絡層之前删除插入的轉義字元。

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

資料鍊路層 要解決的三個問題 封裝成幀 透明傳輸 差錯控制

封裝成幀加上頭和尾,傳輸的時候加上轉義字元,接收的時候去掉轉義字元,加頭和尾的過程叫做封裝成幀,插入轉義字元和去掉轉義字元的過程叫透明傳輸。

不同鍊路協定解決的透明傳輸的方法不一樣,這個轉義字元到底是啥,完全由資料鍊路層搞定,但是,所有的資料鍊路層都要解決這個問題。

透明

指某一個實際存在的事物看起來卻好像不存在一樣。

“在資料鍊路層透明傳送資料”表示無論發送什麼樣的比特組合的資料,這些資料都能夠按照原樣沒有差錯地通過這個資料鍊路層。

透明傳輸是指不管所傳的資料是什麼樣的比特組合,都能在鍊路上傳輸,當所傳輸的資料中的比特組成恰巧與鍊路層的某個控制資訊完全一緻時,就必須采取适當的措施,這樣才不會使控制資料與需要傳輸的資料混淆,這樣才能確定資料鍊路層的透明傳輸。

 3. 差錯檢測

鍊路層資料以幀的形式發送,在發送的過程中,接收方節點的鍊路層硬體可能會由于信号幹擾或者電磁噪音等原因錯誤的把 1 識别為 0 ,0 識别為 1。這種情況下沒有必要轉發一個有差錯的資料報,是以許多鍊路層協定提供一種機制來檢測這樣的比特差錯。通過讓方節點在幀中包括差錯檢測比特,讓接收節點進行差錯檢查,以此來完成這項工作。

運輸層和網絡層通過網際網路校驗和來實作差錯檢測,鍊路層的差錯檢測通常更複雜,并且用硬體實作。差錯糾正類似于差錯檢測,差別在于接收方不僅能檢測幀中出現的比特差錯,而且能夠準确的确定幀中出現差錯的位置。

差錯檢測和糾正的技術主要有

  • 奇偶校驗:它主要用來差錯檢測和糾正
  • 校驗和:這是一種用于運輸層檢驗的方法
  • 循環備援校驗:它更多應用于擴充卡中的鍊路層
資料鍊路層 要解決的三個問題 封裝成幀 透明傳輸 差錯控制
  • 在一段時間内,傳輸錯誤的比特占所傳輸比特總數的比率稱為誤碼率 BER (Bit Error Rate)。
  • 誤碼率與信噪比有很大的關系。
  • 為了保證資料傳輸的可靠性,在計算機網絡傳輸資料時,必須采用各種差錯檢測措施。
  • 在資料鍊路層傳送的幀中,廣泛使用了循環備援檢驗 CRC 的檢錯技術。 
資料鍊路層 要解決的三個問題 封裝成幀 透明傳輸 差錯控制

幀的資料部分+資料鍊路層首部來計算幀校驗序列,計算完之後将幀校驗序列寫到FCS一塊發出去。接收端收到之後使用幀校驗序列來驗證裡面有沒有差錯。如果有差錯就丢掉了。

在資料鍊路層是不可靠傳輸,如果有差錯就直接丢棄,不會重傳。

資料鍊路層有沒有重傳功能,完全看資料鍊路層協定有沒有這個功能。ppp hdlc以太網協定都不具有可靠傳輸,有錯誤就直接丢棄,由傳輸層來實作。

需要注意的是校驗的部分是幀的資料部分和資料鍊路層首部,檢擦這些部分在傳輸過程當作有沒有差錯。用于校驗的部分寫到幀的FCS位置。

循環備援檢驗的原理

  • 在發送端,先把資料劃分為組。假定每組 k 個比特。
  • 在每組 M 後面再添加供差錯檢測用的 n 位備援碼,然後一起發送出去。
資料鍊路層 要解決的三個問題 封裝成幀 透明傳輸 差錯控制

 備援碼的計算

  • 用二進制的模 2 運算進行 2n 乘 M 的運算,這相當于在 M 後面添加 n 個 0。
  • 得到的 (k + n) 位的數除以事先標明好的長度為 (n + 1) 位的除數 P,得出商是 Q 而餘數是 R,餘數 R 比除數 P 少 1 位,即 R 是 n 位。
  • 将餘數 R 作為備援碼拼接在資料 M 後面,一起發送出去。

備援碼的計算舉例

  • 現在 k = 6, M = 101001。
  • 設 n = 3, 除數 P = 1101,
  • 被除數是 2nM = 101001000。
  • 模 2 運算的結果是:商 Q = 110101,餘數 R = 001。
  • 把餘數 R 作為備援碼添加在資料 M 的後面發送出去。發送的資料是:2nM + R,即:101001001,共 (k + n) 位。

 循環備援檢驗的原理說明 

資料鍊路層 要解決的三個問題 封裝成幀 透明傳輸 差錯控制

假設101001是我們要傳輸的資料,備援碼需要生成3位二進制,這個時候就需要在原始資料後面加上3個0,然後選一個除數,除數要比備援碼多一位,備援碼是3位,除數就得是4位。

這個除數其實是每種協定提前定義好的,發送端和接受端都知道這個除數。

備援碼的計算

資料鍊路層 要解決的三個問題 封裝成幀 透明傳輸 差錯控制

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

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

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

  • 但這種檢測方法并不能确定究竟是哪一個或哪幾個比特出現了差錯。
  • 隻要經過嚴格的挑選,并使用位數足夠多的除數 P,那麼出現檢測不到的差錯的機率就很小很小。

幀檢驗序列 FCS

算出來的CRC叫做幀校驗序列,CRC是一個算法,當然也可以通過其他算法得出幀校驗序列,FCS的計算方法除了CRC還有其他算法算出幀校驗序列。

在資料後面添加上的備援碼稱為幀檢驗序列 FCS (Frame Check Sequence)。

循環備援檢驗 CRC 和幀檢驗序列 FCS 并不等同。

  • CRC 是一種常用的檢錯方法,而 FCS 是添加在資料後面的備援碼。
  • FCS 可以用 CRC 這種方法得出,但 CRC 并非用來獲得 FCS 的唯一方法。

應當注意

  • 僅用循環備援檢驗 CRC 差錯檢測技術隻能做到無差錯接受 (accept)。
  • “無差錯接受”是指:“凡是接受的幀(即不包括丢棄的幀),我們都能以非常接近于 1 的機率認為這些幀在傳輸過程中沒有産生差錯”。
  • 也就是說:“凡是接收端資料鍊路層接受的幀都沒有傳輸差錯”(有差錯的幀就丢棄而不接受)。
  • 單純使用 CRC 差錯檢測技術不能實作“無差錯傳輸”或“可靠傳輸”。
  • 應當明确,“無比特差錯”與“無傳輸差錯”是不同的概念。
  • 在資料鍊路層使用 CRC 檢驗,能夠實作無比特差錯的傳輸,但這還不是可靠傳輸。
  • 要做到“無差錯傳輸”(即發送什麼就收到什麼)就必須再加上确認和重傳機制。
  • 本章介紹的資料鍊路層協定都不是可靠傳輸的協定。

補充

1 資料鍊路層概述

資料鍊路層在實體層提供的服務的基礎上向網絡層提供服務,其最基本的服務是将源自網絡層來的資料可靠地傳輸到相鄰節點的目标機網絡層。資料鍊路層在不可靠的實體媒體上提供可靠的傳輸。

該層的作用包括:實體位址尋址、資料的成幀、流量控制、資料的檢錯、重發等。

有關資料鍊路層的重要知識點:

  • 資料鍊路層為網絡層提供可靠的資料傳輸;
  • 基本資料機關為幀;
  • 主要的協定:以太網協定;
  • 兩個重要裝置名稱:網橋和交換機。

封裝成幀:“幀”是資料鍊路層資料的基本機關:

資料鍊路層 要解決的三個問題 封裝成幀 透明傳輸 差錯控制

透明傳輸:“透明”是指即使控制字元在幀資料中,但是要當做不存在去處理。即在控制字元前加上轉義字元ESC。

  • 奇偶校驗碼–局限性:當出錯兩位時,檢測不到錯誤。
  • 循環備援檢驗碼:根據傳輸或儲存的資料而産生固定位數校驗碼。

繼續閱讀