UDP 和 TCP 是传输层的两个核心协议,就像“快递员”和“邮局”的区别——一个追求速度,一个追求稳妥。
1. 连接性:是否需要“先打电话”
TCP(传输控制协议):必须先建立连接,像打电话一样。
发送数据前,双方要先“握手”确认对方在线(三次握手),传输结束后还要“挥手”断开连接(四次挥手)。
例子:你要给朋友寄重要文件,得先打电话确认他在家(建立连接),送完文件再确认收货(断开连接)。UDP(用户数据报协议):无需建立连接,像发短信一样。
直接把数据打包成“包裹”(数据报)发出去,不管对方是否在线、能不能收到。
例子:你在群里发一条“大家集合”,不用挨个确认每个人是否看到,发了就完事。
2. 可靠性:是否“保价运输”
TCP:可靠传输,像“保价快递”。
它保证数据不丢失、不重复、按顺序到达。如果中途丢包,TCP 会自动重传;如果接收方没准备好,发送方会等待(流量控制);如果网络拥堵,TCP 会减速(拥塞控制)。
例子:你用微信发一段语音,微信底层用 TCP,确保你发的每一段语音对方都能完整听到,不会漏一段或乱序。UDP:不可靠传输,像“普通平信”。
发出去的数据包可能丢、可能乱序,UDP 不负责找回或排序。它只管“尽力而为”地把数据送出去,不关心结果。
例子:你看视频直播时,偶尔卡顿或花屏,就是因为直播常用 UDP——丢几帧画面影响不大,但延迟太高会影响体验,所以直播协议会在 UDP 上加“补救”(比如前向纠错)。
3. 传输方式:是“流水”还是“包裹”
TCP:流式传输,像“水管流水”。
数据没有明确的“边界”,发送方和接收方按“字节流”处理。比如你发“你好”和“世界”,接收方可能收到“你好世界”(合并了),需要自己按逻辑拆分。UDP:数据报传输,像“一个个包裹”。
每个 UDP 包(数据报)是独立的,有明确的长度和标识。接收方收到后,能直接知道这是哪个包、多长,不需要额外处理。
4. 头部开销:包裹的“包装费”
TCP:头部大(至少 20 字节),像“精装礼盒”。
为了实现可靠传输,TCP 头部需要包含序号、确认号、窗口大小等信息,额外占用带宽。UDP:头部小(仅 8 字节),像“信封”。
只有源端口、目的端口、长度、校验和,没有复杂的控制信息,适合轻量传输。
5. 适用场景:什么时候用谁?
TCP 适合:需要可靠、有序的场景,比如:
网页浏览(HTTP 基于 TCP);
文件下载(FTP 基于 TCP);
邮件发送(SMTP 基于 TCP);
你的运维监控系统中,客户端上报数据(用 HTTP 即 TCP),因为需要确保数据完整到达服务端。
UDP 适合:需要实时性、低延迟,允许少量丢包的场景,比如:
视频通话(丢几帧画面影响小,但延迟高会卡);
在线游戏(移动指令延迟高会“操作跟手”);
DNS 查询(域名解析请求小,丢包可重试);
物联网传感器(比如温度上报,偶尔丢一个数据不影响整体趋势)。
总结对比表
回到运维监控系统:
客户端上报数据用 HTTP(基于 TCP),因为需要确保每一条监控数据(比如 CPU 使用率)完整到达服务端,不能丢。而如果你们需要实时展示某些高频指标(比如每秒 100 次的心跳),可能会用 UDP——但需要在应用层自己处理丢包(比如丢包后用前一个值填充),因为 UDP 不保证可靠。
简单说:需要稳妥选 TCP,需要速度选 UDP。