跳到主要内容

5. 基于 Decent-Pull 的映射系统

基于 pull 的系统不要求 xTR 加入组播 group. 它对 ASCII EID 字符串使用 SHA-256 哈希, 并通过 DNS A/AAAA 记录标识哪些 xTR 充当 Map-Resolver 和 Map-Server.

关键哈希字符串和名称如下:

[<iid>]<eid>/<ml>
[<iid>]<group>/<gml>-<source>/<sml>

eid = "[<iid>]<eid>/<ml>"
index = hash.sha_256(eid) MOD mv

sg-eid = "[<iid>]<group>/<gml>-<source>/<sml>"
index = hash.sha_256(sg-eid) MOD mv

starg-eid = "[<iid>]<group>/<gml>-0.0.0.0/0"
index = hash.sha_256(starg-eid) MOD mv

<index>.map-server.example.com

对于组播条目, Hash Mask 必须包含字符串 "[]", 而不是字符串 . 对于 Map-Request 消息, xTR 可以在 A 和 AAAA 记录之间轮询 EID 查找请求.

运营者可以配置 ITR, 针对 EID 分配范围使用特定查找前缀长度. ITR 应该支持该配置, 应该检查是否匹配配置范围, 匹配时必须使用配置的查找前缀长度, 多个范围匹配时必须选择最长匹配的配置前缀. 构造哈希字符串时, ITR 必须屏蔽 lookup-length 之后的位.

EID 范围配置示例如下:

包含多个 EID 范围的示例配置:

EID 范围配置:
Range: [0]240.11.0.0/16 -> lookup-length: 24
Range: [0]240.12.0.0/16 -> lookup-length: 30
Range: [0]240.13.0.0/16 -> lookup-length: 25

查找示例:
EID [0]240.11.1.1/32 -> hash on [0]240.11.1.0/24
EID [0]240.12.2.5/32 -> hash on [0]240.12.2.4/30
EID [0]240.13.3.7/32 -> hash on [0]240.13.3.0/25
EID [0]240.14.1.1/32 -> hash on [0]240.14.1.1/32
(无匹配, 使用完整 EID)

部署示例如下:

以下是基于 Decent-Pull 的模型的部署示例. 假设为 Mapping System
预置了 4 个 Map-Server 集合. 因此, 分配 4 个不同的 DNS 名称,
并使用 Modulus Value 4. 每个 DNS 名称分配 Name Index 0 到 3:

0.map-server.lispers.net
1.map-server.lispers.net
2.map-server.lispers.net
3.map-server.lispers.net

每个名称的 A 记录可以分配如下:

0.map-server.lispers.net:
A <rloc1-att>
A <rloc2-verizon>
1.map-server.lispers.net:
A <rloc1-bt>
A <rloc2-dt>
2.map-server.lispers.net:
A <rloc1-cn>
A <rloc2-kr>
3.map-server.lispers.net:
A <rloc1-au>
A <rloc2-nz>

当 xTR 要注册 "[1000]fd::2222/128" 时, 它对 EID 字符串进行哈希,
例如产生哈希值 0x67. 使用模数值 4 (0x67 & 0x3) 会产生索引 0x3,
因此使用 DNS 名称 3.map-server.lispers.net, 并向 <rloc1-au>
和 <rloc2-nz> 发送 Map-Register.

注意, 基于 Decent-Pull 的方法可用于 core seed-group,
以引导注册了组播 group 的基于 Decent-Push 的 Mapping System.

实现应该定期执行 DNS lookup 以检测 A 记录是否变化. 所有 xTR 都需要使用相同的 Modulus Value, 否则 EID 可能被查到错误的 Map-Server set.