奇偶校验与和校验.docx

上传人:安*** 文档编号:19043551 上传时间:2022-06-03 格式:DOCX 页数:6 大小:17.52KB
返回 下载 相关 举报
奇偶校验与和校验.docx_第1页
第1页 / 共6页
奇偶校验与和校验.docx_第2页
第2页 / 共6页
点击查看更多>>
资源描述

《奇偶校验与和校验.docx》由会员分享,可在线阅读,更多相关《奇偶校验与和校验.docx(6页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、奇偶校验与和校验奇偶校验对数据传输正确性的一种校验方法。在数据传输前附加一位奇校验位,用来表示传输的数据中1的个数是奇数还是偶数,为奇数时,校验位置为0,否则置为1,用以保持数据的奇偶性不变。例如,需要传输11001110,数据中含5个1,所以其奇校验位为0,同时把110011100传输给接收方,接收方收到数据后再一次计算奇偶性,110011100中仍然含有5个1,所以接收方计算出的奇校验位还是0,与发送方一致,表示在此次传输经过中未发生错误。奇偶校验就是接收方用来验证发送方在传输经过中所传数据能否由于某些原因造成毁坏。详细方法如下:奇校验:就是让原有数据序列中包括你要加上的一位1的个数为奇数

2、10001100你必须添0这样原来有3个1已经是奇数了所以你添上0之后1的个数还是奇数个。偶校验:就是让原有数据序列中包括你要加上的一位1的个数为偶数10001101你就必须加1了这样原来有3个1要想1的个数为偶数就只能添1了。大家一定会问,怎样计算奇偶性呢,在计算机内有一种特殊的运算它遵守下面的规则:1+1=0;1+0=1;0+1=1;0+0=0;我们把传送过来的1100111000逐位相加就会得到一个1,应该注意的的,假如在传送中1100111000变成为0000111000,通过上面的运算也将得到1,接收方就会以为传送的数据是正确的,这个判定正确与否的经过称为校验。而使用上面方法进行的校

3、验称为奇校验,奇校验只能判定传送数据中奇数个数据从0变为1或从1变为0的情况,对于传送中偶数个数据发生错误,它就无能为力了。OddParity奇校验,校核数据完好性的一种方法,一个字节的8个数据位与校验位paritybit加起来之和有奇数个1。校验线路在收到数后,通过发生器在校验位填上0或1,以保证和是奇数个1。因而,校验位是0时,数据位中应该有奇数个1;而校验位是1时,数据位应该有偶数个1。假如读取数据时发现与此规则不符,CPU会下令重新传输数据。奇/偶校验ECC是数据传送时采用的一种校正数据错误的一种方式,分为奇校验和偶校验两种。假如是采用奇校验,在传送每一个字节的时候另外附加一位作为校验

4、位,当实际数据中“1的个数为偶数的时候,这个校验位就是“1,否则这个校验位就是“0,这样就能够保证传送数据知足奇校验的要求。在接收方收到数据时,将根据奇校验的要求检测数据中“1的个数,假如是奇数,表示传送正确,否则表示传送错误。同理偶校验的经过和奇校验的经过一样,只是检测数据中“1的个数为偶数。和校验,常见的有如下两种(如追求效率可改写为汇编代码):1、RFC1071源码unsignedshortcsum(unsignedchar*addr,intcount)registerlongsum=0;while(count1)sum+=*(unsignedshort)addr+;count-=2;i

5、f(count0)sum+=*(unsignedchar*)addr;while(sum16)sum=(sum&0xffff)+(sum16);returnsum;第一个while循环是做普通加法(2进制补码加法),由于IP包头和TCP整个报文段比拟短(没到达217数量级),所以不可能导致4字节的sum溢出(unsignedlong一般至少为4字节).紧接着的一个判定语句是为了能处理输入数据是奇数个字节的这种情况.再接着的数据循环是实现反码算法(在前面的普通加法得到的数据的基础上),由反码和的高位溢出加到低位的性质,可得到32位的数据的高位比特移位16比特,再加上原来的低16比特,不影响最终结

6、果这个等价运算,由于sum的最初值(刚开场循环时)可能很大,所以这个等价运算需循环进行,直到sum的高比特(16比特以上)全为0.对于32位的sum,事实上这个运算循环至多只要两轮,所以也有程序直接用两条sum=(sum&0xffff)+(sum16);代替了整个循环.最后,对和取反返回.2、对数据长度没限制的实现unsignedshortcksum(structip*ip,intlen)longsum=0;while(len1)sum+=*(unsignedshort*)ip)+;if(sum&8x00000000)sum=(sum&0xFFFF)+(sum16);len-=2;if(len)sum+=(unsignedshort)*(unsignedlchar*)ip;while(sum16)sum=(sum&0xFFFF)+(sum16);returnsum;这个实现与前面的一个的最大的不同是对数据的长度没什么限制了,由于它在第一个循环的加法运算中实时检测sum的高位的值,一旦发现其有溢出的危险,就及时运用等价运算关系消除了这个危险.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 培训材料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com