计算机网络教程课件实验报告-吴京宸.docVIP

计算机网络教程课件实验报告-吴京宸.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验内容与实验环境描述: 实验内容 设计一个滑动窗口协议,定义帧字段,规划程序的总体结构,相关子程序的设置,在仿真环境下编程实现有噪音信道两站点间无差错双工通信。 信道模型 8000bps全双工卫星信道 单向传播时延270毫秒 信道误码率为10-5 物理层接口:提供帧传输服务,帧间有1ms帧边界 网络层属性:分组长度固定256字节 实验组人数 1人 实验设备环境 Windows7,Microsoft Visual C++ 6.0 协议设计: 帧的定义 struct FRAME //帧结构 { unsigned char kind; //类型 包括FRAME_DATA,FRAME_ACK,FRAME_NAK unsigned char ack; //ack永远指向最近接受到的帧序号 unsigned char seq; //序列号 unsigned char data[PKT_LEN]; //数据 unsigned int padding; //crc校验和 }; 控制方案 1、网络层就绪,从网络层中取帧。 2、物理层就绪,可以将帧放到物理层中准备发送。 3、当有帧来到。若帧校验和错误,则返回NAK,若为ACK帧或者数据帧,进行窗口滑动,开启ACK定时器,若收到的是NAK帧 ,则重发数据帧。 4、当数据帧超时,准备重发数据帧。 5、当ACK帧超时,准备重发ACK帧。 软件设计: 全局变量: buffer[MAX_SEQ + 1][PKT_LEN]:模拟了缓冲区存储帧内容 nbuffered:记录了缓冲区中帧的个数 frame_expected:代表接收方期待接受的帧的序列号 phl_ready:表示物理层就绪的标志 nak;//是否接收过nak,用于避免nak在高误码率的情况下连续接受,导致数据多次重发 函数及部分局部变量用途: void put_frame(unsigned char *frame, int len): 此函数用于向物理层中添加帧。 void send_data_frame(unsigned char frame_nr, unsigned char frame_expected) 此函数用于接收方与发送方发送数据帧。 void send_ack_frame(unsigned char frame_nr, unsigned char frame_expected) 此函数用于发送ACK帧。 void send_nak_frame( unsigned char frame_nr, unsigned char frame_expected) 此函数用于发送NAK帧 int between(unsigned char a, unsigned char b, unsigned char c) 此函数用于判断序列号是否落在窗口内。 switch(event):说明有事情发生。 case NETWORK_LAYER_READY: 说明网络层就绪,可以从网络层中取帧。 case PHYSICAL_LAYER_READY: 说明物理层就绪,可以将帧放到物理层中准备发送。 case FRAME_RECEIVED: 说明有帧来到。做出相应的处理。 case DATA_TIMEOUT: 说明数据帧超时,准备重发数据帧。 case ACK_TIMEOUT: 说明ACK帧超时,准备重发ACK帧。 Start 算法流程图: Start P Protocal_init() Switch Switch ACK_TIMEOUTDATA_TIMEOUTNETWORK_LAYER_READYFRAME_RECEIVED ACK_TIMEOUT DATA_TIMEOUT NETWORK_LAYER_READY FRAME_RECEIVED 发一个单独的ACK帧。next_frame_to_send回退到ack_expected值。然后全部重发之前的帧。首先取帧,若帧校验和错误,则返回NAK,若为ACK帧或者数据帧,进行窗口滑动,数据帧还需传到网络层,开启ACK定时器,若收到的是NAK帧 ,则重发数据帧。从网络层中取帧,向物理层中发送帧。然后将nbuffer的值+1,同时改变next_frame_to_send的值 发一个单独的ACK帧。 next_frame_to_send回退到ack_expected值。然后全部重发之前的帧。 首先取帧,若帧校验和错误,则返回NAK,若为ACK帧或者数据帧,进行窗口滑动,数据帧还需传到网络层,开启ACK定时器,若收到的是NAK帧 ,则重发数据帧。 从网络层中取帧,向物理层中发送帧。然后将nbuffer的值+

您可能关注的文档

文档评论(0)

带头大哥 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档