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

网络要求

要求

  • 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请求

组播互通过程

第一部分 全网链路互通

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

RA

kotlin 复制代码
#
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

python 复制代码
# 配置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

python 复制代码
#
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

kotlin 复制代码
#
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单播邻居关系

验证MBGP邻居关系

查看BGP组播路由

查看路由条目

第二部分 组播配置

RA

kotlin 复制代码
pim

multicast routing 

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

RB

kotlin 复制代码
# 全接口启用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

kotlin 复制代码
# 全接口启用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

kotlin 复制代码
# 配置PIM IGMP 组播路由功能

multicast routing

pim

igmp

interface GigabitEthernet0/0/0
 pim sm

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

RA查看RP地址

RB查看MSDP邻居

RD查看IGMP组

组播测试

组播源配置

组播主机配置

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

验证IGMP是否生效

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

PIM生成流程

RD正常接受下游主机客户端的Join请求 且上游接口指向PIM-RP(RC路由器)
还未启动组播服务器时 RC无法找到上游接口 也就无法建立完整PIM树
现在我们开始运行组播服务器
此时再看RC 已经收到来自RB的msdp-sa
并且生成完成的PIM路由 即上游接口以及组播服务器地址
由此我们可以发现 234.235.236.237已经生成完整的PIM树
并且通过抓包 我们也发现了大量的测试组播包 到此实验成功


扩展知识

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 路由器 精确查询特定组和特定源的成员关系 支持复杂的源过滤成员关系维护
相关推荐
大面积秃头6 小时前
Http基础协议和解析
网络·网络协议·http
软件技术员9 小时前
使用ACME自动签发SSL 证书
服务器·网络协议·ssl
我也要当昏君9 小时前
6.4 电子邮件 (答案见原书 P284)
网络协议
せいしゅん青春之我11 小时前
[JavaEE初阶]网络协议-状态码
java·网络协议·http
小蝈蝈啊12 小时前
HTTP相关知识点
网络协议·http·iphone
任性不起来了13 小时前
宝塔面板点击ssl证书报错:出错了,面板运行时发生错误!ModuleNotFoundError: No module named ‘OpenSSL‘
网络·网络协议·ssl
stark张宇1 天前
网络排错全流程:从DNS解析到防火墙,逐层拆解常见问题
linux·网络协议·dns
hour_go1 天前
TCP/IP协议相关知识点
网络·笔记·网络协议·tcp/ip