本笔记源于B站up主湖科大教书匠。
视频链接如下:https://www.bilibili.com/video/BV1EJ411n7y7?spm_id_from=333.880.my_history.page.click.

TCP的流量控制的概念

举例说明

假设A 和 B是因特网上的两台主机,它们之间已经建立了 TCP 网络连接,

其中,A给B发送数据,而B对A进行流量控制。
这是主机A中待发送数据的字节序号:

假设主机A发送的每个TCP数据报文段可携带100字节数据,因此,图中的每个小格子表示100个字节数据的序号。

在主机A和B建立TCP连接时,B告诉A:“我的接收窗口为400”,因此,主机A将自己的发送窗口也设置为400,

这意味着主机A在未收到主机B发来的确认时,可将序号落入发送窗口中的全部数据发送出去。

接下来,举例说明主机B对主机A的流量控制。

图中,主机A将发送窗口内序号为1——100号字节的数据封装成一个TCP报文段发送出去,发送窗口内还有300字节可以发送。这里的seq是TCP报文段首部中的序号字段,取值为1表示TCP报文段数据载荷的第一个字节的序号是1。这里的DATA表示这是TCP数据报文段。

接着,主机A将发送窗口内序号为101——200的数据封装成一个TCP报文段发送出去,发送窗口内还有200字节可以发送。

主机A将发送窗口内序号为201——300的数据封装成一个TCP报文段发送出去,但该报文段在传输过程中丢失了,主机A发送窗口内还有100字节可以发送。

主机B对主机A所发送的201号以前的数据进行累计确认,并将该累计确认中将窗口字段的值调整为300,也就是对主机A进行流量控制。这里的大写ACK是TCP报文段首部中的标志位,取值为1表示这是一个TCP确认报文段,小写ack是TCP报文段首部中的确认号字段,取值为201表示序号201之前的数据已全部正确接收,现在希望收到序号201及其后续数据。rwnd是TCP报文段首部中的窗口字段,取值300表示自己的接收窗口大小为300。

主机A收到该累计确认后,将发送窗口向前移动,使已发送并收到确认的这些数据的序号移除发送窗口。由于主机B在该累计确认中将自己的接收窗口调整为了300,因此,主机A相应的将自己的发送窗口调整为300,

目前,主机A发送窗口内的序号为201——500,也就是主机A还可以发送这300字节。其中,201——300号字节是已发送的数据。若重传计时器超时,它们会被重传。301——400号字节以及401——500号字节是还未被发送的数据,可被分别封装在一个TCP报文段中发送。

主机A现在可将发送缓存中序号为1——200的字节数据全部删除了,因为已经收到了主机B对它们的累计确认。
主机A再将发送窗口内序号为301——400的数据封装成一个TCP报文段发送出去,

发送窗口内还有100字节可以发送。
主机A将发送窗口内序号为401——500的数据封装成一个TCP报文段发送出去,

至此,序号落在发送窗口内的数据已经被全部发送出去了。不能再发送新数据了。现在,发送窗口内序号201——300这100个字节数据的重传计时器超时了,

主机A将它们重新封装成一个TCP报文段发送出去,

暂时不能发送其他数据。主机B收到该重传的TCP报文段后,对主机A所发送的501号以前的数据进行累计确认。

并在该累计确认中将窗口字段的值调整为100,这是主机B对主机A进行的第二次流量控制。

主机 A 收到该累计确认后,将发送窗口向前滑动,使已发送并收到确认的这些数据的序号移出发送窗口,

由于主机B在该累计确认中将自己的接收窗口调整为了100。因此,主机A相应地将自己的发送窗口调整为100,

目前,主机A发送窗口内的序号为501——600。也就是主机A还可以发送这100字节。主机A现在可将发送缓存中序号201——500的字节数据全部删除了。

因为已经收到了主机B对它们的累计确认,主机A将发送窗口内序号为501——600的数据封装成一个TCP报文段发送出去,至此,也不能再发送新数据了。

序号落在发送窗口内的数据已经全部发送出去了,不能再发送新数据了。主机B对主机A所发送的601号以前的数据进行累计确认。

并在该累计确认中将窗口字段的值调整为0,这是主机B对主机A的第三次流量控制。主机A收到该累计确认后,将发送窗口向前滑动,使已发送并收到确认的这些数据的序号移出发送窗口。

由于主机B在该累计确认中将自己的接收窗口调整为0,因此,主机A相应地将自己的发送窗口调整为0。

目前,主机A不能再发送一般的TCP报文段了。主机A现在可将发送缓存中序号为501——600的字节数据全部删除了,

因为已经收到了主机B对它们的累计确认。

假设主机B向主机A发送了零窗口的报文段后不久,主机B的接收缓存中又有了一些存储空间,于是,主机B向主机A发送了接收窗口等于300的报文段。 然而,这个报文段在传输过程中丢失了。

而主机A一直等待主机B发送的非零窗口的通知,

而主机B也一直等待主机A发送的数据。

如果不采取措施,这种互相等待而形成的死锁局面将一直持续下去。为了解决这个问题,TCP为每一个连接设有一个持续计时器,只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器。若持续计时器超时,就发送一个零窗口探测报文,仅携带一字节的数据,而对方在确认这个探测报文段时,给出自己现在的接收窗口值。如果接收窗口仍然是0,那么收到这个报文段的一方就重新启动持续计时器。

如果接收窗口不是0,那么死锁的局面就可以被打破了。在本例子中,主机A收到零窗口通知时,就启动一个持续计时器,当持续计时器超时,主机A立刻发送一个仅携带一字节数据的零窗口探测报文段。

假设主机B此时的接收窗口又为0了,主机B就在确认这个零窗口探测报文段时,给出自己现在的接收窗口值为0,

主机A再次收到零窗口通知,就再次启动一个持续计时器,

当持续计时器超时,主机A立刻发送一个零窗口探测报文段,

假设主机B此时的接收缓存又有了一些存储空间,于是将自己的接收窗口调整为了300,主机B就在确认这个零窗口探测报文段时,给出自己现在的接收窗口值为300。

这样就打破了死锁的局面。

可能会有一下疑问:主机A所发送的零窗口探测报文段到达主机B时,如果主机B此时的接收窗口仍为0,那么主机B根本就无法接受该报文段,又怎么会针对该报文段给主机A发回确认呢?

实际上,TCP规定即使接收窗口为0,也必须接受零窗口探测报文段,确认报文段,以及携带有紧急数据的报文段。

请大家再来思考一下这个问题:如果零窗口探测报文段丢失了,

会出现怎样的问题呢?还能否打破死锁的局面吗?

答案是肯定的,因为零窗口探测报文段也有重传计时器,当重传计时器超时后,零窗口探测报文段会被重传。

最后,来做一个相关的练习题目。

答案: A


依据题意可知,主机甲的发送窗口为4000字节,主机甲向主机乙连续发送两个最大段,共2000字节。也就是将发送窗口内序号0——1999的字节数据发送出去。

主机乙给主机甲发送针对第一个段的确认,

并在该确认中给出自己当前的接收窗口大小为2000字节。
主机甲收到该确认后,将发送窗口向前滑动,

使得已发送并收到确认的第一个段的序号移出发送窗口。
由于主机乙在确认中给出的自己的接收窗口大小为2000字节,因此,主机甲相应的将自己的发送窗口调整为2000字节,

很显然,主机甲还可以向主机乙发送2000——2999号字节数据,共1000个字节。

计算机网络——TCP的流量控制相关推荐

  1. 计算机网络TCP拥塞控制窗口大小变化、重传、滑动窗口、流量控制等

    转载自:[计算机网络] - TCP 重传.滑动窗口.流量控制.拥塞控制_3000~3500的数据早已被接收了,因为 ack 都到了 4000 了,已经意味着 4000 之前__浮生_的博客-CSDN博 ...

  2. 计算机网络---TCP流量控制和拥塞控制

    (一) TCP 流量控制 TCP提供流量控制服务来消除发送方(发送速率太快)使接收方缓存区溢出的可能性,因此 流量控制是一个速度匹配服务(让发送方慢一点,要让接收方来得及接收,实现匹配发送方的发送速率 ...

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

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

  4. 计算机网络-TCP协议

    目录 1 概述 2 TCP的主要特点 3 TCP的连接 4 可靠传输的工作原理 4.1 停止等待协议 4.1.1 无差错情况 4.1.2 出现差错 4.2 自动重传请求ARQ 4.3 连续 ARQ 协 ...

  5. TCP协议-TCP的流量控制

    一.前言 一般来说,我们总是希望数据传输能尽可能快一点.但如果发送方把数据发送得过快的话,接收方就可能来不及接收,这就会造成数据的丢失.而TCP的流量控制机制就是为了解决这个端到端的数据传输速率问题. ...

  6. 计算机网络04之流量控制

    1. 滑动窗口与三个指针 1. 发送方窗口 三个指针 指针的含义 理解发送窗口的关键是掌握发送窗口三个指针代表的含义 (-inf,p1)已经确认的字节 [p1,p2) 已经发送,但还未确认的字节 [p ...

  7. 计算机网络-tcp连接常见异常

    计算机网络-tcp连接常见异常 目标端口未在监听:(操作系统参与) 解决:TCP的服务端实际上就是从网卡的寄存器中读取数据,然后进行解析.对于TCP自然会解析出目的端口这个关键信息,然后根据这个信息查 ...

  8. TCP/IP 流量控制

    TCP/IP流量控制         定义: 流量控制往往指的是点对点通信量的控制,是个端到端的问题.流量控制所要做的就是控制发送端发送数据的速率,以便使接收端来得及接受.利用滑动窗口机制可以很方便地 ...

  9. [计算机网络] - TCP 重传、滑动窗口、流量控制、拥塞控制

    转载自:https://blog.csdn.net/qq_34827674/article/details/105606205 1. 重传机制 1.1 超时重传 重传机制的其中一个方式,就是在发送数据 ...

最新文章

  1. 低速自动驾驶车辆的定位与建图
  2. 2.3.3 mysql 权限系统介绍
  3. windows和linux共同分区格式,Linux和Windows共存的模式下分区要小心
  4. spring框架中@PostConstruct的实现原理
  5. 【OS学习笔记】十三 保护模式一:全局描述符表(GDT)
  6. python randint什么分布_python随机数分布random测试
  7. 制作JD的手动和自动轮播图片板块
  8. 中国OpenJDK联盟发行特别版本的想法
  9. windows编程--网络编程学习--winsock编程(2)
  10. C++核心准则​Pro.bounds:边界安全群组
  11. WMS入库作业_核心业务流程
  12. Apache服务器下载
  13. 什么是V2X?如何通过V2X技术实现5G智慧交通?
  14. Android序列化之Parcel
  15. 【JVAV】—继承、多态、抽象类
  16. “WFCF”数据安全及隐私保护声明
  17. idc数据中心机房机柜收费标准
  18. python读书心得体会范文_读书心得体会范文10篇
  19. GB2312介绍及字库使用
  20. 蜂窝物联网通信技术的演进,有人竟然用“谈恋爱”的过程给讲明白了

热门文章

  1. 逆向工程第002篇:打造自己的仙剑奇侠
  2. comsol的燃料电池模块
  3. 捷径系列:Notification
  4. [笔经/面经]面试热问——你的职业规划是什么?
  5. 妙眠新零售系统开发 ——PHP程序源码搭建
  6. 为什么房价只涨不跌惊人内幕! [转]
  7. 【wpa_supplicant】从 assoc 动作窥伺supplicant与driver的交互(一)
  8. Downie 4.1.8 (4169) Mac 上视频下载工具
  9. Python Pandas条件筛选功能
  10. 伯恩斯新情绪疗法学习笔记