滑动窗口实验

滑动窗口实验
滑动窗口实验

计算机通信网络实验

滑动窗口实验

学院:

班级:

学号:

姓名:

2012年11月14日

一、实验目的

实现一个滑动窗口协议的数据传送部分,目的在于使学生更好地理解基本滑动窗口协议的基本工作原理,掌握计算机网络协议的基本实现技术。

二、原理简介

(1)窗口机制

滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。

发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。

(2)1比特滑动窗口协议

当发送窗口和接收窗口的大小固定为1时,滑动窗口协议退化为停等协议(stop-and-wait)。该协议规定发送方每发送一帧后就要停下来,等待接收方已正确接收的确认(acknowledgement)返回后才能继续发送下一帧。由于接收方需要判断接收到的帧是新发的帧还是重新发送的帧,因此发送方要为每一个帧加一个序号。由于停等协议规定只有一帧完全发送成功后才能发送新的帧,因而只用一比特来编号就够了。

(3)后退n协议

由于停等协议要为每一个帧进行确认后才继续发送下一帧,大大降低了信道利用率,因此又提出了后退n协议。后退n协议中,发送方在发完一个数据帧后,不停下来等待应答帧,而是连续发送若干个数据帧,即使在连续发送过程中收到了接收方发来的应答帧,也可以继续发送,且发送方在每发送完一个数据帧时都要设置超时定时器,只要在所设置的超时时间内仍收到确认帧,就要重发相应的数据帧。如:当发送方发送了N个帧后,若发现该N帧的前一个帧在计时器超时后仍未返回其确认信息,则该帧被判为出错或丢失,此时发送方就不得不重新发送出错帧及其后的N帧。

三、实验步骤

1.编写滑动窗口协议的实现程序;

2.在模拟实现,调试并运行自己编写的协议实现程序;

3.了解协议的工作轨迹,如出现异常情况,在实验报告中写出原因分析。

四、实验过程

1、程序功能及设计思路

功能概述:

用客户端/服务器模式代表A站、B站。先由客户端输入服务器IP地址,然后客户端和服务器之间建立连接。在服务器中可以自行设置发送窗口的大小(如果需要实现的是停等式协议,那么就将发送窗口设为1),设置完后,服务器开始向客户端根据滑动窗口(停等式)的协议规定发送数据帧,同时启动计时器,客户端收到数据帧后马上向服务器发送确认帧,服务器如果没有及时收到客户端的确认帧,就要返回到出错的地方进行重发。

实现滑动窗口协议的算法:

发送端:

1、socket初始化,绑定端口,监听,接受连接;

2、设置发送窗口大小winsize;

3、启动定时器,设置时间为0.2s*winsize;

4、组帧并发送数据,即设置序号SN、数据data、长度msglen,之后发送一个窗口中的帧,每发送一个数据SN++;若发送完毕,则执行第6步;

5、接收确认帧,每收到一个正确的确认帧,则改变滑动窗口上下限,若正确接收所有确认帧,则关闭定时器,返回第3步;若接收超时或有确认帧丢失,则SN=right_number,返回第3步;

6、关闭socket,重新建立新的进程,等待下一个连接,返回第2步。

接收端:

1、socket初始化,连接服务器;

2、接收数据帧,将data存入缓存recvBuf,RN=SN+1;

3、发送确认帧,若接收完毕,则关闭socket,否则返回第二步。

实现停等式协议的算法:

和上述滑动窗口协议的算法类似,只需在发送端的第二步中将发送窗口大小winsize设置为1即可。

2、C语言程序代码:

客户端Client:

//*********************** receiver.c ***************************** #pragma comment(lib, "ws2_32.lib") //WINSOCK API连接库文件

#include //WINSOCK API的头文件,需要包含在项目中

#include

#include

int err;

SOCKET sockClient; //用于客户端的Socket

SOCKADDR_IN addrSrv; //服务端地址

SOCKADDR_IN addrClient; //客户端地址

char serverip[20]; //服务端IP

// int i=0; //test

int length = sizeof(struct sockaddr);

int RN=0; //接收序号

char recvBuf[10][100]; //发送帧测试内容,10条

//---------------------------------------------------------------

struct dataFrame //数据帧

{

int SN; //发送序号

char data[100];

int msglen; //字符长度,采用长度计数的组帧技术

};

struct dataFrame dframe;

//************************ 初始化****************************** void initialization()

{

WORD wVersionRequested;

WSADATA wsaData;

int err;

wVersionRequested = MAKEWORD( 1, 1 ); //WinSocket1.1版本

err = WSAStartup( wVersionRequested, &wsaData );

//wsaData用来存储系统传回的关于WinSocket的资料

if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 ){

WSACleanup( );

}

return;

}

//***************** 连接服务器***********************

void connecting()

{

printf("input server IP:");

scanf("%s",serverip); //输入服务器ip

addrSrv.sin_addr.S_un.S_addr=inet_addr(serverip); //设置服务器地址

addrSrv.sin_family=AF_INET;

addrSrv.sin_port=htons(6000); // 设置端口号

err=connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//连接服务器

}

//************************ 接收数据帧******************************

void receiveFrame()

{

recv(sockClient,(char*)&dframe,sizeof(dframe),0); //接受数据

strcpy(recvBuf[dframe.SN],dframe.data);

printf("----------接收第%d号帧-------------\n",dframe.SN);

RN=dframe.SN+1;

//if(RN==2)Sleep(600); //用于测试

//if(RN==2 && i==0){i++;return;} //用于测试

send(sockClient,(char*)&RN,sizeof(RN),0); //发送希望接收到的数据编号

}

//************************main函数******************************** void main()

{

int i;

initialization(); //初始化阶段,若返回值err=0,则表示初始化成功

if(err!=0){

printf("Intialization failed.\n");

return;

}

sockClient=socket(AF_INET,SOCK_STREAM,0); //建立socket,SOCK_STREAM为遵从TCP/IP协议的socket

if(sockClient==-1){

printf("Building a socket failed.\n");

return;

}

connecting(); //和发送端建立连接

if(err!=0) //若返回值err=0,则表示建立连接成功

{

printf("connecting failed.\n");

return;

}

else

{

printf("-------got connection from server.-------\n");

}

while (1) //循环接受数据

{

receiveFrame();//接收数据

if(RN==10) //判断是否已接收完,本次测试一共为10帧数据帧

{

closesocket(sockClient); //关闭连接

printf("-------close the socket.-------\n");

break;

}

}

printf("\n接收到的数据如下:\n");

for(i=0;i<10;i++) //将接收的数据打印出来

{

printf("%s\n",recvBuf[i]);

}

while(1);

WSACleanup();

}

//********************** end of program ************************

服务器Server:

//*********************** server.c ***************************** #pragma comment(lib, "ws2_32.lib") //WINSOCK API连接库文件

#include //WINSOCK API的头文件,需要包含在项目中

#include

#include

#include

#include

#pragma comment(lib,"Winmm.lib")

int err;

SOCKET sock; //用于服务器监听的Socket

SOCKADDR_IN addrSrv; //服务端地址

SOCKADDR_IN addrClient; //客户端地址

int winsize; //滑动窗口大小

int min,max;

int length = sizeof(struct sockaddr);

int RN; //接收序号

int right_number=0; //已正确发送数据帧的计数器

char sendBuf[10][100]={

"Whether 60 or 16,",

"there is in every human being’s heart the lure of wonder,",

"the unfailing childlike appetite of what’s next and the joy of the game of living.", "so long as it receives messages of beauty, hope, cheer, courage",

"and power from men and from the Infinite, so long are you young.",

"When the aerials are down,",

"and your spirit is covered with snows of cynicism",

"and the ice of pessimism, then you are grown old, even at 20,",

"but as long as your aerials are up, to catch waves of optimism,",

"there is hope you may die young at 80."}; //发送帧测试内容,10条

//---------------------------------------------------------------

struct dataFrame //数据帧

{

int SN; //发送序号

char data[100];

int msglen; //字符长度,采用长度计数的组帧技术

};

struct dataFrame dframe;

//************************ 初始化****************************** void initialization()

{

WORD wVersionRequested;

WSADATA wsaData;

int err;

wVersionRequested = MAKEWORD( 1, 1 ); //WinSocket1.1版本

err = WSAStartup( wVersionRequested, &wsaData );

//wsaData用来存储系统传回的关于WinSocket的资料

if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 ){ WSACleanup( );

}

return;

}

//************************ 绑定端口****************************** void bindport()

{

addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);

//设置服务器地址,INADDR_ANY表示使用自己的IP地址

addrSrv.sin_family=AF_INET;

addrSrv.sin_port=htons(6000); //设定端口为6000

err=bind(sock,(LPSOCKADDR)&addrSrv,sizeof(SOCKADDR));

return;

}

//************************ 重发数据帧***************************** int resend(){

err=10;

dframe.SN=right_number;

printf("超时,未收到第%d的确认帧,现重新发送...\n",right_number); return 0;

}

//************************ 发送数据帧***************************** int SendFrame(SOCKET*socketConn)

{

UINT wTimerRes=200*winsize; //定义时间间隔为0.5s

UINT wAccuracy=0; //定义分辨率

UINT TimerID;

dframe.SN=0;

while(1)

{

TimerID=timeSetEvent(wTimerRes,

wAccuracy,(LPTIMECALLBACK)resend,(DWORD)(1), TIME_ONESHOT);

while(dframe.SN>=min && dframe.SN<=max && dframe.SN<10)

{

strcpy(dframe.data,sendBuf[dframe.SN]);

dframe.msglen=strlen(sendBuf[dframe.SN]);

send(*socketConn,(char*)&dframe,sizeof(struct dataFrame),0);

//发送消息到客户端

dframe.SN++;

}

while(1) //接受收端的确认帧

{

recv(*socketConn,(char*)&RN,sizeof(RN),0);

if(err==10){

timeKillEvent(TimerID);

err=0;

break;

}

if(right_number==RN-1)

{

printf("收到第%d帧的确认帧...\n",RN-1);

min=RN; //改变滑动窗口上下限

max=min+winsize-1;

right_number++;

}else if(right_number

{

printf("第%d帧丢失,现重发...\n",right_number);

timeKillEvent(TimerID);

dframe.SN=right_number;

break;

}

if(right_number==dframe.SN)

{

timeKillEvent(TimerID);

break;

}

}

if(RN==10) return 0;

}

}

//线程函数用于处理一个客户端请求

DWORD WINAPI ConnectClient(LPVOID socketConn)

{

printf("input the size of slide window:");

scanf("%d",&winsize);

min=0;

max=winsize-1;

SendFrame(socketConn);

printf("--------all message is delivered successful.---------\n\n");

closesocket(*((SOCKET*)socketConn)); //关闭Socket

printf("--------disconnect with %s.---------\n\n",inet_ntoa(addrClient.sin_addr)); return 0;

}

void main()

{

HANDLE hThread;//线程句柄

DWORD threadId;

initialization(); //初始化阶段,若返回值err=0,则表示初始化成功

if(err!=0){

printf("Intialization failed.\n");

return;

}

sock=socket(AF_INET,SOCK_STREAM,0);

//建立socket,SOCK_STREAM为遵从TCP/IP协议的socket

if(sock==-1){

printf("Building a socket failed.\n");

return;

}

bindport(); //绑定端口

if(err!=0){

printf("Binding a socket failed.\n");

return;

}

if(listen(sock,5)==-1)

//使服务器端的Socket进入监听状态,并设定可以建立的最大连接数为5 {

printf("listening failed.\n");

return;

}

printf("--------------------server waitting.--------------------\n");

while (1) //循环等待请求

{ SOCKET *socketConn =(SOCKET *)malloc(sizeof(SOCKET));

//用于与客户端连接的socket

*socketConn = accept(sock,(struct sockaddr*)&addrClient,&length);

printf("connecting

with %s\n-------------------------------\n",inet_ntoa(addrClient.sin_addr));

//开辟线程处理一个客户端请求

hThread =

CreateThread(NULL,0,ConnectClient,(LPVOID)socketConn,0,&threadId);

}

closesocket(sock);

WSACleanup();

system("pause");

}

3、实验结果

1)停等式协议的测试

在没有传输错误情况下,设置发送窗口为1,接收窗口也为1,在dos界面显示传递的整个过程,其中Server的IP为: 222.25.162.196 ,Client的IP为:

222.25.162.5。图1为服务器端显示的界面,图2为客户端显示的界面。

图1

图2

2)滑动窗口协议的测试

正常通信:

在没有传输错误情况下,设置发送窗口为3,接收窗口也为1,在dos界面显示传递的整个过程,Server: 222.25.162.196,Client:222.25.162.5,图3为服务器端显示的界面,图4为客户端显示的界面。

图3

图4

出错测试1:

在客户端的确认帧发送出现延迟的情况下,在dos界面显示传递的整个过程,Server: 222.25.162.196,Client:222.25.162.196,图5为服务器端显示的界面,图6为客户端显示的界面。

图5

图6

出错测试2:

在客户端的确认帧发送出现丢失的情况下,在dos界面显示传递的整个过程,Server: 222.25.162.196,Client:222.25.162.196,图7为服务器端显示的界面,图8为客户端显示的界面。

图7

图8

五、实验心得

通过本次实验,对数据链路层中的滑动窗口协议和停等式协议有了更深的了解,尤其是滑动窗口协议,当时学习理论知识的时候觉得不是很复杂,但是发现真正编程实现起来却不是那么简单的。

在本次实验中,由于能力和时间有限,我们只是实现了滑动窗口协议的部分功能,。在测试中,我们只是侧似乎了接收端发送的确认帧出现时延或者丢失两种情况,这个程序都能较正确的处理。

但是实际上会出现的情况远不止这两种,比如说可能会出现发送端发送数据帧到达的顺序出错,发送的数据帧出现丢失等各种其他情况,我们都没有进行测试,也不确定程序能不能正确处理这些情况,这是本次实验不足的地方。

但总的来说,我在这次实验中还是学到了不少知识,有理论方面的,还有编程方面的,这对我以后的学习会有不少的帮助。

实验三 动压滑动轴承实验

实验三动压滑动轴承实验 一、实验目的 1.验证动压滑动轴承油膜压力分布规律,了解影响油膜压力分布规律的因素,并根据油膜压力分布曲线确定端泄影响系数K b; 2.测定动压滑动轴承的摩擦特征曲线,并考察影响摩擦系数的因素。 二、实验设备及仪器 1.HZS-1型动压滑动轴承试验台 图1 HZS-1型动压滑动轴承实验台 图1为试验台总体布置,图中件号1为试验的轴承箱,通过联轴器与变速箱7相联,6为液压箱,装于底座9的内部,12为调速电动机,通过三角带与变速箱输入轴相联,8为调速电机控制旋钮,5为加载油腔压力表,由減压阀4控制油腔压力,2为轴承供油压力表,由减压阀控制其压力,油泵电机开关为10,主电机开关为11,试验台的总开关在其正面下方。 图2为试验轴承箱,件号31为主轴,由一对D级滚动轴承支承,32为试验轴承,空套在主轴上,轴承内径d=60mm,有效宽度=60mm。在轴承中间横剖面上,沿周向开7个测压孔,在120°范围内的均匀分布,测压表21~27通过管路分别与测压孔相联。距轴承中间剖面L/4(15mm)处,轴承上端有一个测压孔,表头28与其相联,件号33为加载盖板,固定在箱体上,加载油腔在水平面上的投影面积为60cm2在轴承外圆左侧装有测杆35,环34装在测杆上以供测量摩擦力矩用,环34与轴承中心的距离为150mm,轴承外圆上装有两个平衡锤36,用以在轴承安装前做静平衡。

图2 实验轴承箱 箱体左侧装有一个重锤式拉力计如图3所示,测量摩擦力矩时,将拉力计上的吊钩与环34联接,即可测得摩擦力矩。测杆通过环34作用在拉力计上的力F,由重锤予以平衡,其 数值可由 α sin 1 R WL F= 求得。式中R为圆盘半径,W为重锤之重量,L1为重锤重心到轴 心之距离,α为圆盘之转角,圆盘转角α通过齿轮放大,可使表头指针转角放大10倍,表头刻度即为F的实际值,单位为克。 JZT型调速电动机的可靠调速范围为120~1200转/分,为了扩大调速范围,试验台传动系统中有一个两级变速箱,当手柄向右倾斜,主轴与电机转速相同;当手柄向右倾斜,主轴为电机转速的1/6。因此主轴的可靠调速范围为20~1200转/分。 图3 重锤式拉力计工作原理图 2.测速仪表及温度计 三、实验步骤 1. 测定动压滑动轴承的油膜压力分布,确定轴承端泄影响系数K b

滑动窗口协议分析与实现

滑动窗口协议分析与实现 目录 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++语言编写一个滑动窗口协议的程序。 要求该程序实现滑动窗口协议的基本功能功能,如:发送帧被接收与否的判断,帧超时重发,帧缓存等。同时需要设计一个测试机制,以检测该程序的正确性、可靠性。

数字图像处理实验报告

数字图像处理实验报告

实验一 数字图像的基本操作和灰度变换 一、 实验目的 1. 了解数字图像的基本数据结构 2. 熟悉Matlab 中数字图像处理的基本函数和基本使用方法 3. 掌握图像灰度变换的基本理论和实现方法 4. 掌握直方图均衡化增强的基本理论和实现方法 二、实验原理 1. 图像灰度的线性变换 灰度的线性变换可以突出图像中的重要信息。通常情况下,处理前后的图像灰度级是相同的,即处理前后的图像灰度级都为[0,255]。那么,从原理上讲,我们就只能通过抑制非重要信息的对比度来腾出空间给重要信息进行对比度展宽。 设原图像的灰度为),(j i f ,处理后的图像的灰度为),(j i g ,对比度线性展宽的原理示意图如图1.1所示。假设原图像中我们关心的景物的灰度分布在[a f , b f ]区间内,处理后的图像中,我们关心的景物的灰度分布在[a g ,b g ]区间内。在这里)(a b g g g -=?()b a f f f >?=-,也就是说我们所关心的景物的灰度级得到了展宽。 根据图中所示的映射关系中分段直线的斜率我们可以得出线性对比度展 b g a g a b )j 图1.1 对比度线性变换关系

宽的计算公式: ),(j i f α, a f j i f <≤),(0 =),(j i g a a g f j i f b +-)),((, b a f j i f f <≤).,( (1-1) b b g f j i f c +-)),((, 255),(<≤j i f f b (m i ,3,2,1 =;n j ,3,2,1 =) 其中,a a f g a = ,a b a b f f g g b --=,b b f g c --=255255,图像的大小为m ×n 。 2. 直方图均衡化 直方图均衡化是将原始图像通过某种变换,得到一幅灰度直方图为均匀分布的新图像的方法。 离散图像均衡化处理可通过变换函数: 来实现。 三、实验步骤 1.图像灰度线性变换的实现 (1)读入一幅灰度图像test1.tif ,显示其灰度直方图。 新建M 文件,Untitled1.m ,编辑代码如下。 得到读入图像test1和它的灰度直方图。

gobackn协议实验报告

一个数据帧如图所示: 其中有效数据和校验码可能含有转义字符。 (3) 帧中各个字段的定义和编码,计算CRC校验和的多项式定义 帧的定义编码:帧中的第一比特为开头FLAG,第二比特是帧的类型,共定义了{data,ack,nak} frame_kind三种类型,用枚举常量表述,第三比特是顺序编码,用于确定到达帧的顺序,第四比特是ACK捎带确认讯息,记录了当前已收到帧的确认情况,这是数据帧的头部。若为数据帧,从第五比特开始为网路层的数据,到网路层包裹信息结束后,接上4比特的CRC校验讯息,后有一结束字符FLAG表明该帧结束。 CRC校验数:CRC校验数据由函数crc32()产生,函数crc32()返回一个32位整数为数据生成CRC-32校验和,并且把这 32比特校验和附在数据字节之后。 多项式定义:采用的CRC校验方案为CRC-32,生成多项式为: x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x1+1 校验和附加在数据帧尾部,接受方用带校验和的数据来逻辑除以生成多项式,余数为零则数据无误码,反之有误码等待发送方重传。 (4) 协议工作时两个站点之间信息交换的过程控制,尤其是发生误码条件下的控制方案 协议工作时,两个站点通过互发数据包交换数据,而控制讯息则稍带在数据讯息中传递,当遇到超时情况时,则主动发送空数据包以提供讯息。 当出现帧丢失时,如收到帧的序号有跳跃,或者出现CRC校验出错丢弃了某帧,会主动发送NAK否定帧,提示重传,接收方丢弃所有的后续帧。若长期未产生放送消息,则出现ACK超时事件,主动发送ACK帧提示确认,对方收到确认后,滑动窗口继续发送,若一直未收到确认讯息,则出现数据帧超时事件,发送方会自动重发未确认帧。 11.3 软件设计 给出程序的数据结构,模块之间的调用关系和功能,程序流程。 (1)数据结构:数据结构是整个程序的要点之一,程序维护者充分了解数据结构就可以对主 要算法和处理流程有个基本的理解。描述程序中自定义结构体中各成员的用途,定义的全局变量和主函数中的变量的变量名和变量所起的作用。 采用字符数组结构来存放数据帧:

TCP的滑动窗口机制

TCP的滑动窗口机制 TCP这个协议是网络中使用的比较广泛,他是一个面向连接的可靠的传输协议。既然是一个可靠的传输协议就需要对数据进行确认。TCP协议里窗口机制有2种一种是固定的窗口大小。一种是滑动的窗口。这个窗口大小就是我们一次传输几个数据。 我们可以看下面一张图来分析一下固定窗口大小有什么问题。 这里我们可以看到假设窗口的大小是1,也是就每次只能发送一个数据只有接受方对这个数据进行确认了以后才能发送第2个数据。我们可以看到发送方每发送一个数据接受方就要给发送方一个ACK对这个数据进行确认。只有接受到了这个确认数据以后发送方才能传输下个数据。 这样我们考虑一下如果说窗口过小,那么当传输比较大的数据的时候需要不停的对数据进行确认,这个时候就会造成很大的延迟。如果说窗口的大小定义的过大。我们假设发送方一次发送100个数据。但是接收方只能处理50个数据。这样每次都会只对这50个数据进行确认。发送方下一次还是发送100个数据,但是接受方还是只能处理50个数据。这样就避免了不必要的数据来拥塞我们的链路。所以我们就引入了滑动窗口机制,窗口的大小并不是固定的而是根据我们之间的链路的带宽的大小,这个时候链路是否拥护塞。接受方是否能处理这么多数据了。 我们看看滑动窗口是如何工作的。我们看下面几张图。

首先是第一次发送数据这个时候的窗口大小是根据链路带宽的大小来决定的。我们假设这个时候窗口的大小是3。这个时候接受方收到数据以后会对数据进行确认告诉发送方我下次希望手到的是数据是多少。这里我们看到接收方发送的ACK=3。这个时候发送方收到这个数据以后就知道我第一次发送的3个数据对方只收到了2个。就知道第3个数据对方没有收到。下次在发送的时候就从第3 个数据开始发。这个时候窗口大小就变成了2 。 这个时候发送方发送2个数据。

滑动窗口算法原理

1. 滑动窗口算法 -------------------------------------------------------------------------------- 滑动窗口算法工作过程如下。首先,发送方为每1帧赋一个序号(sequence number),记作S e q N u m 。现在,让我们忽略S e q N u m是由有限大小的头部字段实现的事实,而假设它能无限增大。发送方维护3个变量:发送窗口大小(send window size),记作S W S ,给出发送方能够发 送但未确认的帧数的上界;L A R 表示最近收到的确认帧(last acknowledgement re c e i v e d)的序号;L F S 表示最近发送的帧(last frame sent)的序号,发送方还维持如下的不变式:LAR-LFR≤RWS 当一个确认到达时,发送方向右移动L A R,从而允许发送方发送另一帧。同时,发送方为所发的每个帧设置一个定时器,如果定时器在A C K到达之前超时,则重发此帧。注意:发送方必须存储最多S W S个帧,因为在它们得到确认之前必须准备重发。 接收方维护下面3个变量:接收窗口大小(receive window size),记为RW S,给出接收方所能接收的无序帧数目的上界;L A F表示可接收帧(l a rgest acceptable frame)的序号;L F R表示最近收到的帧(last frame re c e i v e d)的序号。接收方也维持如下不变式: LFS-LAR≤SWS

当一个具有顺序号S e q N u m的帧到达时,接收方采取如下行动:如果S e q N u m≤L F R 或S e q N u m > L A F,那么帧不在接收窗口内,于是被丢弃;如果L F R<Se q N u m≤L A F,那么帧在接收窗口内,于是被接收。现在接收方需要决定是否发送一个A C K。设S e q N u m To A C K表示未被确认帧的最大序号,则序号小于或等于S e q N u m To A c k的帧都已收到。即使已经收到更高序号的分组,接收方仍确认S e q N u m To A c k的接收。这种确认被称为是累积的(c u m u l a t i v e)。然后它设置L F R = S e q N u m To A c k,并调整L A F = L F R + RW S。例如,假设L F R= 5(即,上次接收方发送的A C K是为了确认顺序号5的),并且RWS = 4。这意味着L A F = 9。如果帧7和8到达,则存储它们,因为它们在接收窗口内。然而并不需要发送A C K,因为帧6还没有到达。帧7和8被称为是错序到达的。(从技术上讲,接收方可以在帧7和8到达时重发帧5的A C K。)如果帧6当时到达了(或许它在第一次丢失后又重发从而晚到,或许它只是被延迟了),接收方确认帧8,L F R置为8,L A F置为1 2。如果实际上帧6丢失了,则出现发送方超时,重发帧6。我们看到,当发生超时时,传输数据量减少,这是因为发送方在帧6确认之前不能向前移动窗口。这意味着分组丢失时,此方案将不再保证管道满载。注意:分组丢失时间越长,这个问题越严重。注意,在这个例子中,接收方可以在帧7刚一到达时就为帧6发送一个认帧N A K(negative acknowl edgment)。然而,由于发送方的超时机制足以发现这种情况,发送N A K反而为发送方增加了复杂性,因此不必这样做。正如我们已提到的,当帧7和8到达时为帧5发送一个额外的A C K是合理的;在某些情况下,发送方可以使用重复的A C K作为一个帧丢失的线索。这两种方法都允许早期的分组丢失检测,有助于改进性能。 关于这个方案的另一个变种是使用选择确认(selective acknowledgements)。即,接收方能够准确地确认那些已收到的帧,而不只是确认按顺序收到最高序号的帧。因此,在上例中,接收方能够确认帧7、8的接收。如果给发送方更多的信息,就能使其较容易地保持管道满载,但增加了实现的复杂性。 发送窗口大小是根据一段给定时间内链路上有多少待确认的帧来选择的;对于一个给定的延迟与带宽的乘积,S W S是容易计算的。另一方面,接收方可以将RW S设置为任何想要的值。通常的两种设置是:RW S= 1,表示接收方不存储任何错序到达的帧;RW S=S W S,表示接收方能够缓存发送方传输的任何帧。由于错序到达的帧的数目不可能超过S W S个,所以设置RWS >S W S没有意义。 2. 有限顺序号和滑动窗口 -------------------------------------------------------------------------------- 现在我们再来讨论算法中做过的一个简化,即假设序号是可以无限增大的。当然,实际上是在一个有限的头部字段中说明一个帧的序号。例如,一个3比特字段意味着有8个可用序号0 ~ 7。因此序号必须可重用,或者说序号能回绕。这就带来了一个问题:要能够区别同一序号的不同次发送实例,这意味着可用序号的数目必须大于所允许的待确认帧的数目。例如,停止等待算法允许一次有1个待确认帧,并有2个不同的序号。 假设序号空间中的序号数比待确认的帧数大1,即S W S ≤M A a x S e q N u m -1 ,其中M a x Seq N u m 是可用序号数。这就够了吗?答案取决于RW S 。如果RW S = 1,那么MaxSeqNum≥SWS+1是足够了。如果RW S等于S W S,那么有一个只比发送窗口尺寸大1的M a x S e q N u m是不够的。为看清这一点,考虑有8个序号0 ~ 7的情况,并且S W S = RW S = 7。假设发送方传输帧0 ~ 6,并且接收方成功接收,但A C K丢失。接收方现在希望接收帧7,0 ~ 5,但发送方超时,然后发送帧0 ~ 6。不幸的是,接收方期待的是第二次的帧0 ~ 5,得到的却是第一次的帧0 ~ 5。这正是我们想避免的情况。

(完整版)计网协议5和协议6程序

程序设计报告 (2011/2012学年第一学期) 题目:数据链路层滑动窗口协议的设计 与实现 专业网络工程 学生姓名朱瑞霖、李小明 学生学号 09211517 、 09211524 日期 2011-12-01

一、实验内容和实验目的 利用所学数据链路层原理,自己设计一个滑动窗口协议,在仿真环境下编程实现有噪音信道环境下两站点之间无差错双工通信。信道模型为8000bps 全双工卫星信道,信道传播时延270毫秒,信道误码率为10-5,信道提供字节流传输服务,网络层分组长度固定为256字节。通过该实验,进一步巩固和深刻理解数据链路层误码检测的CRC 校验技术,以及滑动窗口的工作机理。滑动窗口机制的两个主要目标: (1) 实现有噪音信道环境下的无差错传输; (2)充分利用传输信道的带宽。 在程序能够稳定运行并成功实现第一个目标之后,运行程序并检查在信道没有误码和存在误码两种情况下的信道利用率。为实现第二个目标,提高滑动窗口协议信道利用率,需要根据信道实际情况合理 地为协议配置工作参数,包括滑动窗口的大小和重传定时器时限以及ACK 搭载定时器的时限。这些参数的设计,需要充分理解滑动窗口协议的工作原理并利用所学的理论知识,经过认真的推算,计算出最优 取值,并通过程序的运行进行验证。 通过该实验提高同学的编程能力和实践动手能力,体验协议软件在设计上各种问题和调试难度,设计在运行期可跟踪分析协议工作过程的协议软件,巩固和深刻理解理论知识并利用这些知识对系统进行优化,对实际系统中的协议分层和协议软件的设计与实现有基本的认识。 二、实验环境 Window操作系统下,Microsoft Visual C++ 6.0 集成化开发环境。 三、实验分工 协议5主要由李小明完成,协议6主要由朱瑞霖完成,两协议的测试以及部分参数的设定、测试由两人共同完成。实验报告由李小明和朱瑞霖共同整理完成。 四、软件设计 1、数据结构分析 (a)协议五 #define inc(k)if(k

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

滁州学院 课程设计报告 课程名称:计算机网络 设计题目:滑动窗口协议仿真 系别:计算机与信息工程学院 专业:计算机科学与技术 组别:第五组 起止日期: 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),在油膜压力作用下,轴颈由图l(a)所示的位置被推向图1(b)所示的位置。 图1 动压油膜的形成 当动压油膜的压力p 在载荷F 方向分力的合力与载荷F 平衡时,轴颈中心处于某一相应稳定的平衡位置O 1,O 1位置的坐标为O 1(e ,Φ)。其中e =OO 1,称为偏心距;Φ为偏位角(轴承中心O 与轴颈中心O 1连线与外载荷F 作用线间的夹角)。 随着轴承载荷、转速、润滑油种类等参数的变化以及轴承几何参数(如宽径比、相对间隙)的不同.轴颈中心的位置也随之发生变化。对处于工况参数随时间变化下工作的非稳态滑动轴承,轴心的轨迹将形成一条轴心轨迹图。 为了保证形成完全的液体摩擦状态,对于实际的工程表面,最小油膜厚度必须满足下列条件: ()21min Z z R R S h += (1) 式中,S 为安全系数,通常取S ≥2;R z1,R Z2分别为轴颈和铀瓦孔表面粗糙度的十点高度。 滑动轴承实验是分析滑动轴承承载机理的基本实验,它是分析与研究轴承的润滑特性以及进行滑动轴承创新性设计的重要实践基础。 根据要求不同,滑动轴承实验分为基本型、综合设计型和研究创新型三种类型。

滑动窗口实验

计算机通信网络实验 滑动窗口实验 学院: 班级: 学号: 姓名: 2012年11月14日

一、实验目的 实现一个滑动窗口协议的数据传送部分,目的在于使学生更好地理解基本滑动窗口协议的基本工作原理,掌握计算机网络协议的基本实现技术。 二、原理简介 (1)窗口机制 滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。 发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。 (2)1比特滑动窗口协议 当发送窗口和接收窗口的大小固定为1时,滑动窗口协议退化为停等协议(stop-and-wait)。该协议规定发送方每发送一帧后就要停下来,等待接收方已正确接收的确认(acknowledgement)返回后才能继续发送下一帧。由于接收方需要判断接收到的帧是新发的帧还是重新发送的帧,因此发送方要为每一个帧加一个序号。由于停等协议规定只有一帧完全发送成功后才能发送新的帧,因而只用一比特来编号就够了。

(3)后退n协议 由于停等协议要为每一个帧进行确认后才继续发送下一帧,大大降低了信道利用率,因此又提出了后退n协议。后退n协议中,发送方在发完一个数据帧后,不停下来等待应答帧,而是连续发送若干个数据帧,即使在连续发送过程中收到了接收方发来的应答帧,也可以继续发送,且发送方在每发送完一个数据帧时都要设置超时定时器,只要在所设置的超时时间内仍收到确认帧,就要重发相应的数据帧。如:当发送方发送了N个帧后,若发现该N帧的前一个帧在计时器超时后仍未返回其确认信息,则该帧被判为出错或丢失,此时发送方就不得不重新发送出错帧及其后的N帧。 三、实验步骤 1.编写滑动窗口协议的实现程序; 2.在模拟实现,调试并运行自己编写的协议实现程序; 3.了解协议的工作轨迹,如出现异常情况,在实验报告中写出原因分析。 四、实验过程 1、程序功能及设计思路 功能概述: 用客户端/服务器模式代表A站、B站。先由客户端输入服务器IP地址,然后客户端和服务器之间建立连接。在服务器中可以自行设置发送窗口的大小(如果需要实现的是停等式协议,那么就将发送窗口设为1),设置完后,服务器开始向客户端根据滑动窗口(停等式)的协议规定发送数据帧,同时启动计时器,客户端收到数据帧后马上向服务器发送确认帧,服务器如果没有及时收到客户端的确认帧,就要返回到出错的地方进行重发。 实现滑动窗口协议的算法: 发送端: 1、socket初始化,绑定端口,监听,接受连接; 2、设置发送窗口大小winsize; 3、启动定时器,设置时间为0.2s*winsize; 4、组帧并发送数据,即设置序号SN、数据data、长度msglen,之后发送一个窗口中的帧,每发送一个数据SN++;若发送完毕,则执行第6步; 5、接收确认帧,每收到一个正确的确认帧,则改变滑动窗口上下限,若正确接收所有确认帧,则关闭定时器,返回第3步;若接收超时或有确认帧丢失,则SN=right_number,返回第3步; 6、关闭socket,重新建立新的进程,等待下一个连接,返回第2步。 接收端: 1、socket初始化,连接服务器; 2、接收数据帧,将data存入缓存recvBuf,RN=SN+1; 3、发送确认帧,若接收完毕,则关闭socket,否则返回第二步。 实现停等式协议的算法: 和上述滑动窗口协议的算法类似,只需在发送端的第二步中将发送窗口大小winsize设置为1即可。

图像处理实验报告模板

桂林电子科技大学 实验报告 一、实验目的 1、掌握基本的图像处理方法,包括读取、写入、显示、剪切、运算以及快操作 等等。 2、掌握常用的图像变换方法,分析变换结果。 二、实验内容 编写程序,在Matlab下调试运行,并注意观察分析结果。 1、使用imread函数分别读入图象cameraman.tif 、canoe.tif,并使用subplot 和imshow函数进行显示。再使用imcrop对第一幅图片进行剪切,并保存成文件。 2、申明向量X和矩阵A,使用二维傅立叶变换和fftshift函数进行处理,观察向量和矩阵结果。 3、创建一个1000*1000的全0图像,其中选择某矩形区域设置其象素为1(350:649,475:524),对该二值图逆时针旋转45°角,比较旋转前后的图像和傅里叶变换频谱。 三、实验设备、环境 计算机 四、实验原理 1、图像平滑算法 (1) 简单平均法:

设某像素的灰度值为,迭加噪声后,一幅含噪声的图像可表示为 现取以为中心的邻域S ——NN 方形窗口,在S 域内进行局部平均,得 式中,N 的平方为窗口内像素总数。令 ,则 式中,加权函数 (2)中值滤波: 中值滤波是一种非线性的信号处理方法。中值滤波器在1971 年由J.w.Jukey 首先提出并应用在一维信号处理技术(时间序列分析)中,后来被二维图象信号处理技术所引用。中值滤波在一定的条件下可以克服线性滤波器如最小均方滤波、均直滤波等带来的图象细节模糊,而且对滤除脉冲干扰及图象扫描噪声最为有效。由于在实际运算过程中不需要图象的统计特征,因此这也带来不少方便。但是对于一些细节多,特别是点、线、尖顶细节多的图象不宜采用中值滤波。中值滤波一般采用一个含有奇数个点的滑动窗口,将窗口中各点灰度值的中值来替代值定点(一般是窗口的中心点)的灰度值。对于奇数个元素,中值是指按大小排序后,中间的数值;对于偶数个元素,中值是指排序后中间两个元素灰度值的平均值。 一般选用3*3或5*5窗口,形状可分为方形或十字形,如下图所示。 (a) 方形 (b) 十字形 图2-1 二维中值滤波窗口形状 二维中值滤波可表示为

滑动轴承实验报告

液体动压滑动轴承实验报告 一、实验目的 1、测量轴承的径向和轴向油膜压力分布曲线。 2、观察径向滑动轴承液体动压润滑油膜的形成过程和现象。 3、观察载荷和转速改变时的油膜压力的变化情况。 4、观察径向滑动轴承油膜的轴向压力分布情况。 5、测定和绘制径向滑动轴承径向油膜压力曲线,求轴承的承载能力。 6、了解径向滑动轴承的摩擦系数f 的测量方法和摩擦特性曲线λ的绘制方法。 二、实验设备及工具滑动轴承实验台 三、实验原理 1、油膜压力的测量 轴承实验台结构如图1所示,它主要包括:调速电动机、传动系统、液压系统和实验轴承箱等部分组成。 在轴承承载区的中央平面上,沿径向钻有8个直径为1mm 的小孔。各孔间隔为 22.50,每个小孔分别联接一个压力表。在承载区内的径向压力可通过相应的压力表直接读出。 将轴径直径(d=60mm )按比例绘在纸上,将1~8个压力表读数按比例相应标出。(建议压力以1cm 代表5kgf/cm 2)将压力向量连成一条光滑曲线,即得到轴承中央剖面油膜压力分布曲线)。 同理,读出第4和第8个压力表示数,由于轴向两端端泄影响,两端压力为零。光滑连结0‘,8’,4‘,8’和0‘各点,即得到轴向油膜压力分布曲线。 图1 轴承实验台结构图 1、操纵面板 2、电机 3、三角带 4、轴向油压传感器接头 5、外加载荷传感器 6、螺旋加载杆 7、摩擦力传感器测力装置 8、径向油压传感器(8只) 9、传感器 支撑板 10、主轴 11、主轴瓦 12、主轴箱 、管路敷设技术通过管线不仅可以解决吊顶层配置不规范高中资料试卷问题,而且可保障各类管路习题到位。在管路敷设过程中,要加强看护关于管路高中资料试卷连接管口处理高中资料试卷弯扁度固定盒位置保护层防腐跨接地线弯曲半径标等,要求技术交底。管线敷设技术中包含线槽、管架等多项方式,为解决高中语文电气课件中管壁薄、接口不严等问题,合理利用管线敷设技术。线缆、电气课件中调试资料试卷电气设备,在安装过程中以及安装结束后进行 高中资料试卷调整试验;通电检查所有设备高中资料试卷相互作用与相互关系,根据生产工艺高中资料试卷要求,对电气设备进行空载与带负荷下高中资料试卷调控试验;对设备进行调整使其在正常工况下与过度工作下都可以正常工作;对于继电保护进行整核对定值,审核与校对图纸,编写复杂设备与装置高中资料试卷调试方案,编写重要设备高中资料试卷试验方案以及系统启动方案;对整套启动过程中高中资料试卷电气设备进行调试工作并且进行过关运行高中资料试卷技、电气设备调试高中资料试卷技术电力保护装置调试技术,电力保护高中资料试卷配置技术是指机组在进行继电保护高中资料试卷总体配置时,需要在最大限度内来确保机组高中资料试卷安全,并且尽可能地缩小故障高中资料试卷破坏范围,或者对某些异常高中资料试卷工况进行自动处理,尤其要避免错误高中资料试卷保护装置动作,并且拒绝动作,来避免不必要高中资料试卷突然停机。因此,电力高中资料试卷保护装置调试技术,要求电力保护装置做到

计算机网络--滑动窗口实验报告

计算机网络滑动窗口协议实验报告 目录 一、实验内容和实验环境描述(2) 1.实验内容(2) 2.实验目的(2) 3.实验环境(2) 二、协议设计(3) 三、软件设计(4) Part A 选择重传协议 1.数据结构(4) 2.模块结构(6) 3.算法流程(7) Part B gobackn协议 1.数据结构(8) 2.模块结构(9) 3.算法流程(10) 四、实验结果分析(11) 五、探究问题(13) 六、实验总结与心得体会(14)

一、实验内容和实验环境描述 1.实验内容 利用所学数据链路层原理,自己设计一个滑动窗口协议,在仿真环境下编程实现有噪音信道环境下两站点之间无差错 双工通信。信道模型为8000bps全双工卫星信道,信道传播 时延270毫秒,信道误码率为10?5,信道提供字节流传输服 务,网络层分组长度固定为 256 字节。 2.实验目的 通过该实验,进一步巩固和深刻理解数据链路层误码检测的CRC校验技术,以及滑动窗口的工作机理。滑动窗口机制 的两个主要目的:(1)实现有噪音信道环境下的无差错传输; (2)充分利用传输信道的带宽。在程序能够稳定运行并成功 实现第一个目标之后,运行程序并检查在信道没有误码和存 在误码两种情况下的信道利用率。为实现第二个目标,提高 滑动窗口协议信道利用率,需要根据信道实际情况合理地为 协议配置工作参数,包括滑动窗口的大小和重传定时器时限 以及 ACK 搭载定时器的时限。 3.实验环境 Windows10环境PC机 Microsoft Visual Studio 2017集成开发环境

二、协议设计 本次试验主要设计数据链路层,实验中分别设计了gobackn协议与选择重传协议。主要涉及到的层次结构是物理层、数据链路层、网络层。 物理层:为数据链路层提供的服务为8000bps,270ms传播延时,10?5误码率的字节流传输通道。数据链路层利用接口函数send_frame()和 recv_frame()从物理层发送和接收一帧。 网络层:利用数据链路层提供的“可靠的分组传输”服务,在站点A与站点B之间交换长度固定为256 字节的数据分组。网络层把产生的分组交付数据链路层,并接受数据链路层提交来的数据分组。 数据链路层:通过 get_packet()函数从网络层得到一个分组,将之组装成帧,向物理层发送,启动计时器;进行适当的流量控制;数据帧经信道传送给接收方;接收方数据链路层终止定时器(或启动ack定时器),判断数据是否出错,若正确的话,是否为欲接受数据。若所受到的数据帧是期待接受的数据帧,则通过put_packet()函数将其缓冲区内缓存的数据依序提交给网络层。 可靠通信的实现:通过捎带确认来完成可靠的数据通信。 在选择重传协议中:1)出现信道误码导致收帧出错时,若未发送过该帧的NAK则接收方发NAK帧要求发送方重传;若已经发送过NAK,则等待定时器超时后发送方重发;2)当收到的帧位于接收窗口内,但不是接收窗口下边界的一帧时,将该帧进行缓存,

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

滁州学院 课程设计报告 课程名称: 计算机网络 第五组 起止日期: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协议。为了解决这个问题,乂提出了

机械设计实验报告2011

机械设计实验报告 姓名: 班级: 学号: 日期: 机械设计教研室 河南机电高等专科学校

机械设计现场认识实验报告 一、实验目的 二、实验设备 三、回答问题 1.螺纹的类型有、、、、螺纹联接的类型有、、、。螺纹联接的防松有、、, 2.键联接的类型有、。花键联接的类型有、。 3.普通V带的型号有。V带轮的结构型式有、、、。V带传动的张紧装置有、、。4.链传动的型式有、、。5.齿轮的结构型式有、、。 6.蜗轮的结构型式有、、、。7.滑动轴承按其所承受载荷方向的不同,可分为、。向心滑动轴承的结构形式有、、、、。8.常用滚动轴承的类型及其代号有、、、、、、、、、。滚动轴承的内圈的轴向固定方法有、、、。滚动轴承外圈的轴向固定方法有、、、。滚动轴承的密封形式有接触式和非接触式密封两种,接触式密封有、两种。非接触式密封有、两种。 9.联轴器可分为、、三大类。 刚性联轴器的型式有、、、、、。 10.离合器的类型有、、、、 、。 11.轴按承载类型有、、。轴上零件的轴向固定方式有。 轴上零件的周向固定方式有。12.按照所受载荷的不同,弹簧可分为、、、。

带传动实验报告一、实验目的 二、实验设备及仪器 三、带传动实验参数 1. 带的种类(V带、圆带、三角带)。 2. 预紧力:2F01= N;2F02= N。 3. 带轮基准直径:d1= mm ;d2= mm 4.测力杆力臂长:L1=L2= mm 5.测力杆刚性系数:K1=K2= N/格 四、实验数据记录与计算 五、绘制弹性滑动曲线和效率曲线

液体动压滑动轴承实验报告 一、实验目的 二、实验设备 三、实验参数 轴颈直径d=mm;轴承宽度B=mm 润滑油动力粘度η=P a s ;润滑油温度t=C 四、实验数据记录 油膜压力测试 转速n = rpm;负载F = N; 五、绘制径向、轴向油膜压力分布曲线 1.径向油膜压力分布曲线 2.轴向油膜压力分布曲线

计算机网络原理实验七、传输层可靠传输协议GBN编程实验报告

实验七、传输层可靠传输协议GBN编程实验报告 序号:姓名:学号:成绩指导老师: 一、实验目的: 1、通过编写实现一个简单可靠的数据传输协议GBN的发送和接收代码,模拟可靠数据传输 2、理解TCP协议可靠传输的差错检测、重传、累计确认、定时器的可靠传输策略。 二、实验原理: 在GBN中,发送端不需要在接收到上一个数据包的ACK后才发送下一个数据包,而是可以连续发送数据包。在发送端发送数据包的过程中,如果接收到对应已发送的某个数据包的NACK,则发送端将NACK对应的某个数据包进行重发,然后再将该数据包之后的数据包依次进行重发。 三、结果分析: 本次试验中采用java语言进行程序编写 代码注释: (一)S ender类 import java.util.Timer; public class Sender extends Thread{ public int windowsize=3; //发送方窗口长度设为3 public String[] data={"data1","data2","data3", "data4","data5","data6","data7"}; //模拟七个数据包public int sign[]={0,1,2,3,4,5,6}; //为7个数据包标号 public int localack=-1; //保存最近收到的ACK public Timers litime=null; //定时器(这里定为2秒) public int switches=0; //超时标志,1为超时 public int windowsign[]; //当前窗口内待发的数据分组的序号 public int acksign=0; //为0表示收到正确ACK,为1表示收到错误的ACK,必须重发!

滚动轴承实验

滚动轴承实验报告 一、实验目得 1、测定与绘制滑动轴承径向油膜压力曲线,求轴承得承载能力。 2、观察载荷与转速改变时油膜压力得变化情况。 3、观察径向滑动轴承油膜得轴向压力分布情况。 4、了解径向滑动轴承得摩擦系数f 得测量方法与摩擦特性曲线得绘制原理及方法。 二、实验原理 1.左、右滚动轴承座可轴向移动,各装有轴向载荷传感器,可通过电脑或数显测试并计算单个滚动轴承轴向载荷与总轴向载荷得关系; 2.右滚动轴承上装有8 个径向载荷传感器,可通过计算机或操作面板显示测绘滚动轴承在轴向、径向载荷作用下轴承径向载荷分布变化情况; 3.通过电脑直接测量滚子对外圈得压力及变化情况,绘制滚动体受载荷变化曲线。 三、实验设备 1、 ZQGZ滚动轴承实验台 2、滚动轴承:圆锥滚子轴承30310 深沟球轴承 6310 3、可移动得滚动轴承座:1对; 4、滚动轴承、径向加载装置:1套; (作用点位置可在0~180mm内任意调节); 5、滚动轴承径向载荷传感器:精度等级:0、05 量程:10000N,1个/台; 6、轴向载荷传感器:量程:5000N,2个/台; 四、实验内容及注意事项 1、滚动轴承径向载荷分布及变化实验;测试在总轴向与径向载荷作用下,滚动轴承径向载荷分布及变化情况,并作出载荷分布曲线。 2、注意事项 a)选定一对实验轴承,本实验装置提供向心球轴承与圆锥滚子轴承,每一种 轴承有大小型号各一种出厂已装配好可任选一台、 b)实验前首先调整好左右轴向受力支撑(称重传感器支座)位置,使端盖外伸 与传感器刚好接触、 c)静态实验需调节加载支座,使加载力得方向保持在一定角度,并保持空载。 d)将测力及传感器得检测点一一接至检测系统对应得接口 e)打开电源,使检测系统处于工作状态、 f)将检测系统与PC 机串行口相连,并打开分析界面、

相关文档
最新文档