---
url: https://sugarat.top/computerBase/Internet/udp.md
---

# UDP协议

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

## 面向无连接

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

## 不可靠性

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

## 高效

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

![图片](https://img.cdn.sugarat.top/mdImg/MTU4MzIyMDM3OTg1MA==583220379850)

UDP 头部包含了:

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

## 传输方式

* 一对一:单播
* 一对多:多播（组播）
* 一对所有:广播

## 适合场景

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

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

## 总结

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

:::tip 参考
[网络-UDP](https://yuchengkai.cn/docs/cs/#udp)
:::
