UDP(User Datagram Protocol,用户数据报协议)是 TCP/IP 传输层核心协议,协议号 17,与 TCP 互补,定位是无连接、不可靠、轻量、低时延的数据报协议,在 Linux、嵌入式、车载、实时音视频领域非常常用。
一、UDP 核心特点
- 无连接
- 不可靠
- 数据报模式:一次发送 = 一个数据报,保留边界(不像 TCP 是流)
- 头部极小
- 支持单播、广播、组播
- 无拥塞控制、无流量控制、无重传
- 收发双向独立
适用场景:
- 车载实时通信(雷达、摄像头、 SOME/IP、车载音视频)
二、UDP 报文头部(固定 8 字节)
结构极简,Linux 抓包一眼就能认:
特点:没有 Seq、Ack、窗口、标志位,一切简单粗暴。
三、UDP 工作机制(一句话)
应用层交给 UDP 多长数据,UDP 就封装成一个报文发出去,不拆分、不合并、不确认、不重传。
- 发:直接封装 UDP 头 → 丢给 IP 层 → 发走
- 收:网卡收到 → 解 UDP 头 → 按端口交给应用
四、UDP 关键特性详解
1. 数据报边界(最大与 TCP 的区别)
- TCP:字节流,无边界,多次 write 可能合并 / 拆包
- UDP:一次 send = 一个数据报,一次 recv = 一个完整报不会粘包,不会拆包,这对车载通信、协议解析非常重要。
2. 支持广播与组播
UDP 天然支持:
- 广播:
255.255.255.255 或 子网广播 - 组播:
224.0.0.0 ~ 239.255.255.255
TCP 完全不支持广播 / 组播,这是 UDP 一大优势。
3. 极低时延
无握手、无确认、无重传、无滑动窗口 → 时延最低的通用传输协议。
4. 不可靠但可控
可靠性可以在应用层自己实现(加序号、确认、重传、心跳),例如:
五、UDP 常见工作模式
1. 简单请求应答(DNS、NTP)
一问一答,无连接,快速完成。
2. 单向推送(视频流、雷达数据、日志)
只发不收,或只收不发,追求实时性。
3. 组播 / 广播分发(车载以太网多机同步)
一个发,多个收,高效分发。
4. 隧道类协议(VXLAN、VPN、QUIC)
底层都跑 UDP,避免 TCP 嵌套 TCP 导致的重传风暴。
六、Linux 下 UDP 常用命令与调试
1. 查看 UDP 端口与连接
# 查看所有 UDP 端口(监听 + 已连接)ss -uan# 查看 UDP 监听端口ss -uln# 老命令netstat-uanp
2. 测试 UDP 连通性
# 服务端监听 UDP 5000nc-ul5000# 客户端发送 UDP 数据nc-u192.168.1.100 5000
3. 抓 UDP 包
tcpdump -i eth0 udp port 5000-nn
4. UDP 缓冲区优化(嵌入式 / 车载高频)
增大接收 / 发送缓冲区,防止高流量丢包:
sysctl -w net.core.rmem_max=26214400sysctl -w net.core.wmem_max=26214400sysctl -w net.core.rmem_default=2621440sysctl -w net.core.wmem_default=2621440
七、UDP 典型问题(面试 / 工程必问)
1. UDP 会粘包吗?
绝对不会。UDP 是数据报,一次 send = 一个独立报文,recv 只能完整取走或丢弃。
2. UDP 丢包怎么办?
3. UDP 比 TCP 快在哪里?
4. UDP 可以可靠吗?
可以,但要在应用层实现。如 QUIC、WebTransport、SOME/IP、DDS 都是基于 UDP 的可靠传输。
八、TCP vs UDP 极简对比表(车载 / 面试最强版)
| | |
|---|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | 实时视频、雷达、DNS、车载 SOME/IP、组播 |
九、一句话总结(文档 / 面试收尾专用)
UDP 是无连接、轻量级、低时延、支持广播组播、以数据报为单位的传输层协议,不保证可靠但性能极高,广泛用于车载实时通信、音视频、DNS、DHCP 等场景,可靠性可由应用层灵活实现。