数据链路层滑动窗口协议的设计和实现样本Word文档格式.docx
《数据链路层滑动窗口协议的设计和实现样本Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据链路层滑动窗口协议的设计和实现样本Word文档格式.docx(8页珍藏版)》请在冰豆网上搜索。
实验环境Windows7环境PC,机,MicrosoftVisualC++集成化开发环境
二、协议设计协议的分层结构及层服务:
:
包括物理层,数据链路层和网络层三层。
该实验主要设计数据链路层协议,为实现有噪声环境下高信道利用率传输,我们采用回本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。
退nn帧(gobackn)技术的协议。
发送方窗口大小为31;
通过捎带确认来完成可靠的数据通信;
出现信道误码导致收帧出错时,接受方丢弃所有后续帧,待定时器超时后发送方重发。
该层提供服务:
从网络层接受要发送的数据包,将之分拆成数据帧;
按一定的成帧方案完成分帧,加校验码,加ack等操作;
进行适当的流量判断和拥塞控制;
启动定时器将之传递给物理层。
数据帧经信道传送给接受方,接受方数据链路层执行与成帧相逆的操作;
处理ack信息,终止定时器(或启动ack定时器,ack成帧传送);
判断是否为欲接受数据,数据是否出错,提交给网络层。
退回NN步工作原理示意图:
本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。
实验所形成帧((成帧方案)):
DATAFramen+=========+========+========+===============+========+|KIND
(1)|ACK
(1)|SEQ
(1)|DATA(240~256)|CRC
(4)||+=========+========+========+===============+========+ACKFrame+=========+========+========+|KIND
(1)|CRC
(4)|+=========+========+========+NAKFrame+=========+========+========+|KIND
(4)|+=========+========+========+本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。
CRC校验和的多项式定义:
本次实验采用的CRC校验方案为CRC--32,以太网校验和生成多项式相同。
生成多项式为:
xx32+x26+x23+x22+x16+x12+x11+x10++xx88+x77+x55+x44+x22+x11+1校验和附加在数据帧,尾部,接受方用带校验和的数据来逻辑除以生成多项式,余数为零则数据无误码,反之有误码等待发送方重传。
可靠通信和误码控制方案:
出现信道误码导致收帧出错时,接受方丢弃所有后续帧,此时发送方长久接受不到确认信息,引发定时器超时后发送方重发;
接受方无数据传送导致发送方无法收到捎带确认时,接受方确认定时器超时,构造一确认帧单独传送。
三、软件设计给出程序的数据结构,模块之间的调用关系和功能,程序流程。
本次实验我们对go--back--NN协议进行了编写,描述如下:
11..数据结构:
typedefenum{false,true}boolean;
//blooleantypetypedefunsignedcharseq_nr;
//sequenceoracknumberstypedefunsignedcharpacket[PKT_LEN];
//用数组存放数据/*FRAMEkind*/#defineData1#defineAck2#defineNak3staticintphl_ready:
//物理层状态next_frame_to_send;
//MMAAXX__SSEEQQ本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。
>
>
11;
uusseeddffoorroouuttbboouunndd本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。
ssttrreeaamm,aannddiinniittiiaanniizzee本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。
nneexxttffrraammeeggooiinnggoouutt本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。
ack_expected;
//oldestframeasyetunacknowledged,andinitianniizene本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。
xtackexpectedinboundframe_expected;
//nextframeexpectedon本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。
inboundstream,andinitializenumberofframeex本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。
pectedinboundbuffer[MAX_SEQ+1];
//buffersfortheoutboundstreamnbuffered;
//outputbufferscurrentlyinuse,andinittiallynopacketsarebufferedbufferLen[MAX_SEQ+1]//bufferLen存储每个rbuffer中数据的有效长度typedefstruct{//帧结构unsignedcharkind;
seq_nrack;
seq_nrseq;
packetinfo;
unsignedcharcrc[4];
}frame;
;
22..模块结构:
给出程序中所设计的子程序。
完成的功能,子程序每个参数的意义。
A)staticbooleanbetween(seq_nra,seq_nrb,seq_nrc)//判断bb是否是在aa、cc之间的帧B)staticvoidput_frame(unsignedchar*frame,intlen)//ccrc编码并向物理层发送C)send_data(unsignedcharkind,seq_nrframe_nr,seq_nrframe_expected,packetbuffer[],intdlen[])//生成帧D)intmain()//主函数,分为五个事件
(1)NETWORK_LAYER_READY,事件发生后从网络层读数据,成帧;
若当前物理层可用,发送。
(2)PHYSICAL_LAYER_READY,事件发生后,若。
有未发送的帧,发送,否则置物理层状态为可用。
本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。
(3)DATA_INING,事件发生后,来了arg个字节的数据,每接受一个数据,判断是否为帧尾;
若为帧尾,提取一帧,去掉填充,进行校验;
若校验结果正确,处理ack,然后处理数据。
接受完arg个字节,跳出。
(4)ACK_TIMEOUT,事件发生后,产生一个不含数据的ack帧,等待直到物理层有效,发送。
(5)DATA_TIMEOUT,事件发生后,重发ack_expected和next_frame_to_send。
之间的帧。
33..算法流程:
画出流程图,描述算法的主要流程。
四、实验结果分析
(1)描述你所实现的协议软件是否实现了误码信道环境中无差错传输功能此协议软件实现了误码信道环境中无差错传输功能本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。
(2)程序的健壮性在较低误码率的信道条件下,该程序运行平稳,未出现任何差错,健壮性良好,在高误码率的信道条件下,程序运行有时会出现中断,但大多数时候均运行超过二十分钟以上,故本程序健壮性良好,但仍有值得改进之处。
(3)协议参数的选取:
滑动窗口的大小为77,重传定时器的时限,ACK搭载定时器的时限为300。
在在ngo_back_n协议中(假设接受方一直有数据发送,即无kack定时器超时现象),滑动窗口的大小M,信道传输时延a,发送速率cc,帧大小ff在满足如下关系时信道利用率(M*(f/c)/[2a+2(f/c)])接近100%:
M>
=[2a+2*(f/c)]/(f/c);
由于实际数据传送很可能在某段时间类接受方无数据反送,涉及及kack帧单独传送问题,故一般信道利用率不可能达到100%,但MM的选择至少要满足公式。
至于防止MM过大的问题,可通过实际测试的结果分析来得到合适的MM。
值。
滑动窗口大小的选择直接本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。
涉及到信道利用率和数据拥塞的问题;
若太小,会导致信道空闲,利用率很低;
若太大,数据发送过快,会造成接受方数据链路层来不及处理,数据物理层及信道发生拥塞现象导致数据丢失,出错率增大,重传率高。
s8000kbps的信道发送256字节的帧需要256*8/8000=256ms(256+270*2))/256=,,最大窗口应该77就行了..重传定时器的大小由发送速率、信道时延及接受方的发送频率等确定,太小会频繁重发,太大也会降低信道利用率。
结合多项测试最终定为ms。
ack搭载定时器的时限由的发送频率决定,一方面,为了节省带宽应该尽量搭载使用。
另一方面当长时间无数据发送时应该尽量早点发送ac