欢迎光临
我们一直在努力

# 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连接建立


为什么需要三次握手?

因为双方需要确认:

  • 自己发送能力正常
  • 自己接收能力正常
  • 对方发送和接收能力正常
  • 如果只有两次:

    可能出现:

    客户端以为连接成功

    服务器不知道客户端是否收到确认

    所以需要第三次确认。


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

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


    、

    赞(0)
    未经允许不得转载:171主机测评 » # TCP和UDP到底有什么区别?一篇文章彻底搞懂两种网络通信协议
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址