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. 关于fastjson的一些知识

    今天被问到了一些有关fastjson的知识,问了fastjson内部的实现机制,笔者只是用过fastjson这个包,还真没了解过它的机制等. 下去后搜索了一些有关fastjson的知识,希望能对自己和 ...

  2. p1429 平面最近点对(加强版)

    传送门 分析 我们可以枚举每一个点算它的最近点 估价函数应该分为3种情况计算: 大于max,小于min,位于min和max之间 代码 #include<iostream> #include ...

  3. [BAT] 以当前时间为名创建文件夹,将本地文件夹里的文件拷贝到远程共享目录,而且保证本地和Jenkins上运行都成功

    @echo off rem connect to szotpc801 net use * /del /yes NET USE X: \\10.66.234.95\d$ Autotest123 /use ...

  4. nhibernate 3.x新特性

    http://www.360doc.com/content/14/0226/17/9316347_355904008.shtml

  5. Native2Ascii文件转换 -- 待完善

    摘自:https://www.oschina.net/code/snippet_87799_1612 Native2Ascii文件转换 -- 待完善 package com.xxx.xxx.Util; ...

  6. Spring MVC 小计

    前端控制器是DispatcherServlet 应用控制器     1 处理器映射器(Handler Mapping)   进行处理器管理 2 视图解析器(View Resolver)         ...

  7. <<C++标准程序库>>中的STL简单学习笔记

    0. 内容为个人学习笔记, 仅供参考, 如有错漏, 欢迎指正! 1. STL中的所有组件都是由模板构成的, 所以其元素可以是任意型别的. 组件有: - 容器: 管理某类对象的集合. 不同的容器有各自的 ...

  8. Javascript基础编程の面向对象编程

    javascript是解释型的语言,在编译时和运行时之间没有明显区别,因此需要更动态的方法.javascript没有正式的类的概念,我们可以使用在运行时创建新的对象类型来替代,并且可以随时更改已有对象 ...

  9. GRPC .netcore

    GRPC是Google发布的一个开源.高性能.通用RPC(Remote Procedure Call)框架.提供跨语言.跨平台支持.以下以一个.NET Core Console项目演示如何使用GRPC ...

  10. python3.7.0安装

    如何安装Python的操作步骤: 1.第一步先去python的官方网站下载python的安装包 地址:https://www.python.org/downloads/ 根据自己的系统选择对应的安装包 ...