扬州大学计算机网络课程设计模拟滑动窗口的实现

上传人:m**** 文档编号:458149535 上传时间:2023-04-12 格式:DOCX 页数:15 大小:112.23KB
返回 下载 相关 举报
扬州大学计算机网络课程设计模拟滑动窗口的实现_第1页
第1页 / 共15页
扬州大学计算机网络课程设计模拟滑动窗口的实现_第2页
第2页 / 共15页
扬州大学计算机网络课程设计模拟滑动窗口的实现_第3页
第3页 / 共15页
扬州大学计算机网络课程设计模拟滑动窗口的实现_第4页
第4页 / 共15页
扬州大学计算机网络课程设计模拟滑动窗口的实现_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《扬州大学计算机网络课程设计模拟滑动窗口的实现》由会员分享,可在线阅读,更多相关《扬州大学计算机网络课程设计模拟滑动窗口的实现(15页珍藏版)》请在金锄头文库上搜索。

1、课程设计报告课程:计算机通信与网络题目:滑动窗口协议的模拟实现班级:物联1301学号:131408119 姓名:滕玲一、 任务描述1 .深入理解计算机网络中可靠传输的实现原理2 .编写两个程序:一个模拟提供可靠传输服务的发送实体;一个模拟提供可靠 传输服务的接收实体。3 .撰写课程设计报告.、可靠传输的实现原理1 .理想的数据传输:假定1:链路是理想白传输信道(不会出错和丢失)假定2:不管发方以多快的速率发送数据,收方总来得及收下,并及时上交主 机(接收缓冲区容量无限大永不会溢出或收发速率精确相等 )2 .差错控制方法=确认+重发a.为了防止数据传输中出错,在发送完一个分组后,必须暂时保留已发

2、送 的分组的副本,直到收到接收方的肯定确认。b.为了防止数据丢失,导致发送方死等,发送方在发出一个分组的同时, 启动一个计时器,如果超时还没有收到确认,则主动重发。c.为了防止因确认丢失导致的重复接收,对每个协议数据单元编号,接收 方通过编号判断分组是否重复分组。用户请求发送带序号的确认J J 带序号的协议数据单元向用户提交数据(1) 一切顺利的情形用户请求发送带序号的的协议数据单元发送实体C2)数据出错或丢失向用户提交数据. 一一带序号的确认计时器关联的协议数据单元副本C3)确认丢失讨时器超时.3 .流量控制方法a.流量控制要求发送方根据接收方的能力调整发送速度。b.最保守的做法是每发出一个

3、协议数据单元, 仅当等到接收方的许可确认, 再发送下一个协议数据单元。但是这样做的话,发送效率很低。即使接收方 足够快,也要经过两点间传播时延的 2倍时间,才能发出去一个协议数据单 元。c.可以不像上面一样将接收方按最坏情形设想,连续发送多个协议数据单 元数。如果设想正确,在两点间传播时延的 2倍时间内,就可以发送多个协 议数据单元,提高发送效率。当然,由于发出去的每个协议数据单元都有可 能遇到问题需要重发,发送方必须设置多个发送缓冲区以保存副本,发送缓 冲区的个数决定了发送速率。当缓冲区满,即使有用户请求到达,也不会发 送。d.实用的可靠传输协议既要进行差错控制,又要进行流量控制。流量控制的

4、加入,给发送方实体增加了一种可能情形:当用户发送请求到达,发送实 体因为发送缓冲区满,拒绝发送。e.滑动窗口协议实现了上述可靠传输原理。4 .滑动窗口协议a.原理:所有滑动窗口协议中,每个外出协议数据单元包含一个序号:0某一 最大值,如序号长度为n,最大值通常为2n-1。发送方在任何时刻,决定一个用户请求是否被满足的条件是是否有缓冲区存放副本。随着数据的发送和确认的到达,已经发出的协议数据单元和允许发送的协议数据单元的个数总等于发送缓冲区大小,并且它们的序号变化的规律如同在序号序列上滑动窗口一样。而为了防止重复接收,接收方维持着已经看到过的序号/期望看到的序号,随着数据不断到达,这个序号也不断

5、变化,变化的规律如同在 序号序列上滑动窗口一样。b.类型:停等协议:发送窗口 =1,接收窗口 =1退后N帧协议:发送窗口 1,接收窗口 =1选择重传协议:发送窗口 1 ,接收窗口 1三、发送方模拟程序的设计与实现发送实体模拟遇到的问题工CD用户发送请求到达:(2)某序号帧关联的计时器超时;(3)某确认帧到达。程序输出.程序体的动作 (D拒绝用户发送请求, (2)封装新帧并发送,给出序号; (3)重发某序号帧.开始swpstate1.head=NULL; /变量初始值为空swpstate1.sendq=sendq_rear=(structsendq_slot*)malloc(sizeof(str

6、uctsen dq_slot);if(!swpstate1.sendq) exit(1);sendq_rear-next=NULL;printf( 请输入窗口大小:);scanf(%ld,&swpstate1.sws); 输入窗 口 大小swpstate1.rws=swpstate1.sws; /把窗口大小的值赋给变量if (swpstate1.sws0)printf( 请输入第一帧的序列号:);scanf(%ld,&swpstate1.hdr.seqnum); /输入第一帧序列号swpstate1.nfe=swpstate1.hdr.seqnum; /把第一帧的值放进缓冲池内sendp=(s

7、truct sendq_slot*) malloc (size of(struct sendq_slot);if(!sendp) exit(1);sendp-msg=swpstate1.hdr.seqnum;sendp-timeout=1;sendp-next=NULL;sendq_rear-next=sendp;sendq_rear=sendp;-swpstate1.sws;swpstate1.lfs=swpstate1.hdr.seqnum; /最近发送的帧取值swpstate1.lar=swpstate1.hdr.seqnum; /最近收至 U 的确认帧取值dowhile(swpstat

8、e1.sws0) /当窗口大小大于0时,执行以下的循环 sendp=(struct sendq_slot*)malloc(sizeof(struct sendq_slot);if(!sendp) exit(1);sendp-msg=swpstate1.lfs+1; /如果输入的帧序号大于之前帧序号,那么窗口向前滑动sendp-timeout=1; / 时延为 1sendp-next=NULL;sendq_rear-next=sendp;sendq_rear=sendp;-swpstatel.sws;+swpstate1.lfs;swpstate1.hdr.acknum=0; /ACK 清空sw

9、pstate1.hdr.flags=0; /存储缓冲池清空printf(最近收到的 ACK勺帧序号:ldn,swpstate1.lar);/输出最近收到的ACK#序号printf( 最近发送的帧序号(发送新帧后):ldn,swpstate1.lfs);/输出最近发送帧序号四、接收方模拟程序的设计与实现接收程序模拟程序动作,(1)拒绝到达帧,返回某序号的确认: (2)接收该帆并向用户提交数据,返回某序号的确认.1. 接收方的接收原则从总体上看是先判断输入的数据帧是否在接收范围之内, 若是,则继续判断是否符合其他接收条件;若不是,则马上丢弃该数据帧,不再 进行其他条件的判断。struct send

10、q_slot *sendq_rear,*sendp,*p3,*p4; /设定变量struct recvq_slot *recvp,*recvq_rear,*p1,*p2;if(swpstate1.hdr.flags=0)/上次输入的数据帧被放置在缓存区,输入区被清空do /如果继续接收数据帧则实施下面循环printf(”请输入收到的数据帧号:);scanf(%ld,&a);if(a=swpstate1.nfe&anext=NULL;swpstate1.head=recvp;elseif(swpstate1.head!=NULL)recvp=(structrecvq_slot*)malloc(s

11、izeof(structrecvq_slot);recvp-next=NULL;recvq_rear-next=recvp;recvq_rear=recvp; else printf( 所输数据不在接收窗口内! );break; /跳出该循环2. 若输入数据帧在接收范围内则继续判断并进行以下循环。recvp-msg=a;if(recvp-msg=swpstate1.nfe) / 是否放入缓存判断recvp-received=1; elserecvp-received=0;-swpstate1.rws;if(recvp-received=1) / 数据帧被接收,则进行下面语句 a=a-1;do

12、a=a+1;if(swpstate1.head=NULL) break;p1=swpstate1.head;flag=0;while(a!=p1-msg)&(p1-next!=NULL) p2=p1;p1=p1-next; if(a=p1-msg)flag=1;if(p1=swpstate1.head)swpstate1.head=swpstate1.head-next;else p2-next=p1-next;swpstate1.nfe=a+1;swpstate1.hdr.acknum=a+1;swpstate1.hdr.flags=1; while(flag=1);printf(ACK 号

13、(期待的下一帧的序号) : %ldn,swpstate1.nfe); printf( 没按序接受的序号:n);p1=swpstate1.head;while(p1!=NULL)printf(%ldt,p1-msg);p1=p1-next;3. 当接收完一个数据帧时,我们可以选择终止下面的继续接收,也可以选择继续接收。 如果继续接收, 那么程序跳到判断循环, 继续判断是否接收下一个数据帧,原理与上面相当。while(swpstate1.rws0)&(b=1);if(swpstate1.hdr.flags=1) p3=swpstate1.sendq-next;flag=0;while(swpsta

14、te1.hdr.acknum)!=p3-msg&p3-next!=NULL)p4=p3;p3=p3-next;if(swpstate1.hdr.acknum=p3-msg)flag=1;if(p3-msg=swpstate1.sendq-next-msg)swpstate1.sendq-next=p3;else swpstate1.sendq-next=p3;swpstate1.sws=swpstate1.sws+(swpstate1.sendq-next-msg-swpstate1.lar );swpstate1.lar=swpstate1.sendq-next-msg;swpstate1.hdr.seqnum=swpstate1.hdr.acknum;printf( 最 近 收 到 的 ACK 的 帧 序 号 ( 收 到 AC

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 毕业论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号