计算机网络关于数据链路层协议的实验报告

上传人:xzh****18 文档编号:33898801 上传时间:2018-02-19 格式:DOC 页数:7 大小:133KB
返回 下载 相关 举报
计算机网络关于数据链路层协议的实验报告_第1页
第1页 / 共7页
计算机网络关于数据链路层协议的实验报告_第2页
第2页 / 共7页
计算机网络关于数据链路层协议的实验报告_第3页
第3页 / 共7页
计算机网络关于数据链路层协议的实验报告_第4页
第4页 / 共7页
计算机网络关于数据链路层协议的实验报告_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《计算机网络关于数据链路层协议的实验报告》由会员分享,可在线阅读,更多相关《计算机网络关于数据链路层协议的实验报告(7页珍藏版)》请在金锄头文库上搜索。

1、第 0 页 共 7 页实 验 报 告实验名称 数据链路层协议的理解与实现 课程名称 计算机网络姓名 王颖 学号 16008404日期 地点成绩 教师 王磊电 气 工 程 学 院东 南 大 学东南大学电气工程学院 实验报告 第 1 页 共 7 页第 1 页 1实验一 数据链路层协议的理解与实现一.实验目的:1.加深对流量控制、差错处理方法的理解;2.熟悉 TCP/IP编程, 将书本知识运用到实验中;3.开拓学生的创新意识,培养学生的独立动手操作的能力;二.实验内容:1 利用已有的模拟信道程序,编制发送、接收程序的部分模块,使系统具有可靠的收发功能。具体要求1) 采用无连接 Socket编程2)

2、地址与端口发送端: 地址:127.0.0.1 端口:8001接收端: 地址:127.0.0.1 端口:60013) 数据帧格式:00111100 序号 数据 校验位 长度 00111100应答帧格式:00111100 应答 001111004) 需考虑的异常情况:出错、丢失、延时5) 采用停等协议6) 单工方式7) ACK/NAK的表示:ACK:0x06NAK:0x152 待完成模块要求1)发送程序:偶校验;编码;发送、接收;差错处理、流量控制。2)接收程序:检查偶校验;应答;发送、接收三.实验环境(软件、硬件及条件):Microsoft visual C+ 6.0四.实验原理1、 程序实现的

3、原理Windows Sockets(套接字) 是在Windows下一套开放的、支持多种协议的网络编程接口规范。为Windows下网络异步通信提供了一种方便的开发和运行环境。东南大学电气工程学院 实验报告 第 2 页 共 7 页第 2 页 2Windows Sockets规范建立在BSD UNIX 中实现的Berkeley 套接字模型上,现已是TCP/IP网络的标准。它独立于底层的协议。其原理示意图如下1) 数据链路层数据链路层目的是建立在物理层基础上,通过一些数据链路层协议,在不太可靠的物理链路上实现可靠的数据传输。即数据链路层提供网络中相邻节点之间可靠的数据通信。数据链路层的主要功能是为网络

4、层提供连接服务,并在数据链路连接上传送帧。依据功能可以分为有连接和无连接两种。本实验采用的是有应答,无连接服务。无连接服务时,发送方的数据链路层要发送数据时,就直接发送数据帧。接收方的数据链路层能够接受数据帧,或者收到的帧校验正确,就像源主机数据链路层发送应答帧;不能接受或接受到的帧校验不正确时,就返回否定应答,发送端要么重发原帧,要么进入等待状态。面向无连接的socket使用方法如下:东南大学电气工程学院 实验报告 第 3 页 共 7 页第 3 页 33) 停等协议停止-等待 ARQ协议是指发送端发送一个帧后,不继续发送而是等待对该帧的确认。在发送端,每次只能处理数据链路层的发送缓冲区中的一

5、个数据帧,将缓冲区中的该帧发送出去,同时启动定时器(本实验采用1.5秒),等待接收端会送的确认帧。当发送端收到ACK确认后,认为该帧已成功到达,再取一个新的数据帧进行发送。若收到由接收端发过来的否定确认NAK,则必须暂时保存已发送给的数据帧的备份,进行重传。本实验中,ACK:0x06 NAK:0x15。本实验的数据在数据链路上传输的情况有四种,即正常、丢失、延时、出错。采用停等协议时如下:2、 程序功能说明,各个模块的详细说明;3、 核心模块程序流程图;五.实验方法:1、 主要源代码说明;1.发送方(Sender)程序模块1) 发送信息int SendMsg(char *msg, int le

6、n) bSending=1;int n;n = sizeof(channelsender_addr);sendto(sender_sockfd, msg, len, 0, (struct sockaddr *) return 0;2) 接收信息int ReceiverMsg(char *msg)int n;n = sizeof(channelsender_addr);recvfrom(sender_sockfd,msg,MAX_MSG_SIZE,0,(structsockaddr*)&channelsender_addr, bSending=0;return 0; 通过设置 bSending变

7、量,使用 SenderView中的 CSenderView:OnTimer (UINT nIDEvent),从而使得数据帧在超时 1.5秒后可以重发,如此可以实现延时和出错情况下的自动重发功能。使用库函数 sendto ( SOCKET s, const char FAR * buf, int len, int flags,const struct sockaddr FAR * to, int tolen )和 recvfrom ( SOCKETs, char 东南大学电气工程学院 实验报告 第 4 页 共 7 页第 4 页 4FAR* buf, int len, int flags,stru

8、ct sockaddr FAR* from, int FAR* fromlen );可以实现3) 构成数据帧产生发送的信息:头、序号、数据、校验位、长度、尾void Encode(char msg, int no, int len, char *newmsg) int FLAG;int count=0;char temp=msg;while(temp!=0)if(temp%2)!=0) count+;temp=temp/2; if(count%2=1) FLAG=1;else FLAG=0;*newmsg=HEADER;*(newmsg+1)=no;*(newmsg+2)=msg;*(newm

9、sg+3)=FLAG;*(newmsg+4)=len;*(newmsg+5)=HEADER;将 newmsg数组按数据帧格式赋值,其中头尾均为 HEADER(00111100),通过按位取余计算出 1的个数,采取奇校验,如果个数为基数,则校验位为 1,否则为 0.4) 检查应答帧如果返回的应答帧数据位为 ACK,则说明正确发送信息 ,否则发送出现错误。BOOL check_data(char *msg)if(*(msg+1)=ACK) return TRUE;else return FALSE;5) 接收从信道发来的信息LONG CMainFrame:MyChannelSend(UINT wP

10、aram,UINT lParam)char msgMAX_FRAME_LEN;/* 缓冲区*/char str_show100;/接收信息,写入 msgReceiverMsg(msg);/接受信息使用库函数 ReceiverMsg/处理信息if(check_data(msg)=1) /收到正确的应答帧if (iSendnomsglen-1) /尚未发完 iSendno+; /继续发送Encode(str_sendiSendno, iSendno, msglen, now_send);/产生要发送的信息SendMsg(now_send, DATA_FRAME_LEN);Show_msg_List

11、Box(已发送数据 :);elseSendMsg(now_send, DATA_FRAME_LEN);/重新发送Show_msg_ListBox(错误数据 :);在发送方处理接受的信息时,即处理接受的应答帧时,如果收到正确的应答帧则继续发送,如果应答帧显示发送信息错误,则重新发送。程序根据已经正确接收的帧数(iSendno)和待发送的报文总长度(msglen)的比较,来判断信息是否已经全部正确发送。其中,继续发送时调用 Encode函数将要发送的数据构成帧,给信息的序号即是它在字符串中的序号,如此即可保证信息的按序发送,不会出现顺序错误的情况。2.接收方(Receiver)程序模块东南大学电气

12、工程学院 实验报告 第 5 页 共 7 页第 5 页 51) 接收信息int ReceiverMsg(char *msg) int n;n=sizeof(channelreceiver_addr);recvfrom(receiver_sockfd,msg,1000,0,(structsockaddr*)&channelreceiver_addr, 2) 发送信息int SendMsg(char *msg,int len)int n;n=sizeof(channelreceiver_addr);sendto(receiver_sockfd,msg,len,0,(structsockaddr*&c

13、hannelreceiver_addr, n);return 0; 接收方的发送与接受信息模块与发送方的该模块类似,不同的只有库函数中的套接字,而且不需要使用 bsending变量。3) 检查校验位BOOL check_data(char *msg)int flag;int count=0;char temp=*(msg+2);while(temp!=0)if(temp%2)!=0) count+;temp=temp/2;if(count%2=1) flag=1;else flag=0;if(*(msg+3)=flag) return 1;else return 0;检查校验位即检查数据的正误

14、,用和前面计算校验位相同的办法,计算接收到的数据的校验位,如果相同,则说明数据正确,不同则说明错误。4) 接受从信道发来的信息LONG CMainFrame:MyChannelSend(UINT wParam,UINT lParam)char str_sendMAX_FRAME_LEN;char check_ansANS_FRAME_LEN;char show_str100;/接收信息,写入 str_sendint i;for(i=iRevno;i100;i+) rev_datai=0;ReceiverMsg(str_send); /接受信息时注意要给 str_send数组清零,而且不能只清一

15、位,否则显示数据时,如果之前发送的一个数据长于后来发送的数据的话,会导致显示出之前的信息。/处理if(iRevnostr_send4) /报文信息未发送完,小于待发送的长度if(check_data(str_send)=1) /收到的信息正确(包括正常情况和收到延时的数据的情况)check_ans0=HEADER;check_ans1=ACK;check_ans2=HEADER;SendMsg(check_ans,ANS_FRAME_LEN); /发送正确的应答帧if(str_send1=iRevno) /如果是正常情况,该数据有效,需要存储rev_dataiRevno=str_send2;/存储接收的数据iRevno+;else Show_msg_ListBox(延时数据);else /信息接收出错check_ans0=HEADER;check_ans1=NAK;东南大学电气工程学院 实验报告 第 6 页 共 7 页第 6 页 6check_ans2=HEADER;SendMsg(check_ans,ANS_FRAME_LEN); /发送错误的应答帧if(iRevno=str_send4) /信息接收完成Show_msg_ListBox(已接收数据:);Show_msg_ListBox(rev_data);iRevno=0;在处理接受的信息时,根据流程

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

当前位置:首页 > 商业/管理/HR > 商业合同/协议

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号