拥塞上限

Proposal 162
Open
Author dr|z3d, idk, orignal, zzz
Created 2023-01-24
Last Updated 2023-02-01
Target Version 0.9.59

概览

向发布的路由器信息(RI)中添加拥塞指标。

动机

带宽"上限"(能力)表明共享带宽限制和可达性,但不表明拥塞状态。 拥塞指标将帮助路由器避免尝试通过拥挤的路由器建立连接,这会导致更多拥塞和隧道构建成功率降低。

设计

定义新的上限来指示各种级别的拥塞或容量问题。这些将放在顶级RI上限中,而不是地址上限中。

拥塞定义

一般而言,拥塞意味着节点不太可能接收和接受隧道建立请求。 如何定义或分类拥塞级别是具体实现问题。

实现可以考虑以下一项或多项:

  • 达到或接近带宽限制
  • 达到或接近最大参与隧道数
  • 达到或接近一个或多个传输的最大连接数
  • 队列深度、延迟或CPU使用率超出阈值;内部队列溢出
  • 基础平台/操作系统的CPU和内存能力
  • 感知的网络拥塞
  • 网络状态如被防火墙、防对称NAT、隐藏或代理
  • 配置为不接受隧道

拥塞状态应基于几分钟内条件的平均值,而不是瞬时测量。

规范

更新 NETDB 如下:

D: 中度拥塞,或低性能路由器(如Android、树莓派)
     其他路由器应在配置文件中降低或限制此路由器的
     表面隧道容量。

  E: 高度拥塞,此路由器达到或接近某个限制,
     并拒绝或丢弃大多数隧道请求。
     如果此RI在过去15分钟内发布,其他路由器
     应严重降低或限制此路由器的容量。
     如果此RI超过15分钟,请按'D'处理。

  G: 此路由器临时或永久拒绝所有隧道。
     不要尝试通过此路由器建立隧道,
     直到收到没有'G'的新RI。

为了一致性,实施应在末尾添加任何拥塞上限(在R或U之后)。

安全分析

任何发布的节点信息都不可信。 上限,与路由器信息中的其他内容一样,可能会被伪造。 我们从不使用路由器信息中的任何内容来提高路由器的感知容量。

发布拥塞指标,告诉节点避免此路由器,天生比允许或容量指标引诱更多隧道要安全得多。

当前的带宽容量指标(L-P,X)仅可信用于避免非常低带宽的路由器。“U”(不可达)上限具有类似效果。

任何发布的拥塞指标应与拒绝或丢弃隧道构建请求具有相同效果,并具有类似的安全属性。

注释

节点不得完全避免’D’路由器,只需要降低其等级。

必须注意不要完全避免’E’路由器,因此当整个网络处于拥塞状态并发布’E’时,不会完全崩溃。

路由器可以采用不同的策略来决定通过’D’和’E’路由器构建何种类型的隧道,例如探索性隧道与客户端隧道,或高带宽与低带宽客户端隧道。

除非网络状态未知,路由器在启动或关闭时不应默认发布拥塞上限,以防止节点通过重新启动检测到路由器。

兼容性

没有问题,所有实现忽略未知的上限。

迁移

实现可随时添加支持,无需协调。

初步计划: 在0.9.58(2023年4月)发布上限; 在0.9.59(2023年7月)对发布的上限采取行动。

参考资料