个人认为,理解报文就理解了协议。通过报文中的字段可以理解协议在交互过程中相关传递的信息,更加便于理解协议。

因此本文将在MSDP协议(Multicast Source Discovery Protocol,组播源发现协议)RFC文档及报文的基础上进行介绍,以详细介绍组播协议MSDP。
这里需要说明的是MSDP的使用条件是PIM-SM环境下,而PIM-SM一般又是基于ASM模型的。下文将对其进行介绍。关于PIM-SM环境相关内容,可参考博客组播PIM-原理介绍+报文分析+配置示例

关于MSDP的RFC相关内容,可参考2003年发布的RFC3618等相关内容
此时之外还有其他补充说明的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对等体的状态机从INACTIVECONNECTING状态转变时启动。转变为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的状态机主要有以下几种:DisableInactiveConnectingListenEstablish
其状态机切换如下图所示:
在该图中,所对应的事件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组播路由。

常用检查命令

点击此处回到目录

点击此处回到目录

组播MSDP-原理介绍+报文分析+配置示例相关推荐

  1. 组播IGMP-原理介绍+报文分析+配置示例

    个人认为,理解报文就理解了协议.通过报文中的字段可以理解协议在交互过程中相关传递的信息,更加便于理解协议. 因此本文将在IGMPv2协议报文的基础上进行介绍,以详细介绍主机-路由器IGMP组播协议.I ...

  2. 组播PIM-原理介绍+报文分析+配置示例

    个人认为,理解报文就理解了协议.通过报文中的字段可以理解协议在交互过程中相关传递的信息,更加便于理解协议. 因此本文将在PIMv2协议报文的基础上进行介绍,以详细介绍组播协议PIM. 这里需要说明的是 ...

  3. IPv6/ICMPv6-原理介绍+报文分析+配置示例

    个人认为,理解报文就理解了协议.通过报文中的字段可以理解协议在交互过程中相关传递的信息,更加便于理解协议. 因此本文将以IPv6的常用协议上进行介绍,以详细介绍IPv6的相关内容. 关于ICMPv6相 ...

  4. SRv6(BE)-原理介绍+报文解析+配置示例

    个人认为,理解报文就理解了协议.通过报文中的字段可以理解协议在交互过程中相关传递的信息,更加便于理解协议. 因此本文将以SRv6 BE场景下报文交互过程为例,以详细介绍SRv6. 有关于SR-MPLS ...

  5. BGPv4-原理介绍+报文分析+配置示例

    个人认为,理解报文就理解了协议.通过报文中的字段可以理解协议在交互过程中相关传递的信息,更加便于理解协议. 因此本文将在BGP Version4协议上进行介绍,以详细介绍BGP的相关内容. 关于BGP ...

  6. 2022-11-01 网工进阶(三十四) IP组播协议(PIM)-模式概述、组播分发树的分类、PIM路由表项、PIM-DM工作原理(组播分发树的形成、配置举例)

    PIM协议介绍 PIM(Protocol Independent Multicast)协议无关组播.协议无关指的是与单播路由协议无关,即PIM不需要维护专门的单播路由信息.目前常用版本是PIMv2,P ...

  7. 组播协议——IGMP v2报文头介绍

    TYPE:占一个字节,其值有:0x16.0x12.0x17三种类型. Max Resp Time:最大响应时间,占一个字节. Checksum:校验和,占两个字节. Group address:组播地 ...

  8. Anycast功能原理OSPF报文分析-上手必看

    系列文章目录 Anycast介绍及应用场景 OSPF报文分析 BFD与OSPF联动 OSPF-常见问题 文章目录 系列文章目录 Anycast介绍及应用场景 OSPF报文分析 BFD与OSPF联动 O ...

  9. RPC、RMI与MOM与组播 通信原理 .

    远程过程调用(RPC): 即对远程站点机上的过程进行调用.当站点机A上的一个进程调用另一个站点机上的过程时,A上的调用进程挂起,B上的被调用过程执行,并将结果返回给调用进程,使调用进程继续执行[B上的 ...

最新文章

  1. 栈和队列在python中的实现
  2. 微型计算机最早出现在第三代计算机中,微型计算机最早出现在第三代计算机中。...
  3. VS2008 正式版 下载+ KEY 注册码
  4. 知识图谱源码详解【八】__init__.py
  5. json数组传递到后台controller
  6. python列表去重函数_对python中两种列表元素去重函数性能的比较方法
  7. 【转】drpic在线图片处理器
  8. 软件测试 PreDay 决策表
  9. 批量WORD转换为PDF
  10. 计算机遥感毕设选题,遥感硕士毕业论文题目
  11. 嵌入式设备的switch 以及PHY 芯片调试和选型 (1)
  12. android emoji 服务器,Emoji 实战问题:iOS,Android,Server
  13. 网球爱好者小程序的设计与实现
  14. LAMP(CentOS)环境详细配置步骤
  15. fastjson解析多层对象中的属性
  16. 罗克韦尔自动化任命Susana Gonzalez为EMEA地区总裁
  17. 研究开发出 3D 打印 “食品墨水”
  18. windows下mysql误删除数据恢复
  19. js对json、xml字符串格式化(美化增强可读性)
  20. 345. Reverse Vowels of a String(python+cpp)

热门文章

  1. java小游戏,打飞机
  2. win7怎么允许计算机访问,win7系统设置允许或拒绝从网络中访问本地电脑的操作方法...
  3. MCU--新塘N76E003--IIC
  4. hypermesh2flac3d
  5. spring源码分析之分析入口
  6. Bootstrap学习笔记03
  7. vue实现手机验证码登录(基于娱乐系统项目)
  8. 音视频加持,科沃斯客户服务新升级
  9. 【华为诺亚方舟实验室】招聘AI实习生(CV/自动驾驶等方向)
  10. 论文解读 | Transformer 原理深入浅出