數據鏈路層實現的三大功能分別為:
(1) 封裝成幀
(2) 透明傳輸(3) 差錯控制
1、封裝成幀
封裝成幀就是在一段數據前后分別加入首部和尾部,構成了一個幀。
接收端在收到物理層上交的比特流后。能依據首部跟尾部的標記。從收到的比特流識別幀的開始和結束。
此外,首部跟尾部還包含很多必要的控制信息。
在發送幀時,是從幀首部開始發送。各種數據鏈路層協議都要對幀首尾部格式有明白的規定。每一種協議都限定了幀的數據部分長度上限-----最大傳輸單元MTU。
附:最大傳輸單元MTU(筆者騰訊一面親歷)
一個UDP報文能傳輸的最大數據為多大?
以太網的數據鏈路層規定了最大傳輸單元MTU=1500(字節),那么實際上一個IP數據報最長也就是1500 字節,而IP數據報又是由UDP報文或TCP流封裝得到的,那么一個UDP報文最大長度為1500-20=1480.20為IP數 據報的首部長度。
而在運輸層。UDP也有自己的首部(8字節),所以在應用層一個UDP報文能傳遞的最大數據 為1500-20-8=1472(字節)

2、透明傳輸
什么是透明傳輸,為什么須要透明傳輸?看下圖:

解決透明傳輸的方法:
1、發送端的數據鏈路層在數據中出現控制字符“SOH”或“EOT”的前面插入一個轉義字符“ESC”(其十六進制編碼是 1B)。
2、字節填充或字符填充——接收端的數據鏈路層在將數據送往網絡層之前刪除插入的轉義字符。
3、假設轉義字符也出現數據其中。那么應在轉義字符前面插入一個轉義字符。當接收端收到連續的兩個轉義字符時。就刪除其中前面的一個。
實現方法見下圖:

3、差錯檢測
在傳輸過程中可能會產生比特差錯:1 可能會變成 0 而 0 也可能變成 1。
為了保證數據傳輸的可靠性,在計算機網絡數據傳輸時。必須採用各種差錯檢測措施。
CRC循環冗余檢測
在數據鏈路層傳送的幀中,廣泛使用了循環冗余檢驗 CRC 的檢錯技術。
發送端運行的操作:
在發送端,先把數據划分為組。假定每組 k 個比特。
如果待傳送的一組數據 M = 101001(如今 k = 6)。
我們在 M 的后面再加入供差錯檢測用的 n 位冗余碼一起發送。
冗余碼計算實例:
如今 k = 6, M = 101001。
設 n = 3, 除數 P = 1101,(除數P是我們自己約定的。n的取值是 P的位數減1)
被除數是 (2^n)M = 101001000。
(對M從后開始補0,一共補n位)
模 2 運算的結果是:商 Q = 110101,(計算結果見下圖)
余數 R = 001。
把余數 R 作為冗余碼加入在數據 M 的后面發送出去。發送的數據是:101001001。共 (k + n) 位。

CRC 是一種經常使用的檢錯方法,而 FCS 是加入在數據后面的冗余碼。
接收端運行的操作:
從發送端接收到數據M:101001001(包括冗余碼FCS)
發送端、接收端約定的除數 P = 1101
M%P 運算結果若為0。表示無比特差錯
M%P 運算結果不為0,表示比特差錯,丟棄該幀
僅用循環冗余檢驗 CRC 差錯檢測技術僅僅能做到無差錯接受。“無差錯接受”是指:“凡是接受的幀(即不包含丟棄的幀)。我們都能以很接近於 1 的概率覺得這些幀在傳輸過程中沒有產生差錯”。
也就是說:“凡是接收端數據鏈路層接受的幀都沒有傳輸差錯”(有差錯的幀就丟棄而不接受)。要做到“可靠傳輸”(即發送什么就收到什么)就必須再加上確認和重傳機制。
本文由Cout_Sev 搜集整理並改動
自謝希仁老前輩《計算機網絡第5版》
轉載請注明出處
謝謝!
