选择重传协议原理.doc

  1. 1、本文档共51页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
选择重传协议原理 篇一:计算机网络选择重传协议实验报告 《计算机网络》 选择重传协议 实验报告 1.实验内容和实验环境描述 实验内容: 利用所学数据链路层原理,设计一个滑动窗口协议,在仿真环境下编程实现有噪音信道环境下两站点之间无差错双工通信。信道模型为8000bps 全双工卫星信道,信道传播时延270毫秒,信道误码率为10-5,信道提供字节流传输服务,网络层分组长度固定为256字节。 实验环境: Windows7—64位操作系统PC机VC 6.0 2.协议设计 数据结构:数据帧 +=========+========+========+===============+========+ | KIND(1)| SEQ(1) | ACK(1) | DATA(240~256) | CRC(4) | +=========+========+========+===============+========+ 确认帧 +=========+========+========+ | KIND(1) | ACK(1) | CRC(4) | +=========+========+========+ 否定确认帧 +=========+========+========+ | KIND(1) | ACK(1) | CRC(4) | +=========+========+========+ KIND:表示帧的类别 ACK:ACK序列号 SEQ:帧序列号 CRC:校验和 模块结构: staticinc(Uchar* a) 作用:使一个字节在0~MAX_SEQ的范围内循环自增。 参数:a,字节类型。 static between(Uchara,Ucharb,Uchar c) 作用:判断当前帧是否落在发送/接收窗口内。 参数:a,b,c,均为字节类型,其中两个分别为窗口的上、下界,一个为帧的编号。其中,发送窗口的上界和下界分别为next_to_send和ack_expected,接收窗口的上界和下界分别为too_far和frame_expected,均定义在main函数中。 static void put_frame(unsigned char *frame, intlen) 作用:为一个帧做CRC校验,填充至帧的尾部并将其递交给网络层发送。 参数:frame,字节数组,由除padding域之外的帧内容转换而来;len,整型,为帧的当前长度。 staticsend_frame_(Ucharfk,Ucharnext_frame,Ucharframe_expected,Packetout_buf[]) 作用:构造一个帧,并将其发送。 参数:fk,字节类型,为帧的内容;next_frame,字节类型,为帧的编号;frame_expected,字节类型,为希望收到的帧的编号;out_buf,二维字节数组,为缓冲区。 int main(intargc,char *argv[]) 作用:主程式,包含选择重传协议的算法流程。 参数:argc,整型,表示命令行参数的个数;argv,二维字符数组,表示参数内容。 算法流程: (a)物理层:为数据链路层提供的服务为8000bps,270ms传播延时,10-5误码率的字节流传输通道。为了仿真实现上述服务质量的信道,利用在同一台计算机上TCP Socket完成两个站点之间的通信。由于同一台计算机上TCP通信传播时延短、传播速度快、没有误码,物理层仿真程序在发送端利用“令牌桶”算法限制发送速率以仿真8000bps线路;在接收端误码插入模块利用一个伪随机数“随机地”篡改从TCP收到的数据,使得所接收到的每个比特出现差错的概率为10-5;接收到的数据缓冲后延时270ms才提交给数据链路层程序,以仿真信道的传播时延特性。为了简化程序,省略了成帧功能,数据链路层利用接口函数send_frame()和recv_frame()发送和接收一帧。 (b)数据链路层:发送方和接收方都维持一个窗口,窗口内部为可以接受的序列号。接收到的数据包被缓存起来,当按正确的顺序接收完毕后再提交给网络层。ACK信息通过数据帧捎带确认的方式传递,若遇到长时间无数据帧发送,则产生ACK超时事件(ACK_TIMEOUT),主动发送空的ACK帧。若长时间未收到ACK信息,则产生数据帧超时事件(DATA_TIMEOUT),发送方自动重传未确认帧;当出现帧丢失或校验错误时,接收方会主动发送NAK帧提示发送方立即重传。 数据链路层通过物理层提供的函数来利用物理层提供的服务。通过get_packet()函数从网络层得到一个分组;当数据链路层成功接收到一个分组后,通过put_packet()

文档评论(0)

raojun0011 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档