数据链路层差错控制——奇偶校验码、循环冗余码和汉明码(海明码)
差錯控制
傳輸中的差錯由噪聲引起。一類稱為熱噪聲,是信道所固有的、持續的,并且隨機的。另一類是外界環境造成的短暫的沖擊噪聲。熱噪聲可以通過提升信噪比降低干擾。而后者不可以通過提升信號幅度來避免干擾,帶來差錯。
通常采用編碼技術來進行差錯控制,主要有兩類:自動重傳請求(ARQ)和前向控制(FEC)。在ARQ方式中,接收端只進檢錯,而不進行糾錯。而在FEC方式中,不僅進行檢錯,還可以檢測出二進制數碼錯誤位置,并加以糾正。常見的檢錯編碼有奇偶校驗碼和循環冗余校驗碼。海明碼是常用的糾錯編碼。
奇偶校驗碼
包含奇校驗和偶校驗。由n-1位信息元和1位校驗元組成,屬于冗余編碼技術。如果是奇校驗,在添加一個校驗碼之后,碼長為n的碼字中1的個數為奇數個。在偶校驗中,添加1位校驗碼之后,碼字中1的個數為偶數個。
循環冗余校驗碼(CRC)
又稱多項式碼。將一個由二進制數位串組成的代碼和一個僅有0和1兩個系數的多項式建立一一對應關系。例如:1110011有7位,其對應的多項式為X6+X5+X4+X+1X^6+X^5+X^4+X+1X6+X5+X4+X+1,而多項式X5+X4+X2+XX^5+X^4+X^2+XX5+X4+X2+X對應的二進制碼串為110110.
CRC檢錯過程為:發送端發送一個m bit的幀,并生成一個r bit的序列,稱為幀檢驗序列。發送方和接受方事先約定一個多項式G(x)G(x)G(x),使這個帶檢驗碼的幀正好被G(x)G(x)G(x)整除。從而進行檢驗。
幀檢驗序列的計算過程為:假設一幀有m位,其對應的多項式為M(x)M(x)M(x)。
幀檢驗序列(冗余碼)的計算舉例:設G(x)=1101G(x)=1101G(x)=1101(即r=3r=3r=3),待傳送數據M=101001M=101001M=101001(即m=6m=6m=6),經模2除法運算后的結果是:商Q=110101Q=110101Q=110101(沒有實際用途),余數為R=001R=001R=001。所以發送出去的數據為101001001.
海明碼
海明碼可以發現雙比特錯誤,但只能糾正單比特錯誤。海明碼將碼字內的位從左至右依次編號,編號為2的冪的位為校驗位,其余位填入要傳輸的m位數據。將編號為k的數據位改寫成2的冪的和,例如11=1+2+8,29=1+4+8+16。編號為k的數據僅由擴展式中所示編號的位檢測。
m個信息位插入rrr個校驗位組成m+r位碼字,他們必須滿足的關系是2r≥m+r+12^{r} \geq m+r+12r≥m+r+1.以典型的4位數據編碼為例,海明碼加入3個校驗位。
數據位:1位 2位 3位 4位 5位 6位 7位
代碼:P1P2D1P3D2D3D4P_{1} P_{2} D_{1} P_{3} D_{2} D_{3} D_{4}P1?P2?D1?P3?D2?D3?D4?
其中PPP為校驗位,DDD為數據位。
以數據碼1101為例。此時D1=1,D2=1,D3=0,D4=1D_{1}=1,D_{2}=1,D_{3}=0,D_{4}=1D1?=1,D2?=1,D3?=0,D4?=1。對于7位碼字的編號為(4位數據,3位檢驗):1位=1,2位=2,3位=1+2,4位=4,5位=1+4,6位=2+4,7位=1+2+4。因此,P1P_{1}P1?所檢驗的位數為1,3,5,7(碼字編號中對應數字1的)。另P1⊕D1⊕D2⊕D4=0P_{1} \oplus D_{1} \oplus D_{2} \oplus D_{4}=0P1?⊕D1?⊕D2?⊕D4?=0,求得P1=1P_{1}=1P1?=1;P2P_{2}P2?所檢驗的數據位為2,3,6,7(碼字編號中對應數字2的)。令P2⊕D1⊕D3⊕D4=0P_{2} \oplus D_{1} \oplus D_{3} \oplus D_{4} =0P2?⊕D1?⊕D3?⊕D4?=0,得P2=0P_{2}=0P2?=0;P3P_{3}P3?檢驗的數據位為4,5,6,7(碼字編號中對應數字4的)。令P3⊕D4⊕D5⊕D6⊕D7=0P_{3} \oplus D_{4} \oplus D_{5} \oplus D_{6} \oplus D_{7}=0P3?⊕D4?⊕D5?⊕D6?⊕D7?=0,得P3=0P_{3}=0P3?=0.因此海明碼的編碼結果為:1010101.(PS:⊕\oplus⊕表示異或運算)
糾錯過程:接受方接受到的正確碼字應為1010101。當受到干擾接收到的碼字為1010111。D1D_{1}D1?位由0變為1。檢測時,P1⊕D1⊕D2⊕D4=0P_{1} \oplus D_{1} \oplus D_{2} \oplus D_{4}=0P1?⊕D1?⊕D2?⊕D4?=0,第一位糾錯碼正確。P2⊕D1⊕D3⊕D4=1P_{2} \oplus D_{1} \oplus D_{3} \oplus D_{4} =1P2?⊕D1?⊕D3?⊕D4?=1,第二位糾錯碼為1,有錯誤。P3⊕D4⊕D5⊕D6⊕D7=1P_{3} \oplus D_{4} \oplus D_{5} \oplus D_{6} \oplus D_{7}=1P3?⊕D4?⊕D5?⊕D6?⊕D7?=1,第三位糾錯碼為1,有錯誤。三個糾錯碼從高到低排列為110,對應的十進制為6,即為第六位數據發生錯誤,也就是D1D_{1}D1?位,取反即可。
有任何問題,歡迎留言交流。
總結
以上是生活随笔為你收集整理的数据链路层差错控制——奇偶校验码、循环冗余码和汉明码(海明码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Excel中如何修改批注作者
- 下一篇: 数据链路层介质访问控制——信道划分、随机