基于Python实现可靠数据传输协议

可靠数据传输协议

实验目的:

  • 理解可靠数据传输的基本原理
  • 掌握停等协议的工作原理
  • 掌握基于 UDP 设计并实现一个停等协议的过程与技术。
  • 理解滑动窗口协议的基本原理;掌握 GBN 的工作原理;掌握基于UDP 设计并实现一个GBN协议的过程与技术。

实验内容:

  1. 基于UDP设计一个简单的停等协议,实现单向可靠数据传输(服务器到客户的数据传输)。
  2. 模拟引入数据包的丢失,验证所设计协议的有效性。
  3. 改进所设计的停等协议,支持双向数据传输
  4. 基于所设计的停等协议,实现一个C/S结构的文件传输应用。
  5. 基于UDP设计一个简单的GBN协议,实现单向可靠数据传输(服务器到客户的数据传输)。
  6. 模拟引入数据包的丢失,验证所设计协议的有效性。
  7. 改进所设计的GBN协议,支持双向数据传输
  8. 将所设计的GBN协议改进为SR协议。

实验过程:

1.首先启动服务器server.py,此时由于客户端未启动,所以所有接收来自客户端的请求均会产生异常,同时间歇性有超时的提示

2.启动客户端client.py,观察接收到的包和ack的信息。

3.换用双向传输模式,观察接收到的包和ack的信息。

实验结果:

1.根据不同的传输协议,客户的终端会每隔一定时间接收到一个数据和ack,同时由于丢包的存在,接收的时间间隔并不固定

① 对于停等协议,可以看到接收数据的ack按照0、1交错出现

② 对于滑动窗口协议,设置窗口大小为10,ack的范围为16,可以看到接收数据的ack按照从0到15的顺序循环出现

③ 对于选择重发协议,设置窗口大小为10,ack的范围为16,可以看到由于丢包现象的存在,接收数据的ack并没有特定的顺寻,但均在0到15之间

2.以滑动窗口协议为例,进行双向传输,可以看到在收到结果的同时,会有本地产生的超时信息;

问题讨论:

1.分组格式

对于三种协议,数据分组的格式均为:”ack message”的形式,其中最后一个分组为”-1 < EOF>”,用来指示当前文件已经传输完毕。

2.程序执行流程图

①停止等待协议

②滑动窗口协议

③选择重传协议

3.数据分组丢失验证模拟方法

在客户端设定一个阈值,每次接收到一个包之后,生成一个随机数,若该随机数小于设定的阈值,则认为没有接收到这个包,不对该包做处理,从而模拟丢包的情况。

心得体会:

在本实验中,需要特别注意的地方就是如何判断一个文件已经传输完毕,一个比较直观的想法是:在传输文件的最后添加一个< EOF>来指示当前是否为一个文件的结尾。

但是这样的问题在于,某些文件的最后不适合添加一个这样的信息,例如图片文件。此外,SR协议中,即使发送完最后一个包,也不代表传输已经结束。

因此上述代码采用的方式为:send跳出while True循环后,再发送一个信息给客户端,说明文件已经发送完毕。由于此时文件已经被客户端完全接收,因此这一方法不会有提前终止的情况。

但对于多文件传输,这一方法无法区分某个包属于哪个文件,因此,在头部中标明文件的总长度,才是最合适的选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神仙别闹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值