%%
# 纲要
> 主干纲要、Hint/线索/路标
# Q&A
#### 已明确
#### 待明确
> 当下仍存有的疑惑
**❓<font color="#c0504d"> 有什么问题?</font>**
# Buffer
## 闪念
> sudden idea
## 候选资料
> Read it later
%%
# UDP 协议
> UDP(User Data Protocol),用户数据报协议
UDP 提供面向 **无连接** 的传输层通信协议:
- **无连接**:不需要建立链接,即刻传输数据;
- **尽力交付**:不保证可靠交付,**没有重传机制**,可能**丢包或乱序**。
- **以 "包" 为单位进行传输**: 每个 UDP 报文都==**独立封装**==,有边界。
- **支持一对一、一对多、多对多的交互通信**;
> [!NOTE] 每个 UDP 数据报独立处理,不保证数据包的顺序、完整性或可靠性 => 丢包、重复或乱序均交由上层进行处理。
UDP 无需建立连接、没有数据恢复机制,因此通常比 TCP 快,效率更高,适用于对 **==实时性==** 要求高的应用。
常用场景:
- 包总量较少的通信,如 `DNS` 、`SNMP` 等;
- **视频流、音频**等多媒体通信;
- **实时在线游戏**
- **即时通讯**、广播通信;
> [!NOTE] UDP 不可靠,但可以 **==基于 UDP==** 实现一个可靠传输协议(在应用层建立可靠性机制,例如增加确认与重传机制)
>
> Chrome 浏览器中所使用的 QUIC 协议就在 UDP 之上的应用层协议中实现了可靠性。
>
> ![[_attachment/88-求职面试/0-MOC-求职面试.assets/IMG-0-MOC-求职面试-4D2F7101066C3F8342CB417B4E9EAE2A.png|671]]
<br><br>
# UDP 数据报格式
> 
UDP 数据报的头部**共 4 个字段**,每个字段 2 个字节,**共 8 个字节**,64 位。
- **==源端口号==**、**==目的端口号==**、**==长度==**、**==校验和==**
> [!NOTE] UPD 数字报长度
>
> 该字段是 **UDP 数据报的总长度**,即包括**UDP 头部**以及**数据载荷**的**总长度**(单位 "字节")。
>
> 16 位,因此**UDP 数据报的理论上限是 65535 个字节**,由于头部占 8 个字节,因此理论**最大有效数据载荷是 65527 个字节**。
> 但**实际上通常会设置为远小于这个值,以适应网络层的 MTU**,**避免因超过网络层的 MTU 而被分片**。
>
> [!NOTE] "校验和" 字段
>
> 提供了差错检测功能,确定当 UDP 数据报从源端到目的地之间传输时,其中的比特是否发生了改变。
> **虽然 UDP 提供了差错检测功能,但==没有差错恢复能力==,故或是丢弃受损的数据报,或是将受损的数据报传给应用程序并发出警告**。
<br><br>
# TCP 与 UDP 协议的区别
- **"面向连接" 与 "无连接"**
- TCP 是面向连接的协议:在数据传输前需要先**建立连接**(三次握手),需要维护**连接状态**,包括接收和发送缓存、拥塞控制参数以及序号和确认号的参数。
- UDP 是**无连接**的,发送数据前不需要建立连接,也就不需要维护连接状态
- **可靠性**
- TCP 提供可靠的数据传输服务,确保接收端正确收到完整的数据。 => **确认应答** & **重传**机制。
- UDP 提供**不可靠**的数据传输服务,**不保证数据包的顺序或完整性**(可能丢包 or 乱序)
- **流量控制与拥塞控制**
- TCP 提供了 **"==流量控制==" 与 "==拥塞控制==" 两种机制**;
- UDP 无,以恒定的速率发送数据包,丢包也不会处理,且UDP 报文段由于缓存溢出**可以在接收方丢失**。
- **报文格式**
- TCP 报文段的头部为 `[20, 60]` 字节。
- UDP 数据报的头部只有 8 字节。
- **数据传输方式**:
- UDP 基于**数据报**,**每个 UDP 报文都==独立封装==**,保持了数据边界。
- TCP 基于字节流,发送方和接收方之间**没有明确的数据边界**。
- **分片不同**
- UDP 在传输层无分片,只可能在 **IP 层根据 MTU 分片**;
- TCP **在传输层会根据 ==MSS== 进行分片**。(MSS 通常设置小于 MTU,从而避免 IP 层再次分片)
- **速度效率与使用场景**
- TCP 由于建立连接、确认应答等过程,相较于 UDP 有更多的开销,速度较慢。
- 适用于需要高可靠性的应用,如**HTTP/HTTPS**、FTP 文件传输、电子邮件、
- UDP 无需建立连接、没有数据恢复机制,因此通常比 TCP 快,效率更高;
- 适用于对实时性要求高的应用,如视频流、在线游戏、VoIP(语音通信)。
<br><br>
# ♾️参考资料
# Footnotes