




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据链路层协议的设计和实现样本 数据链路层协议的设计和实现本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 计算机通信网络实验数据链路层协议的设计与实现学院:班级:学号:姓名:111月月111日本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 一、实验目的计算机网络的数据链路层协议保证通信双方在有差错的通信线路上进行无差错的数据传输,是计算机网络各层协议中通信控制功能最典型的一种协议。 本实验实现一个数据链路层协议的数据传送部分,目的在于更好地理解基本数据链路层协议的基本工作原理,掌握计算机网络协议的基本实现技术。 二、实验内容使用C语言实现下面数据链路层协议:1.分析和实现一个理想的链路层协议2.对于前面实现的协议进行扩充,实现它的第一次改进,如何防止发方过快淹没收方。 3.对上一步再假设在不可靠的的链路上进行通信。 三、实验步骤1.熟悉数据链路层协议的功能;2.编写数据链路层协议的实现程序;3.调试并运行自己编写的协议实现程序;4.了解协议的工作轨迹,如出现异常情况,在实验报告中写出原因分析;5.保留你实现的数据链路层协议,以备教师检查。 四、实验过程 11、程序功能及设计思路功能概述:用客户端/服务器模式代表A A站、B B站。 先由客户端输入服务器P IP地址,发送SYN同步帧,告诉服务器准备接受。 客户端输入数据后,会进行C CRC编码,再发送数据帧;服务器收到后,先进行校验,数据正确则发送K ACK帧,客户端则发送下一帧数据;否则服务器发送K NAK帧,客户端重新发送该数据。 C CRC校验:1)将收到的字符转为t int型(232位),并将其二进制码左移616位,存于data;2)进行C(D)=Remainder(S(D)?DL)/g(D),即C CRC校验,得到校验位。 3)将校验位加在信息元后,组成424位的码字,存于要发送的数据帧dframe。 停等式Q ARQ协议:Client:1)置置SN=0;2)收到数据,将N SN分配给该数据,如果没有收到,则等待;3)存于要发送的数据帧中,发送给server;4)如果从r server收到确认帧,且RNSN,则N SN加加11(模22),返回22;如果收到NAK或或RN=SN,则返回33,重传数据。 本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 Server:1)置置RN=0;2)从从t client收到一个N SN=RN的帧,进行C CRC校验检查,无错后输出,并置N RN加加 11、发送K ACK帧;否则发送K NAK帧,请求重发。 22、C C语言程序代码:客户端Client:/*I#include/WINSOCK API的头文件,需要包含在项目中I#pragma ment(lib,)/WINSOCK API连接库文件#include#includeint err;SOCKET sock;/用于服务器监听的Socket SOCKADDR_IN addrSrv;/服务端地址unsigned char sendBuf100;/发送缓存char serverIp20;/客户端p ip地址t int socklen=sizeof(SOCKADDR_IN);/Socket的地址值的长度int cf_len=sizeof(struct sockaddr);struct dataFrame/数据帧int seq;/分段消息的序号int SN;/发送序号unsigned intdata100;int msglen;/字符长度,采用长度计数的组帧技术;struct conFrame/控制帧int RN;/接收序号char type3;/表明帧的类型N:SYN同步、T EOT送毕、K ACK确认应答、K NCK否定应答;struct dataFramedframe;struct conFramecframe;/*初始化*void initialization()WORD wVersionRequested;WSADATA wsaData;wVersionRequested=MAKEWORD(1,1);/本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 err=WSAStartup(wVersionRequested,&ws aData);a/wsaData用来存储系统传回的关于t WinSocket的资料if(LOBYTE()!=1|HIBYTE()!=1)WSACleanup();return;/*计算CRC-16*/基于232位系统,t int型长度为44字节,CRC-616的生成多项式为g(D)=D16+D15+D2+1void caculate_crc16(unsigned char*msg,int lenth,unsigned int*crc)unsigned intdata=0;int i,j;/chars32;/用于测试时显示二进制码for(i=0;i 文档如有不当之处,请联系本人或网站删除。 printf(input servers IP:);scanf(%s,serverIp);/输入服务器ip=i_addr(serverIp);/设置服务器地址=AF_INET;=htons (6000);/设置服务器端口号strcpy(,SYN);=0;/发送同步消息sendto(sock,(char*)&cfra me,sizeof(cframe)+1,0,(SOCKADDR*)&addrSrv,socklen);printf(-n);=0;while (1)memset(sendBuf,0,sizeof(sendBuf);/清空缓冲区printf(Input themessage:);/输入message,若输入t exit则停止发送scanf(%s,sendBuf);if(strcmp(sendBuf,exit)=0)/当客户端要断开连接时,给服务器发送T EOT送毕控制帧strcpy(,EOT);/发送T EOT消息sendto(sock,(char*)&cframe,sizeof(cframe)+1,0,(SOCKADDR*)&addrSrv,socklen);printf(-close socket!-n);break;+;=%2;=strlen(sendBuf);caculate_crc16(sendBuf,);/发送消息sendto(sock,(char*)&dframe,sizeof(struct tdataFrame),0,(SOCKADDR*)&addrSrv,socklen);while (1)recvfrom(sock,(char*)&cframe,sizeof(struct conFrame),0,(SOCKADDR*)&addrSrv,&cf_len);/接受服务器的应答帧if(strcmp(,ACK)=0)/到如果收到K ACK应答指令,则发送下一个messageif(!=)printf(-message isdeliveredn);本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 break;else if(strcmp(,NAK)=0)|(=)printf(-messagen);sendto(sock,(char*)&dframe,sizeof(struct dataFrame),0,(SOCKADDR*)&addrSrv,socklen);/重发该消息closesocket(sock);/关闭连接return;void main()initialization();/初始化阶段,若返回值err=0,则表示初始化成功if(err)printf(Initialization falied.n);exit (0);SendFrame();WSACleanup();/*end ofprogram*服务器Server:/*I#include/WINSOCK API的头文件,需要包含在项目中I#pragma ment(lib,)/WINSOCK API连接库文件#incl ude#includeint err;SOCKET sock;/用于服务器监听的Socket SOCKADDR_IN addrSrv;/服务端地址SOCKADDR_IN addrClient;/客户端地址unsigned charrecvBuf100;/接受缓存int cf_len=sizeof(struct sockaddr);/实际存储在f recvBuf的地址的长度intsocklen=sizeoft(SOCKADDR_IN);/Socket的地址值的长度struct dataFrame/数据帧int seq;/分段消息的序号int SN;/发送序号本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 unsigned intdata100;int msglen;/字符长度,采用长度计数的组帧技术;struct conFrame/控制帧int RN;/接收序号char type3;/表明帧的类型N:SYN同步、T EOT送毕、K ACK确认应答、K NCK否定应答;struct dataFramedframe;struct conFramecframe;/*初始化*void initialization()WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested=MAKEWORD(1,1);/e err=WSAStartup(wVersionRequested,&wsaData);a/wsaData用来存储系统传回的关于t WinSocket的资料if(LOBYTE()!=1|HIBYTE()!=1)WSACleanup();return;/*绑定端口*void bindport()=htonl(INADDR_ANY);/设置服务器地址,Y INADDR_ANY表示使用自己的P IP地址=AF_INET;=htons (6000);/设定端口为6000err=bind(sock,(LPSOCKADDR)&addrSrv,sizeof(SOCKADDR);return;C/*CRC校验*void checkout(unsigned int*p data,int lenth)int i,j;unsigned inttemp;unsigned intdata;g unsigned char*msg=recvBuf;/*msg指向f recvBuf的首地址/unsignedchars32;/用于测试时显示二进制码for(i=0;i 文档如有不当之处,请联系本人或网站删除。 data=*pdata;temp=(data&0xff0000)16;/将校验位清零,使信息位移到低88位*msg=temp;/itoa(data,s,2);/把整数转为二进制码/test/printf(收到的二进制码:%sn,s);/test for(j=0;j16;j+)/有有616作位校验元,故循环操作616次,使得到RemainderR(x)/g(x)if(data&0x800000)data=(data1)&0xffffff;data=data0x800500;else data=(data1)&0xffffff;if(data=0)strcpy(,ACK);/若若RemainderR(x)/g(x)=0,表示接收序列无误elsestrcpy(,NAK);/若若RemainderR(x)/g(x)!=0,表示接收序列有误return;pdata+;return;/*发送及接受消息*void RecvFrame()printf(-servern);while (1)recvfrom(sock,(char*)&cframe,sizeof(struct conFrame),0,(SOCKADDR*)&addrClient,&cf_len);/接受客户端的同步帧if(strcmp(,SYN)=0)printf(-connect with%n,i_ntoa();break;while (1)本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 cf_len=sizeof(struct sockaddr);memset(recvBuf,0,sizeof(recvBuf);/清空接收缓冲区err=recvfrom(sock,(char*)&dframe,sizeof(struct dataFrame),0,(SOCKADDR*)&addrClient,&cf_len);/接受客户端的数据帧if(err=9)/当客户端关闭t socket时,发送过来的数据会使err=9,则服务器也关闭socket printf(-client closethe socket!-n);break;checkout(,);/调用checkout()函数,C CRC检验接收消息是否正确if(strcmp(,ACK)=0)printf(client:%sn,recvBuf);printf(-message iscorrect!-n);=(+1)%2;else if(strcmp(,NAK)=0)=;printf(-message iswrong!-n);sendto(sock,(char*)&cframe,sizeof(cframe),0,(SOCKADDR*)&addrClient,socklen);/发送K ACK帧或K NAK帧printf(-The end!-n);return;void main()initialization();/初始化阶段,若返回值err=0,则表示初始化成功if(err!=0)printf(Intialization failed.n);return;sock=socket(AF_INET,SOCK_DGRAM,0);/建立socket,SOM CK_DGRAM为使用不连续不可靠的数据包连接if(sock=-1)printf(Building asocket failed.n);return;bindport();/绑定端口本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 if(err!=0)printf(Binding asoc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 排水管网升级与城市积水治理可行性研究报告
- 加速推动经济社会绿色转型的战略与行动计划
- 动物饲料行业发展动态与未来市场展望分析
- 低空经济产业园建设推动未来空中出行发展
- 打造高水平体育师资队伍发展路径
- 福建事业单位考试全方位备考战略试题及答案
- 空间规划考试题及答案
- 豪车障碍测试题及答案
- 高校辅导员提升心理素质的途径试题及答案
- 食品药品安全关系试题及答案
- 司法雇员考试题目及答案
- 2025年03月广西玉林博白县总工会社会化工会工作者13人笔试历年典型考题(历年真题考点)解题思路附带答案详解
- GB/T 37133-2025电动汽车用高压连接系统
- 2024年榆林市榆阳区公立医院招聘考试真题
- Unit 2 Go for it!Understanding ideas教学设计 -2024-2025学年外研版(2024)七年级英语下册
- 电缆桥架国标10216-2013
- 管理学基础-形考任务一-国开-参考资料
- 法律实务案例分析卷集及参考答案解析
- 小学生风电知识科普课件
- 建筑施工各岗位安全生产责任书标准范本
- 2025-2030年中国可降解塑料行业发展状况及投资前景规划研究报告
评论
0/150
提交评论