当前位置:文档之家› 滑动窗口协议模拟程序的设计与实现

滑动窗口协议模拟程序的设计与实现

长沙理工大学

《网络协议编程》课程设计报告

梁碧莹

学院计算机与通信工程专业网络工程

班级网络08-02 学号200858080205 学生姓名梁碧莹指导教师王静

课程成绩完成日期2011年7 月 2 日

课程设计任务书

计算机与通信工程学院网络工程专业

课程设计成绩评定

学院计算机通信工程专业网络工程

班级网络08-02 班学号200858080205

学生姓名梁碧莹指导教师王静

课程成绩完成日期2011年7 月2 日指导教师对学生在课程设计中的评价

指导教师对课程设计的评定意见

滑动窗口协议模拟程序的设计与实现

学生:梁碧莹指导老师:王静

摘要:本文主要介绍如何根据滑动窗口协议的原理,在Visual C++的平台上设计一个滑动窗口协议模拟程序,并最终使该程序得以实现。本次程序设计分两部分:第一部分是发送方,第二部分是接收方。通过发送方和接收方之间的数据帧传输模拟,学习滑动窗口协议控制流量的原理和方法,以及滑动窗口协议的工作机制。

关键词:滑动窗口协议流量控制工作机制模拟程序

Design and Implementation of Sliding Window Protocol Procedures Student: Liang Biying Instructor: Wang Jing

Abstract: This paper describes the principle of Sliding Window Protocol and how to design and implement a procedure about the Sliding Window Protocol. The program design in two parts, one is the sender, the other is the receiver. After all, studying the principle and method of how the Sliding Window Protocol control the flow, and how the Sliding Window Protocol works through the transmission of data between the sender and the receiver.

Keywords: Sliding window protocol Flow control Working mechanism Simulation program

目录

1 引言 (1)

1.1 滑动窗口协议概述 (1)

1.2 本次设计任务 (1)

2 滑动窗口协议介绍 (2)

2.1 滑动窗口协议工作原理 (2)

2.2 滑动窗口算法 (2)

3 设计方案及分析 (5)

3.1 窗口机制总体设计及分析 (5)

3.2 协议选择及分析 (6)

3.3 发送方与接收方设计流程 (6)

4 程序测试 (12)

5 总结 (15)

5.1 程序改进与完善 (15)

5.2 设计总结 (15)

参考文献 (16)

附录 (17)

1 引言

随着网络的不断壮大,用户数量、信息量的需求不断增加,网络负荷越来越重。此时,我们迫切需要一种机制来控制网络的流量,减少网络拥堵的几率,提高传输的效率。因此,一种名为滑动窗口的协议应运而生。

滑动窗口协议,是TCP使用的一种流量控制方法。该协议允许发送方在停止并等待确认前可以连续发送多个分组。由于发送方不必每发一个分组就停下来等待确认,因此该协议可以加速数据的传输。经测试证明,该协议还能有效地解决TCP的高协议处理开销和UDP的低可靠性之间的矛盾,

1.1滑动窗口协议概述

滑动窗口协议,是TCP使用的一种流量控制方法。滑动窗口协议也称为Go-Back-N(GBN)协议。在该协议中,允许发送方传输多个分组(当有多个分组时)而不需等待确认,但它也受限于在流水账中未确认的分组数不能超过最大允许数N。只有在接收窗口向前滑动时(与此同时也发送了确认),发送窗口才有可能向前滑动。收发两端的窗口按照以上规律不断地向前滑动,因此这种协议又称为滑动窗口协议。当发送窗口和接收窗口的大小都等于 1时,就是停止等待协议。当发送窗口大于1,接收窗口等于1时,就是回退N步协议。当发送窗口和接收窗口的大小均大于1时,就是选择重发协议。协议中规定,对于窗口内未经确认的分组需要重传。这种分组的数量最多可以等于发送窗口的大小,即滑动窗口的大小n减去1(因为发送窗口不可能大于(n-1),起码接收窗口要大于等于1)。

1.2本次设计任务

本次的设计任务是根据滑动窗口协议的工作原理,在Visual C++ 6.0的平台上用C++语言编写一个基于TCP滑动窗口协议的模拟程序。

要求该程序能够实现滑动窗口协议的发送和接收数据帧功能,在此功能上体现滑动窗口协议的运作,如:发送帧被接收与否的判断,帧超时重发,帧缓存等。

2滑动窗口协议介绍

2.1滑动窗口协议工作原理

TCP协议在工作时,如果发送端的TCP协议软件每传输一个数据分组后,必须等待接收端的确认才能够发送下一个分组,由于网络传输的时延,将有大量时间被用于等待确认,导致传输效率低下。为此TCP在进行数据传输时使用了滑动窗口机制。

TCP滑动窗口用来暂存两台计算机间要传送的数据分组。每台运行TCP协议的计算机有两个滑动窗口:一个用于数据发送,另一个用于数据接收。发送端待发数据分组在缓冲区排队等待送出。被滑动窗口框入的分组,是可以在未收到接收确认的情况下最多送出的部分。滑动窗口左端标志X的分组,是已经被接收端确认收到的分组。随着新的确认到来,窗口不断向右滑动。

TCP协议软件依靠滑动窗口机制解决传输效率和流量控制问题。它可以在收到确认信息之前发送多个数据分组。这种机制使得网络通信处于忙碌状态,提高了整个网络的吞吐率,它还解决了端到端的通信流量控制问题,允许接收端在拥有容纳足够数据的缓冲之前对传输进行限制。在实际运行中,TCP滑动窗口的大小是可以随时调整的。收发端TCP协议软件在进行分组确认通信时,还交换滑动窗口控制信息,使得双方滑动窗口大小可以根据需要动态变化,达到在提高数据传输效率的同时,防止拥塞的发生。称窗口左边沿向右边沿靠近为窗口合拢,这种现象发生在数据被发送和确认时。

当窗口右边沿向右移动时将允许发送更多的数据,称之为窗口张开。这种现象发生在另一端的接收进程读取已经确认的数据并释放了TCP的接收缓存时。

当右边沿向左移动时,称为窗口收缩。Host Requirements RFC强烈建议不要使用这种方式。但TCP必须能够在某一端产生这种情况时进行处理。

如果左边沿到达右边沿,则称其为一个零窗口。

2.2滑动窗口算法

滑动窗口算法工作过程如下:

首先,发送方为每1帧赋一个序号(sequence number),记作SeqNum。现在,

我们忽略SeqNum是由有限大小的头部字段实现的事实,而假设它能无限增大。发送方维护3个变量:发送窗口大小(send window size),记作SWS,给出发送方能够发送但未确认的帧数的上界;LAR表示最近收到的确认帧(last acknowledgement received)的序号;LFS表示最近发送的帧(last frame sent)的序号,发送方还维持如下的不变式:LAR-LFS≤SWS 。

图2-1 滑动窗口算法的时间线

当一个确认到达时,发送方向右移动LAR,从而允许发送方发送另一帧。同时,发送方为所发的每个帧设置一个定时器,如果定时器在AC K到达之前超时,则重发此帧。注意:发送方必须存储最多SWS个帧,因为在它们得到确认之前必须准备重发。接收方维护下面3个变量:接收窗口大小(receive window size),记为RWS,给出接收方所能接收的无序帧数目的上界;LAF表示可接收帧(largest acceptable frame)的序号;LFR表示最近收到的帧(last frame rece ived)的序号。接收方也维持如下不变式:LFS-LAR≤SWS

图2-2 接收方的滑动窗口

当一个具有顺序号SeqNu m的帧到达时,接收方采取如下行动:如果SeqNum≤LFR或SeqNum> LAF,那么帧不在接收窗口内,于是被丢弃;如果LFR <SeqNum≤LAF,那么帧在接收窗口内,于是被接收。现在接收方需要决定是否发送一个ACK。设SeqNum To ACK表示未被确认帧的最大序号,则序号小于或

等于SeqNum To ACK的帧都已收到。即使已经收到更高序号的分组,接收方仍确认SeqNum To ACK的接收。这种确认被称为是累积的(cumulative)。然后它设置LFA = SeqNum To ACK,并调整LFA = LFR + RWS。

LFR

图2-3 接收方的滑动窗口

窗口协议算法有三个功能:

●在不可靠链路上可靠地传输帧

●保持帧的传输顺序

●支持流量控制

3设计方案及分析

3.1 窗口机制总体设计及分析

图3-1 发送方和接收方状态示意图

设计分析:

(1)初始态,发送方没有帧发出,发送窗口前后沿相重合。接收方0号窗口打开,等待接收0号帧;

(2)发送方打开0号窗口,表示已发出0帧但尚未确认返回信息。此时接收窗口状态不变;

(3)发送方打开0、1号窗口,表示0、1号帧均在等待确认之列。至此,发送方打开的窗口数已达规定限度,在未收到新的确认返回帧之前,发送方将暂停发送新的数据帧。接收窗口此时状态仍未变;

(4)接收方已收到0号帧,0号窗口关闭,1号窗口打开,表示准备接收1号帧。此时发送窗口状态不变;

(5)发送方收到接收方发来的0号帧确认返回信息,关闭0号窗口,表示从重发表中删除0号帧。此时接收窗口状态仍不变;

(6)发送方继续发送2号帧,2号窗口打开,表示2号帧也纳入待确认之列。

至此,发送方打开的窗口又已达规定限度,在未收到新的确认返回帧之前,发送方将暂停发送新的数据帧,此时接收窗口状态仍不变;

(7)接收方已收到1号帧,1号窗口关闭,2号窗口打开,表示准备接收2号帧。此时发送窗口状态不变;

(8)发送方收到接收方发来的1号帧收毕的确认信息,关闭1号窗口,表示从

重发表中删除1号帧。此时接收窗口状态仍不变。

3.2协议选择及分析

在设计过程中,我主要运用了选择重传协议,该协议能很好地弥补了1比特滑动窗口协议和后退n协议的缺点,是比较完善的滑动窗口协议。

在选择重传协议中,当接收方发现某帧出错后,其后继续送来的正确的帧虽然不能立即递交给接收方的高层,但接收方仍可收下来,存放在一个缓冲区中,同时要求发送方重新传送出错的那一帧。一旦收到重新传来的帧后,就可以原已存于缓冲区中的其余帧一并按正确的顺序递交高层。这种方法称为选择重发(SELECTICE REPEAT),其工作过程如图所示。显然,选择重发减少了浪费,但要求接收方有足够大的缓冲区空间。

图3-2 选择重传协议原理图

3.3发送方与接收方设计流程

由于我设计的程序为模拟程序,因此我把发送方和接收方集合在同一版面上。它们各自的功能同时在同一版面上实现及显示。在程序实现后,我们可以通过在同一版面根据提示输入相关信息,即可得到模拟过程。

虽然只有一个版面,但是发送方和接收方的功能是清晰的、相对齐全的。发送方和接收方的设计流程如下:

图3-3 发送方与接收方设计流程

根据流程图的实现步骤,我编写了以下的代码。

(1)发送方程序:

本程序设有四个变量:一是窗口大小变量,二是第一帧序列号变量,三是最近发送的帧变量,最后一个是最近收到的确认帧变量。

swpstate1.head=NULL; //变量初始值为空

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.sws>0)

{

printf("请输入第一帧的序列号:");

scanf("%ld",&swpstate1.hdr.seqnum); //输入第一帧序列号

}

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; //最近发送的帧取值

https://www.doczj.com/doc/aa9971368.html,r=swpstate1.hdr.seqnum; //最近收到的确认帧取值

do

{

while(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.lfs;

}

swpstate1.hdr.acknum=0; //ACK清空

swpstate1.hdr.flags=0; //存储缓冲池清空

printf("最近收到的ACK的帧序号:%ld\n",https://www.doczj.com/doc/aa9971368.html,r);

//输出最近收到的ACK帧序号

printf("最近发送的帧序号(发送新帧后):%ld\n",swpstate1.lfs);

//输出最近发送帧序号

(2)接收方程序:

图3-4 数据包接收过程

接收方的接收原则从总体上看是先判断输入的数据帧是否在接收范围之内,若是,则继续判断是否符合其他接收条件;若不是,则马上丢弃该数据帧,不再进行其他条件的判断。

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&&a<=swpstate1.lfs) //判断数据帧应被接收或缓存

{

if(swpstate1.head==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("所输数据不在接收窗口内!");

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((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号(期待的下一帧的序号):%ld\n",swpstate1.nfe);

printf("没按序接受的序号:\n");

p1=swpstate1.head;

while(p1!=NULL)

{

printf("%ld\t",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.sendq->next=p3;

}

swpstate1.sws=swpstate1.sws+(swpstate1.sendq->next->https://www.doczj.com/doc/aa9971368.html,r);

https://www.doczj.com/doc/aa9971368.html,r=swpstate1.sendq->next->msg;

swpstate1.hdr.seqnum=swpstate1.hdr.acknum;

printf("最近收到的ACK的帧序号(收到ACK后):%ld\n",https://www.doczj.com/doc/aa9971368.html,r);

printf("最近发送的帧序号(此时还未发送新的数据):%ld\n",swpstate1.lfs);

}

4程序测试

下面我以窗口大小为11,第一帧序列号为3,做程序的测试。

图4-1 程序测试整体图

(1)整体窗口展示,命令行界面

图4-2 整体窗口展示

(2)输入窗口大小及第一帧序列号

图4-3 信息设置输入

(3)当输入的接收帧并不是ACK期待的帧,那么根据滑动窗口协议该帧不被接收,且把该帧存放在缓冲区。

图4-4 帧不被接收的情况

(4)当前面输入的都不是系统所期待的帧,那么这些帧会一直被存放在缓冲区。

直到输入下一个输入的帧的序号比前面输入的帧的序号大,且是系统所期待的帧时,之前和当前输入的帧会一并被接收,缓冲区清空。继续接收命令,进行新的帧的检测及接收。

图4-5 帧被接收的情况

(5)若输入的帧超过了窗口大小,那么系统会显示该帧不在接收范围内,并拒

绝接收。

图4-6 帧超出窗口大小范围

5总结

5.1程序改进与完善

该滑动窗口协议模拟程序还有进一步完善的余地,例如可以对以下一些地方进行改进:

(1)改模拟程序通过命令行来实行,缺少形象直观的界面,希望日后可以设计比较简单明了的界面来展示程序的主要模拟功能。

(2)现在我们模拟的只是一些用序号代名的简单的帧,建议可以改善程序,使该系统可以模拟更接近真实的数据帧。这样可以联系实际更直观地去验证滑动窗口协议。

(3)整体来说,滑动窗口在实验中是固定的,这样便于处理帧号和ack的确认以及存储。但建议可以在日后改进使其变成动态的。

5.2设计总结

以上为我所设计的滑动窗口模拟程序,它经过多次修改和整理,已是一个比较不错的设计,可以基本实现所需功能,但因为水平有限,此程序中也存在一定的问题,这需要以后更进一步的改进。

课程设计报告滑动窗口协议仿真

课程设计报告滑动窗口 协议仿真 公司内部档案编码:[OPPTR-OPPT28-OPPTL98-OPPNN08]

滁州学院 课程设计报告课程名称:计算机网络 设计题目:滑动窗口协议仿真 系别:计算机与信息工程学院 专业:计算机科学与技术 组别:第五组 起止日期: 2011年11月24日~2011年12月7日 指导教师:赵国柱 计算机与信息工程学院二○一一年制

课程设计任务书 一. 引言 二. 基本原理 窗口机制 1bit滑动窗口协议

后退N协议 选择重传协议 流量控制 三. 需求分析 课程设计题目 开发环境 运行环境 课程设计任务及要求 界面要求 网络接口要求 四. 详细设计 结构体的定义 发送方的主要函数 接受方的主要函数 五. 源代码 发送方的主要代码 接收方的主要代码 六. 调试与操作说明 致谢 [参考文献] 课程设计的主要内容1.引言

早期的网络通信中,通信双方不会考虑网络的拥挤情况直接发送数据。由于大家不知道网络拥塞状况,一起发送数据,导致中间结点阻塞掉包,谁也发不了数据。在数据传输过程中,我们总是希望数据传输的更快一些,但如果发送方把数据发送的过快,接收方就可能来不及接收,这就造成数据的丢失。因此就有了滑动窗口机制来解决这些问题。早期我们使用的是1bit滑动窗口协议,一次只发送一个帧,等收到ack确认才发下一个帧,这样对信道的利用率太低了。因此提出了一种采用累积确认的连续ARQ协议,接收方不必对收到的帧逐个发送ack 确认,而是收到几个帧后,对按序到达的最后一个帧发送ack确认。同1bit滑动窗口协议相比,大大减少了ack数量,并消除了延迟ack对传输效率的影响。但是,这会产生一个新的问题,如果发送方发送了5个帧,而中间的第3个帧丢失了。这时接收方只能对前2个帧发出确认。发送方无法知道后面三个帧的下落,只好把后面的3个帧再重传一次,这就是回退N协议。为了解决这个问题,又提出了选择重传协议。当接收方发现某帧出错后,继续接受后面送来的正确的帧,只是不交付它们,存放在自己的缓冲区中,并且要求发送方重传出错的那一帧。一旦收到重传来的帧后,就可以将存于缓冲区中的其余帧一并按正确的顺序递交给主机。 2.基本原理 窗口机制

课程设计报告-滑动窗口协议仿真

滁州学院 课程设计报告 课程名称:计算机网络 设计题目:滑动窗口协议仿真 系别:计算机与信息工程学院 专业:计算机科学与技术 组别:第五组 起止日期: 2011年11月24日~2011年12月7日指导教师:赵国柱 计算机与信息工程学院二○一一年制

课程设计任务书

一. 引言 二. 基本原理 2.1 窗口机制 2.2 1bit滑动窗口协议 2.3 后退N协议 2.4 选择重传协议 2.5 流量控制 三. 需求分析 3.1 课程设计题目 3.2 开发环境 3.3 运行环境 3.4 课程设计任务及要求 3.5 界面要求 3.6 网络接口要求 四. 详细设计 4.1 结构体的定义 4.2 发送方的主要函数 4.3 接受方的主要函数 五.源代码 5.1 发送方的主要代码 5.2 接收方的主要代码 六. 调试与操作说明 致谢 [参考文献] 课程设计的主要内容

1.引言 早期的网络通信中,通信双方不会考虑网络的拥挤情况直接发送数据。由于大家 不知道网络拥塞状况,一起发送数据,导致中间结点阻塞掉包,谁也发不了数据。在 数据传输过程中,我们总是希望数据传输的更快一些,但如果发送方把数据发送的过快, 接收方就可能来不及接收,这就造成数据的丢失。因此就有了滑动窗口机制来解决这些 问题。早期我们使用的是1bit滑动窗口协议,一次只发送一个帧,等收到ack确认 才发下一个帧,这样对信道的利用率太低了。因此提出了一种采用累积确认的连续ARQ 协议,接收方不必对收到的帧逐个发送ack确认,而是收到几个帧后,对按序到达的最后一 个帧发送ack确认。同1bit滑动窗口协议相比,大大减少了ack数量,并消除了延迟ack 对传输效率的影响。但是,这会产生一个新的问题,如果发送方发送了5个帧,而中间的第 3个帧丢失了。这时接收方只能对前2个帧发出确认。发送方无法知道后面三个帧的下落, 只好把后面的3个帧再重传一次,这就是回退N协议。为了解决这个问题,又提出了选择重 传协议。当接收方发现某帧出错后,继续接受后面送来的正确的帧,只是不交付它们, 存放在自己的缓冲区中,并且要求发送方重传出错的那一帧。一旦收到重传来的帧后, 就可以将存于缓冲区中的其余帧一并按正确的顺序递交给主机。 2.基本原理 2.1 窗口机制 滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。接受方为其窗口内的每一个序号保留了一个缓冲区。与每个缓冲区相关联的还有一位,用来指明该缓冲区是满的还是空的。 若从滑动窗口的观点来统一看待1比特滑动窗口、后退n及选择重传三种协议,它们的差别仅在于各自窗口尺寸的大小不同而已。1比特滑动窗口协议:发送窗口=1,接收窗口=1;后退N协议:发送窗口>1,接收窗口=1;选择重传协议:发送窗口>1,接收窗口>1。 2.2 1bit滑动窗口协议 当发送窗口和接收窗口的大小固定为1时,滑动窗口协议退化为停等协议(stop-and-wait)。该协议规定发送方每发送一帧后就要停下来,等待接收方已正确接收的确认(acknowledgement)返回后才能继续发送下一帧。由于接收方需要判断接收到的帧是新发的帧还是重新发送的帧,因此发送方要为每一个帧加一个序号。由于停等协议规定只有一帧完全发送成功后才能发送新的帧,因而只用一比特来编号就够了。其发送方和接收方运行的流程图如图所示。

滑动窗口协议分析与实现

滑动窗口协议分析与实现 目录 1 引言 (2) 1.1 滑动窗口协议概述 (2) 1.2 本次设计任务 (2) 2 滑动窗口协议介绍 (3) 2.1 滑动窗口协议工作原理 (3)

1 引言 1.1 滑动窗口协议概述 滑动窗口协议可能是计算机网络中最著名的算法,它是TCP使用的一种流量控制方法。滑动窗口协议也称为回退N步协议Go-Back-N(GBN)协议,它可以有三个不同的功能,第一个功能,即在不可靠链路上可靠地传输帧。(一般来说,该算法被用于在一个不可靠的网络上可靠地传输消息。)这是该算法的核心功能。 滑动窗口算法的第二个功能是用于保持帧的传输顺序。这在接收方比较容易实现,因为每个帧有一个序号,接收方要保证已经向上层协议传递了所有序号比当前帧小的帧,才向上传送该当前帧。即,接收方缓存了(即没有传送)错序的帧。 滑动窗口算法的第三个功能是,它有时支持流量控制(flowcontrol),它是一种接收方能够控制发送方使其降低速度的反馈机制。这种机制用于抑制发送方发送速度过快,即抑制传输比接收方所能处理的更多的数据。 滑动窗口协议,允许发送方传输多个分组而不需等待确认,但它也受限于在流水账中未确认的分组数不能超过最大允许数N。只有在接收窗口向前滑动,即接收方向发送方发送了确认反馈,同时发送方收到确认消息时,发送窗口才能向前滑动。 1.2 本次设计任务 本次的设计任务是根据滑动窗口协议的工作原理,在WebRTC的基础上,用C++语言编写一个滑动窗口协议的程序。 要求该程序实现滑动窗口协议的基本功能功能,如:发送帧被接收与否的判断,帧超时重发,帧缓存等。同时需要设计一个测试机制,以检测该程序的正确性、可靠性。

课程设计报告滑动窗口协议仿真

滁州学院 课程设计报告 课程名称: 计算机网络 第五组 起止日期:2011年n 月24 口~2011年12月7 n 指导教师: 设计题目: 滑动窗口协议仿贞 别: 计算机与信息工程学院 业: 计算机科学与技术 计算机与信息工程学院二O —一年制 别: 赵国柱

课程设计任务书 一.引言二-基本原理 窗口机制 Ibit滑动窗口协议后退N协议选择重传协议流量控制三.需求分析 课程设计题目开发环境

运行环境 课程设计任务及要求 界面要求 网络接口要求 0. 详细设计 结构体的定义 发送方的主要函数 接受方的主要函数 五. 源代码 发送方的主要代码 接收方的主要代码 调试与操作说明 致谢 [参考文献] 课程设计的主要内容 L引言 早期的网络通信中,通信双方不会考虑网络的拥挤情况直接发送数据。由于大家不知道网络拥塞状况,一起发送数据,导致中间结点阻塞掉包,谁也发不了数据。在数据传输过程中,我们总是希望数据传输的更快一些,但如果发送方把数据发送的过快,接收方就可能來不及接收,这就造成数据的丢失。因此就有了滑动窗口机制来解决这些问题。早期我们使用的是Ibit滑动窗口协议,一次只发送一个帧, 等收到ack确认才发下一个帧,这样对信道的利用率太低了。因此提出了一种采用累积确认的连续ARQ协议,接收方不必对收到的帧逐个发送 ack确认,而是收到儿个帧后,对按序到达的最后一个帧发送ack确认。 同Ibit滑动窗口协议相比,大大减少了 ack数量,并消除了延迟ack对传输效率的影响。但是,这会产生一个新的问题,如果发送方发送了 5个帧,而中间的第3个帧丢失了。这时接收方只能对前2个帧发出确认。发送方无法知道后面三个帧的下落,只好把后面的3个帧再重传一次,这就是回退N协议。为了解决这个问题,乂提出了

滑动窗口协议模拟程序的设计与实现

长沙理工大学 《网络协议编程》课程设计报告 梁碧莹 学院计算机与通信工程专业网络工程 班级网络08-02 学号200858080205 学生姓名梁碧莹指导教师王静 课程成绩完成日期2011年7 月 2 日

课程设计任务书 计算机与通信工程学院网络工程专业

课程设计成绩评定 学院计算机通信工程专业网络工程 班级网络08-02 班学号200858080205 学生姓名梁碧莹指导教师王静 课程成绩完成日期2011年7 月2 日指导教师对学生在课程设计中的评价 指导教师对课程设计的评定意见

滑动窗口协议模拟程序的设计与实现 学生:梁碧莹指导老师:王静 摘要:本文主要介绍如何根据滑动窗口协议的原理,在Visual C++的平台上设计一个滑动窗口协议模拟程序,并最终使该程序得以实现。本次程序设计分两部分:第一部分是发送方,第二部分是接收方。通过发送方和接收方之间的数据帧传输模拟,学习滑动窗口协议控制流量的原理和方法,以及滑动窗口协议的工作机制。 关键词:滑动窗口协议流量控制工作机制模拟程序 Design and Implementation of Sliding Window Protocol Procedures Student: Liang Biying Instructor: Wang Jing Abstract: This paper describes the principle of Sliding Window Protocol and how to design and implement a procedure about the Sliding Window Protocol. The program design in two parts, one is the sender, the other is the receiver. After all, studying the principle and method of how the Sliding Window Protocol control the flow, and how the Sliding Window Protocol works through the transmission of data between the sender and the receiver. Keywords: Sliding window protocol Flow control Working mechanism Simulation program

滑动窗口的仿真协议书范本

计算机网络课程设计书

计算机网络课程设计说明书 (封面) 学院名称:计算机与信息工程学院班级名称:网络工程一班 学生: 学号: 201321 题目:滑动窗口协议仿真指导教师 姓名:邵雪梅 起止日期: 2015.6.23-2015.6.29

第一部分:正文部分 一,选题背景 早期的网络通信中,通信双方不会考虑网络的拥挤情况直接发送数据。由于大家不知道网络拥塞状况,一起发送数据,导致中间结点阻塞掉包,谁也发不了数据。在数据传输过程中,我们总是希望数据传输的更快一些,但如果发送方把数据发送的过快,接收方就可能来不及接收,这就造成数据的丢失。因此就有了滑动窗口机制来解决这些问题。早期我们使用的是1bit滑动窗口协议,一次只发送一个帧,等收到ack确认才发下一个帧,这样对信道的利用率太低了。因此提出了一种采用累积确认的连续ARQ协议,接收方不必对收到的帧逐个发送ack确认,而是收到几个帧后,对按序到达的最后一个帧发送ack确认。 同1bit滑动窗口协议相比,大大减少了ack数量,并消除了延迟ack对传输效率的影响。但是,这会产生一个新的问题,如果发送方发送了5个帧,而中间的第3个帧丢失了。这时接收方只能对前2个帧发出确认。发送方无法知道后面三个帧的下落,只好把后面的3个帧再重传一次,这就是回退N协议。为了解决这个问题,又提出了选择重传协议。当接收方发现某帧出错后,继续接受后面送来的正确的帧,只是不交付它们,存放在自己的缓冲区中,并且要求发送方重传出错的那一帧。一旦收到重传来的帧后,就可以将存于缓冲区中的其余帧一并按正确的顺序递交给主机。本文主要介绍如何根据滑动窗口协议的原理,在Visual C++的平台上设计一个滑动窗口协议模拟程序,并最终使该程序得以实现。本次程序设计分两部分:第一部分是发送方,第二部分是接收方。通过发送方和接收方之间的数据帧传输模拟,学习滑动窗口协议控制流量的原理和方法,以及滑动窗口协议的工作机制。

课程设计报告滑动窗口协议仿真精编

课程设计报告滑动窗口 协议仿真精编 Document number:WTT-LKK-GBB-08921-EIGG-22986

滁州学院 课程设计报告 课程名称:计算机网络 设计题目:滑动窗口协议仿真 系别:计算机与信息工程学院 专业:计算机科学与技术 组别:第五组 起止日期: 2011年11月24日~2011年12月7日指导教师:赵国柱 计算机与信息工程学院二○一一年制

课程设计任务书 一. 引言 二. 基本原理 窗口机制 1bit滑动窗口协议 后退N协议 选择重传协议 流量控制

三. 需求分析 课程设计题目 开发环境 运行环境 课程设计任务及要求 界面要求 网络接口要求 四. 详细设计 结构体的定义 发送方的主要函数 接受方的主要函数五. 源代码 发送方的主要代码 接收方的主要代码六. 调试与操作说明 致谢 [参考文献]

课程设计的主要内容 1.引言 早期的网络通信中,通信双方不会考虑网络的拥挤情况直接发送数据。由于大家不知道网络拥塞状况,一起发送数据,导致中间结点阻塞掉包,谁也发不了数据。在数据传输过程中,我们总是希望数据传输的更快一些,但如果发送方把数据发送的过快,接收方就可能来不及接收,这就造成数据的丢失。因此就有了滑动窗口机制来解决这些问题。早期我们使用的是1bit滑动窗口协议,一次只发送一个帧,等收到ack确认才发下一个帧,这样对信道的利用率太低了。因此提出了一种采用累积确认的连续ARQ 协议,接收方不必对收到的帧逐个发送ack确认,而是收到几个帧后,对按序到达的最后一个帧发送ack确认。同1bit滑动窗口协议相比,大大减少了ack数量,并消除了延迟ack对传输效率的影响。但是,这会产生一个新的问题,如果发送方发送了5个帧,而中间的第3个帧丢失了。这时接收方只能对前2个帧发出确认。发送方无法知道后面三个帧的下落,只好把后面的3个帧再重传一次,这就是回退N协议。为了解决这个问题,又提出了选择重传协议。当接收方发现某帧出错后,继续接受后面送来的

数据链路层滑动窗口协议的设计和实现样本

数据链路层滑动窗口协议的设计和实现样本数据链路层滑动窗口协议的设计和实现本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 数据链路层滑动窗口协议的设计与实现实验报告 一、实验任务及内容利用所学数据链路层原理,设计一个滑动窗口协议并在仿真环境下编程实现有噪音信道环境下的可靠的双工通信。 信道模型为8000bps全双工卫星信道,信道传播时延270毫秒,信道误码率为10--55,信道提供字节流传输服务,网络层分组长度在240~256字节范围。 (1)实现有噪音信道环境下的无差错传输。 (2)运行程序并检查在信道没有误码和存在误码两种情况下的信道利用率。 (3)提高滑动窗口协议信道利用率,根据信道实际情况合理地为协议配置工作参数,包括滑动窗口的大小和重传定时器时限以及ACK搭载定时器的时限。 实验环境Windows7环境PC,机,Microsoft VisualC++集成化开发环境 二、协议设计协议的分层结构及层服务::包括物理层,数据链路层和网络层三层。

该实验主要设计数据链路层协议,为实现有噪声环境下高信道利用率传输,我们采用回本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 退n n帧(go backn)技术的协议。 发送方窗口大小为31;通过捎带确认来完成可靠的数据通信;出现信道误码导致收帧出错时,接受方丢弃所有后续帧,待定时器超时后发送方重发。 该层提供服务::从网络层接受要发送的数据包,将之分拆成数据帧;按一定的成帧方案完成分帧,加校验码,加ack等操作;进行适当的流量判断和拥塞控制;启动定时器将之传递给物理层。 数据帧经信道传送给接受方,接受方数据链路层执行与成帧相逆的操作;处理ack信息,终止定时器(或启动ack定时器,ack成帧传送);判断是否为欲接受数据,数据是否出错,提交给网络层。 退回N N步工作原理示意图::本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 实验所形成帧((成帧方案))::DATA Framen+=========+========+========+===============+======== +|KIND (1)|ACK (1)|SEQ

滑动窗口的仿真协议

计算机网络课程设计书 学 院 计算机与信息工程学院专业网络工程 课程名称计算机网络题目滑动窗口协议仿真完成期限自2015年6月23日至2015年6月29日共1周 内容及任务一、项目的目的 掌握滑动窗口协议的工作原理,并能够用所学计算机高级 语言进行编程模拟其运行过程;培养学生的动手实践和思考能力。 二,项目任务的主要内容和要求 (1)本次设计任务是根据滑动窗口协议的工作原理,在Visual C++ 6.0的平台上用C++语言编写一个基本TCP滑动窗口协议的模拟程序。 (2)要求该程序能够实现滑动窗口协议的发送和接收数据帧 功能,在此功能上体现滑动窗口协议的运作。 (3) 程序按照滑动窗口协议实现端对端的数据传送。包括协议的各种策略,如包丢失、停等应答、超时等都应有所仿真实现; (4) 显示数据传送过程中的各项具体数据。双方帧的个数变化,帧序号,发送和接受速度,暂停或重传提示等; 三、项目设计(研究)思路 (1) 查阅相关资料,理解滑动窗口协议的工作原理; (2) 设计滑动窗口协议实现端对端数据传送的功能流程图; (3) 编写代码实现滑动窗口协议工作的模拟程序,包括包丢失、停等应答、超时等; (4) 测试程序功能的实现情况。 四、具体成果形式和要求 (1)滑动窗口协议实现端对端数据传送的模拟程序。 (2)按照要求撰写课程设计报告并准备答辩。

进度安排 起止日期工作内容 2015.6.23-2015 .6.24 了解网络协议编程的基本知识; 2015.6.25-2015 .6.26 了解滑动窗口协议的工作机制; 2015.6.27-2015 .6.28 使用编程语言编写一个滑动窗口协议的模拟 程序,按要求实现程序。 2015.6.29最后汇总,调试,答辩 主要参考资料[1] 谢希仁. 计算机网络[M]. 4版. 北京:电子工业出版社, 2003. [2] 李仁发.何彦. 基于虚拟实验方法的滑动窗口协议分析[J]. 系统仿真学报. 2002. 8 (14) ; 1026 - 1063. [3] 李建中,张冬冬. 滑动窗口规模的动态调整算法[J]. 软件学报. 2004. 12 (15) : 1800 - 1814. [4] 王栩,李建中,王伟平. 基于滑动窗口的数据流压缩技术及连续查询处理方法[ J ]. 计算机研究与发展. 2004. 10 (41) : 1639- 1644. [5] 特南鲍姆. 计算机网络(第四版). 清华出版社 指导教师 意见 (签字):×年×月×日 系(教研 室)主任 意见 (签字):×年×月×日

窗口协议

ARQ与滑动窗口概念 滑动窗口协议,是TCP使用的一种流量控制方法。该协议允许发送方在停止并等待确认前可以连续发送多个分组。由于发送方不必每发一个分组就停下来等待确认,因此该协议可以加速数据的传输。 自动重传请求(Automatic Repeat-reQuest,ARQ)是OSI模型中数据链路层的错误纠正协议之一。它通过使用确认和超时这两个机制,在不可靠服务的基础上实现可靠的信息传输。如果发送方在发送后一段时间之内没有收到确认帧,它通常会重新发送。ARQ可能包括停止等待ARQ协议、回退ARQ和连续ARQ协议,错误检测(Error Detection)、正面确认(Positive Acknowledgment)、超时重传(Retransmission after Timeout)和负面确认及重传(Negative Acknowledgment and Retransmission)等机制。 他们的概念是差不多的只是作用于不同的网络层。数据链路层的滑动窗口是“个数固定”的。而TCP的滑动窗口是“个数可变”的,可以由接收端设置WIN字段来修改。 传统自动重传请求分成为三种,即停等式(stop-and-wait)ARQ,回退n帧(Go-back-n)ARQ,以及选择性重传(selective repeat)ARQ。后两种协议是滑动窗口技术与请求重发技术的结合,由于窗口尺寸开到足够大时,帧在线路上可以连续地流动,因此又称其为连续ARQ协议。三者的区别在于对于出错的数据报文的处理机制不同。三种ARQ协议中,复杂性递增,效率也递增。除了传统的ARQ,还有混合ARQ(Hybrid-ARQ)。 当发送窗口和接收窗口的大小都等于1时,就是停止等待协议。 当发送窗口大于1,接收窗口等于1时,就是回退N步协议。 当发送窗口和接收窗口的大小均大于1时,就是选择重发协议

计算机网络原理 一位滑动窗口协议

计算机网络原理一位滑动窗口协议 一位滑动窗口协议是指发送窗口和接收窗口尺寸都是1。也就是说发送端在未接收到确认前只能发1数据帧;接收方也只能接收落在当前窗口内的1数据帧,并给出确认数据帧。停-等协议就属于1位滑动窗口协议,但它只适用于数据单向传输,向反方向发送确认数据帧的情况。而1位滑动窗口协议支持数据的双向传输,即支持双工通信。 在实际的双工通信中,是在数据帧中增加一个字段,用来携带给对方的应答信息。这种将应答信息搭载在数据帧上发送给对方的应答方式称为捎带应答。采取捎带应答的全双工通信的工作过程,是由通信双方的某一方首先开始发送数据,它从网络层获得一个分组,将该分组封装成帧,通过物理层发送出去。接收方收到后检查是否有错和重复,如果有错或重复就丢弃;如果无错就交给网络层。然后查看有无数据帧要发送,如果有就将应答信息捎带在数据帧上发送出去,如果没有就发一个独立的确认帧。发送方收到应答数据帧后,检验对方发来的数据帧,如果无误上交给网络层,在确认自己发送的上一帧已经被妥收后,准备发送下一帧,并将对对方数据帧的应答信息搭载在上面,一起发送给对方。图4-4给出了一位滑动窗口协议的工作情况。 发 01A0收 01A0 收 01A0 发 00B0 发 10A1收 10A1 收 11B1 发 11B1 发 01A2收 01A2 收 00B2发 00B2 发 10A3收 10A3 图4-4 一位滑动窗口协议的工作情况 在正常情况下,通过检查所接收的数据帧的发送序号,判定是否是重复帧,如果是重复帧就丢弃,否则就接收下来;通过检查应答序号,可以判定上次所发的帧是否被正确接收,如果未得到应答,就要超时重发。

TCP滑动窗口协议

TCP 滑动窗口协议 详解 滑动窗口机制 (1).窗口机制 滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。下面举一个例子(假设发送窗口尺寸为2,接收窗口尺寸为1): 分析:①初始态,发送方没有帧发出,发送窗口前后沿相重合。接收方0号窗口打开,等待接收0号帧;②发送方打开0号窗口,表示已发出0帧但尚确认返回信息。此时接收窗口状态不变;③发送方打开0、1号窗口,表示0、1号帧均在等待确认之列。至此,发送方打开的窗口数已达规定限度,在未收到新的确认返回帧之前,发送方将暂停发送新的数据帧。接收窗口此时状态仍未变;④接收方已收到0号帧,0号窗口关闭,1号窗口打开,表示准备接收1号帧。此时发送窗口状态不变;⑤发送方收到接收方发来的0号帧确认返回信息,关闭0号窗口,表示从重发表中删除0号帧。此时接收窗口状态仍不变;⑥发送方继续发送2号帧,2号窗口打开,表示2号帧也纳入待确认之列。至此,发送方打开的窗口又已达规定限度,在未收到新的确认返回帧之前,发送方将暂停发送新的数据帧,此时接收窗口状态仍不变;⑦接收方已收到1号帧,1号窗口关闭,2号窗口打开,表示准备接收2号帧。此时发送窗口状态不变;⑧发送方收到接收方发来的1号帧收毕的确认信息,关闭1号窗口,表示从重发表中删除1号帧。此时接收窗口状态仍不变。 若从滑动窗口的观点来统一看待1比特滑动窗口、后退n及选择重传三种协议,它们的差别仅在于各自窗口尺寸的大小不同而已。1比特滑动窗口协议:发送窗口=1,接收窗口=1;后退n协议:发窗口>1,接收

滑动窗口协议模拟

实验8滑动窗口协议模拟 一、实验目的 1.模拟实现滑窗协议在数据链路层上的数据传输过程,加深对滑 窗协议的理解 2.掌握滑动窗口协议基本原理与基本算法; 二、要求: 1.掌握滑动窗口协议的概念、原理与基本算法; 2.实现“选择性重传策略或连续自动重传策略(后退N帧)”的滑 动窗口协议模拟程序; 3.了解传输层和链路层滑动窗口协议的区别与联系及TCP中滑动 窗口协议的实现原理。 三、实验原理 滑窗协议工作原理 由于停等协议要为每一个帧进行确认后才继续发送下一个帧,大大降低了信道利用率,因此又提出来回退N帧的滑窗协议。回退N帧协议中,发送方在发送完一个数据帧后,不停下来等待应答帧,而是连续发送若干个数据帧,即使在连续发送过程中收到了接收方发来的应答帧,也可以继续发送。由于减少了等待时间,必然提高通信的吞吐量和信道利用率。 回退N帧的滑窗协议(GO-DACK-N)基本原理是,当接收方检测出错的信息帧后,丢弃出错帧后的所有信息帧,而不管这些帧是否正确。待发送方收到对出错帧的否定应答(NAK)时,将重发从出错后的所有数据帧;若应答帧出错,

则超时重发。因此,发送方在每发完一个数据帧时都要设置超时计时器。只要在所设置的计时器超时而仍未收到确认帧,就要重发相应的数据帧,若等不到1号帧的确认应答而重发1号数据帧时,虽然发送方已经发送完3号帧,但仍必须将1号帧及其以后的各帧全部进行重传。因此,后退N帧协议一方面因连续发送数据帧而提高了效率,但另一方面,在重传时又必须把原来已正确传送过的数据帧进行重传,这种做法又使传送率降低。 四、实验要求 1.Windows XP环境下运行,程序在1~2台PC上运行。 2.具体实现的协议可以采用回退N帧技术或者选择性重发技术的协议。 3.采用.NET平台中的C#、C++或其他编程语言实现。 五、实验内容 模拟滑窗协议的实现过程为; (1)程序客户端线程发送连接请求。 (2) 服务器连接并返回连接信息。 (3) 客户端发送数据帧(窗口大小自行设定)。 (4) 服务器对每一个收到数据帧都返回收到信息或者返回数据接收超时信息。 (5) 客户端根据返回信息确定是否重传数据还是选择重传数据。 【实验过程】(实验步骤、记录、数据、分析) 客户端的主程序流程图:

计算机网络滑动窗口协议

《计算机通信原理》课程项目 实施报告 题目(3):滑动窗口协议的模拟 组号: 任课教师: 组长: 成员: 20% 成员: 20% 成员: 20% 成员: 20% 联系方式:

目录 一、项目要求 (3) 二、项目成果 (3) 三、程序原理 (3) 1、滑动窗口协议 (3) A、窗口机制 (3) B、1比特滑动窗口协议 (5) C、后退停等协议 (6) D、选择重传协议 (7) 2、用户数据报协议UDP (7) 四、程序设计说明 (8) 五、主要数据结构说明及主要函数 (8) 六、收获建议 (17)

一、项目要求 本课题通过设计软件,实现对滑动窗口协议的模拟. 设计要求: 1. Windows 环境下运行,程序应在1-2台PC上运行; 2. 演示在两台计算机间传输文件。允许在同一台机器中用两个独立线程来模拟; 3. 功能: 1)由一台PC(线程)向另一台PC(线程)发送数据包,界面应显示出双方帧个数变化,帧序号,发送和接受速度,暂停或重传提示等,界面中必须动态显示数据帧的发送情况和接受情况,包括在相应窗口详细显示相应的ACK和其他收发数据帧后发出的消息,以表明模拟协议的正确运作过程。 2)接收方及发送方应具有按序收发帧的能力; 3)接受方应有固定大小的滑动窗口,并对收到信息缓存。当发送方速度过快或帧丢失(超时),接受方应发送消息,要求暂停或重传; 4)发送方发送速度应可以调节,并可以暂停或重发; 5)发送方重传时可仅重传帧(丢失帧); 4. 以上几个功能应可视,要求有简单界面; 二、项目成果 三、程序原理 1、滑动窗口协议 A、窗口机制

滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧 以发送窗口尺寸为2,接收窗口尺寸为1 分析: ①初始态,发送方没有帧发出,发送窗口前后沿相重合。接收方0号窗口打开,等待接收0号帧; ②发送方打开0号窗口,表示已发出0帧但尚确认返回信息。此时接收窗口状态不变; ③发送方打开0、1号窗口,表示0、1号帧均在等待确认之列。至此,发送方打开的窗口数已达规定限度,在未收到新的确认返回帧之前,发送方将暂停发送新的数据帧。接收窗口此时状态仍未变; ④接收方已收到0号帧,0号窗口关闭,1号窗口打开,表示准备接收1号帧。此时发送窗口状态不变;

滑动窗口协议报告

滑动窗口协议设计报告 2010 级计科一班2010117214 张晓宇

滑动窗口协议设计 1、引言 随着网络的不断壮大,用户数量、信息量的需求不断增加,网络负荷越来越重。此时,我们迫切需要一种机制来控制网络的流量,减少网络拥堵的几率,提高传输的效率。因此,一种名为滑动窗口的协议应运而生。 滑动窗口协议,是TCP使用的一种流量控制方法。该协议允许发送方在停止并等待确认前可以连续发送多个分组。由于发送方不必每发一个分组就停下来等待确认,因此该协议可以加速数据的传输。经测试证明,该协议还能有效地解决TCP的高协议处理开销和UDP的低可靠性之间的矛盾。 2、实验目的 基本原理2.1 窗口机制滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。接受方为其窗口内的每一个序号保留了一个缓冲区。与每个缓冲区相关联的还有一位,用来指明该缓冲区是满的还是空的。 3、实验原理

TCP滑动窗口用来暂存两台计算机问要传送的数据分组。每台运行TCP协议的计算机有两个滑动窗口:一个用于数据发送,另一个用于数据接收。发送端待发数据分组在缓冲区排队等待送出。被滑动窗口框入的分组,是可以在未收到接收确认的情况下最多送出的部分。滑动窗口左端标志X的分组,是已经被接收端确认收到的分组。随着新的确认到来,窗口不断向右滑动 4、实验代码 #include #include #include "winsock.h" #pragma comment(lib,"ws2_32.lib") using namespace std ; int main() { ::WSADATA wsa ; ::WSAStartup(MAKEWORD(1,1),&wsa) ; SOCKET s=::socket(AF_INET,SOCK_STREAM,0) ; SOCKADDR_IN addr ; cout<<"请输入要连接的IP正确地址:"; char ipaddr[100]; ZeroMemory(ipaddr,sizeof(ipaddr)/sizeof(char)); cin.get(ipaddr,30); addr.sin_addr.S_un.S_addr=inet_addr(ipaddr); //将服务器地址转换为网络字节序的ULONG类型 addr.sin_family=AF_INET;

滑动窗口协议实验报告

滑动窗口协议实验报告 篇一:实验二滑动窗口协议实验报告2 <滑动窗口协议的模拟> 项目设计报告 作者:完成日期: 签收人:签收日期: 1 需求分析 实验目的:加深对滑动窗口协议的理解 实验任务:实现对于滑动窗口协议的模拟 实验环境:PC机 操作系统:Windows XP 开发环境:Microsoft Visual C++ ,可以使用MFC类库 问题重述 界面要求: 项目要求的所有功能应可视,要有

简单的界面。 由一台PC(或线程)向另一台PC (或线程)发送数据包时,界面应显示出双方帧个数的变化,帧序号,发送和接受速度,暂停或重传提示等,界面中必须动态显示数据帧的发送和接受情况,包括在相应的窗口详细显示相应的ACK和其他收发数据帧后发出的消息,以表明模拟协议的正确运作过程。 在各种情况下,接受方和发送方窗口应实时显示帧的发送和接受情况,包括序号,时间戳,内容等。以及窗口的填充和清空情况。 网络接口要求: 两台机器或是一台机器中两个独立的线程模拟发送方与接受方,接收数据的端口初始应为监听状态。 发送方向接受方发起连接,成功后开始发送数据。 接受方要求: 接受方应由固定大小的滑动窗口,并对收到信息缓存。当发送方速度过快

或帧丢失(超时),接受方应发送消息,要求暂停或是重传(停---等协议)。 接受方要求按序向网络层提交收到的帧。 发送方要求: 发送方发送速度可以调节,并可以暂停或是重发。 发送方重传时可仅重传需要的帧。 可指定滑动窗口数目和要发送的帧的总数,停等的超时时间间隔以及发送类型(正常发送,错序发送,以 及缺帧,丢帧的现象),发送速率等参数。 2 概要设计 原理概述 发送方和接受方都维持了一个窗口,窗口内部包含了那些可以接受的序列号。 发送方的窗口大小从0开始,以后可以增大到某一个预设的最大值。由于发送方可能在将来的某个时刻重传未被确认的帧,所以它必须把已经送出去的

实验一 滑动窗口协议实验

实验一滑动窗口协议实验 ◆实验目的: 在NetRiver实验系统中,用C语言实现滑动窗口协议中的1比特滑动窗口协议和后退N帧协议,理解滑动窗口协议 ◆实验原理和说明: (1).窗口机制 滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。下面举一个例子(假设发送窗口尺寸为2,接收窗口尺寸为1): 分析:①初始态,发送方没有帧发出,发送窗口前后沿相重合。接收方0号窗口打开,等待接收0号帧;②发送方打开0号窗口,表示已发出0帧但尚确认返回信息。此时接收窗口状态不变;③发送方打开0、1号窗口,表示0、1号帧均在等待确认之列。至此,发送方打开的窗口数已达规定限度,在未收到新的确认返回帧之前,发送方将暂停发送新的数据帧。接收窗口此时状态仍未变;④接收方已收到0号帧,0号窗口关闭,1号窗口打开,表示准备接收1号帧。此时发送窗口状态不变;⑤发送方收到接收方发来的0号帧确认返回信息,关闭0号窗口,表示从重发表中删除0号帧。此时接收窗口状态仍不变;⑥发送方继续发送2号帧,2号窗口打开,表示2号帧也纳入待确认之列。至此,发送方打开的窗口又已达规定限度,在未收到新的确认返回帧之前,发送方将暂停发送新的数据帧,此时接收窗口状态仍不变;⑦接收方已收到1号帧,1号窗口关闭,2号窗口打开,表示准备接收2号帧。此时发送窗口状态不变;⑧发送方收到接收方发来的1号帧收毕的确认信息,关闭1号窗口,表示从重发表中删除1号帧。此时接收窗口状态仍不变。 若从滑动窗口的观点来统一看待1比特滑动窗口、后退n及选择重传三种协议,它们的差别仅在于各自窗口尺寸的大小不同而已。1比特滑动窗口协议:发送窗口=1,接收窗口=1;后退n协议:发窗口>1,接收窗口>1;选择重传协议:发送窗口>1,接收窗口>1。 (2).1比特滑动窗口协议

滑动窗口协议模拟程序的设计与实现

理工大学 《网络协议编程》课程设计报告 梁碧莹 学院计算机与通信工程专业网络工程 班级网络08-02 学号200858080205 学生梁碧莹指导教师王静

课程成绩完成日期2011年7 月2 日 课程设计任务书 计算机与通信工程学院网络工程专业

课程设计成绩评定 学院计算机通信工程专业网络工程 班级网络08-02 班学号200858080205 学生梁碧莹指导教师王静 课程成绩完成日期2011年7 月2 日指导教师对学生在课程设计中的评价

指导教师对课程设计的评定意见 滑动窗口协议模拟程序的设计与实现 学生:梁碧莹指导老师:王静 摘要:本文主要介绍如何根据滑动窗口协议的原理,在Visual C++的平台上设计一个滑动窗口协议模拟程序,并最终使该程序得以实现。本次程序设计分两部分:第一部分是发送方,第二部分是接收方。通过发送方和接收方之间的数据帧传输模拟,学习滑动窗口协议控制流量的原理和方法,以及滑动窗口协议的工作机制。

关键词:滑动窗口协议流量控制工作机制模拟程序 Design and Implementation of Sliding Window Protocol Procedures Student: Liang Biying Instructor: Wang Jing Abstract: This paper describes the principle of Sliding Window Protocol and how to design and implement a procedure about the Sliding Window Protocol. The program design in two parts, one is the sender,the other is the receiver. After all, studying the principle and method of how the Sliding Window Protocol control the flow, and how the Sliding Window Protocol works through the transmission of data between the sender and the receiver. Keywords: Sliding window protocol Flow control Working mechanism Simulation program

课程设计报告-滑动窗口协议仿真

滁州学院 课程设计报告课程名称:计算机网络 设计题目:滑动窗口协议仿真 系别:计算机与信息工程学院 专业:计算机科学与技术 组别:第五组 起止日期: 2011年11月24日~2011年12月7日指导教师:赵国柱 计算机与信息工程学院二○一一年制

课程设计任务书 一. 引言 二. 基本原理 窗口机制 1bit滑动窗口协议 后退N协议 选择重传协议 流量控制 三. 需求分析 课程设计题目 开发环境 运行环境 课程设计任务及要求 界面要求 网络接口要求 四. 详细设计 结构体的定义 发送方的主要函数

接受方的主要函数 五.源代码 发送方的主要代码 接收方的主要代码 六. 调试与操作说明 致谢 [参考文献] 课程设计的主要内容 1.引言 早期的网络通信中,通信双方不会考虑网络的拥挤情况直接发送数据。由于大家 不知道网络拥塞状况,一起发送数据,导致中间结点阻塞掉包,谁也发不了数据。在 数据传输过程中,我们总是希望数据传输的更快一些,但如果发送方把数据发送的过快, 接收方就可能来不及接收,这就造成数据的丢失。因此就有了滑动窗口机制来解决这些 问题。早期我们使用的是1bit滑动窗口协议,一次只发送一个帧,等收到ack确认 才发下一个帧,这样对信道的利用率太低了。因此提出了一种采用累积确认的连续ARQ 协议,接收方不必对收到的帧逐个发送ack确认,而是收到几个帧后,对按序到达的最后一 个帧发送ack确认。同1bit滑动窗口协议相比,大大减少了ack数量,并消除了延迟ack 对传输效率的影响。但是,这会产生一个新的问题,如果发送方发送了5个帧,而中间的第 3个帧丢失了。这时接收方只能对前2个帧发出确认。发送方无法知道后面三个帧的下落, 只好把后面的3个帧再重传一次,这就是回退N协议。为了解决这个问题,又提出了选择重 传协议。当接收方发现某帧出错后,继续接受后面送来的正确的帧,只是不交付它们, 存放在自己的缓冲区中,并且要求发送方重传出错的那一帧。一旦收到重传来的帧后, 就可以将存于缓冲区中的其余帧一并按正确的顺序递交给主机。 2.基本原理 窗口机制 滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。接受方为其窗口内的每一个序号保留了一个缓冲区。与每个缓冲区相关联的还有一位,用来指明该缓冲区是满的还是空的。 若从滑动窗口的观点来统一看待1比特滑动窗口、后退n及选择重传三种协议,它们的差别仅在于各自窗口尺寸的大小不同而已。1比特滑动窗口协议:发送窗口=1,接收窗口=1;后退N协议:发送窗口>1,接收窗口=1;选择重传协议:发送窗口>1,接收窗口>1。 1bit滑动窗口协议

相关主题
文本预览
相关文档 最新文档