5分钟搞懂ECN

ECN是通过在IP和TCP头中携带拥塞信息,通知发送方网络拥塞状态,从而采取相应拥塞控制措施。原文: What is ECN(Explicit Congestion Notification)?[1]

ECN是Explicit Congestion Notification的缩写,意思是显式拥塞通知算法,和慢启动重启或者AIMD那样的拥塞控制算法不一样,ECN只做一件事情,即将路由器的拥塞状态通知给发送方。因此,ECN是一种拥塞通知或拥塞信令算法,通知发送方有关拥塞的情况,以便采取相应措施避免拥塞。

ECN是RFC 3168中定义的拥塞信令机制,首次发表于1999年,并在2001年左右定稿。ECN利用TCP报头中的两位和IP报头中的两位标记数据包(标记的意思是在头域中翻转一位)。

=>假设X让人给Z转交一封信。

=>X将信传递给中间人Y。

=>Y先看看自己忙不忙。

=>如果Y比较忙,就在信封的一角用钢笔做个十字记号,然后把信传给下一个人。

=>当Z收到信时,看到信封一角有十字标记,就知道其中一个中间人现在比较忙。

=>Z沿原路径给发送方X发送ACK, ACK信封上带有相同的标记。看到这个标记,X就知道发生了拥塞。

ECN可以与AQM算法一起使用。AQM算法在链路拥塞时会主动丢弃数据包,但如果不是丢包,而是可以标记,那就太好了。由于ECN不会丢弃数据包,从而避免了重传,这就是为什么ECN算法今天非常流行。目的只是让发送方知道路由器发生了拥塞,所以如果可以通过ECN告诉发送方,为什么要丢包呢?此外,丢包没法让发送方立马知道发生了拥塞,而这对于时间敏感型数据包非常重要,因为这种类型的流量不高。

为了使用ECN机制,发送方、接收方和中间的路由器必须全部支持ECN功能。目前,ECN可以在所有操作系统中实现,比如手机、服务器、笔记本电脑,包括路由器等中间设备。但默认情况下是禁用的,原因不是ECN有什么问题,而是因为ECN与AQM算法一起部署,而由于参数配置的原因,AQM并不太受欢迎。

TCP报头中的ECN位:

alt
alt

ECN在TCP头中占用2位,分别是CWR和ECE,注意两者的顺序。

  • CWR: Congestion Window Reduced,拥塞窗口减少标志
  • ECE: Echo of Congestion Encountered,拥塞响应

这2位有4种可能组合,每种组合被称为码点(codepoint)。

ECN TCP报头中的码点:

CWRECE码点发送自目标
100Non-ECN set up任意任意
201ECN Echo接收方发送方
310Congestion window reduced发送方接收方
411ECN Setup发送方接收方
  • [0 0]为非ECN设置码点,收发双方都可以发送。X发送给Y这个代码点的意思是X告诉Y它不支持ECN。
  • [0 1]为ECN Echo码点,由接收方发送给发送方。如果发送方告诉接收方他支持ECN,接收方会告诉发送方自己是否支持ECN。如果接收方支持ECN,那就用这个码点回复。此外,接收方告诉发送方拥塞时也使用此码点。因此这个码点有两种用法。
  • [1 0]为CWR码点,由发送方发送给接收方。此码点用作从发送方发送到接收方的确认,用于告诉接收方,它知道发生了拥塞,已经减小了拥塞窗口大小。
  • [1 1]为ECN设置码点,由发送方发送给接收方,告知发送方支持ECN。

ECN协商:

alt
  • 第一步: 发送方发送带有ECN设置码点(CWR=1, ECE=1)的SYN包,告诉接收方它支持ECN。在通过三次握手建立TCP连接时,这些信息总是以SYN包的形式传递,而接收方也必须回复ECN的状态。
  • 第二步: 如果接收方支持ECN,就发送ECN Echo码点(CWR=0, ECE=1),表示接收方也启用了ECN。假设接收方不支持ECN,那么回复非ECN设置码点(CWR=0, ECE=0),表示没有启用ECN。
  • 第三步: 现在,发送方和接收方已经交换了ECN信息,可以像正常一样发送数据。

如果发送方和接收方都支持ECN,并且都标记而不是丢弃数据包。但由于路由器不能读取TCP报头,只能读取IP报头,因此在IP报头中也用2位来通知路由器有关ECN的信息。

IP报头中的ECN位:

alt
alt

路由器需要运行AQM并标记数据包,因此必须知道发送方和接收方是否启用了ECN。由于路由器不能访问TCP报头,所以在IP报头中增加了2位作为ECN码点。

第一位被称为ECT(ECN Capable Transport),第二位被称为CE(Congestion Encountered)。同样会有四个码点,但和之前介绍的不太一样。

IP报头中的ECN码点:

ECTCE码点发送自目标
100Non-ECT任意任意
201ECT(1): ECN Capable Transport发送方接收方
310ECT(0): ECN Capable Transport发送方接收方
411CE: Congestion Experienced路由器接收方
  • [0 0]表示非ECT,意思是数据包不支持ECN,因此没有必要标记该数据包。如果有拥塞,那么这个数据包必须被丢弃。
  • [0 1]是ECT(0)码点,表示数据包支持ECT。
  • [1 0]为ECT(1)码点,也表示数据包支持ECT。如果数据包是ECT(0)或(1),那么这个数据包将不会被路由器丢弃,而只是会被标记。
  • [1 1]为CE码点。当路由器拥塞并且数据包支持ECT时,路由器将该数据包标记为CE。路由器将翻转ECT码点的0位,使其成为CE。路由器不丢包,而只是标记并将其传输给接收者。

你好,我是俞凡,在Motorola做过研发,现在在Mavenir做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI等技术始终保持着浓厚的兴趣,平时喜欢阅读、思考,相信持续学习、终身成长,欢迎一起交流学习。为了方便大家以后能第一时间看到文章,请朋友们关注公众号"DeepNoMind",并设个星标吧,如果能一键三连(转发、点赞、在看),则能给我带来更多的支持和动力,激励我持续写下去,和大家共同成长进步!

参考资料

[1]

What is ECN(Explicit Congestion Notification)?: https://www.geeksforgeeks.org/what-is-ecnexplicit-congestion-notification

- END -

本文由 mdnice 多平台发布

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

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

相关文章

是否有 Python 编码标准或风格指南?

有的。 标准库模块所要求的编码风格记录于 PEP 8 之中。

PostgreSql 字符串匹配

一、概述 PostgreSQL 提供了三种独立的实现模式匹配的方法:SQL LIKE 操作符、更近一些的 SIMILAR TO 操作符(SQL:1999 里添加进来的)和 POSIX 正则表达式。虽然大部分的正则表达式搜索都能被很快地执行,但是正则表达式仍可能被人为…

黑苹果之主板篇

一、什么是主板 主板,又叫主机板(mainboard)、系统板(systemboard)、或母板(motherboard),是计算机最基本的同时也是最重要的部件之一。主板一般为矩形电路板,上面安装了…

Zabbix自动发现机制

Zabbix的自动发现机制 Zabbix客户端主动的和服务端联系,将自己的地址和端口发送服务端,实现自动添加监控主机,客户端是主动的一方缺点自定义网段中主机数量太多,等级耗时会很久,而且这个自动发现机制不是很稳定 Zabb…

06 硬件知识入门(MOSS管)

1 简介 MOS管和三极管的驱动方式完全不一样,以NPN型三极管为例,base极以小电流打开三极管,此时三极管的集电极被打开,发射极的高电压会导入,此时电流:Ic IbIe ;电压:Ue>Uc>Ub…

看好美国跨境电商平台Etsy的三个理由

来源:猛兽财经 作者:猛兽财经 不可否认,最近的经济低迷给美国跨境电商平台Etsy(ETSY)的增长带来了一些麻烦。虽然Etsy第三季度营收同比增长了7%,但其商品总量仅增长了1%。如果没有有利的汇率,Etsy的销售额基本上会与前…

中山大学李华山、王彪课题组开发 SEN 机器学习模型,高精度预测材料性能

内容一览:了解全局晶体对称性并分析等变信息,对于预测材料性能至关重要,但现有的、基于卷积网络的算法尚且无法完全实现这些需求。针对于此,中山大学的李华山、王彪课题组,开发了一款名为 SEN 的机器学习模型&#xff…

如何战胜拖延?

来源:《终结拖延症》——(美)威廉克瑙斯 一、常见的影响最大的三种拖延症 (1)第一种拖延症:期限性拖延症 这种拖延症的症状主要是会让你觉得时间还早,然后愉快的玩手机、刷机、打游戏&#xf…

堆栈,BSS,DATA,TEXT

一、目标文件 首先目标文件的构成,Linux下就是.o 文件 编译器编译源码后生成的文件叫目标文件(Object File)。 目标文件和可执行文件一般采用同一种格式,这种存储格式为 ELF。 目前文件的内容至少有编译后的机器指令代码和数据&a…

cocos creator “TypeError: Cannot set property ‘string‘ of null

背景: 学习cocos creator时遇到"TypeError: Cannot set property string of null" 错误。具体代码如下:property({ type: Label })public stepsLabel: Label | null null;update(deltaTime: number) {this.stepsLabel.string Math.floor(…

搜索推荐技术-爱奇艺搜索引擎技术

一、爱奇艺的搜索引擎框架示意图 即通过召回系统,即基于文本匹配的matching system,得到大量视频资源的候选集,经过粗排和精排,最后返回给用户。重点在于召回模块和排序模块。 二、召回模块 召回模块比较重要的是基础相关性&am…

对数据库关系代数中除法运算的理解

一、基本概念 1.象集 给定一个关系R(X,Z),X和Z为属性组,当t[X]x时,x在R中的象集定义为: Z x { t [ Z ] ∣ t ∈ R , t [ X ] x } Z_x\{t[Z]|t\in R,t[X]x\} Zx​{t[Z]∣t∈R,t[X]x} 表示R中属性组X上值为x的诸元组在Z上分量的…

单片机学习13——串口通信

单片机的通信功能: 实现单片机和单片机的信息交换,实现单片机和计算机的信息交换。 计算机通信是指计算机与外部设备或计算机与计算机之间的信息交换。 通信有并行通信和串行通信两种方式。 在多微机系统以及现在测控系统中信息的交换多采用串行通信方…

C++ 多线程 atomic

如有两个线程,对一个变量进行操作,一个线程读这个变量的值,一个线程往这个变量中写值。即使是一个简单变量的读取和写入操作,如果不加锁,也有可能会导致读写值混乱(一条语句可能会被拆成3、4条汇编语句来执…

网络机房的功能有哪些?

网络机房的功能主要包括: 信息存储和管理:机房作为信息系统的核心,需要提供可靠的存储和管理能力,包括服务器、存储设备、备份系统等硬件设备,以及数据备份、数据迁移、容灾等管理方法和技术。网络连接和通信&#xf…

微信公众号的服务器验证方法

服务器上的操作: 将下面的wx.py文件放在服务器上,运行python3 wx.py 80 # -*- coding: utf-8 -*- # filename: main.py import web import handle import hashlibclass WeChatHandler(object):def GET(self):data web.input()if len(data) 0:return &…

汽车软件大时代,如何提升软件工程创新力?

当前,传统汽车产业正加速数字化转型,“软件定义汽车”不断深化。在电动化、智能化和网联化趋势下,汽车软件已经成为汽车技术革新和发展的核心驱动力之一。根据亿欧智库发布的《2023中国智能电动汽车车载软件市场分析报告》,2022年…

java中SPI是什么?

在Java中,SPI(Service Provider Interface)是一种面向接口编程的机制,用于在运行时动态加载实现某一接口的类。SPI机制允许开发者定义服务接口,然后为这个接口寻找实现类,并在运行时动态加载它们&#xff0…

Tomcat主配置文件(server.xml)详解

前言 Tomcat主配置文件(server.xml)是Tomcat服务器的主要配置文件,文件位置在conf目录下,它包含了Tomcat的全局配置信息,包括监听端口、虚拟主机、安全配置、连接器等。 目录 1 server.xml组件类别 2 组件介绍 3 se…

Dockerfile与Docker网络

一、Dockerfile 1、概念: Dockerfile是用来构建docker镜像的文本文件,是由构建镜像所需要的指令和参数构建的脚本。 2、构建步骤: ① 编写Dockerfile文件 ② docker build命令构建镜像 ③ docker run依据镜像运行容器实例 Dockerfile …