概览
向发布的路由器信息(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月)对发布的上限采取行动。