一、基础定义
TCP(传输控制协议)
面向连接、可靠传输协议,通信前必须建立连接,传输全程校验、重传、有序,不会丢包乱序。
UDP(用户数据报协议)
无连接、不可靠传输协议,发数据直接发包,不握手、不校验、不重传,速度极快,但可能丢包、乱序。
二、核心区别对照表
表格
| 对比维度 | TCP | UDP |
|---|---|---|
| 连接特性 | 面向连接(通信前三次握手建立连接,结束四次挥手断开) | 无连接,无需建立 / 断开,直接发送数据包 |
| 可靠性 | 可靠传输:1. 数据不丢失2. 数据不乱序3. 重复包自动去重4. 出错自动重传 | 不可靠:1. 可能丢包2. 可能乱序3. 无重传机制4. 不校验完整交付 |
| 流量 / 拥塞控制 | 具备:滑动窗口、拥塞避免、慢启动,防止网络拥堵 | 无任何流量、拥塞控制,只管发包 |
| 头部开销 | 头部 20~60 字节,字段多(序号、确认、窗口、校验等) | 头部固定 8 字节,极简,开销极小 |
| 有序性 | 数据按发送顺序到达接收方 | 数据包到达顺序完全不确定 |
| 速度 | 较慢,大量校验、握手、重传带来延迟 | 速度快、低延迟,无额外协商流程 |
| 适用场景 | 文件传输、网页、邮件、数据库、远程登录(要求完整准确) | 直播、游戏语音视频、DNS 查询、视频通话(要求低延迟,允许少量丢包) |
三、关键机制详解
1. TCP 独有机制
- 三次握手:建立连接,确认双方收发能力正常
- 四次挥手:正常断开连接,释放资源
- 序列号 ACK 确认:每个分段带序号,接收方回复确认,没收到确认就重发
- 滑动窗口:控制单次发送数据量,避免接收缓冲区溢出
- 拥塞控制:网络拥堵时自动降低发包速率,防止炸网
2. UDP 无任何协商机制
- 发送方只填目标 IP + 端口,直接封装报文发送
- 接收方收到后直接上交应用层,丢包、乱序全部交给程序自己处理
四、典型业务举例
使用 TCP
- HTTP/HTTPS 网页访问
- FTP/SFTP 文件下载上传
- MySQL、Redis 数据库连接
- SSH 远程服务器登录
- 微信文字聊天、文件发送(不能丢字丢文件)
使用 UDP
- 抖音 / 快手直播、视频通话(少量花屏卡顿无所谓,延迟最重要)
- 网络游戏实时语音、对战同步
- DNS 域名解析(一次查询短报文,丢了重新发即可)
- 监控摄像头实时流媒体
五、一句话总结
- TCP:稳而慢,追求数据完整不出错,牺牲速度换可靠
- UDP:快而不稳,追求极低延迟,允许少量数据丢失
补充拓展:UDP 如何弥补不可靠?
很多音视频软件会在应用层自己实现简易重传、乱序排序,底层依然用 UDP,兼顾低延迟与基础可靠性,称为QUIC 协议(基于 UDP 的类 TCP 可靠传输),谷歌 HTTP3 底层就是 QUIC。