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,一经查实,立即删除!

相关文章

黑苹果之主板篇

一、什么是主板 主板,又叫主机板(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…

堆栈,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——串口通信

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

网络机房的功能有哪些?

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

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 …

信号完整性分析

目录 前言一、信号完整性SI1.1 信号失真1.2 串扰1.3 衰减 二、电源完整性PI2.1 地弹2.2 电源轨道塌陷 三、电磁兼容EMC3.1 电磁辐射3.2 抗干扰 前言 本篇介绍信号完整性分析的知识体系,以及部分分析方法。   什么是信号完整性?通俗来讲,信号在互连线的…

ProEasy机器人案例:电池边包胶

如下图所示,对一个电池三边包边,因客户现场有很多规格电池的大小,所以就需要建立动态的工具坐标来实现适配所有种类的电池 程序如下:Ddome程序 function Speed(num) --速度设置 MaxSpdL(2000) --movl最大速度…

如何使用 Docker 安装 Node-RED

安装 Node-RED 使用 Docker 是一种简便的方式,以下是基本的步骤: 安装 Docker: 确保已在系统上安装 Docker。可从 Docker 官方网站 或 Windows Docker 安装教程 获取安装指南。 拉取运行 Node-RED 镜像: 打开终端或命令行界面&am…

Matlab 点云对称性检测

文章目录 一、简介二、实现代码三、实现效果参考文献一、简介 这是一个很有趣的功能,它的思路其实与ICP算法的思路有些相似: 首先,它会初始化两个旋转角度,即绕x轴旋转与绕y轴旋转,初始的过程是将点对称(镜像)过去,计算与匹配点之间的距离误差,误差最小者为最优初始值…

Python 从入门到精通 学习笔记 Day02

Python 从入门到精通 第二天 今日目标 字符串基本操作、字符串序列操作、输入输出函数 字符串内置方法、运算符、练习之前学习的内容 一、字符串基本操作 在Python中,字符串的转义是指在字符串中使用特殊的字符序列来表示一些特殊字符。 在Python中,字…