计算机网络——TCP的流量控制
本笔记源于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的流量控制相关推荐
- 计算机网络TCP拥塞控制窗口大小变化、重传、滑动窗口、流量控制等
转载自:[计算机网络] - TCP 重传.滑动窗口.流量控制.拥塞控制_3000~3500的数据早已被接收了,因为 ack 都到了 4000 了,已经意味着 4000 之前__浮生_的博客-CSDN博 ...
- 计算机网络---TCP流量控制和拥塞控制
(一) TCP 流量控制 TCP提供流量控制服务来消除发送方(发送速率太快)使接收方缓存区溢出的可能性,因此 流量控制是一个速度匹配服务(让发送方慢一点,要让接收方来得及接收,实现匹配发送方的发送速率 ...
- 计算机网络 | 谈谈TCP的流量控制与拥塞控制
文章目录 一.TCP的流量控制 1.利用滑动窗口实现流量控制[⭐⭐⭐] 2.如何破解[死锁]局面❓ 二.TCP的拥塞控制 1.拥塞控制的一般原理 ① 解决网络拥塞的误区 ② 拥塞控制与流量控制的关系[ ...
- 计算机网络-TCP协议
目录 1 概述 2 TCP的主要特点 3 TCP的连接 4 可靠传输的工作原理 4.1 停止等待协议 4.1.1 无差错情况 4.1.2 出现差错 4.2 自动重传请求ARQ 4.3 连续 ARQ 协 ...
- TCP协议-TCP的流量控制
一.前言 一般来说,我们总是希望数据传输能尽可能快一点.但如果发送方把数据发送得过快的话,接收方就可能来不及接收,这就会造成数据的丢失.而TCP的流量控制机制就是为了解决这个端到端的数据传输速率问题. ...
- 计算机网络04之流量控制
1. 滑动窗口与三个指针 1. 发送方窗口 三个指针 指针的含义 理解发送窗口的关键是掌握发送窗口三个指针代表的含义 (-inf,p1)已经确认的字节 [p1,p2) 已经发送,但还未确认的字节 [p ...
- 计算机网络-tcp连接常见异常
计算机网络-tcp连接常见异常 目标端口未在监听:(操作系统参与) 解决:TCP的服务端实际上就是从网卡的寄存器中读取数据,然后进行解析.对于TCP自然会解析出目的端口这个关键信息,然后根据这个信息查 ...
- TCP/IP 流量控制
TCP/IP流量控制 定义: 流量控制往往指的是点对点通信量的控制,是个端到端的问题.流量控制所要做的就是控制发送端发送数据的速率,以便使接收端来得及接受.利用滑动窗口机制可以很方便地 ...
- [计算机网络] - TCP 重传、滑动窗口、流量控制、拥塞控制
转载自:https://blog.csdn.net/qq_34827674/article/details/105606205 1. 重传机制 1.1 超时重传 重传机制的其中一个方式,就是在发送数据 ...
最新文章
- 低速自动驾驶车辆的定位与建图
- 2.3.3 mysql 权限系统介绍
- windows和linux共同分区格式,Linux和Windows共存的模式下分区要小心
- spring框架中@PostConstruct的实现原理
- 【OS学习笔记】十三 保护模式一:全局描述符表(GDT)
- python randint什么分布_python随机数分布random测试
- 制作JD的手动和自动轮播图片板块
- 中国OpenJDK联盟发行特别版本的想法
- windows编程--网络编程学习--winsock编程(2)
- C++核心准则​Pro.bounds:边界安全群组
- WMS入库作业_核心业务流程
- Apache服务器下载
- 什么是V2X?如何通过V2X技术实现5G智慧交通?
- Android序列化之Parcel
- 【JVAV】—继承、多态、抽象类
- “WFCF”数据安全及隐私保护声明
- idc数据中心机房机柜收费标准
- python读书心得体会范文_读书心得体会范文10篇
- GB2312介绍及字库使用
- 蜂窝物联网通信技术的演进,有人竟然用“谈恋爱”的过程给讲明白了
热门文章
- 逆向工程第002篇:打造自己的仙剑奇侠
- comsol的燃料电池模块
- 捷径系列:Notification
- [笔经/面经]面试热问——你的职业规划是什么?
- 妙眠新零售系统开发 ——PHP程序源码搭建
- 为什么房价只涨不跌惊人内幕! [转]
- 【wpa_supplicant】从 assoc 动作窥伺supplicant与driver的交互(一)
- Downie 4.1.8 (4169) Mac 上视频下载工具
- Python Pandas条件筛选功能
- 伯恩斯新情绪疗法学习笔记