UDP 的使用范围很窄,而且编程比 TCP 难多了:
- 你真的很在乎延迟,不能忍受重传,那么就用UDP,例如 NTP 协议。
- 你真的不在乎可靠性,丢一些包也不需要重传,那么就可以用 UDP。例子我想不出来。有人说音频或视频流可以用UDP,不过据我看来各大视频网站都用HTTP协议,而HTTP是基于TCP的。
- 你需要NAT穿透,那么不得不用UDP。
- 其他情况,一旦程序要自己做重传,你都是在用UDP模拟出蹩脚的TCP,还不如直接用TCP呢。
总之:when in doubt, use TCP.
另外,那些说TCP比UDP慢、效率低的,你拿UDP写个程序,把千兆网带宽打满(TCP等价的代码只有两行:客户端 while (true) { send(…); } 服务端 while (true) { recv(…); }。),且不说程序会有多复杂,先看看goodput到底是不是比TCP大、CPU使用率是不是比TCP低嘛。
— 完 —
本文作者:陈硕
【知乎日报】
你都看到这啦,快来点我嘛 Σ(▼□▼メ)
此问题还有 6 个回答,查看全部。
延伸阅读:
如何通俗地解释一下同属应用层的 TCP/UDP 协议,和 HTTP、FTP、SMTP 等所谓的“Application-layer Protocol”协议之间的区别?
TCP/IP中的“积压值”和“最大连接数”是什么关系?