1. 計算機網路原理的計算題(CRC校驗和數據傳輸問題)
第一題:進行模2除法時被除數錯了,應該是M*2^4,不是M*2^5,因為多項式是4階的,在M後面添4個0
2. 請教模2除法,模2加法,模2減法的具體推算步驟。
1、加法,模二加的運演算法則是:
0+0=00 + 1 = 1 1+ 0 = 1 1+ 1 = 0
理解:兩個二進制數相加不考慮進位,例如01 + 11 = 10,對於兩個數的低位都是1,進行模二和為0,但是沒有進位,所以高位的0 加1 還是1,因為不考慮低位的進位。
2、減法,模二減的運演算法則:
0 - 0 = 0 0 - 1 = 1 1 - 0 = 1 1 - 1 = 0
例: 1 0 1 0
- 0 1 1 0
---------------------
1 1 0 0
上式的減法中,第三位的減法中0-1,如果按照二進制的減法是有借位的,但是對於模二減是沒有借位的,所以才會有第四位中的1-0仍然為1。
細心的同學會發現,其實兩個數的「模二加」和「模二減」的結果都是一樣的,也就是我們說的「異或」,各位親,你們說是不是?
3、乘法,模二乘的運演算法則:
0 * 0 = 0 0 * 1 = 0 1 * 0 = 0 1 * 1 = 1
例如:1011
X111
---------------
1011
1011
1011
-------------------
110001
模二乘與一般二進制乘法的區別是在於下面的加法部分,模二乘的加法部分依然是模二加的法則
4、除法,模二除運演算法則:
模2除法運算定義為:
0÷1=0 1÷1=1
多 位二進制模2除法也類似於普通意義上的多位二進制除法,但是在如何確 定商的問題上兩者採用不同的規則。後者按帶借位的二進制減法,根
據余數減除數夠減與否確定商1還是商0,若夠減則商1,否則商0。多位模2除法採用模2減法,不帶借位的二進制減法,因此考慮余數夠減除數與否是沒有意義
的。實際上,在CRC運算中,總能保證除數的首位為1,則模2除法運算的商是由余數首位與除數首位的模2除法運算結果確定。因為除數首位總是1,按照模2
除法運演算法則,那麼余數首位是1就商1,是0就商0。例如1100100÷1011=1110……110,列豎式計算:
模二除法
3. 關於計算機網路的crc計算
我們知道,一台主機向另外一台主機發送報文的時候,需要一層層經過自己的協議棧進行數據封裝,到達最後一層(四層協議的網路介面層)時需要在幀尾部添加FCS校驗碼(通過CRC演算法得出)。當對端主機收到時,在接收端同樣通過CRC演算法進行驗證,確認傳輸過程中是否出現錯誤。它只能確認一個幀是否存在比特差錯,但沒有提供解決措施。
循環冗餘校驗的原理
在發送端,先把數據劃分為組(即:一幀)。假定每組 k 個比特。
在每組後面,添加供差錯檢測用的 n 位冗餘碼一起發送。即:實際發送長度為:k+n 比特。
發送前雙方協商n+1位的除數P,方便接收方收到後校驗。
給K比特的數據添加除數減一個0(P-1)作為被除數,與第三步確定的除數做「模2除法」。得出的余數即FCS校驗序列,它的位數也必須是(P-1)。
將FCS校驗序列添加至K個比特位的後面發送出去。
接收方對接收到的每一幀進行校驗,若得出的余數 R = 0,則判定這個幀沒有差錯,就接受(accept)。若余數 R ≠ 0,則判定這個幀有差錯,就丟棄。
對「模2除法」進行說明:
「模2除法」與「算術除法」類似,但它既不向上位借位,也不比較除數和被除數的相同位數值的大小,只要以相同位數進行相除即可。模2加法運算為:1+1=0,0+1=1,0+0=0,無進位,也無借位;模2減法運算為:1-1=0,0-1=1,1-0=1,0-0=0,也無進位,無借位。相當於二進制中的邏輯異或運算。
計算示例
那麼接收方拿到的就是:101001001。再以它為被除數,1101為除數進行「模2除法」。
4. 模2除法運算詳解
模2加法運算定義為:
0+0=00+1=11+0=11+1=0
例如0101+0011=0110,列豎式計算:
0 1 0 1
+0 0 1 1
──────
0 1 1 0
模2減法運算定義為:
0-0=00-1=11-0=11-1=0
例如0110-0011=0101,列豎式計算:
0 1 1 0
-0 0 1 1
──────
0 1 0 1
例如1011×101=100111,列豎式計算:
1 0 1 1
×1 0 1
──────
1 0 1 1
0 0 0 0
1 0 1 1
────────
1 0 0 1 1 1
5. CRC(循環冗餘校驗碼)中的模2除運算
CRC里的除法不是簡單的二進制除法,不信用附件里的計算器算出的結果與它的結果不一樣。
CRC的二進制除法是這樣的:
1111000
被除數
1101
除數
————
夠除數的位數,商1
0010
余(除數與被除數前4位求異或得到的)
————
100
把被除數第5位挪下來
1101
除數
————
不夠除,商0
1000
把被除數第6位挪下來
1101
除數
————
夠除數的位數,商1
0101
余(仍然求異或)
————
1010
把被除數第7位挪下來
1101
除數
————
夠除數的位數,商1
0111
余(仍然求異或)
————
被除數共7位,除完
所以得到商1011,餘111