版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、計(jì)算機(jī)網(wǎng)絡(luò)選擇重傳協(xié)議實(shí)驗(yàn)報(bào)告1.實(shí)驗(yàn)內(nèi)容和實(shí)驗(yàn)環(huán)境描述實(shí)驗(yàn)內(nèi)容:利用所學(xué)數(shù)據(jù)鏈路層原理,設(shè)計(jì)一個(gè)滑動(dòng)窗口協(xié)議,在仿真環(huán)境下編程實(shí)現(xiàn)有噪音信道環(huán)境下兩站點(diǎn)之間無差錯(cuò)雙工通信。信道模型為8000bps 全雙工衛(wèi)星信道,信道傳播時(shí)延270毫秒,信道誤碼率為10-5,信道提供字節(jié)流傳輸服務(wù),網(wǎng)絡(luò)層分組長度固定為256字節(jié)。實(shí)驗(yàn)環(huán)境:Windows764位操作系統(tǒng)PC機(jī)VC 6.02.協(xié)議設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu):數(shù)據(jù)幀 +=+=+=+=+=+ | KIND(1) | SEQ(1) | ACK(1) | DATA(240256) | CRC(4) | +=+=+=+=+=+ 確認(rèn)幀 +=+=+=+ | KIND(
2、1) | ACK(1) | CRC(4) | +=+=+=+ 否定確認(rèn)幀 +=+=+=+ | KIND(1) | ACK(1) | CRC(4) | +=+=+=+KIND:表示幀的類別ACK:ACK序列號(hào) SEQ:幀序列號(hào) CRC:校驗(yàn)和模塊結(jié)構(gòu):static inc(Uchar* a)作用:使一個(gè)字節(jié)在0MAX_SEQ的范圍內(nèi)循環(huán)自增。參數(shù):a,字節(jié)類型。static between(Uchar a,Uchar b,Uchar c)作用:判斷當(dāng)前幀是否落在發(fā)送/接收窗口內(nèi)。參數(shù):a,b,c,均為字節(jié)類型,其中兩個(gè)分別為窗口的上、下界,一個(gè)為幀的編號(hào)。其中,發(fā)送窗口的上界和下界分別為next
3、_to_send和ack_expected,接收窗口的上界和下界分別為too_far和frame_expected,均定義在main函數(shù)中。static void put_frame(unsigned char *frame, int len)作用:為一個(gè)幀做CRC校驗(yàn),填充至幀的尾部并將其遞交給網(wǎng)絡(luò)層發(fā)送。參數(shù):frame,字節(jié)數(shù)組,由除padding域之外的幀內(nèi)容轉(zhuǎn)換而來;len,整型,為幀的當(dāng)前長度。static send_frame_(Uchar fk,Uchar next_frame,Uchar frame_expected,Packet out_buf)作用:構(gòu)造一個(gè)幀,并將其發(fā)送
4、。參數(shù):fk,字節(jié)類型,為幀的內(nèi)容;next_frame,字節(jié)類型,為幀的編號(hào);frame_expected,字節(jié)類型,為希望收到的幀的編號(hào);out_buf,二維字節(jié)數(shù)組,為緩沖區(qū)。int main(int argc,char *argv)作用:主程式,包含選擇重傳協(xié)議的算法流程。參數(shù):argc,整型,表示命令行參數(shù)的個(gè)數(shù);argv,二維字符數(shù)組,表示參數(shù)內(nèi)容。算法流程:StartSwctihAck timeoutData timeoutData comingNetwork layerreadyPhy-layerreadyMake ack frameReset ack_numCount csc
5、Find frame-endGet packet()Send this frameNext_send=ack_expectedGet_num>0Send_data()Csc=0?YPhy ready?breakPhy ready?Send frame NYNS_seq=frameExpect?YYSend framePhy_ready=1Sent frameY NPut_packet()NGet_num=nbufferedbreakBreakDeal with acknumberbreakIn_len=1Nbuffered<max_seqDisablenetworkEnablene
6、twork(a)物理層:為數(shù)據(jù)鏈路層提供的服務(wù)為8000bps,270ms傳播延時(shí),10-5誤碼率的字節(jié)流傳輸通道。為了仿真實(shí)現(xiàn)上述服務(wù)質(zhì)量的信道,利用在同一臺(tái)計(jì)算機(jī)上TCP Socket完成兩個(gè)站點(diǎn)之間的通信。由于同一臺(tái)計(jì)算機(jī)上TCP通信傳播時(shí)延短、傳播速度快、沒有誤碼,物理層仿真程序在發(fā)送端利用“令牌桶”算法限制發(fā)送速率以仿真8000bps線路;在接收端誤碼插入模塊利用一個(gè)偽隨機(jī)數(shù)“隨機(jī)地”篡改從TCP收到的數(shù)據(jù),使得所接收到的每個(gè)比特出現(xiàn)差錯(cuò)的概率為10-5;接收到的數(shù)據(jù)緩沖后延時(shí)270ms才提交給數(shù)據(jù)鏈路層程序,以仿真信道的傳播時(shí)延特性。為了簡化程序,省略了成幀功能,數(shù)據(jù)鏈路層利用接口
7、函數(shù)send_frame()和recv_frame()發(fā)送和接收一幀。(b)數(shù)據(jù)鏈路層:發(fā)送方和接收方都維持一個(gè)窗口,窗口內(nèi)部為可以接受的序列號(hào)。接收到的數(shù)據(jù)包被緩存起來,當(dāng)按正確的順序接收完畢后再提交給網(wǎng)絡(luò)層。ACK信息通過數(shù)據(jù)幀捎帶確認(rèn)的方式傳遞,若遇到長時(shí)間無數(shù)據(jù)幀發(fā)送,則產(chǎn)生ACK超時(shí)事件(ACK_TIMEOUT),主動(dòng)發(fā)送空的ACK幀。若長時(shí)間未收到ACK信息,則產(chǎn)生數(shù)據(jù)幀超時(shí)事件(DATA_TIMEOUT),發(fā)送方自動(dòng)重傳未確認(rèn)幀;當(dāng)出現(xiàn)幀丟失或校驗(yàn)錯(cuò)誤時(shí),接收方會(huì)主動(dòng)發(fā)送NAK幀提示發(fā)送方立即重傳。數(shù)據(jù)鏈路層通過物理層提供的函數(shù)來利用物理層提供的服務(wù)。通過get_packet()
8、函數(shù)從網(wǎng)絡(luò)層得到一個(gè)分組;當(dāng)數(shù)據(jù)鏈路層成功接收到一個(gè)分組后,通過put_packet()函數(shù)提交給網(wǎng)絡(luò)層。(c)網(wǎng)絡(luò)層:利用數(shù)據(jù)鏈路層提供的“可靠的分組傳輸”服務(wù),在站點(diǎn)A與站點(diǎn)B之間交換長度固定為256字節(jié)的數(shù)據(jù)分組。網(wǎng)絡(luò)層把產(chǎn)生的分組交付數(shù)據(jù)鏈路層,并接受數(shù)據(jù)鏈路層提交來的數(shù)據(jù)分組。3.結(jié)果分析(1) 描述你所實(shí)現(xiàn)的協(xié)議軟件是否實(shí)現(xiàn)了有誤碼信道環(huán)境中無差錯(cuò)傳輸功能。 我們的協(xié)議成功實(shí)現(xiàn)了有誤碼信道環(huán)境中無差錯(cuò)傳輸功能。如果收到一個(gè)損壞幀,在尚未發(fā)送否認(rèn)確定的情況下,則捎帶發(fā)送否定確認(rèn)。并打印錯(cuò)誤報(bào)告。如果已發(fā)送否定確認(rèn),則只打印錯(cuò)誤報(bào)告,不重復(fù)發(fā)送否定確認(rèn)。(2) 程序的健壯性如何,能否可
9、靠地長時(shí)間運(yùn)行。我們的程序成功連續(xù)運(yùn)行半小時(shí)以上,并取得預(yù)定效果。具有足夠的健壯性。 (3) 協(xié)議參數(shù)的選?。夯瑒?dòng)窗口的大小,重傳定時(shí)器的時(shí)限,ACK 搭載定時(shí)器的時(shí)限,這些參數(shù)是 怎樣確定的?根據(jù)信道特性數(shù)據(jù),分組層分組的大小,以及你的滑動(dòng)窗口機(jī)制,給出定量分析,詳細(xì)列 舉出選擇這些參數(shù)值的具體原因。 我們物理層提供的是字節(jié)流傳輸服務(wù),使用字節(jié)填充技術(shù)成幀,分組長度為256字節(jié)。為了避免在有出錯(cuò)幀接收方要求重傳時(shí)產(chǎn)生二義性,我們定義窗口大小為2n-1,并且雙方的窗口大小均為(MAX_SEQ+1)/2),這樣的大小足夠使用又不會(huì)有過于富余的空間浪費(fèi)?;瑒?dòng)窗口的大小直接涉及到信道利用率和數(shù)據(jù)擁塞
10、問題,若太大,數(shù)據(jù)發(fā)送過快將產(chǎn)生擁塞導(dǎo)致數(shù)據(jù)丟失,出錯(cuò)率增加,若太小則信道利用率降低,通過實(shí)驗(yàn)測試合適的窗口大小為16。重傳定時(shí)器時(shí)限涉及到重傳的響應(yīng)時(shí)間,太小會(huì)導(dǎo)致頻繁重傳,太大則重傳等待時(shí)間太久,經(jīng)過我們的試驗(yàn)測試,選取重傳定時(shí)器時(shí)限定為3000毫秒,ACK 搭載定時(shí)器的時(shí)限為1000毫秒最合適。(4)理論分析:根據(jù)所設(shè)計(jì)的滑動(dòng)窗口工作機(jī)制(Go-Back-N 或者選擇重傳),推導(dǎo)出在無差錯(cuò)信道環(huán)境下分組層能獲得的最大信道利用率;推導(dǎo)出在有誤碼條件下重傳操作及時(shí)發(fā)生等理想情況下分組層能 獲得的最大信道利用率。給出理論推導(dǎo)過程。理論推導(dǎo)的目的是得到信道利用率的極限數(shù)據(jù)。為了簡化 有誤碼條件下
11、的最大利用率推導(dǎo)過程,可以對(duì)問題模型進(jìn)行簡化,比如:假定超時(shí)重傳的數(shù)據(jù)幀的回饋 ACK 幀可以 100%正確傳輸,但是簡化問題分析的這些假設(shè)必須不會(huì)對(duì)整個(gè)結(jié)論產(chǎn)生較大的誤差。由于需要攜帶幀信息,所以最大信息利用率為,由于數(shù)據(jù)鏈路層提供的服務(wù)為8000bps,所以每傳輸一個(gè)字節(jié)耗時(shí)1ms,每幀的附加信息固定為10,耗時(shí)10ms,若出現(xiàn)轉(zhuǎn)義字符還將增加時(shí)間。簡化模型,假設(shè)信道上始終有數(shù)據(jù)需要傳輸。則在誤碼率為的信道上,100000個(gè)比特可發(fā)送個(gè)數(shù)據(jù)包,即每傳送48個(gè)數(shù)據(jù)包將有1個(gè)出錯(cuò)。假設(shè)在限定時(shí)間內(nèi)可以重傳的該幀為正確幀,則每傳送48個(gè)數(shù)據(jù)包需傳送48+1+1=50次。所以信道利用率為而由于程序
12、設(shè)計(jì)原因,當(dāng)一個(gè)數(shù)據(jù)包超時(shí)后,常常需要重傳多次造成信道浪費(fèi)。若重傳k次,則信道利用率為若重傳10次,信道利用率為78.18%。若信道誤碼率為,則,即大約每5個(gè)幀就有一個(gè)出錯(cuò),此時(shí)在ESC/FLAG模式下平均250個(gè)字符需要兩倍的傳輸空間即極限值510,若平均每個(gè)錯(cuò)幀重傳10次信道利用率的極值為(5) 實(shí)驗(yàn)結(jié)果分析:你的程序運(yùn)行實(shí)際達(dá)到了什么樣的效率,比對(duì)理論推導(dǎo)給出的結(jié)論,有沒有差 距?給出原因。有沒有改進(jìn)的辦法?如果沒有時(shí)間把這些方法付諸編程實(shí)施,介紹你的方案。 由實(shí)驗(yàn)結(jié)果可以看出,窗口大小是16時(shí)信道利用率最高,與理論最大值最接近。與理論窗口最佳值一致。在洪泛模式下,信道利用率與理論值接近
13、。而在其他情況下負(fù)載有時(shí)較輕,所以信道利用率相比理論值較低。(6) 存在的問題:在“表 3 性能測試記錄表”中給出了幾種測試方案,在測試中你的程序有沒有失 敗,或者,雖未失敗,但表現(xiàn)出來的性能仍有差距,你的程序中還存在哪些問題?實(shí)驗(yàn)順利進(jìn)行,每次測試得到的數(shù)據(jù)都比較接近,但和理論值相比信道利用率較低,這與信道的負(fù)載有關(guān)。實(shí)驗(yàn)結(jié)果:測試最佳窗口尺寸:窗口大小為16, DATA_TIMER 3000, ACK_TIMER 1000序號(hào)命令說明運(yùn)行時(shí)間(分鐘)Selective算法線路利用率(%)AB1datalink audatalink bu無誤碼信道數(shù)據(jù)傳輸3059.396.92datalin
14、k adatalink b站點(diǎn)A分組層平緩方式發(fā)出數(shù)據(jù),站點(diǎn)B周期性交替發(fā)送100秒停發(fā)100秒3056.895.03datalink afudatalink bfu無誤碼信道,站點(diǎn)A和站點(diǎn)B的分組層都洪水式產(chǎn)生分組3096.896.44datalink afdatalink bf站點(diǎn)A/B的分組層都洪水式產(chǎn)生分組3091.393.65datalink af ber 1e-4datalink bf ber 1e-4站點(diǎn)A/B的分組層都洪水式產(chǎn)生分組,線路誤碼率為10-43073.275.5窗口大小為8, DATA_TIMER 3000, ACK_TIMER 1000序號(hào)命令說明運(yùn)行時(shí)間(分鐘)
15、Selective算法線路利用率(%)AB1datalink audatalink bu無誤碼信道數(shù)據(jù)傳輸3057.796.92datalink adatalink b站點(diǎn)A分組層平緩方式發(fā)出數(shù)據(jù),站點(diǎn)B周期性交替發(fā)送100秒停發(fā)100秒3055.694.83datalink afudatalink bfu無誤碼信道,站點(diǎn)A和站點(diǎn)B的分組層都洪水式產(chǎn)生分組3096.996.94datalink afdatalink bf站點(diǎn)A/B的分組層都洪水式產(chǎn)生分組3095.595.05datalink af ber 1e-4datalink bf ber 1e-4站點(diǎn)A/B的分組層都洪水式產(chǎn)生分組,線路
16、誤碼率為10-43075.073.2窗口大小為32, DATA_TIMER 3000, ACK_TIMER 1000序號(hào)命令說明運(yùn)行時(shí)間(分鐘)Selective算法線路利用率(%)AB1datalink audatalink bu無誤碼信道數(shù)據(jù)傳輸3096.996.92datalink adatalink b站點(diǎn)A分組層平緩方式發(fā)出數(shù)據(jù),站點(diǎn)B周期性交替發(fā)送100秒停發(fā)100秒3054.893.63datalink afudatalink bfu無誤碼信道,站點(diǎn)A和站點(diǎn)B的分組層都洪水式產(chǎn)生分組3096.997.04datalink afdatalink bf站點(diǎn)A/B的分組層都洪水式產(chǎn)生分
17、組3090.690.25datalink af ber 1e-4datalink bf ber 1e-4站點(diǎn)A/B的分組層都洪水式產(chǎn)生分組,線路誤碼率為10-43050.052.3從測試結(jié)果比較得出,窗口最佳尺寸為16;ACK搭載定時(shí)器的時(shí)限定為1000毫秒,窗口大小為16,測試重傳定時(shí)器時(shí)限D(zhuǎn)ATA_TIMER 2800,窗口大小為16, ACK_TIMER 1000測試最佳DATA_TIMER取值序號(hào)命令說明運(yùn)行時(shí)間(分鐘)Selective算法線路利用率(%)AB1datalink audatalink bu無誤碼信道數(shù)據(jù)傳輸3055.393.92datalink adatalink b
18、站點(diǎn)A分組層平緩方式發(fā)出數(shù)據(jù),站點(diǎn)B周期性交替發(fā)送100秒停發(fā)100秒3049.688.73datalink afudatalink bfu無誤碼信道,站點(diǎn)A和站點(diǎn)B的分組層都洪水式產(chǎn)生分組3096.996.94datalink afdatalink bf站點(diǎn)A/B的分組層都洪水式產(chǎn)生分組3086.188.25datalink af ber 1e-4datalink bf ber 1e-4站點(diǎn)A/B的分組層都洪水式產(chǎn)生分組,線路誤碼率為10-43069.670.1DATA_TIMER 3000,窗口大小為16, ACK_TIMER 1000序號(hào)命令說明運(yùn)行時(shí)間(分鐘)Selective算法線路
19、利用率(%)AB1datalink audatalink bu無誤碼信道數(shù)據(jù)傳輸3059.396.92datalink adatalink b站點(diǎn)A分組層平緩方式發(fā)出數(shù)據(jù),站點(diǎn)B周期性交替發(fā)送100秒停發(fā)100秒3056.895.03datalink afudatalink bfu無誤碼信道,站點(diǎn)A和站點(diǎn)B的分組層都洪水式產(chǎn)生分組3096.896.44datalink afdatalink bf站點(diǎn)A/B的分組層都洪水式產(chǎn)生分組3091.393.65datalink af ber 1e-4datalink bf ber 1e-4站點(diǎn)A/B的分組層都洪水式產(chǎn)生分組,線路誤碼率為10-43073.
20、275.5DATA_TIMER 3200,窗口大小為16, ACK_TIMER 1000序號(hào)命令說明運(yùn)行時(shí)間(分鐘)Selective算法線路利用率(%)AB1datalink audatalink bu無誤碼信道數(shù)據(jù)傳輸3058.096.82datalink adatalink b站點(diǎn)A分組層平緩方式發(fā)出數(shù)據(jù),站點(diǎn)B周期性交替發(fā)送100秒停發(fā)100秒3055.890.33datalink afudatalink bfu無誤碼信道,站點(diǎn)A和站點(diǎn)B的分組層都洪水式產(chǎn)生分組3096.996.94datalink afdatalink bf站點(diǎn)A/B的分組層都洪水式產(chǎn)生分組3089.390.65da
21、talink af ber 1e-4datalink bf ber 1e-4站點(diǎn)A/B的分組層都洪水式產(chǎn)生分組,線路誤碼率為10-43063.468.9DATA_TIMER 3400,窗口大小為16, ACK_TIMER 1000序號(hào)命令說明運(yùn)行時(shí)間(分鐘)Selective算法線路利用率(%)AB1datalink audatalink bu無誤碼信道數(shù)據(jù)傳輸3056.996.82datalink adatalink b站點(diǎn)A分組層平緩方式發(fā)出數(shù)據(jù),站點(diǎn)B周期性交替發(fā)送100秒停發(fā)100秒3054.889.93datalink afudatalink bfu無誤碼信道,站點(diǎn)A和站點(diǎn)B的分組層
22、都洪水式產(chǎn)生分組3096.896.84datalink afdatalink bf站點(diǎn)A/B的分組層都洪水式產(chǎn)生分組3087.789.85datalink af ber 1e-4datalink bf ber 1e-4站點(diǎn)A/B的分組層都洪水式產(chǎn)生分組,線路誤碼率為10-43068.170.3從測試結(jié)果比較得出,DATA_TIMER=3000為最佳取值重傳定時(shí)器時(shí)限定為3000毫秒,窗口大小為16,測試ACK搭載定時(shí)器的時(shí)限ACK=1000ms序號(hào)命令說明運(yùn)行時(shí)間(分鐘)Selective算法線路利用率(%)AB1datalink audatalink bu無誤碼信道數(shù)據(jù)傳輸3059.396.
23、92datalink adatalink b站點(diǎn)A分組層平緩方式發(fā)出數(shù)據(jù),站點(diǎn)B周期性交替發(fā)送100秒停發(fā)100秒3056.895.03datalink afudatalink bfu無誤碼信道,站點(diǎn)A和站點(diǎn)B的分組層都洪水式產(chǎn)生分組3096.996.44datalink afdatalink bf站點(diǎn)A/B的分組層都洪水式產(chǎn)生分組3095.195.45datalink af ber 1e-4datalink bf ber 1e-4站點(diǎn)A/B的分組層都洪水式產(chǎn)生分組,線路誤碼率為10-43073.275.5ACK=1100ms序號(hào)命令說明運(yùn)行時(shí)間(分鐘)Selective算法線路利用率(%)A
24、B1datalink audatalink bu無誤碼信道數(shù)據(jù)傳輸3068.496.92datalink adatalink b站點(diǎn)A分組層平緩方式發(fā)出數(shù)據(jù),站點(diǎn)B周期性交替發(fā)送100秒停發(fā)100秒3067.695.63datalink afudatalink bfu無誤碼信道,站點(diǎn)A和站點(diǎn)B的分組層都洪水式產(chǎn)生分組3096.996.94datalink afdatalink bf站點(diǎn)A/B的分組層都洪水式產(chǎn)生分組3095.195.05datalink af ber 1e-4datalink bf ber 1e-4站點(diǎn)A/B的分組層都洪水式產(chǎn)生分組,線路誤碼率為10-43072.576.3AC
25、K=1200ms序號(hào)命令說明運(yùn)行時(shí)間(分鐘)Selective算法線路利用率(%)AB1datalink audatalink bu無誤碼信道數(shù)據(jù)傳輸3055.996.92datalink adatalink b站點(diǎn)A分組層平緩方式發(fā)出數(shù)據(jù),站點(diǎn)B周期性交替發(fā)送100秒停發(fā)100秒3057.194.93datalink afudatalink bfu無誤碼信道,站點(diǎn)A和站點(diǎn)B的分組層都洪水式產(chǎn)生分組3096.996.94datalink afdatalink bf站點(diǎn)A/B的分組層都洪水式產(chǎn)生分組3095.295.15datalink af ber 1e-4datalink bf ber 1e
26、-4站點(diǎn)A/B的分組層都洪水式產(chǎn)生分組,線路誤碼率為10-43074.573.3ACK=1300ms序號(hào)命令說明運(yùn)行時(shí)間(分鐘)Selective算法線路利用率(%)AB1datalink audatalink bu無誤碼信道數(shù)據(jù)傳輸3057.094.82datalink adatalink b站點(diǎn)A分組層平緩方式發(fā)出數(shù)據(jù),站點(diǎn)B周期性交替發(fā)送100秒停發(fā)100秒3055.894.93datalink afudatalink bfu無誤碼信道,站點(diǎn)A和站點(diǎn)B的分組層都洪水式產(chǎn)生分組3097.096.84datalink afdatalink bf站點(diǎn)A/B的分組層都洪水式產(chǎn)生分組3095.19
27、5.05datalink af ber 1e-4datalink bf ber 1e-4站點(diǎn)A/B的分組層都洪水式產(chǎn)生分組,線路誤碼率為10-43071.474.4從測試結(jié)果比較得出,最佳ACK搭載定時(shí)器的時(shí)限為1100ms實(shí)驗(yàn)截圖:(最佳參數(shù))DATA_TIMER 3000,窗口大小為16, ACK_TIMER 1100datalink audatalink budatalink adatalink bdatalink afudatalink bfudatalink afdatalink bfdatalink af ber 1e-4datalink bf ber 1e-44.研究和探索的問題
28、1.CRC 校驗(yàn)?zāi)芰?CRC校驗(yàn)碼的檢錯(cuò)能力很強(qiáng),它除了能檢查出離散錯(cuò)外,還能檢查出突發(fā)錯(cuò),CRC校驗(yàn)碼具有以下檢錯(cuò)能力:CRC校驗(yàn)碼能檢查出全部單個(gè)錯(cuò);CRC校驗(yàn)碼能檢查出全部離散的二位錯(cuò);CRC校驗(yàn)碼能檢查出全部奇數(shù)個(gè)錯(cuò);CRC校驗(yàn)碼能檢查出全部長度小于或等于K位的突發(fā)錯(cuò);CRC校驗(yàn)碼能以1-(1/2)K-1的概率檢查出長度為(K+1)位的突發(fā)錯(cuò)。2. 由于本次試驗(yàn)過程的誤碼信道是一個(gè)比較固定的誤碼率,而在實(shí)際生活當(dāng)中的誤碼率不是穩(wěn)定的,可能會(huì)因?yàn)閭鬏敪h(huán)境的不同,使得他的誤碼率波動(dòng)比較大的,例如,下雨天和晴天,高噪聲和低噪聲的情況,傳輸?shù)木嚯x也是影響因素。對(duì)于這種動(dòng)態(tài)的誤碼率的通信過程,可
29、能需要其他的一些參數(shù)來控制基本參數(shù)值(窗口大小,重傳時(shí)間等等)來完成。3.get_ms()如何實(shí)現(xiàn) C語言的time.h當(dāng)中提供了一些關(guān)于時(shí)間操作的函數(shù)可以實(shí)現(xiàn)get_ms()函數(shù)。可以利用的函數(shù)有clock()函數(shù)原型為:clock_t clock()該函數(shù)返回程序開始執(zhí)行后占用的處理器時(shí)間,如果無法獲得占用時(shí)間則返回-1。因?yàn)槲覀冇?jì)時(shí)的起點(diǎn)并不是程序開始之時(shí),而是開始通信之時(shí),所以需要一個(gè)靜態(tài)變量start_time來記錄通信起始的時(shí)間。然后在每次調(diào)用get_ms()后,獲取當(dāng)前的時(shí)間current_time。然后再返回start_time-current_time即可。4.對(duì)等協(xié)議實(shí)體之
30、間的流量控制 在我們?cè)O(shè)計(jì)的協(xié)議當(dāng)中,流量的控制主要通過接收窗口,發(fā)送窗口還有確認(rèn)機(jī)制來實(shí)現(xiàn)。因?yàn)橛写翱诖笮〉南拗?,發(fā)送方不會(huì)一次性發(fā)送過多信息導(dǎo)致接收方被信息洪流所淹沒,導(dǎo)致信息丟失。這樣可能會(huì)導(dǎo)致信道的利用率降低,但是如果合理的設(shè)計(jì)窗口大小,依然可以達(dá)到較高的信號(hào)利用率。5.實(shí)驗(yàn)總結(jié)和心得體會(huì)(1) 完成本次實(shí)驗(yàn)的實(shí)際上機(jī)調(diào)試時(shí)間是多少?由于其他課業(yè)任務(wù)較多,日程安排緊張,完成本次試驗(yàn)代碼的編寫大約用了一周,每天晚上大約抽出1-2小時(shí)的時(shí)間。其中很大一部分時(shí)間是在程序框架的確定和debug.在這之后又花了5天,每晚1-2小時(shí)的時(shí)間用于測試協(xié)議參數(shù)的選取等問題。(2) 編程工具方面遇到了哪些問
31、題?包括Windows環(huán)境和VC軟件的安裝問題。這方面進(jìn)展十分順利。(3) 編程語言方面遇到了哪些問題?包括C語言使用和對(duì)C語言操控能力上的問題。由于我們學(xué)習(xí)使用C語言時(shí)間較長,運(yùn)用起來并沒有什么阻礙。(4) 協(xié)議方面遇到了哪些問題?包括協(xié)議機(jī)制的設(shè)計(jì)錯(cuò)誤,發(fā)現(xiàn)協(xié)議死鎖,或者不能正確工作,協(xié)議參數(shù)的調(diào)整等問題。由于我們緩沖區(qū)判斷滿溢的條件存在問題,緩沖區(qū)溢出時(shí)網(wǎng)絡(luò)層依然沒有被關(guān)閉,導(dǎo)致運(yùn)行程序時(shí)發(fā)現(xiàn)數(shù)據(jù)幀“丟失”;在協(xié)議參數(shù)的選擇上也花了較長時(shí)間。(5) 開發(fā)庫方面遇到了哪些問題?包括庫程序中的BUG,庫函數(shù)文檔不夠清楚導(dǎo)致誤解,庫函數(shù)在所提供的功能結(jié)構(gòu)上的缺憾導(dǎo)致編程效率低下。這些問題或建議
32、影響不同模塊之間功能界限的劃分。無法看到庫函數(shù)的實(shí)現(xiàn)部分的代碼,對(duì)各個(gè)參數(shù)的作用也沒有詳細(xì)清晰的說明,所以掌握這些函數(shù)花了較長時(shí)間,使用時(shí)也出現(xiàn)過很多錯(cuò)誤。(6) 總結(jié)本次實(shí)驗(yàn),你在C 語言方面,協(xié)議軟件方面,理論學(xué)習(xí)方面,軟件工程方面等哪些方面上有所提高?通過這次試驗(yàn),我們對(duì)數(shù)據(jù)鏈路層的選擇重傳協(xié)議的機(jī)制有了很深刻的了解。很多書本上不是很懂的講義,在我們進(jìn)行試驗(yàn)的過程中,通過對(duì)模擬結(jié)果的分析與思考都一點(diǎn)點(diǎn)的理解了。而且這次試驗(yàn)是我們第一次模擬通信,讓我們學(xué)會(huì)了windows下觀察網(wǎng)絡(luò)收發(fā)數(shù)據(jù)包模擬環(huán)境的搭建。6.源程序清單#include <stdio.h>#include &l
33、t;string.h>#include "protocol.h"#define DATA 1#define NAK 2#define ACK 3#define DATA_TIMER 3000#define ACK_TIMER 1000#define MAX_SEQ 63#define NR_BUFS (MAX_SEQ+1)/2)int no_nak=1;static int phl_ready = 0;struct FRAME unsigned char kind; /*數(shù)據(jù)、確認(rèn)、否定確認(rèn)*/ unsigned char ack; unsigned char seq
34、; unsigned char dataPKT_LEN; unsigned int padding;static int between(unsigned char a,unsigned char b,unsigned char c)/*如果滿足 a<= b < c 或其循環(huán)則返回真 ; 否則返回假 */return (a <= b)&&(b < c)|(c < a)&&(a <= b)|(b < c)&&( c<a );static void put_frame(unsigned char *fr
35、ame, int len)/發(fā)送捎帶確認(rèn)幀的數(shù)據(jù)幀 *(unsigned int *)(frame + len) = crc32(frame, len); send_frame(frame, len + 4); phl_ready = 0;static void send_data_frame(unsigned char fk,unsigned char frame_nr,unsigned char frame_expected,unsigned char bufferNR_BUFSPKT_LEN) /* 構(gòu)造并發(fā)送數(shù)據(jù)、確認(rèn)、否定確認(rèn)幀 */struct FRAME s; s.kind =
36、fk; s.seq = frame_nr; s.ack = (frame_expected + MAX_SEQ) % (MAX_SEQ + 1);if(fk=DATA)memcpy(s.data, bufferframe_nr % NR_BUFS, PKT_LEN);dbg_frame("Send DATA %d %d, ID %dn", s.seq, s.ack, *(short *)s.data); put_frame(unsigned char *)&s, 3 + PKT_LEN);start_timer(frame_nr%NR_BUFS, DATA_TIME
37、R); if(fk = NAK)no_nak=0;dbg_frame("Send NAK %dn",s.ack);put_frame(unsigned char *)&s, 3 + PKT_LEN);if(fk = ACK)dbg_frame("Send ACK %dn", s.ack); put_frame(unsigned char *)&s, 3 + PKT_LEN);phl_ready = 0;stop_ack_timer();void main(int argc, char *argv)int event, arg; struc
38、t FRAME f; int len = 0;int i;static unsigned char ack_expected = 0;static unsigned char next_frame_to_send = 0;static unsigned char frame_expected = 0;static unsigned char too_far=NR_BUFS; static unsigned char nbuffered = 0;int arrivedNR_BUFS;static unsigned char out_bufNR_BUFSPKT_LEN;static unsigne
39、d char in_bufNR_BUFSPKT_LEN; protocol_init(argc, argv); /初始化協(xié)議 lprintf("Designed by CK, build: " _DATE_" "_TIME_"n");for(i = 0; i < NR_BUFS; i+)arrivedi=0;/沒有幀到達(dá)接收方 enable_network_layer();/初始化 while(1) event = wait_for_event(&arg);/等待下一事件switch (event)case NETWOR
40、K_LAYER_READY:/允許網(wǎng)絡(luò)層發(fā)送數(shù)據(jù)幀nbuffered+;/緩沖區(qū)數(shù)據(jù)幀數(shù)加一get_packet(out_bufnext_frame_to_send % NR_BUFS);/從網(wǎng)絡(luò)層接收數(shù)據(jù)幀send_data_frame(DATA,next_frame_to_send,frame_expected,out_buf);/發(fā)送數(shù)據(jù)幀next_frame_to_send=(next_frame_to_send + 1) % ( MAX_SEQ + 1);/發(fā)送窗口上界下移break;case PHYSICAL_LAYER_READY:/物理層空閑phl_ready = 1;brea
41、k;case FRAME_RECEIVED:/接收方收到一個(gè)幀len = recv_frame(unsigned char *)&f, sizeof f);/幀長 if (len < 5 | crc32(unsigned char *)&f, len) != 0)/收到的幀損壞if(no_nak)/如果沒有發(fā)送NAK,則發(fā)送NAK要求重傳(避免多次請(qǐng)求重發(fā)) send_data_frame(NAK, 0, frame_expected, out_buf);/相對(duì)協(xié)議5不同,收到錯(cuò)誤要求重傳而不是直接abort dbg_event("* Receiver Erro
42、r, Bad CRC Checksumn");/打印損壞報(bào)告 break;/跳出switch語句if (f.kind = DATA)/收到一個(gè)數(shù)據(jù)幀dbg_frame("Recv DATA %d %d, ID %dn", f.seq, f.ack, *(short *)f.data);/打印收到幀完好if(f.seq != frame_expected) && no_nak)/未按照順序到達(dá) send_data_frame(NAK,0, frame_expected, out_buf);/返回錯(cuò)誤幀elsestart_ack_timer(ACK_TIMER);/開啟輔助計(jì)時(shí)器if(between(frame_expected, f.seq, too_far)&&arrivedf.seq % NR_BUFS = 0)/數(shù)據(jù)幀落在窗口內(nèi)/*數(shù)據(jù)幀可能以任何順序到達(dá) */arrivedf.s
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度汽車租賃合同服務(wù)內(nèi)容詳細(xì)描述3篇
- 二零二五年度建筑工程勞務(wù)承包與信息化建設(shè)合同3篇
- 二零二五年度賓館租賃承包與智能客房服務(wù)協(xié)議3篇
- 二零二五年度制造業(yè)學(xué)徒工勞動(dòng)合同范本合同模板3篇
- 2025版二零二五年度醫(yī)療健康產(chǎn)業(yè)合伙人合作協(xié)議2篇
- 課程設(shè)計(jì)物料橫算
- 二零二五年度店鋪個(gè)人股份全部轉(zhuǎn)讓與投資回報(bào)合同3篇
- 海南醫(yī)學(xué)院《數(shù)字電子技術(shù)基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 海南醫(yī)學(xué)院《電力系統(tǒng)穩(wěn)態(tài)分析實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五年度房地產(chǎn)代理公司脫貧攻堅(jiān)合作協(xié)議書3篇
- 第1講-句子結(jié)構(gòu)
- 鼻腔沖洗護(hù)理技術(shù)團(tuán)體標(biāo)準(zhǔn)解讀
- 《流感科普宣教》課件
- 紅領(lǐng)巾知識(shí)伴我成長課件
- 廚邦醬油推廣方案
- 腦血管病的三級(jí)預(yù)防
- 保險(xiǎn)產(chǎn)品創(chuàng)新與市場定位培訓(xùn)課件
- 2022-2023學(xué)年山東省淄博四中高二(上)期末數(shù)學(xué)試卷含答案
- 《建筑賦比興》一些筆記和摘錄(上)
- 時(shí)間管理的原則與方法
- 【A公司人力資源招聘管理問題及優(yōu)化建議分析13000字(論文)】
評(píng)論
0/150
提交評(píng)論