什么是UDP?

传输层通信协议UDP是非常常见用于语音和视频流量的协议。

学习目标

阅读本文后,您将能够:

  • 定义UDP / IP
  • 描述UDP的一些用例

复制文章链接

什么是用户数据报协议(UDP / IP)?

用户数据报协议 (UDP) 是一种跨互联网使用的通信协议,用于对时间敏感的传输,例如视频播放或 DNS 查找。它通过在数据传输之前不正式建立连接来加速通信。这使得数据可以非常快速地传输,但也可能导致数据包在传输过程中丢失——并为 DDoS 攻击形式的漏洞利用创造机会。

UDP 是如何工作的?

与所有网络协议一样,UDP 是一种标准化的方法,用于在网络中两台计算机之间传输数据。与其他协议相比,UDP 以一种简单的方式完成这一过程:它直接向目标计算机发送数据包(数据传输的单位),而不先建立连接,也不指示所述数据包的顺序,或检查它们是否按预期到达。(UDP 数据包被称为“数据报”)。

UDP 比另一个常见的传输协议 TCP 要更快,但可靠性更差。在 TCP 通信中,两台计算机先通过一个称为“握手”的自动过程建立连接。只有在握手完成后,一台计算机才会向另一台计算机实际传输数据包。

UDP 通信不需要经过这个过程。相反,一台计算机可以简单地开始向另一台计算机发送数据:

TCP 与 UDP 通信的对比

此外,TCP 通信指示应接收数据包的顺序并确认数据包按预期到达。如果一个数据包没有到达——例如,由于中间网络拥塞——TCP 要求重新发送。UDP 通信不包括任何此类功能。

这些差异创造了一些优势。因为 UDP 不需要“握手”或检查数据是否正确到达,所以它能够比 TCP 更快地传输数据。

然而,这种速度会产生弊端。如果 UDP 数据报在传输过程中丢失,它不会重新发送。因此,使用 UDP 的应用程序必须能够容忍错误、丢失和重复。

(从技术上讲,这种数据包丢失不是 UDP 中的缺陷,而是互联网构建方式的结果。大多数网络路由器不会按设计执行数据包排序和到达确认,因为这样做需要无法实现的额外内存量。TCP 是一种在应用程序需要时填补这一缺漏的方法。)

哪种服务依赖UDP?

UDP 通常用于对时间敏感的通信,在这种通信中,偶尔丢弃数据包比等待更好。语音和视频流量使用此协议发送,因为它们都是时间敏感的,并且旨在处理某种程度的丢失。例如,许多基于互联网的电话服务使用的 VOIP(IP 语音)通过 UDP 运行。这是因为相比清晰但延迟严重的电话对话而言,静态电话对话更为可取。

这也使 UDP 成为在线游戏的理想协议。同样,由于 DNS 服务器同时需要快速和高效,因此它们也通过 UDP 运行。

在 DDoS 攻击中如何使用 UDP?

在大多数用例中,像丢包这样的 UDP“风险”并不是一个严重的问题。但是,UDP 可被用于恶意目的。由于 UDP 不需要握手,因此攻击者无需先获得服务器开始通信的许可,即可使用 UDP 流量“淹没”目标服务器。

典型的 UDP 洪水攻击会向目标计算机上的随机端口发送大量 UDP 数据报。这会强制目标使用同样数量的 ICMP 数据包进行响应,这表明这些端口无法连线。响应每个欺诈数据报所需的计算资源可能会耗尽目标,从而导致对合法流量的拒绝服务。(要了解更多信息,请阅读我们关于 UDP Flood 攻击的文章。) 组织可以通过多种方法防御 UDP 洪水攻击。一种是限制 ICMP 数据包的响应速度,尽管这种方法也可能过滤掉合法数据包。另一种方法是通过许多分布式数据中心的中间网络接收和响应 UDP 流量,防止单个源服务器被欺诈性请求淹没。详细了解 Cloudflare 如何使用此策略帮助组织缓解 DDoS 攻击