5.8.8 TCP流量控制

5.8.8 TCP流量控制

计算机网络的流量控制实际上是调节发送方的速率使得接收方能够及时处理的一个过程。

在TCP中采用的是大小可变的滑动窗口的方式进行流量控制,窗口大小的单位是字节。

如图

窗口

根据接收方的接收能力,通过接收窗口rwnd可以实现一个端到端的流量控制,接收端将接收窗口rwnd值放在TCP报文段首部中的窗口字段传送给发送方

如图

商量
我们知道发送窗口在连接建立时建立起来(5.8.3 TCP连接管理(一)TCP连接建立)通信双方都将自己能够支持的最大报文段长度设定好并通过TCP报文段中的选项字段通知对方,接着就按照这个数据大小进行数据传送。

在通信的过程中,接收方可以根据自己的资源情况随时动态的调整自己的接收窗口并告诉发送方使得发送方的发送窗口和自己的接收窗口保持一致,这种由接收端控制发送端的做法在计算机网络中的流量控制经常使用到。

我们通过实际的TCP流量控制的例子来理解控制过程

如图

示例
我们知道TCP采用的是大小可变的滑动窗口的方式进行流量控制根据图中的通信情况,假定主机A向主机B发送数据,双方商定的初始的窗口值是500,假定每一个报文段只能占100个字节长度,序号从初始的序号1开始,所以图中第一个箭头的序号Seq=1,那么问题是接收方对发送方进行了几次流量控制?

图中第一次接收方将窗口从初始的500个字节减成了400个字节

第二次再将窗口值从400个字节减为100个字节,当接收方收到序号Seq=101的重传报文段之后进行累积确认,当然发送端实际能够发送的报文段大小还得和拥塞窗口进行比较,取二者之间较小的值,拥塞窗口的作用我们后面说。

第三次将窗口值直接减成0,这种情况下就不允许发送方再发送数据了,这种状态持续到主机B重新发出一个新的更新窗口报文为止。当然在这种情况下发送方依然可以发送URG=1(5.8.2 TCP报文段首部格式)也就是紧急标志位置1的紧急数据,此时的窗口值WIN=0,就会启动TCP的持续定时器(5.8.7 TCP可靠传输(三)定时器),如果在定时器发生超时,发送方必须给接收方发出一个探寻的消息以询问接收方是否响应,如果接收方响应,就给发送方一个窗口更新的报文段,如果窗口的值大于零,发送方就又可以进行数据发送了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/34595.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言王国探险记之字符串+注释

王国探险记系列 文章目录(3) 前言 一,什么是字符串呢? 1,那C语言是怎么表示字符串的呢? "hello world.\n" 2,证明字符串的结束标志是一个 \0 的转义字符 3,证明字符串的结束标…

基于springboot+Redis的前后端分离项目(二)-【黑马点评】

🎁🎁资源文件分享 链接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA?pwdeh11 提取码:eh11 商户查询缓存,缓存更新策略,缓存穿透 商户查询缓存a.什么是缓存1.为什么要使用缓存2.如何使用缓存 b.添加商…

微信小程序分包

原生小程序分包和 uniapp 小程序分包差不多。 分包只是在原有代码结构上,指定那个文件夹属于分包,所以,页面地址原本路径不会修改。 比如,将pages/mine设为分包,mine下面的有页面地址pages/mine/index/index&#xf…

系统盘空间不足怎么清理?Win11系统盘瘦身的方法

系统盘空间不足怎么清理?当我们的电脑使用久了,就会有大量的垃圾文件堆积,会给系统盘空间带来很大的压力,容易出现系统运行卡顿的情况,对此我们需要对系统盘进行一次大扫除。本期教程小编将为大家分享Win11系统盘瘦身的…

20本期刊影响因子上涨,7月SCI/SSCI/AHCI/EI刊源表已更新!

2023年7月SCI/SSCI/AHCI/EI期刊目录更新 2023年6月28日发布的最新《期刊引证报告》中,我处合作期刊中,7月刊源表有20本期刊影响因子上涨,同时新增多本快刊! 重磅!2023年JCR正式发布(附影响因子名单下载&a…

自定义MVC引用XML配置文件实现

目录 前言 自定义MVC实现 1. 导入XML配置文件 2. 导入XML解析建模 3. 优化中央控制器 3.1 修改DisPathServlet中init初始化方法 3.2 修改ActionServlet逻辑处理流程 3.3 通过反射机制实例化子控制器类 3.4 中央控制器将请求委托给子控制器处理 3.5 根据请求结果码跳…

【物联网无线通信技术】802.11无线安全认证

本文由简入繁介绍了IEEE802.11i无线局域网安全技术的前世今生,帮助路由器开发者对WLAN的加密安全策略有一个概念上的认知,能够更好地分析STA掉线以及漫游等问题。 目录 WEP WPA WPA/WPA2-PSK认证过程 802.11i WEP WEP是Wired Equivalent Privacy的简…

Learning C++ No.30 【lambda表达式实战】

引言: 北京时间:2023/6/9/9:13,今天8:15起床,可能是最近课非常少,导致写博客没什么压力,什么时间都能写,导致7点起不来,哈哈哈,习惯睡懒觉了,但是问题不大&a…

记一次自建靶场域渗透过程

为方便您的阅读,可点击下方蓝色字体,进行跳转↓↓↓ 01 环境搭建02 外网突破03 权限提升并维持(1)获取 meterpreter 会话(2)尝试开启远程桌面(3)Msf 派生 Cobalt Strike shell&#…

JumpServer开源堡垒机安装配置

JumpServer开源堡垒机安装与配置 一、简介二、下载与安装2.1、下载2.2、安装2.3、其他 一、简介 JumpServer 堡垒机帮助企业以更安全的方式管控和登录各种类型的资产。 支持 官网地址:https://www.jumpserver.org/index.html JumpServer 采用分层架构,…

Jenkins构建Python项目提示:‘python‘ 不是内部或外部命令,也不是可运行的程序

一、问题描述(1) 今天Darren洋在jenkins里构建与飞书机器人通知时,用python编写脚本时发现了以下报错:Jenkins构建Python项目提示:‘python‘ 不是内部或外部命令,也不是可运行的程序 二、解决办法 在配置…

【Spark实战】Windows环境下编译Spark2 Linux上部署Spark On Yarn

Windows环境下编译Spark2 环境准备 git-2.14.1maven-3.9.2jdk-1.8scala-2.11.8zinc-0.3.15 主下载地址spark-2.3.4 github官方地址 编译准备 maven远程仓库使用的是阿里云的 解压源码包spark-2.3.4.zip,修改根模块的pom文件。主要目的是为了变更hadoop的版本号,…

在 TypeScript 中有效地使用 keyof 和 typeof 来表示类型

在本文中,我们将学习如何通过组合类型运算符和枚举来提取和声明常量类型typeof,以使您的代码库得到优化。keyof 先决条件 为了获得更好的编码体验,您应该在 IDE 中安装 TypeScript,例如VSCode。它将为您提供许多基本功能&#xff…

【论文导读】- Variational Graph Recurrent Neural Networks(VGRNN)

文章目录 文章信息摘要BackgroundGraph convolutional recurrent networks (GCRN)Semi-implicit variational inference (SIVI) Variational graph recurrent neural network (VGRNN)VGRNN modelSemi-implicit VGRNN (SI-VGRNN) 文章信息 Variational Graph Recurrent Neural …

STM32 串口代码配置

一、首先开发板上关于串口1的引脚配置已经配置好了,位置在SYSTEM的 usart.c 文件中(注意:只配置了串口1的,其他使用时需要自己配置) 重要的是明白配置的参数都是什么意思,针对实现不同的串口功能有什么影响…

选择高考志愿:聚焦计算机科学与技术,规避土木工程

选择高考志愿:聚焦计算机科学与技术,规避土木工程 高考季已至,各地高考成绩陆续公布,许多毕业生和家长开始面临疑惑:如何填报志愿、选专业还是选学校、什么专业好就业?张雪峰曾提到:“普通家庭…

从零开始 Spring Boot 60:一个实体映射到多个表

从零开始 Spring Boot 60:一个实体映射到多个表 图源:简书 (jianshu.com) 在之前的文章中我们讨论了 JPA 中的一对一关系,实际上存在一种特殊的一对一关系,即将一个实体映射到多张表,本文会讨论这种关系。 我之前提过…

如何将采购报价请求流程自动化?

在当今快节奏的商业环境中,效率和速度是保持竞争力的关键。在采购管理中,企业经常为简化操作而努力的一个领域是报价请求过程。手动处理请求、与供应商沟通并跟踪答复,可能非常耗时且容易出错。 然而,随着像8Manage SRM等专业电子…

Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库

介绍 Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Microsoft Excel™ 2007 及以上版本创建的电子表格文档。支持 XLAM / XLSM / XLSX / XLTM / XLTX 等多种文档格式&a…

Git下载与安装(windows)

文章目录 Git 简介Git 下载Git 安装Git 环境变量配置 Git 简介 Git 是一种分布式版本控制系统,用于快速、高效地处理任何大小规模的项目。它是由 Linus Torvalds 在 2005 年开始开发的,Git 最初是为了管理 Linux 内核源代码而创建的。现在 Git 是一个广…