UDP TCP应用场景
链接:https://www.zhihu.com/question/20060141/answer/26735814
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
- 你真的很在乎延迟,不能忍受重传,那么就用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 对数据准确性要求高,速度可以相对慢),发送或接收邮件(
UDP TCP应用场景的更多相关文章
- [TCP/IP] 传输层-TCP和UDP的使用场景
传输层-TCP和UDP应用场景 TCP(传输控制协议) 需要将要传输的文件分段传输,建立会话,可靠传输,流量控制 UDP(用户报文协议) 一个数据包就能完成数据通信,不需要建立会话,不分段,不用流量控 ...
- c# tcp udp 的使用场景
之前用tcp实现了一个案例(远程协助),后来我考虑用udp去实现它,于是又研究了下udp,我发现理论上udp可以做到,但是有一些问题不知道会不会有瓶颈 我参照网上写了一个简单的示例如下 服务端接收.发 ...
- [转]UDP/TCP穿越NAT的P2P通信方法研究(UDP/TCP打洞 Hole Punching)
[转]UDP/TCP穿越NAT的P2P通信方法研究(UDP/TCP打洞 Hole Punching) http://www.360doc.com/content/12/0428/17/6187784 ...
- 如何计算UDP/TCP检验和checksum
如何计算UDP/TCP检验和checksum 一.下面的图是一个UDP的检验和所需要用到的所有信息,包括三个部分:1.UDP伪首部2.UDP首部3.UDP的数据部分(切记不要遗漏该部分,否则就~吐血了 ...
- Python复习笔记(六)网络编程(udp/tcp)
一.网络-udp(用户数据报协议) 用户数据报协议 类似写信,不安全,数据有可能丢 1.1 ip地址 注意: IP地址127.0.0.1 ~ 127.255.255.255 用于回路测试 私有ip地址 ...
- 【Windows socket+IP+UDP+TCP】网络基础
Windows Socket+网络 Winsock是 Windows下套接字标准. Winsock 编程分为UDP[Windows socket + UDP],TCP[Wi ...
- 计算机网络基础笔记 运输层协议UDP/TCP
目录 UDP 首部结构 主要特点 TCP 首部结构 主要特点 TCP 可靠性实现 停止等待ARQ协议 连续ARQ协议&滑动窗口协议 拥塞控制 TCP 运输连接管理 连接建立:三次握手 连接释放 ...
- Python Socket Programming UDP/TCP
基于UDP/TCP的套接字编程demo UDP 客户端/服务器 一个简单的基于UDP协议的客户端和服务器应用的进程通信. 逻辑: 客户端会给服务器发送小写的英文字母,服务器接受后,把它转化成大写再返回 ...
- linux中c语言和php语言通信代码UDP&TCP
linux中c语言和php语言通信代码UDP&TCP http://blog.chinaunix.net/uid-24015214-id-2644174.html UDP方式通信 服务器端 ...
随机推荐
- mysql服务器辅助选项
查看控制台命令行前缀 : echo $PS1 ,例如输出 '[\u@\h \w]# 其中,\u是用户名,\h是主机名称: hostname -s 可以查看当前主机名, hostname 'z ...
- linux文件 编辑常用 inux手把手vi ---针对文件操作
命令语法 说明 使用频率(1:常用;2一般:3:偶尔) 1.VI编辑器的启动与退出 VI编辑器的启动与退出 vi file1 新建一个文本文件名为file1 :q 退出,如果对缓存去进行过修改,则提 ...
- Android市场官方的统计信息
做Android应用和游戏,避免不了的要了解市面上的各种android设备的信息,以最大程度的兼容更多的设备. Android市场会定期发布统计信息,包括SDK版本,屏幕大小和分辨率,OpenGL E ...
- ArcGIS Desktop 与 Excel(转)
来自:http://blog.csdn.net/kikitamoon/article/details/19043161 微软 OFFICE 产品中,Excel是很强大,并且平民化的表格制作工具.Arc ...
- focus on these tools
http://www.oschina.net/p/dubbo http://www.blogjava.net/hispark/archive/2008/12/01/243310.html http:/ ...
- five kinds of IPC methods
Shared memory permits processes to communicate by simply reading and writing to a specified memory l ...
- LLDB调试基本使用
在平时开发中,我们可能需要调试某些东西,比如查看给服务器发请求时传过去的参数,如果不适用LLDB的话我们用的最多的就是通过NSLog方式去打印,但现在我们可以精简这个步骤,那就是使用LLDB调试命令. ...
- 计算openlayers两点之间的距离
distanceTo: function(point) { var distance = 0.0; if ((this.x != null) && (this.y != null) & ...
- 有关line-height的见解
line-height:简单的说就是行高,是两行文字之间基线的距离.基线是指在英语的书写的4线3格中,从上往下数的第三条线 1.line-height与行内框盒子模型 所有内联元素的样式表现都与行内框 ...
- 页面动态加载js文件
function loadJS(url, onload) { var domscript = document.createElement('script'); domscript.src = url ...