計算機網絡學習筆記 3.3 差錯控制


一、產生差錯的原因

概括來說,傳輸中的差錯都是由於噪聲引起的。

全局性

由於線路本身電氣特性所產生的 隨機噪聲 (熱噪聲),是信道固有的,隨機存在的。

解決辦法:提高信噪比來減少或避免干擾。(對傳感器下手)

局部性

外界特定的短暫原因所造成的 沖擊噪聲 ,是產生差錯的 主要原因 

解決辦法:通常利用編碼技術來解決。

二、差錯類型

差錯分為兩類:

  • 位錯(比特錯) 
    比特位出錯,1變成0,0變成1
  • 幀錯 
    發送:[#1]-[#2]-[#3] 
    發生幀錯:
    • 丟失:收到[#1]-[#3]
    • 重復:收到[#1]-[#2]-[#2]-[#3]
    • 失序:收到[#1]-[#3]-[(2]

鏈路層為網絡層提供服務:無確認無連接服務,有確認無連接服務,有確認面向連接服務。

通信質量好、有線傳輸鏈路:不使用確認和重傳機制

通信質量差的無線傳輸鏈路:使用確認和重傳機制

三、差錯控制

這里主要討論比特錯(位錯)

冗余編碼

在有效數據(信息位)發送之前,先按某種關系附加上一定的冗余位,構成一個符合某一規則的碼字后再發送。

  • 當要發送的有效數據變化時,相應的冗余位也隨之變化,使碼字遵從不變的規則。
  • 接收端根據收到碼字是否仍符合原規則,從而判斷是否出錯。

檢錯編碼

檢錯編碼都采用冗余編碼技術。

  • 僅能檢查出錯誤,不能糾正錯誤
  • 常見的檢錯編碼有奇偶校驗碼和循環冗余碼。

奇偶校驗碼

奇偶校驗碼是奇校驗碼和偶校驗碼的統稱,它由n-1位信息元和1位校驗元組成 
在這里插入圖片描述

奇校驗碼

  • 在附加一個校驗元后,碼長為n的碼字中"1"的個數為奇數

偶校驗碼

  • 在附加一個校驗元以后,碼長為n的碼字中"1"的個數為偶數

例: 
如果一個字符S的ASCI編碼從低到高依次為1100101,采用奇校驗,在下述收到的傳輸后字符中,哪種錯誤不能檢測?

A. 11000011 B. 11001010 C. 11001100 D.11010011

答案:D

 

奇偶校驗碼特點

  • 只能檢查出 奇數個 比特錯誤,檢錯能力為 50% 

例:11100100 奇校驗:1 11100100

  • 1位錯:1 11100101,可以發現
  • 2位錯:1 01100101,不能發現

CRC循環冗余碼

循環冗余碼(Cyclic Redundancy Code,CRC)又稱多項式碼。

序列對應多項式

任何一個由二進制數位串組成的代碼都可以與一個只含有0和1兩個系數的多項式建立一一對應關系:

  • 一個 k 位幀可以視為從 X k-1 到 X 的 k 次多項式的系數序列,這個多項式的階數為 k-1,高位是 X k-1 項的系數,下一位是 X k-2的系數,以此類推。

例: 
1110011有7位,表示成多項式是 X +X +X +X+1

多項式 X +X +X +X+1 對應的數位串是 110110

模2除法

類似普通除法,按照模2運算規則,加法不進位,減法不借位,與 按位異或 相同。

計算: 按位異或

幀檢驗序列

給定一個 m bit的幀或報文,發送器生成一個 r bit的序列(位數有規定,即 r 是確定的),稱為幀檢驗序列(FCS)。這樣所形成的幀將由 m+r 比特組成。

判斷差錯

發送方和接收方事先商定一個多項式G(x)(最高位和最低位必須為1),使這個帶檢驗碼的幀剛好能被預先確定的多項式 G(x) 整除。接收方用相同的多項式去除收到的幀,如果無余數,那么認為無差錯。

計算冗余碼

假設一個幀有m位,其對應的多項式為M(x), 多項式 G(x) 的階為 r,則計算冗余碼的步驟如下:

  1. 加0:在幀的低位端加上 r 個 0,得到被除數。
  2. 模2除法。利用模2除法,用G(x)對應的數據串去除被除數,得到的余數即為冗余碼(共 r 位,前面的 0 不可省略)。

例: 
要發送的數據是1101 0110 11,采用CRC校驗,生成多項式是10011,那么最終發送的數據應該是?

答案: 
多項式階數 r = 4,在要發送的數據后添加4個0得到被除數1101 0110 11 0000。用10011除被除數,得到余數1110,則幀檢驗序列(FCS)為1110。最終發送的數據是要發送的原數據拼接上幀檢驗序列,即1101 0110 11 1110。 
在這里插入圖片描述 
接收端檢錯 
把收到的每一個幀都除以同樣的除數,然后檢查得到的余數。

  • 余數為0,判定這個幀沒有差錯,接受。
  • 余數為不為0,判定這個幀有差錯(無法確定到位), 丟棄 。 
    FCS的生成以及接收端CRC檢驗都是 由硬件實現 ,處理很迅速,因此不會耽誤數據的傳輸。

在數據鏈路層僅僅使用循環冗余檢驗CRC差錯檢測技術,只能做到對幀的無差錯接收即“凡是接收端數據鏈路層接受的幀,我們都能以 非常接近於1的概率 認為這些幀在傳輸過程中沒有產生差錯”。接收端丟棄的幀雖然曾收到了,但是最終還是因為有差錯被丟棄。

“凡是接收端數據鏈路層接收的幀均無差錯”。

糾錯編碼

海明碼

海明碼:發現雙比特錯,只能糾正單比特錯。

工作原理:動一發而牽全身

工作流程:

  1. 確定校驗碼位數r
  2. 確定校驗碼和數據的位置
  3. 求出校驗碼的值
  4. 檢錯並糾錯

確定校驗碼位數r

海明不等式:2 ≥ k + r + 1

r 為冗余信息位(校驗位),k 為信息位,一共發送 k + r 位。

例:要發送的數據:D = 101101

數據的位數 k = 6,滿足 2 ≥ k + r + 1 的最小 r 為 4,也就是D = 101101 的海明碼應該有 6 + 4 = 10位,男性英文名其中原數據 6 位,效驗碼 4 位。

確定校驗碼和數據的位置

假設這4位校驗碼分別為 P 、P 、P 、P ;數據從左到右為 D 、 D … D 6

校驗碼放在 2 的位置,n = 0,1,…

例:要發送的數據:D = 101101,需插入校驗碼 P 、P 、P 、P 4

海明碼:

數據位 1 2 3 4 5 6 7 8 9 10
代碼 1 2 1 3 2 3 4 4 5 6
待定 待定 1 待定 0 1 1 待定 0 1

求出校驗碼的值

  1. 求二進制位數 
    看最后一個數據位數二進制表示是多少位 

    例:數據 D = 101101,數據位數為10,用二進制表示為1010,一共4位

  2. 求二進制 
    將數據位用二進制表示

    二進制 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010
    代碼 1 2 1 3 2 3 4 4 5 6
    待定 待定 1 待定 0 1 1 待定 0 1
  3. 校驗分組 
    校驗二進制第 i 位 為 1 的數據 

    例:P 校驗 D ,D ,D ,D 5

    二進制 000 1 0010 001 1 0100 010 1 0110 011 1 1000 100 1 1010
    代碼 1 2 1 3 2 3 4 4 5 6
    待定 待定 1 待定 0 1 1 待定 0 1
  4. 確定校驗位的值 
    校驗位的值為被校驗數據異或運算所得值 

    例:數據 D = 101101: 
    = D ⊕ D ⊕ D ⊕ D = 1 ⊕ 0 ⊕ 1 ⊕ 0 = 0; 
    = D ⊕ D ⊕ D ⊕ D = 1 ⊕ 1 ⊕ 1 ⊕ 1 = 0; 
    = D ⊕ D ⊕ D = 0 ⊕ 1 ⊕ 1 = 0; 
    = D ⊕ D = 0 ⊕ 1 = 1;

    二進制 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010
    代碼 1 2 1 3 2 3 4 4 5 6
    0 0 1 0 0 1 1 1 0 1

    故101101的海明碼為0010011101

檢錯並糾錯

  1. 計算錯誤位號 
    對於每個檢錯碼 P ,與其校驗的數據進行異或運算,得到錯誤位位號的第 i 位(從右往左數,二進制) S 

    例:101101 的海明碼為 0010011101。假設第五位出錯,因此接收到的數據位 0010 1 11101。 

    令所有要校驗的位異或運算。

    二進制 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010
    代碼 1 2 1 3 2 3 4 4 5 6
    0 0 1 0 1 1 1 1 0 1

    = P ⊕ D ⊕ D ⊕ D ⊕ D = 0 ⊕ 1 ⊕ 1 ⊕ 1 ⊕ 0 = 1; 
    = P ⊕ D ⊕ D ⊕ D ⊕ D = 0 ⊕ 1 ⊕ 1 ⊕ 1 ⊕ 1 = 0; 
    = P ⊕ D ⊕ D ⊕ D = 0 ⊕ 1 ⊕ 1 ⊕ 1 = 1; 
    = P ⊕ D ⊕ D = 1 ⊕ 0 ⊕ 1 = 0; 

    得到錯誤位為 S = 0101

  2. 糾錯 
    若錯誤位號為 0,則說明無錯,否則出錯的位位號即為錯誤位號。 

    例:101101 的海明碼為 0010011101,第五位出錯。錯誤位為 0101 
    二進制序列為0101,恰好對應十進制 5,即出錯位是第5位。

習題

1、為了糾正2比特的錯誤,編碼的海明距應該為( )。

A. 2 B. 3 C. 4 D. 5

 

答案:B 
解析: 
海明碼"糾錯"d位,需要碼距為 2d+1 的編碼方案;"檢錯"d位,,則只需碼距為 d+1。 


免責聲明!

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



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