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

下載本文檔

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

文檔簡(jiǎn)介

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

2、der 類(lèi)import java.util.Timer;public class Sender extends Threadpublic int windowsize=3;發(fā)送方窗口長(zhǎng)度設(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口;/模擬七個(gè)數(shù)據(jù)包/為7個(gè)數(shù)據(jù)包標(biāo)號(hào)保存最近收到的ACK/定時(shí)器(這里定為2秒)超時(shí)標(biāo)志,1為超時(shí)/當(dāng)前窗口內(nèi)待發(fā)的數(shù)據(jù)分組的序號(hào)public int acksign=0;為0表示收到正確ACK,為1表示收到錯(cuò)誤的ACK,必須重發(fā)!public Sender() windowsign= new int windowsize;/ 給窗口分配指定大小的空間for (int i=0;i<3;i+)windowsigni=signi;/ 窗口初始化時(shí)存放前3個(gè)序

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

5、else localack=ack;/ 表示正確確認(rèn)了ACK acksign=0;public void time()switches=0;/標(biāo)志初女&化為0litime= new Timers();Timer limit= new Timer();limit.schedule(litime, 0,100);(二)Receiver 類(lèi)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("接收方開(kāi)始接收分組數(shù)據(jù)!");void receive( int data, Sender s)sender=s;/發(fā)送方的參數(shù)傳遞System. out .println("接收方收到了序號(hào)為"+data+" 的分組!");if (data!=0)if (data=lastdata+1)/ 數(shù)據(jù)包序號(hào)校驗(yàn),若連續(xù)則是正確/所期待的System. out .println(" 該數(shù)據(jù)分組正是接收方所期待的,接收方接受了它并準(zhǔn)備回送對(duì)應(yīng)的ACK! ");las

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

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

9、imerTask;public class Timers extends TimerTask public int switches;public int limit;public void run()if (limit<20) limit+;/ 計(jì)時(shí)2秒else switches=-1;this .cancel();/ 開(kāi)關(guān)為 -1 表示超時(shí),并且停止計(jì)時(shí)器public Timers()/啟動(dòng)計(jì)時(shí)器時(shí)全部初始化switches=0;limit=0;(四)GBN類(lèi)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ù)分組時(shí)發(fā)生延遲:300 毫秒! "); else if (x=2) sleep (750); System. out .println("發(fā)送數(shù)據(jù)分組時(shí)發(fā)生延遲:750毫秒! ");else if (x=3) sleep (1200);System. out .println("發(fā)送數(shù)據(jù)分組時(shí)發(fā)生延遲:

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

12、w int 7;/ 計(jì)算每個(gè)分組被發(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)/ 尚有未確認(rèn)的數(shù)據(jù)包,重發(fā)!System. out .println(" 發(fā)送方開(kāi)始重新發(fā)送序號(hào)為"+(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è)置隨機(jī)值,模擬數(shù)據(jù)傳輸延遲if (ran!=1) re.receive(s.localack+1,s);/ 設(shè)置隨機(jī)值,模擬數(shù)據(jù)丟包過(guò)程else System. out .println(" 序號(hào)為 "+(s.localack+1)+" 的分組在傳給接收方途中發(fā)生了丟包!");if (i!=s.sign.length)System. out .println();System. out .println(" 發(fā)送方現(xiàn)在開(kāi)始第一次發(fā)送序號(hào)為&quo

14、t;+i+" 的數(shù)據(jù)分組");retimesi+;if (i!=0)for (int k=0;k<3;k+)/ 表示至少成功發(fā)送并確認(rèn)了一個(gè)數(shù)據(jù)分組s.windowsignk+;/ 這種情況下滑動(dòng)窗口向前移動(dòng)!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+" 號(hào)窗口里

15、面存放的是序 號(hào)為 "+s.windowsignp+" 的馬上待發(fā)送的數(shù)據(jù)分組!");elseSystem. out .println(" 第 "+p+" 號(hào)窗口已經(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();/計(jì)時(shí)開(kāi)始(2秒時(shí)間)senddelay (randelay);/設(shè)置隨機(jī)值,模擬數(shù)據(jù)傳輸延遲if (

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

17、發(fā)送過(guò)的次數(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)任開(kāi)始卷一次發(fā)送序號(hào)為Offi救據(jù)分擔(dān)當(dāng)芭窗口內(nèi)的分期情況為:第0匚里面存畸:皇序司力淵馬上后發(fā)送的蛔£分段!銀1一口田圓存琥的是序號(hào)內(nèi)1的馬上將援送的裝*第!意號(hào)套口里面有成的是序號(hào)為2的馬上待發(fā)送的版據(jù)分謳!發(fā)曲據(jù)分俎時(shí)爰生汪君:3000!侵收方

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

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

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

21、 第婚窗匚里面存放的是序號(hào)為3的馬上帝發(fā)送的數(shù)據(jù)分組!篁1號(hào)專(zhuān)匚里面存放的星序號(hào)為4的馬上行發(fā)送的救據(jù)分組! 寒號(hào)窗匚蟲(chóng)回存放的期號(hào)為5的馬上待發(fā)送的數(shù)據(jù)分組!按權(quán)方收到了序號(hào)為3的分組!該數(shù)JS分殂正號(hào)接收方所期待的,發(fā)收方接受了它并準(zhǔn)備回送對(duì)應(yīng)的ACK !發(fā)送方收到了ACK ,序號(hào)為3并且開(kāi)始加以確認(rèn)!發(fā)送方現(xiàn)國(guó)詒第一次發(fā)送序號(hào)為4的教玄分組 當(dāng)?shù)拇翱趦?nèi)的分組情況為: 第窗匚里面存放的是序號(hào)為4的馬上待發(fā)泊5數(shù)據(jù)分組: 童1號(hào)鹿匚里面存放的呈序號(hào)為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密口里面存放的是序號(hào)為4的馬上待發(fā)送的數(shù)據(jù)分組!第1號(hào)商口里面存放的是序號(hào)為5的馬上待發(fā)送的數(shù)據(jù)分組!第2號(hào)窗口里面存放的是序號(hào)為6的馬上待發(fā)送的數(shù)據(jù)分組1發(fā)送:536汾組時(shí)發(fā)生SB8 : 30002ft;!接收方收到了序號(hào)為4的分組!該數(shù)38分迫正是接收方所期待的,接發(fā)方接受了它并濮備回送對(duì)應(yīng)的ACK !計(jì)時(shí)超時(shí)! !(未丟包但號(hào)盯間羥過(guò)2秒)發(fā)送方金&重發(fā)序號(hào)為4的數(shù)據(jù)分阻!發(fā)送方開(kāi)啟重新發(fā)送序號(hào)為4的教點(diǎn)分坦發(fā)圖5娛余S時(shí)發(fā)生延遲:1200JS秒!序號(hào)為4的分阻在傳給接收方途中發(fā)生了丟包!發(fā)送方開(kāi)啟重新發(fā)送序號(hào)為4的加盼且發(fā)送初跆組時(shí)發(fā)生延遲:300堂秒!序號(hào)為4的分殂在傳給授收方途中發(fā)生了受包!發(fā)送方開(kāi)云重新發(fā)送序號(hào)為4的數(shù)據(jù)分組發(fā)送數(shù)據(jù)強(qiáng)時(shí)發(fā)生延遲:1200室秒!序號(hào)為4的分組在傳給授收方途中發(fā)生了丟包!發(fā)送方開(kāi)治新發(fā)送序號(hào)為例數(shù)據(jù)分組發(fā)送數(shù)據(jù)分組時(shí)發(fā)生延遲:1200室秒!覆收方收到了序號(hào)為4的分組!該數(shù)據(jù)分淚不是接收方所期待的,該分組格極丟棄,接收方法蕾回送親后接受的數(shù)據(jù)分電對(duì)應(yīng)的ACK !發(fā)送方收到了ACK,序號(hào)為4并且開(kāi)始加以冷認(rèn)!發(fā)送方現(xiàn)任開(kāi)始算一次發(fā)送序號(hào)為5的JJ曲分組當(dāng)前窗口內(nèi)的分組情況為:SSF窗口盅圓存放的息序0力

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論