**

一、流量控制

**

1.1 什么是流量控制

Sender won’t overflow receiver’s buffer by transmitting too much, too fast. (防止发送方发的太快,耗尽接收方的资源,从而使接收方来不及处理)

1.2 流量控制的一些知识点

(1)接收端抑制发送端的依据:接收端缓冲区的大小
(2)流量控制的目标是接收端,是怕接收端来不及处理
(3)流量控制的机制是丢包

1.3 怎么样实现流量控制?

使用滑动窗口

1.4 滑动窗口

滑动窗口是什么?

滑动窗口是类似于一个窗口一样的东西,是用来告诉发送端可以发送数据的大小或者说是窗口标记了接收端缓冲区的大小,这样就可以实现批量发送数据

为什么会出现滑动窗口

在确认应答策略中,对每一个发送的数据段,都要给一个ACK确认应答,收到ACK后再发送下一个数据段,这样做有一个比较大的缺点,就是性能比较差,尤其是数据往返的时间长的时候

使用滑动窗口,就可以一次发送多条数据,从而就提高了性能

滑动窗口原理

TCP中采用滑动窗口来进行流量控制,滑动窗口的大小意味着接收方还有多大的缓冲区可以用于接收数据。发送方可以通过滑动窗口的大小来确定应该发送多少字节的数据。当滑动窗口为0时,发送方一般不能再发送数据报。

滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。

(1)接收端将自己可以接收的缓冲区大小放入TCP首部中的“窗口大小”字段,通过ACK来通知发送端
(2)窗口大小字段越大,说明网络的吞吐率越高
(3)窗口大小指的是无需等待确认应答而可以继续发送数据的最大值,即就是说不需要接收端的应答,可以一次连续的发送数据
(4)操作系统内核为了维护滑动窗口,需要开辟发送缓冲区,来记录当前还有那些数据没有应答,只有确认应答过的数据,才能从缓冲区删掉

ps:发送缓冲区如果太大,就会有空间开销

(5)接收端一旦发现自己的缓冲区快满了,就会将窗口大小设置成一个更小的值通知给发送端,发送端收到这个值后,就会减慢自己的发送速度
(6)如果接收端发现自己的缓冲区满了,就会将窗口的大小设置为0,此时发送端将不再发送数据,但是需要定期发送一个窗口探测数据段,使接收端把窗口大小告诉发送端
ps:在TCP的首部中,有一个16为窗口字段,此字段就是用来存放窗口大小信息的

滑动窗口的优点

可以高效可靠的发送大量的数据

1.1 超时重传

TCP服务必须能够重传超时时间内未收到确认报文段的TCP报文段。TCP为每个TCP模块都维护了一个重传定时器,定时器在第一次发送TCP报文段时启动,如果超时时间内未收到接收方的确认号报文段,TCP模块将重传TCP报文段并重置定时器。 至于下次重传的超时时间如何选择,以及最多重传几次,这是TCP的重传策略。 与TCP超时重连的策略相似。

流量控制的处理过程:

TCP连接阶段,双方协商窗口尺寸,同时接收方预留数据缓存区;

发送方根据协商的结果,发送符合窗口尺寸的数据字节流,并等待对方的确认;

发送方根据确认信息,改变窗口的尺寸,增加或者减少发送未得到确认的字节流中的字节数。调整过程包括:如果出现发送拥塞,发送窗口缩小为原来的一半,同时将超时重传的时间间隔扩大一倍。

**

2、拥塞控制

**

2.1 什么是拥塞控制

too many sources sending too much data too fast for network to handle
防止发送方发的太快,使得网络来不及处理,从而导致网络拥塞

流量控制虽然可以高效可靠的传送大量的数据,但是如果在刚开始阶段就发送大量的数据,可能会导致网络拥堵,因为网络上的计算机太多了。
TCP模块为了防止过多的数据注入网络,使网络中的路由器或链路不致于过载。以此提高网络利用率,降低丢包率,并抱证网络资源对每条数据流的公平性而采取的控制手段。

2.2 拥塞控制的实现

拥塞控制包含四部分内容:慢启动、拥塞避免、快速重传、快速恢复。

  • 慢启动: 网络传输刚开始时,并不知道网络的实际情况,所以采取一种试探的方式控制数据的发送速率。慢启动阶段,数据的发送速率以指数方式增长,即就是拥塞窗口的增长,每次都是收到确认报文段数量的2倍。可以看出慢启动并不慢,拥塞窗口增长的速度很快。所以,为其设置了一个慢启动门限,当达到门限时,就进入到拥塞避免阶段。

  • 拥塞避免: 当拥塞窗口的大小采用慢启动方式增长到慢启动门限时,就进入拥塞避免阶段,拥塞避免阶段不再以指数形式增长拥塞窗口,而是每经过一个往返时间RTT就将发送方的拥塞窗口+1, 使其增长速度减缓。按照线性方式增长。如果发生网络拥塞,比如丢包时,就将慢启动门限设为原来的一半,然后将拥塞窗口设置为1,开始执行慢启动算法。(较低的起点,指数级增长)。

  • 快速重传: 假设发送方发送的报文段分别为: M1,M2,M3,M4,M5,M6 , 当接收方收到M1和M2后,M3报文段丢失,接着收到的M4,M5,M6都不做处理,而是没接收到一个报文段就对M2重复确认,发送方接收到重复的三次确认报文段,就对其后的报文段进行重新发送,而不需要等待超时时间到达。当快速重传后,立即进入到快速恢复阶段。

  • 快速恢复:将慢启动门限设置为原来的一半,然后将拥塞窗口设置为现在的慢启动门限值,不再执行慢启动算法,而是直接进入拥塞避免阶段。使发送窗口成线性方式增大。


**

3、流量控制&拥塞控制的联系与区别

**

3.1 相同点

(1)现象都是丢包;
(2)实现机制都是让发送方发的慢一点,发的少一点

3.2 不同点

(1)丢包位置不同 流量控制丢包位置是在接收端上 拥塞控制丢包位置是在路由器上
(2)作用的对象不同 流量控制的对象是接收方,怕发送方发的太快,使得接收方来不及处理 拥塞控制的对象是网络,怕发送方发的太快,造成网络拥塞,使得网络来不及处理

3.3 联系

  • 拥塞控制
    拥塞控制通常表示的是一个全局性的过程,它会涉及到网络中所有的主机、
    所有的路由器和降低网络传输性能的所有因素

  • 流量控制
    流量控制发生在发送端和接收端之间,只是点到点之间的控制

TCP协议——流量控制和拥塞控制相关推荐

  1. TCP协议--流量控制,拥塞控制,MSS

    MSS MSS(Maximum segment size): 最大报文段长度.MSS应用于TCP协议中,代表的是单个TCP报文的可传输的最大数据长度.MSS的大小,和通信中的另一个参数MTU息息相关. ...

  2. 传输层TCP(流量控制和拥塞控制)

    转载自:https://blog.csdn.net/zgege/article/details/80445324 内容 关键字 流量控制 窗口大小,窗口扩大因子M,机理,窗口探测数据段 拥塞控制 拥塞 ...

  3. 计算机网络 | 谈谈TCP的流量控制与拥塞控制

    文章目录 一.TCP的流量控制 1.利用滑动窗口实现流量控制[⭐⭐⭐] 2.如何破解[死锁]局面❓ 二.TCP的拥塞控制 1.拥塞控制的一般原理 ① 解决网络拥塞的误区 ② 拥塞控制与流量控制的关系[ ...

  4. 简述TCP的流量控制与拥塞控制

    1. TCP流量控制  流量控制就是让发送方的发送速率不要太快,要让接收方来的及接收. 原理是通过确认报文中窗口字段来控制发送方的发送速率,发送方的发送窗口大小不能超过接收方给出窗口大小. 考虑一种特 ...

  5. 快速了解TCP的流量控制与拥塞控制

    有关TCP你不能不知道的三次握手和四次挥手问题,点我跳转 流量控制 1. 滑动窗口 数据的传送过程中很可能出现接收方来不及接收的情况,这时就需要对发送方进行控制以免数据丢失.利用滑动窗口机制可以很方便 ...

  6. 计算机网络 拥塞控制和流量控制,简述TCP的流量控制与拥塞控制

    1. TCP流量控制 流量控制就是让发送方的发送速率不要太快,要让接收方来的及接收. 原理是通过确认报文中窗口字段来控制发送方的发送速率,发送方的发送窗口大小不能超过接收方给出窗口大小. 考虑一种特殊 ...

  7. TCP协议的流量控制

    我们知道TCP有流量控制和拥塞控制的功能.首先两者是有区别的:流量控制只与发送者和接收者之间的端-端通信有关,也就是它是一个局部的控制:但是拥塞控制是一个全局的问题,涉及所有主机.路由器及路由器的存储 ...

  8. 关于TCP协议的大部分,面试常问的几点都在这理里了

    精选30+云产品,助力企业轻松上云!>>> 点击蓝色"大数据每日哔哔"关注我 加个"星标",第一时间获取大数据架构,实战经验 由于面试中经常会 ...

  9. 第二篇:可靠连接,TCP协议全解析

    文章目录 一.前言 二.TCP报文结构 三.TCP连接(重点:三次握手和四次挥手) 3.1 三次握手建立连接 3.2 四次挥手释放连接 3.3 wireshark演示 四.TCP可靠连接 4.1 序号 ...

最新文章

  1. vs怎么编译php文件,vscode怎么初始编译
  2. calibrate_cameras算子说明
  3. 红帽Openshift:入门–云中的Java EE6
  4. mimakatz用法_两步完成利用procdump64+mimikatz获取win用户密码
  5. 数据源管理 | PostgreSQL环境整合,JSON类型应用
  6. Windows 7+Ubuntu 16.04 双系统安装
  7. html增删改查按钮控件,HTML DOM节点的增删改查
  8. Ubuntu 13.10 用sogou拼音替换ibus-转
  9. 的采样方式_DR803M4水质自动采样器(岸边站自动排空型)
  10. php课后题,知到PHP语言程序设计课后习题答案
  11. 【动态规划区间dp】蓝桥2019:最优包含
  12. 《Oracle高性能SQL引擎剖析:SQL优化与调优机制详解》一第一篇 执行计划
  13. python基础 函数
  14. AJAX 事件与事件对象
  15. 利用TP-Link+花生壳建立属于自己的网站
  16. 越折腾越好用的 3 款开源 APP
  17. Invalid bound statement (not found): com.java.mapper.UserMapper.queryAll错误解决方案
  18. Dialog dismiss 和 cancel的区别
  19. 高仿富途牛牛-组件化-界面美化
  20. 手把手教你用Python画直方图

热门文章

  1. lisp画靶子 visual_基于VisualLISP的AutoCAD绘图命令的二次开发_沈良翼
  2. 史上最神奇的公式,竟然藏着这么多秘密!
  3. 面试算法工程师时,我居然被化学专业转行的老哥血虐了
  4. 74款app源码,值得你拥有的干货
  5. mysql enum_MySQL数据库中关于ENUM类型的详细解释
  6. python3 2.00gb怎么去掉单位_最值得期待的Python 3.9的新功能
  7. matlab 抽样判决代码,matlab抽样判决器
  8. mat opencv 修改roi_设置图片ROI(OpenCV学习笔记之二)
  9. mysql快照过久_Oracle 快照(snapshot) 管理
  10. gesturedetector.java_android使用gesturedetector手势识别示例分享