《数据链路层-ARQ协议-指导44586.docx》由会员分享,可在线阅读,更多相关《数据链路层-ARQ协议-指导44586.docx(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、ARQ协议ARQ协议ARQ协议ARQ协议ARQ协议 任务 1. 同学编写数据链路层通信协议,由发送端程序和接收端程序实现,确保数据可靠传输; 2. 总结实验过程(实验报告,左侧装订):方案、编程、调试、结果、分析、结论。 成绩评定 1. 若完全实现无差错传输(无丢失、无差错、不重叠、不乱序、.)且实验报告出色,5分; 2. 若完成部分无差错传输,依据实验结果定成绩,34分; 3. 若没有完成基本的传输任务,依据实验结果定成绩,12分; 4. 没有进行实验和无实验报告者,0分; 实验环境 1. Windows 9x/NT/2000/XP/2003 2. TCP/IP协议 同学程序 1. 认真复习
2、数据链路层内容,熟悉编程语言C、C+和WINDOWS程序设计技术(查阅参考书); 2. 开发工具:Visual C+ 6.0、Visual Basic 6.0、C+ Builder、Java、C#、Turbo C/C+或其它; 3. 程序示例: 理想信道的发送端程序和接收端程序(含源码VC6.0); 1. ARQ基本协议1:_引入检错和应答帧 2. ARQ基本协议2:_引入超时计时器 3. ARQ基本协议3:_引入数据帧携带发送序号01 4. ARQ基本协议4:_引入确认帧携带发送序号01 5. ARQ基本协议5:_引入应答帧含有校验码 6. ARQ基本协议6:_引入数据帧和确认帧含有发送序号
3、07,Ws=1,Ws=1 7. 下载: ARQ基本协议16及数字信道仿真程序 4. 示例实验指导 协议设计建议 协议中不考虑成帧1. 数据帧和应答帧以字节为单位; 2. 数据帧:低4位D3D0为数据段(取值0000B1001B,即09),最高位为校验位(D7),发送序号段:D6D4; 3. 应答帧:确认帧ACK:低4位D3D0取值1111B(FH),否认帧NAK:低4位D3D0取值1110B(EH),发送序号段:D6D4; 4. 按上述定义,发送序号个数最大为8;实际使用时,可自行选取发送序号个数2或4,甚至不使用。 协议中考虑成帧1. 参见授课讲义和教材的相关内容; 2. 数据帧:帧头+发送
4、序号+数据段+校验段+帧尾; 3. 应答帧:帧头+发送序号+校验段+帧尾; 协议方案提示1. 基本ARQ协议;否认帧不必携带出错数据帧的发送序号。 2. 连续ARQ协议回退N帧ARQ协议;应采用滑动窗口技术和否认帧应携带出错数据帧的发送序号。 3. 连续ARQ协议选择重发ARQ协议;基本同上; 信道仿真程序 1. 功能:可仿真信道上的信息(数据帧或应答帧)产生丢失、产生差错和传输时延; 2. 下载:V1.21,解压后,直接运行! 1. 界面: 实验系统原理 1. 发送端程序、信道仿真程序和接收端程序采用UDP(TCP/IP)通信; 2. 若单机实验:发送端程序、信道仿真程序和接收端程序的IP地
5、址设置为127.0.0.1(本机); 3. 发送端程序的端口=6666、信道仿真程序的端口=7777、接收端程序的端口=8888; 4. 用户程序(发送端程序和接收端程序)的信息发送到信道(信道仿真程序),信道仿真程序经过处理(产生丢失、产生差错和传输时延),然后转发到对方。 参考程序段 1.设置(偶)校验位/-void SetCheck(char& c) /设置(偶)校验位D7 (一个字节) int i,sum = 0; BYTE x = 0x01; for(i=0; isum if(c & x) sum+; x = x 1; if(sum % 2) c = c|0x80; /若sum为奇数
6、,则置D71 else c = c & 0x7F; /若sum为偶数,则置D70 /-2.校验(偶)校验位/-bool checkSum(BYTE c) /(偶)校验计算(一个字节) int i,sum = 0; BYTE x = 0x01; for(i=0; isum if(c & x) sum+; x = x1; if(sum % 2) return false; /若sum为奇数,则有差错! return true; /若sum为偶数,则无差错 /-3.定时器函数(WIN32 API函数)/-#define ID_TIMER 1 /定时器标号 #define ID_TIMER_c 100
7、0L /超时时间:1000L=1000 ms/消息处理 LRESULT CALLBACK WndProc(HWND hW, UINT msg, WPARAM wP, LPARAM lP) switch( msg ) case WM_XXXXX: /其它事件触发. . . SetTimer(hW, ID_TIMER, ID_TIMER_c, NULL);/启动 Timer. . . KillTimer(hW, ID_TIMER); /停止 Timer. . . break; case WM_TIMER: /Timer事件触发. . . KillTimer(hW, ID_TIMER); /停止 T
8、imer. wlcSend(aaSendi); /物理层:发送一个字节,重发. SetTimer(hW, ID_TIMER, ID_TIMER_c, NULL); /启动Timer. break; case WM_XXXXX: /其它事件触发. . . break; /- 实验:数据链路路层ARQQ协议指导导示例0:理想信信道情况 实现: 1. 假设:信道是理理想信道,即即数据信号在在信道中传输输过程中,不不会出现差错错、丢失和随随机延迟; 2. 发送端程序直直接发生数据据,接收端端程序直接接接收数据。 问题: 1. 若信道是理想的的,发送端端程序发送送的数据能否否可靠传输地地到达接收收端程序
9、? 2. 若信道不是理想想的,发送送端程序发发送的数据能能否可靠传输输地到达接接收端程序?会出现什么么现象? 示例1:采用检检错手段,解解决差错问题题 实现: 1. 数据帧含有一位位(偶)校验验位D7; 接收端程程序对数据据帧的进行检检错,通过应应答帧告诉发送端端接收正确与与否,(应答答帧是确认帧帧ACK和否否认帧NAK的统统称); 2. ACK码0FFH,NAKK码0EHH; 3. 发送端程序得得到ACK,将将发送下一个个数据; 4. 发送端程序得得到NAK,将将重发刚才发发送的数据。 问题: 1. 在什么情况下,发发送端发送的的数据可以无无误地到达接接收端? 2. 在什么情况下,发发送端发
10、送的的数据不能可可靠地传输到到达接收端?会出现什么么问题? 示例2:采用超超时计时器,解解决因数据帧帧或应答帧的的丢失所产生生的“死锁”问问题 实现: 1. 发送端设立一个个超时计时器器,发送完一一个数据帧时时,就启动它它; 如果在在规定时间ttout内得得不到应答帧帧,就判定为为超时,重传传数据帧; 2. 设置tout1000mms。 问题: 1. 如果tout的的设置较长或或较短,会出出现什么问题题?如何选取取tout的长长短? 2. 还存在什么问题题? 示例3:数据帧帧携带发送序序号01,解解决“重复帧帧”问题 实现: 1. 使每个数据帧携携带不同的发发送序号Nss01; 2. 如果接收
11、端收到到相同Ns的的数据帧, 则丢弃, 并回送一个个ACK; 3. 数据帧含有一位位比特的发送送序号D6(00/1)。 问题: 1. 能彻底解决“重重复帧”问题题吗? 2. 还存在什么问题题? 示例4:ACKK帧携带发送序序号01,解解决什么问题题? 实现: 1. 使每个ACK携携带不同的发发送序号Nss01; 2. 如果发送端收到到ACK中的的Ns与刚才才发送的数据据帧中的Nss相同, 则则发送下一个个数据帧,否否则,.; 3. ACK含有一位位比特的发送送序号D6(00/1)。 问题: 1. ACK有必要携携带Ns吗? 2. 还存在什么问题题? 示例5:应答帧帧含有一位(偶)校验位位D7 实现: 1. .; 2. .。 问题: 1. 在应答帧中含有有校验位有必必要吗? 2. 还存在什么问题题? 示例6:发送序序号为077,发送窗口口Ws1,接收窗口WWr1 实现: 1. 数据帧含有发送送序号NsD6D5DD4; 2. ACK含有发送送序号NsD6D5DD4; 3. .。 问题: 1. 当Ws1,WWr1时,发发送序号由001改为007有必要要吗?能起什什么作用? 2. 当Ws1,WWr1时,NNAK有必要要含有Ns吗吗? 3. 还存在什么问题题? 示例7:你的新新思维! 实现: 1. .; 2. .。 问题: 1. A.已完善!B.基本本完善!C.有点困困难!DD.太困难!
限制150内