5 分钟搞懂 ECN

简介: 5 分钟搞懂 ECN

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


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 位:




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


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


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


ECN TCP 报头中的码点:



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


ECN 协商:



  • 第一步: 发送方发送带有 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 位:




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


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


IP 报头中的 ECN 码点:



  • [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

目录
相关文章
|
Web App开发 存储 缓存
RDMA优化整理(一)
简要的介绍了下RDMA的背景,并给出了一些RDMA编程优化技巧
4917 1
RDMA优化整理(一)
|
网络协议 算法 Ubuntu
BBR一键安装脚本 BBR/魔改/暴力/BBRplus/锐速(Lotsever)
BBR是 Google 提出的一种新型拥塞控制算法,可以使 Linux 服务器显著地提高吞吐量和减少 TCP 连接的延迟
74155 5
BBR一键安装脚本 BBR/魔改/暴力/BBRplus/锐速(Lotsever)
|
网络协议 网络性能优化 数据中心
什么是显式拥塞通知ECN?
【4月更文挑战第23天】
1609 0
什么是显式拥塞通知ECN?
|
算法
以太网CSMA/CD协议:通信原理、碰撞检测与退避机制深度解析
以太网CSMA/CD协议:通信原理、碰撞检测与退避机制深度解析
2497 1
|
机器学习/深度学习 人工智能 SDN
《重塑数据中心网络架构,迎接人工智能算力浪潮》
在人工智能快速发展的背景下,数据中心作为算力核心,其网络架构优化至关重要。传统三层架构因延迟高、扩展性差已难以满足AI需求。叶脊架构通过扁平化设计减少延迟并提升扩展性,高速网络技术(如100Gbps/400Gbps以太网)提供更大带宽,SDN与网络虚拟化实现灵活资源分配,优化流量管理进一步提高效率。未来,量子通信和边缘计算等技术将推动数据中心网络持续演进,助力AI算力提升,为社会带来更多变革。
633 9
|
存储 安全 Android开发
探索Android系统的最新安全特性
在数字时代,智能手机已成为我们生活中不可或缺的一部分。随着技术的不断进步,手机操作系统的安全性也越来越受到重视。本文将深入探讨Android系统最新的安全特性,包括其设计理念、实施方式以及对用户的影响。通过分析这些安全措施如何保护用户免受恶意软件和网络攻击的威胁,我们希望为读者提供对Android安全性的全面了解。
|
缓存 人工智能 算法
Nvidia_Mellanox_CX5和6DX系列网卡_RDMA_RoCE_无损和有损_DCQCN拥塞控制等技术简介-一文入门RDMA和RoCE有损无损
Nvidia_Mellanox_CX5和6DX系列网卡_RDMA_RoCE_无损和有损_DCQCN拥塞控制等技术简介-一文入门RDMA和RoCE有损无损
4429 0
|
机器学习/深度学习 人工智能 数据处理
【AI系统】NV Switch 深度解析
英伟达的NVSwitch技术是高性能计算领域的重大突破,旨在解决多GPU系统中数据传输的瓶颈问题。通过提供比PCIe高10倍的带宽,NVLink实现了GPU间的直接数据交换,减少了延迟,提高了吞吐量。NVSwitch则进一步推动了这一技术的发展,支持更多NVLink接口,实现无阻塞的全互联GPU系统,极大提升了数据交换效率和系统灵活性,为构建强大的计算集群奠定了基础。
1487 4
|
存储 网络协议 大数据
一文读懂RDMA: Remote Direct Memory Access(远程直接内存访问)
该文档详细介绍了RDMA(远程直接内存访问)技术的基本原理、主要特点及其编程接口。RDMA通过硬件直接在应用程序间搬移数据,绕过操作系统协议栈,显著提升网络通信效率,尤其适用于高性能计算和大数据处理等场景。文档还提供了RDMA编程接口的概述及示例代码,帮助开发者更好地理解和应用这一技术。
|
存储 安全 Java
【事故】记一次意外把公司项目放到GitHub并被fork,如何使用DMCA下架政策保障隐私
在一次意外中,作者因三年前将测试代码遗忘在GitHub上而遭遇了代码被他人fork的问题。为解决这一危机,作者详细介绍了如何通过GitHub的DMCA下架通知流程安全删除敏感代码,包括处理私人信息和商标侵权的具体步骤。本文不仅提供了实用的操作指南,还强调了及时响应的重要性,帮助读者避免类似风险
730 1
【事故】记一次意外把公司项目放到GitHub并被fork,如何使用DMCA下架政策保障隐私