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

16、流量控制是怎么实现的?【中高频】

流量控制其实就是 让发送方 发送速率不要太快,让接收方来得及处理。也就是 让「发送方」根据「接收方」的 接收能力 控制 发送的数据量。流量控制通过动态调整 窗口的大小 来实现,包括 发送窗口 和 接收窗口。具体过程:

  • 接收端 向 发送端 通知自已可以接收数据的大小。

  • 于是发送端会发送的数据量 就不会超过这个限度。该限度就叫窗口大小,窗口大小由 接收端 决定,而在TCP 首部中,专门有一个字段用来通知窗口大小:

    img
  • 接收主机将 自己可以接收的缓冲区大小 放入这个字段中 通知给发送端,这个字段的值越大,说明网络的吞吐量越高。发送端 会根据 接收端 的指示,对发送数据的量进行控制。当Window=0时,即告知发送方停止发送数据。当窗口更新之后,才能继续发送数据。

  • 举例:

    img
    • 如图所示,当接收端收到从 3001 号开始的数据段后 接收缓冲区满了,接收窗口=0,不得不暂时停止接收数据。

    • 之后,在收到接收窗口更新通知后 通信才得以继续进行。如果这个窗口的更新通知在传送途中丢失,可能会导致无法继续通信;为避免此类问题的发生,发送端主机会时不时的发送一个叫做窗口探测的数据段,此数据段仅含一个字节以获取最新的窗口大小信息。

【注】为什么会出现滑动窗口?

  • 在确认应答策略中,对每一个发送的数据段,都要给一个ACK确认应答,收到ACK后再发送下一个数据段,这样做有一个比较大的缺点,就是性能比较差,尤其是数据往返的时间长的时候

  • 使用滑动窗口,就可以一次发送多条数据,从而就提高了性能

相关文章:

  • Django 5实用指南(十四)项目部署与性能优化【完】
  • 非线性优化--NLopt算法(Android版本和Python示例)
  • DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加列宽调整功能,示例Table14_01基础固定表头示例
  • 单调栈、单调队列
  • 目标检测Anchor-based 与 Anchor-free
  • 【Linux内核系列】:深入理解缓冲区
  • 用ABBYY PDF Transformer+对PDF的创建编辑转换和注释等操作
  • 【实战ES】实战 Elasticsearch:快速上手与深度实践-6.2.2GDPR数据脱敏处理
  • BUUCTF [GUET-CTF2019]soul sipse 1
  • 我与DeepSeek读《大型网站技术架构》(8)- 信息过滤与反垃圾
  • linux内存页块划分及位图存储机制
  • 为什么使用消息队列?消息队列有什么优点和缺点?Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么优点和缺点?
  • pdf修改内容:分享5款好用的工具
  • 从0开始的操作系统手搓教程45——实现exec
  • 实时采集到的语音进行语音识别
  • Spring(2)——Cookie和Session
  • 【时间序列聚类】Feature-driven Time Series Clustering(特征驱动的时间序列聚类)
  • 008-Trae换用DeepSeek后编程能力大幅提升至中级水平
  • Python 实现非对称加密的 A 端和 B 端软件的详细步骤及代码示例
  • Python 实现机器学习的 房价预测回归项目
  • 马克思主义理论研究教学名师系列访谈|曾瑞明:想通了才可能认准,认准了才能做好
  • 马上评|孩子亲近自然只能靠公园露营了吗
  • 圆桌丨权威专家解读中俄关系:在新形势下共同应对挑战、共创发展机遇
  • 央行:全力推进一揽子金融政策加快落地
  • 金球看淡,不服就干!这是抬不起腿却昂着头的劳塔罗
  • 央行行长:债券市场“科技板”准备工作基本就绪,目前近百家市场机构计划发行超三千亿科技创新债