网络通信之UDP协议

发布于:2025-07-22 ⋅ 阅读:(14) ⋅ 点赞:(0)

目录

一、UDP 协议概述

1.1 UDP 协议简介

1.2 无连接通信的定义与特性

1.2.1 什么是无连接?

1.2.2 无连接带来的影响

1.3 UDP 的典型应用场景

二、UDP 报文段结构解析

2.1 UDP 报文格式

2.2 报文结构对比

三、UDP 的传输特性与差错控制机制

3.1 UDP 的“尽力而为”服务

3.2 差错检测机制:校验和

3.3 UDP 与 TCP 差错控制对比

四、UDP 的使用注意事项与优化

4.1 粘包/拆包问题

4.2 UDP 的可靠性增强手段


一、UDP 协议概述

1.1 UDP 协议简介

        UDP(User Datagram Protocol,用户数据报协议)是位于 传输层 的通信协议,是 TCP 的“轻量级”补充方案。UDP 提供了一种无连接、不可靠、面向报文的传输方式,具有结构简单、开销小、效率高的特点。

📌UDP 的核心特性:

  • 无连接:发送数据前不建立连接,数据发送后不关心是否到达。

  • 面向报文:每次发送的是一个完整的数据报(Datagram),是天然的“消息边界”传输方式。

  • 不可靠传输:不提供重传、重排、流量控制等机制。若数据在传输中丢失、重复或乱序,UDP 不负责处理。

  • 无状态:发送方与接收方均不记录任何传输状态,因此服务器资源占用极低,适合高并发。

  • 传输速度快:因为没有握手、重传、拥塞控制等机制,UDP 拥有极低延迟,适用于对实时性要求极高的应用。

📡UDP 的附加能力:

  • 单播:一对一通信,与 TCP 相同。

  • 多播:又称组播,可向一组特定主机发送数据,节省带宽。发送方向一个组播IP地址(224.0.0.0 ~ 239.255.255.255范围内)发送数据报,所有加入该组播组的成员都能接收到该数据。类似于QQ群的聊天消息广播

  • 广播:可向局域网内所有主机发送数据报,与组播不同,广播是发送到一个特殊的广播地址(一般是255.255.255.255),常用于局域网广播消息推送

1.2 无连接通信的定义与特性

1.2.1 什么是无连接?

        无连接通信是指在发送数据之前,通信双方不需要建立专门的连接通道。数据以数据报的形式独立发送,每个数据报是独立的实体,彼此之间没有依赖关系,也不保证顺序。

  • 发送方直接将数据报发送到目标地址。

  • 接收方在指定端口等待数据报到达。

  • 无需进行握手或建立会话。

1.2.2 无连接带来的影响

优点 缺点
- 开销小,速度快 - 不保证数据可靠性
- 无需连接建立,延迟低 - 不保证数据顺序
- 适合实时通信场景 - 数据包可能丢失、重复或损坏

1.3 UDP 的典型应用场景

  • 视频/语音流媒体:强调实时性,允许少量丢包。

  • 在线游戏:及时传输玩家动作信息,丢包时通常不重传。

  • 实时传感器数据:传感器周期性发送状态,容忍少量丢失。


二、UDP 报文段结构解析

2.1 UDP 报文格式

        UDP协议的报文格式相对简单,整个UDP报文由首部和数据组成,首部固定八字节

定义 解释
Source Port(源端口) 用于标识发送方的端口。
Destination Port(目标端口) 用于标识接收方的端口。
Length(长度) 表示整个 UDP 报文(首部 + 数据)的长度。
Checksum(校验和) 用于检验数据完整性(IPv4 可选,IPv6 必须)
data octets(数据) 传输数据(可变)

2.2 报文结构对比

字段 TCP 有 UDP 有 区别
端口号 相同
校验和 TCP 校验更严格
长度字段 TCP 无需长度字段,长度靠序列号控制
序列号/ACK UDP 无可靠性机制
控制标志位 UDP 不支持状态管理
窗口大小 TCP支持流量控制

三、UDP 的传输特性与差错控制机制

3.1 UDP 的“尽力而为”服务

✅ 定义:UDP 提供无连接的传输服务,表现为:

  • 不保证数据一定送达(可能丢失)

  • 不保证接收顺序(可能乱序)

✅ 过程描述:

  • UDP应用层将数据交给传输层(UDP协议)

  • UDP协议直接将数据封装为UDP报文段,交给IP层

  • 不与目标主机建立连接(无需握手,开销小)

  • IP层负责将报文传送到目标主机,途中可能丢失、乱序、重复

  • UDP不会主动监控数据的发送结果

  • 不会自动重传(可能漏包)

3.2 差错检测机制:校验和

尽管UDP不保证可靠传输,但它提供基本的差错检测能力,通过校验和字段(Checksum)。🔸校验和覆盖范围

UDP 校验和不仅覆盖 UDP 报文本身,还包括 伪首部(pseudo-header)

包含内容 说明
UDP头部 + 数据 正文部分,主要用于校验实际传输数据
伪首部(伪IP头部信息) 源IP地址、目标IP地址、协议号、UDP长度等

⚠️ 伪首部不是实际发送内容,仅用于校验和计算过程中,确保目的地正确。

🔸校验和的作用:

        校验整个UDP数据包是否被篡改、损坏,在IPv6中是强制要求的,在IPv4中是可选的🔸校验和失败会怎样?

        如果校验和错误,接收方会直接丢弃该UDP包,不通知发送方

3.3 UDP 与 TCP 差错控制对比

特性 UDP TCP
校验机制 提供校验和,检错但不纠错 提供校验和,结合确认/重传机制实现纠错
伪首部参与校验
丢包处理 丢弃,不通知发送方 自动重传,确保数据可靠到达
顺序控制 通过序列号实现严格有序
差错后数据恢复机制 无(应用层处理) 有(内建重传和流控)

四、UDP 的使用注意事项与优化

4.1 粘包/拆包问题

✅ UDP 不存在粘包问题:UDP 是面向报文的协议,天然分隔每个报文段

  • 每次 sendto() / recvfrom() 调用,对应一个完整的 UDP 报文段

  • 一个 recvfrom() 调用只会收到一个完整的数据报,不会读取多个报文,也不会截断部分报文。


⚠️ 应用层可能会出现“拆包”风险:虽然 UDP 不粘包,但若发送数据过大,超出MTU时,网络层层可能发生分片,带来以下问题

IP层的分片重组过程

问题 描述
分片传输 IP 层自动将 UDP 报文分成多个 IP 包发送
丢一个分片即丢包 任一分片丢失,整个 UDP 报文都被丢弃
接收方重组负担大 接收方 IP 层需缓存、重组,增加开销

 MTU 是数据链路层的属性

  • 定义:MTU 指的是数据链路层协议帧(如以太网帧)中能够承载的最大有效负载(不包括链路层报头)的大小,单位一般为字节(Bytes)。

  • 例如,标准以太网的 MTU 是 1500 字节,这意味着一帧的最大有效载荷不能超过1500字节。

网络层和 MTU

  • 网络层(IP层)负责跨多条链路传输数据包,IP数据包的大小受到沿途每条链路的 MTU 限制。

  • 网络层协议(如 IPv4)必须考虑链路层 MTU,若 IP 数据包大于某条链路的 MTU,就必须分片或进行路径MTU发现。

  • IP层的最大报文长度(Total Length)理论上最大可达 65535 字节,但在传输时受 MTU 限制必须拆分。

4.2 UDP 的可靠性增强手段

        QUIC 是 Google 提出的新一代传输协议,运行在 UDP 之上,但具有类 TCP 的可靠性保障

  • 带有连接管理

  • 支持重传和拥塞控制

  • 多路复用,避免 TCP 的队头阻塞

  • 被广泛应用于 HTTP/3


网站公告

今日签到

点亮在社区的每一天
去签到