數據鏈路層的三個基本問題


封裝成幀

  • 封裝成幀(framing)就是在一段數據的前后分別添加首部和尾部,然后就構成了一個幀。確定幀的界限。
  • 首部和尾部的一個重要作用就是進行幀定界。

在這里插入圖片描述

透明傳輸

  • 若傳輸的數據是ASCll碼中“可打印字符(共95個)“集時,就正常。
  • 若傳輸的數據不是僅由“可打印字符”組成時,就會出問題。
    在這里插入圖片描述
    用字節填充法解決透明傳輸的問題
  • 發送端的數據鏈路層在數據中出現控制字符SOHEOT的前面插入一個轉義字符ESC(其十六進制編碼是1B)。
  • 字節填充(byte stuffing)或字符填充(character stuffing)—接收端的數據鏈路層在將數據送往網絡層之前刪除插入的轉義字符。
  • 如果轉義字符也出現數據當中,那么應在轉義字符前再插入一個轉義字符。當接收端收到連續的兩個轉義字符時,就刪除其中前面的一個。
    在這里插入圖片描述

差錯控制

  • 傳輸過程中可能會產生比特差錯:1可能會變成0而0也可能變成1。
  • 在一段時間內,傳輸錯誤的比特占所傳輸比特總數的比率稱為誤碼率BER(Bit Error Rate)
    誤碼率與信噪比有很大的關系。
  • 為了保證數據傳輸的可靠性,在計算機網絡傳輸數據時,必須采用各種差錯檢測措施。

循環冗余檢驗CRC(Cyclic Redundancy Check)

  • 在發送端,先把數據划分為組。假定每組k個比特。
    假設待傳送的一組數據M=101001(現在k=6)。我們在M的后面再添加供差錯檢測用的n位冗余碼一起發送。

冗余碼的計算

  • 用二進制的模2運算進行20乘M的運算,這相當於在M后面添加n個0。
  • 得到的(k+n)位的數除以事先選定好的長度為(n+1)位的除數 P,得出商是Q而余數是R,余數R比除數P少1位,即R是n位。

計算過程
在這里插入圖片描述

  • 10100是要傳輸的數據,則在后面添加n個0,再除以n+1位數,這里是添加3個0,所以除以1101四位數(不一定是1101,自定義)
  • 高位是1則夠除,商1
  • 高位是0不夠除,商0
  • 減的時候,上下相同為0,上下不同為1
  • 然后把得到的余數001添加到原數據后面,就是101001001,傳輸完后,再用這個數除以之前的1101,如果得到0就說明傳輸過程中沒有差錯

幀檢驗序列FCS
剛才最后得到的余數,就是在數據后面添加上的冗余碼,稱為幀檢驗序列FCS(Frame Check Sequence)

循環冗余檢驗CRC和幀檢驗序列FCS並不等同。

  • CRC(Cyclic Redundancy Check)是一種常用的檢錯方法,而FCS是添加在數據后面的冗余碼
  • FCS(Frame Check Sequence)可以用CRC這種方法得出,但CRC並非用來獲得FCS唯一方法。

小結:CRC差錯檢測技術

僅用循環冗余檢驗CRC差錯檢測技術只能做到無差錯接受(accept)

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

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

  • 考慮:幀重復、幀丟失、幀亂序的情況

可以說CRC是一種無比特差錯,而不是無傳輸差錯的檢測機制

  • 0Sl/RM模型的觀點:數據鏈路層要做成無傳輸差錯的!但這種理念目前不被接受!


免責聲明!

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



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