概述:
这里我们知道了PM SM模型中可以分多个区域,并且同一个BSR发送的Bootstrap报文只能够在同一个区域中泛洪,减少泛洪的范围,更好管理。并且这样通过BSR限定RP作用发范围(只有这个区域内的设备才会收到这个RP信息),对整个区域中的组播信息进行管理,这样显得更加方便管理。但是这也是有问题的,比如一些区域的组播其他区域需要本组播的流量,但是因为自己的RP中没有对应的(S,G)条目,所以无法获取,所以为了让另一个区域的设备能够获取对应的组播流量,MSDP协议诞生了。
MSDP (组播源发现协议)用在组播多域环境和AnycastRP场景下,在RP间通告组播组及组播源的信息的协议。MSDP 工作在TCP之上,服务端口号是639。MSDP 邻居的建立都是由低地址向高地址主动建立的。
在多域环境中,一个组播组的成员或组播源可以分布在多个组播域中,每个域内有各自的RP。例如,如果在一个域中有229.1.2.3组播组的源,而其他的域中也有229.1.2.3组播组的接收者,接收者已建共享树到该域的RP,问当前域的接收者如何收到其他域的组播报文呢?
MSDP不是用来在不同域的RP间传递组播数据的协议,它是在RP间使用SA报文传递(S,G)信息的协议,在SA报文中包含当前活跃的组播源地址、组地址及起源RP的信息。SA报文用来告知其他域中RP当前活跃的组播源的位置,使RP可直接向指定源建SPT树。
如下图所示是一个组播多域环境。当Source活跃后,R1发送注册报文给R2。R2作为起源RP,使用MSDP向其他MSDP对等体通告SA,R4是MSDP中继,转发SA到有接收者的RP,R5和R6是MSDP对等体,根据收到的SA中的s开始SPT切换,最终组播!数据按R1-R6-R5和R1-R6-R7转发给接收者。
MSDP 路由器的类型及部署结构:
一.在RP上创建的MSDP对等体
源端MSDP对等体:离组播源(Source) 最近的MSDP对等体(通常是源端RP,如图a中的R1);源端RP创建SA消息并发送给远端MSDP对等体,通告在本RP上注册的组播源信息。源端MSDP对等体必须配置在RP上,否则将无法向外发布组播源信息。
接收者:端MSDP对等体:离接收者(Receiver)最近的MSDP对等体(如图a中的R3),接收者端MSDP对等体在收到SA消息后,根据该消息中所包含的组播源信息,加入以该组播源为根的SPT;当来自该组播源的组播数据到
达后,再沿RPT向本地接收者转发。接收者端MSDP对等体必须配置在RP上,否则无法接收到其他域的组播源信息。
中间MSDP对等体:拥有多个远端MSDP对等体(如图b中的R2),中间MSDP对等体把从一个远端MSDP对等体收到的SA消息转发给其他远端MSDP对等体,其作用相当于传输组播源信息的中转站,可以对SA做集中控制或过滤。
二. 在非RP上创建MSDP对等体
普通的PIM路由器(非RP)上创建的MSDP对等体,可接收任何MSDP对等体发送过来的SA。RPF 检查通过后,向其他MSDP对等体转发。中间MSDP设备R2并不是RP,所以不会产生SA报文,只能接收且转发,R2 被称为MSDP中继。
使用扩展性、灵活性强的MSDP会话在RP间传递(S,G)的信息可适用于任何复杂的环境,如下图所示。
R4虽不是RP,但在MSDP拓扑中,可起到MSDP中继的作用。R1-R4、R4-R2 及R1-R3间各有MSDP会话,MSDP 可以配置在RP和non-RP的任何组播路由器上,非RP的MSDP路由器只能接收SA,转发SA,如图下所示。而如果MSDP路由器是RP,则可以产生、转发及根据SA中(S,G) 发起SPT切换。
MSDP机制:
MSDP报文类型有多种,SA (Source-Active)、SA-Request 及SA-Response、周期性Keepalive 等。其中,SA报文的作用是在RP间通告(S,G) 信息。
MSDP对等体之间通过交互SA消息共享(S,G)信息。为了避免SA消息中的S,G)表项超时导致远端用户无法收到组播源的数据,可以选择在SA消息中封装组播数据报文。
SA报文内容:
- 起源RP的地址10.1.100.100,代表SA起源于该RP,任何接收该SA的MSDP对等体,先对其中的源RP地址做RPF检查,检查通过后转发给所有其他MSDP对等体,按RPF转发可避免转发环路。
- (S,G) block::MSDP 中可包含多个(S,G) block, 记录了起源RP了解的所有源及组的信息。
- 可封装RP上收到的组播数据(此功能可选,华为设备默认未开启)。
SA报文的产生过程:
当一个RP从组播源所在的DR上收到注册报文后,根据注册报文中的组播数据信息创建MSDP SA报文,并将其向当前RP所有已建立起来的MSDP会话发送。任何接收的MSDP设备再继续转发SA给其他MSDP对等体。如果不加控制,图中,R1转发SA到R2,R2经R3转发给R4,R4会转发给R5,R5可以转发给R6,如果R6继续再转发SA给R1, SA转发环路就出现了。所以,当SA在转发过程中,每个接收MSDP对等体先对收到的SA报文做RPF检查,通过RPF检查后,再转发SA。由于SA消息是周期性发送的,当域内出现新的组用户时,要等待一个周期内的SA消息以获取有效的(S,G)信息。为了降低新组用户加入源SPT的时延,MSDP提供了Type2和Type3的SA-Req消息与SA-Resp消息,以提高活动源信息更新的效率。
缓存机制:
MSDP对等体收到SA报文,会缓存收到的MSDP报文,以降低获取组播信息的延迟时间,开启SA消息缓存机制,即在本地SA Cache中缓存SA消息所包含的(S, G)表项。当收到一个新的组加入消息(*,G) 时,设备首先会查找SA缓存。
- 如果缓存中有对应的(S,G), 则直接加入以s为根的SPT。
- 如果缓存中没有对应的(S,G), 便等候其MSDP对等体在下一个周期发来的SA消息。
为减少不必要的域间流量,MSDP对等体发送SA消息的周期通常较长,这将导致新组用户加入源SPT的时延较大。建议在本地RP上使能“SA请求”,在远端MSDP对等体上使能“SA缓存”(华为设备默认开启“SA缓存”)。
SA消息的RPF检查规则:
执行RPF检查的目的是要求MSDP理解到起源RP的逻辑拓扑,这使MSDP能够决定经过哪个对等体到起源RP最近,MSDP本身并不包含任何用于决定如何到源RP的拓扑信息。
为了防止SA消息在MSDP对等体之间被循环转发,MSDP对接收到的SA消息执行RPF检查,在消息传递的入方向上进行严格的控制。不符合RPF规则的SA消息将被丢弃。
RPF检查的主要规则为:MSDP设备收到SA消息后,根据MRIB (Multicast RPFRouting Information Base)确定到源RP (即创建该SA消息的RP)最佳路径的下一跳是哪个对等体,这个对等体也称为“RPF对等体”。如果发现SA消息是从RPF对等体发出的,则接收该SA消息并向其他对等体转发。MRIB包括: MBGP、组播静态路由、单播路由(包括BGP、IGP)。此外,SA消息在转发时还遵守以下的一些RPF检查规则:
- 发出SA消息的对等体就是源RP,接收该SA消息并向其他对等体转发。
- 接收从静态RPF对等体到来的SA消息。一台路由器可以同时与多个路由器建立MSDP对等体关系。用户可以从这些远端对等体中选取一个或多个, 配置为静态RPF对等体。
- 如果一台路由器只拥有一个远端MSDP对等体,则该远端对等体自动成为RPF对等体,路由器接收从该远端对等体发来的SA消息。
- 发出SA消息的对等体与本地路由器属于同一Mesh Group, 则接收该SA消息。来自Mesh Group的SA消息不再向属于该Mesh Group的成员转发,但向该MeshGroup之外的所有对等体转发。
- 到达源RP的路由需要跨越多个AS时,接收从下一跳AS (以AS为单位)中的对等体发出的SA消息,如果该AS中存在多个远端MSDP对等体,则接收从IP地址最高的对等体发来的SA消息。
MSDP对等体建立过程:
MSDP对等体通过TCP连接建立,使用端口639。两台设备使能MSDP并互相指定对方为MSDP对等体后,两端先比较IP地址,IP地址较小的一端会启动连接重试定时器(ConnectRetry timer),并主动发起TCP连接。IP地址较大的一端负责确认是否有TCP连接在端口639建立。TCP连接建立后,MSDP对等体关系就建立了,对等体之间通过KeepAlive消息维持连接关系。
- 起始状态下,两台路由器的MSDP会话状态都是Down。
- 在两端使能MSDP并互相指定对方为MSDP对等体后,两端比较建立连接使用的地址:
• RouterA的地址较小,进入Connect状态,向RouterB发起连接,并启动ConnectRetry定时器。该定时器用于定义连接重试的周期。
• RouterB的地址较大,进入Listen状态,等待对端进行连接。 - TCP连接建立成功后,两端的MSDP会话进入Up状态。
- MSDP对等体两端发送KeepAlive消息,通知对方保持MSDP连接状态。
MSDP认证:
在TCP连接建立时进行加密认证,可以保证安全性。配置了认证功能后,MSDP对等体两端必须都使用相同的加密算法和密码,才能正常建立TCP连接,否则不建立连接。MSDP支持MD5和Keychain两种加密方式,二者在使用时互斥,MSDP对等体之间只能选择一种方式加密。
组播多域环境下实验:
拓扑描述:
在这个环境中,有两个AS,分别也是两个BSR区域,并且R3和R4为区域的边界,首先进行IP地址的配置,并且所有路由器上都配置回环口,作为RP或者BSR,AS1和AS2内部分别用OSPF实现全网的互通,并在所有路由器上开启组播路由表,接口开启pim sm模式(需要注意R3与R4互联接口也需要开启pim,这样才能通行组播流量),在R6的g0/0/1口还开启IGMPv2,然后R3和R4作为EBGP邻居,分别通告组播源所在的条目172.16.1.0/24和10.1.1.0/24进入BGP路由中,然后再重分发进自己的OSPF区域,现在进行ping测试,PC1pingMCS1组播源,查看单播路由是否是通的,只有单播路由是通的才能保证组播流量能够正常通信:成功
具体步骤:
-
进行边界的配置:在R3上和R4上进行配置,设置为组播组225.1.1.2的边界:
R3:[R3-GigabitEthernet0/0/1]multicast boundary 225.1.1.2 32
R4:[R4-GigabitEthernet0/0/0]multicast boundary 225.1.1.2 32 -
然后将R3作为BSR,R2作为RP;R6作为BSR,R5作为RP,在组播源上进行组播的下放流量:组播组是225.1.1.2:
在PC上进行接收:
-
现在在AS1的PR–R2上查看对应的流量是否注册:已经注册成功,产生了(* ,G)的组播路由。
现在PC1机器上去请求加入该组,然后在AS2的RP–R5的上查看:发现只有(,G)的条目,这是R6向RP发送Join报文产生的结果,但是RP上没有(SG)的条目,是无法引入流量的,但是R6因为收到不AS1中的BSR发送的C-RP消息,所以肯定无法直接发送Join报文到AS1中的RP,还是只能找自己区域中的RP,我们只有通过MSDP协议,使得两个RP的组播源信息能够互相通信。
-
在两个AS中的RP上进行msdp配置:
R2:
msdp //进入msdp域下
peer 5.5.5.5 connect-interface LoopBack0 //配置对应的邻居和自己建立的接口,这两个接口需要单播互通,所以需要将其通告进入BGP中
R3:
msdp
peer 2.2.2.2 connect-interface LoopBack0 -
然后查看msdp是否建立成功:状态为up,表示成功
然后查看是否有共享SA的缓存,缓存是R2发给R5的,R5上并没有(S*G)的条目,所以不会发送给R2,在R5上查看:我们可以看到已经获取了R2发来的条目了:
对于msdp报文:应用层报文,并且通过TCP发送,TCP会发送ACK进行确认,保证了可靠性。
以类型1的Source-Active报文为例子:
• RP address:起源RP的地址2.2.2.2,代表SA起源于该RP,任何接收该SA的MSDP对等体,先对其中的源RP地址做RPF检查,检查通过后转发给所有其他MSDP对等体,按RPF转发可避免转发环路。
• (S,G) block::MSDP 中可包含多个(S,G) block,记录了起源RP了解的所有源及组的信息。本报文中存在一个Block信息,组播组地址225.1.1.2,组播源地址,172.16.1.254。 -
这样AS2的RP有了(S,G)的条目已经就知道组播源,然后通过join消息一步一步发送Join到第一跳路由器R1即可。如下join报文表示中含有的组和源:
Anycast RP应用:
在PIM-SM中,每个组播组只允许一个活跃的 RP,即任何时候只有一个RP服务于一个组播组。但单RP带来的问题是流量过于集中,缺少可扩展性,组播源的注册及接收者周期维护RPT树致RP开销过大,尤其是当RP失效时的收敛慢及可能的组播包的次优转发路径,使单RP方案使用有限制。
Anycast RP是一种在 PIM组播域内为一个组播组提供多个活跃的RP的机制。这些RP同为一个组播组服务,RP 之间能够解决RP失效时收敛时间过长的问题。它的容错恢复机制和负载分担能力使AnycastRP机制成为域内组播应用部署的最佳方案。
在组播域内,定义多个RP,使用相同的IP地址作为RP,建议使用回环接口的IP地址,并把回环接口发布到IGP中,使其全网可达。出现在多个RP上的这个IP地址可叫做Anycast地址,其好处可使任何位置的设备直接查其路由表找到离它最近的RP。如果组播源和接收者同时执行注册和建RPT树的过程,二者可能选择的是拥有相同IP地
址的不同RP。
在全网的组播路由器都认定Anycast地址为相应组播组的RP时,在下图中,Source为组播源,当其活跃时,DR路由器R4发注册报文到离它最近的RP1,即R1,而R6后面的组播组的接收者则注册到RP2,即R3。
RP1收到注册的组播报文,据此了解组播源的位置,RP1可使用MSDP会话传递SA报文给RP2,完成RP间的(S,G) 的通告。
RP之间可使用MSDP协议,也可以不使用MSDP协议在RP间传递(S,G) 信息。域内部署Anycast RP,可以实现以下内容:
- RP路径最优:组播源向距离最近的RP进行注册,建立路径最优的SPT;接收者向距离最近的RP发起加入,建立路径最优的RPT。
- RP间的负载分担:每个RP上只需维护PIM-SM域内的部分源/组信息、转发部分的组播数据,从而实现了RP间的负载分担。
- RP间的冗余备份:当某RP失效后,原先在该RP上注册或加入的组播源或接收者会自动选择就近的RP进行注册或加入操作,从而实现了RP间的冗余备份。切换时间由IGP协议的收敛时间决定,例如,上图中,R3路由器为RP2,若暂时离线,下游的接收者不需知道当前使用的是哪个RP, 所以(* ,G) Join报文会在下个周期发送给R1, RPT 共享树将在R1-R2-R5-R6间建立起来。当然,若Switchover机制已经完成,组播报文经R4-R5-R6 流给接收者,此时,RP2离线,对组播数据的接收没有影响,若不考虑( * ,G) Join的发送周期的影响,可认为组播RP2离线后,接收者或组播源了解到新RP完全由IGP协议的收敛时间决定。
RP 和BSR处于同一台物理设备中。C-RP 地址使用Anycast地址,而C-BSR地址可使用其他地址。RP1和RP2之间通告(S,G) 的机制主要有两种,方案相似:
- 在RP间使用MSDP协议,通告活跃的源/组的信息,使用SA报文。
- 在RP间建立全互联的PIM邻居关系,并在此邻居关系基础之上, 转发起源RP收到的注册报文。
整理资料来源:《HCIE路由交换学习指南》、华为Hedex文档