首页/网络/协议速查/TCP 与 UDP 对比与选型
TCP 与 UDP54 条

TCP 与 UDP 对比与选型

要不要自己实现可靠性,是选型核心问题:需要有序可靠的字节流选 TCP;要低延迟、可容忍丢包或自带重试选 UDP。

协议速查网络更新于 2026-10-13

两者到底差在哪

核心差别是可靠性由谁负责:TCP 在内核里完成握手、确认重传、有序交付与拥塞控制,对应用暴露的是一条字节流;UDP 只做数据报投递,重传、排序、限速都由应用自己决定。所以选型的真正问题是「你要字节流还是报文、愿不愿意自己承担可靠性」。

基本信息

规范RFC 9293(TCP)、RFC 768(UDP)
头部开销TCP 20–60 字节;UDP 固定 8 字节
连接状态TCP 三次握手/四次挥手;UDP 无连接
数据边界TCP 是字节流,UDP 保留报文边界
拥塞控制TCP 内核内置;UDP 默认没有
平台差异Linux/Windows/网络设备行为一致,仅内核参数与默认值不同

逐项对比

对比项TCPUDP
可靠性确认 + 重传 + 去重尽力而为,可能丢包乱序
有序性保证按序交付不保证顺序
传输效率首部大、有握手与慢启动开销首部小、无连接建立成本
多播/广播不支持支持
典型协议HTTP、SSH、MySQL、SMTPDNS、DHCP、QUIC、音视频、游戏

什么时候选 UDP

  • 延迟敏感且丢包可容忍:实时语音、视频会议、游戏状态同步
  • 极短的请求-应答且应用自己会重试:DNS 查询、SNMP 轮询
  • 要在用户态自建可靠层与拥塞控制:QUIC、自研传输协议
  • 需要广播或组播:DHCP 发现、mDNS 这类 TCP 无法表达的场景
  • 高频小消息、允许少量丢失:指标上报、日志直推

两种协议怎么测

两种协议怎么测
nc -vz -w 3 10.0.0.9 53          # TCP 探测:能明确得到 refused 或 succeeded
nc -vzu -w 3 10.0.0.9 53         # UDP 探测:无响应只说明没收到回复,参考价值低
tcping 10.0.0.9 53               # 连 TCP 也能看出时延与丢包
ss -lntup                        # 同时看本机 TCP/UDP 监听
curl -s --http3 -o /dev/null -w '%{http_version}\n' https://example.com   # 对端支持 HTTP/3 时才走得通
「UDP 更快」是常见误解:QUIC 在 UDP 之上重建了可靠性、拥塞控制与 TLS 1.3,收益来自多路复用和无队头阻塞,而不是「不做重传」。

选型判断顺序

  • 先问丢一个包能否接受:不能,就选 TCP 或自己在 UDP 上实现重传与排序
  • 再问是否真的需要广播、组播或极短的握手延迟:需要,才轮到 UDP
  • 接着问中间设备是否友好:企业网、云安全组与 CDN 对 UDP 的放行通常更保守
  • 最后问运维成本:UDP 没有连接状态,监控、限流与排障都要单独造轮子

易错点

  • 跨公网的 UDP 大包常被中间设备直接丢弃,单包应控制在 1200 字节左右留出封装余量
  • 防火墙与 NAT 对 UDP 没有连接状态,映射超时后静默丢包,长连接必须有应用层心跳保活
  • 把 TCP 上的应用逻辑照搬到 UDP 却不实现重传与拥塞控制,一旦丢包就雪崩式重发加剧拥塞
  • 用单次 UDP 扫描判断端口是否开放会误判:没有握手,没有回复不等于端口关闭

数据来源与参考

  • RFC 768
  • RFC 9293
  • RFC 9000(QUIC)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌