计算机网络原理实验七、传输层可靠传输协议GBN编程实验报告_第1页
计算机网络原理实验七、传输层可靠传输协议GBN编程实验报告_第2页
计算机网络原理实验七、传输层可靠传输协议GBN编程实验报告_第3页
计算机网络原理实验七、传输层可靠传输协议GBN编程实验报告_第4页
计算机网络原理实验七、传输层可靠传输协议GBN编程实验报告_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验七、传输层可靠传输协议GBN编程实验报告序号:姓名:学号:成绩指导老师:一、实验目的:1、通过编写实现一个简单可靠的数据传输协议GBN的发送和接收代码,模拟可靠数据传输2、理解TCPfr议可靠传输的差错检测、重传、累计确认、定时器的可靠传输策略。二、实验原理:在GBN中,发送端不需要在接收到上一个数据包的ACK后才发送下一个数据包,而是可以连续发送数据包。在发送端发送数据包的过程中,如果接收到对应已发送的某个数据包的NACK ,则发送端将 NACK对应的某个数据包进行重发,然后再将该数据包之后的 数据包依次进行重发。三、结果分析:本次试验中采用java语言进行程序编写代码注释:(一)Sen

2、der 类import java.util.Timer;public class Sender extends Threadpublic int windowsize=3;发送方窗口长度设为 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口;/模拟七个数据包/为7个数据包标号保存最近收到的ACK/定时器(这里定为2秒)超时标志,1为超时/当前窗口内待发的数据分组的序号public int acksign=0;为0表示收到正确ACK,为1表示收到错误的ACK,必须重发!public Sender() windowsign= new int windowsize;/ 给窗口分配指定大小的空间for (int i=0;i<3;i+)windowsigni=signi;/ 窗口初始化时存放前3个序

4、号public void run()System. out .println(" 发送方开始发送分组数据!");public void getack( int ack)System. out .println(" 发送方收到了ACK, 序号为 "+ack+" 并且开始加以确认! ");if (ack!=localack+1)System. out .println(" 经验证, 这不是发送方正期待的ACK, 立刻重发序号为 "+(localack+1)+" 的数据分组!");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("接收方开始接收分组数据!");void receive( int data, Sender s)sender=s;/发送方的参数传递System. out .println("接收方收到了序号为"+data+" 的分组!");if (data!=0)if (data=lastdata+1)/ 数据包序号校验,若连续则是正确/所期待的System. out .println(" 该数据分组正是接收方所期待的,接收方接受了它并准备回送对应的ACK! ");las

7、tdata=data;/ 更新本地保存的数据包序号变量respond(lastdata);/ 回送该正确接收的数据包对应的ACKelse System. out .println(" 该数据分组不是接收方所期待的,该分组将被丢弃,接收方准备回送最后接受的数据分组对应的ACK! ");respond(lastdata);/ 若不是所期待的数据包则丢弃并且重发上一次的ACKelse System. out .println(" 该数据分组正是接收方所期待的,接收方接受了它并准备回送对应的ACK! ");lastdata=data;respond(lastda

8、ta);void respond( int ack)/ 首次接收数据包并且回送ACK/ 回送指定序号的ACKif (sender.litime.limit<20)/ 判断是否超时(2秒)ack=lastdata;/ 获取本场保存的数据包序号sender.getack(ack);else System. out .println(" 计时超时!(未丢包但是时间超过2秒)发送方准备重发序号为"+ack+" 的数据分组!");sender.switches=1;/ 如果超时,设置超时状态并显示警告(三)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();/ 开关为 -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("发送数据分组时发生延迟:300 毫秒! "); else if (x=2) sleep (750); System. out .println("发送数据分组时发生延迟:750毫秒! ");else if (x=3) sleep (1200);System. out .println("发送数据分组时发生延迟:

11、1200毫秒! ");else if (x=4) sleep (3000);System. out .println("发送数据分组时发生延迟:3000毫秒! ");else ;public static void main(String args) throws IOException,InterruptedException Sender s= new Sender();Receiver re= new Receiver();s.start();/ 发送端启动re.run(s);/ 接收端启动sleep (1000);/ 延迟处理int retimes= ne

12、w int 7;/ 计算每个分组被发送的次数for (int i=0;i<7;i+) retimesi=0;/ 数据包顺次发送for (int i=0;i<=s.sign.length;i+)while (i>s.localack+1)/ 尚有未确认的数据包,重发!System. out .println(" 发送方开始重新发送序号为"+(s.localack+1)+" 的数据分组");retimess.localack+1+;int ran= new Random().nextInt(3);int randelay= new Rand

13、om().nextInt(5);s.time();senddelay (randelay); / 设置随机值,模拟数据传输延迟if (ran!=1) re.receive(s.localack+1,s);/ 设置随机值,模拟数据丢包过程else System. out .println(" 序号为 "+(s.localack+1)+" 的分组在传给接收方途中发生了丢包!");if (i!=s.sign.length)System. out .println();System. out .println(" 发送方现在开始第一次发送序号为&quo

14、t;+i+" 的数据分组");retimesi+;if (i!=0)for (int k=0;k<3;k+)/ 表示至少成功发送并确认了一个数据分组s.windowsignk+;/ 这种情况下滑动窗口向前移动!System. out .println();System. out .println(" 当前窗口内的分组情况为:");/ 显示当前窗口内数据包情况for (int p=0;p<3;p+)if (s.windowsignp<=6)System. out .println(" 第 "+p+" 号窗口里

15、面存放的是序 号为 "+s.windowsignp+" 的马上待发送的数据分组!");elseSystem. out .println(" 第 "+p+" 号窗口已经空了,并且后续窗口、发送方没有要发送的数据分组了!");System. out .println();int ran= new Random().nextInt(3);int randelay= new Random().nextInt(5);s.time();/计时开始(2秒时间)senddelay (randelay);/设置随机值,模拟数据传输延迟if (

16、ran!=1) re.receive(s.signi,s);/ 设置随机值,模拟数据丢包过程else System. out .println(" 序号为 "+i+" 的分组在传给接收方途中发生了丢包!");System. out .println();System. out .println(" 以下是每个数据分组被发送过的次数的统计结果");for (int i=0;i<7;i+)/ 显示关于每个数据包发送次数的统计表System. out .println(" 序号为 "+i+" 的数据分组被

17、发送过的次数为:"+retimesi);System. exit (0);结果截图:5正制白筋4,"d Wi砧囹窗|4/ ° 1V*止A gbn Uava ,捌 E:Prvgram AlesJava|dk 1.7.0 0Sbinjsvaw.exrt-2O12-1V25 TTSiiljlsj"发送方现任开始卷一次发送序号为Offi救据分担当芭窗口内的分期情况为:第0匚里面存畸:皇序司力渊马上后发送的蛔£分段!银1一口田圆存琥的是序号内1的马上将援送的装*第!意号套口里面有成的是序号为2的马上待发送的版据分讴!发曲据分俎时爰生汪君:3000!侵收方

18、收到了序号为。的分雄!该数据分诅正是接收方斫期博的.邈收方接直了百升;把急叵送对应的“CK 1什于电盯!(未丢包但是盯间阖强和;)发送方准备量发生后方觉蛔E分纲:鞋送方开始含新澄送序号为卿数据分组发送数据分明时爱生延迟:3000奎秒1当防收划了序号为口的分婚!诙数喻源正呈接It!方所期得的.空收方接置了它并巷音叵送咫应的E7K :叶的爸时! !(耒丢包但是时间超垣2眇夜送方;触雪虻序号为DK效据分毡口发送方开始里资发送序号为时数据分明多妨收到了序号为0的分殂!俵舐持分担正导播收方所期待的.播收方播受了启开;隹蓄叵送湖应的4CR !发送声侬I了穴CK,序号为曲目开始却以通认!发在方现任开始芳一次

19、发送序号为1的II据分担当芭奇匚内的分蛆情况为:第0匚里面存放比星序禺为1的马上后发送的初&分段!镇1号堂匚里圆岩琥的是序号为2的马上待援送的翻好读!惠号堂口里面存效的是序号为3的马上待发送的数据分至!发曲据分俎时宣生汪正:1300粉!侵收方收到了字号为1的分雄!gbn JavaE:Program FilesJavajdkl.7.0.09binjavaw.exe ( 2012-11-25 下午8:22:18 )当前台口司的分组情况为:警OS口里面存放的是序号为2的马上待发送的3般分组!堂1号意匚里面存放的是序号为3的马上帝发送的数据分组!篦2号窗匚里面存放的是序号为4的马上行发送的数据

20、分组!时: 30004!授权方收&了序号为2的分组!该那S分殂正呈接收方所期待的发收方接受了它并准备回注对应的ACK !计的超时! !(未丢包但是时间超过2秒)发送方冠备里发序号为2的Sf§ !发送方开给重新发送序号为2的数据分组发送数掘施时发生延迟:300堂秒!序号为2的分组在传给接收方途中发生了丢包!发送方开启望新发送序号为2的数据分组按收方收到了序号为2的分组!该致据分泪不呈接收方所期待的.该分组将被丢弃,接收方准备回送最后接受的致友分组方应的ACK !发送方收到了ACK ,序号为2并且开始加以崎认!发送方现在开始第一次发送序号为3的数3g分组 当的登口内的分组情况为:

21、 第婚窗匚里面存放的是序号为3的马上帝发送的数据分组!篁1号专匚里面存放的星序号为4的马上行发送的救据分组! 寒号窗匚虫回存放的期号为5的马上待发送的数据分组!按权方收到了序号为3的分组!该数JS分殂正号接收方所期待的,发收方接受了它并准备回送对应的ACK !发送方收到了ACK ,序号为3并且开始加以确认!发送方现国诒第一次发送序号为4的教玄分组 当的窗口内的分组情况为: 第窗匚里面存放的是序号为4的马上待发泊5数据分组: 童1号鹿匚里面存放的呈序号为5的马上行发送的救森分组!-喜也|孱曲气学|巴里 E 一止gbn JavaE:Program FilesJavajdkl.7.0_09binja

22、vaw.exe ( 2012-11-25 下心:22:18 )当的窗口内的分组情况为:箸(X密口里面存放的是序号为4的马上待发送的数据分组!第1号商口里面存放的是序号为5的马上待发送的数据分组!第2号窗口里面存放的是序号为6的马上待发送的数据分组1发送:536汾组时发生SB8 : 30002ft;!接收方收到了序号为4的分组!该数38分迫正是接收方所期待的,接发方接受了它并濮备回送对应的ACK !计时超时! !(未丢包但号盯间羟过2秒)发送方金&重发序号为4的数据分阻!发送方开启重新发送序号为4的教点分坦发图5娱余S时发生延迟:1200JS秒!序号为4的分阻在传给接收方途中发生了丢包!发送方开启重新发送序号为4的加盼且发送初跆组时发生延迟:300堂秒!序号为4的分殂在传给授收方途中发生了受包!发送方开云重新发送序号为4的数据分组发送数据强时发生延迟:1200室秒!序号为4的分组在传给授收方途中发生了丢包!发送方开治新发送序号为例数据分组发送数据分组时发生延迟:1200室秒!覆收方收到了序号为4的分组!该数据分泪不是接收方所期待的,该分组格极丢弃,接收方法蕾回送亲后接受的数据分电对应的ACK !发送方收到了ACK,序号为4并且开始加以冷认!发送方现任开始算一次发送序号为5的JJ曲分组当前窗口内的分组情况为:SSF窗口盅圆存放的息序0力

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论