codecamp

MSDP 组播源发现协议

一、简介

1.简介

MSDP(Multicast Source Discovery Protocol)称为组播源发现协议,是基于多个PIM-SM(Protocol Independent Multicast Sparse Mode)域互连而开发的一种域间组播解决方案。

2.作用

适用条件:域内组播路由协议必须是PIM-SM。MSDP仅对ASM(Any-Source Multicast)模型有意义。

PIM-SM模式下,源端DR(Designated Router)向RP注册,成员端DR也会向RP发起加入报文,因此RP可以获取到所有组播源和组播组成员的信息。随着网络规模的增大以及便于控制组播资源,管理员可能会将一个PIM网络划分为多个PIM-SM域,此时各个域中的RP无法了解其他域中的组播源信息。MSDP可以解决这一问题。 MSDP通过在不同PIM-SM域的路由器(通常在RP上)之间建立MSDP对等体,MSDP对等体之间交互SA(Source-Active)消息,共享组播源信息,最终可以使一个域内的组播用户接收到其他域的组播源发送的组播数据。 MSDP用于在ISP(Internet Service Provider)之间建立对等体。通常,ISP并不希望借助其他ISP的RP来向自己的用户提供服务。这一方面是出于安全性考虑,另一方面如果其他ISP的RP发生故障导致业务中断,用户投诉的却是自己的服务。借助MSDP,每个ISP可以实现依靠自己的RP来向Internet转发和接收组播数据。 尽管MSDP是为域间组播产生的,但它在PIM-SM域内还有着一项特殊的应用——Anycast RP(任播RP)。Anycast RP是指在同一PIM-SM域内通过设置两个或多个具有相同地址的RP,并在这些RP之间建立MSDP对等体关系,以实现域内各RP之间的负载分担和冗余备份。

3.优点

MSDP可以实现域间组播,同时对ISP而言还有以下优点:

PIM-SM域可以依靠本域的RP提供服务,降低了对其他域RP的依赖。还可以控制本域的源信息是否传递到其他域中,提高了网络安全性。 如果某个域中只有接收者,他不必去整个网络上汇报组成员关系,只在本PIM-SM域内汇报,就可以接收到组播数据。 单个PIM-SM域内的设备不需要专门维护整网的组播源信息和组播路由表项,节省系统资源。

二、报文

1.报文格式

2.报文字段

字段 长度 说明
Type 1字节 消息类型,值为1。
Length 2字节 整个TLV的长度。
Entry Count 1字节 消息中包含的(S,G)项总数。
RP Address 4字节 源RP地址。
(S,G)Entry [1]...[N] 变长 (源,组)信息。
Resv 3字节 保留字段,发送报文时置0;接收到报文时,对该字段不做任何处理。
Sprefix Len 1字节 源地址掩码长度,以32位传输。
Group Address 4字节 组地址。
Source Address 4字节 组播源地址。
DHCP 动态主机配置协议
NTP 时间协议
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

MPLS层协议

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }