文章

网络协议打怪升级-传输层:UDP和QUIC

网络协议打怪升级-传输层:UDP和QUIC

1.UDP是什么

UDP(User Datagram Protocol,用户数据报协议)是一个传输层协议,和TCP一样,但是它的特点是:无连接、轻量、速度快、不可靠。

2.UDP的核心特性

  • 无连接:发送数据前不需要建立连接
  • 不可靠:不保证数据送达,无确认机制,无重发机制
  • 面向报文:一次性发送整个报文,不会拆分或合并(区别TCP),不保证抵达顺序
  • 无拥塞控制:不会因为网络拥塞而降低发送速度
  • 轻量级:报头小,仅8字节,传输效率高
  • 支持广播/组播

组播是什么?

1
2
3
4
5
组播是一种网络传输方式,一对多,介于单播与广播之间
单播:一对一,每个接收方单独发送一份数据
广播:一对全网,所有主机都能收到
组播:一对多,只发送一次,只有加入组的主机才能收到
比如在会议中,就可以使用组播传输,将视频流数据发送到会议中的所有人

3.UDP的报文结构

  • 报头(8Byte)
    • 源端口号
    • 目标端口号
    • 数据长度(报头+数据)
    • 校验和
  • 数据

4.UDP的传输过程

  • 应用程序调用socket并传入数据(应用层)
  • UDP将数据加上8字节头部,形成一个数据报文
  • IP层封装进IP包进行传输
  • 到达目的地后,目标应用接收UDP报文

无需握手、无需连接、发送即走

5.UDP的应用场景

  • 实时通信:语音通话、视频通话等
  • 在线游戏
  • 流媒体
  • DNS查询:默认使用DNS,传输内容大时改为TCP,需要安全性时改为DoT(DNS over TLS,基于TLS的DNS)
  • 系统广播/组播

6.UDP的优缺点

    • 轻量、快速、支持广播
    • 不面向连接、不可靠、无流量控制、无拥塞控制

7.扩展:QUIC

前面我们对UDP的基本特性和使用原理进行了基本梳理,可以发现UDP最大的缺点是不可靠性。

QUIC是由于Google开发的库,底层使用了UDP(HTTP/3就是运行于QUIC之上)。通过对UDP的封装,QUIC解决了不可靠的问题,使报文变得既轻量有可靠,那么他是如何做到的?

QUIC封装了逻辑,自己实现了类似TCP的可靠机制,包括:

TCP机制QUIC实现方式
序列号+ACK每个stream有自己的帧序号和ACK
重传支持选择性重传(更精细)
拥塞控制可自定义
流量控制支持每个流单独设置窗口
有序传输默认按顺序交付,也支持多流并行交付
本文由作者按照 CC BY 4.0 进行授权