TCP(传输控制协议)和 UDP(用户数据报协议)是 TCP/IP 协议栈中最核心的两种传输层协议,前者追求"可靠有序",后者追求"快速高效",二者设计目标不同,适用场景也完全不同。下面从核心特性、工作原理、适用场景三个维度,拆解它们的关键区别,内容直观易懂。
一、核心特性对比:一张表看懂关键差异
TCP 和 UDP 的本质区别源于"是否提供可靠性保障",这直接决定了它们的特性差异:
| 对比维度 | TCP(传输控制协议) | UDP(用户数据报协议) |
| 可靠性 | 可靠传输:通过确认、重传、排序等机制,确保数据不丢失、不重复、有序到达 | 不可靠传输:仅发送数据,不确认、不重传,数据可能丢失、乱序 |
| 连接性 | 面向连接:通信前需建立"三次握手",通信后需"四次挥手"关闭连接 | 无连接:通信前无需建立连接,直接发送数据报 |
| 数据边界| 面向字节流:无固定数据边界,需应用层自行处理数据拆分/拼接 | 面向数据报:每个数据报是独立单元,有明确边界,接收方按数据报完整接收 |
| 拥塞控制 | 有:通过慢启动、拥塞避免等算法,根据网络状况动态调整发送速率,避免网络拥堵 | 无:无论网络状况,持续以固定速率发送,可能导致网络拥塞 |
| 流量控制 | 有:通过滑动窗口机制,控制发送方速率,避免接收方处理不过来 | 无:不考虑接收方处理能力,可能导致接收方数据溢出 |
| 头部开销 | 大(20-60 字节):包含序号、确认号、窗口大小等控制字段 | 小(8 字节):仅包含源端口、目的端口、长度、校验和 |
| 适用场景 | 对可靠性要求高的场景(如文件传输、网页加载、登录认证) | 对实时性要求高的场景(如视频通话、直播、游戏、DNS 查询) |
二、工作原理差异:从"通信流程"看本质区别
- TCP:面向连接的"可靠传输"流程
TCP 为了实现可靠性,设计了"连接建立→数据传输→连接关闭"三个阶段,每个阶段都有严格的控制机制:
(1)连接建立:三次握手(确保双方收发能力正常)
- 
客户端发送 SYN 报文(同步报文),携带"客户端初始序号",请求建立连接; 
- 
服务器接收后,回复 SYN+ACK 报文(同步+确认报文),携带"服务器初始序号"和"对客户端序号的确认"; 
- 
客户端接收后,回复 ACK 报文(确认报文),携带"对服务器序号的确认",连接正式建立。 
> 为什么是三次?两次握手可能导致"无效连接请求"残留(如客户端超时重发的 SYN 报文,服务器误以为新连接),三次握手可确保双方都确认"对方能收发"。
(2)数据传输:可靠保障机制
- 
序号与确认:每个 TCP 报文都带"序号",接收方收到后回复"确认号"(表示已收到序号之前的所有数据),若发送方超时未收到确认,会重传数据; 
- 
滑动窗口:接收方通过"窗口大小"告知发送方"当前能接收的最大数据量",发送方据此调整发送速率,避免接收方过载(流量控制); 
- 
拥塞控制:若网络出现丢包(可能是拥堵导致),发送方通过"慢启动"降低发送速率,逐步恢复,避免加剧网络拥堵。 
(3)连接关闭:四次挥手(确保双方数据都发送完成)
- 
客户端发送 FIN 报文(结束报文),表示"客户端无数据要发"; 
- 
服务器接收后,回复 ACK 报文,表示"已收到关闭请求,正在处理剩余数据"; 
- 
服务器处理完剩余数据后,发送 FIN 报文,表示"服务器无数据要发"; 
- 
客户端接收后,回复 ACK 报文,并等待一段时间(确保服务器收到确认),之后关闭连接。 
> 为什么是四次?服务器收到 FIN 后,可能还有数据要发送,不能立即发 FIN,需分"确认关闭请求"和"自己发起关闭"两步,因此比三次握手多一次。
- UDP:无连接的"快速传输"流程
UDP 设计极简,完全不考虑可靠性,通信流程只有"发送数据"一步,没有连接建立/关闭阶段:
- 
应用层将数据传给 UDP,UDP 仅在数据前添加"8 字节头部"(包含源端口、目的端口、数据长度、校验和),组成"UDP 数据报"; 
- 
UDP 直接将数据报交给网络层(IP 协议),由 IP 协议负责将数据报发送到目标主机; 
- 
目标主机的 UDP 收到数据报后,校验头部(若校验失败则直接丢弃),然后将数据交给应用层; 
- 
整个过程中,UDP 不确认数据是否到达、不重传丢失的数据、不保证数据顺序,也不控制发送速率。 
三、适用场景对比:什么时候用 TCP?什么时候用 UDP?
选择 TCP 还是 UDP,核心看业务需求------"可靠性优先"选 TCP,"实时性优先"选 UDP。
- TCP 适用场景:不能接受数据丢失/乱序
- 
文件传输:如 FTP、HTTP/HTTPS 下载(丢失数据会导致文件损坏,必须可靠); 
- 
网页浏览:HTTP/HTTPS 请求(加载网页时,HTML、CSS、图片不能丢失,否则页面错乱); 
- 
登录认证/支付:如用户登录、转账支付(请求/响应必须准确到达,否则登录失败、支付异常); 
- 
邮件发送:如 SMTP 协议(邮件不能丢失,否则用户收不到)。 
- UDP 适用场景:可接受少量数据丢失,追求低延迟
- 
实时音视频:如视频通话(Zoom、微信通话)、直播(抖音、 Twitch)(少量数据丢失仅导致画面卡顿/声音杂音,延迟过高会影响体验); 
- 
在线游戏:如王者荣耀、CSGO(游戏指令需实时传输,延迟 100ms 和 500ms 体验差异极大,少量丢包可通过游戏逻辑弥补); 
- 
DNS 查询:查询域名对应的 IP(请求和响应都很短,即使丢失,客户端也会立即重发,用 UDP 比 TCP 更高效); 
- 
物联网设备:如传感器数据上报(设备算力有限,UDP 头部小、开销低,少量数据丢失不影响整体统计)。 
四、总结:一句话记住核心区别
- 
TCP 像"挂号信":需要签字确认(三次握手),会跟踪物流(序号/确认),丢件会重发(重传机制),适合重要文件(可靠优先); 
- 
UDP 像"普通明信片":直接投递,不确认是否收到,丢了也不补,适合快速传递简短信息(实时优先)。