传输层通信协议UDP是非常常见用于语音和视频流量的协议。
阅读本文后,您将能够:
相关内容
订阅 TheNET,这是 Cloudflare 每月对互联网上最流行见解的总结!
复制文章链接
User Datagram Protocol 或 UDP 是一种跨互联网使用的通信协议,用于对时间敏感的传输,例如视频播放或 DNS 查询。它通过在数据传输之前不正式建立连接来加速通信。这使得数据可以非常快速地传输,但也可能导致数据包在传输过程中丢失,并为 DDoS 攻击形式的漏洞利用创造机会。
与所有网络协议一样,UDP 是一种标准化的方法,用于在网络中两台计算机之间传输数据。与其他协议相比,UDP 以一种简单的方式完成这一过程:它直接向目标计算机发送数据包(数据传输的单位),而不先建立连接,也不指示所述数据包的顺序,或检查它们是否按预期到达。(UDP 数据包被称为“数据报”)。
UDP 比另一个常见的传输协议 TCP 要更快,但可靠性更差。在 TCP 通信中,两台计算机先通过一个称为“握手”的自动过程建立连接。只有在握手完成后,一台计算机才会向另一台计算机实际传输数据包。
UDP 通信不需要经过这个过程。相反,一台计算机可以简单地开始向另一台计算机发送数据:
此外,TCP 通信指示应接收数据包的顺序并确认数据包按预期到达。如果一个数据包没有到达——例如,由于中间网络拥塞——TCP 要求重新发送。UDP 通信不包括任何此类功能。
这些差异创造了一些优势。因为 UDP 不需要“握手”或检查数据是否正确到达,所以它能够比 TCP 更快地传输数据。
然而,这种速度会产生弊端。如果 UDP 数据报在传输过程中丢失,它不会重新发送。因此,使用 UDP 的应用程序必须能够容忍错误、丢失和重复。
(从技术角度而言,这种数据包丢失不是 UDP 的缺陷,而是互联网构建方式的结果。大多数网络路由器不会按设计执行数据包排序和到达确认,因为这样做需要占用海量的额外存储空间。TCP 是一种在应用程序需要时填补这一缺漏的方法。)
UDP 通常用于时效性通信,在这种通信中,偶尔丢弃数据包比等待更好。常常使用此协议发送语音和视频流量,因为它们都是时效性通信,并且设计用于处理某种程度的丢失。例如,许多互联网电话服务使用的 IP 语音 (VoIP) 通常是使用 UDP 发送的。这是因为静态电话的通话清晰度虽然更高,但通信速度显著延迟。
这也让 UDP 成为在线游戏服务的理想传输协议。同样,由于 DNS 服务器需要兼具速度与效率,因此,它们也通过 UDP 传输。
在大多数用例中,像丢包这样的 UDP“风险”并不是一个严重的问题。但是,UDP 可被用于恶意目的。由于 UDP 不需要握手,因此攻击者无需先获得服务器开始通信的许可,即可使用 UDP 流量“淹没”目标服务器。
典型的UDP洪水攻击会向其目标计算机上的随机 端口 ,发送大量的UDP数据报。 这迫使目标用同样多的 ICMP 数据包来回应,这表明这些端口是不可达的。 响应每个欺诈性数据报所需的计算资源可能会耗尽目标,导致对合法流量的拒绝服务。 (要了解更多信息, 阅读我们关于UDP洪水攻击的文章。)
企业可以用各种方法来防御 UDP 洪水攻击。一种是限制 ICMP 数据包的响应速度,尽管这种方法也能过滤掉合法的数据包。另一种方法是通过由许多分布式数据中心组成的中介网络来接收和响应 UDP 流量,防止单一来源服务器被欺诈性请求所淹没。了解更多关于 Cloudflare 如何使用这种策略来帮助企业减轻 DDoS 攻击的信息。