计算机网络滑动窗口协议实验报告目录一、实验内容和实验环境描述()实验内容()实验目的()实验环境()二、协议设计()三、软件设计()选择重传协议数据结构()模块结构()算法流程()协议数据结构()模块结构()算法流程()四、实验结果分析()五、探究问题()六、实验总结与心得体会()、实验内容和实验环境描述实验内容利用所学数据链路层原理,自己设计一个滑动窗口协议,在仿真环境下编程实现有噪音信道环境下两站点之间无差错双工通信。信道模型为全双工卫星信道,信道传播时延毫秒,信道误码率为105,信道提供字节流传输服务,网络层分组长度固定为字节。实验目的通过该实验,进一步巩固和深刻理解数据链路层误码检测的校验技术,以及滑动窗口的工作机理。滑动窗口机制的两个主要目的:()实现有噪音信道环境下的无差错传输;()充分利用传输信道的带宽。在程序能够稳定运行并成功实现第一个目标之后,运行程序并检查在信道没有误码和存在误码两种情况下的信道利用率。为实现第二个目标,提高滑动窗口协议信道利用率,需要根据信道实际情况合理地为协议配置工作参数,包括滑动窗口的大小和重传定时器时限以及搭载定时器的时限。实验环境环境机集成开发环境、协议设计本次试验主要设计数据链路层实验中分别设计了协议与选择重传协议。主要涉及到的层次结构是物理层、数据链路层、网络层。物理层:为数据链路层提供的服务为,传播延时,105误码率的字节流传输通道。数据链路层利用接口函数和从物理层发送和接收一帧。网络层:利用数据链路层提供的“可靠的分组传输”服务,在站点与站点之间交换长度固定为字节的数据分组。网络层把产生的分组交付数据链路层,并接受数据链路层提交来的数据分组。数据链路层:通过函数从网络层得到一个分组,将之组装成帧,向物理层发送,启动计时器;进行适当的流量控制;数据帧经信道传送给接收方;接收方数据链路层终止定时器(或启动定时器),判断数据是否出错,若正确的话,是否为欲接受数据。若所受到的数据帧是期待接受的数据帧,则通过函数将其缓冲区内缓存的数据依序提交给网络层。可靠通信的实现:通过捎带确认来完成可靠的数据通信。在选择重传协议中:)出现信道误码导致收帧出错时,若未发送过该帧的则接收方发帧要求发送方重传;若已经发送过则等待定时器超时后发送方重发;)当收到的帧位于接收窗口内,但不是接收窗口下边界的一帧时,将该帧进行缓存待窗口下边界的帧到来后依序递交给网络层;)接收方无数据传送导致发送方无法收到捎带确认时,接收方定时器超时,构造帧单独传送。在协议中:)出现信道误码导致收帧出错时,等待定时器超时后发送方重发;)当收到的帧不是期望收到的数据帧时,不做处理,等待定时器超时后发送方重发;)接收方无数据传送导致发送方无法收到捎带确认时,接收方定时器超时,构造帧单独传送。三、软件设计选择重传协议数据结构帧结构定义:typedefstruct{unsignedcharkind;//DDFRAME_DATAUFRAME_ACKUFRAME_NAKseq_nrack;//ackDDseq_nrseq;//ODDpacketdata;//ODDunsignedintpadding;//DDDDDDCRCDDD}frame;各类帧格式如下DATAFrame+=========+========+========+===============+========+|KIND(1)|SEQ(1)|ACK(1)|DATA(240~256)|CRC(4)|+=========+========+========+===============+========+ACKFrame//DDDDDDD//DDDDDDD//DDDDDDD//DDDDDDD//DDDDDDDDDDD//DDDDD//DDDDD//DDDDDDDDDDDDDDDD//iDDDD//lenDDDargDDDDDDDD//ODD//DDDD+=========+========+========+|KIND(1)|ACK(1)|CRC(4)|+=========+========+========+NAKFrame+=========+========+========+|KIND(1)|ACK(1)|CRC(4)|+=========+========+========+全局变量定义boolno_nak=true;//nakDDDDstaticintphl_ready=0;//DDDDDDD常量定义DDDD#defineFRAME_DATA1#defineFRAME_ACK2#defineFRAME_NAK3DDDDDDD#defineNETWORK_LAYER_READY0#definePHYSICAL_LAYER_READY1#defineFRAME_RECEIVED2#defineDATA_TIMEOUT3#defineACK_TIMEOUT4DDDDD#defineMAX_SEQ15//DDDDD#defineDATA_TIMER3850//DDDDDDD#defineACK_TIMER1000//ackDDDD#def...