# TCP和UDP到底有什么区别?一篇文章彻底搞懂两种网络通信协议

# 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 UDP

TCP和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核心区别总结

对比TCPUDP
中文名称传输控制协议用户数据报协议
连接方式面向连接无连接
可靠性可靠不保证可靠
数据形式字节流数据报
速度较慢较快
是否重传支持不支持
是否排序支持不支持
是否确认支持不支持
资源消耗较高较低
应用场景网页、文件、聊天直播、游戏、实时控制

一句话:

TCP:宁愿慢一点,也保证正确 UDP:宁愿丢一点,也保证速度

四、TCP为什么可靠?

TCP可靠主要依靠几个机制:


1. 三次握手建立连接

TCP通信前必须建立连接。

过程:

客户端 服务器 SYN ----------------> SYN+ACK <------ ACK ----------------> 连接建立

分别解释:

第一次握手

客户端发送:

SYN

表示:

我要建立连接。


第二次握手

服务器回复:

SYN + ACK

表示:

我收到你的请求,也准备好了。


第三次握手

客户端发送:

ACK

表示:

收到确认,可以通信。

最终:

TCP连接建立

为什么需要三次握手?

因为双方需要确认:

  1. 自己发送能力正常
  2. 自己接收能力正常
  3. 对方发送和接收能力正常

如果只有两次:

可能出现:

客户端以为连接成功 服务器不知道客户端是否收到确认

所以需要第三次确认。


五、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

但是没有收到:

ACK

TCP认为:

可能丢失。

重新发送:

数据1

4. 校验和

TCP包含校验字段:

用于检测:

  • 数据损坏
  • 传输错误

5. 流量控制

防止:

发送太快。

例如:

接收端处理能力:

10MB/s

发送端:

100MB/s

TCP会自动调整发送速度。


八、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。

真正优秀的工程设计,不是选择更先进的协议,而是根据应用场景选择最合适的通信方式。