精华内容
下载资源
问答
  • 计算机网络 CRC校验编程实现 很好用。整个过程的实现。
  • 计算机系统运行时,各个部之间要进行数据交换,为确保数据在传送过程正确无误,常使用检验码。我们常使用的检验码有三种。 分别是奇偶校验码、海明校验码和循环冗余校验码(CRC) 。

    计算机系统运行时,各个部之间要进行数据交换. 为确保数据在传送过程正确无误,常使用检验码. 我们常使用的检验码有三种. 分别是奇偶校验码海明校验码循环冗余校验码(CRC)


    奇偶校验码(Parity Codes)

    奇偶校验码最简单,但只能检测出奇数位出错. 如果发生偶数位错误就无法检测. 但经研究是奇数位发生错误的概率大很多. 而且奇偶校验码无法检测出哪位出错.所以属于无法矫正错误的校验码。奇偶校验码是奇校验码偶校验码的统称. 它们都是通过在要校验的编码上加一位校验位组成. 如果是奇校验加上校验位后,编码中1的个数为奇数个。如果是偶校验加上校验位后,编码中1的个数为偶数个

    例:
    原编码   奇校验 偶校验
    0000   0000 1 0000 0
    0010   0010 0 0010 1
    1100   1100 1 1100 0
    1010   1010 1 1010 0

    如果发生奇数个位传输出错,那么编码中1的个数就会发生变化. 从而校验出错误,要求从新传输数据。目前应用的奇偶校验码有3种.

    水平奇偶校验码对每一个数据的编码添加校验位,使信息位与校验位处于同一行.

    垂直奇偶校验码把数据分成若干组,一组数据排成一行,再加一行校验码. 针对每一行列采用奇校验 或 偶校验
    例: 有32位数据10100101 00110110 11001100 10101011
    垂直奇校验    垂直偶校验
    10100101    10100101    数据
    00110110    00110110
    11001100    11001100
    10101011    10101011
    00001011    11110100    校验

    水平垂直奇偶校验码就是同时用水平校验和垂直校验
    例:
    奇校验 奇水平     偶校验 偶水平
     10100101 1     10100101 0   数据
     00110110 1     00110110 0
     11001100 1     11001100 0
     10101011 0     10101011 1
     00001011 0     11110100 1   校验


      我们把传送过来的1100111000逐位相加就会得到一个1,应该注意的的,如果在传送中1100111000变成为0000111000,通过上面的运算也将得到1,接收方就会认为传送的数据是正确的,这个判断正确与否的过程称为校验。而使用上面方法进行的校验称为奇校验,奇校验只能判断传送数据中奇数个数据从0变为1或从1变为0的情况,对于传送中偶数个数据发生错误,它就无能为力了。
      Odd Parity(奇校验),校核数据完整性的一种方法,一个字节的8个数据位与校验位(parity bit )加起来之和有奇数个1。校验线路在收到数后,通过发生器在校验位填上0或1,以保证和是奇数个1。因此,校验位是0时,数据位中应该有奇数个1;而校验位是1时,数据位应该有偶数个1。如果读取数据时发现与此规则不符,CPU会下令重新传输数据。 

      奇/偶校验(ECC)是数据传送时采用的一种校正数据错误的一种方式,分为奇校验和偶校验两种。 如果是采用奇校验,在传送每一个字节的时候另外附加一位作为校验位,当实际数据中“1”的个数为偶数的时候,这个校验位就是“1”,否则这个校验位就是“0”,这样就可以保证传送数据满足奇校验的要求。在接收方收到数据时,将按照奇校验的要求检测数据中“1”的个数,如果是奇数,表示传送正确,否则表示传送错误。 同理偶校验的过程和奇校验的过程一样,只是检测数据中“1”的个数为偶数。


    海明校验码(Hamming Code)

    海明码也是利用奇偶性来校验数据的. 它是一种多重奇偶校验检错系统,它通过在数据位之间插入k个校验位,来扩大码距,从而实现检错和纠错.

    设原来数据有n位,要加入k位校验码.怎么确定k的大小呢? k个校验位可以有pow(2,k) (代表2的k次方) 个编码,其中有一个代表是否出错. 剩下pow(2,k)-1个编码则用来表示到底是哪一位出错. 因为n个数据位和k个校验位都可能出错,所以k满足pow(2,k)-1 >= n+k

    设 k个校验码为 Pk,...,P1, n个数据位为D(n-1),...,D1,D0,产生的海明码为 H(n+k),...,H1。如有8个数据位,根据pow(2,k)-1 >= n+k可以知道k最小是4。那么得到的海明码是:

    H12 H11 H10 H9 H8 H7 H6 H5 H4 H3 H2 H1
    D7 D6 D5 D4 P4 D3 D2 D1 P3 D0 P2 P1  (Pi在海明码的第pow(2,i-1)位置;数据位Di则依序从低到高占据海明码中剩下位置

    然后怎么知道Pi校验哪个位呢. 自己可以列个校验关系表

    海明码 下标 校验位组
    H1(P1) 1 P1
    H2(P2) 2 P2
    H3(D0) 1+2 P1,P2
    H4(P3) 4 P3
    H5(D1) 1+4 P1,P3
    H6(D2) 2+4 P2,P3
    H7(D3) 1+2+4 P1,P2,P3
    H8(P4) 8 P4
    H9(D4) 1+8 P1,P4
    H10(D5) 2+8 P2,P4
    H11(D6) 1+2+8 P1,P2,P4
    H12(D7) 4+8 P3,P4

    从表中可以看出
    P1校验 P1,D0,D1,D3,D4,D6
    P2校验 P2,D0,D2,D3,D5,D6
    P3校验 P3,D1,D2,D3,D7
    P4校验 P4,D4,D5,D6,D7
    其实上表很有规律很容易记,要知道海明码Hi由哪些校验组校验,可以把i化成二进制数数中哪些位k是1,就有哪些Pk校验

    如H7 7=0111 所以由P1,P2,P3。 H11 11=1011 所以由P1,P2,P4。  H3 3=0011 所以由P1,P2

    那看看Pi的值怎么确定,如果使用偶校验,则
    P1=D0 xor D1 xor D3 xor D4 xor D6
    P2=D0 xor D2 xor D3 xor D5 xor D6
    P3=D1 xor D2 xor D3 xor D7
    P4=D4 xor D5 xor D6 xor D7
    其中xor是异或运算,奇校验的话把偶校验的值取反即可.


    那怎么校验错误呢. 其实也很简单. 先做下面运算.
    G1 = P1 xor D0 xor D1 xor D3 xor D4 xor D6
    G2 = P2 xor D0 xor D2 xor D3 xor D5 xor D6
    G3 = P3 xor D1 xor D2 xor D3 xor D7
    G4 = P4 xor D4 xor D5 xor D6 xor D7

    若采用偶校验,则G4G3G2G1全为0表示接收到的数据无错误(奇校验则应全为1)。当G4G3G2G1不全为0说明发生了错误,而且G4G3G2G1的十进制指出了发生错误的位置,例如 G4G3G2G1=1010,说明H10(D5)出错了,将其取反即可纠正错误。

    异或,英文为exclusive OR,或缩写成xor。它应用于逻辑运算。异或的数学符号为“⊕”,计算机符号为“xor”。a⊕b = (¬a ∧ b) ∨ (a ∧¬b)
    如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。

    循环冗余校验码(Cyclic Redundancy Check)


    CRC码利用生成多项式为k个数据位产生r个校验位进行编码,其编码长度为n=k+r所以又称 (n,k)码. CRC码广泛应用于数据通信领域和磁介质存储系统中. CRC理论非常复杂,一般书就给个例题,讲讲方法.现在简单介绍下它的原理:

    在k位信息码后接r位校验码,对于一个给定的(n,k)码。可以证明(数学高手自己琢磨证明过程)存在一个最高次幂为 n-k=r 的多项式g(x),根据g(x)可以生成k位信息的校验码,g(x)被称为 生成多项式

    用C(x)=C(k-1)C(k-2)...C0表示k个信息位,把C(x)左移r位,就是相当于 C(x)*pow(2,r) 给校验位空出r个位来了.给定一个 生成多项式g(x),可以求出一个校验位表达式r(x) 。C(x)*pow(2,r) / g(x) = q(x) + r(x)/g(x) 用C(x)*pow(2,r)去除生成多项式g(x)商为q(x)余数是r(x)。所以有C(x)*pow(2,r) = q(x)*g(x) + r(x)


    C(x)*pow(2,r) + r(x)就是所求的n位CRC码,由上式可以看出它是生成多项式g(x)的倍式.所以如果用得到的n位CRC码去除g(x)如果余数是0,就证明数据正确. 否则可以根据余数知道出错位.
    在CRC运算过程中,四则运算采用 mod 2运算(后面介绍),即不考虑进位和借位. 所以上式等价于C(x)*pow(2,r) + r(x) = q(x)*g(x)

    继续前先说下基本概念吧.
    1.多项式和二进制编码
    x的最高次幂位对应二进制数的最高位.以下各位对应多项式的各幂次. 有此幂次项为1,无为0. x的最高幂次为r时, 对应的二进制数有r+1位 例如g(x)=pow(x,4) + pow(x,3) + x + 1 对应二进制编码是 11011

    2.生成多项式是发送方和接受方的一个约定,也是一个二进制数,在整个传输过程中,这个数不会变.
    在发送方利用 生成多项式 对信息多项式做模2运算生成校验码.
    在接受方利用 生成多项式 对收到的 编码多项式 做模2运算校验和纠错.

    生成多项式应满足:
    a.生成多项式的最高位和最低位必须为1
    b.当信息任何一位发生错误时,被生成多项式模2运算后应该使余数不为0
    c.不同位发生错误时,应该使余数不同.
    d.对余数继续做模2除,应使余数循环.

    生成多项式很复杂,不过不用我们生成。

    下面给出一些常用的生成多项式表
    n k 二进制码(自己根据多项式和二进制编码 的介绍转)
    7 4 1011 或 1101
    7 3 11011 或 10111
    15 11 1011
    31 26 100101


    3.模2运算
    a.加减法法则
    0 +/- 0 = 0
    0 +/- 1 = 1
    1 +/- 0 = 1
    1 +/- 1 = 0
    注意:没有进位和借位

    b.乘法法则
    利用模2加求部分积之和,没有进位

    c.除法法则
    利用模2减求部分余数,没有借位,每商1位则部分余数减1位,余数最高位是1就商1,不是就商0,当部分余数的位数小于余数时,该余数就是最后余数.

    例 1110 
    1011)1100000
    1011
    1110
    1011
    1010
    1011
    0010(每商1位则部分余数减1位,所以前两个0写出)
    0000
    010(当部分余数的位数小于余数时,该余数就是最后余数)
    最后商是1110余数是010

    好了说了那么多没用的理论.下面讲下CRC的实际应用.例: 给定的生成多项式g(x)=1011, 用(7,4)CRC码对C(x)=1010进行编码.
    由题目可以知道下列的信息:
    C(x)=1010,n=7,k=4,r=3,g(x)=1011 C(x)*pow(2,3)=1010000 C(x)*pow(2,3) / g(x) = 1001 + 11/1011 所以r(x)=011.所以要求的编码为1010011
    例2: 上题中,数据传输后变为1000011,试用纠错机制纠错. 1000011 / g(x) = 1011 + 110/1011

    不能整除,所以出错了. 因为余数是110.查1011出错位表可以知道是第5位出错.对其求反即可.

     

      冗余码的计算方法是,先将信息码后面补0,补0的个数是生成多项式最高次幂;将补零之后的信息码除以G(X),注意除法过程中所用的减法是模2减法,即没有借位的减法,也就是异或运算。当被除数逐位除完时,得到比除数少一位的余数。此余数即为冗余位,将其添加在信息位后便构成CRC码字。

      例如,假设信息码字为11100011,生成多项式G(X)=X^5+X^4+X+1,计算CRC码字。

      G(X) = X^5+X^4+X+1,也就是110011,因为最高次是5,所以,在信息码字后补5个0,变为1110001100000。用1110001100000除以110011,余数为11010,即为所求的冗余位。

      因此发送出去的CRC码字为原始码字11100011末尾加上冗余位11010,即 1110001111010。接收端收到码字后,采用同样的方法验证,即将收到的码字除以G(X),发现余数是0,则认为码字在传输过程中没有出错。

    展开全文
  • CRC校验码生成说明

    2015-04-08 17:02:04
    CRC校验码生成,简单地列举了一个CRC校验码生成的过程,说明CRC生成的过程和原理。希望对大家有用。
  • 【计算机网络CRC校验码||循环冗余码详解及计算习题

    【计算机网络】CRC校验码||循环冗余码详解及计算习题


    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • CRC校验码

    2017-06-25 22:54:56
     CRC校验码也称为循环冗余码,是一种数据传输中常用的校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,...
    一、基本概念
          CRC校验码也称为循环冗余码,是一种数据传输中常用的校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。

    二、校验方法

    1.在校验是会选择多项式并转化成二进制数码如:代码1010111对应的多项式为x6+x4+x2+x+1。

    2.如果要发送10110011数据,多项式为G(x) = X4 + X3 + 1,则生成二进制数码为11001,又因为生成的二进制数码为五位,则在原数据后加四位101100110000,然后用模2除法,则101100110000/11001,之后如图得到

    则按照如此步骤就可得到循环冗余码。

    3.在2步骤中生成了冗余码,在发送数据时将生成的冗余码附加到原数据后面一并进行发出,以上面为例则会生成新数据101100110100;

    4.在对方收到整个数据是,通过模二法进行校验,由于对原数据进行了处理,因此此事进行模二法时数据应该没有余数,若出现了余数,则表示数据在传输过程中出现了错误。

    展开全文
  • 计算机网络 链路层: CRC校验码

    千次阅读 2019-05-01 17:15:03
    我们在大学《计算机网络》或者是《计算机组成原理》中学过CRC校验码。 做个总结。 不想看原理直接翻到例子那里,简洁明了。 循环冗余校验码,是众多校验码中的一种,是用来校验发送过来的数据是否被修改过的码。 ...

    我们在大学《计算机网络》或者是《计算机组成原理》中学过CRC校验码。

    做个总结。

    不想看原理直接翻到例子那里,简洁明了。

    循环冗余校验码,是众多校验码中的一种,是用来校验发送过来的数据是否被修改过的码。

    原理

    他们的简单工作原理,可以用一个10进制的不严谨例子表示。

    首先接收方和发送方要共同约定,发送的数字都能被3整除。(或者是被别的质数整除)

    那么发送方在发23的时候,要先计算23/3=7余2,那么发送方要发送23-2=21给接收方。

    接收方收到21要先检测能否被3整除,如果能,那么数据是没被篡改过的。

    (你可能会问,那我发送方本身就要发送21怎么办?我发送22、23都变成了21! 是的,这个例子不严谨,但是重点是它的原理,原理是双方约定能够被一个数整除

     

    显然我们在传输信息的时候,信息都是01串。每一个01串都可以对应成一个多项式。

    怎么对应?比如10101,对应成 x^4+x^2+x^0(也就是对应2的多少次幂啦)

    我们发送的01串,对应成一个多项式,我们把这个叫做M(x)这就找到了“被除数”。

     

    上面的例子中双方要约定一个都能整除的除数,这个“除数”在这里叫做“生成多项式”,双方要约定一个都能整除的01串。怎么约定?这个国际有标准,比如CRC-12、CRC-16、CRC-CCITT等等。 这样子我们就找到了“除数”,我们把这个叫做G(x)。

     

    算商怎么算?

    先把M(x) 乘 G(x)的最高次幂 ,得到的多项式叫做T(x),

    也就是先把发送的信息串向左移动,空出来的补0,腾出空间来给校验位。

    举个例子,要发送010111,“除数”是101, 那么要腾出来3个位置,给余数,变成010111000.

     

    再把M(x)/G(x)得到校验多项式(也就是“余数”),

    体现在01串上是  信息串除以生成多项式的对应串,这样也得到了除数对应的01串(这个除法算出的余数)。

     

     

    然后T(x)加上这个校验多项式。

    体现在01串上的操作就是  信息串后面腾出来的位置变成了余数对应的二进制串 。

     

    上面啰嗦了很多,是不是不明朗,直接看例子

    假设要发送 1101011011 ,生成多项式G(x) 对应的串10011。

    先向左位移5位变成 1101011011 00000, 然后算余数 位移后的串除以G(x)对应串,算出余数

    然后 这个余数和 位移后的信息串做模2运算,这就是要发送的串了!(其实也就是把腾出来的0用余数填充上,注意余数要右对齐。)

    那么接收方只要把发送方发的串除以生成多项式对应的串发现能整除则数据没损失。

    :-(      它的原理讲起来很啰嗦……我也没什么办法简化呀^_^。。

    注意除法的时候要模2运算哦!

    什么是模2运算? 相同为0,不同为1。

     

    展开全文
  • 1.奇偶校验码校验码保证一段数据出现奇数个1。 如两个码字 00 与 01,为保证奇校验的要求,该两码字可增添为100和001。 偶校验码则保证一段数据出现偶数个1. [外链图片转存失败,源站可能有防盗链机制,建议将图片...
  • CRC校验码的源代码

    2014-06-18 09:29:57
    很多网络协议都用到CRC校验码,当自己编写网络协议的时候,也需要编写相应的CRC代码,来进行校验,网上有很多类似的代码,但是有些很麻烦,也不一定高效,我现在提供一个很高效,也很容易理解的CRC校验方法,希望...
  • MAC协议之CRC校验码

    千次阅读 2017-07-01 18:24:10
    ForeWordEverybody,我胡汉三又回来了ヾ(●´∀`●) ヾ 又到了我装逼的时间了,今天我才发现。... 好了,闲话少说,还是回到正题,今天介绍的是CRC校验码。分别从以下几个方面来阐述: 1. CRC是什么
  • CRC校验码生成器delphi版源码 本程序修改自网络资源。原程序有错误,因此进行了更正。 此程序本人是用于串口通信中的数据校验,符合Modbus协议GB/T19582.2-2008附录B中的算法。 本程序主要用于展示算法,带有详细...
  • CRC校验码的计算

    2021-04-30 16:15:41
    Step1:原始信息后“添0”。 假定生成多项式G(x)阶为r,则在原始信息为后添加r个0,新生成的信息串共m+r位,对应多形式设定为x^rM(x)。 以G(X)=X^4+X+1为例。 G(X)=1X^4+0* X^3+ 0X^2+ 1X+1*X0,所以生成的对应的二...
  • CRC校验码之模二算法

    2020-02-28 20:37:01
    最近复习计算机网络相关的知识,学到CRC校验码时用到了模二除法,于是在回过头去重新温习了一下模二算法 百度百科对模二算法的解释是 模2运算是一种二进制算法,CRC校验技术中的核心部分。与四则运算相同,模2运算...
  • java实现CRC校验码

    2011-03-17 08:30:00
    这两天项目中要使用到CRC校验功能,网上大量的例子是针对c、delphi的例子,前期没有做过,理论上也欠缺很多知识,... CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种差错校验码,其...
  • 如何计算CRC校验码(循环冗余检验码)

    万次阅读 多人点赞 2017-06-16 13:25:35
    1、什么是CRC校验  在数据通信领域,CRC(循环冗余检验码)常用的一种查错校验码,它的信息字段和校验字段的长度可以任意选定。它主要是通过对要传输的数据进行多项式计算,然后将得到的结果附在数据帧的后面在...
  • 计算CRC冗余校验码(32)

    2017-02-17 14:26:37
    计算CRC 校验码 计算机网络
  • 我们可能都了解它的数学原理,在试卷上手工计算一个CRC校验码,并不是难事。但是计算机不是人,现实世界中的数学原理需要转化为计算机算法才能实现目的。实际上作为计算机专业背景人并不会经常使用或接触到CRC的...
  • *奇偶校验码(PCC)只能校验一位错误,循环冗余校验码(CRC)的检错能力更强,可以检出多位错误。 * 1、CRC校验原理: CRC校验原理看起来比较复杂,其根本思想就是先在要发送的帧后面附加一个数,生成一个新帧发送给...
  • 最近工作用到CRC校验,顺便整理本篇文章和大家一起研究。一、CRC概念 1. 什么是CRC?CRC(Cyclic Redundancy Checksum)是一种纠错技术,代表循环冗余校验和...
  • 四、循环冗余校验码  在串行传送(磁盘、通讯)中,广泛采用循环冗余校验码CRC)。...循环冗余校验码CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码又叫
  • CRC校验

    千次阅读 2017-07-17 17:32:45
    CRC校验概念 CRC校验原理 CRC校验步骤 CRC校验举例
  •  该模型中,贝努利二进制信源发出一帧数据,考虑到RFID应用的实际,读写器或电子标签发出的数据在数据进入信道传输前加入4位、8位和16位CRC校验码,然后通过二进制对称信道传输。在接收端,经过CRC校验检测后,将...
  • 校验码——CRC循环冗余校验码 一、循环冗余校验码 在串行传送(磁盘、通讯)中,广泛采用循环冗余校验码CRC)。CRC也是给信息码加上几位校验码,以增加整个编码系统的码距和查错纠错能力。 CRC的理论很...
  • 计算ModBus CRC 校验码(delphi实现)

    千次阅读 2009-10-10 20:18:00
    真后悔当初网络课没好好学,最近在编一个程序遇到一个CRC校验码的计算,左看右看,以前没有接触过这方面的编程,没办法,还好找了一大堆文字叙述的材料,终于搞定了.­我的CRC的多项式是以ModBus 的A001(1010 0000 0000 ...
  • 关于计算机网络Hamming Code海明校验码, CRC及奇偶码校验Abstract奇偶校验码 parity check code冗余校验码Cyclic Redundancy Check海明校验码Hamming codeConclusionReference Abstract 在数字化通信系统里面,数据...
  • 网络校验码CRC32

    2009-09-07 19:09:44
    为了提高编码效率,在实际运用中大多采用查表法来完成CRC-32校验,C++代码示例
  • 用于计算CRC16校验码

    2016-04-28 15:49:15
    用于计算CRC16校验网络传输校验
  • 计算机网络 CRC循环冗余校验码

    千次阅读 2012-04-19 22:51:58
    4.使用循环冗余校验码CRC, 接收方如何检查收到的信息有无错误(一个简单通俗的模型) 首先接收方和发送方约定一个“生成多项式”g(x); 发送方发送的是T(x),接收方接收到的是R(x),若T(x)和R(X)相等,则传输的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,365
精华内容 6,546
关键字:

网络crc校验码