滑動窗口的仿真協議_第1頁
滑動窗口的仿真協議_第2頁
滑動窗口的仿真協議_第3頁
滑動窗口的仿真協議_第4頁
滑動窗口的仿真協議_第5頁
已閱讀5頁,還剩16頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

計算機網絡課程設計書

學計算機與信息工程學院專業網絡工程

課程名稱計算機網絡題目滑動窗口協議仿真

完成期限自2015年6月23日至2015年5月29日共1周

一、項目得目得

掌握滑動窗口協議得工作原理,并能夠用所學計算機高級

語言進行編程模擬其運行過程;培養學生得動手實踐和思考能

力。

二,項目任務得主要內容和要求

(1)本次設計任務就就是根據滑動窗口協議得工作原理,在Vi

sualC++6、0得平臺上用C++語言編寫一個基本TCP滑動

窗口協議得模擬程序。

(2)要求該程序能夠實現滑動窗口協議得發送和接收數據幀

內功能,在此功能上體現滑動窗口協議得運作。

容(3)程序按照滑動窗口協議實現端對端得數據傳送。包括協

及議得各種策略,如包丟失、停等應答、超時等都應有所仿真實現;

(4)顯示數據傳送過程中得各項具體數據。雙方幀得個數

變化,幀序號,發送和接受速度,暫停或重傳提示等;

三、項目設計(研究)思路

(1)查閱相關資料,理解滑動窗口協議得工作原理;

(2)設計滑動窗口協議實現端對端數據傳送得功能流程圖;

⑶編寫代碼實現滑動窗口協議工作得模擬程序,包括包丟

失、停等應答、超時等;

⑷測試程序功能得實現情況。

四、具體成果形式和要求

⑴滑動窗口協議實現端對端數據傳送得模擬程序。

(2)按照要求撰寫課程設計報告并準備答辯。

進起止日期工作內容

度2015、6、23-2了解網絡協議編程得基本知識;

安015、6、24

排2015、6、25-2了解滑動窗口協議得工作機制;

015、6>26

2015、6、27-使用編程語言編寫一個滑動窗口協議得模擬

2015、6、28程序,按要求實現程序。

2015、6、29最后匯總,調試,答辯

[1]謝希仁、計算機網絡[M]、4版、北京:電子工業出版社,

2003、

[2]李仁發、何彥、基于虛擬實臉方法得滑動窗口協議分析回、

要系統仿真學報、2002、8(14);1026-1063、

參[3]李建中,張冬冬、滑動窗口規模得動態調整算法加、軟件

考學報、2004、12(15):1800-1814、

資[4]王栩,李建中,王偉平、基于滑動窗口得數據流壓縮技術及連

料續查詢處理方法[J]、計算機研究與發展、2004、10(4

1):1639-1644、

[5]特南鮑姆、計算機網絡(第四版)、清華出版社

(簽字):X年X月X日

指導教師

意見

(簽字):X年X

系(教研

月X日

室)主任

意見

計算機網絡課程設計說明書

(封面)

學院名稱:計算機與信息工程學防

班級名稱:___________網絡工程一班____________________

學生姓名:____________________________________

學號:_______________2()1321______________________

題目:滑動窗口協議仿真

指導教師

姓名:_____________邵雪梅________________________

起止日期:___________2015、6、23-2015、6、29_______________

第一部分:正文部分

一,選題背景

早期得網絡通信中,通信雙方不會考慮網絡得擁擠情況直接發送數

據。由于大家不知道網絡擁塞狀況,一起發送數據,導致中間結點阻塞掉包,

詒也發不了數據。在數據傳輸過程中,我們總就就是希望數據傳輸得更快一些,

但如果發送方把數據發送得過快,接收方就可能來不及接收,這就造成數據得丟

失。因此就有了滑動窗口機制來解決這些問題,早期我們使用得就就是Ibit

滑動窗口協議,一次只發送一個幀,等收到ack確認才發下一個幀,這樣對唁道

得利用率太低了。因此提出了一種采用累積確認得連續ARQ協議,接收方不必

對收到得幀逐個發送ack確認,而就就是收到幾個幀后,對按序到達得最后一個幀

發送ack確認。同lbit滑動窗口協議相比,大大減少了ack數量,并消除了延遲a

ck對傳輸效率得影喻。但就就是,這會產生一個新得問題,如果發送方發送了5

個幀,而中間得第3個幀丟失了。這時接收方只能對前2個幀發出確認。發送方

無法知道后面三個幀得下落,只好把后面得3個幀再重傳一次,這就就就是回退N

協議。為了解決這個問題,又提出了選擇重傳協議。當接收方發現某幀出錯后,

繼續接受后面送來得正確得幀,只就就是不交付她們,存放在自己得緩沖區

中,并且要求發送方重傳出錯得那一幀。一旦收到重傳來得幀后,就可以將存

于緩沖區中得其余幀一并按正確得順序遞交給主機。本文主要介紹如何根據

滑動窗口協議得原理,在VisualC++得平臺上設計一個滑動窗口協議模擬程

序,并最終使該程序得以實現。本次程序設計分兩部分:第一部分就就是發送方,第

二部分就就是接收方。通過發送方和接收方之間得數據幀傳輸模擬,學習滑動窗

口協議控制流量得原理和方法,以及滑動窗口協議得工作機制。

二、設計理念

2.1滑動窗口協議工作原理

TCP滑動窗口用來暫存兩臺計算機間要傳送得數據分組。每臺運行TCP協

議得計算機有兩個滑動窗口:一個用于數據發送,另一個用于數據接收。發送端待

發數據分組在緩沖區排隊等待送出。被滑動窗口框入得分組,就就是可以在未收

到接收確認得情況下最多送出得部分。滑動窗口左端標志X得分組,就就是已經

被接收端確認收到得分組。隨著新得確認到來,窗口不斷向右滑動。

滑動窗口算法工作過程如下:

首先,發送方為每1幀賦一個序號(sequencenumber),記作SeqNu

m。現在,我們忽略SeqNum就就是由有限大小得頭部字段實現得事實,而假設她

能無限增大。發送方維護3個變量:發送窗口大小(sendwindowsize),記作SWS,

給出發送方能夠發送但未確認得幀數得上界;LAR表示最近收到得確認幀Qast

acknowledgementreceived)得序號;LFS表示最近發送得幀(lastframeSe

nt)得序號,發送方還維持如下得不變式:LAR-LFSaSWS。

2-1滑劫穿口協議工作圖

窗口協議算法有三個功能:

?在不可靠鏈路上可靠地傳輸幀

?保持幀得傳輸順序

?支持流量控制

2、2選擇重傳協議

在選擇重傳協議中,當接收方發現某幀出錯后,其后繼續送來得正確得幀雖然

不能立即遞交給接收方得高層,但接收方仍可收下來,存放在一個緩沖區中,同時

要求發送方重新傳送出錯得那一幀。一旦收到重新傳來得幀后,就可以原已存于

緩沖區中得其余幀一并按正確得順序遞交高層。這種方法稱為選擇重發(SELEC

TICEREPEAT),其工作過程如圖所示。顯然,選擇重發減少了浪費,但要求接收

方有足夠大得緩沖區空間。

發送幀

接收幀

出鋅'―v一

將2…6依次遞交高層

?存不遞交

2-2選擇重傳協議原理圖

三、過程論述

(1)發送方程序流程圖:

發送方援收方

3-1發送方程序流程圖

⑵接收方程序流程圖:

3—2接受方程序流程圖

3、2功能實現

⑴發送方程序:

本程序設有四個變量:一就就是窗口大小變量,二就就是第一幀序列號變量,三

就就是最近發送得幀變量,最后一個就就是最近收到得確認幀變量。

swpstatelNhead二NULL;〃變量初始值為空

swpstatclssendq=scndq_rcar=(structscndq_slot*)malloc(sizcof(st

ructsendq_slot);

if(!swpstate1、sendq)exit(l);

sendq_rear->next=NULL;

printf("請輸入窗口大小巧;

scanfC'%ld”,&swpstatel、sws);//輸入窗口大小

swpstate1xrws=swpstate1、sws;//把窗口大小得值賦給變量

if(swpstatel、sws>0)

(

print一請輸入第一幀得序列號

scd”,&swpstatcl、hdr、scqr.um);〃輸入第一幀序列號

)

swpstatel>nfe=swpstate1、hdr、seqnum;//把第一幀得值放進緩

沖池內

sendp=(structsendq_slot*)malloc(sizeof(structsendq_slo

t))J

if(!sendp)exit(l);

sendp->mSg=Swpstate1>hdr>seqnum;

endp->timeout=1;

sendp—>next=NULL;

sendq_rear->next=sendp;

sendq_rcar=sendp;

—swpstatd、sws;

swpstatels1fs=swpstatelshdr、seqnum;//最近發送得幀取

swpstate1、lar=swpstatel、hdr、seqnum;//最近收到得確認幀取值

dO

(

while(swpstate1、sws>0)〃當窗口大小大于。時,執行以下得循環

(

sendp=(structsendqslot*)malloc(sizeof(structsendq_slot));

if(!sendp)exit(1);

Sendp->msg=swpstate1、1fS+1;〃如果輸入得幀序號

大于之前幀序號,那么窗口向前滑動

sendp->timeout=l;〃時延為1

Sendp->next=NULL;

sendq_rear->next=Sendp;

sendq_rear=sendp;

—swpstatel、sws;

++swpstatcl>1fs;

}

swpstatel、hdr、acknum=0;〃ACK清空

Swpstatel、hdr、flags=0;//存儲緩沖池清空

printf("最近收到騫ACK得幀序號:%1d\nswpstatel、1ar);

〃輸出最近收到得ACK幀序號

printf(H最近發送得幀序號(發送新幀后):%ld'n*',swpstatcKIfs);

〃輸出最近發送幀序號

⑵接收方得接收原則從總體上看就就是先判斷輸入得數據幀就就是否在接

收范圍之內,若就就是,則繼續判斷就就是否符合其她接收條件;若不就就是,則馬

上丟棄該數據幀,不再進行其她條件得判斷。

structsendq_s1ot*sendq_rear,*sendp,*p3,*p4;〃設定變量

structrecvq_slot*recvp,*recvq_rear,*p1,*p2;

if(s\vpstatel>hdr>flags==0)

//上次輸入得數據幀被放置在緩存區,輸入區被清空

do〃如果繼續接收數據幀則實施下面循環

{

printf(”請輸入收到得數據幀號:");

scanf(H%ld",&a);

if(a>=swpStatelNnfe&&a<=swpstatel>1fs)〃判斷數據幀應被接

收或緩存

{

if(swpstatel、head==NULL)

{

recvp=recvq_rear=(structrecvq_slot*)ma1loc(sizeof(struc

treevq_slot));

recvp->ncxt=NULL;

swpstate1head二recvp;

else

if(swpstate1>head!二NULL)

recvp=(structrecvq_siot*)malloc(sizeof(struct

recvqslot));

recvp->ncxt=NULL;

rccvq_rcar->next=rccvp;

recvq_rear=recvp;

}

)

e1se

(

printf("所輸數據不在接收窗口內!");

break;//跳出該循環

(

⑶若輸入數據幀在接收范圍內則繼續判斷并進行以下循環。

recvp—>msg=a;

if(rccvp—>msg==swpstatelxnfc)〃就就是否放入緩

存判斷

recvp—>received=1;

else

recvp->receivcd=O;

—swpstate1Arws;

if(recvp—>received==l)〃數據幀被接收,則進行下面語句

{a=a-1;

do

{a=a+1;

if(swpstatc1、hcad==NULL)

break;

pl=Swpstatel、head;

flag=0;

while((a!=pl->msg)&&(pl->next!=NULL))

p2=p1;p1=p1->ncxt;

if(a==pl—>msg)

flag=1;

if(pl==swpstate1、head)

swpstate1、head=s\vpstatel>head—>next;

elsep2—>next=p1->next;

swpstatel、nfe=a+1;

swpstatel%hdr、acknum=a+1;

swpstate1>hdr、f1ags=1;

}

}while(fIag==1);

(

printf("ACK號(期待得下一幀得序號):%ld\n11,swpstate1、nfe);

printff沒按序接受得序號:

pl=swpstatclxhead;

whilc(p1!=NULL)

printf(u%ld\tH,p1->msg);

pl=pl—>next;

)

(4)當接收完一個數據幀時,我們可以選擇終止下面得繼續接收,也可以選擇繼

續接收。如果繼續接收,那么程序跳到判斷循環,繼續判斷就就是否接收下一個數

據幀,原理與上面相當。

\vhilc((swpstatcl、rws〉())&&(b==1));

if(s\vpstateIshdr、f1ags==1)

{p3=s\vpstatel、sendq—>next;

flag=O;

while((swpsrntel、hdr、aCkn11m)!=p3->msg&&p3->nexr!二NUL

L)

{p4=p3;p3=p3->next;}

if(swpstatelhdr、acknum==p3->tnsg)

(

flag=1;

if(p3->msg==swpstatel、Sendq—>neXt—>msg)

swpstatel、sendq—>next_p3;

eIseswpStatel、sendq->next=p3;

)

swpstatel%sws=swpstate1、sws+(swpstate1、sendq->next->m

Sg—swpstatel、lar);

swpstate11ar=s\vpstatcl、sendq—>next—>msg;

swpstatc1、hdr、scqnum=swpstatc1、hdr、acknum;

printf,最近收到得ACK得幀序號(收到ACK后):%1d

\n11,s\vpstatcl、1ar);

printf("最近發送得幀序號(此時還未發送新得數據):%ld\n11,s

wpstatel、1fs);

}

四、結果分析

滑動窗口協議得底本原理就就就是在任意時刻,發送方都維持了一個連

續得允許發送得幀得序號,稱為發送窗口;同時,接收方也維持了一個連續得

允許接收得幀得序號,稱為接收窗口。發送窗口和接收窗口得序號得上下界

不一定要一樣,其至大小也可以不同°不同得滑動窗口協議窗口大小一般不

同。發送方窗口內得序號代表了那些已經被發送,但就就是還沒有被確認得

幀,或者就就是那些可以被發送得幀。接受方為其窗口內得每一個序號保留了

一個緩沖區。與每個緩沖區相關聯得還有一位,用來指明該緩沖區就就是滿得還

就就是空得。若從滑動窗口得觀點來統一看待1比特滑動窗口、后退

n及選擇重傳三種協議,她們得差別僅在于各自窗口尺寸得大小不同而已。

1比特滑動窗口協議:發送窗口=1,接收窗口二1;后退N協議:發送窗口>1,

接收窗口=1;選擇重傳協議:發送窗口>1,接收窗口,

五、結論(或總結)

下面我以窗口大小為11,第一幀序列號為3,做程序得測試

三\DoBua\滑動■口悔議.。*—

入霍

9L大小

11列

-韶

翌R3

入B

t實M

器J

■髀

11霜1

H短

雪■

O號

內)

T號

技K

;:

警續接收幀?若是,輸入若不是輸入。.

自黔舞髀歌覆),3

快按序接受的序號,

■續接收岫?若是.福入,,若不是

鐲入。-

公蛭的期前號,4

R)CK擊,酒待的長,口的序號),3

除按序接啜的序號:

朋軟接收幀7若是.輸入,,若不是輸入。?

,地人也到笆小幃牛3C、

hex號弼持的不一領的序號),7

髀農序漫旻的序號,

上純接收帔?若是,輸入,,若不是

輸入。.

耨物入影劑的趙則號,7

Rei(號儂特的f一才貞的序號)?8

股按序接暖的序號:

他續接也幀7若是.輸入,.若不是,輸入。-

即的人收到的敖第帔號,I。、

|rtCK告弼將的不??麗的序號).R

快:按序接受的序號:

能續接收帔?若是,錨入1,若不是,鐲入。.

履忖鬻鯽叫嬴理號),9

股按序里曼的序號:

10

圖5測試結果

⑴整體窗口展示,命令行界面

5-1圖

⑵輸入窗口大小及第一幀序列號

|京"Ek'Debug'滑動窗口協議.exe”

X基*1

近0-

一3

收3

近?

收Ac

據q?

5-2圖

(3)當輸入得接收幀并不就就是ACK期待得幀,那么根據滑動窗口協議該幀

不被接收,且把該幀存放在緩沖區。

5-3圖

(4)若輸入得幀超過了窗口大小,那么系統會顯示該幀不在接收范圍內,并拒絕

接收。

口大小:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論