目录

  • UDP与TCP对比
  • 可靠性机制
    • ACK机制
    • 重传机制
    • 流控控制
    • 序号机制
    • 重排机制
    • 窗口机制
  • UDP可靠性设计
    • UDP窗口流控
    • KCP(出于实时性考虑)
  • QUIC
    • 简述
    • 优点
    • 缺点
    • 报文格式
    • 建立低时延

UDP与TCP对比


TCP可能出现粘包分包
UDP不可能,且一帧数据必须一次性读完,否则将丢失未读部分

可靠性机制

ACK机制

也就回应机制,每次收到一个包都回给予一次ack,让发送方知道对方已经接收到

重传机制

ARQ协议的三种模式
(1) 即停等式ARQ : 等待ACK, 规定事件内没有收到对面ACK,则重传该帧

(2) 回退n帧ARQ : 不等待对面ACK,每个包存在生命周期,生命结束之前没有收到ACK,则回退到该该包重新发包(错误帧之后的包已经发送过,任然需要重新发送)

(3) 选择性重传ARQ : 不等待对面ACK,每个包存在生命周期,生命结束之前没有收到ACK,不需要回退到该该包重新发包, 仅需重发该包

流控控制

控制发送方发送速率,以防止收件方读取数据不及时,造成缓存满后丢弃数据包
(1) 收件方告知发送方缓存剩余空间,以便于发件方控制发送速率
(2) 如果发件方因为对方缓存已满而停止发送,则需要收件方适时通知发件方开发送
4. 拥塞控制
(1) 慢启动 :网络拥塞之后,尝试从少数包开始发送,逐渐按指数增长发送包,直到包数恢复到正常数量(因为带宽越来越大,该方案已废弃)
(2) 快恢复 : 网络拥塞之后,尝试从半数的包开始发送,逐次增多

序号机制

重排机制

窗口机制

UDP可靠性设计

UDP窗口流控

KCP(出于实时性考虑)

  1. RTO翻倍
    TCP超时计算为RTO时间不断翻倍
    KCP中超时计算为RTO时间不断乘以1.5(经验值,试验证明该值较好)

  2. 重传机制
    TCP使用回退N帧ARQ机制(全部重传)
    KCP使用选择性重传ARQ机制

  3. 快速重传
    出现跳包现象(接收方收到的包是不连续的,多个中间包缺失),此时不考虑RTO,优化丢包时候的传输效率

  4. ACK延迟
    TCP为了更好的利用宽带,延迟发送ACK,如此RRT时间较大
    KCP中可以设置是否延迟

  5. ACK、UNA
    5.1 解释UNA: 比如UNA 3,则表示告知sender,包0、1、2都已经收到,这个时候sender将释放掉包0、1、2,后续如果需要重传,这三个包也不会进入重传队列,
    5.2 KCP是ACK+UNA机制
    5.3 TCP是二选一

  6. 非退让流控
    TCP使用公平退让法则(发送窗口大小决定因素:发送缓存大小,接收端剩余缓存大小,丢包退让,慢启动),
    KCP可以配置跳过丢包退让以及慢启动,使得及时性更加强大

  7. 代码路径:https://github.com/skywind3000/kcp
    上面对于KCP讲解不太清除的可以前往github上学习,再readme中对于优化的性能部分做了很详细的讲解。

8. KCP代码架构

QUIC

简述

  1. 快速UDP网络连接
  2. Google提出的实验性网络传输协议
  3. 位于OSI网络模型传输层
  4. 用户态基于UDP实现的传输层
  5. 旨在解决TCP协议的缺陷并最终替代TCP协议,减少数据传输,降低连接建立延迟时间,加快网页传输速度
  6. 文档连接:https://quicwg.org/base-drafts/rfc9000.html

优点

  1. 灵活的拥塞控制机制(可自我实现,也可以决定是否使用)
  2. 无队头阻塞(每个stream分别独立,不互相影响)
  3. 可轻易实现数据迁移(切换网络环境后,不需要重新连接,继续之前的连接通道继续传输数据)
  4. 包头需要身份验证,包内数据加密,安全性方面比TLS有过之而无不及
  5. FEC向前纠错

缺点

  1. 放入内核影响大,所有系统都要更新
  2. 路由器、防火墙、还有很多中间设备都需要改

报文格式

其中Connection ID为连接号,可以减少三次握手四次挥手的次数
Frame Type:

  1. bit01: stream ID长度
  2. bit234: offset长度
  3. bit5 : 有无Data Length字段
  4. bit6: 指示该stream通道上 是否已结束发送数据,是否处于半关闭状态
  5. bit7: 标识该帧是否为stream帧

Stream ID 一个UDP通道上可以存在多个Stream流, 每个流中的报文的完整性相互独立,以此减少异常时候,回退的帧数

建立低时延

UDP可靠性传输协议(QUIC)相关推荐

  1. UDP可靠性传输-QUIC

    一.QUIC协议 QUIC ,即 快速UDP网络连接 ( Quick UDP Internet Connections ), 是由 Google 提出的实验性网络传输协议 ,位于 OSI 模型传输层. ...

  2. android 判断byte值_Android开发之UDP可靠性传输

    轩羽:Android开发之UDP​zhuanlan.zhihu.com 在这一篇文章里,小编说到UDP是不可靠的,故,我们要自己写一套协议,来使UDP实现可靠性传输,这里,小编和小编的小伙伴一起,写了 ...

  3. UDP可靠性传输KCP实现原理和应用

    一.为什么要做UDP可靠性传输? UDP与TCP的区别: TCP是为流量设计的(每秒可以传输多少KB的数据),因此在刚启动的时候会尽量少带宽,讲究的时候充分利用带宽. 可靠性UDP设计目的是解决:延迟 ...

  4. 【KCP】UDP可靠性传输

    1 如何做到可靠性传输 ◼ ACK机制 ◼ 重传机制 ◼ 序号机制 3 2 1 ->2 3 1 ◼ 重排机制 2 3 1 ->3 2 1 ◼ 窗口机制 Tcp不用我们管 可靠性udp 5种 ...

  5. STGW 下一代互联网标准传输协议QUIC大规模运营之路

    作者:wentaomao,腾讯 TEG 后台开发工程师 前言 QUIC 作为互联网下一代标准传输协议,能够明显提升业务访问速度,提升弱网请求成功率以及改善网络变化场景下的平滑体验. STGW 作为公司 ...

  6. 基于UDP高性能传输协议UDT

    UDP详解 一.  概述 UDT是一个高性能的基于UDP的数据传输协议,它是为支持高速广域网上海量数据传输而设计,为解决TCP的效率和公平问题,同时提供可靠的数据流和报文传输. UDT是C++库,几乎 ...

  7. 基于UDP的可靠性传输协议-KCP简介

    RTO翻倍vs不翻倍: TCP超时计算是RTOx2,这样连续丢三次包就变成RTOx8了,十分恐怖,而KCP启动快速模式后不x2,只是x1 .5(实验证明1 .5这个值相对⽐较好),提高了传输速度. i ...

  8. 几种常见的可靠UDP传输协议(包含C#实现)

    几种UDP网络库的整理Raknet,UDT,ENet,lidgren-network-gen3 http://blog.csdn.net/u014630768/article/details/3489 ...

  9. rtp 多媒体流同步控制 实时传输协议 简介

    RTP(Real-time Transport Protocol)是由IETF开发的实时传输协议,可以在面向连接或无连接的下层协议上工作,通常和UDP协议一起使用.RTP的工作机理与RSVP不同,主要 ...

最新文章

  1. python for bioinformatics相关题目
  2. 人脸识别技术用于教育行业引争议
  3. pyqt5动态删除控件问题
  4. python基础看什么书-python新手看什么书比较好?这五本最靠谱
  5. 关于php无字母代码的研究
  6. STM32开发 -- UART应用层通信协议分析
  7. 微软统一预训练语言模型UniLM 2.0解读
  8. 从 k8s 上卸载 KubeSphere
  9. 【.NET Core 3.1】 策略授权中获取权限数据
  10. DateTimePicker控件 1130
  11. 【比赛】百度之星2017 复赛
  12. [转]分析MySQL数据类型的长度【mysql数据字段 中length和decimals的作用!熟悉mysql必看】...
  13. stretchblt 模糊_微软开源持续开发模糊测试工具OneFuzz
  14. Machine Learning系列实验--SoftMax Regression
  15. CSDN Blog推出专属的离线发布工具 - CSDN剪影
  16. win10系统计算机物理地址,Win10系统怎么查看和修改网卡mac物理地址?
  17. axios配置多个请求地址(打包后可通过配置文件修改)
  18. VMware 16 Pro安装MacOS Mojava 10.14
  19. 国外服务器https协议,AriaNg使用Https/WebSocket(安全)协议连接Aria2的方法
  20. Flash Socket 的基本通讯协议流程例子

热门文章

  1. 职业价值评估:用一张表格说明一切
  2. 1238: 盗梦空间X
  3. TOOM网上舆情应急处置预案,怎么加强网上舆情监控?
  4. CC2640R2F学习笔记(一.开发环境)
  5. Jmeter监控系统资源
  6. EChar中的柱状图如何设置柱子的最大宽度和刻度的最小间隔
  7. c语言求婚代码大全,程序员表白教程,这些代码用过的都成功了!
  8. 分享几个常用的地表温度数据集
  9. 正确率/精度(precision),召回率(recall),F1-score,ROC 曲线,AUC值
  10. 福邦X456多媒体双卡双待手机