✅什么是UDP协议

UDP(用户数据报协议) 是一种简单、高效的无连接传输协议,位于 OSI 模型的第四层(传输层)。与 TCP 相比,它不提供复杂的可靠机制,因此速度更快,延迟更低,常用于音视频、游戏等对时效性要求较高的场景。


1️⃣ UDP 的基本特点

特性 描述
无连接 发送数据前不建立连接,直接发送数据
不可靠性 不保证数据是否成功送达,也不保证顺序和完整性
数据报协议 将数据封装为数据报(Datagram)独立发送,每个报文独立处理
速度快 无需建立连接和确认应答,效率高,适用于高实时性场景
轻量协议 协议头开销小(仅 8 字节),不做流量控制和拥塞控制
广播/多播支持 支持局域网内广播和组播,是 TCP 不具备的能力

2️⃣ UDP 报文结构

UDP 报文格式如下(共 8 字节):

字段名称 长度(字节) 说明
源端口 2 发送方端口号
目标端口 2 接收方端口号
长度 2 整个 UDP 报文的长度(含头部)
校验和 2 可选,用于错误检测

3️⃣ Java 中的 UDP 编程

Java 提供了 DatagramSocketDatagramPacket 两个类来支持 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 {
// 1. 创建发送端Socket对象
DatagramSocket socket = new DatagramSocket();

// 2. 创建数据包(DatagramPacket)
String msg = "你好,UDP!";
byte[] data = msg.getBytes();
InetAddress ip = InetAddress.getByName("localhost");
int port = 8888;
DatagramPacket packet = new DatagramPacket(data, data.length, ip, port);

// 3. 发送数据
socket.send(packet);

// 4. 释放资源
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 {
// 1. 创建接收端Socket并绑定端口
DatagramSocket socket = new DatagramSocket(8888);

// 2. 创建接收数据包
byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);

// 3. 接收数据(阻塞式)
socket.receive(packet);

// 4. 解析数据
String received = new String(packet.getData(), 0, packet.getLength());
System.out.println("接收到消息:" + received);

// 5. 释放资源
socket.close();
}
}

4️⃣ UDP 的应用场景

应用类型 说明
视频会议 音视频实时传输,丢失部分数据包不会严重影响体验
语音通话 VoIP 应用中,对延迟敏感而对丢包容忍
在线游戏 高并发、低延迟需求强,允许偶尔丢失位置或状态更新
实时传感器 物联网设备传输实时数据,不要求每一帧都收到
广播/组播 网络设备发现、服务通知(如DHCP、UPnP)需要广播或多播

5️⃣ UDP 与 TCP 的比较

特性 UDP TCP
是否连接 无连接 面向连接(三次握手)
可靠性 不可靠,可能丢包或乱序 可靠,顺序性强,支持重传与校验
速度 快,适用于实时应用 慢,适用于高可靠性要求的应用
流量控制 有(滑动窗口机制)
拥塞控制 有(拥塞窗口控制)
开销 小,头部只有 8 字节 大,头部最少 20 字节
使用场景 语音、视频、游戏、物联网 文件传输、网页浏览、邮件、数据库连接等

6️⃣ 小结

  • UDP 优点
    • 轻量快速,适用于实时通信
    • 无连接,代码实现简单
    • 支持广播与多播
  • UDP 缺点
    • 不可靠传输
    • 无顺序保证
    • 无拥塞控制和流量控制