查游戏延迟、看直播推流参数,总有人让选udp还是tcp,很多新手卡在第一个问题:udp是什么意思。它的全称是User Datagram Protocol,中文叫用户数据报协议,属于传输层。特点一句话:无连接、不保证送达,发出去就不管了,换来的是低延迟。

和tcp的核心区别

  • 连接方式:tcp通信前要三次握手建立连接,udp拿到对方IP和端口就直接发。
  • 可靠性:tcp有确认、重传、排序机制,数据不丢不乱;udp发完就完,丢了不补。
  • 开销:udp头部只有8个字节,tcp头部一般20字节起,udp更轻。
  • 数据形式:tcp是连续字节流,udp是一包一包独立发送,单包数据一般建议控制在1472字节以内,避免IP层分片。

哪些东西在用udp

DNS查询是最典型的,一次请求一次应答,没必要三次握手,默认走53端口。视频直播和语音通话也靠它,丢一两帧画面无感,等重传反而卡顿。联网游戏的位置同步同理,角色上一秒的坐标补发了也没意义。DHCP自动分地址走udp的67和68端口,TFTP传小文件走69端口,局域网的设备发现广播里也常见udp的身影。还有HTTP/3底层用的QUIC协议,就是基于udp实现的,相当于在udp上补出了可靠性和加密。

写程序时要注意的点

udp不保证顺序,后发的包可能先到,协议里得自己带序号。它也没有拥塞控制,发得太猛会加重丢包,一般要自己做限速。服务端用recvfrom收包,从数据报里直接拿到对方地址再回包,写法比tcp还省事。反过来,凡是丢不得的数据,比如文件下载、支付请求,老实用tcp。

回到开头:udp是什么意思可以记成一种「发了就算」的传输协议。打游戏看丢包率、看直播出现马赛克花屏,多数情况就是udp丢包在捣乱。选型判断也简单,实时性优先选udp,完整性优先选tcp,两者不是谁取代谁,是分工不同。