5分钟搞懂ECN

2024-02-23 04:40
文章标签 分钟 搞懂 ecn

本文主要是介绍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 多平台发布

这篇关于5分钟搞懂ECN的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

软件架构模式:5 分钟阅读

原文: https://orkhanscience.medium.com/software-architecture-patterns-5-mins-read-e9e3c8eb47d2 软件架构模式:5 分钟阅读 当有人潜入软件工程世界时,有一天他需要学习软件架构模式的基础知识。当我刚接触编码时,我不知道从哪里获得简要介绍现有架构模式的资源,这样它就不会太详细和混乱,而是非常抽象和易

CSP-J基础之数学基础 初等数论 一篇搞懂(一)

文章目录 前言声明初等数论是什么初等数论历史1. **古代时期**2. **中世纪时期**3. **文艺复兴与近代**4. **现代时期** 整数的整除性约数什么样的整数除什么样的整数才能得到整数?条件:举例说明:一般化: 判断两个数能否被整除 因数与倍数质数与复合数使用开根号法判定质数哥德巴赫猜想最大公因数与辗转相除法计算最大公因数的常用方法:举几个例子:例子 1: 计算 12 和 18

CSP-J基础之数学基础 初等数论 一篇搞懂(二)

文章目录 前言算术基本定理简介什么是质数?举个简单例子:重要的结论:算术基本定理公式解释:举例: 算术基本定理的求法如何找出质因数:举个简单的例子: 重要的步骤:C++实现 同余举个例子:同余的性质简介1. 同余的自反性2. 同余的对称性3. 同余的传递性4. 同余的加法性质5. 同余的乘法性质 推论 总结 前言 在计算机科学和数学中,初等数论是一个重要的基础领域,涉及到整数

JobScheduler 调用导致的运行时长30分钟的功耗问题

一、SDK 的使用情况与功耗影响 案例是否导致功耗变大onStartJob return true 且子线程没有调用jobFinished()告知系统功耗变大,最长带来30分钟的partial wakelock 长持锁onStartJob return true 且子线程调用jobFinished()告知系统功耗有影响,主要线程执行时长,标准是30秒内onStartJob return fals

【超简单】1分钟解决ppt全文字体一键设置

省流 ppt的全部字体需要在“幻灯片母版”里面,“自定义字体”去设置好标题与正文的字体之后才算全部设置完毕 “视图”---“幻灯片母版” 找到“字体”---“自定义字体” 设置好中文和西文的字体,都可以按照自己的选择来,保存即可 吐槽 之所以发这么一个基础的帖子是因为,之前全网到处搜都没看到成功设置了的,其实才发现在自定义里面得多一步这个才可以,还好早发现了,希望能

青云QingCloud SD-WAN 助你分钟级构建企业专属智能广域网络

广域网接入,多地组网,分支机构、数据中心与云端的高速互联已成为保证企业业务与经营活动全程在线的必备条件。 但这也往往意味着复杂漫长的专线网络部署,昂贵的价格,访问速度不可控,缺乏弹性……是不是听起来就头疼? 你需要的是一个跨时代的新服务,一键解决上述痛点。这就是今天要介绍的青云QingCloud SD-WAN 云网一体智能组网服务。 相比传统方案,该服务可帮助用户零部署接入动态多线 BG

【anaconda 环境搭建】环境搭建python快速30分钟

1、下载anaconda https://repo.anaconda.com/archive/index.html 选择下载 Anaconda3-2019.10-Linux-x86_64.sh 2、安装linux 工具4个,上传,下载,解压,打包 yum install zip yum install unzip yum install lrzsz Yum install wget 3、r

【Docker Mysql 安装】1分钟 快速安装mysql

为了能够快速安装mysql,我们使用docker 安装。 主要步骤如下: 1、安装docker,使用国内 daocloud 一键安装命令 curl -sSL https://get.daocloud.io/docker | sh开机自启动:systemctl enable docker启动服务:docker:systemctl start docker查看docker是否启动输入命令“p

【python 异步编程】10分钟快速入门aiohttp教程

无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。人工智能教程 一、先搞清楚什么是同步编程和异步编程? 同步编程:接到上峰指令:有两件事当天要处理完成,越快越好。那么同步是怎么工作呢,第一时间接到指令后,先处理第一件事情,等第一件事情做完了,再做第二件事情,通俗讲就是有点类似工