MSDP协议介绍

项目背景

MSDP是Multicast Source Discovery Protocol(组播源发现协议)的简称,是为了解决多个PIM-SM(Protocol Independent Multicast Sparse Mode,协议无关组播-稀疏模式)域之间的互连而开发的一种域间组播解决方案,用来发现其它PIM-SM域内的组播源信息。
在基本的PIM-SM模式下,组播源只向本PIM-SM域内的RP注册,且各域的组播源信息是相互隔离的,因此RP仅知道本域内的组播源信息,只能在本域内建立组播分发树,将本域内组播源发出的组播数据分发给本地用户。如果能够有一种机制,将其它域内的组播源信息传递给本域内的RP,则本域内的RP就可以向其他域内的组播源发起加入过程并建立组播分发树,从而实现组播数据的跨域传播。
基于这一设想,MSDP通过在网络中选取适当的路由器建立MSDP对等体关系,以连通各PIM-SM域的RP。通过在各MSDP对等体之间交互SA(Source Active,信源有效)消息来共享组播源信息。

术语定义和缩略语说明

MSDP:Multicast Source Discovery Protocol 组播源发现协议
TCP: Transmission Control Protocol 传输控制协议
ASM:Any-Source Multicast,任意信源组播
PIM-SM:Protocol Independent Multicast Sparse Mode,协议无关组播-稀疏模式
SA:Source Active

工作机制

MSDP对等体

通过在网络中配置一对或多对MSDP对等体,形成彼此相连的一张“MSDP连通图”,以连通各个PIM-SM域的RP。通过这些MSDP对等体之间的接力,可以把某RP发出的SA消息传递给其他所有的RP。
MSDP_PEER.bmp
MSDP协议介绍
MSDP对等体可以创建在任意的PIM-SM路由器上,在不同角色的PIM-SM路由器上所创建的MSDP对等体的功能有所不同:

(1)在RP上创建的MSDP对等体

源端MSDP对等体:即离组播源(Source)最近的MSDP对等体(通常也就是源端RP,如RP1)。源端RP创建SA消息并发送给远端MSDP对等体,通告在本RP上注册的组播源信息。源端MSDP对等体必须配置在RP上,否则将无法向外发布组播源信息。
接收者端MSDP对等体:即离接收者(Receiver)最近的MSDP对等体(如RP3)。接收者端MSDP对等体在收到SA消息后,根据该消息中所包含的组播源信息,跨域加入以该组播源为根的SPT;当来自该组播源的组播数据到达后,再沿RPT向本地接收者转发。
中间MSDP对等体:即拥有多个远端MSDP对等体的MSDP对等体(如RP2)。中间MSDP对等体把从一个远端MSDP对等体收到的SA消息转发给其它远端MSDP对等体,其作用相当于传输组播源信息的中转站。

(2)在普通的PIM-SM路由器(非RP)上创建的MSDP对等体

如Router A和Route B,其作用仅限于将收到的SA消息转发出去。
说明:对于通过BSR机制动态选举RP的PIM-SM网络来说,RP是由C-RP选举产生的。为了增强其网络的健壮性,一个PIM-SM域内往往存在不止一个C-RP。由于无法预计RP选举的结果,为了保证选举获胜的C-RP能始终位于“MSDP连通图”上,需要在所有的C-RP之间建立MSDP对等体关系。而选举落败的C-RP在“MSDP连通图”上所担当的角色相当于普通的PIM-SM路由器。

借助MSDP对等体实现域间组播

MSDP_PIM_SM.bmpMSDP协议介绍.bmp)

PIM-SM1域内存在激活的组播源(Source),RP1通过组播源注册过程了解到了该组播源的存在。如果PIM-SM2和PIM-SM3域也希望知道该组播源的具体位置,进而能够从该组播源获取组播数据,则需要在RP1与RP3、RP2与RP3之间分别建立MSDP对等体关系。

借助MSDP对等体进行域间组播的工作过程如下:
(1)当PIM-SM1域内的组播源向组播组G发送第一个组播数据包时,DR1将该组播数据封装在注册消息(Register Message)中,并发给RP1。RP1因此获知了该组播源的相关信息。
(2)RP1作为源端RP,创建SA消息,并周期性地向其他MSDP对等体发送。SA消息中包含组播源的地址S、组播组的地址G以及创建该SA消息的源端RP(即RP1)的地址。
(3)MSDP对等体对收到的SA消息进行RPF(Reverse Path Forwarding,逆向路径转发)检查,以及各种转发策略的过滤,从而只接受和转发来自正确路径并通过过滤的SA消息,以避免SA消息传递环路;另外,可以在MSDP对等体之间配置MSDP全连接组(Mesh Group),以避免SA消息在MSDP对等体之间的泛滥。
(4)SA消息在MSDP对等体之间转发,最终该组播源的相关信息将传遍所有建立了MSDP对等体关系的PIM-SM域(即PIM-SM2和PIM-SM3)。
(5)PIM-SM2中的RP2在收到该SA消息后,检查本域内是否有组播组G的接收者(Receiver)存在;
如果有接收者,RP2与接收者之间维护组播组G的RPT。RP2创建(S,G)表项,向源端的DR1逐跳发送(S,G)加入消息(Join Message),从而跨越个PIM-SM域直接加入以该组播源为根的SPT组播数据沿SPT到达RP2后,再沿RPT向接收者转发。当接收者端的DR2收到来自组播源的组播数据后,可以自行决定是否发起从RPT向SPT的切换;如果没有接收者,RP2不会创建(S,G)表项,也不加入以该组播源为根的SPT。
说明:MSDP全连接组:要求所有组成员之间两两建立MSDP对等体关系,且所有组成员均使用相同的组名称。
在使用MSDP进行域间组播时,RP在收到组播源的信息后就不再需要依赖其它PIM-SM域内的RP,此时接收者可以跨越各PIM-SM域内的RP,而直接加入基于组播源的SPT。

SA消息的RPF检查规则

MSDP_RPF.bmp
MSDP协议介绍
网络中有五个自治系统AS1-AS5,AS内部使用IGP互联,AS之间使用BGP或MBGP互联。每个AS中包含至少一个PIM-SM域,且每个PIM-SM域中包含至少一个RP。各RP之间建立起MSDP对等体关系,其中RP3、RP4和RP5之间建立MSDP全连接组,并在RP7上将RP6配置为静态RPF对等体。

当PIM-SM域内只存在一个MSDP对等体时,该域又称为STUB域(如图3中的AS4)。STUB域内的MSDP对等体可以同时拥有多个远端MSDP对等体,用户可以从中选取其中一个或多个配置为静态RPF对等体。对于来自静态RPF对等体的SA消息不进行RPF检查,直接接受并向其它对等体转发。

MSDP对等体将按照如下RPF检查规则处理收到的SA消息:
(1)当RP2收到RP1发来的SA消息时
由于SA消息中所携带的源端RP的地址与MSDP对等体的地址相同,说明发出SA消息的MSDP对等体就是创建该SA消息的RP,于是RP2接受该SA消息并向其它对等体(RP3)转发。
(2)当RP3收到RP2发来的SA消息时
由于SA消息来自同一个AS的MSDP对等体(RP2),且该对等体是到源端RP最佳路径上的下一跳,于是RP3接受该SA消息并向其他对等体(RP4和RP5)转发。
(3)当RP4和RP5分别收到RP3发来的SA消息时
由于SA消息来自同一个全连接组的MSDP对等体(RP3),于是RP4和RP5均接受该SA消息并不再向本组其他成员转发,而只向本组之外的其它MSDP对等体(RP6)转发。
(4)当RP6收到RP4和RP5(假设RP5的IP地址较大)发来的SA消息时尽管同处AS3的RP4和RP5都与RP6建立了MSDP对等体关系,但由于RP5的IP地址较大,于是RP6只接受IP地址较高的MSDP对等体(RP5)发来的SA消息。
(5)当RP7收到RP6发来的SA消息时
由于SA消息来自其静态RPF对等体(RP6),于是RP7接受该SA消息并向其它对等体(RP8)转发。
(6)当RP8收到RP7发来的SA消息时
属于不同AS的MSDP对等体之间存在BGP或MBGP路由。由于SA消息来自不同AS的MSDP对等体(RP7),且该对等体是到源端RP的BGP或MBGP路由的下一跳,于是RP8接受该SA消息并向其他对等体(RP9)转发。
(7)当RP9收到RP8发来的SA消息时
由于只有一个MSDP对等体(RP8),于是RP9接受该SA消息。对于由其它路径到来的SA消息,MSDP对等体将不接受也不转发。

MSDP状态机

MSDP使用TCP作为其传输协议。在一对对等体关系中,一个peer在639端口上监听一个新的TCP连接,另一个peer连接这个端口。IP地址高的peer作为Server端监听端口。这种连接建立机制避免了call冲突,因此,不需要处理call冲突。但是,这种方法的缺点是建立时间完全依靠主动方和它的连接重传时间。被动方不能发起连接建立。

MSDP_FSM.bmp
MSDP协议介绍
事件
E1)使能MSDP,配置对等体P
E2)本地IP地址 < P的IP地址
E3)本地IP地址 > P的IP地址
E4)TCP建立(主动方)
E5)TCP建立(被动方)
E6)连接重传定时器过期
E7)对等体之间去使能MSDP(eg:当其中一方的IP地址改变)
E8)保持定时器过期
E9)检测到MSDP TLV格式出错
E10) 检查到其他错误
动作
A1)为对等体P分配资源,比较本地IP地址与对等体的IP地址
A2)TCP主动方OPEN,设置连接重传定时器为ConnectRetry-Period
A3)TCP被动方OPEN
A4)删除连接重传定时器,发送KeepAlive TLV,设置KeepAlive定时器为KeepAlive-Period,设置保持定时器为HoldTime-Period
A5)发送KeepAlive TLV,设置KeepAlive定时器为KeepAlive-Period,设置保持定时器为HoldTime-Period
A6)中止TCP主动方OPEN尝试,释放分配给对等体P的资源
A7)中止TCP被动方OPEN尝试。释放分配给对等体P的资源
A8)关闭TCP连接,释放分配给对等体P的资源
A9)丢包

MSDP报文

MSDP报文格式

MSDP报文为TLV格式。MSDP TLV格式如下:

    0              1              2              3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    Type   |           Length        |  Value ....   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

类型(8bit)
描述了值域的格式。
长度(16bit)
类型,长度,值所占字节的总长度。除KeepAlive消息外,最小长度为4字节,最大长度为9192字节。
值(变长)
格式基于类型的值。TLV类型定义如图所示。值域的长度为总长度域的值减3。

    Code                        Type
    ===================================================
     1                  IPv4 Source-Active
     4                  KeepAlive
     5                  Reserved (Previously: Notification)
     6                  MSDP traceroute in progress
     7                  MSDP traceroute reply
    ===================================================

IPv4 Source-Active TLV
SA消息最大值为9192字节。9192字节不包括TCP,IP,二层头部信息。

0              1              2              3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       1    |           x + y        |  Entry Count |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          RP Address                |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               Reserved              | Sprefix Len  |  \
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+    \
|                 Group Address                      |      ) z
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+    /
|                 Source Address                     |  /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

类型
Ipv4 Source-Active TLV的类型为1。
长度X
SA消息控制信息的长度。X为8(前两个32bit的大小)+12 x 条目数 字节。
长度Y
如果Y为0,则说明没有封装数据。否则,Y为封装的IP报头头部总长度字段的值。如果SA消息中有多条(S,G)表项,只有最后一条表项可能封装数据,并且在封装的IP报文的头部信息中有源,目的地址。
条目数
跟在RP地址域后面(S,G)表项的条目总数。同一个域中具有相同RP地址的多条(S,G)表项可以放在一条SA消息中。一条封装数据报文的SA消息只有一条表项。
RP地址
活动源所在域的RP地址。
保留字段
掩码长度
源地址的路由掩码长度。该值为32。
组地址
活动源发送数据的目的地址。
源地址
活动源的IP地址。
KeepAlive TLV
KeepAlive消息用于保持邻居的连接。
该消息长度为3字节,第一个字节表示类型,KeepAlive的类型为4,后两个字节为长度域,长度为3。

   0              1              2              3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |       4       |             3                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

MSDP Mesh-group定义

MSDP Mesh-group是一种抑制SA消息洪泛的机制。

  • 1.如果全连接组M中的成员R收到来自同一全连接组M中成员发送的SA消息,R接受SA消息并向非全连接组M的其它成员转发。R不向全连接组M中的任何成员转发该SA消息。
  • 2.如果全连接组M的成员R收到来自非全连接组M的对等体发送的SA消息,并且SA消息通过了对等体RPF检测,R转发SA消息到所有的MSDP对等体,包括全连接组M中的所有成员。
上一篇:P3143 [USACO16OPEN]Diamond Collector S


下一篇:旅行家的预算(单调队列)