UDP怎么实现可靠传输

UDP它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。传输层无法保证数据的可靠传输,只能通过应用层来实现了。实现的方式可以参照tcp可靠性传输的方式,只是实现不在传输层,实现转移到了应用层。关键在于两点,从应用层角度考虑:

(1)提供超时重传,能避免数据报丢失。

(2)提供确认序列号,可以对数据报进行确认和排序。

本端:首先在UDP数据报定义一个首部,首部包含确认序列号和时间戳,时间戳是用来计算RTT(数据报传输的往返时间),计算出合适的RTO(重传的超时时间)。然后以等-停的方式发送数据报,即收到对端的确认之后才发送下一个的数据报。当时间超时,本端重传数据报,同时RTO扩大为原来的两倍,重新开始计时。

对端:接受到一个数据报之后取下该数据报首部的时间戳和确认序列号,并添加本端的确认数据报和取下的时间戳首部之后发送给对端。根据此序列号对已收到的数据报进行排序并丢弃重复的数据报。

如何根据时间戳计算RTO

  • 在UDP数据报的首部中加入时间戳字段。当发送数据报时,将当前的时间记录在时间戳字段中。
  • 接收方收到数据报后,在发送确认(ACK)时,除了包含必要的确认序列号外,也将接收到的数据报的时间戳值回送给发送方。
  • 发送方收到ACK后,使用当前时间减去ACK中回送的时间戳值,得到从发送数据报到收到确认的RTT。
  • 可以使用多种算法来根据RTT动态调整RTO。一种常见的方法是设置RTO为最近几次RTT测量的平均值的加权平均或倍数。例如,可以取最近几次RTT的平滑移动平均值,然后乘以一个因子(如1.5或2)来得到RTO。

相关推荐

  1. UDP怎么实现可靠传输

    2024-07-14 16:22:02       27 阅读
  2. 基于UDP可靠传输协议QUIC协议

    2024-07-14 16:22:02       33 阅读
  3. 可基于udp可靠传输协议kcp介绍,C++测试kcp示例

    2024-07-14 16:22:02       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-14 16:22:02       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-14 16:22:02       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-14 16:22:02       57 阅读
  4. Python语言-面向对象

    2024-07-14 16:22:02       68 阅读

热门阅读

  1. Unity3D开发之传送带实现

    2024-07-14 16:22:02       23 阅读
  2. Python:Scrapyd设置服务器账号密码basic authentication

    2024-07-14 16:22:02       23 阅读
  3. Python爬虫-爬取三国演义文本数据-bs4

    2024-07-14 16:22:02       22 阅读
  4. CSS 单位中 px、em 和 rem 的区别?

    2024-07-14 16:22:02       19 阅读
  5. LeetCode 第406场周赛个人题解

    2024-07-14 16:22:02       17 阅读
  6. 刷题2路2线

    2024-07-14 16:22:02       18 阅读
  7. 代码随想录:图论_01基础

    2024-07-14 16:22:02       23 阅读
  8. nng协议分析之互斥锁pthread_mutexattr_settype函数

    2024-07-14 16:22:02       21 阅读
  9. 34. AdaGrad算法

    2024-07-14 16:22:02       24 阅读
  10. jQuery标签定位方法

    2024-07-14 16:22:02       26 阅读
  11. LruCache、Glide和SmartRefreshLayout使用总结

    2024-07-14 16:22:02       27 阅读
  12. [NeetCode 150] Merge K Sorted Linked Lists

    2024-07-14 16:22:02       26 阅读
  13. AWS S3 基本概念

    2024-07-14 16:22:02       24 阅读
  14. 大型土木工程项目灾害防御规划与风险评估系统

    2024-07-14 16:22:02       21 阅读
  15. MySQL面试题

    2024-07-14 16:22:02       17 阅读