版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 計算機網絡課程設計書 學 院計算機與信息工程學院專 業(yè)網絡工程課程名稱計算機網絡題 目滑動窗口協議仿真完成期限自2015年6月23日至2015年6月29日共1周內容及任務1、 項目的目的 掌握滑動窗口協議的工作原理,并能夠用所學計算機高級語言進行編程模擬其運行過程;培養(yǎng)學生的動手實踐和思考能力。二,項目任務的主要內容和要求 (1)本次設計任務是根據滑動窗口協議的工作原理,在Visual C+ 6.0的平臺上用C+語言編寫一個基本TCP滑動窗口協議的模擬程序。 (2)要求該程序能夠實現滑動窗口協議的發(fā)送和接收數據幀功能,在此功能上體現滑動窗口協議的運作。 (3) 程序按照滑動窗口協議實現端對端
2、的數據傳送。包括協議的各種策略,如包丟失、停等應答、超時等都應有所仿真實現;(4) 顯示數據傳送過程中的各項具體數據。雙方幀的個數變化,幀序號,發(fā)送和接受速度,暫?;蛑貍魈崾镜龋?、 項目設計(研究)思路 (1) 查閱相關資料,理解滑動窗口協議的工作原理; (2) 設計滑動窗口協議實現端對端數據傳送的功能流程圖; (3) 編寫代碼實現滑動窗口協議工作的模擬程序,包括包丟失、停等應答、超時等; (4) 測試程序功能的實現情況。4、 具體成果形式和要求 (1)滑動窗口協議實現端對端數據傳送的模擬程序。 (2)按照要求撰寫課程設計報告并準備答辯。進度安排起止日期工作內容2015.6.23-2015.
3、6.24了解網絡協議編程的基本知識;2015.6.25-2015.6.26了解滑動窗口協議的工作機制;2015.6.27-2015.6.28使用編程語言編寫一個滑動窗口協議的模擬程序,按要求實現程序。2015.6.29最后匯總,調試,答辯主要參考資料1 謝希仁. 計算機網絡M. 4版. 北京:電子工業(yè)出版社, 2003.2 李仁發(fā).何彥. 基于虛擬實驗方法的滑動窗口協議分析J. 系統仿真學報. 2002. 8 (14) ; 1026 - 1063.3 李建中,張冬冬. 滑動窗口規(guī)模的動態(tài)調整算法J. 軟件學報. 2004. 12 (15) : 1800 - 1814.4 王栩,李建中,王偉平.
4、 基于滑動窗口的數據流壓縮技術及連續(xù)查詢處理方法 J . 計算機研究與發(fā)展. 2004. 10 (41) : 1639- 1644.5 特南鮑姆. 計算機網絡(第四版). 清華出版社指導教師意見(簽字): 年月日系(教研室)主任意見(簽字): 年月日 計算機網絡課程設計說明書(封面) 學院名稱: 計算機與信息工程學院 班級名稱: 網絡工程一班 學生姓名: 學 號: 201321 題 目: 滑動窗口協議仿真 指導教師姓 名: 邵雪梅 起止日期: 2015.6.232015.6.29 第一部分:正文部分一,選題背景 早期的網絡通信中,通信雙方不會考慮網絡的擁擠情況直接發(fā)送數據。由于大家不知道網絡擁
5、塞狀況,一起發(fā)送數據,導致中間結點阻塞掉包,誰也發(fā)不了數據。在數據傳輸過程中,我們總是希望數據傳輸的更快一些,但如果發(fā)送方把數據發(fā)送的過快,接收方就可能來不及接收,這就造成數據的丟失。因此就有了滑動窗口機制來解決這些問題。早期我們使用的是1bit滑動窗口協議,一次只發(fā)送一個幀,等收到ack確認才發(fā)下一個幀,這樣對信道的利用率太低了。因此提出了一種采用累積確認的連續(xù)ARQ協議,接收方不必對收到的幀逐個發(fā)送ack確認,而是收到幾個幀后,對按序到達的最后一個幀發(fā)送ack確認。同1bit滑動窗口協議相比,大大減少了ack數量,并消除了延遲ack對傳輸效率的影響。但是,這會產生一個新的問題,如果發(fā)送方發(fā)
6、送了5個幀,而中間的第3個幀丟失了。這時接收方只能對前2個幀發(fā)出確認。發(fā)送方無法知道后面三個幀的下落,只好把后面的3個幀再重傳一次,這就是回退N協議。為了解決這個問題,又提出了選擇重傳協議。當接收方發(fā)現某幀出錯后,繼續(xù)接受后面送來的正確的幀,只是不交付它們,存放在自己的緩沖區(qū)中,并且要求發(fā)送方重傳出錯的那一幀。一旦收到重傳來的幀后,就可以將存于緩沖區(qū)中的其余幀一并按正確的順序遞交給主機。本文主要介紹如何根據滑動窗口協議的原理,在Visual C+的平臺上設計一個滑動窗口協議模擬程序,并最終使該程序得以實現。本次程序設計分兩部分:第一部分是發(fā)送方,第二部分是接收方。通過發(fā)送方和接收方之間的數據幀
7、傳輸模擬,學習滑動窗口協議控制流量的原理和方法,以及滑動窗口協議的工作機制。二、設計理念2.1 滑動窗口協議工作原理TCP滑動窗口用來暫存兩臺計算機間要傳送的數據分組。每臺運行TCP協議的計算機有兩個滑動窗口:一個用于數據發(fā)送,另一個用于數據接收。發(fā)送端待發(fā)數據分組在緩沖區(qū)排隊等待送出。被滑動窗口框入的分組,是可以在未收到接收確認的情況下最多送出的部分?;瑒哟翱谧蠖藰酥綳的分組,是已經被接收端確認收到的分組。隨著新的確認到來,窗口不斷向右滑動。滑動窗口算法工作過程如下:首先,發(fā)送方為每1幀賦一個序號(sequence number),記作SeqNum?,F在,我們忽略SeqNum是由有限大小的頭
8、部字段實現的事實,而假設它能無限增大。發(fā)送方維護3個變量:發(fā)送窗口大?。╯end window size),記作SWS,給出發(fā)送方能夠發(fā)送但未確認的幀數的上界;LAR表示最近收到的確認幀(last acknowledgement received)的序號;LFS表示最近發(fā)送的幀(last frame sent)的序號,發(fā)送方還維持如下的不變式:LAR-LFSSWS。 2-1滑動窗口協議工作圖窗口協議算法有三個功能:l 在不可靠鏈路上可靠地傳輸幀l 保持幀的傳輸順序l 支持流量控制2.2 選擇重傳協議在選擇重傳協議中,當接收方發(fā)現某幀出錯后,其后繼續(xù)送來的正確的幀雖然不能立即遞交給接收方的高層,
9、但接收方仍可收下來,存放在一個緩沖區(qū)中,同時要求發(fā)送方重新傳送出錯的那一幀。一旦收到重新傳來的幀后,就可以原已存于緩沖區(qū)中的其余幀一并按正確的順序遞交高層。這種方法稱為選擇重發(fā)(SELECTICE REPEAT),其工作過程如圖所示。顯然,選擇重發(fā)減少了浪費,但要求接收方有足夠大的緩沖區(qū)空間。 2-2 選擇重傳協議原理圖三、過程論述(1)發(fā)送方程序流程圖:3-1發(fā)送方程序流程圖 (2)接收方程序流程圖:收到的包是否含有Push標志?收到包的序號與等待接收的序號是否一致?收到包的序號在接收窗口范圍內?NY直接提取數據,提前應用進程Y入接收隊列YN處理在接收隊列中的包(如果是普通包要判斷序號,或者
10、進行拆包,組包操作)結束N3-2接受方程序流程圖3.2 功能實現(1)發(fā)送方程序:本程序設有四個變量:一是窗口大小變量,二是第一幀序列號變量,三是最近發(fā)送的幀變量,最后一個是最近收到的確認幀變量。swpstate1.head=NULL; /變量初始值為空swpstate1.sendq=sendq_rear=(structsendq_slot*)malloc(sizeof(structsendq_slot);if(!swpstate1.sendq) exit(1);sendq_rear-next=NULL;printf(請輸入窗口大?。?;scanf(%ld,&swpstate1.sws); /
11、輸入窗口大小swpstate1.rws=swpstate1.sws; /把窗口大小的值賦給變量if (swpstate1.sws0) printf(請輸入第一幀的序列號:); scanf(%ld,&swpstate1.hdr.seqnum); /輸入第一幀序列號swpstate1.nfe=swpstate1.hdr.seqnum; /把第一幀的值放進緩沖池內sendp=(struct sendq_slot*) malloc (size of(struct sendq_slot); if(!sendp) exit(1);sendp-msg=swpstate1.hdr.seqnum;sendp-t
12、imeout=1;sendp-next=NULL;sendq_rear-next=sendp;sendq_rear=sendp;-swpstate1.sws;swpstate1.lfs=swpstate1.hdr.seqnum; /最近發(fā)送的幀取值swpstate1.lar=swpstate1.hdr.seqnum; /最近收到的確認幀取值dowhile(swpstate1.sws0) /當窗口大小大于0時,執(zhí)行以下的循環(huán)sendp=(struct sendq_slot*)malloc(sizeof(struct sendq_slot); if(!sendp) exit(1); sendp-m
13、sg=swpstate1.lfs+1; /如果輸入的幀序號大于之前幀序號,那么窗口向前滑動 sendp-timeout=1; /時延為1 sendp-next=NULL; sendq_rear-next=sendp; sendq_rear=sendp; -swpstate1.sws; +swpstate1.lfs;swpstate1.hdr.acknum=0; /ACK清空swpstate1.hdr.flags=0; /存儲緩沖池清空printf(最近收到的ACK的幀序號:%ldn,swpstate1.lar); /輸出最近收到的ACK幀序號printf(最近發(fā)送的幀序號(發(fā)送新幀后):%ld
14、n,swpstate1.lfs);/輸出最近發(fā)送幀序號(2)接收方的接收原則從總體上看是先判斷輸入的數據幀是否在接收范圍之內,若是,則繼續(xù)判斷是否符合其他接收條件;若不是,則馬上丟棄該數據幀,不再進行其他條件的判斷。struct sendq_slot *sendq_rear,*sendp,*p3,*p4; /設定變量struct recvq_slot *recvp,*recvq_rear,*p1,*p2; if(swpstate1.hdr.flags=0) /上次輸入的數據幀被放置在緩存區(qū),輸入區(qū)被清空 do /如果繼續(xù)接收數據幀則實施下面循環(huán) printf(請輸入收到的數據幀號:); sca
15、nf(%ld,&a); if(a=swpstate1.nfe&anext=NULL; swpstate1.head=recvp; else if(swpstate1.head!=NULL) recvp=(struct recvq_slot*)malloc(sizeof(struct recvq_slot); recvp-next=NULL; recvq_rear-next=recvp; recvq_rear=recvp; else printf(所輸數據不在接收窗口內!); break; /跳出該循環(huán) (3)若輸入數據幀在接收范圍內則繼續(xù)判斷并進行以下循環(huán)。 recvp-msg=a; if(r
16、ecvp-msg=swpstate1.nfe) /是否放入緩存判斷 recvp-received=1; else recvp-received=0; -swpstate1.rws; if(recvp-received=1) /數據幀被接收,則進行下面語句 a=a-1; do a=a+1; if(swpstate1.head=NULL) break; p1=swpstate1.head; flag=0; while(a!=p1-msg)&(p1-next!=NULL) p2=p1;p1=p1-next; if(a=p1-msg) flag=1; if(p1=swpstate1.head) swp
17、state1.head=swpstate1.head-next; else p2-next=p1-next; swpstate1.nfe=a+1; swpstate1.hdr.acknum=a+1; swpstate1.hdr.flags=1; while(flag=1); printf(ACK號(期待的下一幀的序號):%ldn,swpstate1.nfe); printf(沒按序接受的序號:n); p1=swpstate1.head; while(p1!=NULL) printf(%ldt,p1-msg); p1=p1-next; (4)當接收完一個數據幀時,我們可以選擇終止下面的繼續(xù)接收,
18、也可以選擇繼續(xù)接收。如果繼續(xù)接收,那么程序跳到判斷循環(huán),繼續(xù)判斷是否接收下一個數據幀,原理與上面相當。while(swpstate1.rws0)&(b=1); if(swpstate1.hdr.flags=1) p3=swpstate1.sendq-next; flag=0; while(swpstate1.hdr.acknum)!=p3-msg&p3-next!=NULL) p4=p3;p3=p3-next; if(swpstate1.hdr.acknum=p3-msg) flag=1; if(p3-msg=swpstate1.sendq-next-msg) swpstate1.sendq-
19、next=p3; else swpstate1.sendq-next=p3; swpstate1.sws=swpstate1.sws+(swpstate1.sendq-next-msg-swpstate1.lar); swpstate1.lar=swpstate1.sendq-next-msg; swpstate1.hdr.seqnum=swpstate1.hdr.acknum; printf(最近收到的ACK的幀序號(收到ACK后):%ldn,swpstate1.lar); printf(最近發(fā)送的幀序號(此時還未發(fā)送新的數據):%ldn,swpstate1.lfs); 四、結果分析滑動窗口
20、協議的基本原理就是在任意時刻,發(fā)送方都維持了一個連續(xù)的允許發(fā)送的幀的序號,稱為發(fā)送窗口;同時,接收方也維持了一個連續(xù)的允許接收的幀的序號,稱為接收窗口。發(fā)送窗口和接收窗口的序號的上下界不一定要一樣,甚至大小也可以不同。不同的滑動窗口協議窗口大小一般不同。發(fā)送方窗口內的序號代表了那些已經被發(fā)送,但是還沒有被確認的幀,或者是那些可以被發(fā)送的幀。接受方為其窗口內的每一個序號保留了一個緩沖區(qū)。與每個緩沖區(qū)相關聯的還有一位,用來指明該緩沖區(qū)是滿的還是空的。 若從滑動窗口的觀點來統一看待1比特滑動窗口、后退n及選擇重傳三種協議,它們的差別僅在于各自窗口尺寸的大小不同而已。1比特滑動窗口協議:發(fā)送窗口=1,接收窗口=1;后退N協議:發(fā)送窗口1,接收窗口=1;選擇重傳協議:發(fā)送窗口1,接收窗口五、結論(或總結)下面我以窗口大小為11,第一幀序列號為3,做程序的測試 圖5 測試結果(1)整體窗口展示,命令行界面 5-1圖(2)輸入窗口大小及第一幀序列號 5-2圖(3)當輸入的接收幀并不是ACK期待的幀,那么根據滑動窗口協議該幀不被接收,且把該幀存放在緩沖區(qū)。 5-3圖(4)若輸入的幀超過了窗口大小,那么系統會顯示該幀不在接收范圍內,并拒絕接收。 5-4圖 5-
最新文檔
- 養(yǎng)老院老人入住手續(xù)制度
- 養(yǎng)老院老人安全保障制度
- 向命運挑戰(zhàn)課件
- 城市經濟學城市化教學課件
- 救生員入職合同(2篇)
- 2024年度生物安全試劑采購與儲備合同3篇
- 2024年農業(yè)設施維修及保養(yǎng)承包合同樣本3篇
- 2025年大興安嶺貨運從業(yè)資格證模擬考試題目
- 2025年塔城貨物運輸駕駛員從業(yè)資格考試系統
- 2025年阜陽貨運從業(yè)資格證試題庫及答案
- 小紅書種草營銷師模擬題及答案(單選+多選+判斷)
- 生物化學習題庫+參考答案
- 公文寫作題庫(500道)
- 糧油食材配送投標方案(大米食用油食材配送服務投標方案)(技術方案)
- 2024年商用密碼應用安全性評估從業(yè)人員考核試題庫-下(判斷題)
- JT-T-882-2014道路甩掛運輸貨物裝載與栓固技術要求
- 獸醫(yī)內科學智慧樹知到期末考試答案章節(jié)答案2024年中國農業(yè)大學
- 衛(wèi)生部手術分級目錄(2023年1月份修訂)
- 《常用醫(yī)學檢查》PPT課件.ppt
- 《發(fā)展經濟學派》PPT課件.ppt
- 雙層罐技術要求內容
評論
0/150
提交評論