首页 行业资讯 宠物日常 宠物养护 宠物健康 宠物故事

UDP 和 TCP 的 socket 分别一般用在什么地方

发布网友 发布时间:2022-04-20 08:01

我来回答

3个回答

热心网友 时间:2023-07-17 19:22

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低嘛。

热心网友 时间:2023-07-17 19:22

在绝大部分场景都开始直接选择TCP的时候,要提一个非常窄的UDP应用场景:翻嫱
从需求上说,翻嫱的业务场景对协议有如下要求:
1. 不被嫱认为是敏感流量或者即使被认为是敏感流量也不能被重置
2. 协议够轻,载荷比高(像Tor这种其实非常不适合做此用途)
UDP本身无连接,所以即使被认为是敏感流量,也无法被重置;
UDP作为协议“外壳”,里面往往搭载的是基于TCP的协议(比如http),TCP自己有检验和重传机制,不需要外壳操心。

热心网友 时间:2023-07-17 19:23

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com