PIM SM +MSDP 组播跨域配置案例(ASM)

65 阅读9分钟

PIM-SM (ASM)

PIM-SM ASM(任意源组播)主要应用于多对多、源不确定的组播通信场景。其核心在于通过汇聚点(RP)作为中转站,接收者只需订阅组地址(G)即可接收数据,而无需关心发送源具体是哪一个。这种模型非常适用于企业或校园内部的多方协作、视频会议、实时数据共享等业务,例如在多个团队需要向同一个组播组自由发布和接收消息的环境中。然而,由于允许任意源向组播组发送数据,ASM存在潜在的安全风险,且RP的管理增加了网络架构的复杂性。正因如此,在源明确的一对多分发领域,它已被更高效、安全的SSM模型所取代。

网络要求

image.png

要求

  • AS100与AS200要部署域间组播。RB是AS100RP,RC是AS200-PIM-SM2-RP RE是PIM-SM3-RP。要求组播客户端可以通过组播地址234.235.236.237访问组播服务器

网络规划

  • AS100与AS200区域IGP为OSPF 区域间运行BGP 实现全网链路互通 RB与RC作为AS区域边界 建立EBGP邻居

  • 全区域路由配置PIM以及组播路由功能 PIM采用SM形式 配置RB,RC,RE为各PIM区域RP PIM区域接口配置bsr服务边界 RB-RC建立MBGP组播邻居

  • 组播客户端上行接口配置igmp 且RD使能igmp功能 用于侦听组播客户端join请求

组播互通过程

image.png

第一部分 全网链路互通

如果您以及实现全网络互联互通 可跳过这部分 RE、RD配置基本相似 RF本实验暂未使用

RA

#
ospf 1 route-id 4.4.4.4

#
interface GigabitEthernet0/0/2
  ip address 192.168.20.254 255.255.255.0
  ospf 1 area 0.0.0.0

#
interface GigabitEthernet0/0/1
 ip address 10.12.2.2 255.255.255.0
 ospf 1 area 0.0.0.0

RB

# 配置BGP与OSPF 路由引入 RC与其类似

#
ospf 1 router-id 1.1.1.1

#
interface LoopBack0
 ip address 1.1.1.1 255.255.255.255
 ospf 1 area 0.0.0.0

# 
interface GigabitEthernet0/0/1
 ip address 10.12.2.1 255.255.255.0
 ospf 1 area 0.0.0.0

#
interface GigabitEthernet0/0/2
 ip address 10.12.1.1 255.255.255.0
 
bgp 100
 router-id 1.1.1.1
 peer 10.12.1.2 as-number 200
 #
 address-family ipv4 unicast
  import-route ospf 1 allow-direct
  peer 10.12.1.2 enable
 #
 address-family ipv4 multicast
  import-route ospf 1 allow-direct
  peer 10.12.1.2 enable

RC

#
ospf 1 router-id 2.2.2.2

#
interface LoopBack0
 ip address 2.2.2.2 255.255.255.255
 ospf 1 area 0.0.0.0

#
interface GigabitEthernet0/0/0
 ip address 10.23.2.2 255.255.255.0
 ospf 1 area 0.0.0.0

#
interface GigabitEthernet0/0/1
 ip address 10.23.1.2 255.255.255.0
 ospf 1 area 0.0.0.0

#
interface GigabitEthernet0/0/2
 ip address 10.12.1.2 255.255.255.0

#
bgp 200
 router-id 2.2.2.2
 peer 10.12.1.1 as-number 100
 #
 address-family ipv4 unicast
  import-route ospf 1 allow-direct
  peer 10.12.1.1 enable
 #
 address-family ipv4 multicast
  import-route ospf 1 allow-direct
  peer 10.12.1.1 enable

RD

#
ospf 1 router-id 3.3.3.3

#
interface LoopBack0
 ip address 3.3.3.3 255.255.255.255
 ospf 1 area 0.0.0.0

#
interface GigabitEthernet0/0/1
 ip address 10.23.1.3 255.255.255.0
 ospf 1 area 0.0.0.0

验证BGP单播邻居关系

image.png

验证MBGP邻居关系

image.png

查看BGP组播路由

image.png

查看路由条目

image.png

第二部分 组播配置

RA

pim

multicast routing 

interface GigabitEthernet0/0/2
 pim sm
  
interface GigabitEthernet0/0/1
 pim sm

RB

# 全接口启用PIM-SM 配置RP、MSDP、建立MSDP邻居 开启组播路由 配置BSR服务边界
pim
 c-bsr 1.1.1.1
 c-rp 1.1.1.1    # 配置PIM区域RP

multicast routing

msdp
 encap-data-enable
 peer 10.12.1.2 connect-interface GigabitEthernet0/0/2 # 建立MSDP邻居

interface GigabitEthernet0/0/2
 pim sm

interface GigabitEthernet0/0/2
 pim sm        
 pim bsr-boundary  # PIM-BSR服务边界

RC

# 全接口启用PIM-SM 配置RP、MSDP、建立MSDP邻居 开启组播路由 配置BSR服务边界
pim
 c-bsr 2.2.2.2
 c-rp 2.2.2.2

msdp
 encap-data-enable
 peer 10.12.1.1 connect-interface GigabitEthernet0/0/2
 peer 10.23.1.3 connect-interface GigabitEthernet0/0/1
 
interface GigabitEthernet0/0/1
 pim sm
 pim bsr-boundary
 
interface GigabitEthernet0/0/0
 pim sm
 
interface GigabitEthernet0/0/2
 pim sm
 pim bsr-boundary

RD

# 配置PIM IGMP 组播路由功能

multicast routing

pim

igmp

interface GigabitEthernet0/0/0
 pim sm

interface GigabitEthernet0/0/1
 igmp enable   # 连接组播客户端侧开启igmp

RA查看RP地址

image.png

RB查看MSDP邻居

image.png

RD查看IGMP组

image.png

组播测试

组播源配置

image.png

组播主机配置

因为PIM-SM 模式为Pull形式 需主机主动发起Join请求 我们使用IPOP发送模拟报文

image.png

验证IGMP是否生效

在IGMP组 我们已经发现我们想要的组播组 image.png

PIM生成流程

RD正常接受下游主机客户端的Join请求 且上游接口指向PIM-RP(RC路由器) image.png

还未启动组播服务器时 RC无法找到上游接口 也就无法建立完整PIM树 image.png

现在我们开始运行组播服务器 image.png

此时再看RC 已经收到来自RB的msdp-sa image.png

并且生成完成的PIM路由 即上游接口以及组播服务器地址 image.png

由此我们可以发现 234.235.236.237已经生成完整的PIM树 image.png

并且通过抓包 我们也发现了大量的测试组播包 到此实验成功 image.png


扩展知识

IGMP的主要功能是在主机(组播组成员)和与其直接相连的组播路由器之间建立和维护组播组成员关系。不同版本的IGMP(v1, v2, v3)报文类型和作用略有不同,下面以最常用和功能最全的IGMPv2IGMPv3为例进行说明。

IGMPv2 报文类型及作用

IGMPv2 是应用非常广泛的版本,它定义了三种报文类型。

1. 成员关系报告(Membership Report - “Join”)
  • 类型值:0x16
  • 发送者:希望加入组播组或响应查询的组播客户端。
  • 作用
    • 主动加入:当主机上的应用程序想要接收某个组播组(例如G)的流量时,它会立即主动向路由器发送一个Report报文,声明“我要加入组G”。这通常被称为“IGMP Join”行为。
    • 响应查询:当主机收到路由器的通用组查询或特定组查询后,如果它仍然对某个组播组感兴趣,它会发送Report报文作为回应,告诉路由器“请继续为组G转发流量”。
  • 工作过程:为了防止网络中出现大量同时发送的Report报文,主机在发送Report前会启动一个随机延时计时器。第一个超时并发送Report的主机代表了整个组,其他监听的主机会取消自己的计时器,这个过程称为报告抑制
2. 通用组查询(General Query)
  • 类型值:0x11
  • 发送者组播路由器
  • 作用
    • 发现成员:路由器周期性地(默认每125秒)向本地网络的所有主机(目的地址224.0.0.1)发送通用组查询。
    • 维护成员关系:它是在询问:“在这个网络里,有没有任何组播组的成员?”任何对任何组播组感兴趣的主机,都会按照报告抑制机制,为它们所在的组发送Membership Report。
    • 判断超时:如果路由器发送了多次查询后,某个组播组始终没有主机报告,路由器就认为该组已无成员,从而停止转发该组播流量。
3. 离开组(Leave Group)
  • 类型值:0x17
  • 发送者:希望离开组播组的组播客户端
  • 作用
    • 主动离开:当主机不再需要接收某个组播组(例如G)的流量时,它会向所有路由器的组播地址(224.0.0.2) 发送一个Leave报文。
    • 快速响应:这个报文的作用是通知路由器:“我们组G有人要离开了,你赶紧确认一下还有没有别人在看。” 这允许路由器快速做出反应,而不是傻傻地等到下一次通用查询超时。
  • 后续动作:路由器收到Leave报文后,会立即向该组G发送特定组查询,询问是否还有成员。如果没有主机回应Report,路由器才会停止转发。

IGMPv3 报文类型及作用

IGMPv3 是目前的主流版本,它最重要的增强是支持源过滤,即主机不仅可以指定加入哪个组,还可以指定只接收来自特定源排除特定源的组播流量。

IGMPv3 的报文类型简化为了两种,但其内容更加复杂。

1. 成员关系报告(Version 3 Membership Report)
  • 类型值:0x22
  • 发送者:组播客户端。
  • 作用
    • 它包含了主机想要接收的组播地址以及对应的源地址列表
    • 主机通过一个Report报文,可以同时声明对多个组播组(或特定源)的成员关系。
  • 模式
    • INCLUDE 模式:表示只希望接收来自指定源列表的、发往该组播组的流量。
      • 例如:“我要加入组G,但只接收来自源S1和S2的流量。”
    • EXCLUDE 模式:表示希望接收来自除了指定源列表以外任何源的、发往该组播组的流量。
      • 例如:“我要加入组G,但不要来自源S3的流量,其他的我都要。”
  • 触发时机
    1. 主机启动时或应用程序改变订阅状态时。
    2. 为了响应路由器的查询。
2. 查询(Version 3 Query)
  • 类型值:0x11(与v2相同,但内容更丰富)
  • 发送者:组播路由器。
  • 作用:IGMPv3的查询报文有三种子类型,功能更精细。
    • 通用组查询:与v2类似,查询网络上任何组播组的任何源的成员。
    • 特定组查询:查询网络上特定组播组的成员。
    • 特定组与源查询:这是v3新增的强大功能。路由器可以查询:“对于组G,还有没有人要接收来自特定源列表(S1, S2, ...)的流量?” 这主要用于当网络拓扑变化时,精确地确认成员关系,避免流量中断。

总结对比表

报文名称IGMP版本发送者主要作用关键特点
成员关系报告v1, v2, v3主机声明加入/维持组成员身份v2/v3可主动发送;v3支持源过滤(INCLUDE/EXCLUDE模式)
通用组查询v1, v2, v3路由器周期性发现和维护所有组成员目的地址为224.0.0.1(所有主机)
离开组v2, v3主机通知路由器自己离开某个组实现快速离开机制,减少网络延迟
特定组查询v2, v3路由器在收到Leave后,确认特定组是否已无成员目的地址为要查询的组播组地址
特定组与源查询仅 v3路由器精确查询特定组和特定源的成员关系支持复杂的源过滤成员关系维护