惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Security Archives - TechRepublic
Security Archives - TechRepublic
博客园 - 三生石上(FineUI控件)
云风的 BLOG
云风的 BLOG
C
Check Point Blog
Engineering at Meta
Engineering at Meta
Y
Y Combinator Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Forbes - Security
Forbes - Security
IT之家
IT之家
L
LINUX DO - 最新话题
N
News and Events Feed by Topic
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
雷峰网
雷峰网
N
News | PayPal Newsroom
The Last Watchdog
The Last Watchdog
V
Visual Studio Blog
月光博客
月光博客
Microsoft Azure Blog
Microsoft Azure Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Webroot Blog
Webroot Blog
TaoSecurity Blog
TaoSecurity Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Schneier on Security
Schneier on Security
P
Privacy International News Feed
G
Google Developers Blog
博客园 - 聂微东
博客园 - 叶小钗
M
MIT News - Artificial intelligence
Apple Machine Learning Research
Apple Machine Learning Research
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
WordPress大学
WordPress大学
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Simon Willison's Weblog
Simon Willison's Weblog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
宝玉的分享
宝玉的分享
H
Hacker News: Front Page
Martin Fowler
Martin Fowler
L
Lohrmann on Cybersecurity
G
GRAHAM CLULEY
酷 壳 – CoolShell
酷 壳 – CoolShell
罗磊的独立博客
T
The Exploit Database - CXSecurity.com
S
Security @ Cisco Blogs
博客园_首页
AWS News Blog
AWS News Blog
P
Proofpoint News Feed
人人都是产品经理
人人都是产品经理
Help Net Security
Help Net Security
Google DeepMind News
Google DeepMind News
T
Threatpost

Peng's Blog

Vibe paper不负责指北 SPFC参考文献阅读《CONGA》 读《Uno:数据中心间和数据中心内拥塞控制与可靠连接的一站式解决方案》 Lenovo Legion Y9000P 在 Linux 下只有 30W:从现象、WMI 到驱动补丁 理解《From ATOP to ZCube》中的ZCube网络拓扑 集合通信原语学习 Zotero在Wayland下侧边栏无法拖动的解决办法 我读的第一篇论文--NSDI_26_CAVER 在archlinux下使用万象拼音实现更智慧的中文输入法 Traefik实现单Docker容器托管多个静态网站 Pengs.top浴火重生!备案、服务器迁移与全站Docker化 严谨与温度并存:北航宋友老师程设课的学习感悟 Android Studio全流程换源指南 解决linux系统下pipewire作为音频服务器持续播放声音中断问题 在ThinkBook 16+ 2025上安装archlinux驯服记录【基本信息与触摸板修复】 「行云流水」在挂载移动硬盘时自动启动Syncthing开始同步的丝滑体验 自建图床和PicGo闹不愉快?干脆自己写个脚本,深度整合到KDE右键菜单! btrfs各压缩等级速率测试脚本,选择最适合你的压缩级别 别当冤大头,Adobe全家桶破解源头方案:修图剪辑不求人,盗版网站也得从你这儿进货! 轻松配置aria2下载器,通过systemd设置开机自启并与浏览器集成 Git Commit 规范指南
再读CAVER
Pengbo · 2026-04-11 · via Peng's Blog

方法

使用ACK包来携带路径和拥塞情况

和以往做法的差别

以往的做法在主机上处理ACK包,受限于已有流的数量。ACK包实际上会穿过大部分的链路,如果有交换机的支持,到同一目的地的不同流可以共享信息,能更有效地发现路径。

CAVER组成

路径信息的收集(非ToR)

CAVER可以在交换机上共享多个流的信息,这一交流允许我们探测包实际没有经过的路径的拥塞程度通过将每跳之间的信息进行组合拼接

三张表:

  1. DRETable按端口存拥塞度
  2. BestTable将IP映射到最佳路径
  3. GoodTable将IP映射到可接受路径

拥塞程度计算

CE32-bit Discounting Rate EstimatorDRE计算

DRE是累加端口发出数据大小,定时乘以小于1的系数来衰减

$$CE = \frac{DRE}{C} \times 255$$

C是链路带宽,最终会得到带宽利用率

BestTable存储

  • Path: 32位,记录出向端口,每个8位,三层胖树足够。

  • CE:8位

  • Time: 32位,最后更新时间

信息传递(Give-and-Take)

一个ACK包携带当前经过的路径和CE,ACK是ECMP的,所以路径选择多,用Give-and-Take策略与交换机交换拥塞信息,交换机与本地信息比较来维护BestTable和GoodTable

存储的时候Acceptable Path也只存一条

ACK包进来,看携带的路径,如果是不可接受的,先用best path换掉,再和good table交换。如果是可接受的,不用best path替换,而是直接和good table的path交换。这样ack中信息的交换更频繁,并且用best path进行替换的过程也保证了不会传播垃圾信息。

找Acceptable Path

255减去CE(代表占用率),乘上一个系数,大于这个值的认为可以接受

选路(ToR)

选路时,不能像HULA那样只考虑一个流最优,需要多条可接受路径。

信息的来源是ToR,集合了最好路径和可接受路径。

维护四张表:

  1. DRETable 同上
  2. BestTable 同上
  3. PathTable 为每个目的地存储K个可接受路径
  4. FlowTable 根据flowId存下为每个流选了什么路

FlowTable的存储

  • 五元组哈希:16位
  • 选路还是ECMP:1位
  • 路径选择:32位

ToR如何处理ACK

发送方:带上CE然后ECMP

接收方:看看BestTable要不要更新,如果Good Path可接受,就加到PathTable

发送数据

首先检查是不是老流。这里用了FlowId作为索引的位数组,对应1/0标识

由于PathTable基于目标路由存储,所以就算哈希冲突,不过是走了旧路,不会发错。

为了缓解哈希碰撞,位数组有老化机制

新流的话,选路结果会写入包头

路径选择原则:

  • 不要重复
  • 新路优先

选路时,每张PathTable(对应一个目标),用topcounter来实现循环存储。选路时会检查添加时间有没有比阈值旧,太老的话会ECMP

阅读参考

很好的网络架构介绍

DCQCN(数据中心量化拥塞通知) 是运行在服务器网卡之间的端到端传输层拥塞控制算法,它通过ECN标记和CNP通知包让发送端“快降慢升”地调节速率,从源头消除拥塞。

PFC(优先级流量控制) 是运行在相邻交换机之间的逐跳链路层反压机制,它通过PAUSE帧直接暂停上游设备发送,用“急刹车”的方式防止缓冲区溢出丢包。

过往的负载均衡研究

CONGA(2014)

需要专用硬件

  • 粒度:流
  • 乱序:避让,在数据流的空闲间隙换路(不适用于RDMA)

方法:包头加路径和CE拥塞标签,Spine队列深度超过阈值,将CE更新,下游Leaf收到,用ACK向原发送端,原发送端存入表中记录该路径拥塞情况。原Leaf要记录通往一个目的地的多个路径的拥塞情况

HULA(2016)

每一跳记录通往目标的最佳下一跳

  • 粒度: 流
  • 乱序:避让,在数据流的空闲间隙换路(不适用于RDMA)

正向探测包发过去,每一跳检查本地队列深度,更新拥塞率,反向回来的时候更新路径上的每一跳

ConWeave(2023)

适用于RDMA

路径是由ECMP生成的,因为是二层Spine-Leaf,路径少。

注:CAVER设定考虑三层Fat-Tree

  • 探测:定时从流中选取包打上RTT_REQUEST,在超时时间里没有拿到RTT_REPLY将这条路放进黑名单。目标ToR收到ECN则通知上游,上游也将其设为不可用
  • 选新路:在备选路径里选两条,只要有一条不在黑名单,就用它
  • 防止乱序:要换新路的时候,旧路径最后一个包打上标签,新路径新包打上新标签,目的ToR收到旧流最后一个包之前先把新流的包存下,之后再恢复。