当前位置: 首页 > news >正文

核心机制:流量控制

搭配滑动窗口使用的

窗口大小

窗口越大,传输速度就越快,但是也不能无限大,太大了,对于可靠性会有影响

比如发生方以非常快的速度,发送,接收方的处理速度跟不上,也就会导致有效数据被接受方丢弃(又得重传)

流量控制,就是根据接收方的处理能力(如何衡量?),干预到发送方的发送速度(调整滑动窗口的大小)

应用程序调用 read 之类的操作(scanner.next)

想象成"阻塞队列",如果队列里面没有数据,应用程序在 read 就会阻塞

生产者消费者模型

发送者是生产者,接受方是消费者,通过 TCP 的接受缓冲区,作为中转场地

所谓的"接收方的处理能力"就是接收方应用程序调用 read 的速度(调用 read 有多快,每次 read 多少) 调用 read 的速度和应用程序,代码咋写的 是直接相关的,想要直接衡量 read,还不太容易得

read 到的数据,一定是有序的数据

使用另一个指标来衡量 read 的速度.直接看接受缓冲区的剩余空间的大小

接收 receive, 接受accept

连接 connection 链接 link

TCP 是"有连接" 不是 "有链接"

如果发现水位比较低,就可以认为放水的速度比较快(应用程序 read 的速度比较快)

接受缓冲区的剩余空间大小:以这个指标反向制约发送方的发送速度

在接受方返回 ack 报文的时候,在 TCP 报头中把接受缓冲区剩余空间的大小 数值 ,放到 ack 的报头中,等发送方收到 ack 就知道接收方的处理速度了

发送方收到 ack 之后,就会根据窗口大小,重新设置下一轮 滑动窗口传输数据 窗口大小

16位 = > 64kb

是否意味着,TCP 的滑动窗口大小,最大只能是 64kb??  并不是这样

TCP 在设计的时候,充分的吸取了以前 UDP 的教训,选项中有一个"窗口扩展因子"发送方收到 ack 之后,设置滑动窗口大小 16位窗口大小 << 窗口扩展因子,左移一位相当于 * 2,是指数增长的,这样的窗口大小的取值范围是非常非常大的

一般来说真实的情况是,大概率是一边收到数据,一边消耗数据

4001之后变成了 0 ,主机 A 这边就会暂停发送,队列满了,如果不暂停发送,接下来 A 数据就会被 B 丢掉,这个时候接受缓冲区更像是阻塞队列

A 不给 B 发数据,意味着 B 也就不给 A 返回 ack 了过了一会,主机 B 应用程序消耗了一部分数据

窗口探测包

当窗口大小为 0 的时候, A 只是不发送"业务数据"(TCP 载荷部分非空的数据,携带应用层数据包的数据) 但是 A 仍然会周期性的发送"窗口探测包"

另外 主机 B 也会在接受缓冲区不满的时候给 A 发一个"窗口更新包"

相关文章:

  • MYSQL 高级 SQL 技巧
  • AI Coding 资讯 2025-06-03
  • Python爬虫解析动态网页:从渲染到数据提取
  • Python训练营打卡Day42
  • 多层 PCB 板抄板实操解析:技巧到实操步骤
  • 普通二极管
  • 对老项目进行node升级兼容
  • 笔记本电脑开机无线网卡自动禁用问题
  • 日语输入法怎么使用罗马字布局怎么安装日语输入法
  • 飞牛fnNAS使用群辉DSM系统
  • ABP-Book Store Application中文讲解 - Part 7: Authors: Database Integration
  • .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
  • 高性能MCU的MPU与Cache优化详解
  • 焊缝缺陷焊接缺陷识别分割数据集labelme格式5543张4类别
  • STM32单片机编程中标志变量的思想无处不在
  • CppCon 2014 学习:CHEAP, SIMPLE, AND SAFE LOGGING USING C++ EXPRESSION TEMPLATES
  • 《矛盾论》可以带给我们什么?
  • Gradle依赖管理全面指南:从基础到高级实践
  • 第一章 1.The Basic (CCNA)
  • Lua和JS的垃圾回收机制
  • 如何做实验室网站/seo标签优化方法
  • 昌吉市住房和城乡建设局网站/企业网页设计与推广
  • 深圳沙井做网站公司/上海seo推广整站
  • 网站推广是网站建设完成之后的长期工作/网站设计公司多少钱
  • 北京建设工程网站/电商运营多少钱一个月
  • 网站图片链接到视频怎么做/搜狗网站排名软件