版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上课程设计5-滑动窗口协议模拟程序的设计与实现姓名: 学号:一、 目标任务(1) 了解网络协议编程的基本知识;(2) 了解滑动窗口协议的工作机制;(3) 使用编程语言编写一个滑动窗口协议的模拟程序,按要求实现程序。二、 编程语言 C语言三、 滑动窗口协议介绍3.1 滑动窗口协议工作原理TCP协议在工作时,如果发送端的TCP协议每传输一个数据分组后,必须等待接收端的确认才能够发送下一个分组,由于的时延,将有大量时间被用于等待确认,导致传输效率低下。为此TCP在进行数据传输时使用了。TCP滑动窗口用来暂存两台计算机间要传送的数据分组。每台运行TCP协议的计算机有两个滑动窗口
2、:一个用于数据发送,另一个用于数据接收。发送端待发数据分组在排队等待送出。被滑动窗口框入的分组,是可以在未收到接收确认的情况下最多送出的部分。滑动窗口左端标志X的分组,是已经被接收端确认收到的分组。随着新的确认到来,窗口不断向右滑动。TCP协议软件依靠滑动窗口机制解决传输效率和问题。它可以在收到确认信息之前发送多个数据分组。这种机制使得网络通信处于忙碌状态,提高了整个网络的吞吐率,它还解决了端到端的通信流量控制问题,允许接收端在拥有容纳足够数据的缓冲之前对传输进行限制。在实际运行中,TCP滑动窗口的大小是可以随时调整的。收发端TCP协议软件在进行分组确认通信时,还交换滑动窗口控制信息,使得双方
3、滑动窗口大小可以根据需要动态变化,达到在提高的同时,防止拥塞的发生。称窗口左边沿向右边沿靠近为窗口合拢,这种现象发生在数据被发送和确认时。当窗口右边沿向右移动时将允许发送更多的数据,称之为窗口张开。这种现象发生在另一端的接收进程读取已经确认的数据并释放了TCP的接收缓存时。当右边沿向左移动时,称为窗口收缩。Host Requirements RFC强烈建议不要使用这种方式。但TCP必须能够在某一端产生这种情况时进行处理。如果左边沿到达右边沿,则称其为一个零窗口。3.2 滑动窗口算法滑动窗口算法工作过程如下:首先,发送方为每1帧赋一个序号(sequence number),记作SeqNum。现在
4、,我们忽略SeqNum是由有限大小的头部字段实现的事实,而假设它能无限增大。发送方维护3个变量:发送窗口大小(send window size),记作SWS,给出发送方能够发 送但未确认的帧数的上界; LAR表示最近收到的确认帧(last acknowledgement received)的序号;LFS表示最近发送的帧(last frame sent)的序号,发送方还维持如下的不变式:LAR-LFSSWS 。图3-1 滑动窗口算法的时间线当一个确认到达时,发送方向右移动LAR,从而允许发送方发送另一帧。同时,发送方为所发的每个帧设置一个定时器,如果定时器在ACK到
5、达之前超时,则重发此帧。注意:发送方必须存储最多SWS个帧,因为在它们得到确认之前必须准备重发。接收方维护下面3个变量:接收窗口大小(receive window size),记为RWS,给出接收方所能接收的无序帧数目的上界;LAF表示可接收帧(largest acceptable frame)的序号;LFR表示最近收到的帧(last frame rece ived)的序号。接收方也维持如下不变式:LFS-LARSWS 图3-2 接收方的滑动窗口当一个具有顺序号SeqNum的帧到达时,接收方采取如下行动:如果SeqNumLFR或SeqNum> LAF,那么帧不在接收窗口内,于是
6、被丢弃;如果LFRSeqNumLAF,那么帧在接收窗口内,于是被接收。现在接收方需要决定是否发送一个ACK。设SeqNum To ACK表示未被确认帧的最大序号,则序号小于或等于SeqNum To ACK的帧都已收到。即使已经收到更高序号的分组,接收方仍确认SeqNum To ACK的接收。这种确认被称为是累积的(cumulative)。然后它设置LFA = SeqNum To ACK,并调整LFA = LFR + RWS。LFRLFR图3-3 接收方的滑动窗口窗口协议算法有三个功能:l 在不可靠链路上可靠地传输帧l 保持帧的传输顺序l 支持流量控制四、 设计方案及分析4.1 窗口机制总体设计
7、及分析图4-1 发送方和接收方状态示意图 设计分析:(1) 初始态,发送方没有帧发出,发送窗口前后沿相重合。接收方0号窗口打开,等待接收0号帧;(2) 发送方打开0号窗口,表示已发出0帧但尚未确认返回信息。此时接收窗口状态不变;(3) 发送方打开0、1号窗口,表示0、1号帧均在等待确认之列。至此,发送方打开的窗口数已达规定限度,在未收到新的确认返回帧之前,发送方将暂停发送新的数据帧。接收窗口此时状态仍未变;(4) 接收方已收到0号帧,0号窗口关闭,1号窗口打开,表示准备接收1号帧。此时发送窗口状态不变;(5) 发送方收到接收方发来的0号帧确认返回信息,关闭0号窗口,表示从重发表中删除
8、0号帧。此时接收窗口状态仍不变;(6) 发送方继续发送2号帧,2号窗口打开,表示2号帧也纳入待确认之列。至此,发送方打开的窗口又已达规定限度,在未收到新的确认返回帧之前,发送方将暂停发送新的数据帧,此时接收窗口状态仍不变;(7) 接收方已收到1号帧,1号窗口关闭,2号窗口打开,表示准备接收2号帧。此时发送窗口状态不变;(8) 发送方收到接收方发来的1号帧收毕的确认信息,关闭1号窗口,表示从重发表中删除1号帧。此时接收窗口状态仍不变。4.2 协议选择及分析在设计过程中,我主要运用了选择重传协议,该协议能很好地弥补了1比特滑动窗口协议和后退n协议的缺点,是比较完善的滑动窗口协议。在选择重传协议中,
9、当接收方发现某帧出错后,其后继续送来的正确的帧虽然不能立即递交给接收方的高层,但接收方仍可收下来,存放在一个缓冲区中,同时要求发送方重新传送出错的那一帧。一旦收到重新传来的帧后,就可以原已存于缓冲区中的其余帧一并按正确的顺序递交高层。这种方法称为选择重发(SELECTICE REPEAT),其工作过程如图所示。显然,选择重发减少了浪费,但要求接收方有足够大的缓冲区空间。图4-2 选择重传协议原理图4.3 发送方与接收方设计流程由于我设计的程序为模拟程序,因此我把发送方和接收方集合在同一版面上。它们各自的功能同时在同一版面上实现及显示。在程序实现后,我们可以通过在同一版面根据提示输入相关信息,即
10、可得到模拟过程。虽然只有一个版面,但是发送方和接收方的功能是清晰的、相对齐全的。发送方和接收方的设计流程如下:图4-3 发送方与接收方设计流程五、 关键代码(1)发送方程序:本程序设有四个变量:一是窗口大小变量,二是第一帧序列号变量,三是最近发送的帧变量,最后一个是最近收到的确认帧变量。swpstate1.head=NULL; /变量初始值为空swpstate1.sendq=sendq_rear=(structsendq_slot*)malloc(sizeof(structsendq_slot);if(!swpstate1.sendq) exit(1);sendq_rear->next=
11、NULL;printf("请输入窗口大小:");scanf("%ld",&swpstate1.sws); /输入窗口大小swpstate1.rws=swpstate1.sws; /把窗口大小的值赋给变量if (swpstate1.sws>0) printf("请输入第一帧的序列号:"); scanf("%ld",&swpstate1.hdr.seqnum); /输入第一帧序列号swpstate1.nfe=swpstate1.hdr.seqnum; /把第一帧的值放进缓冲池内sendp=(str
12、uct 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; /最近收到的确认帧取值dow
13、hile(swpstate1.sws>0) /当窗口大小大于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_rear=sendp; -swpstate1.sws; +swpstate1.
14、lfs;swpstate1.hdr.acknum=0; /ACK清空swpstate1.hdr.flags=0; /存储缓冲池清空printf("最近收到的ACK的帧序号:%ldn",swpstate1.lar); /输出最近收到的ACK帧序号printf("最近发送的帧序号(发送新帧后):%ldn",swpstate1.lfs);/输出最近发送帧序号(2)接收方程序: 接收方的接收原则从总体上看是先判断输入的数据帧是否在接收范围之内,若是,则继续判断是否符合其他接收条件;若不是,则马上丢弃该数据帧,不再进行其他条件的判断。struct sendq_sl
15、ot *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&&a<=swpstate1.lfs) /判断数据帧应被接收或缓存 if(swpstate1.hea
16、d=NULL) recvp=recvq_rear=(structrecvq_slot*)malloc(sizeof(structrecvq_slot); recvp->next=NULL; swpstate1.head=recvp; else if(swpstate1.head!=NULL) recvp=(struct recvq_slot*)malloc(sizeof(struct recvq_slot); recvp->next=NULL; recvq_rear->next=recvp; recvq_rear=recvp; else printf("所输数据不在
17、接收窗口内!"); break; /跳出该循环 若输入数据帧在接收范围内则继续判断并进行以下循环。 recvp->msg=a; if(recvp->msg=swpstate1.nfe) /是否放入缓存判断 recvp->received=1; else recvp->received=0; -swpstate1.rws; if(recvp->received=1) /数据帧被接收,则进行下面语句 a=a-1; do a=a+1; if(swpstate1.head=NULL) break; p1=swpstate1.head; flag=0; while
18、(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号(期待的下一帧的序号):%ldn
19、",swpstate1.nfe); printf("没按序接受的序号:n"); p1=swpstate1.head; while(p1!=NULL) printf("%ldt",p1->msg); p1=p1->next; 当接收完一个数据帧时,我们可以选择终止下面的继续接收,也可以选择继续接收。如果继续接收,那么程序跳到判断循环,继续判断是否接收下一个数据帧,原理与上面相当。while(swpstate1.rws>0)&&(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) swpstate1.sendq->next=p3; else swpstate1.se
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026学年01岁游戏说课稿
- 2025-2026学年不反锁门说课稿
- 2025-2026学年大班 传递微笑 说课稿
- 2025-2026学年反诈骗安全说课稿
- 浸渍干燥工操作安全强化考核试卷含答案
- 2025-2026学年《剪花花》说课稿
- 热压延工常识竞赛考核试卷含答案
- 柔性版制版员岗前操作能力考核试卷含答案
- 电力电容器心体加工工岗前安全宣贯考核试卷含答案
- 三氯氢硅合成工操作技能强化考核试卷含答案
- 2025年医疗质量安全核心制度考试试题(附答案)
- 2027届上海市西南位育初三语文9月月考试卷及答案
- 2026年卫生高级职称面审答辩(康复医学科)副高经典试题及答案
- 血液肿瘤相关肠梗阻护理专家共识(2026年版)
- 预制桩沉桩专项施工方案
- 《培养德智体美劳全面发展的社会主义建设者和接班人》教学设计2
- 四年级英语阅读理解20篇
- DB11-T 2556-2026 城市轨道交通既有线改造技术要求
- 小学四年级数学下册《构建模型 推理溯源-鸡兔同笼问题探究》教学设计
- 2026年中医经典竞赛试题库参考答案
- 2026年金钥匙科技竞赛考前冲刺测试卷及参考答案详解AB卷
评论
0/150
提交评论