滑動視窗協議模擬

2021-03-03 23:03:55 字數 2602 閱讀 6132

一、實驗目的

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.採用.***平台中的c#、c++或其他程式語言實現。

五、實驗內容

模擬滑窗協議的實現過程為;

(1) 程式客戶端執行緒傳送連線請求。 (2) 伺服器連線並返回連線資訊。

(3) 客戶端傳送資料幀(視窗大小自行設定)。 (4) 伺服器對每乙個收到資料幀都返**到資訊或者返回資料接收超時資訊。 (5) 客戶端根據返回資訊確定是否重傳資料還是選擇重傳資料。

【實驗過程】(實驗步驟、記錄、資料、分析)

客戶端的主程式流程圖:

資料幀傳輸伺服器端的流程圖:

五、詳細**

#include "sysinclude.h"

#include

using namespace std;

extern void sendframepacket(unsigned char* pdata, unsigned int len);

#define window_size_stop_wait 1

#define window_size_back_n_frame 4

typedef enum frame_kind;

typedef struct frame_head

;typedef struct frame

;// 需要定義另外乙個資料結構來存幀和其大小

typedef struct mainframe

;deque stop_wait_send_queue; //停等式協議傳送佇列

deque backn_send_queue回退n式協議傳送佇列

deque choice_send_queue選擇性重傳式協議傳送佇列

bool full = false標記停等式時視窗是否為空

int current_window_size = 0回退n的當前視窗大小

int current_window_size_c = 0選擇性重傳式的當前視窗大小

/** 停等協議測試函式

*/int stud_slide_window_stop_and_wait(char *pbuffer, int buffersize, uint8 messagetype)

return 0;

}if (messagetype == msg_type_receive)

if (messagetype == msg_type_timeout)

return 0;

}return 0;}/*

* 回退n幀測試函式

*/int stud_slide_window_back_n_frame(char *pbuffer, int buffersize, uint8 messagetype)

{ unsigned int ack;

unsigned int seq;

mainframe temp;

mainframe send;

mainframe receive;

int current_frame;

int i;

if ( messagetype == msg_type_send)

{temp.f = new frame;

temp.f) = *(frame*)pbuffer;

temp.size = buffersize;

backn_send_queue.push_back(temp);

if ( current_window_size < window_size_back_n_frame傳送視窗未滿時繼續傳送

{current_window_size++;

會展視窗網展會合作協議

展會合作協議 甲方 會展視窗網 北京藍創科貿 乙方甲 乙雙方本著平等 自願 守信 互利的原則,經過友好協商,就乙方 年 月 日 日,在 地區,展館 舉辦的 展會 的合作事宜簽訂本協議,具體條款如下 一 甲方責任及義務 1.甲方在會展視窗網 中為乙方建立合作展會的專題 並開通如下功能欄目 展會概況 展...