版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、課程設(shè)計(jì)報(bào)告課程:計(jì)算機(jī)通信與網(wǎng)絡(luò)題目:滑動(dòng)窗口協(xié)議的模擬實(shí)現(xiàn)班級(jí):物聯(lián)1301學(xué)號(hào):131408119 姓名:滕玲一、 任務(wù)描述1 .深入理解計(jì)算機(jī)網(wǎng)絡(luò)中可靠傳輸?shù)膶?shí)現(xiàn)原理2 .編寫兩個(gè)程序:一個(gè)模擬提供可靠傳輸服務(wù)的發(fā)送實(shí)體;一個(gè)模擬提供可靠 傳輸服務(wù)的接收實(shí)體。3 .撰寫課程設(shè)計(jì)報(bào)告.、可靠傳輸?shù)膶?shí)現(xiàn)原理1 .理想的數(shù)據(jù)傳輸:假定1:鏈路是理想白傳輸信道(不會(huì)出錯(cuò)和丟失)假定2:不管發(fā)方以多快的速率發(fā)送數(shù)據(jù),收方總來得及收下,并及時(shí)上交主 機(jī)(接收緩沖區(qū)容量無限大永不會(huì)溢出或收發(fā)速率精確相等 )2 .差錯(cuò)控制方法=確認(rèn)+重發(fā)a.為了防止數(shù)據(jù)傳輸中出錯(cuò),在發(fā)送完一個(gè)分組后,必須暫時(shí)保留已發(fā)
2、送 的分組的副本,直到收到接收方的肯定確認(rèn)。b.為了防止數(shù)據(jù)丟失,導(dǎo)致發(fā)送方死等,發(fā)送方在發(fā)出一個(gè)分組的同時(shí), 啟動(dòng)一個(gè)計(jì)時(shí)器,如果超時(shí)還沒有收到確認(rèn),則主動(dòng)重發(fā)。c.為了防止因確認(rèn)丟失導(dǎo)致的重復(fù)接收,對(duì)每個(gè)協(xié)議數(shù)據(jù)單元編號(hào),接收 方通過編號(hào)判斷分組是否重復(fù)分組。用戶請(qǐng)求發(fā)送帶序號(hào)的確認(rèn)j j 帶序號(hào)的協(xié)議數(shù)據(jù)單元向用戶提交數(shù)據(jù)(1) 一切順利的情形用戶請(qǐng)求發(fā)送帶序號(hào)的的協(xié)議數(shù)據(jù)單元發(fā)送實(shí)體c2)數(shù)據(jù)出錯(cuò)或丟失向用戶提交數(shù)據(jù). 一一帶序號(hào)的確認(rèn)計(jì)時(shí)器關(guān)聯(lián)的協(xié)議數(shù)據(jù)單元副本c3)確認(rèn)丟失討時(shí)器超時(shí).3 .流量控制方法a.流量控制要求發(fā)送方根據(jù)接收方的能力調(diào)整發(fā)送速度。b.最保守的做法是每發(fā)出一個(gè)
3、協(xié)議數(shù)據(jù)單元, 僅當(dāng)?shù)鹊浇邮辗降脑S可確認(rèn), 再發(fā)送下一個(gè)協(xié)議數(shù)據(jù)單元。但是這樣做的話,發(fā)送效率很低。即使接收方 足夠快,也要經(jīng)過兩點(diǎn)間傳播時(shí)延的 2倍時(shí)間,才能發(fā)出去一個(gè)協(xié)議數(shù)據(jù)單 元。c.可以不像上面一樣將接收方按最壞情形設(shè)想,連續(xù)發(fā)送多個(gè)協(xié)議數(shù)據(jù)單 元數(shù)。如果設(shè)想正確,在兩點(diǎn)間傳播時(shí)延的 2倍時(shí)間內(nèi),就可以發(fā)送多個(gè)協(xié) 議數(shù)據(jù)單元,提高發(fā)送效率。當(dāng)然,由于發(fā)出去的每個(gè)協(xié)議數(shù)據(jù)單元都有可 能遇到問題需要重發(fā),發(fā)送方必須設(shè)置多個(gè)發(fā)送緩沖區(qū)以保存副本,發(fā)送緩 沖區(qū)的個(gè)數(shù)決定了發(fā)送速率。當(dāng)緩沖區(qū)滿,即使有用戶請(qǐng)求到達(dá),也不會(huì)發(fā) 送。d.實(shí)用的可靠傳輸協(xié)議既要進(jìn)行差錯(cuò)控制,又要進(jìn)行流量控制。流量控制的
4、加入,給發(fā)送方實(shí)體增加了一種可能情形:當(dāng)用戶發(fā)送請(qǐng)求到達(dá),發(fā)送實(shí) 體因?yàn)榘l(fā)送緩沖區(qū)滿,拒絕發(fā)送。e.滑動(dòng)窗口協(xié)議實(shí)現(xiàn)了上述可靠傳輸原理。4 .滑動(dòng)窗口協(xié)議a.原理:所有滑動(dòng)窗口協(xié)議中,每個(gè)外出協(xié)議數(shù)據(jù)單元包含一個(gè)序號(hào):0某一 最大值,如序號(hào)長(zhǎng)度為n,最大值通常為2n-1。發(fā)送方在任何時(shí)刻,決定一個(gè)用戶請(qǐng)求是否被滿足的條件是是否有緩沖區(qū)存放副本。隨著數(shù)據(jù)的發(fā)送和確認(rèn)的到達(dá),已經(jīng)發(fā)出的協(xié)議數(shù)據(jù)單元和允許發(fā)送的協(xié)議數(shù)據(jù)單元的個(gè)數(shù)總等于發(fā)送緩沖區(qū)大小,并且它們的序號(hào)變化的規(guī)律如同在序號(hào)序列上滑動(dòng)窗口一樣。而為了防止重復(fù)接收,接收方維持著已經(jīng)看到過的序號(hào)/期望看到的序號(hào),隨著數(shù)據(jù)不斷到達(dá),這個(gè)序號(hào)也不斷
5、變化,變化的規(guī)律如同在 序號(hào)序列上滑動(dòng)窗口一樣。b.類型:停等協(xié)議:發(fā)送窗口 =1,接收窗口 =1退后n幀協(xié)議:發(fā)送窗口 1,接收窗口 =1選擇重傳協(xié)議:發(fā)送窗口 1 ,接收窗口 1三、發(fā)送方模擬程序的設(shè)計(jì)與實(shí)現(xiàn)發(fā)送實(shí)體模擬遇到的問題工cd用戶發(fā)送請(qǐng)求到達(dá):(2)某序號(hào)幀關(guān)聯(lián)的計(jì)時(shí)器超時(shí);(3)某確認(rèn)幀到達(dá)。程序輸出.程序體的動(dòng)作 (d拒絕用戶發(fā)送請(qǐng)求, (2)封裝新幀并發(fā)送,給出序號(hào); (3)重發(fā)某序號(hào)幀.開始swpstate1.head=null; /變量初始值為空swpstate1.sendq=sendq_rear=(structsendq_slot*)malloc(sizeof(str
6、uctsen dq_slot);if(!swpstate1.sendq) exit(1);sendq_rear-next=null;printf( 請(qǐng)輸入窗口大?。?;scanf(%ld,&swpstate1.sws); 輸入窗 口 大小swpstate1.rws=swpstate1.sws; /把窗口大小的值賦給變量if (swpstate1.sws0)printf( 請(qǐng)輸入第一幀的序列號(hào):);scanf(%ld,&swpstate1.hdr.seqnum); /輸入第一幀序列號(hào)swpstate1.nfe=swpstate1.hdr.seqnum; /把第一幀的值放進(jìn)緩沖池內(nèi)sendp=(s
7、truct sendq_slot*) malloc (size of(struct sendq_slot);if(!sendp) exit(1);sendp-msg=swpstate1.hdr.seqnum;sendp-timeout=1;sendp-next=null;sendq_rear-next=sendp;sendq_rear=sendp;-swpstate1.sws;swpstate1.lfs=swpstate1.hdr.seqnum; /最近發(fā)送的幀取值swpstate1.lar=swpstate1.hdr.seqnum; /最近收至 u 的確認(rèn)幀取值dowhile(swpstat
8、e1.sws0) /當(dāng)窗口大小大于0時(shí),執(zhí)行以下的循環(huán) sendp=(struct sendq_slot*)malloc(sizeof(struct sendq_slot);if(!sendp) exit(1);sendp-msg=swpstate1.lfs+1; /如果輸入的幀序號(hào)大于之前幀序號(hào),那么窗口向前滑動(dòng)sendp-timeout=1; / 時(shí)延為 1sendp-next=null;sendq_rear-next=sendp;sendq_rear=sendp;-swpstatel.sws;+swpstate1.lfs;swpstate1.hdr.acknum=0; /ack 清空sw
9、pstate1.hdr.flags=0; /存儲(chǔ)緩沖池清空printf(最近收到的 ack勺幀序號(hào):ldn,swpstate1.lar);/輸出最近收到的ack#序號(hào)printf( 最近發(fā)送的幀序號(hào)(發(fā)送新幀后):ldn,swpstate1.lfs);/輸出最近發(fā)送幀序號(hào)四、接收方模擬程序的設(shè)計(jì)與實(shí)現(xiàn)接收程序模擬程序動(dòng)作,(1)拒絕到達(dá)幀,返回某序號(hào)的確認(rèn): (2)接收該帆并向用戶提交數(shù)據(jù),返回某序號(hào)的確認(rèn).1. 接收方的接收原則從總體上看是先判斷輸入的數(shù)據(jù)幀是否在接收范圍之內(nèi), 若是,則繼續(xù)判斷是否符合其他接收條件;若不是,則馬上丟棄該數(shù)據(jù)幀,不再 進(jìn)行其他條件的判斷。struct send
10、q_slot *sendq_rear,*sendp,*p3,*p4; /設(shè)定變量struct recvq_slot *recvp,*recvq_rear,*p1,*p2;if(swpstate1.hdr.flags=0)/上次輸入的數(shù)據(jù)幀被放置在緩存區(qū),輸入?yún)^(qū)被清空do /如果繼續(xù)接收數(shù)據(jù)幀則實(shí)施下面循環(huán)printf(”請(qǐng)輸入收到的數(shù)據(jù)幀號(hào):);scanf(%ld,&a);if(a=swpstate1.nfe&anext=null;swpstate1.head=recvp;elseif(swpstate1.head!=null)recvp=(structrecvq_slot*)malloc(s
11、izeof(structrecvq_slot);recvp-next=null;recvq_rear-next=recvp;recvq_rear=recvp; else printf( 所輸數(shù)據(jù)不在接收窗口內(nèi)! );break; /跳出該循環(huán)2. 若輸入數(shù)據(jù)幀在接收范圍內(nèi)則繼續(xù)判斷并進(jìn)行以下循環(huán)。recvp-msg=a;if(recvp-msg=swpstate1.nfe) / 是否放入緩存判斷recvp-received=1; elserecvp-received=0;-swpstate1.rws;if(recvp-received=1) / 數(shù)據(jù)幀被接收,則進(jìn)行下面語句 a=a-1;do
12、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)swpstate1.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 號(hào)
13、(期待的下一幀的序號(hào)) : %ldn,swpstate1.nfe); printf( 沒按序接受的序號(hào):n);p1=swpstate1.head;while(p1!=null)printf(%ldt,p1-msg);p1=p1-next;3. 當(dāng)接收完一個(gè)數(shù)據(jù)幀時(shí),我們可以選擇終止下面的繼續(xù)接收,也可以選擇繼續(xù)接收。 如果繼續(xù)接收, 那么程序跳到判斷循環(huán), 繼續(xù)判斷是否接收下一個(gè)數(shù)據(jù)幀,原理與上面相當(dāng)。while(swpstate1.rws0)&(b=1);if(swpstate1.hdr.flags=1) p3=swpstate1.sendq-next;flag=0;while(swpsta
14、te1.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-next=p3;else swpstate1.sendq-next=p3;swpstate1.sws=swpstate1.sws+(swpstate1.sendq-next-msg-swpstate1.lar );swpstate1.lar=swpstate1.sendq-next-msg;swpstate1.
15、hdr.seqnum=swpstate1.hdr.acknum;printf( 最 近 收 到 的 ack 的 幀 序 號(hào) ( 收 到 ack 后) : %ldn,swpstate1.lar);printf( 最 近 發(fā) 送 的 幀 序 號(hào) ( 此 時(shí) 還 未 發(fā) 送 新 的 數(shù) 據(jù)) : %ldn,swpstate1.lfs);五、總結(jié)1. 程序改進(jìn)與完善該滑動(dòng)窗口協(xié)議模擬程序還有進(jìn)一步完善的余地, 例如可以對(duì)以下一些地方進(jìn)行改進(jìn):a. 改模擬程序通過命令行來實(shí)行,缺少形象直觀的界面,希望日后可以設(shè)計(jì)比較簡(jiǎn)單明了的界面來展示程序的主要模擬功能。b. 現(xiàn)在我們模擬的只是一些用序號(hào)代名的簡(jiǎn)單的幀
16、,建議可以改善程序,使該 系統(tǒng)可以模擬更接近真實(shí)的數(shù)據(jù)幀。 這樣可以聯(lián)系實(shí)際更直觀地去驗(yàn)證滑動(dòng)窗口協(xié)議。c.整體來說,滑動(dòng)窗口在實(shí)驗(yàn)中是固定的,這樣便于處理幀號(hào)和ack的確認(rèn)以及存儲(chǔ)。但建議可以在日后改進(jìn)使其變成動(dòng)態(tài)的。2. 設(shè)計(jì)總結(jié)以上為我所設(shè)計(jì)的滑動(dòng)窗口模擬程序。 在程序設(shè)計(jì)時(shí), 我首先了解了其相關(guān)原理并且參考了很多與此有關(guān)的書籍。例如,李建中和張冬冬的 滑動(dòng)窗口規(guī)模的動(dòng)態(tài)調(diào)整算法 ,王栩、李建中、王偉平的基于滑動(dòng)窗口的數(shù)據(jù)流壓縮技術(shù)及連續(xù)查詢處理方法 等等。與此同時(shí)我還向同學(xué)請(qǐng)教了很多問題,它經(jīng)過多次修改和整理, 可以基本實(shí)現(xiàn)所需功能, 但因?yàn)樗接邢蓿?此程序中也存在一定的問題,這需要
17、以后更進(jìn)一步的改進(jìn)。我希望通過本次的課程設(shè)計(jì)能夠端正我的學(xué)習(xí)態(tài)度,鍛煉我的文字表達(dá)和語言表達(dá)能力,提高我的動(dòng)手實(shí)踐能力。附源程序:#include#include#includemain()struct swphdrunsigned long seqnum;unsigned long acknum;unsigned short flags; /*flag=0ack幀 */;struct sendq_slotunsigned short timeout;/*1unsigned long msg;struct sendq_slot *next;struct recvq_slotunsigned s
18、hort received;/*1unsigned long msg;struct recvq_slot *next;struct swpstateunsigned long lar;unsigned long lfs;unsigned long sws;struct swphdr hdr;unsigned long rws;struct sendq_slot *sendq;unsigned long nfe;struct recvq_slot *head;表示這是一個(gè)數(shù)據(jù)幀, flag=1 表示這是一個(gè)時(shí)表示計(jì)時(shí)啟動(dòng), 0 時(shí)表示已收到確認(rèn)*/表示順序接收, 0 表示錯(cuò)序接受 */swpst
19、ate1;unsigned long a;int flag,b;/* 發(fā)送 */struct sendq_slot *sendq_rear,*sendp,*p3,*p4;struct recvq_slot *recvp,*recvq_rear,*p1,*p2;swpstate1.head=null;swpstate1.sendq=sendq_rear=(struct sendq_slot*)malloc(sizeof(structsendq_slot);if(!swpstate1.sendq) exit(1);sendq_rear-next=null;printf( 請(qǐng)輸入窗口大?。?);sc
20、anf(%ld,&swpstate1.sws);swpstate1.rws=swpstate1.sws;if (swpstate1.sws0)printf( 請(qǐng)輸入第一幀的序列號(hào): );scanf(%ld,&swpstate1.hdr.seqnum);swpstate1.nfe=swpstate1.hdr.seqnum;sendp=(struct sendq_slot*)malloc(sizeof(struct sendq_slot);if(!sendp) exit(1);sendp-msg=swpstate1.hdr.seqnum;sendp-timeout=1;sendp-next=nul
21、l;sendq_rear-next=sendp;sendq_rear=sendp;-swpstate1.sws;swpstate1.lfs=swpstate1.hdr.seqnum;swpstate1.lar=swpstate1.hdr.seqnum;dowhile(swpstate1.sws0)sendp=(struct sendq_slot*)malloc(sizeof(struct sendq_slot);if(!sendp) exit(1);sendp-msg=swpstate1.lfs+1;sendp-timeout=1;sendp-next=null;sendq_rear-next
22、=sendp;sendq_rear=sendp;-swpstate1.sws;+swpstate1.lfs;swpstate1.hdr.acknum=0;swpstate1.hdr.flags=0;printf(最近收到的 ack勺幀序號(hào):ldn,swpstate1.lar);printf( 最近發(fā)送的幀序號(hào)(發(fā)送新幀后) : %ldn,swpstate1.lfs);/* 接收 */ if(swpstate1.hdr.flags=0)doprintf( 請(qǐng)輸入收到的數(shù)據(jù)幀號(hào): );scanf(%ld,&a);if(a=swpstate1.nfe&anext=null;swpstate1.hea
23、d=recvp;elseif(swpstate1.head!=null)recvp=(struct recvq_slot*)malloc(sizeof(struct recvq_slot);recvp-next=null;recvq_rear-next=recvp;recvq_rear=recvp;elseprintf( 所輸數(shù)據(jù)不在接收窗口內(nèi)! );break;recvp-msg=a;if(recvp-msg=swpstate1.nfe)recvp-received=1;elserecvp-received=0;-swpstate1.rws;if(recvp-received=1)a=a-1;doa=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)swpstate1.head=swpstate1.head-next;else p2-next=p1-next;swpstate1.nfe=a+1;swpstate1.hdr.acknum=a+1;swpstate1.hdr.flags=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 獸用生物制品行業(yè)概述
- 分布式光伏發(fā)電項(xiàng)目社會(huì)責(zé)任與可持續(xù)性分析
- 城鄉(xiāng)生活污水處理項(xiàng)目組織與管理結(jié)構(gòu)
- 濕地保護(hù)河道清淤實(shí)施方案
- 酒店電梯應(yīng)急救援預(yù)案
- 乒乓球硬件課程設(shè)計(jì)
- 2024市政道路施工合同書
- 2024年專業(yè)版:高級(jí)餐廳與食材供應(yīng)商之間的供貨與質(zhì)量保證合同
- 2024年衛(wèi)星導(dǎo)航技術(shù)研發(fā)與應(yīng)用合同
- 2024年三個(gè)孩子教育費(fèi)用分擔(dān)合同
- 杜甫生平介紹最終版課件
- 專題七馬克思主義剩余的價(jià)值理論課件
- 超星爾雅學(xué)習(xí)通《改革開放史(王向明)》章節(jié)測(cè)試答案
- 三級(jí)數(shù)學(xué)下冊(cè) 面積1 滬教
- 浦發(fā)銀行個(gè)人信用報(bào)告異議申請(qǐng)表
- 河北省石家莊市藥品零售藥店企業(yè)藥房名單目錄
- 科學(xué)實(shí)驗(yàn):磁懸浮課件
- 六病區(qū)護(hù)理創(chuàng)新 改良冰敷袋課件
- 乒乓球技術(shù)統(tǒng)計(jì)表
- 初中地理繪制等高線地形圖教案
- 流程定義110工廢料廢處理
評(píng)論
0/150
提交評(píng)論