首页/协议速查/UDP
⚡

UDP 无连接传输

网络协议
快但不管到达:无连接低延迟,实时数据流的首选。
🧩 核心原理
📈 时序 / 工作过程图
UDP 无连接传输模型发就完事,可靠性由上层负责发送方直接发包接收方尽力接收UDP 数据报(无连接)不建立连接、不确认、可能丢包乱序 → 延迟最低、开销最小应用:音视频流 / 实时传感器 / NTP / DNS · 上层可加序列号+校验自行保证可靠性
⚙️ 配置 / 使用要点
  1. bind 本地端口 → sendto 目标
  2. recvfrom 接收(可多客户端)
  3. 广播:SO_BROADCAST + 255.255.255.255
  4. 可靠性增强:加序列号+超时重发
🛠️ 项目示例
UDP 组播/广播时间同步(SNTP 风格)
// 向广播地址发 SNTP 请求
int s = socket(AF_INET, SOCK_DGRAM, 0);
int on = 1;
setsockopt(s, SOL_SOCKET, SO_BROADCAST, &on, sizeof(on));

struct sockaddr_in dst;
dst.sin_family = AF_INET;
dst.sin_port = htons(123);
inet_pton(AF_INET, "255.255.255.255", &dst.sin_addr);
uint8_t req[48] = {0}; req[0] = 0x1B;   // NTP v3 client
sendto(s, req, 48, 0, (struct sockaddr*)&dst, sizeof(dst));

// recvfrom 收响应:时间戳在 40-43 字节(1900基准)
❓ 面试高频
UDP比TCP快在哪?
无握手、无确认重传、无拥塞控制状态,每包开销小、延迟确定
UDP怎么保证可靠?
应用层实现:序列号检测丢包、超时重发、CRC/校验和、乱序缓冲
为什么音视频用UDP?
实时优先:丢一两帧可容忍,重传反而增加延迟和卡顿
✅ 自查清单 (点击勾选,本地保存)
0/0
知道UDP特性与8字节头
知道丢包乱序风险
会sendto/recvfrom
知道广播组播
会做应用层可靠性