数据链路层差错检测:CRC(循环冗余检验)
?
1、循環冗余檢驗(CRC):
在發送端,先把數據劃分為祖,假定每組K個比特。現假定待傳送的數據M = 101001(k=6)。CRC運算就是在數據M后面添加提供差錯檢測的n位冗余碼,然后構成一個幀發送出去,一共發送(k+n )位。在所要發送的數據后添加冗余碼,顯然增大了數據傳輸的開銷,但卻可以進行差錯檢測。當傳輸可能出現差錯時,付出的代價往往是很值得的。
2、n位冗余碼計算:
用二進制的模2運算進行2^n乘M的運算,這相當于在M后面添加n個0 ,得到的(k+n )位的數除于收發雙方實現商定的長度為(n + 1)位的除數P,得出的商是Q而余數是R(n位,比P少一位)。
3、除數P:
用生成多項式P(X)表示上面的除數(假定n+1位),P(X) = X^3 + X^2 + 1則P = 1101。
即P(X) = X^n+ X^(n-2) + ….+ X^2 +1 , P = 101…101。
4、檢測:
在接收端把收到的數據以幀為單位進行CRC檢測:把收到的每一個幀除于同樣的除數(模2運算),然后檢查得到的余數R,如果傳輸過程無差錯,經過CRC檢測得到的余數肯定是0 。
?
1)、R = 0,則判定這個幀沒有差錯,就接受。
2)、R!= 0,則判定這個幀有差錯,就丟棄。
?
5、例子:
M = 101001 (即 k = 6)。假定除數生成多項式P(X) = X^3 + X^2 + 1;則除數P 為1101 (即 n = 3)。經模2 除法運算的結果余數R = 001 ,這個余數就作為冗余碼拼接在M的后面發送出去。這種為了進行差錯檢測添加的冗余碼常稱為幀檢驗序列FCS。因此加上冗余碼之后發送的幀是101001001(即2^n M + FCS)。
在數據鏈路層,發送端幀檢驗序列FCS的生成和接收端的CRC 檢驗都是用硬件完成的,處理很迅速,因此并不會延誤數據的傳輸。最后強調,在數據鏈路層僅僅使用CRC差錯檢測技術,則只能做到對幀的無差錯接受,但還不是可靠傳輸。
總結
以上是生活随笔為你收集整理的数据链路层差错检测:CRC(循环冗余检验)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于wow游戏插件制作之前的几件事
- 下一篇: Java 数据库基本操作