# UDP协议

  • 面向无连接:不需要在正式传递数据之前先连接起双方
  • 数据报文的搬运工:不保证有序且不丢失的传递到对端
  • 没有任何控制流量的算法

# 面向无连接

  • UDP 是不需要和 TCP 一样在发送数据前进行三次握手建立连接,想发数据就可以开始发送了
  • 只是数据报文的搬运工,不会对数据报文进行任何拆分和拼接操作
    • 发送端,应用层将数据传递给传输层的 UDP 协议,UDP 只会给数据增加一个 UDP 头,表示用的是 UDP 协议,然后就传递给网络层了
    • 接收端,网络层将数据传递给传输层,UDP 只去除 IP 报文头就传递给应用层,不会任何拼接操作

# 不可靠性

  • 不可靠性体现在无连接上:通信不需要建立连接,想发就发
  • 收到什么数据就发生什么数据,不对数据进行校验与备份
  • 不关心发送端是否收到了数据
  • UDP没有拥堵控制会以恒定的速度发送数据:在网络条件不好的情况下会导致丢包

# 高效

UDP 的头部开销小,只有八字节,相比 TCP 的至少二十字节要少得多,在传输数据报文时是高效的。

图片

UDP 头部包含了:

  • 两个十六位的端口号
    • 源端口(可选字段)
    • 目标端口
  • 整个数据报文的长度
  • 整个数据报文的检验和(IPv4 可选 字段),该字段用于发现头部信息和数据中的错误

# 传输方式

  • 一对一:单播
  • 一对多:多播(组播)
  • 一对所有:广播

# 适合场景

对当前网络通讯质量要求不高的时候,实时性要求高的地方都可以看到 UDP 的身影,要求网络通讯速度尽量的快,这时就使用UDP

  • 网游
  • 直播
  • 语音,视频

# 总结

  • UDP 相比 TCP 简单的多,不需要建立连接,不需要验证数据报文,不需要流量控制,只会把想发的数据报文直接发送给对端
  • 虽然 UDP 并没有 TCP 传输来的准确,但是也能在很多实时性要求高的地方有所作为