數(shù)據(jù)鏈路層滑動窗口協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)_第1頁
數(shù)據(jù)鏈路層滑動窗口協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)_第2頁
數(shù)據(jù)鏈路層滑動窗口協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)_第3頁
數(shù)據(jù)鏈路層滑動窗口協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)_第4頁
數(shù)據(jù)鏈路層滑動窗口協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

數(shù)據(jù)鏈路層滑動窗口協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)PAGEPAGE1數(shù)據(jù)鏈路層滑動窗口協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)實(shí)驗(yàn)報(bào)告一、實(shí)驗(yàn)任務(wù)及內(nèi)容利用所學(xué)數(shù)據(jù)鏈路層原理,設(shè)計(jì)一個滑動窗口協(xié)議并在仿真環(huán)境下編程實(shí)現(xiàn)有噪音信道環(huán)境下的可靠的雙工通信。信道模型為8000bps全雙工衛(wèi)星信道,信道傳播時延270毫秒,信道誤碼率為10-5,信道提供字節(jié)流傳輸服務(wù),網(wǎng)絡(luò)層分組長度在240~256字節(jié)范圍。實(shí)現(xiàn)有噪音信道環(huán)境下的無差錯傳輸。運(yùn)行程序并檢查在信道沒有誤碼和存在誤碼兩種情況下的信道利用率。提高滑動窗口協(xié)議信道利用率,根據(jù)信道實(shí)際情況合理地為協(xié)議配置工作參數(shù),包括滑動窗口的大小和重傳定時器時限以及ACK搭載定時器的時限。實(shí)驗(yàn)環(huán)境Windows7環(huán)境PC機(jī),MicrosoftVisualC++6.0集成化開發(fā)環(huán)境二、協(xié)議設(shè)計(jì)協(xié)議的分層結(jié)構(gòu)及層服務(wù):包括物理層,數(shù)據(jù)鏈路層和網(wǎng)絡(luò)層三層。該實(shí)驗(yàn)主要設(shè)計(jì)數(shù)據(jù)鏈路層協(xié)議,為實(shí)現(xiàn)有噪聲環(huán)境下高信道利用率傳輸,我們采用回退n幀(gobackn)技術(shù)的協(xié)議。發(fā)送方窗口大小為31;通過捎帶確認(rèn)來完成可靠的數(shù)據(jù)通信;出現(xiàn)信道誤碼導(dǎo)致收幀出錯時,接受方丟棄所有后續(xù)幀,待定時器超時后發(fā)送方重發(fā)。該層提供服務(wù):從網(wǎng)絡(luò)層接受要發(fā)送的數(shù)據(jù)包,將之分拆成數(shù)據(jù)幀;按一定的成幀方案完成分幀,加校驗(yàn)碼,加ack等操作;進(jìn)行適當(dāng)?shù)牧髁颗袛嗪蛽砣刂?;啟動定時器將之傳遞給物理層。數(shù)據(jù)幀經(jīng)信道傳送給接受方,接受方數(shù)據(jù)鏈路層執(zhí)行與成幀相逆的操作;處理ack信息,終止定時器(或啟動ack定時器,ack成幀傳送);判斷是否為欲接受數(shù)據(jù),數(shù)據(jù)是否出錯,提交給網(wǎng)絡(luò)層。退回N步工作原理示意圖:實(shí)驗(yàn)所形成幀(成幀方案):DATAFramen+=========+========+========+===============+========+|KIND(1)|ACK(1)|SEQ(1)|DATA(240~256)|CRC(4)|+=========+========+========+===============+========+ACKFrame+=========+========+========+|KIND(1)|ACK(1)|CRC(4)|+=========+========+========+NAKFrame+=========+========+========+|KIND(1)|ACK(1)|CRC(4)|+=========+========+========+CRC校驗(yàn)和的多項(xiàng)式定義:本次實(shí)驗(yàn)采用的CRC校驗(yàn)方案為CRC-32,與IEEE802.3以太網(wǎng)校驗(yàn)和生成多項(xiàng)式相同。生成多項(xiàng)式為:x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x1+1校驗(yàn)和附加在數(shù)據(jù)幀尾部,接受方用帶校驗(yàn)和的數(shù)據(jù)來邏輯除以生成多項(xiàng)式,余數(shù)為零則數(shù)據(jù)無誤碼,反之有誤碼等待發(fā)送方重傳。可靠通信和誤碼控制方案:通過捎帶確認(rèn)來完成可靠的數(shù)據(jù)通信;出現(xiàn)信道誤碼導(dǎo)致收幀出錯時,接受方丟棄所有后續(xù)幀,此時發(fā)送方長久接受不到確認(rèn)信息,引發(fā)定時器超時后發(fā)送方重發(fā);接受方無數(shù)據(jù)傳送導(dǎo)致發(fā)送方無法收到捎帶確認(rèn)時,接受方確認(rèn)定時器超時,構(gòu)造一確認(rèn)幀單獨(dú)傳送。三、軟件設(shè)計(jì)給出程序的數(shù)據(jù)結(jié)構(gòu),模塊之間的調(diào)用關(guān)系和功能,程序流程。本次實(shí)驗(yàn)我們對go-back-N協(xié)議進(jìn)行了編寫,描述如下:數(shù)據(jù)結(jié)構(gòu):typedefenum{false,true}boolean;//blooleantypetypedefunsignedcharseq_nr;//sequenceoracknumberstypedefunsignedcharpacket[PKT_LEN];//用數(shù)組存放數(shù)據(jù)/*FRAMEkind*/#defineData1#defineAck2#defineNak3staticintphl_ready://物理層狀態(tài)next_frame_to_send;//MAX_SEQ>1;usedforoutboundstream,andinitianizenextframegoingoutack_expected;//oldestframeasyetunacknowledged,andinitianizenextackexpectedinboundframe_expected;//nextframeexpectedoninboundstream,andinitializenumberofframeexpectedinboundbuffer[MAX_SEQ+1];//buffersfortheoutboundstreamnbuffered;//outputbufferscurrentlyinuse,andinitiallynopacketsarebufferedbufferLen[MAX_SEQ+1]//bufferLen存儲每個buffer中數(shù)據(jù)的有效長度typedefstruct{//幀結(jié)構(gòu) unsignedcharkind;seq_nrack;seq_nrseq;packetinfo;unsignedcharcrc[4];}frame;模塊結(jié)構(gòu):給出程序中所設(shè)計(jì)的子程序完成的功能,子程序每個參數(shù)的意義。A)staticbooleanbetween(seq_nra,seq_nrb,seq_nrc)//判斷b是否是在a、c之間的幀B)staticvoidput_frame(unsignedchar*frame,intlen)//crc編碼并向物理層發(fā)送C)send_data(unsignedcharkind,seq_nrframe_nr,seq_nrframe_expected,packetbuffer[],intdlen[])//生成幀D)intmain()//主函數(shù),分為五個事件(1)NETWORK_LAYER_READY,事件發(fā)生后從網(wǎng)絡(luò)層讀數(shù)據(jù),成幀;若當(dāng)前物理層可用,發(fā)送。(2)PHYSICAL_LAYER_READY,事件發(fā)生后,若有未發(fā)送的幀,發(fā)送,否則置物理層狀態(tài)為可用。(3)DATA_INCOMING,事件發(fā)生后,來了arg個字節(jié)的數(shù)據(jù),每接受一個數(shù)據(jù),判斷是否為幀尾;若為幀尾,提取一幀,去掉填充,進(jìn)行校驗(yàn);若校驗(yàn)結(jié)果正確,處理ack,然后處理數(shù)據(jù)。接受完arg個字節(jié),跳出。(4)ACK_TIMEOUT,事件發(fā)生后,產(chǎn)生一個不含數(shù)據(jù)的ack幀,等待直到物理層有效,發(fā)送。(5)DATA_TIMEOUT,事件發(fā)生后,重發(fā)ack_expected和next_frame_to_send之間的幀。算法流程:畫出流程圖,描述算法的主要流程。結(jié)束發(fā)送完畢否數(shù)據(jù)幀是否丟失A生成幀并發(fā)送,B接收幀,并返回信息是是回退重傳否連接是否成功新建A、B兩站自動連接開始結(jié)束發(fā)送完畢否數(shù)據(jù)幀是否丟失A生成幀并發(fā)送,B接收幀,并返回信息是是回退重傳否連接是否成功新建A、B兩站自動連接開始四、實(shí)驗(yàn)結(jié)果分析(1)描述你所實(shí)現(xiàn)的協(xié)議軟件是否實(shí)現(xiàn)了誤碼信道環(huán)境中無差錯傳輸功能此協(xié)議軟件實(shí)現(xiàn)了誤碼信道環(huán)境中無差錯傳輸功能(2)程序的健壯性在較低誤碼率的信道條件下,該程序運(yùn)行平穩(wěn),未出現(xiàn)任何差錯,健壯性良好,在高誤碼率的信道條件下,程序運(yùn)行有時會出現(xiàn)中斷,但大多數(shù)時候均運(yùn)行超過二十分鐘以上,故本程序健壯性良好,但仍有值得改進(jìn)之處。(3)協(xié)議參數(shù)的選?。夯瑒哟翱诘拇笮?,重傳定時器的時限2000,ACK搭載定時器的時限為300。在go_back_n協(xié)議中(假設(shè)接受方一直有數(shù)據(jù)發(fā)送,即無ack定時器超時現(xiàn)象),滑動窗口的大小M,信道傳輸時延a,發(fā)送速率c,幀大小f在滿足如下關(guān)系時信道利用率(M*(f/c)/[2a+2(f/c)])接近100%:M>=[2a+2*(f/c)]/(f/c);由于實(shí)際數(shù)據(jù)傳送很可能在某段時間類接受方無數(shù)據(jù)反送,涉及ack幀單獨(dú)傳送問題,故一般信道利用率不可能達(dá)到100%,但M的選擇至少要滿足公式。至于防止M過大的問題,可通過實(shí)際測試的結(jié)果分析來得到合適的M值?;瑒哟翱诖笮〉倪x擇直接涉及到信道利用率和數(shù)據(jù)擁塞的問題;若太小,會導(dǎo)致信道空閑,利用率很低;若太大,數(shù)據(jù)發(fā)送過快,會造成接受方數(shù)據(jù)鏈路層來不及處理,數(shù)據(jù)物理層及信道發(fā)生擁塞現(xiàn)象導(dǎo)致數(shù)據(jù)丟失,出錯率增大,重傳率高。8000kbps的信道發(fā)送256字節(jié)的幀需要256*8/8000=256ms(256+270*2)/256=3.X,最大窗口應(yīng)該7就行了.重傳定時器的大小由發(fā)送速率、信道時延及接受方的發(fā)送頻率等確定,太小會頻繁重發(fā),太大也會降低信道利用率。結(jié)合多項(xiàng)測試最終定為2000ms。ack搭載定時器的時限由本站的發(fā)送頻率決定,一方面,為了節(jié)省帶寬應(yīng)該盡量搭載使用。另一方面當(dāng)本站長時間無數(shù)據(jù)發(fā)送時應(yīng)該盡量早點(diǎn)發(fā)送ack幀。經(jīng)過數(shù)項(xiàng)測試,定位300ms。(4)理論分析:無差錯條件下分組層能獲得的最大信道利用率應(yīng)該是256/262*100%=97.7,而在誤碼率為1e-5的情況下應(yīng)為256/262(1+262*8*0.00001)=95.5。(5)實(shí)驗(yàn)結(jié)果分析:你的程序運(yùn)行實(shí)際達(dá)到了什么樣的效率,比對理論推導(dǎo)給出的結(jié)論,有沒有差距?給出原因。有沒有改進(jìn)的辦法?如果沒有時間把這些方法付諸編程實(shí)施,介紹你的方案。序號命令說明運(yùn)行時間(秒)效率(%)備注AB1datalinkaudatalinkbu無誤碼信道數(shù)據(jù)傳輸1957.41352.5896.972datalinkadatalinkb站點(diǎn)A分組層平緩方式發(fā)出數(shù)據(jù),站點(diǎn)B周期性交替“發(fā)送100秒,停發(fā)100秒”1525.15648.5787.693datalinkafudatalinkbfu無誤碼信道,站點(diǎn)A和B的分組層都洪水式產(chǎn)生分組1586.40996.9796.974datalinkafdatalinkbf站點(diǎn)A/B的分組層都洪水式產(chǎn)生分組1899.68885.7985.805datalinkaf–ber1e-4datalinkbf–ber1e-4站點(diǎn)A/B的分組層都洪水式產(chǎn)生分組,線路誤碼率設(shè)為10-41028.14938.0838.60實(shí)驗(yàn)成果離預(yù)期效果存在差距,尤其在有誤碼的條件下,信道利用率與理論之相比相差很大。原因有幾個方面:填充字節(jié)和發(fā)送時候的延遲,這一方面無法縮短;信道空閑,只是因?yàn)榇翱诖笮?、重傳定時器的時限和ACK搭載定時器的時限的選擇不是很恰當(dāng),這方面,需要多做測試來確定發(fā)送端、接收端的延時,再確定具體數(shù)值;另外,ack的發(fā)送可能有些滯后,沒有一個非常合理的發(fā)送機(jī)制。還有一點(diǎn),從網(wǎng)絡(luò)層受到數(shù)據(jù)后,我是把數(shù)據(jù)成幀后存起來的,現(xiàn)在看來,考慮到ack的更新,在發(fā)送時再成幀更有效率些。(6)存在的問題:在“表3性能測試記錄表”中給出了7種測試方案,在測試中你的程序有沒有失敗,或者,雖未失敗,但表現(xiàn)出來的性能仍有差距,你的程序中還存在哪些問題?測試中沒有失敗,不過性能差距挺大。主要是超時時限和窗口大小的問題。五、研究和探索的問題1.start_timer()不是在啟動時就計(jì)時,而是在物理層發(fā)送了才開始計(jì)時;相對的,start_ack_timer()是以啟動就開始計(jì)時。前者要考慮發(fā)送緩沖區(qū)的等待時間,而后者考慮的是ack是否被裝到了幀上。2.重傳時限設(shè)定得比較長,大部分情況下都不會超時。實(shí)踐證明,這種情況下效率相對更高一點(diǎn)。3.流量控制方面,首先窗口的大小可以控制。然后發(fā)送和接收緩存區(qū)的大小也限制了流量。六、實(shí)驗(yàn)總結(jié)和心得體會(1)完成本次實(shí)驗(yàn)的實(shí)際上機(jī)調(diào)試時間是多少?三天,第一天花了大概7小時討論程序結(jié)構(gòu)以及函數(shù)的調(diào)用,第二天完成編程并調(diào)試,第三天寫文檔和性能測試,(2)編程工具方面遇到了哪些問題?包括Windows環(huán)境和VC軟件的安裝問題。該實(shí)驗(yàn)要用vc++6.0,并且要在doc系統(tǒng)運(yùn)行生成的exe文件。(3)編程語言方面遇到了哪些問題?包括C語言使用和對C語言操控能力上的問題。大概沒遇到什么問題。。遇到的只是一些函數(shù)的調(diào)用上。(4)協(xié)議方面遇到了哪些問題?包括協(xié)議機(jī)制的設(shè)計(jì)錯誤,發(fā)現(xiàn)協(xié)議死鎖,或者不能正確工作,協(xié)議參數(shù)的調(diào)整等問題。成幀時,開始我們幀結(jié)構(gòu)是(ack幀序號數(shù)據(jù)長度數(shù)據(jù)內(nèi)容校驗(yàn)和),長度在256時成了0,后來在成幀時去掉了數(shù)據(jù)長度這項(xiàng)。(5)開發(fā)庫方面遇到了哪些問題?包括庫程序中的BUG,庫函數(shù)文檔不夠清楚導(dǎo)致誤解,庫函數(shù)設(shè)計(jì)在所提供的功能結(jié)構(gòu)上的缺憾導(dǎo)致編程效率低下。這些問題或

溫馨提示

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

評論

0/150

提交評論