如何提高UDP的可靠性
2024-08-31 22:42:18
TCP是通过确认机制和超时重传机制实现可靠传输
UDP
UDP它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。传输层无法保证数据的可靠传输,只能通过应用层来实现了。实现的方式可以参照tcp可靠性传输的方式,只是实现不在传输层,实现转移到了应用层。
关键在于两点,从应用层角度考虑:
1 提供超时重传,能避免数据报丢失。
2 提供确认序列号,可以对数据报进行确认和排序。
本端:首先在UDP数据报定义一个首部,首部包含确认序列号和时间戳,时间戳是用来计算RTT(数据报传输的往返时间),从何计算出合适的RTO(重传的超时时间)。然后以等-停的方式发送数据报,即收到对端的确认之后才发送下一个的数据报。当时间超时,本端重传数据报,同时RTO扩大为原来的两倍,重新开始计时。
对端:接受到一个数据报之后取下该数据报首部的时间戳和确认序列号,并添加本端的确认数据报首部之后发送给对端。根据此序列号对已收到的数据报进行排序并丢弃重复的数据报。
最新文章
- Extjs 下拉框显示远程数据
- 【Oracle】Oracle日期格式详解
- jQuery-1.9.1源码分析系列(二)jQuery选择器续2——筛选
- [DFNews] Cellebrite UFED系列更新, 支持IOS7
- kangle 默认支持ETag,如果是用kangle做源不会识别,但是做cdn或反向代理会自动识别
- 一些不起眼但非常有用的 Vim 命令
- MVVM架构~Knockoutjs系列之text,value,attr,visible,with的数据绑定
- GoLang之协程
- c++new/delete---9
- 南阳理工ACM Skiing问题
- 分布式数据库TiDB的部署
- Axios 执行post发送两次请求的小坑
- 【原】Java学习笔记014 - 面向对象
- vue.js 跳转同一页面,传不同值,组件监听路由
- mysql My SQL获取某个表的列名
- 基于Servlet的MVC模式用户登录实例
- Git 基础 - 删除暂存区的文件
- git diff 理解
- 剥开比原看代码12:比原是如何通过/create-account-receiver创建地址的?
- 使用 Git &; Repo 下载代码