云南大学软件学院计网试验_第1页
云南大学软件学院计网试验_第2页
云南大学软件学院计网试验_第3页
云南大学软件学院计网试验_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、云南大学软件学院 实验报告课程:计算机网络原理实验 任课教师:姓名:学号: 专业: 成绩:实验九、链路层实验基于 CRC 编码的检错程序的实现实验报告一、实验目的1、通过实验,掌握 CRC编码和解码的原理。2、掌握基于 CRC编码的差错检测技术。二、实验指导现在计算机网络广泛采用的差错检测技术是基于CRC( cyclic redundancy check)循环冗余检测编码, CRC也称为多项式编码( polynomial code ),CRC算法非常容易用硬件实 现。CRC编码算法实现:1、选择生成多项式 G,其最高次方为 r ,即 r+1 位的二进制位串2、计算 D2r , 即在数据 D后面

2、补 r 个 0,构成 d+r 位的位串3、按模 2 除法求( D2r/G)的余数 R,即:4、从 D2r中模 2 减去 R,得到新的数据 T,即加了 CRC的帧三、实验要求1、设置一个 d 位的数据 D,r+1 位的多项式 G,生成 CRC码,并把此 CRC码作为数据帧进行 传送。2、编写两个子程序,分别实现 CRC编码和 CRC解码,在主函数中对子程序进行调用。解码 子程序应能根据解码情况判断出接收到的数据帧是否出错,并给出提示。3、要求分别以正确和错误的数据来检验此检错程序。4、将编写程序的源代码加必要注释和程序运行结果一起填入实验报告中。 提示:1、编写程序时数据直接用二进制数,可能用到

3、位操作符( 异或 )和(左移)。2、在设置错误的编码时,错误位数最好不要超过r+1 位。实现代码:#include#include / 定义全局变量 int DR32; / int REC32; / int length; / int lengthDR; / int lengthREC;/ int D32; / int R3; / int G4; /用于储存循环冗余编码 CRC; 用于储存用户接收到的编码; 用于模 2 除法中余数的长度; 发送数据的长度; 接收方接受到数据的长度; 用于接收用户要发送的数据; 储存 3 位余数的数组; 用于储存 4 位生成器;void char_binary(

4、char *a,int *b) / 将接收到的字符转换为数值; for(int i=0;istrlen(a);i+) bi=ai-48;void remainder(int d,int g) / / 其中 d 为待求余数的数组, int y4; int j; / int d_coplength; for(int i=0;ilength;i+) d_copi=di; / for(int i=0;i4;i+) if(d_copigi=1) j=i; / break; else j=4; /求 3 位余数函数 , 其中包含模 g 为生成器数组;用于定位异或不为 0 的起位置;将数组 d 复制到数组

5、d_cop ;2 除法的实现;int m=j; / 将 j 复制到 for(int i=0;i4-j;i+) di=d_copmgm; / m+; length=length-j; / int n=4;for(int i=4-j;i=4)remainder(d,g);/ 递归实现循环四位异或直至不足四位推出循环;/ 以下为实现返回 3 位余数; if(length=3) /3 位余数 for(int i=0;i3;i+)Ri=di;else if(length=2) /2 位余数R0=0;R1=d0;R2=d1;else if(length=1) /1 位余数R0=R1=0;R2=d0;els

6、e if(length=0) /0 位余数 R0=R1=R2=0;void decoded(int a,int b) / / 其中 remainder(a,b); if(R0=R1=R2=0) /3 printf(接收到的数据正确!else / printf(接收到的数据错误!解码,看接收到数据是否正确,返回相应状态a 为待解码的数组, b 为生成器数组;位余数为 0,即除尽;n);未除尽;n);int main()char DC32; char GC4;char RECC32;int length_bu;printf( 请输入数据: n); scanf(%s,DC);获取发送数据的长度;le

7、ngthDR = strlen(DC)+3; / char_binary(DC,D);printf(4 位生成码: n); scanf(%s,GC); char_binary(GC,G);for(int i=lengthDR-3;ilengthDR;i+) /左移 3 位,实现 D 后加 3 位 0;Di=0;for(int i=0;ilengthDR-3;i+)DRi=Di;length=lengthDR;/remainder(D,G);/DRlengthDR-3=R0; /DRlengthDR-2=R1;DRlengthDR-1=R2;printf( 得到编码后数据: n);for(int i=0;ilengthDR;i+)printf(%d,DRi);实现数据的传递; 调用求 3 位余数函数;将余数添于原数据之后,形成 CRC编码;printf(n);printf( 请输入接收数据: scanf(%s,RECC); lengthREC=strlen(R

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论