搜索
您的当前位置:首页正文

利用数组简单实现CRC循环冗余校验码

来源:爱够旅游网
维普资讯 http://www.cqvip.com 2006年第5期 福建 电脑 147 利用数组简单实现CRC循环冗余校验码 殷卫霞.季恒 f泰州师范高等专科学较信息科学系江苏泰州225300) 【摘要】:详细分析了CRC循环冗余枝验的核心思想,利用C语言中构造类型——数组采实现CRC的缟、解码。 【关键词1:数组、差错检测、循环冗余枝验、生成多项式 在计算机网络技术中链路层的基本服务都是在一个单独的 DR『d+卜11 DR[01 通信链路上将一个数据报从一个节点移到相邻的节点.在传输 过程中我们应能够保证它是可靠的,但在实际应用中。由于信号 ③将D}2与G异或。初始将数组DR。从高到底取r+l位 的衰减和电磁噪声的干扰会引起比特差错(当发送方发送一桢 元索与G数组对应元索进行XOR。用一临时数组temp。长度为 中的某个比特为1.一个节点的接收方可能会错误的判断该比 r十1。用来存放XOR下的结果。判断temp的高位有儿个零.便将 特为0)。因此在发送节点的帧上设置检错位,让接收节点执行 temp左移几位,然后低位补DR数组中未进行XOR的元索,如 差错检测。以确保传输的可靠。 此重复XOR操作.直到DR[0]并且temp的最高位元索为0为 1.CRC核心思想 止.CRC码即为temp数组的后r位元索所表示的0、l代码 现今广泛使朋的一种差错检测技术是基于循环冗余校验码 f0 XOR 0=0 1XOR 1--0 0 X0R l=1 1XOR 0-1) 的(Cyclic Redundancy Check。ERE),CRC码又被称为多项式 编码,把要发送的位串看成一个多项式。该多项式的系数是位串 中的值0和1,在位串上的操作认为是对多项式的算术操作。比 如:传输的一帧数据报文D为:10101101(8位)。那么我们可以将 其看作这样的一个多项式:x+x+x+x+1:发送方和接收方约定有 一共同的+1位r模式G(多项式 (x1)——称之为生成多项式, 并且约定G的最高位为1,发送方采用模2运算求出ERE码。 并将数据加上求出的ERE传输给接收方。接收方用根据约定好 一匹 的G去除接收的数据。若所除余数为0。则表示接收正确,若余 cRc码 数不为0。那么接收方要求发送方重发。直到接收正确为止。 2.算法分析 1编码 图2 1)CRC计算是在模2下进行的,在二进制算术运算中,乘 2.解码 法与除法是相同的.只是所需的加或减运算中不要进位或借位。 接收方校验时拿接收的数据R(d+r位)与G相除,这也是 这就等同于按位进行异或(XOR)。发送方如何计算出R呢,在这 二进制的模2操作,不需借位或进位,因此也是XOR,它的程序 里我们希望找到一个R.使得对于n有: 思想与编码中XOR相同。若结果能够除尽,即最后算得temp中 D・2 XOR R=n G 全为0。则接收无误,若不为0,则接收错误,请求重新发送。 我们对此式进行一个运算:两端都异或R.这样便可得到:D}2r= 程序设计(vc实现。部分代码) n G XOR R。用C除D}2r。余数是R。则这样可以将R计算为: OOUnt= ̄Jl计数最多要相异或的次数 It=(D}2 )%C p=ll; ・————一d 位—————-+・——一r位——+ for(i--4;i>=0;i一_】 temp[il=DR[p一_】;,,用DR[III—D 7】初嫡化temp敦组 while(count<f6) ,,判断有没超出最多要比较的次数,在这里除去最后 一次的丰H异或操作 I‘ f0r(iar:i> --) D 2 XOR R(图1) len yIUr(1em ̄lil.Gil1):,,将temp与C对应元素相异或.异或结果 2)具体步骤(假设输入的是以十进制的数值作为要发送的 存于temp中 数据D.G生成多项式也是十进制的形式) temD最高元素0去除,其他元素左移一位.while(!temp【4】&&(f,>=09),,判断t并且将从DR中取出一元素D P】emp中最高元素是否为_0.若为 垮 放在 现在我们用数组这样的数据组织形式来实现ERE的求解。 temp的最低位 在这里将相异或的操作对象存于数组中.相异或实际就是对应 【for(i--4:i>=l;i ̄) 数组的元素进行一定的操作。 ternp[i]-'temp[i—l】; 将数据D(d位)和生成多项式G(r+l位)转换为二进制,分 tempi0]=DRIp一_】;oount++Il 】 别采用数组来存放转换后的0、1代码 数据D(8位) if(temp[4]) D『[==d一1工二1 ][二[工二二[二∞D『01  {for(i=4;i>=0;i一)temp[i]=arrayxor(temp[i],G【i //最后一次相与结果若temp最高位为1,则再进行异或一次,因 生成多项式G(5位) 为G的最高需有意义,它须为1,因此再相异或一次,结果才是 Gi[]rl [==][][工] qo】 真正得到的余数 m—R=0; ②将数据D向左移r位,得到D 2,即将数组D[dll ̄左移r for(i=3;i>=0;i--) 位。长度扩展为d+r。数组的第一个元素到第r个元素都为0。 {R[i]=temp[i]; mR=m_R+R[il*(int)(pow(2。i));l,/将求出的a[i】化为十进 —(下转第136页) 维普资讯 http://www.cqvip.com 136 福建 电脑 2006年第5期 事务服务需在高可靠性和额外系统开销间作出选择 CORBA支撑服务包括:工厂发现服务、通道发现服务、终结 者服务、多对象操作服务、心跳服务。其中最为重要和复杂的是 多对象操作服务.实现了TMN的过滤和范围选择功能。工厂发 现服务用于创建对象 终结者服务删除被管对象 通道发现服务 为事件使用者列出所注册的通道。心跳服务检查通知通道和通 信网状况。 3-3-3 CORBA/CMIP网关 设计CORBA/CMIP网关的目标如下:CORBA管理能通过 CMIP代理访问OSI的管理对象。提供IDL到CMIS操作(M— 基于CORBA的TMN通用框架为其上的CORBA管理应用 提供了统一的锊理接口。而不必考虑CMIP的复杂性 实现了信 息模型转换、管理功能映射、协议转换网关等功能,为分布异构 的电信网络提供了统一高效的管理手段。 4.总结 CORBA的面向对象和分布特性为电信网管提供了新的解 决方案.但CORBA适于实现业务管理层和事务管理层的管理 功能,而在网络管理层和网元管理层。传统的基于OSI的TMN 仍占有较大优势。需要在两者之间进行集成和互操作。本文根据 集成CORBA和TMN的关键问题和JIDM规范.构建了通用集 GET、M—SET、M—CREAT、M—DELETE、M—AC ̄ON)的映射,支持 成框架,讨论了GDMO/ASN.1.到IDL转换器、CORBA服务实现 CMIP的范围选择和过滤功能.从CMIP代理接受事件并发送给 TMN功能和CORBA/CMIP网关的设计方案。今后。基于OSI的 管理应用,提供位置和分布透明性。 TMN将向基于DPE的TINA体系结构的TMN演进.CORBM CORBA/CMIP网关主要由Agent代理、MO工厂、M0代理、 TMN集成框架将过渡到纯CORBA方案。 事件报告和应答处理五个功能部分组成.各部分用IDL接El实 现。其功能结构见图3。MO代理与CMIP代理中的对象对应,其 参考文献: ecommunications Management Network P!ecommendatiom. 实例可调用访问OSI的MO实例的方法 Agent代理允许应用访 1.ITU—T TelITU—T recommendation series M.30xx.1993-1997 问M0代理.CMIP代理的应答也通过Agent代理返回应用。MO The Common Obiect Request Broker.Archi:tecture and Specifi— 工厂用于创建M0代理实例。应答处理用于有多条应答信息的 2.oMG.cation.rev.2.2.Feb.1998 情况。 3.JIDMXoJIDM working group.Inter—Domain Management:Speciifcation 1DL Skelete“ .rev.2.2.Mar.1997 ( 三 0户自定义功一 4.ITU—T Retouchdation Q.816.CoRBA—Based TMN Services. 5.ITU—T Recommendation X.780.TMN Guidelines for Defining COP.- OSI管理设施(包括JI∞管理世施) BA Managed Objects. 6.Jua.Pavon。Univemidad Compluteme Madrid.Building telecommunica— dons Management Applicatiom With CORBA.IEEE COMMUNICA_ TIoNS SURVEYS 亘 协议转换 cMIP协议栈 亘三二) 7.f美J Michi Herming Steve Vinoski著。待垒梧绦科吕志民译。基于 C++CORBA高级蝙程.清华大学出版社 8.【美】OMG蝙著.韦乐平薛君敖孟洛民主持蝙译。CORBA系统结 构、原理与规范.电子工业出版社 +-+.-- ̄-. 图3 CORBMCMIP网关 。 一—+,-—+.- 。●一-—+, +一+一十-+-+-+ +一十一+-+--I--+ +*+ 一(上接第147页) 制.使得到CRC的十进制形式 m_send=mdata8<<4*mR; _—4.思考与小结 数组是一种常用的数据结构。可以看成是有序数据的集合. (在实验中发送数据D以为8位,生成多项式G为5位为例) 系统在运行时为其开辟连续的存储空间.这就为访问它中的成 实验数据:发送数据173(10101101、 员提供了方便和快捷的方法。本文从简单易懂的角度出发利用 生成多项式18(10010) 数组这一对相同性质数据的有效的处理途径.实现循环冗余码 实验结果:CRC为:4(0100)传送数据为:2272 的求解。对于CRC的实现实际应用中我们可以用寄存器来实 (10101 1O1O10o) 现,这样速度会更快。而且可以并行实现;也可以采用硬件来实 现。那么在这里主要用数组这样的构造类型帮助我们更深的理 懈它的原理 参考文献: 1.】ames F.Kurose Keith W.Ross(COMPUTER. NETwoRKING一一A Top—Down Approach Featuring the Intemet} Higher Education Press。Pearson Education 389--391 2.谭浩强《C程序设计第二J跹>清华大学出版社 3.杜杏菁、刘春梅《循环冗余枝验算法分析及实现)华北科技学院报 图3 2005 模2过程: b 0 l .0 l 0 I l 21l l L一 L_ —— J .!— l l i l 0 L望J l 1 ! !— —一— —.—旦 I o u O ^ 0 J 1 l 0 0 l 0 I-—』L— ——— ——_三L l 0 I l o I 12l o l 口 t广—蕊蕊露孺露蕊霹 qt ̄lR.C W 图4 

因篇幅问题不能全部显示,请点此查看更多更全内容

Top