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

上传人:夏** 文档编号:498833296 上传时间:2022-12-22 格式:DOC 页数:15 大小:121KB
返回 下载 相关 举报
扬州大学计算机网络课程设计模拟滑动窗口的实现_第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.为了防止因确认丢失导致的重复接收,对每个协议数据单元编号,接收方通过编号判断分组是否重复分组。 3.流量控制方法a.流量控制要求发送方根据接收方的能力调整发送速度。b.最保守的做法是每发出一个协议数据单元,仅当等到接收方的许可确认,再发送下一个协议数据单元。但是这样做的话,发送效率很低。即使接收方足够快,也要经过两点间传播时延的2倍时间,才能发出去一个协议数据单元。c.可以不像上面一样将接收方按最

3、坏情形设想,连续发送多个协议数据单元数。如果设想正确,在两点间传播时延的2倍时间内,就可以发送多个协议数据单元,提高发送效率。当然,由于发出去的每个协议数据单元都有可能遇到问题需要重发,发送方必须设置多个发送缓冲区以保存副本,发送缓冲区的个数决定了发送速率。当缓冲区满,即使有用户请求到达,也不会发送。d.实用的可靠传输协议既要进行差错控制,又要进行流量控制。流量控制的加入,给发送方实体增加了一种可能情形:当用户发送请求到达,发送实体因为发送缓冲区满,拒绝发送。e.滑动窗口协议实现了上述可靠传输原理。4.滑动窗口协议a.原理: 所有滑动窗口协议中,每个外出协议数据单元包含一个序号:0某一最大值,

4、如序号长度为n,最大值通常为2n-1。发送方在任何时刻,决定一个用户请求是否被满足的条件是是否有缓冲区存放副本。随着数据的发送和确认的到达,已经发出的协议数据单元和允许发送的协议数据单元的个数总等于发送缓冲区大小,并且它们的序号变化的规律如同在序号序列上滑动窗口一样。而为了防止重复接收,接收方维持着已经看到过的序号/期望看到的序号,随着数据不断到达,这个序号也不断变化,变化的规律如同在序号序列上滑动窗口一样。b.类型: 停等协议:发送窗口=1,接收窗口=1退后N帧协议:发送窗口1,接收窗口=1选择重传协议:发送窗口 1,接收窗口1三、发送方模拟程序的设计与实现swpstate1.head=NU

5、LL; /变量初始值为空swpstate1.sendq=sendq_rear=(structsendq_slot*)malloc(sizeof(structsendq_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.se

6、qnum); /输入第一帧序列号swpstate1.nfe=swpstate1.hdr.seqnum; /把第一帧的值放进缓冲池内sendp=(struct 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;

7、/最近发送的帧取值swpstate1.lar=swpstate1.hdr.seqnum; /最近收到的确认帧取值dowhile(swpstate1.sws0) /当窗口大小大于0时,执行以下的循环sendp=(struct sendq_slot*)malloc(sizeof(struct sendq_slot); if(!sendp) exit(1); sendp-msg=swpstate1.lfs+1; /如果输入的帧序号大于之前帧序号,那么窗口向前滑动 sendp-timeout=1; /时延为1 sendp-next=NULL; sendq_rear-next=sendp; sendq_

8、rear=sendp; -swpstate1.sws; +swpstate1.lfs;swpstate1.hdr.acknum=0; /ACK清空swpstate1.hdr.flags=0; /存储缓冲池清空printf(最近收到的ACK的帧序号:%ldn,swpstate1.lar); /输出最近收到的ACK帧序号printf(最近发送的帧序号(发送新帧后):%ldn,swpstate1.lfs);/输出最近发送帧序号四、接收方模拟程序的设计与实现1. 接收方的接收原则从总体上看是先判断输入的数据帧是否在接收范围之内,若是,则继续判断是否符合其他接收条件;若不是,则马上丢弃该数据帧,不再进行

9、其他条件的判断。struct sendq_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; else if(swpstate1.head!=NULL) recvp

10、=(struct recvq_slot*)malloc(sizeof(struct recvq_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; else recvp-received=0; -swpstate1.rws; if(recvp-

11、received=1) /数据帧被接收,则进行下面语句 a=a-1; do 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;

12、swpstate1.hdr.flags=1; while(flag=1); printf(ACK号(期待的下一帧的序号):%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(swpstate1.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) swpstat

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

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