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