循环冗余检验CRC(Cyclic Redundancy Check)
来源:互联网 发布:linux弱口令扫描工具 编辑:程序博客网 时间:2024/05/22 13:19
CRC存在的意义
现实的通信链路都不会是理想的。这就是说,比特在传输的过程中可能会产生差错:1可能会变成0,0可能会变成1,这就叫做比特差错。在一段是时间内,传输错误的比特占所传输比特总数的比率成为误码率BER(Bit Error Rate)。误码率与信噪比有很大的关系,在实际通信中不可能使误码率下降到零。
因此,为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。
目前在数据链路层广泛使用了循环冗余检测CRC的检测技术
CRC的原理
CRC的实质:CRC运算实际上就是在数据长为k的后面添加供差错检测用的n位冗余码,然后构成帧k+n位发送出去,接收方把接收到的数据以帧为单位进行CRC检验,即把收到的每一个帧都除以相同的除数p(模2运算),然后检查得到的余数R,其结果有两种:
- 如果在传输过程中没有差错,那么经过检验后得到余数R肯定是0。
非0,则丢弃
概念解释
- 冗余码
用二进制的模2运算进行2^n乘M的运算,这相当于在M后面添加n个0 ,得到的(k+n )位的数除于收发双方实现商定的长度为(n + 1)位的除数P,得出的商是Q而余数是R(n位),所求得的余数便称为冗余码,这种为了进行检错而添加的冗余码称为帧检验序列(FCS)
- 模2运算
实际上是按位异或运算,即相同为0,相异为1,也就是不考虑进位、借位的二进制加减运算。如:1111+1010 = 0101
实例说明
计算n位冗余码
现假定待传输的数据M = 101001(k = 6),除数p = 1101 (n = 3)比n多一位
这n位冗余码可以用下面的方法得出。
(1)用二进制的模2运算进行(2^n)乘M的运算,相当于在M后面添加n个0。
即M后面添加3个0
(2)现在得到M = 101001000(k+n = 9)位的数除以除数p(n = 3)位,
得到商是Q(不关心),余数R =001(n位)R就是冗余码FCS
现在加上FCS后发送的帧是101001001
- 循环冗余检验CRC(Cyclic Redundancy Check)
- 循环冗余检验CRC(Cyclic Redundancy Check)
- CRC(Cyclic Redundancy Check)循环冗余校验码
- 循环冗余校验码(Cyclic Redundancy Check,CRC)
- Cyclic Redundancy Check循环冗余检验
- CRC循环冗余校验码(Cyclic Redundancy Check)
- CRC校验原理(cyclic redundancy check)
- 数据错误(循环冗余检查);Data error (cyclic redundancy check)
- CRC (Cyclic redundancy check) java 实现
- CRC循环冗余检验
- 循环冗余检验CRC
- 循环冗余检验CRC
- 循环冗余检验CRC
- CRC检验--循环冗余检验
- 循环冗余校验( Cyclic Redundancy Code )
- C++循环冗余检验CRC
- 循环冗余检验CRC原理
- CRC循环冗余检验算法
- Swift-UIButton规避重复点击
- java使用qq发送邮件
- 廖雪峰的Python-返回函数
- CentOS修改Tomcat端口号
- 贪心之钱币找零问题
- 循环冗余检验CRC(Cyclic Redundancy Check)
- KMP算法java实现
- SpringBoot Junit 测试加载 xml 读取 bean 失败
- fig11_06.cpp
- Java通用与进阶知识,仅用于自身补充
- JAVA高级特性:泛型
- Java多线程之Executor框架
- http(2)
- 335. Self Crossing