计网第五章(运输层)(四)(TCP的流量控制)
一、基本概念
流量控制就是指让发送方的发送速率不要太快,使得接收方来得及接收。可以使用滑动窗口机制在TCP连接上实现对发送方的流量控制。
注意:之前在讨论可靠传输时,讨论过选择重传协议和回退N帧协议都是基于滑动窗口的机制上进行实现的。
二、具体实现
接收方通过向发送方发送带有自己接收窗口值的报文段来控制发送方的发送窗口。注意:TCP的窗口单位是字节(这里也进一步体现了TCP是面向字节的)。
你妈(发送方)给你(接收方)盛了三碗米饭(发送窗口的值),你吃完了感觉只能再吃一碗,就告诉你妈你再吃一碗(设置接收窗口的值),于是你妈就再给你盛了一碗饭(实现流量控制)。
如图:假设A和B已经完成TCP连接,A向B发送数据,在连接建立时B告诉A自己的窗口值。设B的接收窗口值为400。
(1)A发送的每个TCP数据报文段可携带100字节数据,因为B的窗口值为400,所以A将自己的发送窗口值也设置为400。开始时,A先将序号1到100的数据封装成一个报文段中发送出去,此时发送窗口内还可以发送300字节。seq是TCP报文段首部中的序号字段,表示数据载荷的第一个字节的序号,这里应该为1,DATA表示TCP数据报文段。
(2)A又向B发送序号101到200,还能再发送200字节。这里seq=101。
(3)A又向B发送序号201到300 ,但是该报文段在传输过程中发生丢失。
(4)B向A发送收到的201号之前的数据的累积确认 ,并将接收窗口改为300,对A进行流量控制。其中,ACK是TCP报文段首部中的标志位,取值为1表示该报文段是一个确认报文段。ack是TCP报文段首部中的确认号字段,表示201号之前的数据都已正确接收,希望收到201及之后的数据。rwnd是TCP报文段首部中的窗口字段,表示接收窗口为300。
(5)主机A收到累积确认后,让发送窗口向前滑动 ,并将自己的发送窗口值调整为300。虽然A之前发送了201-300的数据,但是没有收到该段数据的累计确认,于是该段数据不能移出窗口。
(6)201到300号数据在超时重传计时器到时后会进行重传, 这中间会将新落入发送窗口内的数据发送出去。当发送完序号401到500后,A暂时不再发送数据,超时重传到时后只将201-300的数据重新发送,而不发送新数据。之后B对A发送累计确认,在该确认报文段还可以封装新设置的接收窗口值来对A进行流量控制,这些过程和上面类似,不再做演示。
这里还有一个特别的地方:假设B向A发送的累积确认中,B将窗口值改为了0,也就是说B不再接收数据。相应地,A也会把自己的发送窗口值改为0,A不会再发送一般的报文段。
后来B又有一些缓存空间,又向A发送一个接收窗口值为300的报文段。但是发生丢失,这时候如果不采取措施就会陷入这种死锁局面。
于是,经典的重传计时器措施再次出现,当发送方收到窗口值为0的通知时,就会启动该持续计时器,当计时器到时后,A就发送一个携带1字节数据的零窗口探测报文(前面故意将一般两个字标红,也就意味着这个零窗口探测报文不是一般的报文段,即便接收方的接收窗口值为0,也得接收该报文段)。
B确认这个报文段时,给出自己现在的接收窗口的值,如果还为0,那么就A收到后,重启该计时器。
这时候可能有人会想到,那要是这个零窗口探测报文段也丢失了呢?
那就给这个零窗口报文段也加一个计时器,如果计时器超时就重发该报文段。
注意:TCP的发送窗口实际为min{发送方自身的拥塞窗口值,接收方的接收窗口值}。
但是拥塞窗口值涉及到拥塞控制,所以这里不做详细概述。
三、示例
1、主机A向主机B连续发送了2个TCP报文段,其序号分别是80和220
(1)第1个报文段携带了多少字节的数据?主机B收到第1个报文段后发回的确认中的确认号是多少?
(2)若主机B收到第二个报文段后发回的确认号300,则A发送的第二个报文段至少携带了多少字节的数据?
(3)如果在情况(2)中A的第二个报文段中实际携带了100字节的数据,而B返回的窗口值为100字节,那么主机A接下多最多可以发送多少字节的数据,这些数据的起止编号分别是多少?
解:
(1)
根据前面所述,序号是每个报文段的第一个字节的序号,也就是说第一个报文段的序号应该是80到219,共140个字节。B收到后返回的确认号应该为220。(返回的确认号是已经收到x-1及之前的,想要x及之后的。)
(2)
299-220+1=80,所以第二个报文段至少携带了80个字节。
(3)
实际携带了100个字节,但是B的确认号是300,也就是80个字节。并且B的接收窗口现在为100。
那么A的发送窗口也要改为100,并且A的发送窗口向前移动80个字节。但是之前发送过的20字节完全不知道什么情况(题目并没有明确说这20个字节超时,我们目前只能知道没有收到这20个字节的确认),所以A接下来可以发送新落入发送窗口内的数据,共80字节,起止编号为320和399。
相关文章:
计网第五章(运输层)(四)(TCP的流量控制)
一、基本概念 流量控制就是指让发送方的发送速率不要太快,使得接收方来得及接收。可以使用滑动窗口机制在TCP连接上实现对发送方的流量控制。 注意:之前在讨论可靠传输时,讨论过选择重传协议和回退N帧协议都是基于滑动窗口的机制上进行实现…...
【华为OD机试python】查找众数及中位数【2023 B卷|100分】
【华为OD机试】-真题 !!点这里!! 【华为OD机试】真题考点分类 !!点这里 !! 题目描述 众数是指一组数据中出现次数最多的那个数,众数可以是多个。 中位数是指把一组数据从小到大排序后,如果这组数据的总数是奇数, 那最中间的那个数就是中位数; 如果这组数据总数是偶数,那…...
阿里云无影云电脑详细介绍:价格、使用和功能优势说明
什么是阿里云无影云电脑?无影云电脑(原云桌面)是一种快速构建、高效管理桌面办公环境,无影云电脑可用于远程办公、多分支机构、安全OA、短期使用、专业制图等使用场景,阿里云百科分享无影云桌面的详细介绍、租用价格、…...
【实践篇】MySQL执行计划详解
文章目录 本文知识大纲速览1. 前言2. 基本介绍1. 什么是执行计划2. 如何查看执行计划3. 执行计划的组成部分 3. 执行计划的关键元素1. id2. select_type3. table:4. type:5. possible_keys:6. key:7. key_len8. ref:9. rows:10. Extra 4. 底层原理5. 执行计划示例解读本文知识图…...
二维凸包(Graham) 模板 + 详解
(闲话) 上了大学后没怎么搞oi,从土木跑路到通信了(提桶开润大成功!),但是一年上两年的课(补的),保研也寄掉了( 说起来自从博客被大学同学发现并…...
ElasticSearch(ES)简单介绍
ES简介 Elasticsearch(通常简称为ES)是一个开源的分布式搜索和分析引擎,旨在处理各种类型的数据,包括结构化、半结构化和非结构化数据。它最初是为全文搜索而设计的,但随着时间的推移,它已经演变成一个功能…...
OpenCV(三十五):凸包检测
1.凸包检测介绍 凸包检测是计算凸包的一种技术,凸包就是:给定二维平面上的点集,将最外层的点连接起来构成的凸边形,它是包含点集中所有的点。 2.凸包检测函数convexHull() void cv::convexHull ( InputArray points, OutputArra…...
PS 透视裁剪工具
上文 PS 裁剪工具及工具栏配置讲解 我们讲完了裁剪工具 然后 我们继续来研究 透视裁剪工具 切换到 透视裁剪工具 后 我们先点击左上方的清除 先不要这些多的配置 然后 我们可以先用鼠标在图像上 画出一个局域 然后 我们去拖他四个角中的其中一个 就能拖出一些不同的形状 然…...
每日一个C库函数-#1-memset()
每日一个C库函数-#1-memset() 来源 C 标准库 - <string.h> 声明 void *memset(void *str, int c, size_t n);str:要填充的内存块;c:要被设置的值(以何值填充)。该值以 int 形式传递,填充内存块时…...
GraphQL基础知识与Spring for GraphQL使用教程
文章目录 1、数据类型1.1、标量类型1.2. 高级数据类型 基本操作2、Spring for GraphQL实例2.1、项目目录2.2、数据库表2.3、GraphQL的schema.graphql2.4、Java代码 3、运行效果3.1、添加用户3.2、添加日志3.3、查询所有日志3.4、查询指定用户日志3.5、数据订阅 4、总结 GraphQL…...
【SA8295P 源码分析】97 - QNX AIS Camera 框架介绍 及 Camera 工作流程分析
【SA8295P 源码分析】97 - QNX AIS Camera 框架介绍 及 Camera 工作流程分析 一、QNX AIS Server 框架分析二、QNX Hypervisor / Android GVM 方案介绍三、Camera APP 调用流程分析四、QCarCam 状态转换过程介绍五、Camera 加串-解串 硬件链路分析六、摄像头初始化检测过程介绍…...
威胁的数量、复杂程度和扩散程度不断上升
Integrity360 宣布了针对所面临的网络安全威胁、数量以及事件响应挑战的独立研究结果。 数据盗窃、网络钓鱼、勒索软件和 APT 是最令人担忧的问题 这项调查于 2023 年 8 月 9 日至 14 日期间对 205 名 IT 安全决策者进行了调查,强调了他们的主要网络安全威胁和担忧…...
NSSCTF web 刷题记录2
文章目录 前言题目[广东强网杯 2021 团队组]love_Pokemon[NCTF 2018]Easy_Audit[安洵杯 2019]easy_web[NCTF 2018]全球最大交友网站prize_p2[羊城杯 2020]easyser[FBCTF 2019]rceservice方法一方法二 前言 今天是2023年9月13号,刷题记录2正式开始。时间来到九月十七…...
Linux驱动之INPUT子系统框架
目录 一、input 子系统简介 二、input 驱动编写流程 1、注册 input_dev 2、上报输入事件 三、input_event 结构体 按键、鼠标、键盘、触摸屏等都属于输入(input)设备, Linux 内核为此专门做了一个叫做 input子系统的框架来处理输入事件。输入设备本质上还是字符设…...
Long类型雪花算法ID返回前端后三位精度缺失问题解决
目录 一、问题描述二、问题复现1.Maven依赖2.application.yml 配置3.DemoController.java4.snowflakePage.html 页面5.DemoControllerAdvice.java 监听6.问题复现 三、原因分析四、问题解决方案一方案二 一、问题描述 Java 后端使用雪花算法生成 Long 类型的主键 ID࿰…...
6.8-SpringIoC之循环依赖底层源码解析
解决靠,三级缓存 创建Map,存不完整的Bean 存在问题:属性存在但没有值...
Springboot 实践(18)Nacos配置中心参数自动刷新测试
前文讲解了Nacos 2.2.3配置中心的服务端的下载安装,和springboot整合nacos的客户端。Springboot整合nacos关键在于使用的jar版本要匹配,文中使用版本如下: ☆ springboot版本: 2.1.5.RELEASE ☆ spring cloud版本 Greenwich.RELEASE ☆ sp…...
uniapp引入小程序原生插件
怎么在uniapp中使用微信小程序原生插件,以收钱吧支付插件为例 1、在manifest.json里的mp-weixin中增加插件配置 "mp-weixin" : {"appid" : "你的小程序appid","setting" : {"urlCheck" : false},"usingCom…...
自己记录微信小程序开发遇到的问题
在HBuilder X中【运行】--【小程序】--【运行设置】,小程序运行配置,将【微信开发者工具】的安装路径配置进去,首次运行会自动让你填写; 1、hbuildx运行到微信开发者工具报错 Error: Unbalanced delimiter found in string 错误…...
【leetcode 力扣刷题】栈—波兰式///逆波兰式相关知识和题目
波兰式、逆波兰式相关知识和题目 波兰式、逆波兰式介绍常规表达式转换成逆波兰式编程让常规表达式转换成逆波兰式逆波兰式运算过程常规表达式转换成波兰式编程让常规表达式转换成波兰式波兰式运算过程 150. 逆波兰式表达式求值224. 基本计算器227. 基本计算器Ⅱ282. 给表达式添…...
Web 第一步:HTTP 协议(基础)
这里是JavaWeb的开头部分!那么先解释一下吧: Web:全球广域网,也称为万维网(www),能够通过浏览器访问的网站。 JavaWeb:是用Java技术来解决相关 Web 互联网领域的技术栈。 …...
【Vue】快速入门案例与工作流程的讲解
🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟在这里,我要推荐给大家我的专栏《Vue快速入门》。…...
LuatOS-SOC接口文档(air780E)--camera - codec - 多媒体-编解码
常量 常量 类型 解释 codec.MP3 number MP3格式 codec.WAV number WAV格式 codec.AMR number AMR-NB格式,一般意义上的AMR codec.AMR_WB number AMR-WB格式 codec.create(type, isDecoder) 创建编解码用的codec 参数 传入值类型 解释 int 多媒…...
《动手学深度学习 Pytorch版》 6.6 卷积神经网络
import torch from torch import nn from d2l import torch as d2l6.6.1 LeNet LetNet-5 由两个部分组成: - 卷积编码器:由两个卷积核组成。 - 全连接层稠密块:由三个全连接层组成。模型结构如下流程图(每个卷积块由一个卷积层、…...
【微信小程序】项目初始化
| var() CSS 函数可以插入一个自定义属性(有时也被称为“CSS 变量”)的值,用来代替非自定义 属性中值的任何部分。 1.初始化样式与颜色 view,text{box-sizing: border-box; } page{--themColor:#ad905c;--globalColor:#18191b;--focusColor…...
C#,《小白学程序》第二十六课:大数乘法(BigInteger Multiply)的Toom-Cook 3算法及源程序
凑数的,仅供参考。 1 文本格式 /// <summary> /// 《小白学程序》第二十六课:大数(BigInteger)的Toom-Cook 3乘法 /// Toom-Cook 3-Way Multiplication /// </summary> /// <param name"a"></par…...
destoon自定义一个archiver内容文档
在archiver目录建立以下代码: <?php define(DT_REWRITE, true); require ../common.inc.php; $EXT[archiver_enable] or dheader(DT_PATH); //$DT_BOT or dheader(DT_PATH); $N $M $T array(); $mid or $mid 5; $vmid $list 0; foreach($MODULE as $k>…...
5-1 Dataset和DataLoader
Pytorch通常使用Dataset和DataLoader这两个工具类来构建数据管道。 Dataset定义了数据集的内容,它相当于一个类似列表的数据结构,具有确定的长度,能够用索引获取数据集中的元素。 而DataLoader定义了按batch加载数据集的方法,它是…...
IDEA创建完Maven工程后,右下角一直显示正在下载Maven插件
原因: 这是由于新建的Maven工程,IDEA会用它内置的默认的Maven版本,使用国外的网站下载Maven所需的插件,速度很慢 。 解决方式: 每次创建 Project 后都需要设置 Maven 家目录位置(就是我们自己下载的Mav…...
最新清理删除Mac电脑内存空间方法教程
Mac电脑使用的时间越久,系统的运行就会变的越卡顿,这是Mac os会出现的正常现象,卡顿的原因主要是系统缓存文件占用了较多的磁盘空间,或者Mac的内存空间已满。如果你的Mac运行速度变慢,很有可能是因为磁盘内存被过度占用…...
买做指甲的材料在哪个网站/最新足球消息
说多了都是泪。。。 最后,我们还是要用一首“500的歌”来共勉:来来来,加完今天,还有三天! 文章转载自 开源中国社区 [http://www.oschina.net]...
网络代理免费/百度seo排名优化公司哪家好
公告 :本博客为微软云计算中文博客 的镜像博客。 部分文章因为博客兼容性问题 ,会影响阅读体验 。如遇此情况,请访问 原博客 。 网易科技 讯 10月6日消息,据国外媒体报道,微软CEO史蒂夫鲍尔默 …...
属于b2b的网站/app有哪些推广方式
为了更好的对客户端权限进行管理和控制,我们只赋予终端用户Domain User组的权限。但有些需要Local Administrator权限的软件就无法安装和运行。我目前能想到的办法是: 1、所有软件都安装在固定的Program Files目录,并通组策略赋予Program Fil…...
丽水市龙泉市网站建设公司/搜索引擎营销怎么做
前端web开发工程师简历-自我评价范文/怎么写【网盘下载】100清新大气简历模板:https://zhuanlan.zhihu.com/p/115911695https://zhuanlan.zhihu.com/p/113308665前端工程师自我评价范文(案例1)1. 熟悉项目开发流程,能快速对接产品需求,前后端…...
网络公关团队/武汉seo人才
1. 安装SQL SERVER 2008 R2 NATIVE CLIENT, 注意区分CPU是32位还是64位的2. COPY XE2的MIDAS到C:\WINDOWS\SYSTEM32\, 低版本的MIDAS.DLL会报错: invalid package3. 命令行执行 REGSVR32 MIDAS.DLL 注册MIDAS, 必须是XE2的MIDAS.DLL4. 安装所必须的文件: dbxmss.dll, sqlncli10…...
中企动力官方网站/广告联盟平台自动赚钱
概述:因为一个应用程序是由很多文件所组成,所以安装卸载非常复杂,为了让用户更加方便的管理应用程序。所以引入了程序打包管理。主要包括:安装,卸载,升级,查询,检验。常见的包管理器…...