计算机网络原理的计算题(crc校验和数据传输问题)第1题:设要发送的二进制数据为10110011,若采用crc校验方法,生成多项式为x^4+x^3+1,度求出实际发送的二进制数字序列。(要求写出计算
计算机网络原理的计算题(crc校验和数据传输问题)
第1题:设要发送的二进制数据为10110011,若采用crc校验方法,生成多项式为x^4+x^3+1,度求出实际发送的二进制数字序列。(要求写出计算过程)
这是自考08年四月份的试题,我总是跟答案算的不一样。
答案是:待发送的序列m=10110011,除数p=11001,m*2^5与除数p进行模2除法运算,得余数r=1000,所以要发送的二进制序列为:101100111000
我不明白为什么m要乘以2的5次方,我是用101100110000除以11001得到的余数是100。
第2题:一条长度为100km的点对点链路,对于一个100字节的分组,带宽为多大时传播延迟等于发送延迟?(信道传输速度为2*10^8m/s)
答案是:
传播延迟为:100km/(2*10^8m/s)=50ms
发送延迟等于传播延迟时:100/c=50ms
则信道传输速率:c=200kbps
B. 计算机网络CRC检验中为什么选择16或32位效验码,效率最高
循环冗余校验(CRC)是一种根据网络数据封包或电脑档案等数据产生少数固定位数的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。生成的数字在传输或者储存之前计算出来并且附加到数据后面,然后接收方进行检验确定数据是否发生变化。一般来说,循环冗余校验的值都是32位的整数。由于本函数易于用二进制的电脑硬件使用、容易进行数学分析并且尤其善于检测传输通道干扰引起的错误,因此获得广泛应用。它是由W.WesleyPeterson在他1961年发表的论文中披露[1]。{{noteTA|T=zh-hans:循环冗余校验;zh-hant:循环冗余校验;|1=zh-hans:循环冗余校验;zh-hant:循环冗余校验;}}'''循环冗余校验'''(CRC)是一种根据网路数据封包或[[电脑档案]]等数据产生少数固定位数的一种[[散列函数]],主要用来检测或校验数据传输或者保存后可能出现的错误。生成的数字在传输或者储存之前计算出来并且附加到数据后面,然后接收方进行检验确定数据是否发生变化。一般来说,循环冗余校验的值都是32位的整数。由于本函数易于用二进制的[[电脑硬件]]使用、容易进行数学分析并且尤其善于检测传输通道干扰引起的错误,因此获得广泛应用。它是由[[W.WesleyPeterson]]在他1961年发表的论文中披露{{citejournal|author=Peterson,W.W.andBrown,D.T.|year=1961|month=January|title=CyclicCodesforErrorDetection|journal=ProceedingsoftheIRE|doi=10.1109/JRPROC.1961.287814|issn=0096-8390|volume=49|pages=228}}。==简介==CRC“校验和”是两个位元数据流采用二进制除法(没有进位,使用XOR异或来代替减法)相除所得到的余数。其中被除数是需要计算校验和的信息数据流的二进制表示;除数是一个长度为n+1的预定义(短)的二进制数,通常用多项式的系数来表示。在做除法之前,要在信息数据之后先加上n个0.CRCa是基于[[有限域]]GF(2)([[同余|关于2同余]])的[[多项式环]]。简单的来说,就是所有系数都为0或1(又叫做二进制)的多项式系数的集合,并且集合对于所有的代数操作都是封闭的。例如::(x^3+x)+(x+1)=x^3+2x+1\equivx^3+12会变成0,因为对系数的加法都会模2.乘法也是类似的::(x^2+x)(x+1)=x^3+2x^2+x\equivx^3+x我们同样可以对多项式作除法并且得到商和余数。例如,如果我们用''x''3+''x''2+''x''除以''x''+1。我们会得到::\frac{(x^3+x^2+x)}{(x+1)}=(x^2+1)-\frac{1}{(x+1)}也就是说,:(x^3+x^2+x)=(x^2+1)(x+1)-1这里除法得到了商''x''2+1和余数-1,因为是奇数所以最后一位是1。字符串中的每一位其实就对应了这样类型的多项式的系数。为了得到CRC,我们首先将其乘以x^{n},这里n是一个固定多项式的[[多项式的阶|阶]]数,然后再将其除以这个固定的多项式,余数的系数就是CRC。在上面的等式中,x^2+x+1表示了本来的信息位是111,x+1是所谓的'''钥匙''',而余数1(也就是x^0)就是CRC.key的最高次为1,所以我们将原来的信息乘上x^1来得到x^3+x^2+x,也可视为原来的信息位补1个零成为1110。一般来说,其形式为::M(x)\cdotx^{n}=Q(x)\cdotK(x)+R(x)这里M(x)是原始的信息多项式。K(x)是n阶的“钥匙”多项式。M(x)\cdotx^{n}表示了将原始信息后面加上n个0。R(x)是余数多项式,既是CRC“校验和”。在通讯中,发送者在原始的信息数据M后加上n位的R(替换本来附加的0)再发送。接收者收到M和R后,检查M(x)\cdotx^{n}-R(x)是否能被K(x)整除。如果是,那么接收者认为该信息是正确的。值得注意的是M(x)\cdotx^{n}-R(x)就是发送者所想要发送的数据。这个串又叫做''codeword''.CRCs经常被叫做“[[校验和]]”,但是这样的说法严格来说并不是准确的,因为技术上来说,校验“和”是通过加法来计算的,而不是CRC这里的除法。“[[错误纠正编码]]”常常和CRCs紧密相关,其语序纠正在传输过程中所产生的错误。这些编码方式常常和数学原理紧密相关。==实现====变体==CRC有几种不同的变体*shiftRegister可以逆向使用,这样就需要检测最低位的值,每次向右移动一位。这就要求polynomial生成逆向的数据位结果。''实际上这是最常用的一个变体。''*可以先将数据最高位读到移位寄存器,也可以先读最低位。在通讯协议中,为了保留CRC的[[突发错误]]检测特性,通常按照[[物理层]]发送数据位的方式计算CRC。*为了检查CRC,需要在全部的码字上进行CRC计算,而不是仅仅计算消息的CRC并把它与CRC比较。如果结果是0,那么就通过这项检查。这是因为码字M(x)\cdotx^{n}-R(x)=Q(x)\cdotK(x)可以被K(x)整除。*移位寄存器可以初始化成1而不是0。同样,在用算法处理之前,消息的最初n个数据位要取反。这是因为未经修改的CRC无法区分只有起始0的个数不同的两条消息。而经过这样的取反过程,CRC就可以正确地分辨这些消息了。*CRC在附加到消息数据流的时候可以进行取反。这样,CRC的检查可以用直接的方法计算消息的CRC、取反、然后与消息数据流中的CRC比较这个过程来完成,也可以通过计算全部的消息来完成。在后一种方法中,正确消息的结果不再是0,而是\sum_{i=n}^{2n-1}x^{i}除以K(x)得到的结果。这个结果叫作核验多项式C(x),它的十六进制表示也叫作[[幻数]]。按照惯例,使用CRC-32多项式以及CRC-16-CCITT多项式时通常都要取反。CRC-32的核验多项式是C(x)=x^{31}+x^{30}+x^{26}+x^{25}+x^{24}+x^{18}+x^{15}+x^{14}+x^{12}+x^{11}+x^{10}+x^8+x^6+x^5+x^4+x^3+x+1。==错误检测能力==CRC的错误检测能力依赖于关键多项式的阶次以及所使用的特定关键多项式。''误码多项式''E(x)是接收到的消息码字与正确消息码字的''异或''结果。当且仅当误码多项式能够被CRC多项式整除的时候CRC算法无法检查到错误。*由于CRC的计算基于除法,任何多项式都无法检测出一组全为零的数据出现的错误或者前面丢失的零。但是,可以根据CRC的[[#变体|变体]]来解决这个问题。*所有只有一个数据位的错误都可以被至少有两个非零系数的任意多项式检测到。误码多项式是x^k,并且x^k只能被i\lek的多项式x^i整除。*CRC可以检测出所有间隔距离小于[[多项式阶次]]的双位错误,在这种情况下的误码多项式是E(x)=x^i+x^k=x^k\cdot(x^{i-k}+1),\;i>k。如上所述,x^k不能被CRC多项式整除,它得到一个x^{i-k}+1项。根据定义,满足多项式整除x^{i-k}+1的{i-k}最小值就是多项是的阶次。最高阶次的多项式是[[本原多项式]],带有二进制系数的n阶多项式==CRC多项式规范==下面的表格略去了“初始值”、“反射值”以及“最终异或值”。*对于一些复杂的校验和来说这些十六进制数值是很重要的,如CRC-32以及CRC-64。通常小于CRC-16的CRC不需要使用这些值。*通常可以通过改变这些值来得到各自不同的校验和,但是校验和算法机制并没有变化。CRC标准化问题*由于CRC-12有三种常用的形式,所以CRC-12的定义会有歧义*在应用的CRC-8的两种形式都有数学上的缺陷。*据称CRC-16与CRC-32至少有10种形式,但没有一种在数学上是最优的。*同样大小的CCITTCRC与ITUCRC不同,这个机构在不同时期定义了不同的校验和。==常用CRC(按照ITU-IEEE规范)=={|class="wikitable"!名称||多项式||表示法:正常或者翻转|-|CRC-1||x+1(用途:硬件,也称为[[奇偶校验位]])||0x1or0x1(0x1)|-|CRC-5-CCITT||x^{5}+x^{3}+x+1([[ITU]]G.704标准)||0x15(0x??)|-|CRC-5-USB||x^{5}+x^{2}+1(用途:[[USB]]信令包)||0x05or0x14(0x9)|-|CRC-7||x^{7}+x^{3}+1(用途:通信系统)||0x09or0x48(0x11)|-|CRC-8-ATM||x^8+x^2+x+1(用途:ATMHEC)||0x07or0xE0(0xC1)|-|CRC-8-[[CCITT]]||x^8+x^7+x^3+x^2+1(用途:[[1-Wire]][[总线]])|||-|CRC-8-[[Dallas_Semiconctor|Dallas]]/[[Maxim_IC|Maxim]]||x^8+x^5+x^4+1(用途:[[1-Wire]][[bus]])||0x31or0x8C|-|CRC-8||x^8+x^7+x^6+x^4+x^2+1||0xEA(0x??)|-|CRC-10||x10+x9+x5+x4+x+1||0x233(0x????)|-|CRC-12||x^{12}+x^{11}+x^3+x^2+x+1(用途:通信系统)||0x80For0xF01(0xE03)|-|CRC-16-Fletcher||参见[[Fletcher'schecksum]]||用于[[Adler-32]]A&BCRC|-|CRC-16-CCITT||''x''16+''x''12+''x''5+1([[X25]],[[V.41]],[[Bluetooth]],[[PPP]],[[IrDA]])||0x1021or0x8408(0x0811)|-|CRC-16-[[IBM]]||''x''16+''x''15+''x''2+1||0x8005or0xA001(0x4003)|-|CRC-16-[[BBS]]||x16+x15+x10+x3(用途:[[XMODEM]]协议)||0x8408(0x????)|-|CRC-32-Adler||See[[Adler-32]]||参见[[Adler-32]]|-|CRC-32-MPEG2||See[[IEEE802.3]]||参见[[IEEE802.3]]|-|CRC-32-[[IEEE802.3]]||x^{32}+x^{26}+x^{23}+x^{22}+x^{16}+x^{12}+x^{11}+x^{10}+x^8+x^7+x^5+x^4+x^2+x+1||0x04C11DB7or0xEDB88320(0xDB710641)|-|CRC-32C(Castagnoli)||x^{32}+x^{28}+x^{27}+x^{26}+x^{25}+x^{23}+x^{22}+x^{20}+x^{19}+x^{18}+x^{14}+x^{13}+x^{11}+x^{10}+x^9+x^8+x^6+1||0x1EDC6F41or0x82F63B78(0x05EC76F1)|-|CRC-64-ISO||x^{64}+x^4+x^3+x+1(use:ISO3309)||(0xB000000000000001)|-|CRC-64-[[EcmaInternational|ECMA]]-182||x^{64}+x^{62}+x^{57}+x^{55}+x^{54}+x^{53}+x^{52}+x^{47}+x^{46}+x^{45}+x^{40}+x^{39}+x^{38}+x^{37}+x^{35}+x^{33}+x^{32}+x^{31}+x^{29}+x^{27}+x^{24}+x^{23}+x^{22}+x^{21}+x^{19}+x^{17}+x^{13}+x^{12}+x^{10}+x^9+x^7+x^4+x+1(asdescribedin[CRC16toCRC64collisionresearch]*[index.htm#SAR-PR-2006-05ReversingCRC–TheoryandPractice.]{{math-stub}}[[Category:校验和算法]][[bg:CRC]][[ca:Controlderendànciacíclica]][[cs:Cyklickýrendantnísoučet]][[de:ZyklischeRendanzprüfung]][[en:Cyclicrendancycheck]][[es:Controlderendanciacíclica]][[eu:CRC]][[fi:CRC]][[fr:Contrôlederedondancecyclique]][[he:בדיקתיתירותמחזורית]][[id:CRC]][[it:Cyclicrendancycheck]][[ja:巡回冗长検査]][[ko:순환중복검사]][[nl:CyclicRendancyCheck]][[pl:CRC]][[pt:CRC]][[ru:Циклическийизбыточныйкод]][[simple:Cyclicrendancycheck]][[sk:Kontrolacyklickýmkódom]][[sv:CyclicRendancyCheck]][[vi:CRC]]
C. crc怎么样
还可以。循环冗余校验(Cyclic Rendancy Check, CRC)是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。
在计算机网络通信中运用CRC校验时相对于其他校验方法就有一定的优势。CRC可以高比例的纠正信息传输过程中的错误,可以在极短的时间内完成数据校验码的计算,并迅速完成纠错过程,通过数据包自动重发的方式使得计算机的通信速度大幅提高,对通信效率和安全提供了保障。
由于 CRC 算法检验的检错能力极强,且检测成本较低,因此在对于编码器和电路的检测中使用较为广泛。从检错的正确率与速度、成本等方面,都比奇偶校验等校验方式具有优势。因而,CRC 成为计算机信息通信领域最为普遍的校验方式。
D. 计算机网络原理中求CRC校验码。
01100。算法你可以用手算,或者用代码计算,代码分按位和按字节。手算算法是:多项式为101101你在信息的后面补5个0信息码变为1101101100000这时开始用多项式对上面的信息码进行异或操作,要打的话很麻烦。我只把没一次运算的结果写一下1:011011(注意,前面一位已经为零,这时,要在此数后面补一个数,也就是说,现在已经对8为信息码操作了一位)移位以后变为110111。(此时的首位又为1,再与多项式异或,下面的类似)2:0110103:0110004:0111015:0101116:000011 注意此时的信息码已经被操作了5次了,就是说还有3位没有操作,这时把这个数左移3位就好了,因为他的前3位都为零,所以最后的crc码为01100整个要发送的数据为11011011+01100中间算的可能有错误,开始看crc的时候可能会很难懂,看看代码很不错的
E. crc 计算机网络
2017年12月29日,星期五,
兄弟,我先给你简单再捋一遍CRC编码的概念和计算公式,原理明白了,以后不管碰到什么样的题,你都会迎刃而解了。
首先,需要知道如下几个概念,
CRC编码,就是你题目中所说的“待发字串”,它是经加工后带有CRC校验的待发送信息,
CRC校验码,就是你题目中所说的“CRC循环冗余码”,以下都简称为CRC校验码,它是通过CRC规则计算得来,
多项式,即真实信息,就是未经CRC编码规则处理的原始的信息,就是你题目中说的“已知信息码”,原始的真实信息有两种表现形式,以本题为例,
a、原始信息的 二进制字串(形式):1000100101,
b、原始信息的 多项式(形式):X^9+X^5+X^2+1,
X^9+X^5+X^2+1多项式,就是由原始信息的二进制形式1000100101得来的,多项式中每一个因数都对应二进制形式 1000100101 中值为1的那一位,X^9 X^5 X^2就是2^9+2^5+2^2,那表示二进制数的权位,
1000100101
1*2^90*2^80*2^70*2^6 1*2^5 0*2^4 0*2^3 1*2^2 0*2^11*2^0
2^0=1...2^9=1 000 000 000,凡是二进制字串中值为1的权位都出现在了多项式中,例如,二进制字串最高位(左1)的1,就是2^9,所以它出现在了多项式中,形状为X^9,而二进制数串中值为0的权位都没有出现在多项式中,可以数一下,二进制数串中有4个1,所以对应的多项式中有4个因子:X^9、X^5、X^2、1,其中多项式的最后一个因子1,其实就是X^0,而我们都知道,任何数的0次幂都是1(0除外),可以看出,这两种形式是等价的,即1000100101=X^9+X^5+X^2+1,当我们再遇到多项式时,就是去数原始信息(1000100101)中的1,然后把它的值为1的权位放到一起,写成式子(X^9+X^5+X^2+1),两者意义是一样的,从二进制形式能推导出多项式,也可以从多项式推导出二进制形式,
生成多项式,就是你题目中提到的“G(x)=X^5+X^4+X^2+1”,生成多项式也可以写成二进制形式,X^5+X^4+X^2+1其对应的二进制形式:110101,
通常,我们为了方便说明问题将生成多项式叫做:G(x),这里请注意,需要将
“生成多项式”和“多项式”进行区分,G(x)中的G就是generator polynomial,生成多项式的意思,
多项式:指的是原始信息1000100101中所有权位为1的权位写在一起的形式X^9+X^5+X^2+1
生成多项式:是人为指定的多项式,由编码人指定的东西,本例被人为指定成X^5+X^4+X^2+1即 110101 ,这个生成多项式是人为指定的,不是固定的,个人理解你指定成X^5+X^3+X^2+1也行,制定成X^5+X^4+X^3+X^2+1也行,
好了,接下来,我们要说最关键的CRC的定义和计算过程了,
CRC的定义:
多项式*2^(G(x)的最高次幂指数,你给的图片题目中G(x)的最高次幂指数是5)/G(x)=CRC校验码;
用文字表达,就是原始数据信息乘以,2的 【生成多项式中最高幂指数】 次幂,乘2的多少次幂,就是在右边加几个0,比如乘以2^2,就是在右边加2个零,因为是二进制数,所以乘几个2就是加几个零,和十进制数乘几个10就是加几个零道理一样,然后再去除以生成多项式,请注意,这里的除,不是数学中的除法,而是指计算机中的模二除运算,实际上就是逻辑异或运算,说白了,就是将除数和被除数高位,进行左对齐后,相同为0,不同为1,然后一直除下去,直到得到最后的余数为止,这个余数就是我们需要的CRC校验码,而且这个最后得到的余数,取几位由生成多项式中最高幂指数决定,最高幂指数是5就取5位,最高幂指数是6就取6位,最高幂指数是4就取4位,是根据生成多项式的最高次幂来定取几位的.本例中,最高次幂是5,所以,最后的余数是5位二进制数,
X^5+X^4+X^2+1写成二进制就是: 110101
你的图片题目中,G(x)=X^5+X^4+X^2+1,也就是生成多项式是110101,
结合本题,我们来做一遍,原始数据:1000100101,生成多项式:110101,根据上面的规则有,
1000100101*2^5=1000100101 00000
把原始值右边加上5个零:1000100101 00000之后,去除以生成多项式:110101
1000100101 00000
110101
----------------------------
0101110101 00000
左对齐,并开始按位异或,得0101110101 00000,
进行第二次除运算:
101110101 00000
110101
--------------------------
011011101 00000
左对齐,再按位异或,得到011011101 00000
开始第三次除运算:
11011101 00000
110101
--------------------
00001001 00000
左对齐,再按位异或,得到00001001 00000
进行第四次除运算:
100100000
110101
-----------------
010001000
左对齐,再异或,得到010001000
进行第五次除运算:
10001000
110101
------------
01011100
左对齐,再异或,得到01011100
进行第六次除运算:
1011100
110101
-------------
0110110
左对齐,再异或,得到0110110
进行第七次,最后一次除运算:
110110
110101
------------
000011
最终余数为000011,而由G(x)的最高次幂X^5的幂指数决定了,CRC校验码取5位,因此,最终得到的CRC校验码为:00011,
多项式*2^(G(x)的最高次幂指数,本例中G(x)的最高次幂指数是5)+G(x)=最终在物理线路上传送的CRC编码待发字串,
用文字表达就是,原始数据乘以,2的 【生成多项式中最高幂指数】 次幂,然后再加上生成多项式,最终得到要在线路中传送的CRC编码待发字串,
接着,以本例进行余下的计算,原始数据:1000100101,CRC校验码(CRC循环冗余码)为:00011,
根据上面的定义,有:
1000100101*2^5=1000100101 00000,
1000100101 00000
+ 00011
----------------------
100010010100011
所以最终的“待发字串”CRC编码为:100010010100011
F. 在计算机网络中什么是crc校验和,怎么计算
CRC即循环冗余校验码
是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。
循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码也叫(N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x)。根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。 校验码的具体生成过程为:假设要发送的信息用多项式C(X)表示,将C(x)左移R位(可表示成C(x)*2R),这样C(x)的右边就会空出R位,这就是校验码的位置。用 C(x)*2R 除以生成多项式G(x)得到的余数就是校验码。
谢谢 希望能帮助到你
G. CRC是什么意思
循环冗余校验(Cyclic Rendancy Check, CRC)是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检测或校验数戚衫扰据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。
循环冗余校验同其他差错检测方式一样,通过在要传输的k比特数据D后添加(n-k)比特冗余位(又称帧检验序列,Frame Check Sequence,FCS)F形成n比特的传输帧T,再将其发送出去。
(7)计算机网络中的crc效验扩展阅读
在数据传输过程中,无论传输系统的设高旦计再怎么完美,差错总会存在,这种差错可能会导致在链路上传输的一个或者多个帧被破坏,从而接受方接收到错误的数据。
为尽量提高接受方收到数据的正确率,在接收方接收数据之前需要对数据进行差错检测,当且仅当检测的结果为正塌答确时接收方才真正收下数据。
检测的方式有多种,常见的有奇偶校验、因特网校验和循环冗余校验等。循环冗余校验是一种用于校验通信链路上数字传输准确性的计算方法。
参考资料来源:网络-CRC