资源下载地址:https://download.csdn.net/download/sheziqiong/86799219
资源下载地址:https://download.csdn.net/download/sheziqiong/86799219

可靠数据传输协议的设计与实现

实验目的:

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

理解滑动窗口协议的基本原理;掌握 GBN 的工作原理;掌握基于 UDP 设计并实现一个 GBN 协议的过程与技术。

实验内容:

可靠数据传输协议-停等协议的设计与实现

基于 UDP 设计一个简单的停等协议,实现单向可靠数据传输(服务器到客户的数据传输)。

模拟引入数据包的丢失,验证所设计协议的有效性。

改进所设计的停等协议,支持双向数据传输;(选作内容,加分项目,可以当堂完成或课下完成)

基于所设计的停等协议,实现一个 C/S 结构的文件传输应用。(选作内容,加分项目,可以当堂完成或课下完成)

可靠数据传输协议-GBN 协议的设计与实现

基于 UDP 设计一个简单的 GBN 协议,实现单向可靠数据传输(服务器到客户的数据传输)。

模拟引入数据包的丢失,验证所设计协议的有效性。

改进所设计的 GBN 协议,支持双向数据传输;(选作内容,加分项目,可以当堂完成或课下完成)

将所设计的 GBN 协议改进为 SR 协议。(选作内容,加分项目,可以当堂完成或课下完成)

实验过程:

停等协议:

  • 基于 UDP 实现的停等协议,可以不进行差错检测,可以利用 UDP 协议差错检测;
  • 为了验证所设计协议是否可以处理数据丢失,可以考虑在数据接收端或发送端引入数据丢失。
  • 在开发停等协议之前,需要先设计协议数据分组格式以及确认分组格式。

计时器实现方法:对于阻塞的 socket 可用 int setsockopt(int socket,int level, int option_name, const void* option_value, size_t option_len)函数设置套接字发送与接收超时时间;对于非阻塞 socket 可以使用累加 sleep 时间的方法判断 socket 接受数据是否超时(当时间累加量超过一定数值时则认为套接字接受数据超时)。

GBN 协议:

  • 基于 UDP 实现的 GBN 协议,可以不进行差错检测,可以利用 UDP 协议差错检测;
  • 自行设计数据帧的格式,应至少包含序列号 Seq 和数据两部分;
  • 自行定义发送端序列号 Seq 比特数 L 以及发送窗口大小 W,应满足条件 W+1<=2L。

种简单的服务器端计时器的实现办法:设置套接字为非阻塞方式,则服务器端在 recvfrom 方法上不会阻塞,若正确接收到 ACK 消息,则计时器清零,若从客户端接收数据长度为-1(表示没有接收到任何数据),则计时器 +1,对计时器进行判断,若其超过阈值,则判断为超时,进行超时重传。(当然,如果服务器选择阻塞模式,可以用到 select 或 epoll 的阻塞选择函数,详情见 MSDN)

为了模拟 ACK 丢失,一种简单的实现办法:客户端对接收的数据帧进行计数,然后对总数进行模 N 运算,若规定求模运算结果为零则返回 ACK,则每接收 N 个数据帧才返回 1 个 ACK。当 N 取值大于服务器端的超时阀值时,则会出现服务器端超时现象。

当设置服务器端发送窗口的大小为 1 时,GBN 协议就是停-等协议。

首先,实现 GBN 的单向传输,创建一个套接字,并绑定在指定的端口上。客户端请求数据,读取控制台的请求信息,并解析该命令。根据不同的命令,请求不同的数据。

当执行单向传输的命令时,客户端首先发送请求信息,然后服务器端解析请求,进行一个握手阶段,首先服务器向客户端发送一个 205 大小的状态码(我自己定义的) 表示服务器准备好了,可以发送数据;客户端收到 205 之后回复一个 200 大小的状态码,表示客户端准备好了,可以接收数据了;服务器收到 200 状态码之后,就开始使用 GBN 发送数据了,服务器端读取本地文件,放到缓存中,发送给客户端。

在发送端设置分组丢失率和 ACK 丢失率,ACK 采用累积确认,当收到一个字段的序列号时,在其之前的所有分组全都确认被收到。当发生超时情况时,发送端重新发送整个窗户中的所有数据分组。

GBN 双向传输也是相同的原理。只不过发送端变成了客户端。

实验结果:

数据分组格式:

  • Seq 为 1 个字节,取值为 0~255,(故序列号最多为 256 个);
  • Data≤1024 个字节,为传输的数据;
  • 最后一个字节放入 EOF0,表示结尾。

确认分组格式:

ACK 字段为一个字节,表示序列号数值;

末尾放入 0,表示数据结束。

服务器端:

客户端:

数据分组丢失:

设置一个分组丢失率,将丢失率乘上 100,随机生成一个 0 到 100 的数,检查该数是否在 0 到丢失率的范围内。如果在,则分组丢失;否则,没有丢失。

主要函数及其作用:

  • void getCurTime(char *ptime):获取当前时间
  • BOOL lossInLossRatio(float lossRatio):根据丢失率随机生成一个数字,判断是否丢失,丢失则返回 TRUE,否则返回 FALSE
  • void printTips():打印提示信息
  • bool seqIsAvailable():当前序列号 curSeq 是否可用
  • void timeoutHandler():超时重传处理函数
  • void ackHandler(char c):收到 ack,累积确认,取数据帧的第一个字节

运行结果:

单向传输:

客户端:

服务器端:

双向传输:

客户端:

服务器端:

资源下载地址:https://download.csdn.net/download/sheziqiong/86799219
资源下载地址:https://download.csdn.net/download/sheziqiong/86799219

基于C语言的可靠数据传输协议的设计与实现相关推荐

  1. 构造可靠数据传输协议

    在本篇文章中我们将逐步了解开发发送方和接收方的可靠数据传输协议的过程,它们逐渐复杂,最后会得到一个无错.可靠的数据传输协议.在这个过程中仅考虑单向数据传输但控制信息双向流动. 我们用有限状态机(FSM ...

  2. 流水线可靠数据传输协议

    在构造可靠传输协议那一篇我们知道rdt3.0的利用率是非常低的,为了解决利用率问题我们用流水线技术解决. 流水线:发送方允许发送多个"在路上的",还没有确认的报文. 流水线技术对可 ...

  3. c语言的tlv协议编解码函数,基于C语言的TLV格式协议快速解析方法与流程

    技术特征: 1.基于C语言的TLV格式协议快速解析方法,其特征在于,在客户机上设有编译器和解析器,在服务器上也设有编译器和解析器,从而使客户机和服务器都同时具备编码能力和解码能力:客户机和服务器通过网 ...

  4. matlab hod on,基于Matlab语言定量反馈控制器的分析与设计_朱永文

    计算机测量与控制. 2002. 10( 12) 822 Computer Measurement & Control 文章编号: 1671- 4598( 2002) 12- 0822- 02 ...

  5. 基于Verilog语言的13进制计数器设计

    基于Verilog语言的13进制计数器设计 `timescale 1ns / 1ps // // Company: // Engineer: // // Create Date: 2019/11/10 ...

  6. C语言五子棋禁手算法的编写,基于C语言的五子棋辅助软件的设计与实现.doc

    基于C语言的五子棋辅助软件的设计与实现 广东工业大学 本科毕业设计(论文) 基于C语言的五子棋辅助软件的设计与实现 系 部 专 业 年 级 班级名称 学 号 学生姓名 指导教师 2012 年 5 月 ...

  7. UDT协议-基于UDP的可靠数据传输协议

    1.   介绍 随着网络带宽时延产品(BDP)的增加,通常的TCP协议开始变的低效.这是因为它的AIMD(additive increase multiplicative decrease)算法彻底减 ...

  8. 可靠数据传输原理1(构造可靠数据传输协议)

    TCP向调用它的因特网应用所提供的服务模型(服务抽象) 数据可以通过一条可靠的信道进行传输.借助于可靠的信道,传输比特就不会受到损坏或丢失,而且所有数据都是按其发送顺序进行交付. 可靠传输协议 实现服 ...

  9. 基于Go语言实现高并发推荐系统架构设计

    猜你喜欢 0.[免费下载]2021年12月热门报告盘点1.史上最全推荐系统传统算法合集2.推荐系统模型:多场景下的星型CTR预估模型3.新一代Rank技术在阿里巴巴推荐系统中的应用实践4.预训练模型在 ...

最新文章

  1. python 多进程 字典,数组
  2. Android 事件与事件监听器
  3. 【python3】通过hashlib 和base64 对字符串进行加密
  4. AviatorEvaluator表达式引擎
  5. 浅谈SAP Cloud for Sales 自动化
  6. 数据库中有痣但是有时取不到_农村这种长得像“泥鳅”的鱼,以前没人吃,现在可能有钱都吃不到...
  7. 学习Spring Boot:(十七)Spring Boot 中使用 Redis
  8. 操作系统之进程管理:7、进程同步、进程互斥
  9. C语言程序设计,第四版 ,谭浩强。绝对原版,最新的资料
  10. Maven项目缺少Maven Dependencies解决方法
  11. Andrew Stankevich#39;s Contest (1)
  12. oracle dblink性能,谈谈Oracle为2019年埋下的雷:Oracle关于DBLINK的预警
  13. Qt 周立功USBCAN总线上位机
  14. 悉尼大学的计算机专业叫什么,申请悉尼大学计算机专业怎么样?你想知道的都在这里...
  15. centos上使用Dropbox
  16. 答题微信小程序实现(7):python3将题库处理成json格式的。
  17. Python爬虫爬小说《诡秘之主》
  18. 土壤基因组dna提取试剂盒
  19. uniapp微信小程序项目启动步骤
  20. HSIC and MMD

热门文章

  1. html手机上传图片去除拍照,HTML5手机拍照上传
  2. 最长回文 HDU - 3068 马拉车算法
  3. 资金指数(ZJZS)指标
  4. SQL Server 异常 COM 类公司中CLSID 为 {10021F00-E260-11CF-AE68-00AA004A34D5} 的组件时失败,原因是出现以下错误: 80040154
  5. 计算机浅析自己的未来规划,计算机职业生涯规划书
  6. 转载:深度工作:充分使用每一份脑力
  7. 法本转债上市价格预测
  8. 新浪博客和微博已经成为黄色网站的…
  9. 网络规划 华为模拟器ensp
  10. Amazfit跃我GTR 3 Pro:150余款表盘+AOD,把个性玩到极致