文档介绍:实验一 滑动窗口协议实验
实验目的:
在 NetRiver 实验系统中,用 C 语言实现滑动窗口协议中的 1 比特滑动窗口协议和后退 N 帧
协议,理解滑的超时时间
内仍收到确认帧,就要重发相应的数据帧。如:当发送方发送了 N 个帧后,若发现该 N 帧
的前一个帧在计时器超时后仍返回其确认信未 息, 则该帧被判为出错或丢失,此时发送方就
不得不重新发送出错帧及其后的 N 帧。
- 2 -从这里不难看出,后退 n 协议一方面因连续发送数据帧而提高了效率,但另一方面,在重
传时又必须把原来已正确传送过的数据帧进行重传(仅因这些数据帧之前有一个数据帧出了
错),这种做法又使传送效率降低。由此可见,若传输信道的传输质量很差因而误码率较大
时,连续测协议不一定优于停止等待协议。此协议中的发送窗口的大小为 k,接收窗口仍是
1。
(4).选择重传协议
在后退 n 协议中,接收方若发现错误帧就不再接收后续的帧,即使是正确到达的帧,这显
然是一种浪费。另一种效率更高的策略是当接收方发现某帧出错后,其后继续送来的正确的
帧虽然不能立即递交给接收方的高层,但接收方仍可收下来,存放在一个缓冲中,区 同时要
求发送方重新传送出错的那一帧。一旦收到重新传来的帧后,就可以原已存于缓冲中的其区
余帧一并按正确的顺序递交高层。这种方法称为选择重发(SELECTICE REPEAT),其工作过
程如图所示。显然,选择重发减少了浪费,但要求接收方有足够大的缓冲区空间。
实验代码以及代码说明:
实现代码如下:
#include ""
#include <deque>
using std :: deque;
using std :: cout;
using std :: endl;
using namespace std;
extern void SendFRAMEPacket(unsigned char* pData, unsigned int len);
- 3 -#define WINDOW_SIZE_STOP_WAIT 1
#define WINDOW_SIZE_BACK_N_FRAME 4 /* the max windows size */
typedef enum {data, ack, nak} frame_kind;
/* define the