差错检测 — 循环冗余校验CRC

本文详细解析了数据传输中的比特差错问题,介绍了循环冗余校验(CRC)技术的工作原理及其在数据链路层的应用。通过实例演示了如何使用模2运算和生成多项式进行CRC编码,确保数据传输的可靠性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  现实中通信链路都不会是理想的,比特在传输的过程中可能会出现差错,1可能变成0,0也可能变成1,这就叫做比特差错。比特差错是传输差错的一种,因此为了保证数据传输的可靠性,在计算网络传输数据时,必须采用各种检验措施来处理比特差错。目前在数据链路层广泛使用了循环冗余的CRC的检错技术

  • 帧检验序列FCS(Frame Check Sequence):为了进行差错检验而添加的冗余码。
  • 模2运算:即按位异或运算,不考虑进位与借位,相同为0,不同为1(做除法时每一步余数的首位逢一商一 逢零商零)
  • 发送方和接收方事先商定的长度为(n+1)位的除数P,用多项式 P(x) 表示更为方便,又称生成多项式。
  • 由(k-1)次多项式表示的 k 位比特消息 M(X),每一比特位的值为 对应其每项多项式的系数,且从为高位比特开始。如一个8比特10011010对应的多项式为 M(x)=x^7 +x^4 +x^3 +x^1。
  • n位冗余码:用二进制的模2运算进行2^n乘以M 的运算,相当于在M的后面添加n个0。

循环冗余检验的原理:在发送端,先把数据划分成组,假定每组k个比特并作为M,CRC运算就是在数据M的后面添加供差错检测用的n位冗余码,然后构成一个帧(k+n)位 并发送出去。将得到的(k+n)位的数除以收发双方事先商定的(n+1)位的除数P,得出的商是Q,而余数是R(n位,比P少一位)。在接收端把接受到的数据以帧为单位进行CRC检验:即把收到的每一个帧都除以P(模2运算),然后检查得到的余数R,如果传输无差错,那么R肯定是0,就接受;如果R≠0,则判定这个帧有差错(无法确定是哪几位出现差错),就丢弃。

有效信息为1010001101,生成多项式p(x)=110101 , 求其CRC编码? 

答:如图所示(模2运算)

余数为01110,CRC编码为101000110101110

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值