个人认为,理解报文就理解了协议。通过报文中的字段可以理解协议在交互过程中相关传递的信息,更加便于理解协议。
因此本文将在MSDP协议(Multicast Source Discovery Protocol,组播源发现协议)RFC文档及报文的基础上进行介绍,以详细介绍组播协议MSDP。
这里需要说明的是MSDP的使用条件是PIM-SM环境下,而PIM-SM一般又是基于ASM模型的。下文将对其进行介绍。关于PIM-SM环境相关内容,可参考博客组播PIM-原理介绍+报文分析+配置示例
关于MSDP的RFC相关内容,可参考2003年发布的RFC3618-Multicast Source Discovery Protocol等相关内容 此时之外还有其他补充说明的RFC3446。
RFC3618文档本身只有19页,也推荐大家去阅读原文。
目录
MSDP
- 目录
- 1.组播基础内容
- 1.1.组播IP
- 1.2.组播MAC
- 2.MSDP简介
- 2.1.MSDP概念
- 2.2.MSDP的程序定时器
- 2.3.Peer-RPF转发
- 2.4.MSDP的Mesh Group和Any-cast RP
- 3.MSDP协议及配置
- 3.1.MSDP状态机
- 3.2.报文简介
- 3.3.拓扑介绍
1.组播基础内容
1.1.组播IP
传统分类网络进行地址分配时,将IPv4网络分为5类。
A类:1.0.0.0-126.0.0.0
B类:128.0.0.0-191.254.0.0
C类:192.0.0.0-223.255.255.0
D类:224.0.0.0-239.255.255.255
E类:240.0.0.0-239.255.255.255,保留地址
Note:224=1110 0000(2进制);239=1110 1111(2进制)。也即组播IP前4bits固定为1110
其中D类地址称为组播IP。虽然目前CIDR无类域间路由和VLSM可变长子网掩码的出现淡化了IP分类,但组播IP范围并未发生变化。
其中组播IP又可进行如下划分
224.0.0.0-224.0.0.255==预留永久组播地址
//通常为协议所使用,例如OSPFv2使用224.0.0.5和224.0.0.6
224.0.1.0-231.255.255.255
233.0.0.0-238.255.255.255
//ASM(Any Source Multicast)模型使用
232.0.0.0-232.255.255.255
//SSM(Source-Specific Multicast)模型使用
239.0.0.0-239.255.255.255
//本地管理组地址。也即私网组播IP。
1.2.组播MAC
MAC地址为48bits,6字节。
1@第1个字节的最后1个bit=1,表明该MAC为组播MAC。否则表明为单播MAC。
2@并且MAC地址的前3个字节24bits称为OUI厂商标识,需要向IEEE购买分配。后24bits,由厂家自行分配。
3@组播MAC由于没有明确的目的主机,因此规定组播MAC由组播IP映射而来。映射规则如下:
组播MAC的高24bit=0x01005e;
组播MAC的第25位bit固定为0;
组播MAC的剩余后23bit由组播IP的后23bit直接对应而来。
组播IP实际上有32-4=28bits,因此存在5bits数据无法进行对应
实际上每2^5=32个组播IP对应一个组播MAC。
此外还有协议规定组播MAC:
01-80-c2为IANA规定的协议组播MAC。
例如01-80-c2-00-00-00用于BPDU组播MAC,集成ISIS使用01-80-c2-00-00-14和01-80-c2-00-00-15等
点击此处回到目录
2.MSDP简介
MSDP协议(Multicast Source Discovery Protocol,组播源发现协议)主要是用于在组播跨域场景下进行使用。
这一概念与MPLS L3VPN有异曲同工之妙,不过这里域主要是指PIM-SM域。
在正式介绍MSDP协议前,有必要进行相关内容的铺垫说明。
1@MSDP的跨域:
在工程应用上,势必上要存在多个PIM-SM网络。而每个PIM-SM网络却并不一定都有组播源。
而MSDP的作用在于建立MSDP对等体去通告/发现整个大网中组播源的存在,而直接与组播源建立联系。这就是组播源发现。
2@MSDP的PIM-SM场景:
MSDP仅适用于PIM-SM环境下,这是由于PIM-DM的特性所导致的。
@:PIM协议作为协议无关组播路由,只需依照单播表并进行相应的RPF检查即可。
@:并且PIM-DM是PUSH推流方式,只要有PIM邻居存在就可推送组播流。这种方式默认认为网络中所有PIM邻居都有接收者存在,会PUSH组播流。即使跨域,只要域间可以建立PIM邻居就可推流。
关于PIM-SM环境相关内容,可参考博客组播PIM-原理介绍+报文分析+配置示例
@:相反PIM-SM是PULL拉流方式。组播源/第一跳PIM组播路由器需要知晓网络中RP的存在,去主动通知RP。RP反向向组播源拉流进行(S,G)表项建立。
其中的关键在于组播源/第一跳PIM组播路由器需要知晓网络中RP的存在。而跨域场景下,这是很难做到的。
2.1.MSDP概念
1@源RP的概念:
1@:源RP(originating RP)通常指的是逻辑上距离组播源最近的RP,并承担着向其他域发送组播源Source-Active消息的责任。此时建立MSDP对等体,也称源MSDP对等体。
2@:对于MSDP环境下,势必可能有多个PIM-SM域。这就会导致组播环路和次优路径。因此针对这种情况,MSDP给出了MRIB(Multicast RPF Routing Information Base,组播RPF路由信息基础)的规则。对于指向源RP的组播源状态消息,RP将丢弃non-RPF peer对等体发送的组播源状态消息。
1@:这里指的就是SA消息(MSDP的Source-Active类型报文,携带了组播源消息)
2@:其他相应的还有接收端MSDP对等体和中间MSDP对等体。其实分别指的就是承担接收者作用的MSDP和传输SA消息的MSDP对等体。
2@SA-cache:
RFC3618给出了SA-cache也即Source-Active缓存的介绍。与单播路由协议相同,MSDP同样需要考虑防环,协议风暴等问题。
SA-cache用于降低新对等体邻居接入组播的等待时延,网络分析/故障定位,减少协议网络风暴等。
3@MSDP的基本原理:
@:借用TCP协议639端口完成验证加密,协议可靠和协议保活
//使用639在TCP的三次握手阶段进行认证,TCP认证通过才可以建立MSDP会话。
@:网络中RP(这里肯定指的是逻辑上最靠近组播源的RP)之间建立MSDP对等体。因为对于PIM-SM来说,需要每个PIM域的RP向组播源进行注册拉流建立(S,G)表项。
最少需要每个PIM-SM域的RP去进行组播源信息的交互。其他则不强制要求。
每个PIM-SM域的RP逻辑上可以认为是每个接收者的组播源。因此MSDP对RP的对等体要求实际上是有好处的。
@:网络中的RP接收MSDP消息,决定是否接收相应组播源的数据,并向其他peer对等体发送。RPF3618中将这一过程描述为flood-and-join。
MSDP的SA报文中携带(S,G)消息以及创建该SA消息的源端RP地址,其他域的RP接收到SA消息后进行决定SA有效性和是否转发。
RP接收到有效的RP消息后,会主动向G的S进行PIM-SM的拉流操作发送PIM-SM的join报文。
2.2.MSDP的程序定时器
这里给出了RFC3618文档所定义的几种定时器,用于详细介绍MSDP协议原理使用。
需要说明的是,定时器有对应的值称为定时器周期。这里介绍不做详细说明,有意者可查看RFC源文档。
SA-Advertisement-Timer:
MSDP的Source-Active报文通告间隔定时器。
1@:RP必须周期性泛洪SA消息,以通告组播源的存在。
2@:当配置了MSDP进程时,RP就启动该定时器。
3@:SA消息一次涵盖了RP所有知晓的活得组播源。//超出包大小限制的原因除外。
SA Cache Timeout/SA-State Timer:
SA缓存超时/SA状态定时器。
1@:MSDP对等体上收到SA消息后启动,用于本地记录组播信息(S,G)等。
2@:SA消息中的每个组播信息(S,G)等条目,都与该定时器关联。
3@:该定时器必须不小于SA-Advertisement-Timer+SA消息抑制时间。
Peer Hold Timer:
对等体维护定时器。
1@:用于维护MSDP对等体关系。对等体建立时启动定时器,关系结束时删除。
2@:收到任意MSDP报文时刷新。
3@:RFC给出了规定值。必须不小于3S,推荐使用75s。
KeepAlive Timer:
保活定时器。
1@:用于维护MSDP对等体关系。对等体建立时启动该定时器,关系结束时删除。
2@:倒数为0时发送MSDP Keepalive消息,并重置定时器。
3@:RFC给出了规定值。必须不小于1S且必须小于Peer Hold Timer,推荐使用60s。
ConnectRetry Timer:
连接重传定时器。
1@:具有更小IP的MSDP对等体的状态机从INACTIVE向CONNECTING状态转变时启动。转变为ESTABLISHED状态时或无对等体时删除。
2@:RFC给出了规定值。应该等于30S。每个对等体关系都单独指定该定时器。
Intermediate MSDP Peers:
中间媒介作用的MSDP对等体。
1@:Intermediate MSDP Peers不为其他PIM-SM域创建SA消息,可以转发来自其他PIM-SM域创建的SA消息。
2@:一般来说RP只为自己注册的组播源产生SA消息。
SA Filtering and Policy:
描述对SA消息的筛选过滤原则。
1@:在传输作用的PIM-SM域中传递SA消息时,不能过滤。
2@:过滤原则可以使用MBGP进行控制。
3@:描述(S,G)组播消息的SA,不能传出该G组播组的边界。
Encapsulated Data Packets:
RP可以封装来自源的组播数据。这允许在向源的域构建组播树之前接收小突发组播流量。一般来说该数据封装于SA消息中。具体的封装则需要进行深究。
点击此处回到目录
2.3.Peer-RPF转发
MSDP的Peer-RPF Forwarding概念比较重要,在此重点进行说明。如果发现SA消息是从RPF对等体发出的,则接收该SA消息并向其他对等体转发。否则丢弃。
类似于PIM协议中的RPF检查。
Peer-RPF转发的基本原理:
主要用于在使能了MSDP网络上转发SA消息的原则。这一原则的作用类似于BGP的路由防环。
具体来说是指将SA消息中携带的RP信息与接收该SA消息时的MSDP对等体进行比较,并给出如下原则:
1@:Multicast RPF Routing Information Base (MRIB)是多播拓扑表。MRIB包括:MBGP、组播静态路由、单播路由。
2@:Peer-RPF Route是MRIB为SA消息中源RP的最佳路由下一跳。SA发起RP的Peer-RPF Route用于选择接受SA的对等体。
具体来说有如下SA的RPF检查规则
1@:收到发送SA的MSDP对等体邻居是该SA消息中RP的地址;
2@:从静态RPF对等体到来的SA消息;
//事先要有MSDP对等体才可将该对等体配置为静态RPF对等体
3@:只拥有一个远端MSDP对等体;
4@:来自Mesh Group对等体的SA消息不再向属于该Mesh Group的成员转发,但向该Mesh Group之外的所有对等体转发。
5@:到达源RP的MRIB需要跨越多个AS时,接收从下一跳AS中的对等体发出的SA消息。此时如果该AS中存在多个远端MSDP对等体,则优选IP地址最高的对等体发来的SA消息。
2.4.MSDP的Mesh Group和Any-cast RP
mesh Group:
根据2.3章节对MSDP-RPF邻居传递的SA消息进行说明,已可以满足需要。但在特殊场景下可能存在SA的大量无效泛洪。因此MSDP定义了RP之间全互联的Mesh Group的概念。
Mesh Group:属于同一个Mesh Group的所有成员之间必须两两建立MSDP对等体连接。
//需要说明的是Mesh-Group是一个本地概念,并且需要先于该对等体建立MSDP连接。
Any-cast RP:
Any-cast RP主要用于实现同一个PIM-SM域的RP冗余机制并可加快RP的收敛。
即在同一个PIM-SM域内设置多个具有相同地址的RP,并且在这些RP之间建立MSDP对等体关系,从而实现RP路径最优及负载分担。
Any-cast RP的原理:
1@:组播源向距离最近的RP进行注册,建立路径最优的SPT;接收者向距离最近的RP发起加入,建立路径最优的RPT。
通常通过单播路由的cost最小来实现距离最近
2@:每个RP上只需维护PIM-SM域内的部分源/组信息。其他PIM组播路由器都指向距离自己最近的RP
3@:当某RP失效后,原先在该RP上注册或加入的组播源或接收者会自动选择就近的RP进行注册或加入操作
需要说明的是:
@:Any-cast RP是一个逻辑概念,需要事先进行网络规划。是在配置上没有明确体现的。
@:当设备对收到的SA消息进行RPF检查时,如果发现对端RP的地址与本地RP的地址相同,就会丢弃该SA消息。必须为SA消息指定一个与实际RP的地址不同的逻辑RP地址(即逻辑接口上的RP地址),以通过RPF检查。
因此必须手动另外指定RP地址。如下命令在Any-cast RP场景下必须配置:
而在PIM下指定额外相同的C-RP地址。也即此时两台Any-cast RP至少需要两个Loopack,一个作为BSR,一个作为RP。并且BSR不同,但RP相同。
点击此处回到目录
3.MSDP协议及配置
整个MSDP协议都以TLV方式进行编码,
Type:类型,8bits。
Length:长度,16bits。MSDP整个字段的长度,单位字节。
Value:值,可变长。
常用的格式:
Type=1:IPv4 Source-Activet,传递SA消息和组播消息
Type=2:IPv4 Source-Active Request,主动请求指定组G的(S,G)列表
Type=3:IPv4 Source-Active Response,对Source-Active Request消息的响应
Type=4:KeepAlive,保持MSDP对等体的连接关系。只在对等体之间无其他协议报文交互时才发送。
Type=5:Reserved (Previously: Notification)
Type=6:MSDP traceroute in progress,对SA消息的RPF传递路径进行检测。
Type=7:MSDP traceroute reply,对SA消息的RPF传递路径进行检测。
6和7类型MSDP报文暂不进行介绍
3.1.MSDP状态机
MSDP协议使用TCP作为传输层协议,Port使用639。具有更小IP的一端作为MSDP建立TCP会话的发起者,更大IP的一端作为MSDP的监听者。
因此启动时间完全取决于Active一端及其重传定时器。
MSDP的状态机主要有以下几种:Disable、Inactive、Connecting、Listen和Establish。
其状态机切换如下图所示:
在该图中,所对应的事件Event和动作Action为:
Event:
E1:发起与对等体P的建立连接请求
E2:自身IP小于对等体P
E3:自身IP大于对等体P
E4:TCP会话建立完成(Active端)
E5:TCP会话建立完成(Passive端)
E6:重传定时器触发
E7:与对等体P的关系撤销
E8:Hold 维护定时器触发
E9:探测到MSDP报文格式错误
E10:探测到其他错误
Action:
A1:为MSDP分配程序资源
A2:TCP的Active端启动重传定时器
A3:TCP的Passive端进入监听状态
A4:删除重传定时器,发送Keepalive报文,启动Keepalive保活定时器和Hold维护定时器
A5:发送Keepalive报文,启动Keepalive保活定时器和Hold维护定时器
A6:不在尝试建立TCP的Active主动端连接,回收为MSDP分配的资源
A7:不在尝试建立TCP的Passive被动端连接,回收为MSDP分配的资源
A8:关闭TCP连接,回收为MSDP分配的资源
A9:丢弃数据包。
在MSDP程序上除以上说明外,还有两种特殊的事件需要进行说明
特殊对等体事件:该事件发生于Established状态,并且不造成状态机的改变;
独立的对等体事件:
@:SA通告定时器触发—>发送SA报文(周期性的),并重置Keepalive定时器
@:监听到新的活跃组播源S信息—>发送SA报文,并重置Keepalive定时器
@:SA状态定时器触发—>特定事件,一般处理动作是删除SA-Cache缓存
3.2.报文简介
Type=1:IPv4 Source-Activet:
Entry Count:(S,G)消息数量,1字节;
RP Address:产生该MSDP-SA消息的源端RP,4字节;
(S,G) Block:(S,G)的具体条目信息,12字节。
Reserved:保留字段,3字节;
Sprefix Len:源地址掩码长度,1字节;
Group Address:组地址,4字节;
Source Address:源地址,4字节。
Type=4:KeepAlive:
Keepalive报文不需包含实际的Value值,因此报文是固定的。
3.3.拓扑介绍
这里只提供了AR2和AR3设备的关键配置,有能力者可自行进行其他P和PE设备的配置。有需要者可私信联系提供模拟器源文件及配置。
sysname AR2
pim
c-bsr LoopBack1
c-rp LoopBack1
#
msdp
peer 4.4.4.4 connect-interface LoopBack1
#
//指定建立MSDP对等体。其他底层配置略。拓扑本身比较简单,这里简单说明下MP-BGP传递组播路由的情况:
这里利用MP-BGP建立了Multicast路由关系,传递了MPBGP组播路由。
常用检查命令
点击此处回到目录
点击此处回到目录