【網絡基礎】數據鏈路層實現的三大功能


數據鏈路層實現的三大功能分別為:

(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版》

轉載請注明出處

謝謝!





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM