欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2022年2022年计算机网络原理实验传输层可靠传输协议GBN编程实验报告 .pdf

    • 资源ID:34256989       资源大小:733.68KB        全文页数:12页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2022年2022年计算机网络原理实验传输层可靠传输协议GBN编程实验报告 .pdf

    实验七、 传输层可靠传输协议GBN 编程实验报告序号:姓名:学号:成绩指导老师:一、实验目的:1、通过编写实现一个简单可靠的数据传输协议GBN的发送和接收代码,模拟可靠数据传输2、理解 TCP协议可靠传输的差错检测、重传、累计确认、定时器的可靠传输策略。二、实验原理:在 GBN 中,发送端不需要在接收到上一个数据包的ACK 后才发送下一个数据包,而是可以连续发送数据包。在发送端发送数据包的过程中,如果接收到对应已发送的某个数据包的 NACK ,则发送端将NACK 对应的某个数据包进行重发,然后再将该数据包之后的数据包依次进行重发。三、结果分析:本次试验中采用java 语言进行程序编写代码注释:(一) Sender 类import java.util.Timer; publicclass Sender extends Thread publicint windowsize=3; / 发送方窗口长度设为3 publicString data=data1,data2,data3, data4,data5,data6,data7; / 模拟七个数据包publicint sign=0,1,2,3,4,5,6; / 为7个数据包标号publicint localack=-1; / 保存最近收到的ACK public Timers litime=null ; / 定时器(这里定为2秒)publicint switches=0; / 超时标志, 1为超时publicint windowsign; / 当前窗口内待发的数据分组的序号publicint acksign=0; / 为0表示收到正确 ACK,为1表示收到错误的ACK,必须重发!名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 12 页 - - - - - - - - - public Sender() windowsign=new int windowsize; / 给窗口分配指定大小的空间for (int i=0;i3;i+) windowsigni=signi; / 窗口初始化时存放前3个序号 publicvoid run() System.out.println(发送方开始发送分组数据!); publicvoid getack( int ack) System.out.println(发送方收到了 ACK, 序号为 +ack+并且开始加以确认! ); if (ack!=localack+1) System.out.println(经验证,这不是发送方正期待的ACK,立刻重发序号为 +(localack+1)+的数据分组! ); acksign=1; else localack=ack; / 表示正确确认了ACK acksign=0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 12 页 - - - - - - - - - publicvoid time() switches=0; / 标志初始化为 0 litime=new Timers(); Timer limit=new Timer(); limit.schedule(litime, 0,100); (二) Receiver 类import java.util.Random; publicclass Receiver extends Thread publicint lastdata; public Sender sender; publicvoid run(Sender s) sender=s; System.out.println(接收方开始接收分组数据!); void receive( int data, Sender s) sender=s; / 发送方的参数传递System.out.println(接收方收到了序号为+data+的分组! ); if (data!=0) if(data=lastdata+1) / 数据包序号校验,若连续则是正确/所期待的名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 12 页 - - - - - - - - - System.out.println(该数据分组正是接收方所期待的,接收方接受了它并准备回送对应的ACK!); lastdata=data; / 更新本地保存的数据包序号变量respond(lastdata); / 回送该正确接收的数据包对应的ACK else System.out.println(该数据分组不是接收方所期待的,该分组将被丢弃,接收方准备回送最后接受的数据分组对应的ACK!); respond(lastdata); / 若不是所期待的数据包则丢弃并且重发上一次的ACK else System.out.println(该数据分组正是接收方所期待的,接收方接受了它并准备回送对应的ACK!); lastdata=data; respond(lastdata); / 首次接收数据包并且回送ACK void respond( int ack) / 回送指定序号的 ACK if (sender.litime.limit20) / 判断是否超时( 2秒)ack=lastdata; / 获取本场保存的数据包序号名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 12 页 - - - - - - - - - sender.getack(ack); else System.out.println(计时超时!(未丢包但是时间超过2秒)发送方准备重发序号为+ack+的数据分组! ); sender.switches=1; / 如果超时,设置超时状态并显示警告 (三) Timers 类import java.util.TimerTask; publicclass Timers extends TimerTask publicint switches; publicint limit; publicvoid run() if (limit20) limit+; / 计时2秒else switches=-1; this .cancel(); / 开关为 -1 表示超时,并且停止计时器 public Timers() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 12 页 - - - - - - - - - switches=0; / 启动计时器时全部初始化limit=0; (四) GBN 类import .*; import java.util.Random; import java.io.*; publicclass GBN extends Thread staticvoid senddelay(int x) throws InterruptedException if (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(发送数据分组时发生延迟: 1200 毫秒! ); else if (x=4) sleep(3000);System.out.println(发送数据分组时发生延迟: 3000 毫秒! ); else ; publicstaticvoid main(String args) throws IOException, 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 12 页 - - - - - - - - - InterruptedException Sender s= new Sender(); Receiver re=new Receiver(); s.start(); / 发送端启动re.run(s); / 接收端启动sleep(1000); / 延迟处理int retimes=newint 7; / 计算每个分组被发送的次数for (int i=0;i7;i+) retimesi=0; / 数据包顺次发送for (int i=0;is.localack+1) / 尚有未确认的数据包, 重发!System.out.println(发送方开始重新发送序号为+(s.localack+1)+的数据分组 ); retimess.localack+1+; int ran= new Random().nextInt(3); intrandelay=new Random().nextInt(5); s.time(); senddelay(randelay); / 设置随机值,模拟数据传输延迟if (ran!=1) re.receive(s.localack+1,s); / 设置随机值,模拟数据丢包过程else System.out.println(序号为 +(s.localack+1)+的分组在名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 12 页 - - - - - - - - - 传给接收方途中发生了丢包!); if(i!=s.sign.length) System.out.println(); System.out.println(发送方现在开始第一次发送序号为+i+ 的数据分组 ); retimesi+; if (i!=0) for (int k=0;k3;k+) / 表示至少成功发送并确认了一个数据分组s.windowsignk+; / 这种情况下滑动窗口向前移动! System.out.println(); System.out.println(当前窗口内的分组情况为:); / 显示当前窗口内数据包情况for (int p=0;p3;p+) if (s.windowsignp=6) System.out.println(第+p+号窗口里面存放的是序号为 +s.windowsignp+的马上待发送的数据分组!); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 12 页 - - - - - - - - - elseSystem.out.println(第+p+号窗口已经空了,并且后续窗口、发送方没有要发送的数据分组了!); System.out.println(); int ran= new Random().nextInt(3); intrandelay=new Random().nextInt(5); s.time(); / 计时开始( 2秒时间)senddelay(randelay); / 设置随机值,模拟数据传输延迟if (ran!=1) re.receive(s.signi,s); / 设置随机值,模拟数据丢包过程else System.out.println(序号为 +i+的分组在传给接收方途中发生了丢包! ); System.out.println();System.out.println(以下是每个数据分组被发送过的次数的统计结果); for (int i=0;i7;i+) / 显示关于每个数据包发送次数的统计表System.out.println(序号为 +i+的数据分组被发送过的次数为:+retimesi); System.exit(0); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 12 页 - - - - - - - - - 结果截图 : 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 12 页 - - - - - - - - - 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 12 页 - - - - - - - - - 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 12 页 - - - - - - - - -

    注意事项

    本文(2022年2022年计算机网络原理实验传输层可靠传输协议GBN编程实验报告 .pdf)为本站会员(Che****ry)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开