MSDP是通过TCP来建立的,端口号为639,和BGP的邻居建立相似,所以要建立MSDP,必须手工指定MSDP peer的地址,TCP由地址小的一端主动发起连接,而地址高的一端则在LISTEN状态等待连接。 待MSDP peer建立成功之后,便开始传递SA信息,MSDP之间的Keepalive包每60秒一个,如果75秒没有收到Keepalive包,则会话被重置,而发送的SA信息也可以被当作Keepalive,即如果75秒没有收到Keepalive但收到了SA,也表示连接正常。当一个RP拥有多个MSDP peer时,在从一个peer那里收到SA之后,会转发给除发送者之外的其它所有peer.

 

MSDP RPF检测_第1张图片 

路由器从MSDP peer收到SA之后,需要做Reverse Path Forwarding (RPF)检测,即反向路径检测,普通的RPF检测的方法是查看自己的路由表中去往发送者IP的数据包该从哪个接口出去,那么从哪个接口收到的数据包就被认为是合法有效的,这个合法的接口也被称为RPF接口,事实上MSDP对于SA数据包的RPF检测要比普通RPF检测复杂的多,但这是MSDP唯一的重点,也是唯一的难点,如果RPF检测失败,就表示SA信息被丢弃,那么组播树就无法建立,组播也就无法通信。

对收到的SA数据包做RPF检测,和普通的RPF检测不一样,普通的RPF检测是根据所有的IGP路由表以及所有的BGP单播路由表来做检测的,即命令“show ip route”看到的路由表,而对SA数据包做的RPF检测只能根据BGP路由表来做检测,单播BGP和组播BGP都可以,即Unicast Border Gateway Protocol (uBGP)和Multicast Border Gateway Protocol (MBGP),MBGP是Multiprotocol-Border Gateway Protocol (MP-BGP)应用的一种,因为MP-BGP不仅可以扩展到组播,还可以扩展到IPv6以及MPLS。如果同时存在MBGP和单播BGP,则MBGP优先,既然对SA数据包做的RPF检测必须依靠BGP路由表,那就意味着PIM-SM域之间必须运行BGP,如果没有BGP,那么SA的RPF检测将失败,最终导致SA数据包被丢弃.

以下3种情况下收到的SA是不需要做RPF检测的:(BGP和MBGP都是不需要的)

1.发送方MSDP peer是default MSDP peer或是唯一的1个MSDP peer(即只配置了1条ip msdp peer命令)的情况下;
2.发送方MSDP peer是MSDP Mesh Group中的一员;
3.发送方MSDP peer的IP地址与SA数据包中的RP地址相同。
SA的RPF检测3种:

1.当MSDP peer是iBGP邻居:

如果BGP路由表中显示去往SA数据包中RP地址的最佳路径就是走这个iBGP邻居,则检测通过,否则检测失败。(先查多播路由表(MRIB),再查单播路由表(URIB))

2.当MSDP peer是eBGP邻居;

如果BGP路由表中显示去往SA数据包中RP地址的最佳路径的下一跳AS号码就是这个eBGP邻居的AS号码,则检测通过,否则检测失败。(先查多播路由表(MRIB),再查单播路由表(URIB))

3.当MSDP peer不是BGP邻居(但域之间也必须有BGP)
如果BGP路由表中显示去往SA数据包中RP地址的最佳路径的下一跳AS号码和去往MSDP peer的最佳路径的下一跳AS号码相同,则检测通过,否则检测失败。(先查多播路由表(MRIB),再查单播路由表(URIB)).