版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
計算機(jī)網(wǎng)絡(luò)滑動窗口協(xié)議實驗報告目錄實驗內(nèi)容和實驗環(huán)境描述 (2)實驗內(nèi)容 (2)實驗?zāi)康模?)實驗環(huán)境(2)協(xié)議設(shè)計(3)軟件設(shè)計(4)PartA選擇重傳協(xié)議數(shù)據(jù)結(jié)構(gòu)(4)模塊結(jié)構(gòu)(6)算法流程(7)PartBgobackn協(xié)議數(shù)據(jù)結(jié)構(gòu)(8)模塊結(jié)構(gòu)(9)算法流程(10)實驗結(jié)果分析(11)探究問題(13)實驗總結(jié)與心得體會(14)一、實驗內(nèi)容和實驗環(huán)境描述實驗內(nèi)容利用所學(xué)數(shù)據(jù)鏈路層原理,自己設(shè)計一個滑動窗口協(xié)議,在仿真環(huán)境下編程實現(xiàn)有噪音信道環(huán)境下兩站點之間無差錯雙工通信。信道模型為8000bps全雙工衛(wèi)星信道,信道傳播時延270毫秒,信道誤碼率為10-5實驗?zāi)康耐ㄟ^該實驗,進(jìn)一步鞏固和深刻理解數(shù)據(jù)鏈路層誤碼檢測的CRC校驗技術(shù),以及滑動窗口的工作機(jī)理。滑動窗口機(jī)制的兩個主要目的:(1)實現(xiàn)有噪音信道環(huán)境下的無差錯傳輸;(2)充分利用傳輸信道的帶寬。在程序能夠穩(wěn)定運行并成功實現(xiàn)第一個目標(biāo)之后,運行程序并檢查在信道沒有誤碼和存在誤碼兩種情況下的信道利用率。為實現(xiàn)第二個目標(biāo),提高滑動窗口協(xié)議信道利用率,需要根據(jù)信道實際情況合理地為協(xié)議配置工作參數(shù),包括滑動窗口的大小和重傳定時器時限以及ACK搭載定時器的時限。實驗環(huán)境Windows10環(huán)境PC機(jī)MicrosoftVisualStudio2017集成開發(fā)環(huán)境協(xié)議設(shè)計本次試驗主要設(shè)計數(shù)據(jù)鏈路層,實驗中分別設(shè)計了gobackn協(xié)議與選擇重傳協(xié)議。主要涉及到的層次結(jié)構(gòu)是物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層。物理層:為數(shù)據(jù)鏈路層提供的服務(wù)為8000bps,270ms傳播延時,10-5誤碼率的字節(jié)流傳輸通道。數(shù)據(jù)鏈路層利用接口函數(shù)send_frame()和recv_frame()網(wǎng)絡(luò)層:利用數(shù)據(jù)鏈路層提供的“可靠的分組傳輸”服務(wù),在站點A與站點B之間交換長度固定為256字節(jié)的數(shù)據(jù)分組。網(wǎng)絡(luò)層把產(chǎn)生的分組交付數(shù)據(jù)鏈路層,并接受數(shù)據(jù)鏈路層提交來的數(shù)據(jù)分組。數(shù)據(jù)鏈路層:通過get_packet()函數(shù)從網(wǎng)絡(luò)層得到一個分組,將之組裝成幀,向物理層發(fā)送,啟動計時器;進(jìn)行適當(dāng)?shù)牧髁靠刂?;?shù)據(jù)幀經(jīng)信道傳送給接收方;接收方數(shù)據(jù)鏈路層終止定時器(或啟動ack定時器),判斷數(shù)據(jù)是否出錯,若正確的話,是否為欲接受數(shù)據(jù)。若所受到的數(shù)據(jù)幀是期待接受的數(shù)據(jù)幀,則通過put_packet()函數(shù)將其緩沖區(qū)內(nèi)緩存的數(shù)據(jù)依序提交給網(wǎng)絡(luò)層。可靠通信的實現(xiàn):通過捎帶確認(rèn)來完成可靠的數(shù)據(jù)通信。在選擇重傳協(xié)議中:1)出現(xiàn)信道誤碼導(dǎo)致收幀出錯時,若未發(fā)送過該幀的NAK則接收方發(fā)NAK幀要求發(fā)送方重傳;若已經(jīng)發(fā)送過NAK,則等待定時器超時后發(fā)送方重發(fā);2)當(dāng)收到的幀位于接收窗口內(nèi),但不是接收窗口下邊界的一幀時,將該幀進(jìn)行緩存,待窗口下邊界的幀到來后依序遞交給網(wǎng)絡(luò)層;3)接收方無數(shù)據(jù)傳送導(dǎo)致發(fā)送方無法收到捎帶確認(rèn)時,接收方ACK定時器超時,構(gòu)造ACK幀單獨傳送。在gobackn協(xié)議中:1)出現(xiàn)信道誤碼導(dǎo)致收幀出錯時,等待定時器超時后發(fā)送方重發(fā);2)當(dāng)收到的幀不是期望收到的數(shù)據(jù)幀時,不做處理,等待定時器超時后發(fā)送方重發(fā);3)接收方無數(shù)據(jù)傳送導(dǎo)致發(fā)送方無法收到捎帶確認(rèn)時,接收方ACK定時器超時,構(gòu)造ACK幀單獨傳送。軟件設(shè)計PartA.選擇重傳協(xié)議數(shù)據(jù)結(jié)構(gòu)幀結(jié)構(gòu)定義:typedefstruct{ unsignedcharkind; //類型FRAME_DATA、FRAME_ACK、FRAME_NAK seq_nrack; //ack序號 seq_nrseq; //幀序號 packetdata; //數(shù)據(jù)域 unsignedintpadding; //填充部分保存CRC校驗和}frame;各類幀格式如下 DATAFrame+=========+========+========+===============+========+|KIND(1)|SEQ(1)|ACK(1)|DATA(240~256)|CRC(4)|+=========+========+========+===============+========+ACKFrame+=========+========+========+|KIND(1)|ACK(1)|CRC(4)|+=========+========+========+NAKFrame+=========+========+========+|KIND(1)|ACK(1)|CRC(4)|+=========+========+========+全局變量定義boolno_nak=true; //nak發(fā)送標(biāo)志staticintphl_ready=0; //物理層就緒標(biāo)志常量定義幀類型:#defineFRAME_DATA1#defineFRAME_ACK2#defineFRAME_NAK3發(fā)生事件類型: #defineNETWORK_LAYER_READY0#definePHYSICAL_LAYER_READY1#defineFRAME_RECEIVED2#defineDATA_TIMEOUT3#defineACK_TIMEOUT4 其他內(nèi)容: #defineMAX_SEQ15 //序號最大值#defineDATA_TIMER3850 //數(shù)據(jù)幀超時時間#defineACK_TIMER1000 //ack超時時間#defineNR_BUFS8 //滑動窗口大小主函數(shù)變量定義seq_nrack_expected; //發(fā)送窗口下邊界seq_nrnext_frame_to_send; //發(fā)送窗口上邊界seq_nrframe_expected; //接收窗口下邊界seq_nrtoo_far; //接收窗口上邊界seq_nrnbuffered; //緩沖區(qū)內(nèi)未上交的幀數(shù)目packetin_buf[NR_BUFS]; //接收緩沖區(qū)packetout_buf[NR_BUFS]; //發(fā)送緩沖區(qū)boolarrived[NR_BUFS]; //標(biāo)志緩沖區(qū)是否空閑或該幀是否到達(dá)inti; //i計數(shù)變量intarg,len=0; //len幀長度arg獲得事件相關(guān)信息framer; //數(shù)據(jù)幀intevent; //事件類型模塊結(jié)構(gòu)子函數(shù)定義及功能介紹staticintbetween(seq_nra,seq_nrb,seq_nrc)功能:判斷某一幀是否落在窗口內(nèi)參數(shù):a、c分別為上下邊界,b為需要判斷的序號staticvoidput_frame(unsignedchar*frame,intlen)功能:計算校驗和后添加至幀尾,并向物理層發(fā)送參數(shù):frame指示需要計算的校驗和的幀len表示該幀的長度staticvoidsend_data(unsignedcharfk,seq_nrframe_nr,seq_nrframe_expected,packetbuffer[])功能:向物理層發(fā)送數(shù)據(jù)幀參數(shù):fk表示發(fā)送幀的類型frameframe_nr表示將要發(fā)送的幀的序號frame_expected表示接收窗口的下邊界buffer[]表示發(fā)送方緩沖區(qū)子函數(shù)之間的調(diào)用關(guān)系c)調(diào)用b)進(jìn)行幀的發(fā)送,其余函數(shù)之間無調(diào)用關(guān)系算法流程PartB.gobackn協(xié)議數(shù)據(jù)結(jié)構(gòu)幀結(jié)構(gòu)定義:typedefstruct{ unsignedcharkind; //類型FRAME_DATA、FRAME_ACK、FRAME_NAK seq_nrack; //ack序號 seq_nrseq; //幀序號 packetdata; //數(shù)據(jù)域 unsignedintpadding; //填充部分保存CRC校驗和}frame;各類幀格式如下 DATAFrame+=========+========+========+===============+========+|KIND(1)|SEQ(1)|ACK(1)|DATA(240~256)|CRC(4)|+=========+========+========+===============+========+ACKFrame+=========+========+========+|KIND(1)|ACK(1)|CRC(4)|+=========+========+========+NAKFrame+=========+========+========+|KIND(1)|ACK(1)|CRC(4)|+=========+========+========+全局變量定義staticintphl_ready=0; //物理層就緒標(biāo)志常量定義幀類型:#defineFRAME_DATA1#defineFRAME_ACK2#defineFRAME_NAK3發(fā)生事件類型: #defineNETWORK_LAYER_READY0#definePHYSICAL_LAYER_READY1#defineFRAME_RECEIVED2#defineDATA_TIMEOUT3#defineACK_TIMEOUT4 其他內(nèi)容: #defineMAX_SEQ7 //序號最大值#defineDATA_TIMER2400 //數(shù)據(jù)幀超時時間#defineACK_TIMER500 //ack超時時間主函數(shù)變量定義intevent,arg; //event事件類型arg獲得事件相關(guān)信息framef; //數(shù)據(jù)幀intlen=0; //len幀長度inti; //i計數(shù)變量seq_nrnext_frame_to_send; //發(fā)送窗口上邊界seq_nrack_expected; //發(fā)送窗口下邊界seq_nrframe_expected; //接收窗口值packetbuffer[MAX_SEQ+1];//數(shù)據(jù)幀緩存區(qū)seq_nrnbuffered; //緩沖區(qū)內(nèi)未上交的幀數(shù)目模塊結(jié)構(gòu)子函數(shù)定義及功能介紹staticintbetween(seq_nra,seq_nrb,seq_nrc)功能:判斷某一幀是否落在窗口內(nèi)參數(shù):a、c分別為上下邊界,b為需要判斷的序號staticvoidput_frame(unsignedchar*frame,intlen)功能:計算校驗和后添加至幀尾,并向物理層發(fā)送參數(shù):frame指示需要計算的校驗和的幀len表示該幀的長度staticvoidsend_data_frame(unsignedcharfk,seq_nrframe_nr,seq_nrframe_expected,packetbuffer[])功能:向物理層發(fā)送數(shù)據(jù)幀參數(shù):fk表示發(fā)送幀的類型frameframe_nr表示將要發(fā)送的幀的序號frame_expected表示接收窗口的邊界buffer[]表示發(fā)送方緩沖區(qū)staticvoidsend_ack_frame(unsignedcharfk,seq_nrframe_nr,seq_nrframe_expected,packetbuffer[])功能:向物理層發(fā)送ack幀參數(shù):fk表示發(fā)送幀的類型frameframe_nr表示將要發(fā)送的幀的序號,此時為0frame_expected表示接收窗口的邊界buffer[]表示發(fā)送方緩沖區(qū)子函數(shù)之間的調(diào)用關(guān)系與d)調(diào)用b)進(jìn)行幀的發(fā)送,其余函數(shù)之間無調(diào)用關(guān)系算法流程實驗結(jié)果分析描述你所實現(xiàn)的協(xié)議軟件是否實現(xiàn)了有誤碼信道環(huán)境中無差錯傳輸功能。Gobackn與選擇重傳協(xié)議均可實現(xiàn)有誤碼信道中的無差錯傳輸功能;協(xié)議可以發(fā)現(xiàn)校驗和錯誤,從而使發(fā)送端重傳錯誤幀并且通過緩存可以實現(xiàn)數(shù)據(jù)幀順序上交給網(wǎng)絡(luò)層。程序的健壯性如何,能否可靠的運行較長時間。Gobackn與選擇重傳協(xié)議均可實現(xiàn)較長時間的可靠運行,并且協(xié)議效率較為穩(wěn)定。協(xié)議參數(shù)的選?。夯瑒哟翱诖笮〉拇_定由于分組為固定長度256字節(jié),再加上鏈路層成幀時,在數(shù)據(jù)幀前后添加的幀頭(1字節(jié)的類型說明,1字節(jié)的幀序列號,1字節(jié)的ACK號)和幀尾(4字節(jié)的CRC32校驗位),每個數(shù)據(jù)幀都是263字節(jié),所以發(fā)送一幀的時間為:Tf=263*8/8000=263ms。線路延遲為Td=270ms,并且采用ack捎帶回復(fù)技術(shù)。最好的情況下,設(shè)發(fā)送窗口大小為x,則為了獲得更高的線路利用率,需求出滿足Cr=Ws*Tf2(Tf+Td)=1的最小的Ws值,即為4 一般說來,窗口越大,同時可以發(fā)送的幀越多,效率會越高,但窗口太大可能導(dǎo)致:1.發(fā)送的幀太多,物理層排序的隊列過長,嚴(yán)重時會出現(xiàn)物理層擁塞現(xiàn)象;2.誤碼率增加,從而造成很多幀要重傳。但計算得到的4也不一定是最佳的值,因為接收方收到一幀后并不一定立即有數(shù)據(jù)回傳,因而要等待一段時間??紤]到ACK定時,窗口大小應(yīng)為[2*(發(fā)送時間+線路延遲)+ACK定時]/發(fā)送時間。通過設(shè)置不同的窗口大小比較其實際效率,發(fā)現(xiàn)一次最多發(fā)送的數(shù)據(jù)幀數(shù)目設(shè)為7時效率比較高,所以確定窗口大小為7。那么在gobackn協(xié)議中,MAX_SEQ為7,選擇重傳協(xié)議中,MAX_SEQ為15。ACK搭載定時器的確定當(dāng)發(fā)送方一次性發(fā)送7幀時,接收方收到第一幀開始ACK計時,直到完整收到最后一幀所需的時間為6Tf+Td=1848ms。若想使發(fā)送方及時接收到ACK,那么定時器時間應(yīng)小于1848ms,但不能過于小,故取中間值1000ms。重傳定時器的確定從發(fā)送一幀到該幀的ACK被捎帶回復(fù)所需的時間為2*(發(fā)送時間+線路延遲)。代入數(shù)據(jù)為1066ms。但考慮到實際情況中,接收方接收到后不一定立刻有數(shù)據(jù)幀回傳,再加上回傳數(shù)據(jù)可能在物理層排隊隊列中的等待時間,通過嘗試不同的取值最終確定為3000ms理論分析根據(jù)上述分析,在無差錯信道中,當(dāng)發(fā)送窗口大于5時,信道的效率可以達(dá)到100%。但由于需要攜帶幀頭、幀尾以及校驗和信息,所以最大信道利用率約為256263而在差錯率為10-5的信道中,100000bit可發(fā)送100000263實驗結(jié)果分析性能測試記錄表探究問題CRC校驗?zāi)芰ΑRC碼的生成多項式通常采用g(x)=(1+x)p(x)的形式,其中p(x)為本原多項式(primitivepolynomial)。CRC的驗錯能力可以分析如下:1)由于采用(1+x),所以碼字多項式作為g(x)的倍數(shù)必定有偶數(shù)項,因此,所有奇數(shù)個錯誤可以被檢驗出來。2)雙比特錯誤可以表示為xj+xk=xj(1+x3)生成多項式具有g(shù)x=1+g1x+get_ms()的實現(xiàn)c語言標(biāo)準(zhǔn)庫time.h中提供了用一些關(guān)于時間操作的函數(shù)可以實現(xiàn)get_ms()函數(shù)??梢岳玫暮瘮?shù)有clock()函數(shù)。該函數(shù)返回程序開始執(zhí)行后占用的處理器是時間,若無法獲得占用時間則返回-1。但由于計時的起點是開始通信之時,故需要一個靜態(tài)變量start_time來來記錄通信起始時間,然后每次調(diào)用函數(shù)時,獲取當(dāng)前時間current_time,返回current_time-start_time。定時器設(shè)計start_timer()是對數(shù)據(jù)幀的定時,該定時時限的時間起點應(yīng)該是該幀開始發(fā)送的時刻,所以要等到物理層排隊序列低于50個字節(jié),該幀可以發(fā)送才開始計時;而且是針對每個數(shù)據(jù)幀都有自己的一個定時器,所以參數(shù)里要有幀的序列號;在同一幀的一個定
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 班干部的培養(yǎng)與管理計劃
- 病歷室護(hù)士細(xì)致記錄病史
- 物流運輸行業(yè)美工工作經(jīng)驗分享
- 《慢性病危險因素》課件
- 家政公司前臺服務(wù)總結(jié)
- 《康復(fù)治療學(xué)總論》課件
- 2024年全球及中國混合云行業(yè)概述及特征調(diào)研報告
- 2021年廣東省惠州市公開招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 2024年河南省鄭州市公開招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 2023年安徽省銅陵市公開招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 品質(zhì)助理述職報告
- 2023-2024學(xué)年湖南省長沙市雨花區(qū)外研版(三起)五年級上冊期末質(zhì)量檢測英語試卷
- 超越指標(biāo):存量時代降本增效的利器
- 部隊休假安全教育課件
- 2024縣級應(yīng)急廣播系統(tǒng)技術(shù)規(guī)范
- 一年級道德與法治無紙筆期末檢測質(zhì)量分析
- 視頻剪輯師工作總結(jié)
- 新疆維吾爾自治區(qū)巴音郭楞蒙古自治州2023-2024學(xué)年二年級上學(xué)期期末數(shù)學(xué)試卷
- 華為公司服務(wù)流程
- ZPW-2000A四線制改變運行方向電路
- 中醫(yī)跟師總結(jié)論文3000字(通用3篇)
評論
0/150
提交評論