文章开始之前我们先抛出几个问题:

大家都说TCP比UDP可靠,是这样吗?如果真是这样,那么TCP的可靠性体现在哪儿或者说TCP的可靠性通过什么手段来保证?

UDP不如TCP可靠,那么为什么数据的传输不全采用TCP的方式,非要给UDP“分一杯羹”呢?

UDP

什么是UDP

UDP是一个简单的传输层控制协议,它是无连接的数据报协议。UDP不保证会到达最终目的地,同时它也不保证各个数据报的先后顺序跨网络后保持不变,不保证相同的数据报只到达一次,由此我们可以看出UDP的不可靠性。比起TCP协议的流式特性,每个UDP的数据报都有一个长度,当对端收到数据报,该长度也将传递给对端的应用进程。

每个UDP的首部前面会额外的增加一个伪首部,用作传输层数据报的差错校验。下面我们来剖析一下UDP,看一下它的首部构造:

应用

DNS域名解析。UDP是一个不可靠的协议,为什么域名解析这么重要的工作不交给TCP来完成而是UDP呢?我们知道TCP在真正开启数据请求之前要先建立连接,也就是我们常说的三次握手。当然可靠性的建立必然以牺牲其他利益为代价,对于TCP而言,这代价便是时间,UDP在时间的观念上便更胜一筹,当然完成域名解析一个数据报也足矣,所以使用UDP何乐而不为呢?所以有很多对可靠性没有严格要求而对时效性有极致追求的应用程序,传输层就用UDP来实现。

TCP

什么是TCP

TCP是一种面向连接的、可靠的、字节流协议。基于TCP的流式特性,所以这就要求用户自己来规划协议,划定消息边界。目前常见的方式有三种:

1.在每个要发的数据报之前附加一个数据长度,对端通过阻塞的方式进行读或写操作,直至数据结束。

2.设定一个特殊的结束标志,比如HTTP的结束标志"\r\n"。

3.每次发一个固定长度的数据报,对端也每次接收相等长度的数据内容。

同样的我们也来剖析一下TCP,看一下它的首部:

可靠性的保证

三次握手机制建立连接:首先客户端会先向服务器发送一个数据请求,也就是SYN分节,该数据包含了数据的初始序列号、接收窗口,拥塞窗口、接收缓存的大小以及相应网卡所支持的最大数据大小等信息,同样的服务器会针对客户端的请求做一个相应的回应。接着客户端会根据服务器的回应也相应的回复一个ack消息,至此连接成功建立。如图中描述:

流量控制:说流量控制之前我们先讲一讲信道利用率,我们先来看一张图片:

其中Td是数据报发送时间,Ta指数据报接收时间,RTT指数据报往返时间。

现在从客户端B到客户端A数据包经历的总时间T = Ta + Td + RTT;其中信道利用率可看似 = Td / T,图中我们可以看出大量的时间用来等数据包,这样是不划算的。有什么比较经济的做法呢?没错,我们可以通过不间断的发送数据报来进一步提高信道利用率,这就是所谓的滑动窗口技术。

我们来看一张接收窗口的结构图。

为了便于叙述,我们先将发送方规定为A,接收方为B。

和B一样,相应的A存在一个接收窗口大小,A的发送窗口大小由A的拥塞窗口大小和B的接收窗口大小共同决定(二者取其较小值),要说明的是发送窗口的大小受不同的网络环境和接收方的接收缓存大小的影响,也就是说TCP可以根据实际的网络情况通过动态调整各类窗口的大小来实现对流量的控制。

拥塞避免:拥塞的条件,对资源的需求总和 > 可用资源,相比于流量控制,拥塞现象是多台客户机不断发数据报导致路由器承受太多的负荷甚至死机而造成的网络拥堵。我们来看一张图:

我们可以看到没有拥塞控制的网络环境是非常危险的,甚至会导致网络环境彻底瘫痪。那么TCP是怎样避免这种现象呢?早些年TCP采用慢开始算法来规避这问题,现在更多的是采用快重传、快恢复的方法。至于这两种算法的具体介绍有兴趣的小伙伴可以自己学习,在此就不再赘述。

本文作者:小组17级成员---陈新

tcp为什么比udp慢_TCP和UDP那些事儿相关推荐

  1. 《无线通信与网络》tcp udp 对比_TCP与UDP究竟谁更可靠?

    TCP的优缺点 (1)TCP的优点: TCP的优点是:可靠.稳定. 它体现在TCP在传递数据之前,会有三次握手来建立连接: 在数据传递时,采用校验和.序列号.确认应答.超时重发.流量控制.拥塞控制: ...

  2. tcp协议和udp协议区别_TCP和UDP协议有什么区别?

    tcp协议和udp协议区别 TCP and UDP are two protocols that are part of the transport layer in a TCP/IP model o ...

  3. tcp序列号为什么是随机的_TCP与UDP

    Hofe's blog​hofe.work 里面有最新的版本 这篇介绍了下TCP与UDP面试题常考内容,并做了延伸,解释了原理. 面试题 tcp和udp的区别 tcp如何实现可靠性 怎么实现拥塞控制 ...

  4. tcp端口和udp端口范围_TCP和UDP端口列表,名称和使用频率

    tcp端口和udp端口范围 Nmap tool provides a popular ports list as a database where this list is also used in ...

  5. stm32 udp连续发送大量数据_TCP和UDP详解

    本篇文章主要是从运输层协议概述.UDP.TCP.可靠传输的工作原理.TCP首部格式.TCP可靠传输的实现.TCP流量控制.TCP的拥塞控制.TCP的连接管理这几个方面进行解析. 一.运输层协议概述 1 ...

  6. Java刷题知识点之TCP、UDP、TCP和UDP的区别、socket、TCP编程的客户端一般步骤、TCP编程的服务器端一般步骤、UDP编程的客户端一般步骤、UDP编程的服务器端一般步骤...

    TCP和UDP是两个传输层协议,广泛应用于网络中不同主机之间传输数据.对任何程序员来说,熟悉TCP和UDP的工作方式都是至关重要的.这就是为什么TCP和UDP是一个流行的Java编程面试问题. Jav ...

  7. TCP/IP详解--学习笔记(6)-UDP协议

    1.UDP简要介绍 UDP是传输层协议,和TCP协议处于一个分层中,但是与TCP协议不同,UDP协议并不提供超时重传,出错重传等功能,也就是说其是不可靠的协议. 2.UDP协议头 2.1.UDP端口号 ...

  8. 接收udp数据_聊聊UDP、TCP和实现一个简单的JAVA UDP小Demo

    最近真的比较忙,很久就想写了,可是一直苦于写点什么,今天脑袋灵光一闪,觉得自己再UDP方面还有些不了解的地方,所以要给自己扫盲. 好了,咱们进入今天的主题,先列一下提纲: 1. UDP是什么,UDP适 ...

  9. TCP/IP协议族之运输层协议 ( UDP, TCP)

    UDP  User Datagram Protocol    用户数据报协议 TCP  Transmission Control Protocol    传输控制协议 UDP:向应用层提供无连接的.不 ...

最新文章

  1. Flask学习之路(一)--初识flask
  2. 序列发生器组件 Example 程序
  3. 不知所“云”:小企业对云托管知之甚少
  4. node中npm安装模块的网络问题
  5. IE6,IE7,FF等浏览器不兼容原因及解决办法(转)
  6. Nginx在Windows下载安装启动与配置前后端请求代理
  7. css在线留言星号,使用CSS 给表单必选项添加星号的实现方法
  8. caffe框架下目标检测——faster-rcnn实战篇操作
  9. html仿微信滑动删除,使用Vue实现移动端左滑删除效果附源码
  10. [css] img标签是行内元素,为什么却能设置宽高
  11. linux resin 服务功能,linux服务之resin
  12. Hyper-V虚拟机安装及网卡无法找到,驱动无法安装解决办法
  13. 挑战摩尔定律极限,揭秘阿里云神龙的封神之路
  14. 自定义Repeater数据控件的一个页面显示效果
  15. mysql 创建表格time类型_第十九天MySQL数据库入门(mysql数据类型)
  16. MATLAB学习笔记(1):MATLAB简介
  17. 使用脚本自制 SSL 域名证书
  18. 库存成本计算方法简介
  19. 在使用QueryRunner时候的异常问题Wrong number of parameters:excepted 0,was given 10 Query
  20. 凤凰os进不去图形界面_凤凰os启动不了

热门文章

  1. 10、HTML的基本结构
  2. 过滤输入字符串中的危险字符
  3. Codeblocks配置EGE图形库
  4. 1073 Scientific Notation (20 分)【难度: 一般 / 知识点: 字符串 模拟】
  5. Dubbo负载均衡机制
  6. 【图解Java】这下可以真的弄懂Java IO了~
  7. 为什么魂斗罗只有 128 KB却可以实现那么长的剧情?
  8. 两个月的打卡活动圆满结束,今天公布兑奖详情
  9. 【struts2+hibernate+spring项目实战】java读写实现代码生成器(ssh)
  10. a标签的四种链接状态