传输层协议UDP

端⼝号

端口号解决的是 "主机上哪个应用接收数据" 的问题。IP就相当于你们小区的地址,端口号port就代表了你在这一小区的哪一栋哪一户。

所以网络中通信的本质,实际上就是进程间通信。只不过该通信是跨越网络的,而我们将跨越网络的进程间通信称之为套接字通信。

UDP协议

UDP协议特点

特点:

  • 无连接,通信开销极低
  • 面向数据报,消息边界清晰
  • 不可靠传输,数据可能丢失 / 乱序 / 重复

UDP虽然有不可靠传输的特点,但并不代表它就比TCP要差。 一些优秀的网站在设计网络通信算法时,会同时采用TCP协议和UDP协议,当网络流畅时就使用UDP协议进行数据传输,而当网速不好时就使用TCP协议进行数据传输,此时就可以动态的调整后台数据通信的算法。

UDP(用户数据报协议)是无连接、不可靠的传输层协议,其报文格式非常简洁,固定长度为 8 字节首部 + 可变长度数据,没有可选字段。

UDP的定义十分简单粗暴,就是一个定长报头,规定前面的这些字段就是定长的,规定前8个字节就是报头,剩下的部分就是有效载荷

字段解释

  • 源端口号2 字节(2*8位): 发送方的端口(port)。
  • 目的端口号16位:接收方的端口,用于交付上层应用。
  • UDP 长度16位:整个 UDP 报文的长度(UDP首部 + 数据),最小 8 字节(最少拥有一个首部)
  • **UDP 校验和16位:**伪首部 + UDP 首部(校验和填 0) + 数据载荷 → 对数据源计算 → 得到校验和。(接收方通过重新计算校验和并比对,就能判断收到的 UDP 首部和数据载荷是否完整。)

UDP如何知道要交给上层的哪一个协议?

UDP会根据报头中的目的端口号来决定交付给上层哪一个应用。

UDP的缓冲区

发送缓冲区

  • 暂存应用层调用sendto()/send()发送的数据,等待操作系统内核将其封装成 UDP 报文、交给网络层。

关键特性:

  • 无确认留存:数据从缓冲区发出后,内核立即清空该数据,不会保留副本
  • 无阻塞 / 流量控制
    • 阻塞模式:仅当缓冲区满时,sendto()会短暂阻塞,直到有空闲空间;
    • 非阻塞模式:缓冲区满时直接返回EAGAIN/EWOULDBLOCK错误,不会覆盖旧数据
  • 没有发送队列:缓冲区里不会堆积多个待发送数据报,内核处理完一个才会接收下一个。

接收缓冲区

  • 暂存已接收的 UDP 报文:所有发往该套接字端口的 UDP 报文,内核都会按到达顺序放入接收缓冲区,等待应用层调用recvfrom()/recv()读取。

关键特性:

  • 按数据报独立存储:缓冲区里的每个条目都是一个完整的 UDP 数据报,应用层读一次只能取一个完整的数据报,没有粘包且无需拆包。
  • 有固定上限,溢出直接丢包
    • 缓冲区有大小上限(Linux 默认约 208KB,Windows 约 8KB),可通过SO_RCVBUF调整;
    • 缓冲区满时,新到达的报文会被内核直接丢弃,且无任何通知**。**UDP 无重传,丢包后应用层也不知道
  • 先进先出:应用层按报文到达顺序读取,无法优先读取晚到的报文。

UDP 使用注意事项

  • 我们注意到, UDP 协议首部中有一个16 位的最大长度. 也就是说一个UDP 能传输的数据最大长度是64K(包含UDP 首部).然而64K 在当今的互联网环境下, 是一个非常小的数字.如果我们需要传输的数据超过64K, 就需要在应用层手动的分包, 多次发送, 并在接收端手动拼装;

总结:UDP是牺牲可靠性换取高效性的传输层协议,它虽然不是最稳的,但在对实时性要求高、可容忍少量丢包的场景下,是比 TCP 更高效的选择。

相关推荐
XUEYUAN52121 天前
ASN 自治系统号风控:平台如何通过 IP 所属自治域批量识别代理流量
python·网络协议·http·网络安全·socks5
CHENKONG_CK1 天前
破解制鞋打磨痛点:RFID赋能去毛刺工序自动化升级
网络·单片机·嵌入式硬件·网络协议·tcp/ip
z落落2 天前
C#UDP+串口服务端+UDP 客户端(含 CRC16 校验)
网络·网络协议·udp
曼巴UE52 天前
UE5 客户端 需要的网络同步概念总结(3 )-事件同步 RPC 以及三种调用方式
网络·c++·网络协议·学习·rpc·ue5
开开心心就好2 天前
安卓手写文字生成工具,多种纸张一直免费
网络·网络协议·tcp/ip·leetcode·智能手机·电脑·模拟退火算法
渡我白衣2 天前
HttpRequest与HttpResponse的实现
服务器·数据结构·c++·人工智能·tcp/ip·机器学习·caffe
小贺儿开发2 天前
Unity 家居视频遥控(细节优化)
科技·unity·程序员·udp·视频·工具·通信
IpdataCloud3 天前
如何判断游戏注册IP是住宅宽带还是机房代理?IP风险识别看ASN、IDC标签与风险分
tcp/ip·ip
K成长日志3 天前
DALI协议-Part209-颜色控制
物联网·网络协议·iot·智能照明·智能建筑·dali
IPdodo_3 天前
跨境 API 调用不稳定怎么办:出口、超时重试与链路监控的实践
网络·python·网络协议