预览加载中,请您耐心等待几秒...
1/4
2/4
3/4
4/4

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

实验八、链路层实验——基于CRC编码的检错程序的实现实验报告 序号:姓名:学号:成绩 一、实验目的 1、通过实验,掌握CRC编码和解码的原理。 2、掌握基于CRC编码的差错检测技术。 二、实验指导 现在计算机网络广泛采用的差错检测技术是基于CRC(cyclicredundancycheck)循环冗余检测编码,CRC也称为多项式编码(polynomialcode),CRC算法非常容易用硬件实现。 CRC编码操作如下: 对给定的数据D,发送者选择r个附加位,追加到D的末尾,形成d+r位的新位型,该位型正好能被G模2除尽。其中,G称为生成器。 CRC编码算法实现: 1、选择生成多项式G,其最高次方为r,即r+1位的二进制位串 2、计算D·2r,即在数据D后面补r个0,构成d+r位的位串 3、按模2除法求(D·2r/G)的余数R,即: 4、从D·2r中模2减去R,得到新的数据T,即加了CRC的帧 三、实验要求 1、设置一个d位的数据D,r+1位的多项式G,生成CRC码,并把此CRC码作为数据帧进行传送。 2、编写两个子程序,分别实现CRC编码和CRC解码,在主函数中对子程序进行调用。解码子程序应能根据解码情况判断出接收到的数据帧是否出错,并给出提示。 3、要求分别以正确和错误的数据来检验此检错程序。 4、将编写程序的源代码加必要注释和程序运行结果一起填入实验报告中。 提示: 1、编写程序时数据直接用二进制数,可能用到位操作符^(异或)和<<(左移)。 在设置错误的编码时,错误位数最好不要超过r+1位。 #include<stdio.h> #include<string.h> voidcrc(intT[],intG[],intx,intn)//异或函数,求余数 { inti,j,k; printf("\n\t\t"); for(k=0;k<=x-1;k++) printf("%d",T[k]);//输出补0后的数 for(i=0;i<=x-n+1;i++) { if(T[i]==1)//当首位为1时进行异或 { for(j=0;j<=n-1;j++) { if(T[i+j]==G[j]) T[i+j]=0;//进行异或运算,相同为0,不同为1 elseT[i+j]=1; } printf("\n\t\t");//输出每次异或后的结果 for(k=0;k<=x-1;k++) printf("%d",T[k]);//输出余数 } } } voidjiema(intD[],intT[],intm,intn)//检验解码函数 { intsign=0,i;//初始化,定义一个标志位sign for(i=0;i<=m-1;i++) { if(D[i]!=T[i])//若输入的D[i]中的任意一位不等于对应的T[i] { printf("第%d位出现错误\n",i+1);//则输出错误信息 sign=1;//若不等,则置标志位为1 } } if(sign!=1)//标志位不为1,即输入的D[i]与M[i]相等 printf("数据完全正确!\n");//输出正确信息 } voidmain() { intm,n; intT[20],D[20],G[20],i,j;//初始化 printf("请输入D[x]的长度:");//输入D[x]的长度 scanf("%d",&m);//输入D[x]的长度,并保存在m中 printf("请输入G[x]的长度:");//输入G[x]的长度 scanf("%d",&n);//输入G[x]的长度,并保存在n中 printf("D[x]=");//输入D[x] for(i=0;i<=m-1;i++)//逐个输入D[x]中的数据 scanf("%d",&D[i]); printf("G[n]=");//输入G[x] for(j=0;j<=n-1;j++)//逐个输入G[x]中的数据 scanf("%d",&G[j]); for(i=0;i<=m-1;i++)//将输入的D[x]中的数据逐个保存在T[]中 T[i]=D[i]; for(i=m;i<=m+n-2;i++) T[i]=0;//被除数左移r位,r=m+n-2,即补r个0 crc(T,G,m+n-1,n);//调用异或函数 for(i=0;i<=m-1;i++) T[i]=T[i]+D[i];//在被除数后面加上余数 printf("\n结果为:");//输出最终结果 for(i=0;i<=m+n-2;i++) printf("%d",T[i]);//逐个打印出结果 printf("\n