✅什么是UDP协议
UDP(用户数据报协议) 是一种简单、高效的无连接传输协议,位于 OSI 模型的第四层(传输层)。与 TCP 相比,它不提供复杂的可靠机制,因此速度更快,延迟更低,常用于音视频、游戏等对时效性要求较高的场景。
✅ 1️⃣ UDP 的基本特点
| 特性 |
描述 |
| 无连接 |
发送数据前不建立连接,直接发送数据 |
| 不可靠性 |
不保证数据是否成功送达,也不保证顺序和完整性 |
| 数据报协议 |
将数据封装为数据报(Datagram)独立发送,每个报文独立处理 |
| 速度快 |
无需建立连接和确认应答,效率高,适用于高实时性场景 |
| 轻量协议 |
协议头开销小(仅 8 字节),不做流量控制和拥塞控制 |
| 广播/多播支持 |
支持局域网内广播和组播,是 TCP 不具备的能力 |
✅ 2️⃣ UDP 报文结构
UDP 报文格式如下(共 8 字节):
| 字段名称 |
长度(字节) |
说明 |
| 源端口 |
2 |
发送方端口号 |
| 目标端口 |
2 |
接收方端口号 |
| 长度 |
2 |
整个 UDP 报文的长度(含头部) |
| 校验和 |
2 |
可选,用于错误检测 |
✅ 3️⃣ Java 中的 UDP 编程
Java 提供了 DatagramSocket 和 DatagramPacket 两个类来支持 UDP 通信。
🔹 发送端代码示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress;
public class UDPSender { public static void main(String[] args) throws Exception { DatagramSocket socket = new DatagramSocket();
String msg = "你好,UDP!"; byte[] data = msg.getBytes(); InetAddress ip = InetAddress.getByName("localhost"); int port = 8888; DatagramPacket packet = new DatagramPacket(data, data.length, ip, port);
socket.send(packet);
socket.close(); } }
|
🔹 接收端代码示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| import java.net.DatagramPacket; import java.net.DatagramSocket;
public class UDPReceiver { public static void main(String[] args) throws Exception { DatagramSocket socket = new DatagramSocket(8888);
byte[] buffer = new byte[1024]; DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet);
String received = new String(packet.getData(), 0, packet.getLength()); System.out.println("接收到消息:" + received);
socket.close(); } }
|
✅ 4️⃣ UDP 的应用场景
| 应用类型 |
说明 |
| 视频会议 |
音视频实时传输,丢失部分数据包不会严重影响体验 |
| 语音通话 |
VoIP 应用中,对延迟敏感而对丢包容忍 |
| 在线游戏 |
高并发、低延迟需求强,允许偶尔丢失位置或状态更新 |
| 实时传感器 |
物联网设备传输实时数据,不要求每一帧都收到 |
| 广播/组播 |
网络设备发现、服务通知(如DHCP、UPnP)需要广播或多播 |
✅ 5️⃣ UDP 与 TCP 的比较
| 特性 |
UDP |
TCP |
| 是否连接 |
无连接 |
面向连接(三次握手) |
| 可靠性 |
不可靠,可能丢包或乱序 |
可靠,顺序性强,支持重传与校验 |
| 速度 |
快,适用于实时应用 |
慢,适用于高可靠性要求的应用 |
| 流量控制 |
无 |
有(滑动窗口机制) |
| 拥塞控制 |
无 |
有(拥塞窗口控制) |
| 开销 |
小,头部只有 8 字节 |
大,头部最少 20 字节 |
| 使用场景 |
语音、视频、游戏、物联网 |
文件传输、网页浏览、邮件、数据库连接等 |
✅ 6️⃣ 小结
- UDP 优点:
- 轻量快速,适用于实时通信
- 无连接,代码实现简单
- 支持广播与多播
- UDP 缺点: