协议无关组播 - PIM
PIM 是一种组播控制平面协议,用于在路由的第 3 层网络上播发组播源和接收器。第 3 层组播依赖于 PIM 来播发有关支持组播的路由器以及组播发送者和接收器的位置的信息。如果没有 PIM,组播将无法通过路由网络。
PIM 在 PIM-SM 或 PIM-DM 模式下运行。Cumulus Linux 仅支持 PIM-SM。
PIM-SM 是一种拉取组播分发方法;只有在接收器明确请求时,组播流量才会通过网络。当接收器拉取组播流量时,它必须定期通知网络它想要继续组播流。
PIM-SM 有三个配置选项
- ASM 依赖于组播汇集点 (RP) 来连接组播发送者和接收器,这些发送者和接收器动态地确定通过网络的最短路径。
- SSM 要求组播接收器知道他们想要从哪个源接收组播流量,而不是依赖于 RP。
- BiDir 通过 RP 转发所有流量,而不是跟踪组播源 IP,从而允许更大的规模,但可能导致低效的流量转发。
Cumulus Linux 仅支持 ASM 和 SSM。
- IGMPv3 仅适用于 SSM 组播组范围。
- Cumulus Linux 不支持使用 PIM 的 IPv6 组播路由。
有关 PIM-SM 的更多信息,请参阅 RFC 7761 - 协议无关组播 - 稀疏模式。有关 PIM 工作原理的简要说明,请参阅 PIM 概述。
PIM 拓扑示例
下图显示了一个基本的 PIM ASM 配置
- leaf01 是 FHR,它控制 PIM 注册过程。FHR 是组播源连接到的设备。
- leaf02 是 LHR,它是路径中的最后一个路由器,并连接到感兴趣的组播接收器。
- spine01 是 RP,它从源接收组播数据,并将流量向下转发到共享分发树到接收器。

基本 PIM 配置
要配置 PIM
在连接到组播源或接收器的所有接口上以及具有 RP 地址的接口上启用 PIM。
使用 NVUE,您还必须运行
nv set router pim enable on
命令来启用和启动 PIM 服务。vtysh 配置不需要这样做。在连接到主机的所有接口和连接到组播接收器的所有接口上启用 IGMP。IGMP 版本 3 是默认版本。如果您想使用 IGMP 版本 2,则仅指定版本。对于 SSM,您必须使用 IGMP 版本 3。
对于 ASM,在每个启用 PIM 的交换机上,为组播组指定 RP 的 IP 地址。您还可以配置 PIM 以将来自特定组播组的流量发送到特定的 RP。
SSM 使用前缀列表来配置接收器,使其仅允许来自单个源的组播地址的流量。这消除了对 RP 的需求,因为接收器必须在接受流量之前知道源。要启用 SSM,您只需在接口上启用 PIM 和 IGMPv3。
当您启用或禁用 PIM 时,FRR 服务会重新启动,这可能会影响流量。
以下示例命令配置 leaf01、leaf02 和 spine01,如上面的拓扑示例所示。
cumulus@leaf01:~$ nv set router pim enable on
cumulus@leaf01:~$ nv set interface vlan10 router pim
cumulus@leaf01:~$ nv set interface vlan10 ip igmp
cumulus@leaf01:~$ nv set interface swp51 router pim
cumulus@leaf01:~$ nv set vrf default router pim address-family ipv4 rp 10.10.10.101
cumulus@leaf01:~$ nv config apply
cumulus@leaf02:~$ nv set router pim enable on
cumulus@leaf02:~$ nv set interface vlan20 router pim
cumulus@leaf02:~$ nv set interface vlan20 ip igmp
cumulus@leaf02:~$ nv set interface swp51 router pim
cumulus@leaf02:~$ nv set vrf default router pim address-family ipv4 rp 10.10.10.101
cumulus@leaf02:~$ nv config apply
cumulus@spine01:~$ nv set router pim enable on
cumulus@spine01:~$ nv set interface swp1 router pim
cumulus@spine01:~$ nv set interface swp2 router pim
cumulus@spine01:~$ nv set vrf default router pim address-family ipv4 rp 10.10.10.101
cumulus@spine01:~$ nv config apply
FRR 软件包包括 PIM。为了使 PIM 正常运行,PIM 依赖于 Zebra。您必须配置单播路由和路由协议或静态路由。
编辑
/etc/frr/daemons
文件,并在文件末尾添加pimd=yes
cumulus@leaf01:~$ sudo nano /etc/frr/daemons ... pimd=yes ...
使用以下命令重新启动 FRR
cumulus@switch:~$ sudo systemctl restart frr.service
重新启动 FRR 会重新启动所有已启用并正在运行的路由协议守护程序。
在 vtysh shell 中,运行以下命令来配置 PIM 接口。PIM 必须在所有面向组播源或组播接收器的接口上,以及具有 RP 地址的接口上。
cumulus@leaf01:~$ sudo vtysh ... leaf01# configure terminal leaf01(config)# interface vlan10 leaf01(config-if)# ip pim leaf01(config-if)# exit leaf01(config)# interface swp51 leaf01(config-if)# ip pim leaf01(config-if)# exit
在所有连接主机的接口上启用 IGMP。
leaf01(config)# interface vlan10 leaf01(config-if)# ip igmp leaf01(config-if)# exit
对于 ASM,为静态 RP 配置组映射
leaf01(config)# ip pim rp 10.10.10.101 leaf01(config)# exit leaf01# write memory leaf01# exit
编辑
/etc/frr/daemons
文件,并在文件末尾添加pimd=yes
cumulus@leaf02:~$ sudo nano /etc/frr/daemons ... pimd=yes ...
使用以下命令重新启动 FRR
cumulus@switch:~$ sudo systemctl restart frr.service
重新启动 FRR 会重新启动所有已启用并正在运行的路由协议守护程序。
在 vtysh shell 中,运行以下命令来配置 PIM 接口。PIM 必须在所有面向组播源或组播接收器的接口上,以及具有 RP 地址的接口上。
cumulus@leaf02:~$ sudo vtysh ... leaf02# configure terminal leaf02(config)# interface vlan20 leaf02(config-if)# ip pim leaf02(config-if)# exit leaf02(config)# interface swp51 leaf02(config-if)# ip pim leaf02(config-if)# exit
在所有连接主机的接口上启用 IGMP。
leaf02(config)# interface vlan20 leaf02(config-if)# ip igmp leaf02(config-if)# exit
对于 ASM,为静态 RP 配置组映射
leaf02(config)# ip pim rp 10.10.10.101 leaf02(config)# exit leaf02# write memory leaf02# exit
编辑
/etc/frr/daemons
文件,并在文件末尾添加pimd=yes
cumulus@spine01:~$ sudo nano /etc/frr/daemons ... pimd=yes ...
使用以下命令重新启动 FRR
cumulus@switch:~$ sudo systemctl restart frr.service
重新启动 FRR 会重新启动所有已启用并正在运行的路由协议守护程序。
在 vtysh shell 中,运行以下命令来配置 PIM 接口。PIM 必须在所有面向组播源或组播接收器的接口上,以及具有 RP 地址的接口上。
cumulus@spine01:~$ sudo vtysh ... spine01# configure terminal spine01(config)# interface swp1 spine01(config-if)# ip pim spine01(config-if)# exit spine01(config)# interface swp2 spine01(config-if)# ip pim spine01(config-if)# exit
对于 ASM,为静态 RP 配置组映射
spine01(config)# ip pim rp 10.10.10.101 spine01(config-if)# end spine01# write memory spine01# exit
以上命令配置交换机将所有组播流量发送到 RP 10.10.10.101。以下命令配置 PIM 将来自组播组 224.10.0.0/16 的流量发送到 RP 10.10.10.101,并将来自组播组 224.10.2.0/24 的流量发送到 RP 10.10.10.102
cumulus@leaf01:~$ nv set vrf default router pim address-family ipv4 rp 10.10.10.101 group-range 224.10.0.0/16
cumulus@leaf01:~$ nv set vrf default router pim address-family ipv4 rp 10.10.10.102 group-range 224.10.2.0/24
cumulus@leaf01:~$ sudo vtysh
...
spine01# configure terminal
spine01(config)# ip pim rp 10.10.10.101 224.10.0.0/16
spine01(config)# ip pim rp 10.10.10.102 224.10.2.0/16
spine01(config)# end
spine01# exit
以下命令使用前缀列表配置 PIM 将来自组播组 224.10.0.0/16 的流量发送到 RP 10.10.10.101,并将来自组播组 224.10.2.0/24 的流量发送到 RP 10.10.10.102
cumulus@leaf01:~$ nv set router policy prefix-list MCAST1 rule 1 action permit
cumulus@leaf01:~$ nv set router policy prefix-list MCAST1 rule 1 match 224.10.0.0/16
cumulus@leaf01:~$ nv set router policy prefix-list MCAST2 rule 1 action permit
cumulus@leaf01:~$ nv set router policy prefix-list MCAST2 rule 1 match 224.10.2.0/24
cumulus@leaf01:~$ nv config apply
cumulus@leaf01:~$ nv set vrf default router pim address-family ipv4 rp 10.10.10.101 prefix-list MCAST1
cumulus@leaf01:~$ nv set vrf default router pim address-family ipv4 rp 10.10.10.102 prefix-list MCAST2
cumulus@leaf01:~$ nv config apply
cumulus@leaf01:~$ sudo vtysh
...
spine01# configure terminal
switch(config)# ip prefix-list MCAST1 seq 1 permit 224.10.0.0/16
switch(config)# ip prefix-list MCAST2 seq 1 permit 224.10.2.0/24
spine01(config)# ip pim rp 10.10.10.101 prefix-list MCAST1
spine01(config)# ip pim rp 10.10.10.102 prefix-list MCAST2
spine01(config)# end
spine01# exit
- 您可以为不同的组播组配置 RP 映射,也可以使用前缀列表来指定 RP 到组的映射。您不能同时使用这两种方法。
- NVIDIA 建议在使用 Clos 网络中的 eBGP 时,不要使用 spine 交换机作为 RP。请参阅 PIM 概述知识库文章。
- zebra 不通过默认路由解析 RP 的下一跳。为防止组播转发失败,请提供到 RP 的特定路由,或运行 vtysh
ip nht resolve-via-default
配置命令,以通过默认路由解析 RP 的下一跳。
可选 PIM 配置
本节介绍可选的配置过程。
ASM SPT 无限
当 LHR 接收到第一个组播数据包时,它会向 FHR 发送一个 PIM (S,G) 加入,以通过网络转发流量。这构建了 SPT,即到源的最短路径树。当流量通过 SPT 到达时,PIM (S,G) RPT 剪枝会向上共享树发送到 RP。这会从共享树中删除组播流量;组播数据仅通过 SPT。
您可以配置每个组的 SPT 切换(SPT 无限),这允许某些组永远不会切换到最短路径树。LHR 现在同时向 RP 发送 (*,G) 加入和 (S,G) RPT 剪枝消息。
当您在 Cumulus Linux 中使用前缀列表来匹配组播组目标地址 (GDA) 范围时,您必须包含 /32 运算符。在下面的 NVUE 命令示例中,组匹配范围后的 max-prefix-len 32
指定了 /32 运算符。在 vtysh 命令示例中,组允许范围后的 ge 32
指定了 /32 运算符。
要配置一个组永远不遵循 SPT,请创建必要的前缀列表,然后为前缀列表配置 SPT 切换
cumulus@switch:~$ nv set router policy prefix-list SPTrange rule 1 match 235.0.0.0/8 max-prefix-len 32
cumulus@switch:~$ nv set router policy prefix-list SPTrange rule 1 action permit
cumulus@switch:~$ nv set router policy prefix-list SPTrange rule 2 match 238.0.0.0/8 max-prefix-len 32
cumulus@switch:~$ nv set router policy prefix-list SPTrange rule 2 action permit
cumulus@switch:~$ nv set vrf default router pim address-family ipv4 spt-switchover prefix-list SPTrange
cumulus@switch:~$ nv set vrf default router pim address-family ipv4 spt-switchover action infinity
cumulus@switch:~$ nv config apply
cumulus@switch:~$ sudo vtysh
...
switch# configure terminal
switch(config)# ip prefix-list spt-range permit 235.0.0.0/8 ge 32
switch(config)# ip prefix-list spt-range permit 238.0.0.0/8 ge 32
switch(config)# ip pim spt-switchover infinity prefix-list spt-range
switch(config)# end
switch# exit
要查看配置的前缀列表,请运行 vtysh show ip mroute
命令。以下命令显示 SPT 切换 (pimreg
) 已在 235.0.0.0 上开启。
cumulus@switch:~$ sudo vtysh
...
switch# show ip mroute
Source Group Proto Input Output TTL Uptime
* 235.0.0.0 IGMP swp1 pimreg 1 00:03:3
IGMP vlan10 1 00:03:38
* 238.0.0.0 IGMP swp1 vlan10 1 00:02:08
SSM 组播组范围
232.0.0.0/8 是为 SSM 保留的默认组播组范围。要修改 SSM 组播组范围,请定义前缀列表并应用它。您可以更改(扩展)默认组或向此范围添加其他组。
您必须在前缀列表中包含 232.0.0.0/8,因为这是保留的 SSM 范围。使用前缀列表,您可以扩展 SSM 范围,但源树中的所有设备都必须同意 SSM 范围。当您在 Cumulus Linux 中使用前缀列表来匹配组播组目标地址 (GDA) 范围时,您必须包含 /32 运算符。在下面的 NVUE 命令示例中,组匹配范围后的 max-prefix-len 32
指定了 /32 运算符。在 vtysh 命令示例中,组允许范围后的 ge 32
指定了 /32 运算符。
创建一个带有 permit
关键字的前缀列表,以匹配您想要视为组播组的地址范围,并使用 deny
关键字来匹配您不想视为组播组的地址范围
cumulus@switch:~$ nv set router policy prefix-list MyCustomSSMrange rule 5 match 232.0.0.0/8 max-prefix-len 32
cumulus@switch:~$ nv set router policy prefix-list MyCustomSSMrange rule 5 action permit
cumulus@switch:~$ nv set router policy prefix-list MyCustomSSMrange rule 10 match 238.0.0.0/8 max-prefix-len 32
cumulus@switch:~$ nv set router policy prefix-list MyCustomSSMrange rule 10 action permit
应用自定义前缀列表
cumulus@switch:~$ nv set vrf default router pim address-family ipv4 ssm-prefix-list MyCustomSSMrange
cumulus@switch:~$ nv config apply
创建一个带有 permit
关键字的前缀列表,以匹配您想要视为组播组的地址范围,并使用 deny
关键字来匹配您不想视为组播组的地址范围
cumulus@switch:~$ sudo vtysh
...
switch# configure terminal
switch(config)# ip prefix-list ssm-range seq 5 permit 232.0.0.0/8 ge 32
switch(config)# ip prefix-list ssm-range seq 10 permit 238.0.0.0/8 ge 32
将自定义前缀列表应用为 ssm-range
switch(config)# ip pim ssm prefix-list ssm-range
switch(config)# exit
switch# write memory
switch# exit
要查看配置的前缀列表,请运行 vtysh show ip prefix-list my-custom-ssm-range
命令
switch# show ip prefix-list my-custom-ssm-range
ZEBRA: ip prefix-list my-custom-ssm-range: 1 entries
seq 5 permit 232.0.0.0/8 ge 32
PIM: ip prefix-list my-custom-ssm-range: 1 entries
seq 10 permit 232.0.0.0/8 ge 32
PIM 和 ECMP
PIM 使用 RPF 来选择上游接口以构建转发状态。如果您配置 ECMP,PIM 会根据 ECMP 哈希算法选择 RPF。
您可以配置 PIM 在安装 mroute 时使用所有可用的下一跳。例如,如果您有四路 ECMP,PIM 会将 S,G 和 *,G mroute 分布在四个不同的路径上。
您还可以配置 PIM 在交换机丢失路径时重新计算其中一个 ECMP 路径上的所有流路径。否则,只有使用丢失路径的流才会移动到备用 ECMP 路径。此重新计算不会影响现有组。
在其中一个 ECMP 路径上重新计算所有流路径可能会导致一些数据包丢失。
要配置 PIM 在安装 mroute 时使用所有可用的下一跳
cumulus@switch:~$ nv set vrf default router pim ecmp enable on
cumulus@switch:~$ nv config apply
要在交换机丢失路径时重新计算其中一个 ECMP 路径上的所有流路径
cumulus@switch:~$ nv set vrf default router pim ecmp rebalance on
cumulus@switch:~$ nv config apply
要配置 PIM 在安装 mroute 时使用所有可用的下一跳
cumulus@switch:~$ sudo vtysh
...
switch# configure terminal
switch(config)# ip pim ecmp
switch(config)# exit
switch# write memory
switch# exit
要在交换机丢失路径时重新计算其中一个 ECMP 路径上的所有流路径
cumulus@switch:~$ sudo vtysh
...
switch# configure terminal
switch(config)# ip pim ecmp rebalance
switch(config)# exit
switch# write memory
switch# exit
要显示特定源或组的下一跳,请运行 vtysh show ip pim nexthop
命令
cumulus@switch:~$ sudo vtysh
...
switch# show ip pim nexthop
Number of registered addresses: 3
Address Interface Nexthop
-------------------------------------------
6.0.0.9 swp31s0 169.254.0.9
6.0.0.9 swp31s1 169.254.0.25
6.0.0.11 lo 0.0.0.0
6.0.0.10 swp31s0 169.254.0.9
6.0.0.10 swp31s1 169.254.0.25
IP 组播边界
使用组播边界来限制组播流量的分发,并将组播推送到网络的子集。在设置边界后,交换机根据前缀列表丢弃或接受传入的 IGMP 或 PIM 加入。要配置边界,请在接口上应用 IP 组播边界 OIL(传出接口列表)。
首先创建一个由组播组地址组成的前缀列表,然后运行以下命令
cumulus@switch:~$ nv set interface swp1 router pim address-family ipv4-unicast multicast-boundary-oil MyPrefixList
cumulus@switch:~$ nv config apply
cumulus@switch:~$ sudo vtysh
...
switch# configure terminal
switch(config)# interface swp1
switch(config-if)# ip multicast boundary oil my-prefix-list
switch(config-if)# end
switch# write memory
switch# exit
MSDP
您可以使用 MSDP 使用 PIM-SM RP 连接多个 PIM-SM 组播域。如果您在多个组播交换机(在环回接口上)上使用相同的 IP 地址配置任播 RP,则每个组播组可以使用多个 RP。
当 RP 发现新源(PIM-SM 注册消息)时,它会向每个 MSDP 对等方发送 SA 消息。然后,对等方确定是否有任何感兴趣的接收器。
- Cumulus Linux 支持任播 RP 的 MSDP,而不是多个组播域。您必须在全网格中配置每个 MSDP 对等方。交换机不转发收到的 SA 消息。
- Cumulus Linux 仅支持一个 MSDP 网格组。
以下步骤配置 Cumulus 交换机以使用 MSDP
为域中每个 RP 的环回接口添加任播 IP 地址
cumulus@rp01:~$ nv set interface lo ip address 10.10.10.101/32 cumulus@rp01:~$ nv set interface lo ip address 10.100.100.100/32
在每台组播交换机上,使用任播地址配置组到 RP 的映射
cumulus@switch:$ nv set vrf default router pim address-family ipv4 rp 10.100.100.100 group-range 224.0.0.0/4 cumulus@switch:$ nv config apply
为所有活动 RP 配置 MSDP 网格组。以下示例使用三个 RP
网格组必须包括域中的所有 RP 作为成员,并使用唯一地址作为源。此配置导致所有 RP 之间的 MSDP 对等互连。
cumulus@rp01:$ nv set vrf default router pim msdp-mesh-group cumulus member-address 100.1.1.2 cumulus@rp01:$ nv set vrf default router pim msdp-mesh-group cumulus member-address 100.1.1.3 cumulus@rp02:$ nv set vrf default router pim msdp-mesh-group cumulus member-address 100.1.1.1 cumulus@rp02:$ nv set vrf default router pim msdp-mesh-group cumulus member-address 100.1.1.3 cumulus@rp03:$ nv set vrf default router pim msdp-mesh-group cumulus member-address 100.1.1.1 cumulus@rp03:$ nv set vrf default router pim msdp-mesh-group cumulus member-address 100.1.1.2
选择本地环回地址作为 MSDP 控制数据包的源
cumulus@rp01:$ nv set vrf default router pim msdp-mesh-group cumulus source-address 10.10.10.101 cumulus@rp02:$ nv set vrf default router pim msdp-mesh-group cumulus source-address 10.10.10.102 cumulus@rp03:$ nv set vrf default router pim msdp-mesh-group cumulus source-address 10.10.10.103
将任播 IP 地址注入到域的 IGP 中。如果网络使用未编号的 BGP 作为 IGP,请避免使用任播 IP 地址来建立单播或组播对等互连。对于 PIM-SM,请通过设置源来确保您使用唯一地址作为 PIM Hello 源
cumulus@rp01:$ nv set interface lo router pim address-family ipv4-unicast use-source 10.100.100.100 cumulus@rp01:$ nv config apply
编辑
/etc/network/interfaces
文件,为域中每个 RP 的环回接口添加任播 IP 地址。例如cumulus@rp01:~$ sudo nano /etc/network/interfaces auto lo iface lo inet loopback address 10.10.10.101/32 address 10.100.100.100/32 ...
运行
ifreload -a
命令以加载新配置cumulus@switch:~$ ifreload -a
在每台组播交换机上,使用任播地址配置组到 RP 的映射
cumulus@rp01:~$ sudo vtysh ... rp01# configure terminal rp01(config)# ip pim rp 10.100.100.100 224.0.0.0/4
为所有活动 RP 配置 MSDP 网格组(以下示例使用三个 RP)
网格组必须包括域中的所有 RP 作为成员,并使用唯一地址作为源。此配置导致所有 RP 之间的 MSDP 对等互连。
rp01(config)# ip msdp mesh-group cumulus member 100.1.1.2 rp01(config)# ip msdp mesh-group cumulus member 100.1.1.3 rp02(config)# ip msdp mesh-group cumulus member 100.1.1.1 rp02(config)# ip msdp mesh-group cumulus member 100.1.1.3 rp03(config)# ip msdp mesh-group cumulus member 100.1.1.1 rp03(config)# ip msdp mesh-group cumulus member 100.1.1.2
选择本地环回地址作为 MSDP 控制数据包的源
rp01(config)# ip msdp mesh-group cumulus source 10.10.10.101 rp02(config)# ip msdp mesh-group cumulus source 10.10.10.102 rp03(config)# ip msdp mesh-group cumulus source 10.10.10.103
将任播 IP 地址注入到域的 IGP 中。如果网络使用未编号的 BGP 作为 IGP,请避免使用任播 IP 地址来建立单播或组播对等互连。对于 PIM-SM,请通过设置源来确保您使用唯一地址作为 PIM Hello 源
rp01# interface lo rp01(config-if)# ip pim use-source 100.100.100.100 rp01(config-if)# end rp01# write memory rp01# exit
VRF 中的 PIM
VRF 按租户划分路由表,以在单个第 3 层基础架构上提供单独的第 3 层网络。使用 VRF,每个租户都有自己的虚拟化第 3 层网络,因此 IP 地址可以在租户之间重叠。
VRF 中的 PIM 使 PIM 树和组播数据流量能够在第 3 层虚拟化网络内运行,每个域或租户都有单独的树。每个 VRF 都有自己的组播树,具有自己的 RP、源等。因此,您可以为每个公司部门、客户端或产品设置一个租户。
如果您不启用 MP-BGP MPLS VPN,则不同交换机上的 VRF 通常通过子接口连接或对等互连,其中每个子接口都在其自己的 VRF 中。
要在 VRF 中配置 PIM
添加 VRF 并将其与交换机端口关联
cumulus@switch:~$ nv set vrf RED
cumulus@switch:~$ nv set vrf BLUE
cumulus@switch:~$ nv set interface swp1 ip vrf RED
cumulus@switch:~$ nv set interface swp2 ip vrf BLUE
添加 PIM 配置
cumulus@switch:~$ nv set interface swp1 router pim
cumulus@switch:~$ nv set interface swp2 router pim
cumulus@switch:~$ nv set vrf RED router bgp autonomous-system 65001
cumulus@switch:~$ nv set vrf BLUE router bgp autonomous-system 65000
cumulus@switch:~$ nv set vrf RED router bgp router-id 10.1.1.1
cumulus@switch:~$ nv set vrf BLUE router bgp router-id 10.1.1.2
cumulus@switch:~$ nv set vrf RED router bgp neighbor swp1 remote-as external
cumulus@switch:~$ nv set vrf BLUE router bgp neighbor swp2 remote-as external
cumulus@switch:~$ nv config apply
编辑 /etc/network/interfaces
文件,并将 VRF 与交换机端口关联,然后运行 ifreload -a
以重新加载配置。
cumulus@switch:~$ sudo nano /etc/network/interfaces
...
auto swp1
iface swp1
vrf RED
auto swp2
iface swp2
vrf BLUE
auto RED
iface RED
vrf-table auto
auto BLUE
iface BLUE
vrf-table auto
...
添加 PIM 配置
cumulus@switch:~$ sudo vtysh
...
switch# configure terminal
switch(config)# interface swp1
switch(config-if)# ip pim
switch(config-if)# exit
switch(config)# interface swp2
switch(config-if)# ip pim
switch(config-if)# exit
switch(config)# router bgp 65001 vrf RED
switch(config-router)# bgp router-id 10.1.1.2
switch(config-router)# neighbor swp1 interface remote-as external
switch(config-router)# exit
switch(config)# router bgp 65000 vrf BLUE
switch(config-router)# bgp router-id 10.1.1.1
switch(config-router)# neighbor swp2 interface remote-as external
switch(config-router)# end
switch# write memory
switch# exit
PIM 邻居的 BFD
您可以将 BFD 用于 PIM 邻居,以检测链路故障。当您配置接口时,请包含 pim bfd
选项。以下示例命令配置 leaf01 和 spine01 之间的 BFD
cumulus@leaf01:~$ nv set interface swp51 router pim bfd enable on
cumulus@leaf01:~$ nv config apply
cumulus@spine01:~$ nv set interface swp1 router pim bfd enable on
cumulus@spine01:~$ nv config apply
cumulus@leaf01:~$ sudo vtysh
...
leaf01# configure terminal
leaf01(config)# interface swp51
leaf01(config-if)# ip pim bfd
leaf01(config-if)# end
leaf01# write memory
leaf01# exit
cumulus@spine01:~$ sudo vtysh
...
spine01# configure terminal
spine01(config)# interface swp1
spine01(config-if)# ip pim bfd
spine01(config-if)# end
spine01# write memory
spine01# exit
允许 RP
为了开始接收组播组的组播流量,接收器通过在其连接的 LAN 上发送 IGMP 成员报告来表达其对该组的兴趣。LHR 接收到此报告并开始构建返回源的组播路由树。为了构建此树,需要存在另一个路由器,该路由器既为 LHR 所知,也为组播源所知,以充当发送者和接收者的 RP。LHR 查找接收器指定的组的 RP,并向 RP 发送 PIM 加入消息。根据 RFC 7761,LHR 和 RP 之间的中间路由器必须检查该组的 RP 是否与 PIM 加入中的 RP 匹配,如果不匹配,则丢弃加入。
在某些配置中,希望使用与该组的实际 RP 地址不匹配的 RP 地址来配置 LHR。在这种情况下,您必须配置上游路由器以接受加入并将其传播到该组的相应 RP,忽略 PIM 加入中不匹配的 RP 地址,并将其替换为自己的组 RP。
您可以配置交换机以允许来自所有上游邻居的加入,或者您可以提供前缀列表,以便交换机仅接受具有上游邻居地址的加入。
以下示例命令配置 PIM 以忽略所有上游邻居的 RP 检查
cumulus@switch:~$ nv set interface swp50 router pim address-family ipv4-unicast allow-rp enable on
cumulus@switch:~$ nv config apply
以下示例命令配置 PIM 仅忽略前缀列表(名为 allowRP)中 RP 地址的 RP 检查
cumulus@switch:~$ nv set interface swp50 router pim address-family ipv4-unicast allow-rp rp-list allowRP
cumulus@switch:~$ nv config apply
以下示例命令配置 PIM 以忽略所有上游邻居的 RP 检查
cumulus@switch:~$ sudo vtysh
...
switch# configure terminal
switch(config)# interface swp50
switch(config-if)# ip pim allow-rp
switch(config-if)# end
switch# write memory
switch# exit
以下示例命令配置 PIM 仅忽略前缀列表(名为 allowRP)中 RP 地址的 RP 检查
cumulus@switch:~$ sudo vtysh
...
switch# configure terminal
switch(config)# interface swp50
switch(config-if)# ip pim allow-rp rp-list allowRP
switch(config-if)# end
switch# write memory
switch# exit
PIM 计时器
Cumulus Linux 提供以下 PIM 计时器
计时器 | 描述 |
---|---|
hello-interval | PIM 路由器发送 Hello 消息以发现 PIM 邻居并维护 PIM 邻居关系的间隔(以秒为单位)。您可以指定介于 1 到 180 之间的值。默认设置为 30 秒。使用 vtysh,您可以为特定的启用 PIM 的接口设置 Hello 间隔。使用 NVUE,您可以为所有启用 PIM 的接口或特定的启用 PIM 的接口全局设置 Hello 间隔。 |
holdtime | 邻居必须处于可达状态的秒数。auto (默认设置)使用 hello-interval 的三倍半。您可以指定介于 1 到 180 之间的值。使用 vtysh,您可以为特定的启用 PIM 的接口设置保持时间。使用 NVUE,您可以为所有启用 PIM 的接口或特定的启用 PIM 的接口全局设置保持时间。 |
join-prune-interval | PIM 路由器向其上游邻居发送加入/剪枝消息以进行状态更新的间隔(以秒为单位)。您可以指定介于 60 到 600 之间的值。默认设置为 60 秒。您可以为所有启用 PIM 的接口全局设置 join-prune-interval 。NVUE 还提供了为特定 VRF 设置 join-prune-interval 的选项。 |
keepalive | S,G 流的超时值(以秒为单位)。您可以指定介于 31 到 60000 之间的值。默认设置为 210 秒。您可以为所有启用 PIM 的接口或特定 VRF 全局设置 keepalive 计时器。在 vtysh 中,计时器为 keep-alive 。 |
register-suppress | 停止向 RP 发送注册消息的秒数。您可以指定介于 5 到 60000 之间的值。默认设置为 60 秒。您可以为所有启用 PIM 的接口或特定 VRF 全局设置 keepalive 计时器。 |
rp-keepalive | 仅限 NVUE。RP 的超时值(以秒为单位)。您可以指定介于 31 到 60000 之间的值。默认设置为 185 秒。您可以为所有启用 PIM 的接口或特定 VRF 全局设置 register-suppress-time 计时器。在 vtysh 中,计时器为 rp-keep-alive 。 |
以下示例命令将 join-prune-interval
设置为 100 秒,将 keepalive
计时器设置为 10000 秒,并将 register-suppress
时间设置为 20000 秒,全局适用于所有启用 PIM 的接口
cumulus@switch:~$ nv set router pim timers join-prune-interval 100
cumulus@switch:~$ nv set router pim timers keepalive 10000
cumulus@switch:~$ nv set router pim timers register-suppress 20000
cumulus@switch:~$ nv config apply
以下示例命令将 swp51 的 hello-interval
设置为 60 秒
cumulus@switch:~$ nv set interface swp51 router pim timers hello-interval 60
cumulus@switch:~$ nv config apply
以下示例命令将 VRF RED 的 rp-keepalive
设置为 10000
cumulus@switch:~$ nv set vrf RED router pim timers rp-keepalive 10000
cumulus@switch:~$ nv config apply
以下示例命令将 join-prune-interval
设置为 100 秒,将 keep-alive
计时器设置为 10000 秒,并将 register-suppress
时间设置为 20000 秒,全局适用于所有启用 PIM 的接口
cumulus@switch:~$ sudo vtysh
...
switch# configure terminal
switch(config)# ip pim join-prune-interval 100
switch(config)# ip pim keep-alive-timer 10000
switch(config)# ip pim register-suppress-time 20000
switch(config)# end
switch# write memory
switch# exit
以下示例命令将 swp51 的 hello-interval
设置为 60 秒,将 holdtime
设置为 120 秒
cumulus@switch:~$ sudo vtysh
...
switch# configure terminal
switch(config)# interface swp51
switch(config-if)# ip pim hello 60 120
switch(config-if)# end
switch# write memory
switch# exit
以下示例命令将 VRF RED 的 keep-alive-timer
设置为 10000 秒
cumulus@switch:~$ sudo vtysh
...
switch# configure terminal
switch(config)# vrf RED
switch(config-vrf)# ip pim keep-alive-timer 10000
switch(config-if)# end
switch# write memory
switch# exit
改进组播收敛
对于大型组播环境,默认的 CoPP 策略器可能过于严格。您可以调整策略器以改进组播收敛。
- 默认的 PIM 转发速率和突发速率设置为每秒 2000 个数据包。
- 默认的 IGMP 转发速率和突发速率设置为每秒 1000 个数据包。
要调整策略器
以下示例命令将 PIM 转发和突发速率设置为每秒 400 个数据包
cumulus@switch:~$ nv set system control-plane policer pim-ospf-rip rate 400
cumulus@switch:~$ nv set system control-plane policer pim-ospf-rip burst 400
cumulus@switch:~$ nv config apply
以下示例命令将 IGMP 转发速率设置为 400,IGMP 突发速率设置为每秒 200 个数据包
cumulus@switch:~$ nv set system control-plane policer igmp rate 400
cumulus@switch:~$ nv set system control-plane policer igmp burst 200
cumulus@switch:~$ nv config apply
编辑
/etc/cumulus/control-plane/policers.conf
文件要调整 PIM 转发和突发速率,请更改
copp.pim_ospf_rip.rate
和copp.pim_ospf_rip.burst
参数。要调整 IGMP 转发和突发速率,请更改
copp.igmp.rate
和copp.igmp.burst
参数。以下示例将 PIM 转发速率和 PIM 突发速率更改为每秒 400 个数据包,将 IGMP 转发速率更改为每秒 400 个数据包,并将 IGMP 突发速率更改为每秒 200 个数据包
cumulus@switch:~$ sudo nano /etc/cumulus/control-plane/policers.conf ... copp.pim_ospf_rip.enable = TRUE copp.pim_ospf_rip.rate = 400 copp.pim_ospf_rip.burst = 400 ... copp.igmp.enable = TRUE copp.igmp.rate = 400 copp.igmp.burst = 200 ...
运行以下命令
cumulus@switch:~$ /usr/lib/cumulus/switchdctl --load /etc/cumulus/control-plane/policers.conf
IGMP 设置
您可以在 PIM 接口上设置以下可选 IGMP 设置
- 最后成员查询间隔,即响应于组的最后一个成员收到的离开消息的查询之间的间隔。您可以指定介于 1 到 6553 秒之间的值。默认设置为 10。
- IGMP 常规查询的最大响应时间。您可以指定介于 1 到 6553 秒之间的值。默认设置为 100。最大响应时间必须小于最后成员查询间隔。
- 最后成员查询计数,即查询器在收到来自组的最后一个成员的离开消息后可以发送的特定于组的查询的数量。您可以指定介于 1 到 255 之间的值。默认设置为 2。
- IGMP 发送查询消息以发现哪些组播组在连接的网络上具有成员的频率。您可以指定介于 1 到 65535 秒之间的值。默认设置为 125。
- 快速离开,即当端口收到离开消息时,交换机立即从组播组的转发条目中删除端口。默认设置是关闭。
以下示例将最后成员查询间隔设置为 80,将 IGMP 常规查询的最大响应时间设置为 120 秒,将查询器可以发送的特定于组的查询数量设置为 5,并将 IGMP 配置为每 180 秒发送一次查询主机消息
cumulus@switch:~$ nv set interface swp1 ip igmp last-member-query-interval 80
cumulus@switch:~$ nv set interface swp1 ip igmp query-max-response-time 120
cumulus@switch:~$ nv set interface swp1 ip igmp last-member-query-count 5
cumulus@switch:~$ nv set interface swp1 ip igmp query-interval 180
cumulus@switch:~$ nv config apply
以下示例启用快速离开处理
cumulus@switch:~$ nv set interface swp1 ip igmp fast-leave on
cumulus@switch:~$ nv config apply
要禁用快速离开处理,请运行 nv set interface <interface> ip igmp fast-leave off
命令。
以下示例将最后成员查询间隔设置为 80,将 IGMP 常规查询的最大响应时间设置为 120 秒,将查询器发送的特定于组的查询数量设置为 5,并将 IGMP 配置为每 180 秒发送一次查询主机消息
cumulus@switch:~$ sudo vtysh
...
switch# configure terminal
switch(config)#
switch(config)# interface vlan10
leaf02(config-if)# ip igmp last-member-query-interval 80
leaf02(config-if)# ip igmp query-max-response-time 120
leaf02(config-if)# ip igmp last-member-query-count 5
leaf02(config-if)# ip igmp query-interval 180
leaf02(config-if)# end
switch# write memory
switch# exit
vtysh ip igmp last-member-query-count
命令将配置添加到 /etc/frr/frr.conf file
cumulus@switch:~$ sudo nano /etc/frr/frr.conf
...
ip igmp
ip igmp version 3
ip igmp query-interval 180
ip igmp last-member-query-interval 80
ip igmp last-member-query-count 5
ip igmp query-max-response-time 120
...
要启用快速离开处理,请编辑 /etc/network/interfaces
文件,并在接口节下添加 bridge-portmcfl yes
参数
cumulus@switch:~$ sudo nano /etc/network/interfaces
...
auto vlan10
iface vlan10
address 10.1.10.1/24
hwaddress 44:38:39:22:01:b1
bridge-portmcfl yes
vlan-raw-device br_default
vlan-id 10
...
要禁用快速离开处理,请编辑 /etc/network/interfaces
文件,并在接口节下设置 bridge-portmcfl no
参数。
具有 MLAG 的 PIM 主动-主动模式
当组播发送者连接到 MLAG 链路聚合时,发送者会对出站组播流量进行哈希,使其通过链路聚合中的单个成员。流量到达其中一个启用 MLAG 的交换机。无论哪个交换机接收到流量,它都会通过 MLAG 对等链路到达另一个启用 MLAG 的交换机,因为对等链路始终是组播路由器端口,并且始终接收组播流。
来自连接到 MLAG 链路聚合的组播源的流量始终通过 MLAG 对等链路。请务必适当调整对等链路的大小,以适应此流量。
源所在的 VLAN 的 PIM DR 向 RP 发送 PIM 注册消息。PIM DR 是该网段上 IP 地址最高的 PIM 设备。在 PIM 注册过程完成后,并且流量沿着 SPT流动时,MLAG 交换机都会向接收者转发流量。
发送到源的 PIM 加入消息可以通过上游 PIM 邻居进行 ECMP 负载分担。无论 DR 状态如何,任何 MLAG 成员都可以接收 PIM 加入消息并转发流量。
双连接的组播接收者在连接的 VLAN 上发送 IGMP 加入消息。其中一个 MLAG 交换机接收 IGMP 加入消息,然后将 IGMP 加入消息添加到 IGMP 加入表和二层 MDB 表。二层 MDB 表,就像单播 MAC 地址表一样,通过 MLAG 控制消息在对等链路上同步。这允许两个 MLAG 交换机都编程 IGMP 和 MDB 表转发信息。两个交换机都向 RP 发送 *,G PIM 加入消息。如果源已经在发送,则两个 MLAG 交换机都会接收组播流。
传统上,PIM DR 是唯一发送 PIM *,G 加入消息的节点。为了在发生故障时提供弹性,两个 MLAG 交换机都向 RP 发送 PIM *,G 加入消息以接收组播流。
为了防止重复的组播数据包,PIM 选举一个 DF,它是 MLAG 对中的 primary
成员。MLAG 辅助交换机将 VLAN 放入 OIL 中,从而防止重复的组播流量。
示例流量流
下面的示例显示了 server02 和 server03 之间的流量流
步骤 1 | |
---|---|
![]() | 1. server02 向 leaf02 发送流量。 2. leaf02 将流量转发到 leaf01,因为对等链路是组播路由器端口。 3. spine01 从 DR leaf01 接收 PIM 注册消息。 4. leaf02 作为 MLAG 主动-主动对等方,从 leaf01 同步 *,G 表。 |
步骤 2 | |
---|---|
![]() | 1. leaf02 具有 *,G 路由,指示它必须向 spine01 转发流量。 2. leaf02 或 leaf01 都可以直接发送此流量,具体取决于哪个 MLAG 交换机从连接的源接收到流量。 3. 在这种情况下,leaf02 在 MLAG 链路聚合上接收流量,并将其直接向上游转发。 |
配置具有 MLAG 的 PIM
您可以在双连接的 MLAG 链路聚合上使用组播发送者或接收者。在存在组播源或接收者的 VLAN 接口上,配置 PIM 主动-主动模式和 IGMP。启用 PIM 主动-主动模式会自动在该接口上启用 PIM。
cumulus@leaf01:~$ nv set interface vlan10 router pim active-active on
cumulus@leaf01:~$ nv set interface vlan10 ip igmp
cumulus@leaf01:~$ nv config apply
cumulus@leaf01:~$ sudo vtysh
...
leaf01# configure terminal
leaf01(config)# interface vlan10
leaf01(config-if)# ip pim active-active
leaf01(config-if)# ip igmp
leaf01(config-if)# end
leaf01# write memory
leaf01# exit
要验证 PIM 主动-主动配置,请运行 vtysh show ip pim mlag summary
命令
cumulus@leaf01:mgmt:~$ sudo vtysh
...
leaf01# show ip pim mlag summary
MLAG daemon connection: up
MLAG peer state: up
Zebra peer state: up
MLAG role: PRIMARY
Local VTEP IP: 0.0.0.0
Anycast VTEP IP: 0.0.0.0
Peerlink: peerlink.4094
Session flaps: mlagd: 0 mlag-peer: 0 zebra-peer: 0
Message Statistics:
mroute adds: rx: 5, tx: 5
mroute dels: rx: 0, tx: 0
peer zebra status updates: 1
PIM status updates: 0
VxLAN updates: 0
故障排除
本节提供用于检查您的 PIM 配置的命令,并提供故障排除技巧。
PIM Show 命令
要显示 IP 组播路由表的内容,请运行 vtysh show ip mroute
命令。您可以从标志中验证 (S,G) 和 (*,G) 状态条目,并检查传入和传出接口是否正确
cumulus@fhr:~$ sudo vtysh
...
fhr# show ip mroute
IP Multicast Routing Table
Flags: S - Sparse, C - Connected, P - Pruned
R - RP-bit set, F - Register flag, T - SPT-bit set
Source Group Flags Proto Input Output TTL Uptime
10.1.10.101 239.1.1.1 SFP none vlan10 none 0 --:--:--
要查看交换机上的活动源,请运行 vtysh show ip pim upstream
命令。
cumulus@fhr:~$ sudo vtysh
...
fhr# show ip pim upstream
Iif Source Group State Uptime JoinTimer RSTimer KATimer RefCnt
vlan10 10.1.10.101 239.1.1.1 Prune 00:07:40 --:--:-- 00:00:36 00:02:50 1
要显示 S,Gs 的上游信息以及加入组播树的意愿,请运行 vtysh show ip pim upstream-join-desired
命令。
cumulus@fhr:~$ sudo vtysh
...
fhr# show ip pim upstream-join-desired
Source Group EvalJD
10.1.10.101 239.1.1.1 yes
要显示交换机上的 PIM 接口,请运行 vtysh show ip pim interface
命令。
cumulus@fhr:mgmt:~$ sudo vtysh
...
fhr# show ip pim interface
Interface State Address PIM Nbrs PIM DR FHR IfChannels
lo up 10.10.10.1 0 local 0 0
swp51 up 10.10.10.1 1 10.10.10.101 0 0
vlan10 up 10.1.10.1 0 local 1 0
vtysh show ip pim interface detail
命令显示有关交换机上 PIM 接口的更多详细信息
cumulus@fhr:~$ sudo vtysh
...
fhr# show ip pim interface detail
...
Interface : vlan10
State : up
Address : 10.1.10.1 (primary)
fe80::4638:39ff:fe00:31/64
Designated Router
-----------------
Address : 10.1.10.1
Priority : 1(0)
Uptime : --:--:--
Elections : 1
Changes : 0
FHR - First Hop Router
----------------------
239.1.1.1 : 10.1.10.101 is a source, uptime is 00:03:08
...
要显示 PIM 接口的本地成员信息,请运行 vtysh show ip pim local-membership
命令。
cumulus@lhr:~$ sudo vtysh
...
lhr# show ip pim local-membership
Interface Address Source Group Membership
vlan20 10.2.10.1 * 239.1.1.1 INCLUDE
要显示有关已知 S,Gs、IIF 和 OIL 的信息,请运行 vtysh show ip pim state
命令。
cumulus@fhr:~$ sudo vtysh
...
fhr# show ip pim state
Codes: J -> Pim Join, I -> IGMP Report, S -> Source, * -> Inherited from (*,G), V -> VxLAN, M -> Muted
Active Source Group RPT IIF OIL
1 10.1.10.101 239.1.1.1 n vlan10
要显示接口的 IGMP 配置设置,请运行 nv show interface <interface> ip igmp
命令
cumulus@lhr:~$ nv show interface swp3 ip igmp
operational applied
--------------------------- ----------- -------
enable on
version 3 3
fast-leave off
query-interval 125 125
query-max-response-time 100 100
last-member-query-interval 10
last-member-query-count 2 2
[static-group]
interface-state up
ip-address 33.1.1.10
ifindex 3
querier local
querier-ip 33.1.1.10
query-start-count 0
group-membership-interval 350
older-host-present-interval 350
other-querier-interval 300
robustness-variable 2
startup-query-interval 31
last-member-query-time 20
timers
query-timer 00:00:12
query-other-timer --:--:--
flags
multicast on
broadcast on
lan-delay on
要显示接口的 IGMP 运行数据,请运行 NVUE nv show interface <interface> ip igmp -o json
命令或 vtysh show ip igmp statistics
命令。
要验证接收者是否正在为组发送 IGMP 报告(加入消息),请运行 NVUE nv show interface <interface> ip igmp group
命令或 vtysh show ip igmp groups
命令。
cumulus@lhr:~$ nv show interface swp3 ip igmp group
StaticGroupID filter-mode source-count timer uptime version Summary
------------- ----------- ------------ -------- -------- ------- -------------------------
225.1.101.1 exclude 1 00:02:43 00:02:56 3 source-address: *
225.1.101.2 exclude 1 00:02:43 00:02:56 3 source-address: *
225.1.101.3 exclude 1 00:02:43 00:02:56 3 source-address: *
225.1.101.4 exclude 1 00:02:43 00:02:56 3 source-address: *
225.1.101.5 exclude 1 00:02:43 00:02:56 3 source-address: *
232.1.1.99 include 1 --:--:-- 00:00:02 3 source-address: 10.1.10.1
要显示 IGMP 源信息,请运行 vtysh show ip igmp sources
命令。
cumulus@lhr:~$ sudo vtysh
...
lhr# show ip igmp sources
Interface Address Group Source Timer Fwd Uptime
vlan20 10.2.10.1 239.1.1.1 * 03:13 Y 05:28:42
FHR 卡在注册过程中
当组播源启动时,FHR 从 RPF 接口向源发送单播 PIM 注册消息。在 RP 接收到 PIM 注册消息后,它会向 FHR 发送 PIM register stop
消息以结束注册过程。如果此通信出现问题,FHR 将卡在注册过程中,这可能会导致高 CPU 负载(FHR CPU 生成并向 RP CPU 发送 PIM 注册数据包)。
要评估此问题,请查看 FHR。您可以在此处看到 pimreg
的输出接口。如果它在几秒钟内没有更改为接口,则 FHR 可能仍处于注册过程中。
cumulus@fhr:~$ sudo vtysh
...
fhr# show ip mroute
Source Group Proto Input Output TTL Uptime
10.1.10.101 239.2.2.3 PIM vlan10 pimreg 1 00:03:59
要排除此问题,请执行以下操作
验证 FHR 是否可以到达 RP。如果 RP 和 FHR 无法通信,则注册过程将失败
cumulus@fhr:~$ ping 10.10.10.101 PING 10.10.10.101 (10.10.10.101) from 10.1.10.1: 56(84) bytes of data. ^C --- 10.0.0.21 ping statistics --- 4 packets transmitted, 0 received, 100% packet loss, time 3000ms
在 RP 上,使用
tcpdump
查看 PIM 注册数据包是否到达cumulus@rp01:~$ sudo tcpdump -i swp1 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on swp1, link-type EN10MB (Ethernet), capture size 262144 bytes 23:33:17.524982 IP 10.1.10.101 > 10.10.10.101: PIMv2, Register, length 66
如果交换机正在接收 PIM 注册数据包,请通过运行 vtysh
debug pim packets
命令来验证 PIM 是否看到它们cumulus@fhr:~$ sudo vtysh -c "debug pim packets" PIM Packet debugging is on cumulus@rp01:~$ sudo tail /var/log/frr/frr.log 2016/10/19 23:46:51 PIM: Recv PIM REGISTER packet from 172.16.5.1 to 10.0.0.21 on swp30: ttl=255 pim_version=2 pim_msg_size=64 checksum=a681
在 FHR 上重复该过程,以查看它是否接收到 PIM register stop 消息并将其传递给 PIM 进程
cumulus@fhr:~$ sudo tcpdump -i swp51 23:58:59.841625 IP 172.16.5.1 > 10.0.0.21: PIMv2, Register, length 28 23:58:59.842466 IP 10.0.0.21 > 172.16.5.1: PIMv2, Register Stop, length 18 cumulus@fhr:~$ sudo vtysh -c "debug pim packets" PIM Packet debugging is on cumulus@fhr:~$ sudo tail -f /var/log/frr/frr.log 2016/10/19 23:59:38 PIM: Recv PIM REGSTOP packet from 10.10.10.101 to 10.10.10.1 on swp51: ttl=255 pim_version=2 pim_msg_size=18 checksum=5a39
LHR 未构建 *,G
如果您未在面向接收者的接口上同时启用 PIM 和 IGMP,则 LHR 不会构建 *,G。
cumulus@lhr:~$ sudo vtysh
...
lhr# show run
!
interface vlan20
ip igmp
ip pim
要排除此问题,请确保在同时启用 PIM 和 IGMP 时,接收者发送 IGMPv3 加入消息
cumulus@lhr:~$ sudo tcpdump -i vlan20 igmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on vlan20, link-type EN10MB (Ethernet), capture size 262144 bytes
00:03:55.789744 IP 10.2.10.1 > igmp.mcast.net: igmp v3 report, 1 group record(s)
FHR 上未创建 mroute
要排除此问题,请执行以下操作
验证 FHR 是否正在接收组播流量
cumulus@fhr:~$ sudo tcpdump -i vlan10 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on vlan10, link-type EN10MB (Ethernet), capture size 262144 bytes 19:57:58.429632 IP 10.1.10.101.42420 > 239.1.1.1.1000: UDP, length 8 19:57:59.431250 IP 10.1.10.101.42420 > 239.1.1.1.1000: UDP, length 8
验证面向源的接口上的 PIM 配置
cumulus@fhr:~$ sudo vtysh ... fhr# show run ! interface vlan10 ip igmp ip pim !
验证源的 RPF 接口是否与接收组播流量的接口匹配
fhr# show ip rpf 10.1.10.1 Routing entry for 10.1.10.0/24 using Unicast RIB Known via "connected", distance 0, metric 0, best Last update 1d00h26m ago * directly connected, vlan10
验证组播组的 RP 配置
fhr# show ip pim rp-info RP address group/prefix-list OIF I am RP Source Group-Type 10.10.10.101 224.0.0.0/4 swp51 no Static ASM
活跃组的 RP 上没有 S,G
即使 FR 创建了 mroute,当组播组没有活跃接收者时,RP 也不会构建 mroute。
cumulus@rp01:~$ sudo vtysh
...
rp01# show ip mroute
Source Group Flags Proto Input Output TTL Uptime
您可以使用 vtysh show ip pim upstream
命令在 RP 上查看活动源。
cumulus@rp01:~$ sudo vtysh
...
rp01# show ip pim upstream
Iif Source Group State Uptime JoinTimer RSTimer KATimer RefCnt
vlan10 10.1.10.101 239.1.1.1 Prune 00:08:03 --:--:-- --:--:-- 00:02:20 1
硬件中没有 mroute 条目
要验证硬件 IP 组播条目是否为最大值,请运行 cl-resource-query | grep Mcast
命令。
cumulus@switch:~$ cl-resource-query | grep Mcast
Total Mcast Routes: 450, 0% of maximum value 450
请参阅转发表示例和配置文件大小。
验证 MSDP 会话状态
要验证 MSDP 会话的状态,请运行 vtysh show ip msdp mesh-group
命令。
cumulus@switch:~$ sudo vtysh
...
switch# show ip msdp mesh-group
Mesh group : pod1
Source : 10.1.10.101
Member State
10.1.10.102 established
10.1.10.103 established
cumulus@switch:~$ sudo vtysh
switch# show ip msdp peer
Peer Local State Uptime SaCnt
10.1.10.102 10.1.10.101 established 00:07:21 0
10.1.10.103 10.1.10.101 established 00:07:21 0
查看活动源
要查看交换机本地(通过 PIM 注册消息)和从 MSDP 对等方学习到的活动源,请运行 vtysh show ip msdp sa
命令。
cumulus@switch:~$ sudo vtysh
...
switch# show ip msdp sa
Source Group RP Local SPT Uptime
10.1.10.101 239.1.1.1 10.10.10.101 n n 00:00:40
10.1.10.101 239.1.1.2 100.10.10.101 n n 00:00:25
清除 PIM 状态和统计信息
如果您正在排除故障或更改组播环境,您可以
- 清除 VRF 中所有 PIM 接口的 PIM 邻居。
- 清除 VRF 中所有 PIM 接口的流量统计信息。
- 清除 IGMP 接口状态。
要清除 VRF 中所有 PIM 接口的 PIM 邻居
cumulus@switch:~$ nv action clear vrf default router pim interfaces
Action succeeded
要清除 VRF 中所有 PIM 接口的流量统计信息
cumulus@switch:~$ nv action clear vrf default router pim interface-traffic
Action succeeded
要清除 IGMP 接口状态
cumulus@switch:~$ nv action clear router igmp interfaces
Action succeeded
要清除 VRF 中所有 PIM 接口的 PIM 邻居
cumulus@switch:~$ sudo vtysh
...
switch# clear ip pim vrf default interfaces
switch# exit
要清除 VRF 中所有 PIM 接口的流量统计信息
cumulus@switch:~$ sudo vtysh
...
switch# clear ip pim vrf default interface traffic
switch# exit
要重新扫描 PIM OIL 以更新 VRF 中的输出接口列表
cumulus@switch:~$ sudo vtysh
...
switch# clear ip pim vrf default oil
switch# exit
要清除 VRF 中的所有 PIM 进程统计信息
cumulus@switch:~$ sudo vtysh
...
switch# clear ip pim statistics vrf default
switch# exit
要清除所有 PIM 进程统计信息
cumulus@switch:~$ sudo vtysh
...
switch# clear ip pim statistics
switch# exit
要清除 IGMP 接口状态
cumulus@switch:~$ sudo vtysh
...
switch# clear ip igmp interfaces
switch# exit
配置示例
以下示例在 leaf01、leaf02 和 spine01 上配置 PIM 和 BGP。
- server01(源)通过 VLAN 感知网桥(VLAN 10)连接到 leaf01 (FHR)。
- leaf01 通过 swp51 连接到 spine01 (RP)。
- spine01 通过 swp2 连接到 leaf02 (LHR)。
- leaf02 通过 VLAN 感知网桥(VLAN 20)连接到 server02(接收者)。
沿共享树的流量流 | |
---|---|
![]() | 1. FHR 从源接收组播数据包,将数据包封装在单播 PIM 注册消息中,然后将其发送到 RP。 2. RP 构建 (S,G) mroute,解封装组播数据包,然后沿着 (*,G) 树向接收者转发。 3. LHR 接收组播流量,并看到它具有到源的更短路径。它从 leaf01 请求组播流,并同时将组播流发送到接收者。 |
最短路径树的流量流 | |
---|---|
![]() | 1. FHR 直接从 LHR 听到 PIM 加入消息,并将组播流量直接转发到它。 2. LHR 同时从 FHR 和 RP 接收组播数据包。LHR 丢弃来自 RP 的数据包,并从 RP 剪枝自身。 3. RP 从 LHR 接收剪枝消息,并指示 FHR 停止发送 PIM 注册消息 4. 流量继续在 FHR 和 LHR 之间直接传输。 |
cumulus@leaf01:~$ nv set router pim enable on
cumulus@leaf01:~$ nv set interface lo ip address 10.10.10.1/32
cumulus@leaf01:~$ nv set interface swp1,swp49,swp51
cumulus@leaf01:~$ nv set interface swp1 bridge domain br_default
cumulus@leaf01:~$ nv set interface swp1 bridge domain br_default access 10
cumulus@leaf01:~$ nv set bridge domain br_default vlan 10
cumulus@leaf01:~$ nv set interface vlan10 ip address 10.1.10.1/24
cumulus@leaf01:~$ nv set router bgp autonomous-system 65101
cumulus@leaf01:~$ nv set router bgp router-id 10.10.10.1
cumulus@leaf01:~$ nv set vrf default router bgp neighbor swp51 remote-as external
cumulus@leaf01:~$ nv set vrf default router bgp address-family ipv4-unicast network 10.10.10.1/32
cumulus@leaf01:~$ nv set vrf default router bgp address-family ipv4-unicast network 10.1.10.0/24
cumulus@leaf01:~$ nv set interface lo router pim
cumulus@leaf01:~$ nv set interface swp51 router pim
cumulus@leaf01:~$ nv set interface vlan10 router pim
cumulus@leaf01:~$ nv set interface vlan10 ip igmp
cumulus@leaf01:~$ nv set vrf default router pim address-family ipv4 rp 10.10.10.101
cumulus@leaf01:~$ nv config apply
cumulus@leaf02:~$ nv set router pim enable on
cumulus@leaf02:~$ nv set interface lo ip address 10.10.10.2/32
cumulus@leaf02:~$ nv set interface swp2,swp49,swp51
cumulus@leaf02:~$ nv set interface swp2 bridge domain br_default
cumulus@leaf02:~$ nv set interface swp2 bridge domain br_default access 20
cumulus@leaf02:~$ nv set bridge domain br_default vlan 20
cumulus@leaf02:~$ nv set interface vlan20 ip address 10.2.10.1/24
cumulus@leaf02:~$ nv set router bgp autonomous-system 65102
cumulus@leaf02:~$ nv set router bgp router-id 10.10.10.2
cumulus@leaf02:~$ nv set vrf default router bgp neighbor swp51 remote-as external
cumulus@leaf02:~$ nv set vrf default router bgp address-family ipv4-unicast network 10.10.10.2/32
cumulus@leaf02:~$ nv set vrf default router bgp address-family ipv4-unicast network 10.2.10.0/24
cumulus@leaf02:~$ nv set interface lo router pim
cumulus@leaf02:~$ nv set interface swp51 router pim
cumulus@leaf02:~$ nv set interface vlan20 router pim
cumulus@leaf02:~$ nv set interface vlan20 ip igmp
cumulus@leaf02:~$ nv set vrf default router pim address-family ipv4 rp 10.10.10.101
cumulus@leaf02:~$ nv config apply
cumulus@spine01:~$ nv set router pim enable on
cumulus@spine01:~$ nv set interface lo ip address 10.10.10.101/32
cumulus@spine01:~$ nv set router bgp autonomous-system 65199
cumulus@spine01:~$ nv set router bgp router-id 10.10.10.101
cumulus@spine01:~$ nv set vrf default router bgp neighbor swp1 remote-as external
cumulus@spine01:~$ nv set vrf default router bgp neighbor swp2 remote-as external
cumulus@spine01:~$ nv set vrf default router bgp address-family ipv4-unicast network 10.10.10.101/32
cumulus@spine01:~$ nv set interface lo router pim
cumulus@spine01:~$ nv set interface swp1 router pim
cumulus@spine01:~$ nv set interface swp2 router pim
cumulus@spine01:~$ nv set vrf default router pim address-family ipv4 rp 10.10.10.101
cumulus@spine01:~$ nv config apply
cumulus@leaf01:mgmt:~$ sudo cat /etc/nvue.d/startup.yaml
- set:
bridge:
domain:
br_default:
vlan:
'10': {}
interface:
eth0:
ip:
address:
dhcp: {}
vrf: mgmt
type: eth
lo:
ip:
address:
10.10.10.1/32: {}
router:
pim:
enable: on
type: loopback
swp1:
bridge:
domain:
br_default:
access: 10
type: swp
swp49:
type: swp
swp51:
router:
pim:
enable: on
type: swp
vlan10:
ip:
address:
10.1.10.1/24: {}
igmp:
enable: on
router:
pim:
enable: on
type: svi
vlan: 10
router:
bgp:
autonomous-system: 65101
enable: on
router-id: 10.10.10.1
pim:
enable: on
service:
ntp:
mgmt:
server:
0.cumulusnetworks.pool.ntp.org: {}
1.cumulusnetworks.pool.ntp.org: {}
2.cumulusnetworks.pool.ntp.org: {}
3.cumulusnetworks.pool.ntp.org: {}
system:
aaa:
class:
nvapply:
action: allow
command-path:
/:
permission: all
nvshow:
action: allow
command-path:
/:
permission: ro
sudo:
action: allow
command-path:
/:
permission: all
role:
nvue-admin:
class:
nvapply: {}
nvue-monitor:
class:
nvshow: {}
system-admin:
class:
nvapply: {}
sudo: {}
user:
cumulus:
full-name: cumulus,,,
hashed-password: $6$Cir2YG.pLVeUZFGi$txBVny7YpjZDGE2gOIz0G.bbs3CzYQ1P9T9XgCqV7oRkfPUQ2gWoJvnnhMH3NtmVxA2.40P5bgaMydfBsIzYP0
role: system-admin
api:
state: enabled
config:
auto-save:
enable: on
control-plane:
acl:
acl-default-dos:
inbound: {}
acl-default-whitelist:
inbound: {}
global:
system-mac: 44:38:39:22:01:7a
hostname: leaf01
reboot:
mode: cold
ssh-server:
state: enabled
wjh:
channel:
forwarding:
trigger:
l2: {}
l3: {}
tunnel: {}
enable: on
vrf:
default:
router:
bgp:
address-family:
ipv4-unicast:
enable: on
network:
10.1.10.0/24: {}
10.10.10.1/32: {}
enable: on
neighbor:
swp51:
remote-as: external
type: unnumbered
pim:
address-family:
ipv4:
rp:
10.10.10.101: {}
enable: on
cumulus@leaf02:mgmt:~$ sudo cat /etc/nvue.d/startup.yaml
- set:
bridge:
domain:
br_default:
vlan:
'20': {}
interface:
eth0:
ip:
address:
dhcp: {}
vrf: mgmt
type: eth
lo:
ip:
address:
10.10.10.2/32: {}
router:
pim:
enable: on
type: loopback
swp2:
bridge:
domain:
br_default:
access: 20
type: swp
swp49:
type: swp
swp51:
router:
pim:
enable: on
type: swp
vlan20:
ip:
address:
10.2.10.1/24: {}
igmp:
enable: on
router:
pim:
enable: on
type: svi
vlan: 20
router:
bgp:
autonomous-system: 65102
enable: on
router-id: 10.10.10.2
pim:
enable: on
service:
ntp:
mgmt:
server:
0.cumulusnetworks.pool.ntp.org: {}
1.cumulusnetworks.pool.ntp.org: {}
2.cumulusnetworks.pool.ntp.org: {}
3.cumulusnetworks.pool.ntp.org: {}
system:
aaa:
class:
nvapply:
action: allow
command-path:
/:
permission: all
nvshow:
action: allow
command-path:
/:
permission: ro
sudo:
action: allow
command-path:
/:
permission: all
role:
nvue-admin:
class:
nvapply: {}
nvue-monitor:
class:
nvshow: {}
system-admin:
class:
nvapply: {}
sudo: {}
user:
cumulus:
full-name: cumulus,,,
hashed-password: $6$02mrE7tXtzp0MzJV$Ou9Vo4jcCC5ztEzb8ChYrDaGiqGwLKPQj2VRPEDYt0/EuTjmVDXM65TpJ06cmPGQZ0bf5NEmaMAH7cXkTQ4j9/
role: system-admin
api:
state: enabled
config:
auto-save:
enable: on
control-plane:
acl:
acl-default-dos:
inbound: {}
acl-default-whitelist:
inbound: {}
global:
system-mac: 44:38:39:22:01:78
hostname: leaf02
reboot:
mode: cold
ssh-server:
state: enabled
wjh:
channel:
forwarding:
trigger:
l2: {}
l3: {}
tunnel: {}
enable: on
vrf:
default:
router:
bgp:
address-family:
ipv4-unicast:
enable: on
network:
10.2.10.0/24: {}
10.10.10.2/32: {}
enable: on
neighbor:
swp51:
remote-as: external
type: unnumbered
pim:
address-family:
ipv4:
rp:
10.10.10.101: {}
enable: on
cumulus@spine01:mgmt:~$ sudo cat /etc/nvue.d/startup.yaml
- set:
interface:
eth0:
ip:
address:
dhcp: {}
vrf: mgmt
type: eth
lo:
ip:
address:
10.10.10.101/32: {}
router:
pim:
enable: on
type: loopback
swp1:
router:
pim:
enable: on
type: swp
swp2:
router:
pim:
enable: on
type: swp
router:
bgp:
autonomous-system: 65199
enable: on
router-id: 10.10.10.101
pim:
enable: on
service:
ntp:
mgmt:
server:
0.cumulusnetworks.pool.ntp.org: {}
1.cumulusnetworks.pool.ntp.org: {}
2.cumulusnetworks.pool.ntp.org: {}
3.cumulusnetworks.pool.ntp.org: {}
system:
aaa:
class:
nvapply:
action: allow
command-path:
/:
permission: all
nvshow:
action: allow
command-path:
/:
permission: ro
sudo:
action: allow
command-path:
/:
permission: all
role:
nvue-admin:
class:
nvapply: {}
nvue-monitor:
class:
nvshow: {}
system-admin:
class:
nvapply: {}
sudo: {}
user:
cumulus:
full-name: cumulus,,,
hashed-password: $6$ojEWGEv5NjLUIQ2T$3YJ2PBG0ekWj0nUoY5Psn8wzd6lsxW8KxDTMTXGZiZwoT8VMSYF0zqF/3AVjx3NhIJ8x10YJ5aCTeBz7kR7Ns1
role: system-admin
api:
state: enabled
config:
auto-save:
enable: on
control-plane:
acl:
acl-default-dos:
inbound: {}
acl-default-whitelist:
inbound: {}
global:
system-mac: 44:38:39:22:01:82
hostname: spine01
reboot:
mode: cold
ssh-server:
state: enabled
wjh:
channel:
forwarding:
trigger:
l2: {}
l3: {}
tunnel: {}
enable: on
vrf:
default:
router:
bgp:
address-family:
ipv4-unicast:
enable: on
network:
10.10.10.101/32: {}
enable: on
neighbor:
swp1:
remote-as: external
type: unnumbered
swp2:
remote-as: external
type: unnumbered
pim:
address-family:
ipv4:
rp:
10.10.10.101: {}
enable: on
cumulus@leaf01:mgmt:~$ sudo cat /etc/network/interfaces
...
auto lo
iface lo inet loopback
address 10.10.10.1/32
auto mgmt
iface mgmt
address 127.0.0.1/8
address ::1/128
vrf-table auto
auto eth0
iface eth0 inet dhcp
ip-forward off
ip6-forward off
vrf mgmt
auto swp1
iface swp1
bridge-access 10
auto swp49
iface swp49
auto swp51
iface swp51
auto vlan10
iface vlan10
address 10.1.10.1/24
hwaddress 44:38:39:22:01:b1
vlan-raw-device br_default
vlan-id 10
auto br_default
iface br_default
bridge-ports swp1
hwaddress 44:38:39:22:01:b1
bridge-vlan-aware yes
bridge-vids 10
bridge-pvid 1
cumulus@leaf02:mgmt:~$ sudo cat /etc/network/interfaces
...
auto lo
iface lo inet loopback
address 10.10.10.2/32
auto mgmt
iface mgmt
address 127.0.0.1/8
address ::1/128
vrf-table auto
auto eth0
iface eth0 inet dhcp
ip-forward off
ip6-forward off
vrf mgmt
auto swp2
iface swp2
bridge-access 20
auto swp49
iface swp49
auto swp51
iface swp51
auto vlan20
iface vlan20
address 10.2.10.1/24
hwaddress 44:38:39:22:01:af
vlan-raw-device br_default
vlan-id 20
auto br_default
iface br_default
bridge-ports swp2
hwaddress 44:38:39:22:01:af
bridge-vlan-aware yes
bridge-vids 20
bridge-pvid 1
cumulus@spine01:mgmt:~$ sudo cat /etc/network/interfaces
...
auto lo
iface lo inet loopback
address 10.10.10.101/32
auto mgmt
iface mgmt
address 127.0.0.1/8
address ::1/128
vrf-table auto
auto eth0
iface eth0 inet dhcp
ip-forward off
ip6-forward off
vrf mgmt
auto swp1
iface swp1
auto swp2
iface swp2
cumulus@server01:~$ sudo cat /etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback
# The OOB network interface
auto eth0
iface eth0 inet dhcp
# The data plane network interfaces
auto eth1
iface eth1 inet manual
address 10.1.10.101
netmask 255.255.255.0
mtu 9000
post-up ip route add 10.0.0.0/8 via 10.1.10.1
cumulus@server02:~$ sudo cat /etc/network/interfaces
auto lo
iface lo inet loopback
# The OOB network interface
auto eth0
iface eth0 inet dhcp
# The data plane network interfaces
auto eth2
iface eth2 inet manual
address 10.2.10.102
netmask 255.255.255.0
mtu 9000
post-up ip route add 10.0.0.0/8 via 10.2.10.1
cumulus@leaf01:mgmt:~$ sudo cat /etc/frr/frr.conf ...
vrf default ip pim rp 10.10.10.101 224.0.0.0/4 exit-vrf vrf mgmt exit-vrf interface lo ip pim interface swp51 ip pim interface vlan10 ip igmp ip igmp version 3 ip igmp query-interval 125 ip igmp last-member-query-interval 100 ip igmp last-member-query-count 2 ip igmp query-max-response-time 1000 ip pim router bgp 65101 vrf default bgp router-id 10.10.10.1 timers bgp 3 9 bgp deterministic-med ! Neighbors neighbor swp51 interface remote-as external neighbor swp51 timers 3 9 neighbor swp51 timers connect 10 neighbor swp51 advertisement-interval 0 neighbor swp51 capability extended-nexthop ! Address families address-family ipv4 unicast network 10.1.10.0/24 network 10.10.10.1/32 maximum-paths ibgp 64 maximum-paths 64 distance bgp 20 200 200 neighbor swp51 activate exit-address-family ! end of router bgp 65101 vrf default
cumulus@leaf02:mgmt:~$ sudo cat /etc/frr/frr.conf
...
vrf default
ip pim rp 10.10.10.101 224.0.0.0/4
exit-vrf
vrf mgmt
exit-vrf
interface lo
ip pim
interface swp51
ip pim
interface vlan20
ip igmp
ip igmp version 3
ip igmp query-interval 125
ip igmp last-member-query-interval 100
ip igmp last-member-query-count 2
ip igmp query-max-response-time 1000
ip pim
router bgp 65102 vrf default
bgp router-id 10.10.10.2
timers bgp 3 9
bgp deterministic-med
! Neighbors
neighbor swp51 interface remote-as external
neighbor swp51 timers 3 9
neighbor swp51 timers connect 10
neighbor swp51 advertisement-interval 0
neighbor swp51 capability extended-nexthop
! Address families
address-family ipv4 unicast
network 10.10.10.2/32
network 10.2.10.0/24
maximum-paths ibgp 64
maximum-paths 64
distance bgp 20 200 200
neighbor swp51 activate
exit-address-family
! end of router bgp 65102 vrf default
cumulus@spine01:mgmt:~$ sudo cat /etc/frr/frr.conf
...
rf default
ip pim rp 10.10.10.101 224.0.0.0/4
exit-vrf
vrf mgmt
exit-vrf
interface lo
ip pim
interface swp1
ip pim
interface swp2
ip pim
router bgp 65199 vrf default
bgp router-id 10.10.10.101
timers bgp 3 9
bgp deterministic-med
! Neighbors
neighbor swp1 interface remote-as external
neighbor swp1 timers 3 9
neighbor swp1 timers connect 10
neighbor swp1 advertisement-interval 0
neighbor swp1 capability extended-nexthop
neighbor swp2 interface remote-as external
neighbor swp2 timers 3 9
neighbor swp2 timers connect 10
neighbor swp2 advertisement-interval 0
neighbor swp2 capability extended-nexthop
! Address families
address-family ipv4 unicast
network 10.10.10.101/32
maximum-paths ibgp 64
maximum-paths 64
distance bgp 20 200 200
neighbor swp1 activate
neighbor swp2 activate
exit-address-family
! end of router bgp 65199 vrf default
此模拟正在运行 Cumulus Linux 5.11。Cumulus Linux 5.12 模拟即将推出。
模拟从示例 PIM 配置开始。为了简化示例,拓扑中只有一个 spine 和两个 leaf。演示已使用 NVUE 命令预先配置。
要验证配置,请运行上面故障排除部分中列出的 PIM show 命令。
注意事项
- Cumulus Linux 不支持非原生转发(注册解封装)。当 PIM *,G 树正在从 RP 构建到 FHR 以触发原生转发时,预计会出现初始数据包丢失。
- 当通过 *,G 树转发时,Cumulus Linux 不会构建 S,G mroute。
- 在 Spectrum-4 交换机上,小于 512 字节的数据包的组播流可能无法达到全线速。Cumulus Linux 支持 512 字节和更大的组播数据包。