UDP 的使用范围很窄,并且编程比 TCP 难多了:
- 你真的很在意延迟,不能忍受重传,那么就用UDP,例如 NTP 协议。重传NTP消息纯属添乱。
- 你真的不在意可靠性,丢一些包也不须要重传,那么就能够用 UDP。例子我想不出来。有人说音频或视频流能够用UDP,不过据我看来各大视频网站都用HTTP协议,而HTTP是基于TCP的。
- 你须要NAT穿透,那么不得不用UDP。
- 其余状况,一旦程序要本身作重传,你都是在用UDP模拟出蹩脚的TCP,还不如直接用TCP呢。
总之:使用 UDP 须要有强大到无可置疑的理由,when in doubt, use TCP.
一些协议,出于历史缘由,受当时技术和网络条件限制,选择了基于UDP实现,其选择的理由如今极可能已经再也不成立了。所以“xxx协议用UDP”不是你如今写网络应用程序也该用UDP的理由,除非你自己就是在实现xxx协议。
另外,那些说TCP比UDP慢、效率低的,你拿UDP写个程序,把千兆网带宽打满(TCP等价的代码只有两行:客户端 while (true) { send(...); } 服务端 while (true) { recv(...); }。),且不说你的程序会有多复杂,先看看goodput究竟是不是比TCP大、CPU使用率是否是比TCP低嘛
两种协议都是传输层协议,为应用层提供信息载体。TCP协议是基于链接的可靠协议,有流量控制和差错控制,也正由于有可靠性的保证和控制手段,因此传输效率比UDP低;UDP协议是基于无链接的不可靠协议,没有控制手段,仅仅是将数据发送给对方,所以效率比TCP要高。编程
基于上述特性,不可贵到结论,TCP协议适用于对效率要求相对低,但对准确性要求相对高的场景下,或者是有一种链接概念的场景下;而UDP协议适用于对效率要求相对高,对准确性要求相对低的场景。网络
好了,如今回到你的问题,举几个应用的例子。TCP通常用于文件传输(FTP HTTP 对数据准确性要求高,速度能够相对慢),发送或接收邮件(网站