NG MVPN私网组播路由原理
NG MVPN网络中,PE之间建立BGP MVPN地址族下的BGP邻居之后,可以利用BGP的MVPN扩展团体属性(Extended Community)携带私网组播路由(C-multicast route),传递组播用户的加入/离开信息。
MVPN扩展团体属性
Source AS Extended Community:PE发布的VPNv4路由包含此属性,是属于AS类型的扩展团体属性。主要用于跨域场景。
VRF Route Import Extended Community:Sender PE发布给Receiver PE的VPNv4路由中包含此属性,Receiver PE再向Sender PE发送BGP C-multicast route时会将此属性附带在路由中。这样当存在多个Sender PE时,接收到BGP C-multicast route的Sender PE就可以识别Receiver PE发来的BGP C-multicast route是不是该由自己处理,以及该路由应该安装到自己的哪一个VPN实例路由表。
VRF Route Import Extended Community的取值格式是Administrator field:Local Administrator field,其中Administrator field的取值是本机MVPN ID,Local Administrator field是Sender PE本地VPN实例的标识。
如图8-13所示,PE1和PE2都是Sender PE,PE3是Receiver PE。PE1和PE2都与vpn1和vpn2相连,PE1上vpn1的VRF Route Import Extended Community是1.1.1.9:1,vpn2的VRF Route Import Extended Community是1.1.1.9:2;PE2上vpn1的VRF Route Import Extended Community是2.2.2.9:1,vpn2的VRF Route Import Extended Community是2.2.2.9:2。
当PE1、PE2都与PE3建立BGP MVPN地址族的BGP邻居后,PE1和PE2都会向PE3发布到组播源192.168.1.2的VPNv4路由,此时PE1发布的VPNv4路由携带的VRF Route Import Extended Community是1.1.1.9:1,PE2发布的VPNv4路由携带的VRF Route Import Extended Community是2.2.2.9:1,PE3收到VPNv4路由后,会将优选的路由安装到vpn1的路由表中,然后将路由的VRF Route Import Extended Community存储下来,用于构造BGP C-multicast route。本例假设优选路由是PE1发布的,也即路由的VRF Route Import Extended Community是1.1.1.9:1。
当PE3收到CE3的PIM Join消息后,会构造BGP C-multicast route,然后向PE1和PE2发送,其中这个路由携带Rt-import属性,取值是之前存储的VRF Route Import Extended Community,也即1.1.1.9:1。- 当PE1收到BGP C-multicast route后,发现BGP C-multicast route的Rt-import属性里Administrator field是1.1.1.9,也就是本机的MVPN ID,所以接收此路由,然后发现Local Administrator field是1,所以将这条路由安装到vpn1的路由表中。
- 当PE2收到BGP C-multicast route后,发现BGP C-multicast route的Rt-import属性里Administrator field是1.1.1.9,与本机的MVPN ID 2.2.2.9不匹配,所以丢弃该BGP C-multicast route,不予处理。
本节将通过组播成员的(S, G)和(*, G)加入/离开过程,介绍私网组播路由的传递过程。
- PIM (S, G) Join/Prune
组播成员通过(S, G)加入/离开的过程。 - PIM (*, G) Join/Prune
组播成员通过(*, G)加入/离开的过程。
PIM (S, G) Join/Prune
组播成员通过(S, G)加入/离开的过程。
NG MVPN的典型组网如下图所示,CE1连接组播源,CE2连接组播用户。下面将以CE2向CE1发起PIM (S, G) Join/Prune为例来描述组播成员加入与离开过程。
由图8-15可以看出,组播成员加入过程可以概括为表8-12:
由图8-14可以看出,组播成员加入过程可以概括为表8-12:
步骤 |
设备 |
关键动作 |
---|---|---|
PE1 |
PE1从CE1接收到组播源的单播路由后,转换成VPNv4路由发布给PE2,该路由携带扩展团体属性Source AS Extended Community和VRF Route Import Extended Community。 有关Source AS Extended Community和VRF Route Import Extended Community,请参考MVPN扩展团体属性。 |
|
PE2 |
PE2匹配本地VPN实例配置的Import RT:
|
|
CE2 |
CE2通过IGMP协议获得用户加入信息后,通过PIM协议向PE2发送PIM SSM Join报文。 |
|
PE2 |
PE2收到PIM加入后:
|
|
PE2 |
将BGP C-multicast route通过BGP邻居关系发送给PE1。 |
|
PE1 |
PE1收到BGP C-multicast route后:
|
|
PE1 |
PE1通过PIM协议将PIM SSM Join向上游设备CE1发送。 |
|
CE1 |
CE1收到PIM SSM Join报文后生成组播路由表项,添加下游接口为接收到PIM SSM Join报文的实际接口。至此,组播用户加入完成,CE1可以转发该组播组的数据给CE2。 |
PIM (*, G) Join/Prune
组播成员通过(*, G)加入/离开的过程。
PIM (*, G) Join/Prune过程有两种实现方式,如表8-14:
实现方式 |
原理 |
优点 |
缺点 |
---|---|---|---|
(*, G)跨越公网方式 | 私网RP(Rendezvous Point)可以部署在PE或CE上。 |
|
|
(*, G)不跨越公网方式 | (*, G)表项不会通过公网传输到远端PE。(*, G)表项会转换成(S, G)表项再通过公网传输到远端PE。 |
|
如果私网RP部署在CE上,则PE与CE之间还需要建立MSDP Peer。 |
(*, G)跨越公网方式
在组网图8-17中,CE3部署为RP,由图8-18可以看出,RPT共享树的建立可以概括为表8-15:
步骤 |
设备 |
关键动作 |
---|---|---|
CE2 |
CE2通过IGMP协议获得用户加入信息后,通过PIM协议向PE2发送PIM (*, G) Join消息。 |
|
PE2 |
PE2收到PIM (*, G) Join消息后,生成(*, G)表项,其中下游接口是收到PIM加入的实际接口,另外查找通往RP的单播路由,发现上游是PE3。PE2构造BGP C-multicast route(Shared Tree Join route),通过BGP邻居关系发送给PE3。 说明:
BGP C-multicast route的构造与PIM (S, G) Join/Prune过程相同,详细请参见MVPN NLRI。 |
|
PE3 |
PE3收到BGP C-multicast route(Shared Tree Join route)后:
|
|
CE3 |
CE3为RP,CE3收到PIM (*, G) Join消息后生成PIM (*, G)表项,添加下游接口为接收到PIM (*, G) Join消息的实际接口。至此,以CE3为根,以CE2为叶子节点的组播RPT共享树建立完成。 |
|
CE1 |
组播服务器开始发送组播数据,CE1向CE3发送PIM Register消息。 |
|
CE3 |
CE3收到PIM Register消息后,生成(S, G)表项,并继承(*, G)表项的出接口。同时,CE3向PE3发送组播数据。 |
|
PE3 |
PE3收到组播数据后,生成(S, G)表项,并继承(*, G)表项的出接口。由于(*, G)表项的出接口是P2MP隧道接口,因此组播数据导入到公网隧道I-PMSI。 |
|
PE2 |
组播数据通过I-PMSI到达PE2,PE2生成(S, G)表项,并继承(*, G)表项的出接口。 |
|
CE2 |
CE2收到组播数据,最终组播数据转发给组播用户。 |
当组播服务器流量超过门限值时,CE2需要由RPT共享树向SPT树切换,即SPT切换(如果CE2没有配置门限值,则CE2立即进行SPT切换)。由图8-19可以看出,SPT切换可以概括为表8-16:
步骤 |
设备 |
关键动作 |
---|---|---|
CE2 |
当组播服务器流量超过门限值时,CE2发起SPT切换,向PE2发送PIM (S, G) Join消息。 |
|
PE2 |
PE2收到PIM (S, G) Join报后,更新PIM表项的出接口状态,并将(S, G)表项切换到SPT树。PE2查找到组播源的路由,发现上游是PE1。PE2向PE1发送BGP C-multicast route(Source Tree Join route)。 |
|
PE1 |
PE1收到BGP C-multicast route(Source Tree Join route)后,生成(S, G)表项。PE1向上游CE1发送PIM (S, G) Join消息。 |
|
CE1 |
CE1收到PIM (S, G) Join消息后,生成(S, G)表项。至此,SPT切换完成,CE1可以转发组播数据给PE1。 |
|
PE1 |
为了避免重复的组播流量,PE1向所有BGP邻居发送Source Active AD route,该路由中携带(S, G)表项信息。 |
|
PE3 |
PE3收到PE1发送过来的Source Active AD route后,记录该路由。由于PE3是RPT共享树的组播数据的隧道入接口,完成SPT树切换后,需要删除对应共享树上的组播数据,所以PE3生成(S, G, RPT)状态,向上游发送PIM (S, G, RPT) Prune消息,删除(S, G)的数据。同时PE3更新私网组播路由表项,停止转发组播数据。 说明:
PIM (S, G, RPT) Prune操作将会有延迟,以确保PE2完成SPT切换,避免在SPT切换过程中出现丢包现象。 |
|
PE2 |
PE2收到PE1发送过来的Source Active AD route后,记录该路由。由于此路由存在RPT的(S, G)表项,则需要将流量切换到SPT树上。PE2向PE1发送BGP C-multicast route(Source Tree Join route),从而可以接收PE1发送过来的组播流量。 |
由图8-20可以看出,组播成员离开过程可以概括为表8-17:
步骤 |
设备 |
关键动作 |
---|---|---|
CE2 |
用户下线,离开组播组,发送IGMP (*, G)离开消息。并向PE2发送PIM (*, G) Prune消息。若CE2已经切换到SPT树,还需要发送PIM (S, G) Prune消息。 |
|
PE2 |
PE2收到(*, G) Prune消息后,删除(*, G)表项。PE2收到(S, G) Prune消息后,删除(S, G)表项。 |
|
PE2 |
PE2向PE3发送BGP Withdraw(Shared Tree Join route)消息。PE2向PE1发送BGP Withdraw(Source Tree Join route)消息。 |
|
PE1 |
PE1收到BGP Withdraw(Source Tree Join route)消息后,删除以前记录的BGP C-multicast route(Source Tree Join route),并删除PIM (S, G)表项出接口。 |
|
PE3 |
PE3收到BGP Withdraw(Shared Tree Join route)消息后,删除以前记录的BGP C-multicast route(Shared Tree Join route)消息,并删除PIM (*, G)表项出接口。 |
(*, G)不跨越公网方式
在组网图8-17中,MVPN的每个Site作为一个PIM SM BSR域,将RP部署在PE上。由图8-21可以看出,PE部署成为RP的组播成员加入过程可以概括为表8-18:
步骤 |
设备 |
关键动作 |
---|---|---|
CE2 |
CE2通过IGMP协议获得用户加入信息后,通过PIM协议向PE2发送PIM (*, G) Join消息。 |
|
PE2 |
PE2收到PIM (*, G) Join后,生成(*, G)表项。由于PE2是RP,不发送BGP C-multicast route(Shared Tree Join route)。至此,以PE2为根,CE2为叶子的共享树建立完成。 |
|
CE1 |
组播服务器开始发送组播数据,CE1向PE1发送PIM Register消息。 |
|
PE1 |
PE1收到PIM Register消息后,生成(S, G)表项。 |
|
PE1 |
PE1向所有BGP邻居发送Source Active AD route。 |
|
PE2 |
PE2收到Source Active AD route后,生成(S, G)表项,并继承(*, G)表项的出接口。 |
|
PE2 |
PE2直接发起SPT切换,向组播源PE1发送BGP C-multicast route(Source Tree Join route)。 |
|
PE1 |
PE1收到BGP C-multicast route(Source Tree Join route)后,根据私网组播转发表项将组播数据导入公网隧道I-PMSI,最终组播数据到达CE2。 |
由图8-22可以看出,PE部署成为RP的组播成员离开过程可以概括为表8-19:
步骤 |
设备 |
关键动作 |
---|---|---|
CE2 |
用户下线,离开组播组,发送IGMP (*, G)离开消息。CE2向PE2发送PIM (*, G) Prune消息。 |
|
PE2 |
PE2收到(*, G) Prune消息后,删除(*, G)表项。 |
|
CE2 |
CE2向PE2发送PIM (S, G) Prune消息。 |
|
PE2 |
PE2收到PIM (S, G) Prune消息后,删除(S, G)表项。PE2向PE1发送BGP Withdraw(Source Tree Join route)消息。 |
|
PE1 |
PE1收到BGP Withdraw(Source Tree Join route)消息后,删除以前记录的BGP C-multicast route(Source Tree Join route),并删除PIM (S, G)表项对应的出接口。同时PE1向上游发送PIM (S, G) Prune消息。 |
|
CE1 |
CE1收到PIM (S, G) Prune消息后,停止转发该组播组的数据。 |
在组网图8-17中,MVPN的每个Site作为一个PIM SM BSR域,将RP部署在CE上,CE与PE之间建立MSDP(Multicast Source Discovery Protocol) Peer。由图8-23可以看出,CE部署成为RP的组播成员加入过程可以概括为表8-20:
步骤 |
设备 |
关键动作 |
---|---|---|
CE2 |
CE2通过IGMP协议获得用户加入信息后,生成PIM (*, G)表项。由于CE2自身就是RP,CE2不会继续向上游发送(*, G)表项。 |
|
CE1 |
组播服务器开始发送组播数据,CE1向CE3发送PIM Register消息。 |
|
CE3 |
CE3收到PIM Register消息后,生成(S, G)表项。 |
|
CE3 |
CE3将生成的(S, G)表项信息通过MSDP SA消息发送给MSDP Peer PE3。 |
|
PE3 |
PE3收到MSDP SA(Source Active)消息后,生成(S, G)表项。 |
|
PE3 |
PE3发送Source Active AD route,将(S, G)表项信息传输给其他PE。 |
|
PE2 |
PE2通过Source Active AD route学习到(S, G)表项信息后,发送MSDP SA消息将(S, G)表项信息传输给MSDP Peer CE2。 |
|
CE2 |
CE2通过MSDP SA消息学习到(S, G)表项信息,生成(S, G)表项。CE2直接向组播源发起(S, G)加入,最终将组播数据转发给组播用户。 |
由图8-24可以看出,CE部署成为RP的组播成员离开过程可以概括为表8-21:
步骤 |
设备 |
关键动作 |
---|---|---|
CE2 |
用户下线,离开组播组,发送IGMP (*, G)离开消息。由于CE2自身就是RP,CE2不会继续向上游发送PIM (*, G) Prune消息。 |
|
CE2 |
CE2向PE2发送PIM (S, G) Prune消息。 |
|
PE2 |
PE2收到PIM (S, G) Prune消息后,删除(S, G)表项。PE2向PE1发送BGP Withdraw(Source Tree Join route)消息。 |
|
PE1 |
PE1收到BGP Withdraw(Source Tree Join route)消息后,删除以前记录的BGP C-multicast route(Source Tree Join route),并删除PIM (S, G)表项对应的出接口。同时PE1向上游发送PIM (S, G) Prune消息。 |
|
CE1 |
CE1收到PIM (S, G) Prune消息后,停止转发该组播组的数据。 |