循环冗余检验
为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施
在数据M的后面添加供差错检测用的n位“冗余码”,然后构成一个帧(供k+n位)发送出去
发送端:
-
把数据划为分组,每组k个比特(网络层做的事情)
-
假定:待传送数据M=101001(k=6)
-
得出冗余码
- M后面添加n个零,得到(k+n)位的数N
- N除以收发双方事先商定的长度为(n+1)位的除数P
- 得出商Q,余数R(n位,比P少一位)
- 余数R作为冗余码拼接在数据M后面发送出去,R也叫做“帧检验序列FCS”(M*2^n+FCS)
接收端:
- 把收到的数据以帧为单位进行CRC检验:把收到的每一个帧都除以同样的除数P(模2运算)
- 检查得到的余数R
- 如果在传输过程中无差错,那么经过CRC检验得出的余数R=0
接收端对收到的每一帧经过CRC检验后,有以下两种情况:
(1)若得出的余数R=0,则判定这个帧没有差错,就接受
(2)若余数R!=0,则判定这个帧有差错(无法确定哪一位或者哪几位出现了差错),丢弃