TCP和UDP到底有什么区别一篇文章彻底搞懂两种网络通信协议前言在嵌入式开发、服务器开发、物联网设备以及网络通信领域经常会遇到两个非常重要的协议TCPUDP很多初学者都会问TCP和UDP到底有什么区别为什么有的软件使用TCP有的软件使用UDP简单来说TCP追求可靠传输UDP追求高速传输。例如网页访问使用TCP文件下载使用TCP微信聊天使用TCP视频直播部分场景使用UDP在线游戏大量使用UDP工业实时控制可能使用UDP但是仅仅知道“TCP可靠UDP快”是不够的。本文将从网络分层数据传输方式连接建立数据可靠性速度区别使用场景嵌入式开发几个方面详细介绍TCP和UDP。一、TCP和UDP属于哪一层在学习TCP和UDP之前需要先了解TCP/IP网络模型。常见TCP/IP模型应用层 | 传输层 | 网络层 | 网络接口层其中应用层负责具体业务。例如HTTPHTTPSMQTTModbus TCPFTP传输层负责端到端的数据传输。主要协议TCP UDPTCP和UDP的作用将应用程序的数据交给网络并负责不同设备之间的数据传输。网络层主要协议IP协议负责寻找目标地址路由选择数据包转发例如192.168.1.100就是IP地址。二、TCP和UDP是什么1. TCP是什么TCPTransmission Control Protocol中文传输控制协议TCP是一种面向连接可靠面向字节流的通信协议。特点发送前需要建立连接保证数据可靠到达保证数据顺序自动重传错误数据具有流量控制和拥塞控制简单理解TCP像打电话通信前必须先建立连接。例如A你好我准备发送数据 B收到可以发送 A开始发送 B确认收到2. UDP是什么UDPUser Datagram Protocol中文用户数据报协议UDP是一种无连接不保证可靠面向数据报的通信协议。特点不需要建立连接直接发送数据不保证数据一定到达不保证顺序没有自动重传简单理解UDP像寄普通信件发出去之后不管结果。例如发送 你好 然后结束不会确认对方是否收到是否丢失是否顺序正确三、TCP和UDP核心区别总结对比TCPUDP中文名称传输控制协议用户数据报协议连接方式面向连接无连接可靠性可靠不保证可靠数据形式字节流数据报速度较慢较快是否重传支持不支持是否排序支持不支持是否确认支持不支持资源消耗较高较低应用场景网页、文件、聊天直播、游戏、实时控制一句话TCP宁愿慢一点也保证正确 UDP宁愿丢一点也保证速度四、TCP为什么可靠TCP可靠主要依靠几个机制1. 三次握手建立连接TCP通信前必须建立连接。过程客户端 服务器 SYN ---------------- SYNACK ------ ACK ---------------- 连接建立分别解释第一次握手客户端发送SYN表示我要建立连接。第二次握手服务器回复SYN ACK表示我收到你的请求也准备好了。第三次握手客户端发送ACK表示收到确认可以通信。最终TCP连接建立为什么需要三次握手因为双方需要确认自己发送能力正常自己接收能力正常对方发送和接收能力正常如果只有两次可能出现客户端以为连接成功 服务器不知道客户端是否收到确认所以需要第三次确认。五、TCP四次挥手关闭连接TCP关闭连接需要四次。过程客户端 服务器 FIN ------------- ACK ------- FIN ------- ACK ------------- 连接关闭原因TCP是全双工通信。两个方向的数据需要分别关闭。例如客户端我不发送数据了但是服务器可能还有数据发送所以需要分别关闭两个方向。六、UDP为什么不需要握手UDP发送数据直接发送数据 ↓ UDP ↓ IP ↓ 网络没有建立连接确认等待因此速度更快。例如视频直播如果等待TCP确认发送 等待 确认 重新发送会产生明显延迟。UDP直接发送下一帧即使丢失一点数据用户也可能感觉不到。七、TCP如何保证数据可靠TCP主要通过以下机制1. 序列号Sequence NumberTCP给每个数据编号。例如发送数据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常见误区误区1UDP一定不可靠错误。UDP本身不保证可靠。但是应用层可以自己实现ACK重传校验序号例如QUIC协议就是基于UDP实现可靠传输。误区2TCP一定慢错误。TCP经过优化后高速网络下性能非常高。误区3UDP没有连接准确来说UDP没有传输层连接。但是应用程序可以维护逻辑连接。误区4TCP一次发送对应一次接收错误。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。真正优秀的工程设计不是选择更先进的协议而是根据应用场景选择最合适的通信方式。、