TCP 与 UDP:传输层的区别与实际示例
TCP 和 UDP 都通过 IP 传输应用数据,但提供的服务不同。TCP 为应用提供带确认和重传机制的有序字节流。UDP 则发送独立的数据报,不提供这些传输层保证。两者并没有绝对的优劣之分:应由应用的需求来决定。
TCP 提供什么
TCP 会在交换应用数据之前在两端之间建立连接。它为报文段编号,可以重传丢失的数据,并按顺序将字节交付给接收方应用。流量控制和拥塞控制有助于防止发送方压垮接收方或网络。这些特性适合文件、电子邮件和许多 Web 连接。但它们并不意味着加密:保护内容需要另外的安全协议,例如 TLS。
当某个报文段丢失时,应用可能必须等待缺失的字节,才能处理后续数据。这对于必须完整送达的文档是合适的,但可能给交互式流量带来额外延迟。TCP 也不保留应用的消息边界。发送方的两次写入,在接收方不一定表现为两次读取;应用必须自行定义消息的分帧方式。
UDP 把哪些工作留给应用
UDP 保留数据报边界,并且不建立 TCP 式的连接。UDP 本身不确认送达、不对数据包重新排序,也不重传丢失的数据。基于 UDP 构建的应用在需要时仍可以自行添加这些功能,以及拥塞控制和加密。DNS 查询通常使用 UDP。QUIC 运行在 UDP 之上,却在更高的层次实现了可靠的数据流和现代安全机制。
对于实时语音或游戏,一个严重迟到的数据包可能还不如下一个准时到达的数据包有用。因此,有些应用选择自行处理丢包和时限。使用 UDP 并不会让拥塞的网络变快:排队和丢包对两种传输协议都有影响。请测量实际应用,协议名称本身预示不了性能。如需进一步检查,可以使用 2IP ping 和 traceroute 工具。
端口与协议选择
两者都使用端口号,但 TCP 443 端口和 UDP 443 端口标识的是不同的端点。TCP 端口检测无法证明同一端口号上的 UDP 服务正常工作。HTTP/1.1 和 HTTP/2 通常使用 TCP 加 TLS,而 HTTP/3 使用基于 UDP 的 QUIC。当 UDP 连接失败时,客户端可能改用基于 TCP 的 HTTP 版本;具体结果取决于两端。
从应用的需求出发:完整送达、顺序、消息边界和时间限制。然后检查网络支持情况和安全要求。TCP 和 UDP 的规范定义了它们各自的传输服务。端口号的含义请参阅网络端口指南。