- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据链路层-arq协议-指导
ARQ协议ARQ协议ARQ协议ARQ协议ARQ协议
任务
1.? 同学编写数据链路层通信协议,由《发送端程序》和《接收端程序》实现,确保数据可靠传输;
2.??? 总结实验过程(实验报告,左侧装订):方案、编程、调试、结果、分析、结论。
成绩评定
若完全实现无差错传输(无丢失、无差错、不重叠、不乱序、...)且实验报告出色,5分;
若完成部分无差错传输,依据实验结果定成绩,3~4分;
若没有完成基本的传输任务,依据实验结果定成绩,1~2分;
没有进行实验和无实验报告者,0分;
实验环境
Windows 9x/NT/2000/XP/2003
TCP/IP协议
同学程序
认真复习数据链路层内容,熟悉编程语言C、C++和WINDOWS程序设计技术(查阅参考书);
开发工具:Visual C++ 6.0、Visual Basic 6.0、C++ Builder、Java、C#、Turbo C/C++或其它;
HYPERLINK 24/Lab_ARQ.files/ARQ0.rar 程序示例: 理想信道的《发送端程序》和《接收端程序》(含源码VC6.0);
ARQ基本协议1:_引入检错和应答帧
ARQ基本协议2:_引入超时计时器
ARQ基本协议3:_引入数据帧携带发送序号0~1
ARQ基本协议4:_引入确认帧携带发送序号0~1
ARQ基本协议5:_引入应答帧含有校验码
ARQ基本协议6:_引入数据帧和确认帧含有发送序号0~7,Ws=1,Ws=1
HYPERLINK 24/Lab_ARQ.files/Test.rar 下载: ARQ基本协议1~6及数字信道仿真程序
HYPERLINK 24/Lab_ARQ.files/slzd.htm \t _blank 示例实验指导
协议设计建议
-协议中不考虑成帧
数据帧和应答帧以字节为单位;
数据帧:低4位D3~D0为数据段(取值0000B~1001B,即0~9),最高位为校验位(D7),发送序号段:D6~D4;
应答帧:确认帧ACK:低4位D3~D0取值1111B(FH),否认帧NAK:低4位D3~D0取值1110B(EH),发送序号段:D6~D4;
按上述定义,发送序号个数最大为8;实际使用时,可自行选取发送序号个数2或4,甚至不使用。
-协议中考虑成帧
参见授课讲义和教材的相关内容;
数据帧:帧头+发送序号+数据段+校验段+帧尾;
应答帧:帧头+发送序号+校验段+帧尾;
-协议方案提示
基本ARQ协议;否认帧不必携带出错数据帧的发送序号。
连续ARQ协议-回退N帧ARQ协议;应采用滑动窗口技术和否认帧应携带出错数据帧的发送序号。
连续ARQ协议-选择重发ARQ协议;基本同上;
信道仿真程序
功能:可仿真信道上的信息(数据帧或应答帧)产生丢失、产生差错和传输时延;
下载: HYPERLINK 24/Lab_ARQ.files/xds121.rar V1.21,解压后,直接运行!
界面:
实验系统原理
《发送端程序》、《信道仿真程序》和《接收端程序》采用UDP(TCP/IP)通信;
若单机实验:《发送端程序》、《信道仿真程序》和《接收端程序》的IP地址设置为(本机);
《发送端程序》的端口=6666、《信道仿真程序》的端口=7777、《接收端程序》的端口=8888;
用户程序(《发送端程序》和《接收端程序》)的信息发送到信道(《信道仿真程序》),《信道仿真程序》经过处理(产生丢失、产生差错和传输时延),然后转发到对方。
参考程序段
1.设置(偶)校验位
//---------------------------------------------------
void SetCheck(char c) //设置(偶)校验位D7 (一个字节)
{
int i,sum = 0;
BYTE x = 0x01;
for(i=0; i7; i++) //求D6~D0位的有1的个数-sum
{
if(c x) sum++;
x = x 1;
}
if(sum % 2) c = c|0x80; //若sum为奇数,则置D7=1
else c = c 0x7F; //若sum为偶数,则置D7=0
}
//---------------------------------------------------
2..校验(偶)校验位
//---------------------------------------------------
bool checkSum(BYTE c) //(偶)校验计算(一个字节)
{
int i,sum = 0;
BYT
文档评论(0)