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

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

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

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

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

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

  • 举例:

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

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

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

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

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

http://www.dtcms.com/a/60305.html

相关文章:

  • 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 实现机器学习的 房价预测回归项目
  • 【算法学习之路】8.栈和队列
  • Flutter中使用NetworkImage加载网络图片缓存问题学习实践
  • HTML 学习路线图
  • !C++中的位运算
  • 大语言模型-全文
  • linux应用:静态文件、 inode(i 节点)、vnode、流
  • Python 网络爬虫教程:从入门到高级的全面指南
  • 自然语言处理:无监督朴素贝叶斯模型
  • Spring Security 官网文档学习
  • GIS工具箱选择指南:四款软件满足多样化空间分析需求