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 ...
随机推荐
- 福大软工 · BETA 版冲刺前准备(团队) [已完成]
写在前面 本次作业地址 林燊大哥 过去存在的问题 算法组 没有考虑到数据集不充足的情况.一开始我们将所有数据集按照8:1:1进行分割,分别分配给训练集.开发集和测试集.然鹅后来发现采集到的数据不够充足 ...
- list<?>转换成 对应的 class
项目中用到的,list转换成bean.因为查询出来的数据用list 泛型接收,要返回 实体对象.所以需要对应转换. 主要用到的技术:反射. 上代码: public static <T> L ...
- 编写高质量代码改善C#程序的157个建议——建议65:总是处理未捕获的异常
建议65:总是处理未捕获的异常 处理为捕获的异常是每个应用程序具备的基本功能,C#在APPDomain提供了UnhandledException事件来接收未捕获到的异常的通知.常见的应用如下: sta ...
- Why won't JRockit find my classes
This is the second post by Mattis, diving deep into JVM specifics. NoClassDefFoundErrors are a drag. ...
- VS中ashx文件关键字没有高亮标记的解决办法
VS --- 工具 --- 选项 --- 文本编辑器 --- 文件扩展名,只要在右侧添加 ashx ,选中MS-VS c# 保存后
- 【微服务架构】SpringCloud之Feign(五)
Feign简介 Feign 是一个声明web服务客户端,这便得编写web服务客户端更容易,使用Feign 创建一个接口并对它进行注解,它具有可插拔的注解支持包括Feign注解与JAX-RS注解,Fei ...
- 【Cocos2d-x】Cocos2d-x跨Android平台搭建之四:Win7 64位+ eclipse + cocos2dX
开始研究cocos2dx,mark一下这个的配置步骤 1 下载eclipse 2 下载android sdk,配置sdk路径,添加环境变量 3 安装adt 4 下载android ndk,配 ...
- 8、Semantic-UI之其他按钮样式
8.1 其他按钮样式定义 示例:定义其他按钮样式 定义圆形图标按钮样式 <div class="ui circular icon button"><i class ...
- linux安装redis及phpredis环境配置
下载安装包 cd /home/redis/tar wget http://redis.googlecode.com/files/redis-2.4.17.tar.gz tar zxvf redis-2 ...
- mysql连接com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
现象:客户端连接服务器端mysql是没问题的,所有都木有问题,应用程序配置也没问题,但是连接就抛异常: com.mysql.jdbc.exceptions.jdbc4.CommunicationsEx ...