计算机网络选择重传协议实验报告.
《计算机网络》选择重传协议实验报告1.实验内容和实验环境描述实验内容:利用所学数据链路层原理,设计一个滑动窗口协议,在仿真环境下编程实现有噪音信道环境下两站点之间无差错双工通信。信道模型为8000bps 全双工卫星信道,信道传播时延270毫秒,信道误码率为10-5,信道提供字节流传输服务,网络层分组长度固定为256字节。实验环境:Windows7—64位操作系统PC机VC 6.02.协议设计数据结构:数据帧 +=========+========+========+===============+========+ | 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:校验和模块结构:static inc(Uchar* a)作用:使一个字节在0~MAX_SEQ的范围内循环自增。参数:a,字节类型。static between(Uchar a,Uchar b,Uchar c)作用:判断当前帧是否落在发送/接收窗口内。参数:a,b,c,均为字节类型,其中两个分别为窗口的上、下界,一个为帧的编号。其中,发送窗口的上界和下界分别为next_to_send和ack_expected,接收窗口的上界和下界分别为too_far和frame_expected,均定义在main函数中。static void put_frame(unsigned char *frame, int len)作用:为一个帧做CRC校验,填充至帧的尾部并将其递交给网络层发送。参数:frame,字节数组,由除padding域之外的帧内容转换而来;len,整型,为帧的当前长度。static send_frame_(Uchar fk,Uchar next_frame,Uchar frame_expected,Packet out_buf[])作用:构造一个帧,并将其发送。参数:fk,字节类型,为帧的内容;next_frame,字节类型,为帧的编号;frame_expected,字节类型,为希望收到的帧的编号;out_buf,二维字节数组,为缓冲区。int main(int argc,char *argv[])作用:主程式,包含选择重传协议的算法流程。参数:argc,整型,表示命令行参数的个数;argv,二维字符数组,表示参数内容。算法流程:Ack timeoutData timeoutData comingNetwork layerreadyMake ack frameReset ack_numCount cscFind frame-endGet packet()Send this frameNext_send=ack_expectedGet_num>0Send_data()Csc==0?YPhy ready?breakPhy ready?Send frame NYNS_seq=frameExpect?YYSend framePhy_ready=1Sent frameY NPut_packet()NGet_num=nbufferedbreakBreakDeal with acknumberbreakIn_len=1Nbuffered