关于分布式路由表

分布式路由表 (DRT) 作为协作节点的网格存在,其中每个节点都是使用 DRT API 的应用程序的实例。 发布密钥的节点负责协助其他节点发布和解析密钥。 节点还可以以“仅解析”方式参与,这不需要它们协助对等方。 DRT 协议通过 UDP/IPv6 传输执行。

发布密钥的节点生成并维护网格中其他节点的本地路由表。 此路由表经过优化,以便节点可以通过在本地路由表中直接查找密钥或请求其他节点以数字方式发布靠近目标的密钥,从而快速找到网格中的特定键。 此操作将重复,直到找到所需的密钥或节点确定不存在此类密钥。

DRT 键是 256 位无符号整数。 键之间的接近性由它们之间的数字差定义。 DRT 键空间被视为循环键空间。 例如,第一个可能的键值和最后一个可能的键值被视为相邻键值。

在安全的 DRT 中,节点需要对发布的密钥进行身份验证。 初始化 DRT 时,必须使用 DRT API 设置节点对密钥进行身份验证的机制。 为此,为 DRT 选择安全提供程序。 安全提供程序是一个模块,可以生成用于对密钥进行身份验证的令牌,并验证其他节点生成的令牌。 它必须实现本文档中定义的安全提供程序接口。 Windows 7 DRT 附带两个完全实现的安全提供程序,可用于生成 Windows 应用程序。

在初始化期间,应用程序还必须为 DRT 提供启动提供程序。 启动提供程序是一个模块,可以检索 DRT 网格中已存在的节点的网络终结点,在建立新节点时由 DRT 调用。 与安全提供程序模块一样,启动提供程序必须实现定义完善的接口。 Windows 7 DRT 附带两个完全实现的自举提供程序。

DRT 将密钥的近邻视为特殊项。 五个最接近的键在数字上较小,五个最接近的键在数字上比已发布的键形式(称为叶集)大。 DRT 通过 DRT API 报告密钥的叶集的更改。

DRT 生命周期和状态转换

应用程序可以使用 DrtOpen 函数初始化本地 DRT 实例。 此函数触发引导过程,其中 DRT API 在启动提供程序上调用,以了解已参与 DRT 的其他节点的密钥和网络终结点。 如果启动提供程序成功找到至少一个其他节点,则 DRT 将进入DRT_ACTIVE状态。 在此状态下,应用程序可以搜索由其他节点发布的密钥,并且可以发布可解析的密钥。 如果启动提供程序无法成功找到其他节点,则 DRT 将进入DRT_ALONE状态。 DRT 将保持DRT_ALONE状态,并尝试定期启动,以便查找对等方并移动到DRT_ACTIVE状态。

节点可以从DRT_ACTIVE转换到这些状态。

生命周期状态 条件
DRT_ALONE 本地节点未在 DRT 中发现其他节点。 在此状态下,节点继续侦听 DRT 中的其他节点。
如果另一个节点加入 DRT,则本地节点将转换为DRT_ACTIVE状态。 如果网络关闭,它将转换为DRT_NO_NETWORK。 如果 DRT 出现严重错误,节点将转换为DRT_FAULTED状态。
DRT_NO_NETWORK 当节点失去网络连接时,它将转换为DRT_NO_NETWORK状态。 此时,应用程序可以等待网络连接恢复,并且可以关闭 DRT。
DRT_FAULTED 本地节点内发生严重错误。 例如,如果本地计算机耗尽了物理内存。
当节点进入此状态时,应用程序必须调用 DrtClose API,更正问题并使用 DrtOpen 重新初始化 DRT

使用分布式路由表 API

分布式路由表 API 参考