MSDP(TCP:639)
Multicast Source Discovery Protocol组播源发现协议(仅用于IPv4 PIM-SM(不含SSM))
MSDP作用:让不同组播域的RP,知道组播源位置
- 因为组播基于IGP协议,同一个组播域的PIM路由器,全部需要知道RP的位置。在跨AS场景下,需要MSDP
- MSDP不传输组播数据
它仅在RP之间使用SA报文单播传递(S,G)表项,使其他域组成员知道S位置,构建SPT树。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiNx8FesU2cfdGLwczX0xiRGZkRGZ0Xy9GbvNGLyMzXlpXazxSPNVEV2lGc1oUdvVzXpplNBJUaUVkTxE1X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL3IzM0ADN0MTM1IDOwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
- 精确地讲,这里的AS应指的是不同组播域(拥有不同RP)
如图,
- Source活跃后,头一跳路由器向AS1中RP(R2)注册。
- R2作为起源RP,使用MSDP协议向其他MSDP对等体(通常是RP)通告SA报文。
- AS2中,R4不是RP(但R4是MSDP中继),转发SA报文到接收者AS的RP(R5、R6)中。
- R5、R6下存在接收者,根据收到的SA报文,知道了(S,G)信息,朝着Source方向构建SPT(RPF方向,单播方向)
- 实际上R6是RP,建立了到S的最短路径树,但不一定是接收者DR(R7)的最短路径树,所以R7知道了S的位置后,再构建SPT树
MSDP对等体建立过程
SA(Source-Active)报文
- SA消息通告给不同组播域的RP,让各RP知道组播源IP
SA报文封装【IP【TCP 639【TLV】】】
SA消息内容: Source IP 组播源IP
Group 组地址
Source RP IP 组播源所在组播域的RP
SA报文的RPF检查
如图,源RP发送SA消息给自己MSDP对等体,R4收到2份SA消息。
为了防止SA消息成环,MSDP设备收到SA消息时,需要RPF检查。
以R4为例,
R4收到SA后,确定到源RP的最佳下一跳RP=R2(称为RPF对等体),选择RPF接口
不是RPF接口传来的SA丢弃(R3的SA)
RPF接口是由 单播路由(BGP、IGP)、MBGP、静态组播路由 共同决定的
Mesh Group
将所有RP建立全互联的IBGP邻居关系,并成为一个Mesh Group
- Mesh Group组成员SA消息仅传一跳
- Mesh Group组成员发来的SA不进行RPF检查,直接接收
同AS MSDP配置
相同AS,不同组播域
1. IGP(实际中,跨域组播RP之间单播路由可达就行)
2. PIM-SM
[all R] multicast routing-enable
[all R-G] pim sm //组播流量经过的接口开启PIM-SM,环回口可不开
[R1、R2] pim
static-rp 1.1.1.1
[R3、R4] pim
static-rp 4.4.4.4
[R4-G] igmp enable
3. MSDP
[R1] msdp
peer 4.4.4.4 connect-interface LoopBack0
[R4] msdp
peer 1.1.1.1 connect-interface LoopBack0
[RP] display msdp sa-cache //查看SA消息
跨AS MSDP配置
- AS 100、AS 200内部IGP
- R2-R3建立EBGP邻居关系
- 全网PIM-SM协议(静/动RP)
- MSDP(R1、R4互指)
需要考虑的问题:
1. 如果采用动态RP的方式。C-BSR报文逐跳、组播,会跨AS发送。使得RP信息跨AS传递并共同选举,不妥。
[R2-G0/0/1]
[R3-G0/0/0] pim bsr-boundary //设定BSR边界,不传Bootstrap报文
2. R4-R1需要路由互通(构建SPT树、MSDP传SA)
在R2、R3上发布各RP地址的BGP路由,并将BGP引入IGP
3. RP4最终需要朝着源S,建立SPT(需要源的路由)
R2的BGP引入192.168.1.0/24
MSDP实现任播(Anycast)RP
任播RP,多个RP在同AS内使用相同IP
- IGP
- PIM-SM(IGMP)
实现任播RP需要:
1. R1、R4配置相同的IP地址作为C-RP地址,并通告进IGP。各路由器会自动选择“近”的
2. 部属C-BSR尽量在其他设备(或其他IP接口,增加可靠性)。BSR通过Bootstrap报文逐跳、组播告诉了全网,RP=14.1.1.1
此时,AS内部相当于分成了2个组播域(左边4台、右边3台)
出现一个问题,当组播源S活跃时,源DR2需要向RP注册(R2向最近的RP1注册)
这就R2、R1上存在(S,G)表项。而R3、R4上无(S,G)表项。PC4收不到组播流量
所以还需要在R1-R4上启用MSDP,让R1通过SA消息告诉R4组播源的IP
3. R1-R4使用别的IP接口,建立MSDP邻居(Loopback1:1.1.1.1-4.4.4.4)
[R1、R4] msdp
peer 4.4.4.4 connect-interface LoopBack1
这里还存在一个问题:
MSDP发送的RA消息中,携带着源DR的IP(两边都是14.1.1.1冲突)。
还需要命令 [R1、R4] msdp
originating-rp LoopBack1
最终,R1、R4都有(S,G)表项。任播RP实现。