本页内容
BIER 转发
概述
BIER 转发基于 BIER 标头中的比特字符串。位字符串中设置的每个位代表一个 BFER(BIER 转发出口路由器),它应该接收组播数据包。该位由分配给每个 BFER 或 BFIR 的唯一 BFR-ID 映射而成。请注意,既不是 BFIR 也不是 BFER 的中转 BIER 转发路由器 (BFR) 不会分配 BFR-ID。
BFR 使用传入 BIER 数据包的位串中集合位的索引来查找 BIER 转发表 (BIFT)。由于位串中设置的每个位都对应一个特定的 BFR,因此转发 BFR 能够确定数据包应转发到的邻接方。
BIFT 是通过计算如何在 IGP 路由底层(例如拓扑)中到达每个 BFER 来创建的。一个拓扑可以有多个 BIER 子域,但一个子域只与一个拓扑相关联。BFR 可能属于多个子域,并且对不同的子域具有不同的 BFR-ID。
当 BFER 数量大于 BSL 时,将发送多个副本,每组 BFER 一个副本。每个副本(对于不同的 BFER 集)使用不同的 BIFT 进行转发,因为不同副本中的相同位用于不同的 BFER(例如,考虑到 BitStringLength 为 256 位,copy-1 中的 bit-1 用于 BFER 1,但 copy-2 中的 bit-1 用于 BFER 257)。
在 MPLS 数据平面内 BIER 报头的开头插入一个 MPLS 标签,以指示 BIER 报头即将紧随其后。
此 BIER 标签还标明了用于转发数据包的 BIFT。
路由协议扩展用于发出封装信息(如 BIER 标签)的信号,并计算 BFR 支持的所有<子域、BitStringLength、集>元组的 BIFT。BIER 信息附加到 BFR 前缀(即环路地址)的路由播发。
当为<子域 BitStringLength>元组计算到 BFER 前缀的路由时,将向相应的 BIFT 添加一个条目,其键为 (BFR-ID % BitStringLength),下一跃点信息为 <下一跳邻居,<子域的邻居的 BIER 标签,BitStringLength,set>,邻居的 F-BM>。邻接方的 F-BM 是该邻接方到达的此集中所有 BFER 位的逻辑 OR。
让我们以一个由六个 BFR(A、B、C、D、E 和 F)组成的简单网络拓扑为例来说明这个概念。
其中,路由器 A、D、E 和 F 充当边缘路由器,即 BFER 或 BFIR。每个都分配了一个唯一的 BFR-ID:1 表示 D,2 表示 F,3 表示 E,4 表示 A。BSL(bitstringlength)设置为 4 位,SI(Set-ID)当前为 0。所有 BFRS 都属于子域 32。
这些 BFR-ID 中的每一个都映射到 4 位字符串中的位。这转化为以下任务:
路由器 D:0:0001
路由器 F:0:0010
路由器 E:0:0100
路由器 A:0:1000
其余 BFR(B 和 C)是过境 BFR,未分配 BFR-ID。
当 BFR A 使用位串 0111 向 BFR B 发送 BIER 数据包时,BFR B 确定该数据包是为 BFR E、F 和 D 发送的。BFR B 随后将同一数据包的两个副本发送,一个发送到 BFR E,另一个发送到 BFR C。发送到 BFR C 的副本将带有更新的位字符串 0011,该字符串对应于 BFR D 和 F。当数据包到达 BFR C 时,它决定将数据包的一个副本发送到 BFR D,另一个副本发送到 BFR F。
此转发决策基于 BFR B 的 BIFT。
请注意,BIFT 列出了可以访问 BFR A、D、E 和 F 的 BFR 邻接方。F-BM 是 BFR 邻接方的属性,它表示可通过该邻接方访问的所有 BFER。例如,BFR 邻居 C 的 F-BM 为 0011,这意味着 BFR C 可以覆盖 BFER D 和 F。路由器 D 的 F-BM 为 0001,BFR F 的 F-BM 为 0010。BFR C 的 F-BM 是该邻接方 0011 到达的此集中所有 BFER 位的逻辑“OR”。
BIFT 路由查找
使用上面的相同示例,当 BFR A 使用位串 0111 向 BFR B 发送 BIER 数据包时,BFR B 使用在传入位串(最右侧位)中设置的最低位的索引来查找 BIFT。路由表中的第一个条目(索引 1)与查找匹配,这意味着应将 BIER 数据包转发到 F-BM 为 0011 的 BFR 邻接方 C。BFR B 将副本连同更新的位字符串 0011 一起发送到 BFR C,这是传入位字符串和 BFR C 的 F-BM 的逻辑“AND”。
接下来,BFR B 使用 BFR C 的 F-BM 清除传入位串中的一些位,并使用生成的位串中最低设置位的索引来查找 BIFT。表查找结果为具有 F-BM 0100 的 BFR 邻接方 E。BFR B 使用更新的位字符串 0100 向 BFR E 发送副本,这是传入位字符串和 BFR 邻居 E 的 F-BM 的逻辑“AND”作。
此过程一直持续到传入位字符串全部为零为止。
MVPN 中的 BIER 转发
让我们举一个示例来说明通过 MVPN 隧道的数据包流。
在 PE1(入口)上:
发出 show mvpn instance vrf1 命令以显示提供程序隧道 vrf1 信息。
user@routerPE1> show mvpn instance vrf1
MVPN instance:
Instance : vrf1
MVPN Mode : SPT-ONLY
Sender-Based RPF: Disabled. Reason: Not enabled by configuration.
Hot Root Standby: Disabled. Reason: Not enabled by configuration.
Provider tunnel: I-P-tnl:BIER: subdomain-id 10 bfr-id 1 label 990001
Neighbor Inclusive Provider Tunnel Label-In St Segment
10.2.2.2 BIER: subdomain-id 10 bfr-id 2 bier-prefix 10.2.2.2 990001
10.3.3.3 BIER: subdomain-id 10 bfr-id 3 bier-prefix 10.3.3.3 990001
10.4.4.4
C-mcast IPv4 (S:G) Provider Tunnel Label-In St FwdNh Segment
172.11.21.21/32:232.252.1.1/32 BIER: subdomain-id 10 bfr-id 1 label 990001 RM M-8169
172.11.21.21/32:232.252.1.2/32 BIER: subdomain-id 10 bfr-id 1 label 990001 RM M-8169
172.11.21.21/32:232.252.2.1/32 BIER: subdomain-id 10 bfr-id 1 label 990001 RM M-8169
172.11.21.21/32:232.252.2.2/32 BIER: subdomain-id 10 bfr-id 1 label 990001 RM M-8169
发出 show multicast route extensive instance vrf1 display-tunnel-name 和 show mvpn instance vrf1 display-tunnel-name 以查看 BIER 隧道的名称。
包容性隧道有两个 MVPN 邻接方,10.2.2.2 的 BFR-ID 为 2,10.3.3.3 的 BFR-ID 为 3。因此,设置了位 2 和 3。邻居 10.4.4.4 未通告任何隧道,因此不予考虑。
通过发出set routing-instances routing-instance-name vrf-table-label static label语句对标签990001进行静态配置。
在 FBM 中,对于 256 字节的位字符串长度存在 8 个值,用 “:” 分隔,每个值表示 32 个 BFIR/BFER。
发出命令以 show multicast route instance vrf1 extensive 查看组播路由信息。
user@routerPE1> show multicast route instance vrf1 extensive Instance: vrf1 Family: INET Group: 232.252.1.1 Source: 172.11.21.21/32 Upstream interface: et-0/0/10.1 Downstream interface list: Push 990001, BS:0:0:0:0:0:0:0:00000006, label 16 Number of outgoing interfaces: 1 Session description: Source specific multicast Statistics: 0 kBps, 1 pps, 44 packets Next-hop ID: 8169 Upstream protocol: MVPN Route state: Active Forwarding state: Forwarding Cache lifetime/timeout: forever Wrong incoming interface notifications: 0 Uptime: 01:26:43 ......trimmed
到达 VRF 的数据包(172.11.21.21、232.252.1.1)与上述路由匹配。首先施加标签990001,以便出口 PE 在移除 BIER 标头时可以找到对应的 VRF。然后,使用位字符串 0:0:0:0:0:0:0:0:0:00000006 和 BIER 标签 16 强加 BIER 报头,此 BFIR 为提供商隧道的子域播发该标签。然后将结果视为从另一个 BFR 接收的 BIER 数据包。
在本地 mpls.0 表中查找标签 16。发出 show route table mpls.0 protocol bier label 16 extensive 命令以查看所查找的 BIFT。
user@routerPE1> show route table mpls.0 protocol bier label 16 extensive mpls.0: 26 destinations, 26 routes (26 active, 0 holddown, 0 hidden) 16 (1 entry, 1 announced) TSI: KRT in-kernel 16 /52 -> {[6025]} Opaque data client: BIER Opaque data: TLV type:32820 APP flag:0x80 Address: 0x56026719ae20 Opaque-data reference count: 24 Stats ID Group: Kernel ID = 4097, Stats IDs = { 4026531842 } *BIER Preference: 70 Next hop type: Multicast (IPv4) Composite, Next hop index: 6025 Address: 0x560263988dc4 Next-hop reference count: 2, key opaque handle: 0x560269c537a0 Nexthop key opaque app data dump: TLV Type:32776, :bier-10-0.bier.0, Num of entries:256, 1-3, 2-8091, 3-8103, 4-8092 Kernel Table Id: 0 State: <Active OpaqueData> Local AS: 200 Age: 1:49:17 Validation State: unverified Task: bier global task Announcement bits (1): 1-KRT AS path: I Statistics - Packets: 0, pps: 0, Bytes: 0 Stats ID Group: Kernel ID = 4097, Stats IDs = { 4026531842 } Thread: junos-main
在 BIFT :bier-10-0.bier.0 及其对应的推送标签中查找 BFR-ID 2 和 BFR-ID 3,并确定下一跃点。发出 show route table :bier-10-0.bier.0 命令以查看此下一跃点信息。
user@routerPE1> show route table :bier-10-0.bier.0
:bier-10-0.bier.0: 4 destinations, 4 routes (4 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
1/16
*[BIER/70] 01:56:21
to table mpls.0
2/16
*[BIER/70] 01:51:14
> to 10.1.2.2 via et-0/0/11.0, Push 16
to 10.1.2.2 via et-0/0/25.0, Push 16
3/16
*[BIER/70] 01:51:06
> to 10.1.2.2 via et-0/0/11.0, Push 16
to 10.1.5.5 via et-0/0/9.0, Push 16
to 10.1.2.2 via et-0/0/25.0, Push 16
4/16
*[BIER/70] 01:50:36
> to 10.1.5.5 via et-0/0/9.0, Push 16
要查看 F-BM 及其 BIER 邻居,请发出 show route table :bier-10-0.bier.0 extensive 命令。
user@routerPE1> show route table :bier-10-0.bier.0 extensive :bier-10-0.bier.0: 4 destinations, 4 routes (4 active, 0 holddown, 0 hidden) 2/16 (1 entry, 0 announced) *BIER Preference: 70 Next hop type: List, Next hop index: 8091 Address: 0x560263986adc Next-hop reference count: 2, non-key opaque handle: 0x56026719b540 Nexthop nonkey opaque app data dump: TLV type:32829, Flag:0x4 Kernel Table Id: 0 Next hop: ELNH Address 0x56026337c87c, selected Next hop type: Router, Next hop index: 8083 Address: 0x56026337c87c Next-hop reference count: 2, key opaque handle: 0x560269c4eb80, non-key opaque handle: 0x560269c50ce0 Nexthop key opaque app data dump: TLV type:32794 APP data:Bier nbr 0x5602661cd418, label:16, Addr:10.2.2.2 Nexthop nonkey opaque app data dump: TLV type:32829, Flag:0x4, FBM:0:0:0:0:0:0:0:00000006 , Next-hop session id: 5 Kernel Table Id: 0 Next hop: 10.1.2.2 via et-0/0/11.0 Label operation: Push 16 Label TTL action: prop-ttl Load balance label: Label 16: None; Label element ptr: 0x560266949df0 Label parent element ptr: (nil) Label element references: 3 Label element child references: 0 Label element lsp id: 0 Statistics ID Group: Kernel ID = 4110, Stats IDs = { 4026531855 } ...trimmed
也可以通过发出 show bier neighbor 命令来查看 F-BM。
输出还会显示数据包 (pps)。在下面的示例输出中,下一跳为 10.1.2.2 的 BIER 邻接方 10.2.2.2 的数据包计数器显示 141753 ,而其他邻接方显示 null。这表示组播流量的当前转发路径。使用其 F-BM 屏蔽位字符串后,它会使用推送标签 16 转发到其相邻方。
user@routerPE1> show bier neighbor BIER info: Subdomain ID: 10 BSL: 256 BIER Neighbor Label Nexthop Packets(pps) Bytes 10.2.2.2 16 10.1.2.2 141753( 1) 18711396 FBM:0:0:0:0:0:0:0:00000006 10.2.2.2 16 10.1.2.2 0( 0) 0 FBM:0:0:0:0:0:0:0:00000006 10.5.5.5 16 10.1.5.5 0( 0) 0 FBM:0:0:0:0:0:0:0:0000000c
在 PE2 上:
在本地 mpls.0 表中查找传入标签,并确定相应的 BIFT。发出 show route table mpls.0 protocol bier label 16 extensive 命令以查看标签 16 的表信息。
user@routerPE2> show route table mpls.0 protocol bier label 16 extensive
mpls.0: 27 destinations, 27 routes (27 active, 0 holddown, 0 hidden)
16 (1 entry, 1 announced)
TSI:
KRT in-kernel 16 /52 -> {[6021]}
Opaque data client: BIER
Opaque data: TLV type:32820 APP flag:0x80
Address: 0x560719d9aac0
Opaque-data reference count: 24
Stats ID Group: Kernel ID = 4097, Stats IDs = { 4026531842 }
*BIER Preference: 70
Next hop type: Multicast (IPv4) Composite, Next hop index: 6021
Address: 0x56071658a084
Next-hop reference count: 2, key opaque handle: 0x56071c81ffe0
Nexthop key opaque app data dump: TLV Type:32776, :bier-10-0.bier.0, Num of entries:256, 1-9093, 2-3, 3-9082, 4-9140
Kernel Table Id: 0
State: <Active OpaqueData>
Local AS: 200
Age: 1:55:50
Validation State: unverified
Task: bier global task
Announcement bits (1): 1-KRT
AS path: I
Statistics - Packets: 0, pps: 0, Bytes: 0
Stats ID Group: Kernel ID = 4097, Stats IDs = { 4026531842 }
Thread: junos-main
位 2 和 3 在 BIFT :bier-10-0.bier.0中查找。对于位 2,下一跃点是本地 mpls.0 表,对于位 3,下一跃点是推送标签 16 的 PE3。发出 show route table :bier-10-0.bier.0 命令以验证此信息。
user@routerPE2> show route table :bier-10-0.bier.0
:bier-10-0.bier.0: 4 destinations, 4 routes (4 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
1/16
*[BIER/70] 02:00:43
> to 10.1.2.1 via et-0/0/11.0, Push 16
to 10.1.2.1 via et-0/0/24.0, Push 16
2/16
*[BIER/70] 02:05:35
to table mpls.0
3/16
*[BIER/70] 02:00:48
> to 10.2.3.3 via et-0/0/12.0, Push 16
4/16
*[BIER/70] 02:00:04
> to 10.2.3.3 via et-0/0/12.0, Push 16
to 10.2.5.5 via et-0/0/9.0, Push 16
对于位 2,将在 mpls.0 表中查找 vrf 标签 990001 以查找其对应的 vrf。
root@user@routerPE2> show route table mpls.0 label 990001
mpls.0: 27 destinations, 27 routes (27 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
990001 *[VPN/0] 02:08:30
> via lsi.0 (vrf1), Pop
发出 show multicast route instance vrf1 extensive 命令以查看路由。
user@routerPE2> show multicast route instance vrf1 extensive
Instance: vrf1 Family: INET
Group: 232.252.1.1
Source: 172.11.21.21/32
Upstream interface: lsi.0
Downstream interface list:
et-0/0/10.1
Number of outgoing interfaces: 1
Session description: Unknown
Statistics: 0 kBps, 0 pps, 0 packets
Next-hop ID: 6017
Upstream protocol: MVPN
Route state: Active
Forwarding state: Forwarding
Cache lifetime/timeout: forever
Wrong incoming interface notifications: 0
Uptime: 00:18:11
Sensor ID: 0xf0000017
在 PE3 上:
与 PE2 类似,将在本地 mpls.0 表中查找传入标签并确定相应的 BIFT。发出 show route table mpls.0 protocol bier label 16 extensive 命令以查看标签 16 的表信息。
user@routerPE3> show route table mpls.0 label 16 extensive mpls.0: 27 destinations, 27 routes (27 active, 0 holddown, 0 hidden) 16 (1 entry, 1 announced) TSI: KRT in-kernel 16 /52 -> {[6013]} Opaque data client: BIER Opaque data: TLV type:32820 APP flag:0x80 Address: 0x55c74399b1e0 Opaque-data reference count: 24 Stats ID Group: Kernel ID = 4097, Stats IDs = { 4026531842 } *BIER Preference: 70 Next hop type: Multicast (IPv4) Composite, Next hop index: 6013 Address: 0x55c740189184 Next-hop reference count: 2, key opaque handle: 0x55c74642ea20 Nexthop key opaque app data dump: TLV Type:32776, :bier-10-0.bier.0, Num of entries:256, 1-9088, 2-9085, 3-3, 4-9116 Kernel Table Id: 0 State: <Active OpaqueData> Local AS: 200 Age: 2:04:31 Validation State: unverified Task: bier global task Announcement bits (1): 1-KRT AS path: I Statistics - Packets: 0, pps: 0, Bytes: 0 Stats ID Group: Kernel ID = 4097, Stats IDs = { 4026531842 } Thread: junos-main
发出 show route table :bier-10-0.bier.0 命令以查看下一跃点信息。在 BIFT 中查找位 3,下一跃点是本地 mpls.0 表。
user@routerPE3> show route table :bier-10-0.bier.0
:bier-10-0.bier.0: 4 destinations, 4 routes (4 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
1/16
*[BIER/70] 02:06:09
> to 10.3.5.5 via ae0.0, Push 16
to 10.2.3.2 via et-0/0/11.0, Push 16
2/16
*[BIER/70] 02:06:15
> to 10.2.3.2 via et-0/0/11.0, Push 16
3/16
*[BIER/70] 02:10:46
to table mpls.0
4/16
*[BIER/70] 02:05:52
> to 10.3.4.4 via et-0/0/13.0, Push 16
在 mpls.0 表中查找 vrf 标签 990001 ,以查找位 3 的 vrf。
user@routerPE3> show route table mpls.0 label 990001
mpls.0: 27 destinations, 27 routes (27 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
990001 *[VPN/0] 02:11:39
> via lsi.0 (vrf1), Pop
发出 show multicast route instance vrf1 extensive 命令以在 vrf 中查看路由。
user@routerPE3> show multicast route instance vrf1 extensive
Instance: vrf1 Family: INET
Group: 232.252.1.1
Source: 172.11.21.21/32
Upstream interface: lsi.0
Downstream interface list:
et-0/0/10.1
Number of outgoing interfaces: 1
Session description: Unknown
Statistics: 0 kBps, 0 pps, 0 packets
Next-hop ID: 6017
Upstream protocol: MVPN
Route state: Active
Forwarding state: Forwarding
Cache lifetime/timeout: forever
Wrong incoming interface notifications: 0
Uptime: 00:21:33
Sensor ID: 0xf0000015