12.2 拥塞控制简介

2024-05-31 01:18
文章标签 控制 简介 拥塞 12.2

本文主要是介绍12.2 拥塞控制简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

12.1.1 拥塞控制的作用

       网络的带宽是有限的,如果到达通信子网中某一部分的包数量过多,使得该部分网络来不及处理,以致引起这部分乃至整个网络性能下降的现象,严重时甚至会导致网络通信业务陷入停顿, 这种现象就是网络拥塞。如果把网络中的数据传输比作交通运输的话,拥塞就是交通堵塞。交通堵塞是无法彻底避免的,但可以减少和缓解。遵守交通规则是减少交通堵塞的有效方法,而拥塞控制算法则是网络通信中的“交通规则”。拥塞控制算法的基本原则是:数据发送者需要监控网络中的拥塞状态,一旦发现拥塞则需要减小向网络中注入数据的速度。这就要求实现了拥塞控制的协议具备牺牲精神——牺牲自己,成全大家。但这样也会使一些没有拥塞控制的协议(如UDP)占据了更多的带宽。

12.1.2 流量控制与拥塞控制

        流量控制是指点对点通信量的控制,要求是抑制发送端发送数据的速率,以便使接收端来得及接收,这是通过滑动窗口实现的(详见6.2 TCP滑动窗口)。拥塞控制的主要功能是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制是一个全局性的过程,涉及到所有的主机、路由器,以及与降低网络传输性能有关的所有因素。

12.1.3 拥塞控制算法分类

        拥塞控制算法判断拥塞发生的方法有间接和直接两种。间接方法是通过判断收到的重复ACK(即ack_seq相同)的数量和重传定时器的超时实现的;直接方法是数据接收端或路由器使用显示拥塞通告(Explicit Congestion Notification, ECN)直接告知数据发送端发生了拥塞,发送端可以立即执行拥塞控制来减小数据发生速率而不必等待多个重复的ACK。按照实施阶段和条件的不同拥塞控制算法可以分为:慢启动(slow start)、拥塞避免(congestion avoidance)、快速重传(fast retransmit)和快速恢复(fast recovery)4种。通常情况下慢启动和拥塞避免一起使用,快速重传和快速恢复一起使用。

12.1.4 算法原理

        拥塞控制算法为数据发生者增设了一个“拥塞窗口(congestion window,cwnd)”,一次发送数据的字节数不能大于这个cwnd。慢启动和拥塞避免就是用来控制cwnd的:算法设置了一个慢启动阈值(slow start threshold, ssthresh),当cwnd <= ssthresh时执行慢启动,即比较快速地增大cwnd;如果cwnd > ssthresh则进入拥塞避免,即比较慢的增加cwnd。一旦发现拥塞发生则减小ssthresh,重新进行慢启动。

        当TCP数据发送者收到多个重复ACK时需要使用快速重传算法来重传数据而不必等到重传定时器超时,因为收到多个重复ACK往往意味着出现了数据丢失。快速恢复算法负责传输新数据直到收到不重复的ACK,这时意味着正常的数据传输已经恢复。

        ECN可以分为基于IP的和基于TCP的两大类,二者通常是配合使用的。当路由器得知拥塞发生时(队列已满并出现丢包),一个IP包的ECN域被路由器设置为11时,接收端而非发送端被通知路径上发生了拥塞。ECN使用TCP头部的ece和crw标志位通知数据发送端发生拥塞。当发送端主机接收到设置了ECE标志的ACK时,与收到重复ACK一样,开始减少拥塞窗口,执行慢启动过程和拥塞避免算法。

       

这篇关于12.2 拥塞控制简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1017187

相关文章

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

Java Stream 并行流简介、使用与注意事项小结

《JavaStream并行流简介、使用与注意事项小结》Java8并行流基于StreamAPI,利用多核CPU提升计算密集型任务效率,但需注意线程安全、顺序不确定及线程池管理,可通过自定义线程池与C... 目录1. 并行流简介​特点:​2. 并行流的简单使用​示例:并行流的基本使用​3. 配合自定义线程池​示

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库

Python库 Django 的简介、安装、用法入门教程

《Python库Django的简介、安装、用法入门教程》Django是Python最流行的Web框架之一,它帮助开发者快速、高效地构建功能强大的Web应用程序,接下来我们将从简介、安装到用法详解,... 目录一、Django 简介 二、Django 的安装教程 1. 创建虚拟环境2. 安装Django三、创

MySQL 索引简介及常见的索引类型有哪些

《MySQL索引简介及常见的索引类型有哪些》MySQL索引是加速数据检索的特殊结构,用于存储列值与位置信息,常见的索引类型包括:主键索引、唯一索引、普通索引、复合索引、全文索引和空间索引等,本文介绍... 目录什么是 mysql 的索引?常见的索引类型有哪些?总结性回答详细解释1. MySQL 索引的概念2

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直

Qt QCustomPlot库简介(最新推荐)

《QtQCustomPlot库简介(最新推荐)》QCustomPlot是一款基于Qt的高性能C++绘图库,专为二维数据可视化设计,它具有轻量级、实时处理百万级数据和多图层支持等特点,适用于科学计算、... 目录核心特性概览核心组件解析1.绘图核心 (QCustomPlot类)2.数据容器 (QCPDataC

Spring如何使用注解@DependsOn控制Bean加载顺序

《Spring如何使用注解@DependsOn控制Bean加载顺序》:本文主要介绍Spring如何使用注解@DependsOn控制Bean加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录1.javascript 前言2. 代码实现总结1. 前言默认情况下,Spring加载Bean的顺