計算機網(wǎng)絡(luò)課程設(shè)計實驗報告_第1頁
計算機網(wǎng)絡(luò)課程設(shè)計實驗報告_第2頁
計算機網(wǎng)絡(luò)課程設(shè)計實驗報告_第3頁
計算機網(wǎng)絡(luò)課程設(shè)計實驗報告_第4頁
計算機網(wǎng)絡(luò)課程設(shè)計實驗報告_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、實 驗 報 告課程名稱:計算機網(wǎng)絡(luò)實驗實驗名稱:arq協(xié)議模擬實現(xiàn)院系:計算機科學(xué)學(xué)院實驗日期:2010-11-10班級:07通信工程實驗報告日期:2010-11-10姓名:譚才盛學(xué)號:071101450037老師批閱簽字:_實驗內(nèi)容:編寫兩個計算機程序p1,p2。p1模擬發(fā)送方:首先從界面讀取待發(fā)送字符(每接受一個字符的輸入),保存到文件exe1.txt中,并啟動計時器;p2模擬接收方,它從exe1.txt中查找是否有新字符到來,并提供模擬界面給用戶選擇:1. ack-接收該字符2. nak-丟棄 3. 無反應(yīng)-導(dǎo)致超時將用戶選擇的結(jié)果記錄到exe2.txt中;接收的字符保存到exe3.tx

2、t 中。由于可視化操作不精通,這次實驗過程在c+環(huán)境下模擬運行。運行環(huán)境:visual c+ 6.0編程思路:新建三個文本文件,每次運行程序開始階段使系統(tǒng)隨機產(chǎn)生100個隨機數(shù),并使其轉(zhuǎn)化為字符格式,讓p1從界面讀取字符,輸送到exe1,txt文件中。并啟動計時器記錄傳輸時間。讀入exe1.txt,若發(fā)現(xiàn)有新字符,則提供模擬界面給用戶選擇接收還是丟棄;若無反應(yīng),則輸出超時信息。將用戶選擇的結(jié)果記錄到exe2.txt中;接收的字符保存到exe3.txt 中。文本文件讀寫一律采用追加模式。實驗步驟:1.分析arq協(xié)議模擬實現(xiàn)的一般流程,畫出流程圖: exe1.txtexe2.txt。1. ack-

3、接收該字符2.nak-丟棄.3. 無反應(yīng)-導(dǎo)致超時。選擇的結(jié)果記錄到exe2.txt中exe3.txt。接收的字符保存到exe3.txt 中p11模擬發(fā)送方界面從界面讀取字符保存到exe1中,并啟動計時器接收新字符p2模擬接收方(arq協(xié)議流程圖)2.結(jié)合c+文件操作部分編寫源程序:源程序如下:#include iostream.h#include fstream.h#include stdlib.h#include iomanip.h#include time.h#include string.hvoid main()long curtime_front_sender, curtime_re

4、ar_sender, curtime_front_receiver, curtime_rear_receiver; curtime_front_receiver=time(null);/定義時鐘char ch,choice,str4, array100;int i,tag=0;/定義開關(guān)變量fstream file1; fstream file2; fstream file3;cout打開文件: exe1,exe2,exe3endl;file1.open(exe1.txt,ios:in|ios:out|ios:app);if(file1.fail()cout不能打開文件:exe1endl;ex

5、it(0);file2.open(exe2.txt,ios:in|ios:out|ios:app);if(file2.fail()cout不能打開文件:exe2endl;exit(0);file3.open(exe3.txt,ios:in|ios:out|ios:app);if(file3.fail()cout不能打開文件:exe3endl;exit(0);coutendlendlttt arq協(xié)議模擬實驗nnn;cout ttt1 隨機產(chǎn)生字符nnttt2 接收 nnttt3 退出choice;switch(choice)case 1:for(i=0;i100;i+)/隨機產(chǎn)生字符array

6、i=a+rand()%26;coutsetw(2)arrayi;file1.put(arrayi);/字符讀入exe1.txt文件中curtime_front_sender=time(null);/時鐘運行tag=1;file1.close();cout字符已讀入exe1.txt文件中.endl;break;case 2:if(tag=1)cout文件exe1.txt中有新字符到來.endl;cout輸入ack:接收字符n; cout1)/超時是否判斷curtime_front_receiver=time(null);continue;file2接收該字符.;file1.get(ch);cou

7、t文件讀寫完畢.n;else if(strcmp(str,nak)=0)cout已經(jīng)放棄這些字符.n;else if(strcmp(str,nak)!=0 & strcmp(str,ack)!=0 )cout輸入錯誤,請從新輸入:endl;while(strcmp(str,nak)!=0 & strcmp(str,ack)!=0 );else if(tag=0)cout文件exe1.txt中沒有新字符到來.endl;break;default:cout謝謝使用.endl;while(choice!=3);file1.close();file2.close();file3.close();3.模

8、擬實驗,運行源程序.實驗中的問題及心得:通過實驗發(fā)現(xiàn)在課程學(xué)習(xí)中對很多方面只是一知半解,并沒有深入的加以研究,致使在組織源程序過程中遇到了很多麻煩,例如對arq協(xié)議只是片面地了解,對其背景,發(fā)展過程,應(yīng)用過程,作用范圍并不是很了解,今后一定會在這方面加強認識。通過學(xué)習(xí)實踐發(fā)現(xiàn)計算機網(wǎng)絡(luò)這門課程雖然大部分都是理論課程,很少有實踐類的,但其從當今最前沿的計算機科學(xué)理論成果出發(fā),將整個網(wǎng)絡(luò)世界的總體框架呈現(xiàn)在面前,使得網(wǎng)絡(luò)協(xié)議描述表現(xiàn)的淋漓盡致,今后必將以百倍的熱情投入到這門課程的學(xué)習(xí)中??偨Y(jié)通過實驗所掌握的內(nèi)容:1.連續(xù)arq協(xié)議的算法#define max_seq 7 /* 應(yīng)該為2n-1 */

9、typedef enum frame_arrival, cksum_error, timeout, network_layer_ready event_type;#include protocal.hstatic boolean between(seq_nr a, seq_nr b, seq_nr c) /* 如果b落在a和c之間(含a不含c)返回true,否則返回false. */ if (a=b) & (bc) | (ca) & (a=b) | (bc) & (c1; 用于外出流 */seq_nr ack_expected; /* 還沒有得到應(yīng)答的最早的幀 */seq_nr frame_e

10、xpected; /* 進入流期望的下一幀 */frame r; /* 初始變量 */packet buffermax_seq+1 /* 外出流的緩存 */seq_nr nbuffered; /* 當前正在使用的輸出緩存 */event_type event;enable_network_layer(); /* 允許 network_layer_ready 事件 */ack_expected = 0; /* 下一個期望進入的應(yīng)答 */next_frame_to_send = 0; /* 下一個要送出的幀 */frame_expected = 0; /* 期望進入的幀的序號 */nbuffere

11、d = 0; /* 初始沒有分組被緩存 */while (true) wait_for_event ( &event); /* 四種可能的事件,見上面event_type定義 */switch (event) case network_layer_ready; /* 網(wǎng)絡(luò)層有一個分組要發(fā)送 */ /* 接收, 保存, 以及發(fā)送一個新的幀 */ from_network_layer(&buffernext_frame-to_send); /* 獲得一個新的分組 */ nbuffered = nbuffered + 1; /* 增加發(fā)送方的窗口 */ send_data(next_frame_to

12、_send, frame_expected, buffer); /* 發(fā)送幀 */ inc(next_frame_to_send); /* 發(fā)送方的窗口上界向前移動*/ break;case frame_arrival: /* 一個數(shù)據(jù)幀或控制幀到達 */ from_physical_layer(&r); /* 從物理層得到一個進入的幀 */ if (r.seq = frame_expected) /* 所有的幀只能按序接收. */ to_network_layer(&); /* 傳遞分組到網(wǎng)絡(luò)層 */ inc(frame_expected); /* 接收方的窗口下界向前移動 */

13、 /* ack n 意味著n-1,n-2,.等. */ while (between(ack_expected, r.ack, next_frame_to_send) /* 處理捎帶應(yīng)答 */ nbuffered = nbuffered + 1; /* 減少一個緩存的幀 */ stop_timer(ack_expected); /* 幀完好到達, 停止定時器 */ inc(ack_expected); /* 壓縮發(fā)送窗口 */ break; case cksum_err: break; /* 丟棄壞幀 */case time_out: /* 重傳所有超時的幀 */ next_frame_to_

14、send = ack_expected; /* 開始重傳 */ for (i = 1; i = nbuffered; i +) send_data(next_frame_to_send, fram_expected, buffer); /* 重發(fā)1幀 */ inc(next_frame_to_send); /* 準備發(fā)送下一幀 */ if (nbuffered max_seq) enable_network_layer(); else disable_network_layer(); 連續(xù)arq協(xié)議采用的重要原理:在簡單停止等待協(xié)議的基礎(chǔ)上,允許連續(xù)發(fā)送若干幀,在收到相應(yīng)ack后繼續(xù)發(fā)送若干幀

15、,用以提高傳輸效率。這時ack及nak也必須有對應(yīng)的幀序號,才能夠一一對應(yīng)起來。 在發(fā)生差錯時丟棄原已發(fā)送的所有后續(xù)幀,重發(fā)差錯發(fā)生以后的所有幀,相當于完全返回重傳。 信道較差時傳輸效率不高。連續(xù)重發(fā)請求arq方案是指發(fā)送方可以連續(xù)發(fā)送一系列信息幀,即不用等前一幀被確認便可繼續(xù)發(fā)送下一幀,效率大大提高。但在這種重發(fā)請求方案中,需要在發(fā)送方設(shè)置一個較大的緩沖存儲空間(稱作重發(fā)表),用以存放若干待確認的信息幀。當發(fā)送方到對某信息幀的確認幀后,便可從重發(fā)表中將該信息幀刪除。所以,連續(xù)重發(fā)請求arq方案的鏈路傳輸效率大大提高,但相應(yīng)地需要更大的緩沖存儲空間。在這一協(xié)議中,當發(fā)送站點發(fā)送完一個數(shù)據(jù)幀后,

16、不是停下來等待應(yīng)答幀,而是可以連續(xù)在發(fā)送若干個數(shù)據(jù)幀。如果在此過程中又收到了接收端發(fā)來的應(yīng)答幀,那么還可以接著發(fā)送數(shù)據(jù) 幀。由于減少了等待時間,整個通信的吞吐量就提高了。 如結(jié)點a向結(jié)點b發(fā)送數(shù)據(jù)幀,當結(jié)點a發(fā)完0號幀時,并不等待,而是繼續(xù)發(fā)送后續(xù)的1號幀、2號幀等。由于連續(xù)發(fā)送了許多幀,所以應(yīng)答幀不僅要說明是對哪一幀進行確認或否認,而且應(yīng)答幀本身也必須編號。假設(shè)2號幀出了差錯,于是結(jié)點b發(fā)送否認幀nak2。當否認幀nak2到達結(jié)點a時,結(jié)點a正在發(fā)送5號數(shù)據(jù)幀。當5號 幀發(fā)送完畢后,結(jié)點a才能進行2號幀的重發(fā)。這里要注意兩點:接受端只能按序接收數(shù)據(jù)幀。對于2號幀,結(jié)點b應(yīng)答了nak2,雖然接

17、著又收到了三個正確的數(shù)據(jù)幀,但都必須將他們丟棄,因為這些幀的發(fā)送序號都不是順序號;結(jié)點a在重傳2號數(shù)據(jù)幀時,雖然已經(jīng)發(fā)完了5號幀,但仍必須向回走,從2 號幀起進行重傳。正因如此,連續(xù)arq又稱為go-back-n arq,意思是當出現(xiàn)差錯必須重傳時,要向回走n個幀,然后再開始重傳。go-dack-n策略的基本原理是,當接收方檢測出失序的信息幀后,要求發(fā)送方重發(fā)最后一個正確接收的信息幀之后的所有未被確認的幀;或者當發(fā)送方發(fā)送了n個幀后,若發(fā)現(xiàn)該n幀的前一個幀在計時器超時后仍未返回其確認信息,則該幀被判為出錯或丟失,此時發(fā)送方就不得不重新發(fā)送出錯幀及其后的n幀。這就是go-dack-n(退回n)法

18、名稱的由來。因為對接收方來說,由于這一幀出錯,就不能以正常的序號向它的高層遞交數(shù)據(jù),對其后發(fā)送來的n幀也可能都不能接收而丟棄。go-dack-n法操作過程如圖7-7所示。圖中假定發(fā)送完8號幀后,發(fā)現(xiàn)2號幀的確認返回信號在計時器超時后還未收到,則發(fā)送方只能退回到從2號幀開始重發(fā)以后所有已發(fā)的數(shù)據(jù)。 還有另一種情況。2號數(shù)據(jù)幀丟失,3號至5號數(shù)據(jù)幀雖然正確傳送 到結(jié)點b,但也不得不被丟棄。當結(jié)點a發(fā)送5號數(shù)據(jù)幀的過程中,超時定時器設(shè)定的超 時時間到。因此,在5號數(shù)據(jù)幀發(fā)送完畢后,就回到2號數(shù)據(jù)幀進行重傳。在使用連續(xù)arq協(xié)議時,如果發(fā)送端一直沒有受到對方的確認信息,那么實際上發(fā)送端并不能無限制的發(fā)

19、送其數(shù)據(jù)。這是因為:當未被確認的數(shù)據(jù)幀的數(shù)目太多時,只要有一幀出了差錯,就要有很多的 數(shù)據(jù)幀需要重傳,這必然浪費很多時間。另外為了對所發(fā)送的大量數(shù)據(jù)幀進行編號,每個數(shù)據(jù)幀的發(fā)送序號也要占用較 多的比特數(shù),這樣又增加了一些不必要的開銷。因此,在連續(xù)arq協(xié)議中必須將已發(fā)送出去、但未被確認的數(shù)據(jù)幀的數(shù)目加以限制, 這是本章后面將要 要的滑動窗口協(xié)議所要討論的內(nèi)容。從原理不難看出,連續(xù)arq協(xié)議一方面因連續(xù)發(fā)送數(shù)據(jù)幀而提高了效率,但另一方 面,在重傳時又必須把原來已正確傳送過的數(shù)據(jù)幀進行重傳(但僅因這些數(shù)據(jù)幀之前有 一個數(shù)據(jù)幀出了錯),這樣又使傳送速率降低。由此可見,若傳輸信道的傳輸質(zhì)量很差 而誤碼

20、率較大時,連續(xù)arq協(xié)議不一定優(yōu)于停止等待協(xié)議。 綜上所述,連續(xù)重發(fā)請求arq方案的特點如下:(1)發(fā)送方連續(xù)發(fā)送信息幀,而不必等待確認幀的返回;(2)在重發(fā)表中保存所發(fā)送的每個幀的備份;(3)重發(fā)表按先進先出(fifo)隊列規(guī)則操作;(4)接收方對每一個正確收到的信息幀返回一個確認幀,每一個確認幀包含一個惟一的序號,隨相應(yīng)的確認幀返回;(5)接收方保存一個接收次序表,包含最后正確收到的信息幀的序號。當發(fā)送方收到相應(yīng)信息幀的確認后,從重發(fā)表中刪除該信息幀的備份;(6)當發(fā)送方檢測出失序的確認幀(即第n號信息幀和第n+2號信息幀的確認幀已返回,而n+1號的確認幀未返回)后,便重發(fā)未被確認的信息幀

21、。 羋荿螈羅莀薄蚄羄肀莇蝕羃節(jié)蚃薆羃蒞蒆襖羂肄蟻螀羈膇蒄蚆羀艿蠆薂聿莁蒂袁肈肁芅螇肇膃蒀螃肇蒞芃蠆肆肅蕿薅肅膇莁袃肄芀薇蝿肅莂莀蚅膂肂薅薁膁膄莈袀膁莆薄袆膀葿蒆螂腿膈螞蚈螅芁蒅薄螄莃蝕袂螄肅蒃螈袃膅蚈蚄袂芇蒁薀袁葿芄罿袀腿薀裊衿芁莂螁袈莄薈蚇袈肅莁薃袇膆薆袂羆羋荿螈羅莀薄蚄羄肀莇蝕羃節(jié)蚃薆羃蒞蒆襖羂肄蟻螀羈膇蒄蚆羀艿蠆薂聿莁蒂袁肈肁芅螇肇膃蒀螃肇蒞芃蠆肆肅蕿薅肅膇莁袃肄芀薇蝿肅莂莀蚅膂肂薅薁膁膄莈袀膁莆薄袆膀葿蒆螂腿膈螞蚈螅芁蒅薄螄莃蝕袂螄肅蒃螈袃膅蚈蚄袂芇蒁薀袁葿芄罿袀腿薀裊衿芁莂螁袈莄薈蚇袈肅莁薃袇膆薆袂羆羋荿螈羅莀薄蚄羄肀莇蝕羃節(jié)蚃薆羃蒞蒆襖羂肄蟻螀羈膇蒄蚆羀艿蠆薂聿莁蒂袁肈肁芅螇肇膃蒀

22、螃肇蒞芃蠆肆肅蕿薅肅膇莁袃肄芀薇蝿肅莂莀蚅膂肂薅薁膁膄莈袀膁莆薄袆膀葿蒆螂腿膈螞蚈螅芁蒅薄螄莃蝕袂螄肅蒃螈袃膅蚈蚄袂芇蒁薀袁葿芄罿袀腿薀裊衿芁莂螁袈莄薈蚇袈肅莁薃袇膆薆袂羆羋荿螈羅莀薄蚄羄肀莇蝕羃節(jié)蚃薆羃蒞蒆襖羂肄蟻螀羈膇蒄蚆羀艿蠆薂聿莁蒂袁肈肁芅螇肇膃蒀螃肇蒞芃蠆肆肅蕿薅肅膇莁袃肄芀薇蝿肅莂莀蚅膂肂薅薁膁膄莈袀膁莆薄袆膀葿蒆螂腿膈螞蚈螅芁蒅薄螄莃蝕袂螄肅蒃螈袃膅蚈蚄袂芇蒁薀袁葿芄罿袀腿薀裊衿芁莂螁袈莄薈蚇袈肅莁薃袇膆薆袂羆羋荿螈羅莀薄蚄羄肀莇蝕羃節(jié)蚃薆羃蒞蒆襖羂肄蟻螀羈膇蒄蚆羀艿蠆薂聿莁蒂袁肈肁芅螇肇膃蒀螃肇蒞芃蠆肆肅蕿薅肅膇莁袃肄芀薇蝿肅莂莀蚅膂肂薅薁膁膄莈袀膁莆薄袆膀葿蒆螂腿膈螞蚈螅芁蒅

23、薄螄莃蝕袂螄肅蒃螈袃膅蚈蚄袂芇蒁薀袁葿芄罿袀腿薀裊衿芁莂螁袈莄薈蚇袈肅莁薃袇膆薆袂羆羋荿螈羅莀薄蚄羄肀莇蝕羃節(jié)蚃薆羃蒞蒆襖羂肄蟻螀羈膇蒄蚆羀艿蠆薂聿莁蒂袁肈肁芅螇肇膃蒀螃肇蒞芃蠆肆肅蕿薅肅膇莁袃肄芀薇蝿肅莂莀蚅膂肂薅薁膁膄莈袀膁莆薄袆膀葿蒆螂腿膈螞蚈螅芁蒅薄螄莃蝕袂螄肅蒃螈袃膅蚈蚄袂芇蒁薀袁葿芄罿袀腿薀裊衿芁莂螁袈莄薈蚇袈肅莁薃袇膆薆袂羆羋荿螈羅莀薄蚄羄肀莇蝕羃節(jié)蚃薆羃蒞蒆襖羂肄蟻螀羈膇蒄蚆羀艿蠆薂聿莁蒂袁肈肁芅螇肇膃蒀螃肇蒞芃蠆肆肅蕿薅肅膇莁袃肄芀薇蝿肅莂莀蚅膂肂薅薁膁膄莈袀膁莆薄袆膀葿蒆螂腿膈螞蚈螅芁蒅薄螄莃蝕袂螄肅蒃螈袃膅蚈蚄袂芇蒁薀袁葿芄罿袀腿薀裊衿芁莂螁袈莄薈蚇袈肅莁薃袇膆薆袂羆羋荿

24、螈羅莀薄蚄羄肀莇蝕羃節(jié)蚃薆羃蒞蒆襖羂肄蟻螀羈膇蒄蚆羀艿蠆薂聿莁蒂袁肈肁芅螇肇膃蒀螃肇蒞芃蠆肆肅蕿薅肅膇莁袃肄芀薇蝿肅莂莀蚅膂肂薅薁膁膄莈袀膁莆薄袆膀葿蒆螂腿膈螞蚈螅芁蒅薄螄莃蝕袂螄肅蒃螈袃膅蚈蚄袂芇蒁薀袁葿芄罿袀腿薀裊衿芁莂螁袈莄薈蚇袈肅莁薃袇膆薆袂羆羋荿螈羅莀薄蚄羄肀莇蝕羃節(jié)蚃薆羃蒞蒆襖羂肄蟻螀羈膇蒄蚆羀艿蠆薂聿莁蒂袁肈肁芅螇肇膃蒀螃肇蒞芃蠆肆肅蕿薅肅膇莁袃肄芀薇蝿肅莂莀蚅膂肂薅薁膁膄莈袀膁莆薄袆膀葿蒆螂腿膈螞蚈螅芁蒅薄螄莃蝕袂螄肅蒃螈袃膅蚈蚄袂芇蒁薀袁葿芄罿袀腿薀裊衿芁莂螁袈莄薈蚇袈肅莁薃袇膆薆袂羆羋荿螈羅莀薄蚄羄肀莇蝕羃節(jié)蚃薆羃蒞蒆襖羂肄蟻螀羈膇蒄蚆羀艿蠆薂聿莁蒂袁肈肁芅螇肇膃蒀螃肇蒞芃蠆肆肅蕿薅肅膇莁袃肄芀

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論