# TCP和UDP到底有什么区别?一篇文章彻底搞懂两种网络通信协议
TCP和UDP到底有什么区别?一篇文章彻底搞懂两种网络通信协议
前言
在嵌入式开发、服务器开发、物联网设备以及网络通信领域,经常会遇到两个非常重要的协议:
- TCP
- UDP
很多初学者都会问:
TCP和UDP到底有什么区别?为什么有的软件使用TCP,有的软件使用UDP?
简单来说:
TCP追求可靠传输,UDP追求高速传输。
例如:
- 网页访问使用TCP
- 文件下载使用TCP
- 微信聊天使用TCP
- 视频直播部分场景使用UDP
- 在线游戏大量使用UDP
- 工业实时控制可能使用UDP
但是,仅仅知道“TCP可靠,UDP快”是不够的。
本文将从:
- 网络分层
- 数据传输方式
- 连接建立
- 数据可靠性
- 速度区别
- 使用场景
- 嵌入式开发
几个方面详细介绍TCP和UDP。
一、TCP和UDP属于哪一层?
在学习TCP和UDP之前,需要先了解TCP/IP网络模型。
常见TCP/IP模型:
应用层 | 传输层 | 网络层 | 网络接口层其中:
应用层
负责具体业务。
例如:
- HTTP
- HTTPS
- MQTT
- Modbus TCP
- FTP
传输层
负责端到端的数据传输。
主要协议:
TCP UDPTCP和UDP的作用:
将应用程序的数据交给网络,并负责不同设备之间的数据传输。
网络层
主要协议:
IP协议负责:
- 寻找目标地址
- 路由选择
- 数据包转发
例如:
192.168.1.100就是IP地址。
二、TCP和UDP是什么?
1. TCP是什么?
TCP:
Transmission Control Protocol
中文:
传输控制协议
TCP是一种:
- 面向连接
- 可靠
- 面向字节流
的通信协议。
特点:
- 发送前需要建立连接
- 保证数据可靠到达
- 保证数据顺序
- 自动重传错误数据
- 具有流量控制和拥塞控制
简单理解:
TCP像打电话,通信前必须先建立连接。
例如:
A:你好,我准备发送数据 B:收到,可以发送 A:开始发送 B:确认收到2. UDP是什么?
UDP:
User Datagram Protocol
中文:
用户数据报协议
UDP是一种:
- 无连接
- 不保证可靠
- 面向数据报
的通信协议。
特点:
- 不需要建立连接
- 直接发送数据
- 不保证数据一定到达
- 不保证顺序
- 没有自动重传
简单理解:
UDP像寄普通信件,发出去之后不管结果。
例如:
发送: 你好 然后结束不会确认:
- 对方是否收到
- 是否丢失
- 是否顺序正确
三、TCP和UDP核心区别总结
| 对比 | TCP | UDP |
|---|---|---|
| 中文名称 | 传输控制协议 | 用户数据报协议 |
| 连接方式 | 面向连接 | 无连接 |
| 可靠性 | 可靠 | 不保证可靠 |
| 数据形式 | 字节流 | 数据报 |
| 速度 | 较慢 | 较快 |
| 是否重传 | 支持 | 不支持 |
| 是否排序 | 支持 | 不支持 |
| 是否确认 | 支持 | 不支持 |
| 资源消耗 | 较高 | 较低 |
| 应用场景 | 网页、文件、聊天 | 直播、游戏、实时控制 |
一句话:
TCP:宁愿慢一点,也保证正确 UDP:宁愿丢一点,也保证速度四、TCP为什么可靠?
TCP可靠主要依靠几个机制:
1. 三次握手建立连接
TCP通信前必须建立连接。
过程:
客户端 服务器 SYN ----------------> SYN+ACK <------ ACK ----------------> 连接建立分别解释:
第一次握手
客户端发送:
SYN表示:
我要建立连接。
第二次握手
服务器回复:
SYN + ACK表示:
我收到你的请求,也准备好了。
第三次握手
客户端发送:
ACK表示:
收到确认,可以通信。
最终:
TCP连接建立为什么需要三次握手?
因为双方需要确认:
- 自己发送能力正常
- 自己接收能力正常
- 对方发送和接收能力正常
如果只有两次:
可能出现:
客户端以为连接成功 服务器不知道客户端是否收到确认所以需要第三次确认。
五、TCP四次挥手关闭连接
TCP关闭连接需要四次。
过程:
客户端 服务器 FIN -------------> ACK <------- FIN <------- ACK -------------> 连接关闭原因:
TCP是全双工通信。
两个方向的数据需要分别关闭。
例如:
客户端:
我不发送数据了但是服务器可能:
还有数据发送所以需要分别关闭两个方向。
六、UDP为什么不需要握手?
UDP发送数据:
直接发送:
数据 ↓ UDP ↓ IP ↓ 网络没有:
- 建立连接
- 确认
- 等待
因此:
速度更快。
例如:
视频直播:
如果等待TCP确认:
发送 等待 确认 重新发送会产生明显延迟。
UDP:
直接发送下一帧即使丢失一点数据:
用户也可能感觉不到。
七、TCP如何保证数据可靠?
TCP主要通过以下机制:
1. 序列号(Sequence Number)
TCP给每个数据编号。
例如:
发送:
数据A 编号1 数据B 编号2 数据C 编号3接收端:
如果收到:
1 3发现:
缺少2就知道:
数据B丢失。
2. ACK确认机制
接收端收到数据后:
发送:
ACK例如:
发送:
数据编号100回复:
ACK 101表示:
编号100已经收到。
3. 超时重传
如果发送:
数据1但是没有收到:
ACKTCP认为:
可能丢失。
重新发送:
数据14. 校验和
TCP包含校验字段:
用于检测:
- 数据损坏
- 传输错误
5. 流量控制
防止:
发送太快。
例如:
接收端处理能力:
10MB/s发送端:
100MB/sTCP会自动调整发送速度。
八、UDP为什么速度更快?
UDP少了很多机制:
TCP:
建立连接 ↓ 发送数据 ↓ 等待确认 ↓ 检查顺序 ↓ 重传 ↓ 调整速度UDP:
发送数据因此:
UDP延迟更低。
九、TCP和UDP的数据格式区别
TCP数据结构
TCP头:
+----------------+ |源端口 | |目标端口 | |序列号 | |确认号 | |控制标志 | |窗口大小 | |校验和 | +----------------+ |数据 +----------------+TCP头通常:
20字节以上。
UDP数据结构
UDP头:
+----------------+ |源端口 | |目标端口 | |长度 | |校验和 | +----------------+ |数据 +----------------+UDP头固定:
8字节。
因此UDP开销更小。
十、TCP和UDP速度对比
很多人认为:
UDP一定比TCP快。
实际上:
不完全正确。
速度受到:
- 网络环境
- 数据大小
- 延迟要求
- 丢包率
影响。
但是一般情况下:
UDP优势:
- 延迟低
- 协议简单
- 资源占用少
TCP优势:
- 自动处理错误
- 稳定可靠
十一、TCP应用场景
1. HTTP网页访问
浏览网页:
例如:
浏览器 | TCP | 服务器为什么不用UDP?
因为网页数据不能丢。
例如:
网页代码:
<html>少一个字符:
页面可能错误。
2. 文件传输
例如:
- 下载软件
- 上传文件
- FTP
原因:
文件必须完整。
3. 邮件
例如:
SMTP协议。
邮件内容:
不能丢失。
4. 数据库连接
例如:
MySQL连接。
数据必须可靠。
十二、UDP应用场景
1. 视频直播
例如:
直播画面:
第100帧 第101帧 第102帧偶尔丢一帧:
影响不大。
但是:
延迟增加:
用户体验下降。
2. 在线游戏
游戏更关注:
实时性。
例如:
玩家移动:
当前位置如果TCP等待重传:
玩家可能:
瞬移。
3. 语音通话
例如:
VoIP。
丢几个声音包:
还能听懂。
但是延迟:
非常影响体验。
4. 工业实时控制
例如:
机器人控制:
位置数据 速度数据更关注:
实时响应。
十三、嵌入式开发中的TCP和UDP
在STM32、ESP32、Linux嵌入式设备中,经常使用网络通信。
硬件:
STM32 ↓ 以太网PHY ↓ RJ45 ↓ 网络软件:
Socket接口 ↓ TCP/UDP ↓ IP协议十四、STM32 TCP通信流程
TCP客户端:
初始化网络 ↓ 创建Socket ↓ 连接服务器 ↓ 发送数据 ↓ 接收数据 ↓ 关闭连接类似:
socket()connect()send()recv()close()十五、STM32 UDP通信流程
UDP:
创建Socket ↓ 绑定端口 ↓ 发送数据 ↓ 接收数据函数:
socket()sendto()recvfrom()不需要:
connect()十六、工业通信中如何选择TCP还是UDP?
选择原则:
数据不能丢
选择:
TCP例如:
- 配置参数
- 文件升级
- 数据上传
数据实时性优先
选择:
UDP例如:
- 视频
- 控制数据
- 实时状态
数据少但频繁
可以考虑:
UDP例如:
传感器:
每10ms发送一次状态十七、TCP和UDP常见误区
误区1:UDP一定不可靠
错误。
UDP本身不保证可靠。
但是应用层可以自己实现:
- ACK
- 重传
- 校验
- 序号
例如:
QUIC协议就是基于UDP实现可靠传输。
误区2:TCP一定慢
错误。
TCP经过优化后:
高速网络下性能非常高。
误区3:UDP没有连接
准确来说:
UDP没有传输层连接。
但是应用程序可以维护逻辑连接。
误区4:TCP一次发送对应一次接收
错误。
TCP是字节流。
例如发送:
hello world接收可能:
helloworld或者:
hello wor ld需要应用层自己定义协议。
十八、TCP和UDP如何选择?
总结:
| 需求 | 选择 |
|---|---|
| 网页访问 | TCP |
| 文件传输 | TCP |
| 数据库 | TCP |
| 聊天消息 | TCP |
| 视频直播 | UDP |
| 在线游戏 | UDP |
| 语音通话 | UDP |
| 实时控制 | UDP |
| 可靠数据采集 | TCP |
十九、总结
TCP和UDP最大的区别:
不是速度。
而是:
是否愿意牺牲速度换取可靠性。
TCP:
连接 确认 排序 重传 可靠UDP:
简单 快速 低延迟 不保证可靠记忆:
TCP: 像打电话 先建立连接, 确认身份, 保证每句话听清。 UDP: 像广播喊话 直接发送, 速度最快, 但可能有人没听见。在嵌入式、物联网和工业通信领域:
- 配置数据
- 文件传输
- 设备管理
通常选择TCP。
而:
- 实时控制
- 状态广播
- 高频数据
通常选择UDP。
真正优秀的工程设计,不是选择更先进的协议,而是根据应用场景选择最合适的通信方式。
、
