計算機網(wǎng)絡(luò)原理實驗七、傳輸層可靠傳輸協(xié)議GBN編程實驗報告_第1頁
計算機網(wǎng)絡(luò)原理實驗七、傳輸層可靠傳輸協(xié)議GBN編程實驗報告_第2頁
計算機網(wǎng)絡(luò)原理實驗七、傳輸層可靠傳輸協(xié)議GBN編程實驗報告_第3頁
計算機網(wǎng)絡(luò)原理實驗七、傳輸層可靠傳輸協(xié)議GBN編程實驗報告_第4頁
計算機網(wǎng)絡(luò)原理實驗七、傳輸層可靠傳輸協(xié)議GBN編程實驗報告_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、實驗七、傳輸層可靠傳輸協(xié)議GBN編程實驗報告序號:姓名:學(xué)號:成績指導(dǎo)老師:一、實驗?zāi)康?1、通過編寫實現(xiàn)一個簡單可靠的數(shù)據(jù)傳輸協(xié)議GBN的發(fā)送和接收代碼,模擬可靠數(shù)據(jù)傳輸2、理解TCPfr議可靠傳輸?shù)牟铄e檢測、重傳、累計確認、定時器的可靠傳輸策略。二、實驗原理:在GBN中,發(fā)送端不需要在接收到上一個數(shù)據(jù)包的ACK后才發(fā)送下一個數(shù)據(jù)包,而是可以連續(xù)發(fā)送數(shù)據(jù)包。在發(fā)送端發(fā)送數(shù)據(jù)包的過程中,如果接收到對應(yīng)已發(fā)送的某個數(shù)據(jù)包的NACK ,則發(fā)送端將 NACK對應(yīng)的某個數(shù)據(jù)包進行重發(fā),然后再將該數(shù)據(jù)包之后的 數(shù)據(jù)包依次進行重發(fā)。三、結(jié)果分析:本次試驗中采用java語言進行程序編寫代碼注釋:(一)Sen

2、der 類import java.util.Timer;public class Sender extends Threadpublic int windowsize=3;發(fā)送方窗口長度設(shè)為 3public String口 data="data1","data2","data3","data4","data5","data6","data7"public int sign口=0,1,2,3,4,5,6;public int localack=-1;publ

3、ic Timers litime= null ;public int switches=0;public int windowsign口;/模擬七個數(shù)據(jù)包/為7個數(shù)據(jù)包標號保存最近收到的ACK/定時器(這里定為2秒)超時標志,1為超時/當(dāng)前窗口內(nèi)待發(fā)的數(shù)據(jù)分組的序號public int acksign=0;為0表示收到正確ACK,為1表示收到錯誤的ACK,必須重發(fā)!public Sender() windowsign= new int windowsize;/ 給窗口分配指定大小的空間for (int i=0;i<3;i+)windowsigni=signi;/ 窗口初始化時存放前3個序

4、號public void run()System. out .println(" 發(fā)送方開始發(fā)送分組數(shù)據(jù)!");public void getack( int ack)System. out .println(" 發(fā)送方收到了ACK, 序號為 "+ack+" 并且開始加以確認! ");if (ack!=localack+1)System. out .println(" 經(jīng)驗證, 這不是發(fā)送方正期待的ACK, 立刻重發(fā)序號為 "+(localack+1)+" 的數(shù)據(jù)分組!");acksign=1;

5、else localack=ack;/ 表示正確確認了ACK acksign=0;public void time()switches=0;/標志初女&化為0litime= new Timers();Timer limit= new Timer();limit.schedule(litime, 0,100);(二)Receiver 類import java.util.Random;public class Receiver extends Threadpublic int lastdata;public Sender sender;public void run(Sender s)se

6、nder=s;System. out .println("接收方開始接收分組數(shù)據(jù)!");void receive( int data, Sender s)sender=s;/發(fā)送方的參數(shù)傳遞System. out .println("接收方收到了序號為"+data+" 的分組!");if (data!=0)if (data=lastdata+1)/ 數(shù)據(jù)包序號校驗,若連續(xù)則是正確/所期待的System. out .println(" 該數(shù)據(jù)分組正是接收方所期待的,接收方接受了它并準備回送對應(yīng)的ACK! ");las

7、tdata=data;/ 更新本地保存的數(shù)據(jù)包序號變量respond(lastdata);/ 回送該正確接收的數(shù)據(jù)包對應(yīng)的ACKelse System. out .println(" 該數(shù)據(jù)分組不是接收方所期待的,該分組將被丟棄,接收方準備回送最后接受的數(shù)據(jù)分組對應(yīng)的ACK! ");respond(lastdata);/ 若不是所期待的數(shù)據(jù)包則丟棄并且重發(fā)上一次的ACKelse System. out .println(" 該數(shù)據(jù)分組正是接收方所期待的,接收方接受了它并準備回送對應(yīng)的ACK! ");lastdata=data;respond(lastda

8、ta);void respond( int ack)/ 首次接收數(shù)據(jù)包并且回送ACK/ 回送指定序號的ACKif (sender.litime.limit<20)/ 判斷是否超時(2秒)ack=lastdata;/ 獲取本場保存的數(shù)據(jù)包序號sender.getack(ack);else System. out .println(" 計時超時!(未丟包但是時間超過2秒)發(fā)送方準備重發(fā)序號為"+ack+" 的數(shù)據(jù)分組!");sender.switches=1;/ 如果超時,設(shè)置超時狀態(tài)并顯示警告(三)Timers 類import java.util.T

9、imerTask;public class Timers extends TimerTask public int switches;public int limit;public void run()if (limit<20) limit+;/ 計時2秒else switches=-1;this .cancel();/ 開關(guān)為 -1 表示超時,并且停止計時器public Timers()/啟動計時器時全部初始化switches=0;limit=0;(四)GBN類import .*;import java.util.Random;import java.io.*;public class

10、 GBN extends Threadstatic void senddelay( int x) throws InterruptedExceptionif(x=1) sleep (300); System. out .println("發(fā)送數(shù)據(jù)分組時發(fā)生延遲:300 毫秒! "); else if (x=2) sleep (750); System. out .println("發(fā)送數(shù)據(jù)分組時發(fā)生延遲:750毫秒! ");else if (x=3) sleep (1200);System. out .println("發(fā)送數(shù)據(jù)分組時發(fā)生延遲:

11、1200毫秒! ");else if (x=4) sleep (3000);System. out .println("發(fā)送數(shù)據(jù)分組時發(fā)生延遲:3000毫秒! ");else ;public static void main(String args) throws IOException,InterruptedException Sender s= new Sender();Receiver re= new Receiver();s.start();/ 發(fā)送端啟動re.run(s);/ 接收端啟動sleep (1000);/ 延遲處理int retimes= ne

12、w int 7;/ 計算每個分組被發(fā)送的次數(shù)for (int i=0;i<7;i+) retimesi=0;/ 數(shù)據(jù)包順次發(fā)送for (int i=0;i<=s.sign.length;i+)while (i>s.localack+1)/ 尚有未確認的數(shù)據(jù)包,重發(fā)!System. out .println(" 發(fā)送方開始重新發(fā)送序號為"+(s.localack+1)+" 的數(shù)據(jù)分組");retimess.localack+1+;int ran= new Random().nextInt(3);int randelay= new Rand

13、om().nextInt(5);s.time();senddelay (randelay); / 設(shè)置隨機值,模擬數(shù)據(jù)傳輸延遲if (ran!=1) re.receive(s.localack+1,s);/ 設(shè)置隨機值,模擬數(shù)據(jù)丟包過程else System. out .println(" 序號為 "+(s.localack+1)+" 的分組在傳給接收方途中發(fā)生了丟包!");if (i!=s.sign.length)System. out .println();System. out .println(" 發(fā)送方現(xiàn)在開始第一次發(fā)送序號為&quo

14、t;+i+" 的數(shù)據(jù)分組");retimesi+;if (i!=0)for (int k=0;k<3;k+)/ 表示至少成功發(fā)送并確認了一個數(shù)據(jù)分組s.windowsignk+;/ 這種情況下滑動窗口向前移動!System. out .println();System. out .println(" 當(dāng)前窗口內(nèi)的分組情況為:");/ 顯示當(dāng)前窗口內(nèi)數(shù)據(jù)包情況for (int p=0;p<3;p+)if (s.windowsignp<=6)System. out .println(" 第 "+p+" 號窗口里

15、面存放的是序 號為 "+s.windowsignp+" 的馬上待發(fā)送的數(shù)據(jù)分組!");elseSystem. out .println(" 第 "+p+" 號窗口已經(jīng)空了,并且后續(xù)窗口、發(fā)送方?jīng)]有要發(fā)送的數(shù)據(jù)分組了!");System. out .println();int ran= new Random().nextInt(3);int randelay= new Random().nextInt(5);s.time();/計時開始(2秒時間)senddelay (randelay);/設(shè)置隨機值,模擬數(shù)據(jù)傳輸延遲if (

16、ran!=1) re.receive(s.signi,s);/ 設(shè)置隨機值,模擬數(shù)據(jù)丟包過程else System. out .println(" 序號為 "+i+" 的分組在傳給接收方途中發(fā)生了丟包!");System. out .println();System. out .println(" 以下是每個數(shù)據(jù)分組被發(fā)送過的次數(shù)的統(tǒng)計結(jié)果");for (int i=0;i<7;i+)/ 顯示關(guān)于每個數(shù)據(jù)包發(fā)送次數(shù)的統(tǒng)計表System. out .println(" 序號為 "+i+" 的數(shù)據(jù)分組被

17、發(fā)送過的次數(shù)為:"+retimesi);System. exit (0);結(jié)果截圖:5正制白筋4,"d Wi砧囹窗|4/ ° 1V*止A gbn Uava ,捌 E:Prvgram AlesJava|dk 1.7.0 0Sbinjsvaw.exrt-2O12-1V25 TTSiiljlsj"發(fā)送方現(xiàn)任開始卷一次發(fā)送序號為Offi救據(jù)分擔(dān)當(dāng)芭窗口內(nèi)的分期情況為:第0匚里面存畸:皇序司力淵馬上后發(fā)送的蛔£分段!銀1一口田圓存琥的是序號內(nèi)1的馬上將援送的裝*第!意號套口里面有成的是序號為2的馬上待發(fā)送的版據(jù)分謳!發(fā)曲據(jù)分俎時爰生汪君:3000!侵收方

18、收到了序號為。的分雄!該數(shù)據(jù)分詛正是接收方斫期博的.邈收方接直了百升;把急叵送對應(yīng)的“CK 1什于電盯?。ㄎ磥G包但是盯間闔強和;)發(fā)送方準備量發(fā)生后方覺蛔E分綱:鞋送方開始含新澄送序號為卿數(shù)據(jù)分組發(fā)送數(shù)據(jù)分明時愛生延遲:3000奎秒1當(dāng)防收劃了序號為口的分婚!詼數(shù)喻源正呈接It!方所期得的.空收方接置了它并巷音叵送咫應(yīng)的E7K :葉的爸時! !(耒丟包但是時間超垣2眇夜送方;觸雪虻序號為DK效據(jù)分氈口發(fā)送方開始里資發(fā)送序號為時數(shù)據(jù)分明多妨收到了序號為0的分殂!俵舐持分擔(dān)正導(dǎo)播收方所期待的.播收方播受了啟開;隹蓄叵送湖應(yīng)的4CR !發(fā)送聲儂I了穴CK,序號為曲目開始卻以通認!發(fā)在方現(xiàn)任開始芳一次

19、發(fā)送序號為1的II據(jù)分擔(dān)當(dāng)芭奇匚內(nèi)的分蛆情況為:第0匚里面存放比星序禺為1的馬上后發(fā)送的初&分段!鎮(zhèn)1號堂匚里圓巖琥的是序號為2的馬上待援送的翻好讀!惠號堂口里面存效的是序號為3的馬上待發(fā)送的數(shù)據(jù)分至!發(fā)曲據(jù)分俎時宣生汪正:1300粉!侵收方收到了字號為1的分雄!gbn JavaE:Program FilesJavajdkl.7.0.09binjavaw.exe ( 2012-11-25 下午8:22:18 )當(dāng)前臺口司的分組情況為:警OS口里面存放的是序號為2的馬上待發(fā)送的3般分組!堂1號意匚里面存放的是序號為3的馬上帝發(fā)送的數(shù)據(jù)分組!篦2號窗匚里面存放的是序號為4的馬上行發(fā)送的數(shù)據(jù)

20、分組!時: 30004!授權(quán)方收&了序號為2的分組!該那S分殂正呈接收方所期待的發(fā)收方接受了它并準備回注對應(yīng)的ACK !計的超時! !(未丟包但是時間超過2秒)發(fā)送方冠備里發(fā)序號為2的Sf§ !發(fā)送方開給重新發(fā)送序號為2的數(shù)據(jù)分組發(fā)送數(shù)掘施時發(fā)生延遲:300堂秒!序號為2的分組在傳給接收方途中發(fā)生了丟包!發(fā)送方開啟望新發(fā)送序號為2的數(shù)據(jù)分組按收方收到了序號為2的分組!該致?lián)譁I不呈接收方所期待的.該分組將被丟棄,接收方準備回送最后接受的致友分組方應(yīng)的ACK !發(fā)送方收到了ACK ,序號為2并且開始加以崎認!發(fā)送方現(xiàn)在開始第一次發(fā)送序號為3的數(shù)3g分組 當(dāng)?shù)牡强趦?nèi)的分組情況為:

21、 第婚窗匚里面存放的是序號為3的馬上帝發(fā)送的數(shù)據(jù)分組!篁1號專匚里面存放的星序號為4的馬上行發(fā)送的救據(jù)分組! 寒號窗匚蟲回存放的期號為5的馬上待發(fā)送的數(shù)據(jù)分組!按權(quán)方收到了序號為3的分組!該數(shù)JS分殂正號接收方所期待的,發(fā)收方接受了它并準備回送對應(yīng)的ACK !發(fā)送方收到了ACK ,序號為3并且開始加以確認!發(fā)送方現(xiàn)國詒第一次發(fā)送序號為4的教玄分組 當(dāng)?shù)拇翱趦?nèi)的分組情況為: 第窗匚里面存放的是序號為4的馬上待發(fā)泊5數(shù)據(jù)分組: 童1號鹿匚里面存放的呈序號為5的馬上行發(fā)送的救森分組!-喜也|孱曲氣學(xué)|巴里 E 一止gbn JavaE:Program FilesJavajdkl.7.0_09binja

22、vaw.exe ( 2012-11-25 下心:22:18 )當(dāng)?shù)拇翱趦?nèi)的分組情況為:箸(X密口里面存放的是序號為4的馬上待發(fā)送的數(shù)據(jù)分組!第1號商口里面存放的是序號為5的馬上待發(fā)送的數(shù)據(jù)分組!第2號窗口里面存放的是序號為6的馬上待發(fā)送的數(shù)據(jù)分組1發(fā)送:536汾組時發(fā)生SB8 : 30002ft;!接收方收到了序號為4的分組!該數(shù)38分迫正是接收方所期待的,接發(fā)方接受了它并濮備回送對應(yīng)的ACK !計時超時! !(未丟包但號盯間羥過2秒)發(fā)送方金&重發(fā)序號為4的數(shù)據(jù)分阻!發(fā)送方開啟重新發(fā)送序號為4的教點分坦發(fā)圖5娛余S時發(fā)生延遲:1200JS秒!序號為4的分阻在傳給接收方途中發(fā)生了丟包!發(fā)送方開啟重新發(fā)送序號為4的加盼且發(fā)送初跆組時發(fā)生延遲:300堂秒!序號為4的分殂在傳給授收方途中發(fā)生了受包!發(fā)送方開云重新發(fā)送序號為4的數(shù)據(jù)分組發(fā)送數(shù)據(jù)強時發(fā)生延遲:1200室秒!序號為4的分組在傳給授收方途中發(fā)生了丟包!發(fā)送方開治新發(fā)送序號為例數(shù)據(jù)分組發(fā)送數(shù)據(jù)分組時發(fā)生延遲:1200室秒!覆收方收到了序號為4的分組!該數(shù)據(jù)分淚不是接收方所期待的,該分組格極丟棄,接收方法蕾回送親后接受的數(shù)據(jù)分電對應(yīng)的ACK !發(fā)送方收到了ACK,序號為4并且開始加以冷認!發(fā)送方現(xiàn)任開始算一次發(fā)送序號為5的JJ曲分組當(dāng)前窗口內(nèi)的分組情況為:SSF窗口盅圓存放的息序0力

溫馨提示

  • 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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論