Learn

284 篇文章分类:全部
网络

TCP 和 UDP 的区别

互联网上的通信会使用各种通信方式把数据送到对方。 其中有代表性的就是 TCPUDP

TCP 是重视准确送达数据的通信方式。 UDP 是重视让通信方式本身更轻、更容易减少延迟的通信方式。

不过,TCP 和 UDP 不是用来比较“哪一个更高级”的。 应根据通信目的,分别使用适合的方式。

什么是 TCP

TCP 是重视可靠性的通信方式。

TCP 会先与通信对象建立连接,并在这个连接上收发数据。 它会确认发送的数据是否到达对方,如果途中有丢失的数据,就会重新发送。

另外,在网络上,数据不一定按发送顺序到达。 TCP 会让数据带有用于管理顺序的信息,并在接收侧整理成正确顺序来处理。

因此,TCP 适合“缺失或顺序错乱会造成问题的通信”。

例如登录处理、文件收发、邮件发送、基于 HTTP/1.1 或 HTTP/2 的 Web 通信等,都很重视数据准确性。 如果登录信息的一部分缺失,或文件的一部分损坏,就无法正确处理。

TCP 为了获得可靠性,会进行确认和重传等控制。 因此它比 UDP 有更多控制,但在希望按正确顺序可靠处理数据的通信中,是重要机制。

TCP 会“管理以便准确送达”

TCP 的特点在于,它不只是“发送数据”,还会进行让发送的数据作为通信成立所需的管理。

具体来说,TCP 有下面这些性质。

性质内容
面向连接与通信对象建立连接后再收发数据
到达确认确认发送的数据是否到达
重传必要时重新发送未到达的数据
顺序控制把顺序错乱到达的数据整理成正确顺序
重复处理整理重复到达的相同数据

通过这些机制,TCP 会向应用提供顺序整齐、具有可靠性的数据流。

不过,TCP 并不会原样保留“应用发送的一次数据单位”。 TCP 会把数据作为连续的字节流处理。

因此,应用侧需要另外决定从哪里到哪里是一个消息。 HTTP 等上层协议具有为此而设计的规则。

什么是 UDP

UDP 是重视轻量和低延迟的通信方式。

UDP 不像 TCP 那样先建立连接再通信。 另外,UDP 本身没有重新发送未到达数据的机制,也没有整理顺序的机制。

UDP 会以相对简单的单位发送数据。 这个单位称为数据报。

UDP 不让通信方式本身承担很多控制,因此处理更轻。 结果是,在重视实时性的通信中,有时更容易使用。

不过,简单认为“因为是 UDP 所以一定快”并不准确。 实际速度和体感质量也会受网络环境、应用侧设计、加密方式、是否重传、拥塞状况等影响。

UDP 的本质在于“通信方式本身不提供很多保证”。

UDP 会“减少保证以便更容易处理”

UDP 本身不具备 TCP 那样的可靠性机制。

性质内容
无连接型不以 TCP 那样的连接建立为前提
无到达保证UDP 本身不保证数据一定到达
无顺序保证UDP 本身不保证数据到达顺序
无重传UDP 本身不会自动重新发送丢失的数据
数据报单位把发送单位作为数据报处理

这样听起来,UDP 可能像是不完整的通信。 但是,使用 UDP 的理由是,通过减少保证,应用侧更容易自由设计通信。

例如在视频通话中,比起事后准确重传旧音频数据,立即送达当前音频更自然。 在线游戏中,比起完整重传过去的位置信息,快速反映当前状态有时更重要。

另外,使用 UDP 的应用并不是什么保证都做不了。 必要时,应用侧可以自行加入确认、重传、顺序控制、加密等机制。

QUIC 就是代表例。 QUIC 以 UDP 为基础,但不是单纯的 UDP 通信。它在 UDP 之上叠加了连接管理、加密、重传、流控制等机制。

TCP 和 UDP 的比较

TCP 和 UDP 的区别并不只是“有没有可靠性”。 它们的通信设计思想不同。

项目TCPUDP
基本思路为了准确送达而管理通信让通信方式本身更轻,把控制减到最少
连接建立连接后通信不以连接建立为前提
数据处理作为连续字节流处理以数据报单位处理
到达确认进行UDP 本身不进行
顺序控制进行UDP 本身不进行
重传必要时进行UDP 本身不进行
适合用途准确性重要的通信低延迟和灵活控制重要的通信
代表例HTTP/1.1、HTTP/2、登录、文件收发、邮件发送DNS、视频通话、在线游戏、QUIC、HTTP/3

TCP 适合的通信

TCP 适合数据缺失或顺序错乱容易造成问题的通信。

例如下载文件时,如果途中只缺失一部分,整个文件可能损坏。 登录处理中,如果认证所需信息没有正确到达,就无法处理。

Web 通信中,HTTP/1.1 和 HTTP/2 也运行在 TCP 之上。 构成 Web 页面的 HTML、CSS、JavaScript、图片等,基本上需要正确取得。

这样,在通信准确性重要的场景中,TCP 很适合。

不过,现在的 Web 通信并不是全部只靠 TCP 运行。 HTTP/3 使用 QUIC。QUIC 是以 UDP 为基础的通信方式。

因此,如果只记住“Web 浏览是 TCP”,理解现代通信时就不准确。 更准确地说,可以整理为“HTTP/1.1 和 HTTP/2 使用 TCP,HTTP/3 使用 QUIC”。

UDP 适合的通信

UDP 适合实时性和设计灵活性重要的通信。

在视频通话中,比起事后完整接收稍早的音频或影像,尽快接收当前音频或影像更重要。 即使一部分音频或影像缺失,有时不中断整体通信继续进行会更自然。

在线游戏中,低延迟也很重要。 比起完整重传过去状态,短间隔持续更新当前状态有时更合适。

DNS 中也经常使用 UDP。 DNS 是查询与域名对应的 IP 地址等信息的机制。在快速进行短查询和响应的场景中,UDP 很适合。

不过,DNS 并不总是只使用 UDP。 当响应较大、进行区域传送,或者使用 DNS over TLS 等方式时,会使用 TCP。

也就是说,DNS 是“UDP 的代表例”,但不是“只使用 UDP 的通信”。

QUIC 和 UDP 的关系

QUIC 是以 UDP 为基础的通信方式。 HTTP/3 运行在这个 QUIC 之上。

这里重要的是,QUIC 并不是“因为是 UDP 所以没有可靠性的通信”。

UDP 本身没有到达确认、重传、顺序控制、加密等机制。 但是,QUIC 通过在 UDP 之上叠加自己的控制,实现可靠性和加密。

之所以构建在 UDP 之上而不是 TCP 之上,是因为比起改变已经深度嵌入 OS 和网络设备的 TCP 本身,在 UDP 之上设计新的通信方式更容易灵活改良。

因此,UDP 并不只是“粗糙的通信”。 它也被用作实现新通信方式的基础。

TCP 和 UDP 哪个更好

TCP 和 UDP 并不是其中一方总是更优秀。

TCP 重视通信可靠性。 UDP 让通信方式本身更轻,并让应用侧更容易灵活控制。

准确性重要的通信适合 TCP。 低延迟和实时性重要的通信有时适合 UDP。

另外,即使使用 UDP,应用侧也可能补充可靠性。 反过来,即使使用 TCP,如果网络状况不好,也会发生延迟和重传。

因此,TCP 和 UDP 不能简单分成“快/慢”“安全/危险”。 应根据通信目的、可接受的延迟、数据是否可以缺失、应用侧控制到什么程度来分别使用。

思考匿名性时的接点

TCP 和 UDP 的区别,也关系到理解匿名性和通信可见方式。

例如 、DNS、HTTP/3、视频通话、在线游戏等,会因为使用 TCP 还是 UDP,而改变通信的处理方式。

TCP 通信中,连接的开始、持续和结束相对清楚。 UDP 通信不像 TCP 那样明确具有连接形态,有时会断续流动短数据报。

这个差异在防火墙、NAT、VPN、代理、匿名化网络等中很重要。

例如,Tor 基本上是处理 TCP 流的设计。 因此,使用 UDP 的应用通信不一定能原样通过 Tor 传输。

另外,HTTP/3 使用 QUIC,因此即使是 Web 通信,也可能基于 UDP。 这种情况下,与传统 HTTP/1.1 或 HTTP/2 相比,通信的可见方式和控制方式可能发生变化。

DNS 在思考匿名性和隐私时也很重要。 DNS 查询是通过 UDP 发往外部,还是通过 TCP 或加密 DNS 方式处理,会改变通信被观察的方式。

理解 TCP 和 UDP 的区别后,就更容易整理不只是“正在通信”,而是“哪种通信以什么方式被承载”。

总结

TCP 是重视可靠性的通信方式。 它会建立连接,确认数据是否到达,必要时重传,并整理顺序。

UDP 为了让通信方式本身更轻,不把到达确认、重传、顺序控制等作为基本功能。 因此,它用于需要低延迟和灵活设计的通信。

TCP 适合 HTTP/1.1、HTTP/2、登录、文件收发、邮件发送等。 UDP 用于 DNS、视频通话、在线游戏、QUIC、HTTP/3 等。

不过,DNS 不只使用 UDP,也使用 TCP。 QUIC 以 UDP 为基础,但不是单纯的 UDP 通信,而是在 UDP 之上拥有自己的可靠性和加密机制。

TCP 和 UDP 不是哪一方更优秀的关系。 它们会根据通信目的,是重视准确性,还是重视低延迟和灵活性而分别使用。

相关工具

DNS Leak Test

DNSLeakTest

与本文相关的外部资源。只有在符合你的处境和威胁模型时再打开。

列在这里的原因: 它可能有助于理解本文主题,但位于 Anonymity Sense 之外,使用前应先自行确认。

URL : https://www.dnsleaktest.com/

打开外部网站

相关文章