JavaEE 第23节 TCP的流量控制与阻塞控制详解

news2024/11/14 18:56:25

目录

    • 前言(必读)
    • 1、滑动窗口
      • 背景
      • 运行机制
    • 2. 流量控制
      • 作用
      • 实现机制
      • 关键目标
    • 3. 拥塞控制
      • 作用
      • 实现机制
      • 作用
    • 4. 流量控制和拥塞控制的区别
      • 作用对象不同
      • 触发条件不同
      • 控制方式不同
    • 5.总结

前言(必读)

流量控制(Flow Control)拥塞控制(Congestion Control) 是TCP协议中的两个重要机制,虽然它们都涉及到数据流的管理,但它们的作用和处理对象是不同的
如图,两种机制相辅相成,保证数据可靠传输的情况下,实现数据传输效率最大化:
在这里插入图片描述

1、滑动窗口

滑动窗口是TCP进行流量控制的核心机制,了解滑动窗口的运行方式,有助于理解流量控制和阻塞控制。

如果知道什么是滑动窗口,或者暂且不想了解这块内容,当然可以直接跳过。

背景

我们知道TCP协议为了实现传输可靠性,数据发送存在确认应答机制。也就是发送端发送一段数据流,之后进入等待状态,直到接收端接收到数据,把ACK信号传输回发送端,发送端再苏醒发送下一段数据流。

上面这个传输方式虽然确保了传输可靠性,但是几乎牺牲了所有的传输效率。TCP协议虽然相对UDP协议传输速度慢,但是也是要拥有一定传输速度的。
而滑动窗口机制,就是用来解决这个问题的,在此机制作用下,发送端可具有一个可滑动的发送窗口以动态调整数据发送量,接收端也有一个可滑动的接收窗口动态调整数据的接收量,这种方式既可以保证数据可靠传输,又可以提升数据传输效率。

运行机制

假定滑动窗口的大小是20个字节。
如图,深蓝色方框是发送窗口(也就是发送端滑动窗口),紫色方框是可用窗口(用于表示剩余可发送的数据):在这里插入图片描述

  • #1 是已发送并收到 ACK确认的数据:1~31 字节。
  • #2 是已发送但未收到 ACK确认的数据:32~45 字节。
  • #3 是未发送但总大小在接收方处理范围内(接收方还有空间):46~51字节。
  • #4 是未发送但总大小超过接收方处理范围(接收方没有空间):52字节以后。

很快,46~51字节的数据被发送出去了,这时可用窗口就为0了,发送端不能继续发送数据,必须等待发送窗口中至少一个数据接收到ACK,才能继续发送数据:
在这里插入图片描述

又过了一段时间,32~36字节的数据被接收端接收,并发送ACK给到发送端,那么**发送窗口就会开始向右滑动5个字节,此时可用窗口从0变成了5:
在这里插入图片描述
接着继续发送数据,等待接收ACK,然后继续滑动如此反复,实现数据传输。
这里的发送窗口就是“
滑动窗口 **”的运行机制了,接收端滑动窗口的运行机制大体和发送端是一样的,大家可以自行画图尝试。

滑动窗口的大小不是随便设置的!
在流量控制机制中维护着一个 接收窗口 (接收缓冲区),在拥塞控制机制中发送端维护着一个拥塞窗口
滑动窗口的大小(这里特指发送端实际发送窗口大小)=Min(接收窗口大小拥塞窗口大小)。

2. 流量控制

作用

  • 流量控制的目的:
    • 流量控制主要关注对象是数据收发两端。 要求发送方的发送速率不会超过接收方的处理能力。它主要通过限制发送方可以发送的数据量,避免接收方的接收缓冲区溢出,确保接收方能够及时处理接收到的数据。

实现机制

因为流量控制只关心发送端和接收端两端数据处理速度的能力,有时由于双方没有协调好数据的发送量和接收量,就可能出现这种情况:
在这里插入图片描述

当接收端缓冲区已满,接收端会发送ACK报文,ACK报文中的窗口大小这个字段会设置成0,告诉发送端:“接收端已经坚持不住了,暂时不能接收数据了,请等一下在发送数据。”
发送端接收到ACK后,就会暂时把发送窗口的大小调整成0,以此暂停数据发送。
过了一会儿,发送端又会发送一个探测报文(此时接收端已经处理了许多数据,接收缓冲区空间变得充裕 ):在这里插入图片描述
然后接收端返回一个ACK报文,ACK报文中的窗口大小这个字段(在报文中占用2个字节)被设置成了接收端缓冲区剩余空间大小:在这里插入图片描述
最后,发送端根据ACK报文中的窗口大小,判断是否需要调整发送窗口的大小,重新开始发送数据给接收端。

以上就是流量控制的基本流程,通过接收端接收缓冲区剩余控空间大小(接收窗口),限制发送端实际发送窗口的大小。

关键目标

  • 防止数据丢失:通过动态调整发送方的发送速率,避免因接收方处理不过来而丢失数据。
  • 平衡数据流:确保数据流速率与接收方的处理能力相匹配,优化传输效率。

3. 拥塞控制

作用

  • 拥塞控制的目的是防止发送方的发送速率超过网络的承载能力,从而导致网络拥塞。它通过动态调整发送方的发送速率,确保网络不会因为数据流量过大而出现拥塞

实现机制

  • 拥塞窗口(Congestion Window, cwnd)

    • 拥塞控制主要依赖于发送方维护的一个拥塞窗口(不存储在TCP段1中)。这个窗口反映了网络的当前拥塞状况。拥塞窗口的大小根据网络的反馈(如丢包、延迟)动态调整。
  • 拥塞窗口大小控制

在这里插入图片描述
传输轮次:通常用于描述一个数据包从发送端传输到接收端,并从接收端返回确认(ACK)的过程,来回一次就是一个传输轮次。

  • 慢启动(Slow Start):当连接开始或发生超时重传时,拥塞窗口从一个小值开始,并逐步增大(指数增长),以探测网络的可用带宽。
  • 拥塞避免(Congestion Avoidance):当拥塞窗口达到某个阈值后,增速减缓,进入拥塞避免阶段(转变为线性增长),防止发送过多数据导致网络拥塞。
  • 慢启动(Slow Start):当拥塞窗口按照线性增长到达某一个值,导致超时重传2,那么就会重新乘法减小回到慢启动阶段。并且设定从指数增长转变为线性增长的临界值为拥塞窗口最大值除以2。(Tahoe版本

关于拥塞窗口的大小还有一个重要点,当线性增长触发的不是超时重传而是 快速重传3后续不会使用Tahoe版本而是Reno版本

在这里插入图片描述
Reno版本和Tahoe版本的区别就在于下降到的最低点从1,直接改成了原来拥塞窗口峰值大小除以2。其他方面均一致。这实际上也是对TCP协议的一种优化,提高传输效率。

注意:在以前并没有这种优化,不论是快速重传还是超时重传,统一使用的Tahoe版本。

作用

  • 防止网络拥塞:通过检测网络状况(如丢包、延迟等),动态调整发送速率,避免数据流量过大导致网络拥塞。

4. 流量控制和拥塞控制的区别

作用对象不同

  • 流量控制

    • 主要针对发送方接收方,确保发送方的发送速率不超过接收方的处理能力,控制的是收发两端本身。
  • 拥塞控制

    • 主要针对整个网络路径特别是中间路由器和链路,确保发送方的发送速率不超过网络的承载能力。
    • 作用于网络环境,关注的是网络的整体负载状况。

触发条件不同

  • 流量控制

    • 由接收方的缓冲区状况触发。当接收方的缓冲区空间不足时,接收窗口减小,迫使发送方减速或暂停。
  • 拥塞控制

    • 由网络状况触发,如数据包丢失、延迟增加等。当检测到网络拥塞的迹象时,发送方通过调整拥塞窗口来减速。

控制方式不同

  • 流量控制

    • 根据接收端接收窗口大小,限制发送端实际发送窗口大小。
  • 拥塞控制

    • 更具发送端维护的拥塞窗口大小,限制发送端实际发送窗口大小。

5.总结

尽管流量控制和拥塞控制在目的和机制上有所不同,它们共同作用于TCP的数据传输过程:

实际发送窗口大小=Min(拥塞窗口大小接收窗口大小)

它们相辅相成,前者保证接收方不会被数据淹没,后者确保网络不会因过载而失效,从而共同保证数据的可靠传输和网络的高效利用。


  1. TCP段笼统讲就是TCP数据报 ↩︎

  2. 超时重传:发送端发送完一个数据包之后,就会针对这个数据报进行计时,如果在有限的时间内发送端没有得到接收端发送的ACK,那么发送端认为这个数据包丢失了,会重新发送这个数据包给到接收端。 ↩︎

  3. 快速重传:发送端发送一个数据包后,接收端发现并没有受到该数据包(通过序号和确认序号来检查),接收端就会发送“重复ACK”给到接收端,接收端接收到三次这种“重复ACK”就会重新发送该数据包。相比于超时重传,快速重传的严重程度相对小一点。 ↩︎

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中科院院士薛其坤:通用量子计算机还得10-20年

说到量子计算机,很多人都抱有不切实际的幻想,甚至认为它无所不能,很快就能取代现有的电子计算机,但事实上,目前的量子计算机只能高效解决特定问题,不具备通用性。在2024年浦江创新论坛上,2023年…

linux日志备份

什么是日志文件?为什么要设立日志文件? 1、日志文件是用来记录事务对数据库的更新操作的文件。2、设立日志文件的目的是: 进行事务故障恢复;进行系统故障恢复;协助后备副本进行介质故障恢复。 但是,随着时间,日志文件内存过于增加,将会导…

creating chat agent with langchain and openai getting no attribute error

题意: 使用 LangChain 和 OpenAI 创建聊天代理时遇到“没有属性错误”(Getting "no attribute" error when creating a chat agent with LangChain and OpenAI) 问题背景: Im trying to test a chat agent using the …

基于springboot+vue的工作量统计系统(全套)

传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装工作量统计系统软件来发挥其高效地信息处理的作用,可以…

java后端开发的DO、DTO、BO、AO、VO、POJO定义

1.常用文件夹命名规则 pojo: (1)vo (与前端交互的所有对象,包括接参和返回) (2)query (查询的筛选条件,前端传参和后端内部传参通用) &#x…

[计算机基础四大件学习笔记]计算机组成原理

文章总览:YuanDaiMa2048博客文章总览 计算机基础四大件学习笔记 说明:虽然学习过计算机组成与系统结构、操作系统、计算机网络以及数据结构这四门课程,但是对于这四门课的结合和实际中的应用还是模糊的,因此x想通过网上的一些视频…

Rust语言初探:WebAssembly 入门

Rust语言初探:WebAssembly 入门 前言 在我的印象中,Rust 一直是比较底层的语言,例如在操作系统底层、高性能中间件等底层场景才会看到它的身影。 然而,随着技术的发展,Rust 也开始在前端场景如 WebAssembly 中崭露头…

大数据Flink(一百一十五):Flink SQL的基本概念

文章目录 Flink SQL的基本概念 一、​​​​​​​SQL 中表的概念 二、​​​​​​​​​​​​​​SQL 临时表、永久表 三、​​​​​​​​​​​​​​SQL表类型的定义 四、​​​​​​​​​​​​​​常见的连接器 五、​​​​​​SQL数据视图 1、​​​​​​…

校园气膜馆助力青少年体质发展:少年强则国强—轻空间

青少年是国家的未来,体质的强健与否,直接关系到国家的竞争力和可持续发展。在现代社会,学习和压力并存,青少年的体育锻炼时间不断被压缩,如何提供更为优质的体育设施,帮助他们增强体质,成为学校…

【C/C++】“秒懂”学C/C++不可错过的“经典编程题” — 日期类的经典运用 (含题链接)

“秒懂”学C/C不可错过的“经典编程题” — 日期类的经典运用 (含题链接) 1. 计算日期到天数转换(1). 解题思路:(2). 代码实现: 2. 打印日期(1). 解题思路:(2). 代码实现: 3. 日期累加(1). 解题思路:(2). 代…

Java 设计模式-状态模式

目录 一. 概述 二. 主要角色 三. 代码示例 四. 优缺点 优点: 缺点: 五. 常见应用场景 一. 概述 状态模式是一种行为设计模式,它允许一个对象在其内部状态改变时改变它的行为。对象看起来好像修改了它的类。状态模式把所有的与一个特定…

AES算法与接口解密

文章目录 AES算法基本介绍加密模式模式与IV 接口响应AES解密 AES算法 基本介绍 高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法。 对称加密算法中加解密密钥都是一样的。 AES 的主要特性: 块加密:AES 是一种分组加密算法&…

Vue day-04

目录 一. vue组件 1.1 为什么用组件 1.2 vue组件 1.3 基础使用 1.4 全局 - 注册使用 1.5 局部 - 注册使用 1.4 用less写的样式 二. Vue组件之间传值(重点) 2.1 父组件向子组件传值 2.2 子组件向父组件传值 2.3 兄弟之间的传递 三. vue生命周期 3.1 含义 3.2 钩子…

phpmyadmin报错mysqli::real_connect(): (HY000/1045): Access denied for user ‘

问题分析 这是因为本身还安装了MySQL,导致发生冲突,只需要找到自己安装的进行关闭即可 方法 在任务管理器(快捷键:ctrlaltdelete)-服务中,找到对应的MySQL进行关闭

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级&…

数字化转型的战略规划应该怎么做?(附IBM-IT战略规划方法论PPT下载)

IBM-IT战略规划方法论PPT-下载链接见文末~ 数字化转型的战略规划是一个系统而复杂的过程,需要从多个维度进行考虑和规划。以下是一些关键步骤和建议,以帮助企业制定有效的数字化转型战略规划: 1. 明确数字化转型愿景和目标 设定愿景&#…

基于ONSEMI电源管理芯片NCP1607之AC300V高输入电压36W调色温智能电源

NCP1607PFC在LED智能电源PFC处理部分性价比高,输入电压范围宽到AC90-300V,母线电压420V导致高压低电流整机光效高,成熟芯片可靠新高,没有任何纹波与频闪,智能护眼。 ►场景应用图 ►产品实体图 ►展示板照片 ►方案方块图 ►核心…

常见概念 -- OPA与插损预置

OPA基本原理 OPA功能,即光功率调节(Optical Power Adjust),在新建光层业务时使用。 ​单板正常工作后,在网管上创建单站光交叉时,可以创建自动模式的光交叉,即启动OPA功能。OPA功能通过软件计算,自动调节交…

MACD指标精讲PART1:MACD指标入门及使用法则

一、MACD指标入门 MACD(Moving Average Convergence Divergence)指标称为指数平滑异同移动平均线指标,是由Geral Apple所创造,用来跟踪股价运行趋势、判断股票买卖时机的技术分析工具。 MACD指标由DIFF线(Difference线…

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJ…