TCP和UDP的区别完全解析

同属传输层协议的TCP和UDP,收发数据的方式却大不相同,让我们按顺序来看看。

  1. 什么是TCP和UDP

    TCP(传输控制协议)和UDP(用户数据报协议)都是在互联网上传输数据的传输层协议。它们工作在同一层级,但收发数据的方式几乎截然相反。

  2. 面向连接 vs 无连接

    TCP在发送数据前,会先通过SYN→SYN/ACK→ACK这三步握手建立连接。UDP则没有这类前置流程,直接发送数据,属于无连接方式。

  3. 可靠性与顺序保证

    TCP会确认数据是否送达,遇到乱序会重新排列,丢失的数据包也会重传。UDP完全没有这类确认和重传机制,数据包丢失或乱序也不会被纠正。

  4. 报头开销的差异

    TCP报头至少20字节,包含序列号、确认号等大量控制信息。UDP报头只有8字节,轻量得多,处理速度上更有优势。

  5. 流量控制与拥塞控制

    TCP通过滑动窗口和拥塞控制算法,能根据网络状况自动调整发送速率。UDP没有这种自动调节机制,如果需要控制速率,只能由应用程序自行处理。

  6. 实际应用在哪些场景

    对准确传递要求高的网页浏览(HTTP/HTTPS)、邮件(SMTP)、文件传输(FTP)都使用TCP。而对速度要求更高的DNS查询、视频流媒体、网络游戏、视频通话(VoIP)则主要使用UDP。

  7. 建立在UDP之上的新协议:QUIC

    近年来出现了QUIC协议,它在UDP的速度优势基础上,叠加了自己的可靠性保障和加密机制。作为HTTP/3的基础技术,Chrome、YouTube等众多服务已经在使用QUIC。

结合端口号一起理解会更容易

TCP和UDP都用端口号来区分具体是哪种服务。了解常见服务对应的端口号,能帮助更好地理解TCP和UDP的区别。

想了解基于UDP服务的通话质量

网络电话(VoIP)是典型的基于UDP的服务之一。可以进一步了解SIP、RTP协议实际是如何运作的。

常见问题

DNS查询用的是TCP还是UDP?

默认使用UDP以实现快速查询。但如果响应数据过大,或是在区域传送(zone transfer)这类对可靠性要求较高的特殊场景下,也会切换为TCP。

为什么大多数网络游戏都用UDP?

因为实时性是最重要的。如果因为一个数据包丢失就等待重传,反而会让角色的动作显得更不自然,所以即使会有一些丢包,能快速更新到最新状态的UDP方式反而更适合游戏。