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的更多相关文章

  1. 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服务器传输超文 ...

  2. socket、tcp/ip协议、udp协议

    socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. socket起源于Un ...

  3. TCP/IP协议(二)tcp/ip基础知识

    今天凌晨时候看书,突然想到一个问题:怎样做到持续学习?然后得出这样一个结论:放弃不必要的社交,控制欲望,克服懒惰... 然后又有了新的问题:学习效率时高时低,状态不好怎么解决?这也是我最近在思考的问题 ...

  4. TCP/IP网络编程之基于TCP的服务端/客户端(一)

    理解TCP和UDP 根据数据传输方式的不同,基于网络协议的套接字一般分为TCP套接字和UDP套接字.因为TCP套接字是面向连接的,因此又称为基于流(stream)的套接字.TCP是Transmissi ...

  5. TCP/IP网络编程之基于TCP的服务端/客户端(二)

    回声客户端问题 上一章TCP/IP网络编程之基于TCP的服务端/客户端(一)中,我们解释了回声客户端所存在的问题,那么单单是客户端的问题,服务端没有任何问题?是的,服务端没有问题,现在先让我们回顾下服 ...

  6. TCP/IP协议与UDP协议的区别

    TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接.一个TCP连接必须要经过三次“对话”才能建立起来, ...

  7. TCP/IP 协议栈 -- 编写UDP客户端注意细节

    上节我们说到了TCP 客户端编写的主要细节, 本节我们来看一下UDP client的几种情况,测试代码如下: server: #include <stdio.h> #include < ...

  8. TCP/IP协议、UDP协议、 Http协议

    开放式系统互联通信参考模型(Open System Interconnection Reference Model,缩写为 OSI),简称为OSI模型(OSI model),一种概念模型,由国际标准化 ...

  9. OSI七层和TCP/IP四层的关系、TCP与UDP、HTTP、Socket

    HTTP(应用层协议):超文本传输协议,HTTP协议是建立在TCP协议之上的一种应用. HTTP协议详细解释 2Http详解 TCP(面向连接的传输层协议):transmission control ...

随机推荐

  1. spring mabatis springmvc 看过

    .Spring中AOP的应用场景.Aop原理.好处? 答:AOP--Aspect Oriented Programming面向切面编程:用来封装横切关注点,具体可以在下面的场景中使用: Authent ...

  2. String.getBytes()[转]

    在Java中,String的getBytes()方法是得到一个操作系统默认的编码格式的字节数组.这个表示在不通OS下,返回的东西不一样! String.getBytes(String decode)方 ...

  3. 使用第三方库连接MySql数据库:PyMysql库和Pandas库

    使用PyMysql库和Pandas库链接Mysql 1 系统环境 系统版本:Win10 64位 Mysql版本: 8.0.15 MySQL Community Server - GPL pymysql ...

  4. LoadRunner出现error问题及解决方法总结

    一.Step download timeout (120 seconds) 这是一个经常会遇到的问题,解决得办法走以下步骤:1.   修改run time setting中的请求超时时间,增加到600 ...

  5. STL中 set 和 multiset

    1. 所在头文件: <set>, 命名空间: std ; 声明如下: namespace std{ template <class T, class Compare = less&l ...

  6. 有一个5ml 的瓶子 和3ml 的瓶子 和 很多水 现在 要取出4ml的水 请写出编程 多种解法

    //TODO public class demo { public static void main(String[] args) { demo.ss(); demo.sss(); } public ...

  7. 五)使用 easyui-tabs 遭遇错误 Unexpected Exception caught setting '_' on

    十月 10, 2015 3:08:35 下午 com.opensymphony.xwork2.interceptor.ParametersInterceptor error 严重: Developer ...

  8. arcgis android 10.2.5开发环境配置

    android里要添加arcgis android 的支持,其实本质是添加了jar包,so库,清单文件里申请了权限而已. 插件是为了方便创建arcgis android工程,然后并没有什么卵用. ar ...

  9. [SIP00]SIP 概念总结

    SIP ---------------------------   Session Initiation Protocol ---------------------------   create, ...

  10. C语言编程学习:写的秒速计算四则混合运算项目

    C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...