当前位置:文档之家› 编程模拟实现数据链路层协议中的停等协议

编程模拟实现数据链路层协议中的停等协议

一、实验题目:编程模拟实现数据链路层协议中的停等协议

二、实验目的:

1、掌握停止等待协议的基本原理

2、理解数据链路层的主要功能(数据出错控制,数据重复控制,数据丢失控制等等)

3、分析简单的协议数据单元

4、掌握停止等待协议的运行机制

三、停止等待协议的算法,

在发送节点:

(1)从主机取一个数据帧,送交发送缓存。

(2)发送状态变量V(S)初始化,V(S)←0。

(3)将发送状态变量值写入数据帧中的发送序号N(S),N(S)←V(S)。

(4)将发送缓存中的数据帧发送出去。

(5)设置超时计时器(选择适当的超时重传时间Tout )。

(6)等待。

(7)收到确认帧ACKn,

若n=1-V(S),则:从主机取一个新的数据帧,放入发送缓存:V(S)←[1-V(S)];转到(3)。

否则,丢弃这个确认帧,转到(6)。

(8)若超时计时器时间到,则转到(4)。

在接收节点:

(1)接收状态变量初始化,V(R)←0。

(2)等待。

(3)收到一个数据帧:

若N(S)=V(R),则执行(4);

否则丢弃此数据帧,然后转到(6)。

(4)将收到的数据帧中的数据部分送交上层软件。

(5)更新接收状态变量,准备接收下一个数据帧,V(R)←[1-V(R)]。

(6)n←V(R),发送确认帧ACK,转到(2)。

四、程序源代码:

#include

#include <>

#include <>

#include <>

d to %d.%d\n\n",

LOBYTE, HIBYTE,

LOBYTE, HIBYTE);

}

}

void mksock(int type)

{

PrimaryUDP = socket(AF_INET, type,0);

if (PrimaryUDP < 0)

{

throw Exception("create socket error");

}

}

void BindSock() d to %d.%d\n\n",

LOBYTE, HIBYTE,

LOBYTE, HIBYTE);

}

}

void rmksock(int type)

{

PrimaryUDP = socket(AF_INET, type,0);

if (PrimaryUDP < 0)

{

throw Exception("create socket error");

}

}

void rBindSock()

{

sockaddr_in sin;

= INADDR_ANY;

= AF_INET;

= htons(SERVER_PORT);

if (bind(PrimaryUDP, (struct sockaddr*)&sin, sizeof(sin)) < 0)

throw Exception("bind error");

}

DWORD WINAPI rARecv(LPVOIDlpParam)

{

FILE * file = NULL;

sockaddr_in remote;

int sinlen = sizeof(remote);

BSC buffer,bsc;

= STX; = ETX;

memset, 0, MAXBSCLENGTH);

int iread = 0;

unsigned long dwReceived = 0;

bool number =

true;算机网络(第4

版).Andrew

[2]Internet原理与应用刘化君等编着电子工业出版社

[3]计算机网络(第五版)谢希仁编着电子工业出版社

[4]网络编程与开发技术殷肖川等编着西安交通大学

相关主题