TCP/IP——何时用UDP代替TCP

UDP和TCP都有其自身的特点,不同的应用场景和要求需要使用不同的协议来传输,那么何时我们可以用UDP代替TCP呢。
UDP 的优点
- UDP支持广播和多播,事实上如果应用程序使用广播或多播,那就必须使用UDP
- UDP没有连接建立和拆除,UDP只需要两个分组就能交换一个请求和一个应答(这里假设两者的长度都小于两端系统之间的最小MTU)。TCP却需要大约20个分组,这里假设为每次请求—应答交换建立一个新的TCP连接
TCP 的优点
- 正确确认
- 丢失分包重传
- 重复分组检测
- 乱序排序
- 窗口流量控制
- 慢启动和拥塞控制
TCP与UDP基本区别
- 基于连接与无连接
- TCP要求系统资源较多,UDP较少
- UDP程序结构较简单
- 流模式(TCP)与数据报模式(UDP)
- TCP保证数据正确性,UDP可能丢包
- TCP保证数据顺序,UDP不保证
协议使用建议
广播或多播必须使用UDP
任何形式的错我控制必须加到客户和服务器程序之中,一般应用系统往往是在可以接受一定量的错误前提下使用广播和多播
简单的请求—应答可以使用UDP
错误检测功能必须加到应用程序中,一般错误检测内容至少涉及确认、超时和重传。
海量数据传输不应使用UDP
例如文件传输,这要求不光有错误检测,还要有窗口流量控制、拥塞避免和慢启动这些特性,这无异于在应用中再造TCP。
这些规则存在一些列外
- 如TFTP使用UDP来传输文件,TFTP选择使用UDP的原因在于,在系统自举引导代码中使用UDP比使用TCP易于实现,而且TFTP只用于局域网上,而不是跨广域网传输海量数据。
- NFS也是使用UDP来传输海量数据,这样的选择部分是出于历史原因的,在20世纪80年代中期设计NFS时,UDP的实现要比TCP的快,而且NFS仅仅用于局域网,然而NFS从20世纪90年代早期开始被设计成支持TCP,大多数厂商现今已改为同时支持UDP和TCP上的NFS服务。同样的原因导致DCE远程过程调用(
remote procedure call, RPC)的前身软件包(Apollo NCS软件包)也选择UDP而不是TCP,不过如今的实现是同时支持UDP和TCP的了。
总结
现如今良好的TCP实现能够充分发挥网络的带宽容量,而且越来越少的应用系统设计人员愿意在自己的UDP应用中再造TCP,所以相比TCP而言,UDP的用途在递减,但在多媒体应用中UDP还将较长时间保持较多的应用。
TCP/IP——何时用UDP代替TCP的更多相关文章
- C# HTTP1.0 1.1 2.0与HTTPS 、TCP/IP协议的UDP与TCP、 Socket介绍与WebSocket
一.HTTP1.0 1.1 2.0和HTTPS 1.HTTP协议是什么? HTTP协议是超文本传输协议的缩写,英文是Hyper Text Transfer Protocol.它是从WEB服务器传输超文 ...
- socket、tcp/ip协议、udp协议
socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. socket起源于Un ...
- TCP/IP协议(二)tcp/ip基础知识
今天凌晨时候看书,突然想到一个问题:怎样做到持续学习?然后得出这样一个结论:放弃不必要的社交,控制欲望,克服懒惰... 然后又有了新的问题:学习效率时高时低,状态不好怎么解决?这也是我最近在思考的问题 ...
- TCP/IP网络编程之基于TCP的服务端/客户端(一)
理解TCP和UDP 根据数据传输方式的不同,基于网络协议的套接字一般分为TCP套接字和UDP套接字.因为TCP套接字是面向连接的,因此又称为基于流(stream)的套接字.TCP是Transmissi ...
- TCP/IP网络编程之基于TCP的服务端/客户端(二)
回声客户端问题 上一章TCP/IP网络编程之基于TCP的服务端/客户端(一)中,我们解释了回声客户端所存在的问题,那么单单是客户端的问题,服务端没有任何问题?是的,服务端没有问题,现在先让我们回顾下服 ...
- TCP/IP协议与UDP协议的区别
TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接.一个TCP连接必须要经过三次“对话”才能建立起来, ...
- TCP/IP 协议栈 -- 编写UDP客户端注意细节
上节我们说到了TCP 客户端编写的主要细节, 本节我们来看一下UDP client的几种情况,测试代码如下: server: #include <stdio.h> #include < ...
- TCP/IP协议、UDP协议、 Http协议
开放式系统互联通信参考模型(Open System Interconnection Reference Model,缩写为 OSI),简称为OSI模型(OSI model),一种概念模型,由国际标准化 ...
- OSI七层和TCP/IP四层的关系、TCP与UDP、HTTP、Socket
HTTP(应用层协议):超文本传输协议,HTTP协议是建立在TCP协议之上的一种应用. HTTP协议详细解释 2Http详解 TCP(面向连接的传输层协议):transmission control ...
随机推荐
- (转).Net有哪些大型项目、大型网站的案例?
[分享].Net有哪些大型项目.大型网站的案例? .Net开发的部分知名网站案例:http://www.godaddy.com 全球最大域名注册商http://www.ips.com 环迅支付 ...
- Spring中通配符(转)
一.加载路径中的通配符:?(匹配单个字符),*(匹配除/外任意字符).**/(匹配任意多个目录) classpath:app-Beans.xml 说明:无通配符,必须完全匹配 classpath: ...
- Thread.sleep原理
我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时间.那么你有没有正确的理解这个函数的用法呢?思考下面这两个问题: 假设现在是 2008-4-7 12:00:00.000,如果我调用 ...
- 面向对象的JavaScript-005-Function.prototype.call()的3种作用
1. // call的3种作用 // 1.Using call to chain constructors for an object function Product(name, price) { ...
- layer使用注意事项
ajax一定要设置为异步
- linux centOS下怎么配置web服务器
| 浏览:4503 | 更新:2011-12-07 17:45 1 2 3 分步阅读 下是我在配置web服务时作的一些记录,高手飘开或者看了指点一下,不胜感激,第一次配置,很多细节需要自己优化.适合环 ...
- 去除SVN图标并解除svn控制 (转)
今天一不小心把F盘弄成了SVN管理项目,结果如图: 看到这个,当场晕菜,经过不懈的努力终于找到一种方法,如下: 右键 ===>TortoiseSVN ===>Settings 点击确 ...
- Android 修改 TextView 的全局默认颜色。
如果你的应用中大多数TextView的颜色是红色, 或者其他颜色, 你是为每一个TextView都设置一次颜色, 还是有其他更好的办法, 这里教你怎么修改TextView的默认颜色. 当然我们Text ...
- 优秀前端工程师必备: (总结) 清除原生ios按钮样式
写移动端的web开发时, 需要清除IOS本身的各种样式: 1.消除ios按钮原生样式, 给按钮加自定义样式: input[type="button"], input[type=&q ...
- 编写高质量代码改善C#程序的157个建议——建议63:避免“吃掉”异常
建议63:避免“吃掉”异常 嵌套异常是很危险的行为,一不小心就就会将异常堆栈信息,也就是真正的Bug出处隐藏起来.这还不是最严重的,最严重的就是“吃掉”异常,即捕获,然后不向上层throw. 避免“吃 ...