1. PIM-SM组播协议想关机制
1.1 组播相关协议
- IGMP和MLD在接收者主机和组播路由器之间运行,该协议定义了主机与路由器之间建立和维护组播成员关系的机制
- 组播路由器之间运行组播路由协议,组播路由协议用于建立和维护组播路由,并正确、高效地转发组播数据包
- PIM是典型的域内组播路由协议,分为DM和SM两种模型。当接收者在网络中的分布较为密集时,适用DM;较为稀疏时,适用SM。PIM必须和单播路由协议协同工作
1.2 组播网络中应用的协议
2. PIM-SM的基本概述
2.1 SPT
- 源路径树以组播源作为树根,将组播源到每一个接收者的最短路径结合起来构成的转发树
- 源路径树使用的是从组播源到接收者的最短路径,也称为最短路径树SPT。对于某个组,网络要为任何一个向该组发送报文的组播源建立一棵树
- 本例中有两个组播源(源S1和源S2),接收者R1和RT2。所以本例中有两棵源路径树
2.2 共享树
为什么需要RPT?
因为PIM-SM事先是不知道组播源和接收者的位置的,所以无法形成一个转发路径,所以需要依靠RP来形成RPT,RP能够知道组组播源的位置
RPT生成原理:共享树以某个路由器作为路由树的树根,该路由器称为汇集点,将 RP 到所有接收者的最短路径结合起来构成转发树。使用共享树时,对应某个组,网络中只有一棵树。所有的组播源和接收者都使用这棵树来收发报文,组播源先向树根发送数据报文,之后报文又向下转发到达所有的接收者,所以RPT不一定是最优路径,有可能是次有优路径
举例:比如说把RP充当是一个婚介所,地球上不允许有自由恋爱发生,只能靠人介绍,可以把女生看做是组播源,男生看做是接收者,如果说只能靠介绍的话那适龄女生想要找对象的话可以来婚介所登记,然后适龄男生想要找对象的话可以去婚介所看已登记的女生的信息,然后根据个人的择偶标准选择自己的喜欢对象,选择成功之后,那不就构成了RPT嘛,但是这个时候又产生了一个问题,如果双方想约会的话不是要通过婚介所嘛,这样子就会显得很麻烦,所以他们可以加一下对方的微信,然后私下进行沟通,这样子男生就知道女生的具体信息了,相当于接收者知道了组播源的位置,所以下次寻找组播源的时候就可以直接找了不需要通过RP,所以这个就是RPT(本例只是举例子的作用,并没有任何的性别歧视~)
2.3 IPv6 PIM-SM的概述
2.4 DR的选举
DR将作为本网段中组播信息的唯一转发者。无论是和组播源S连接的网络,还是和接收者连接的网络,只要网络为共享媒介则需要选举DR
DR的选举:
- 优先级大的优先
- IP地址大的优先
- 如果网络中至少有一台路由器不支持在Hello报文中携带DR优先级,由IPv6链路本地地址最大的路由器充当DR
2.5 RP的发现
静态RP:对于小规模的简单网络,一个RP用于全网转发信息就足够了,此RP的位置可通过静态指定,在DR和叶子路由器以及组播数据流将要经过的所有路由器上手工指定RP的IP地址,一般也比较稳定,但是没有备份功能,如果RP实效之后就不造成网络故障了,无法适应网络的变化
动态RP:在大多数应用中,IPv6 PIM-SM网络覆盖了很大的区域,需要通过RP转发大量的组播流量。因此,不同的组播组应该具有各自的RP。为了减少配置多个静态RP的工作量以及更好的适应网络的实时变化
2.6 RP的选举
- C-BSR之间发送BootStra报文进行比较,优先级高的将会作为BSR,如果优先级一样那就对比IP地址,IP地址大的将会作为优先
- RP就像C-BSR一样需要在设备上手工配置,首先配置C-RP,然后C-RP通过Advertisement把自己所能服务的组单播给BSR,每个C-RP都这么做的话那么BSR就收集到了网络中所有C-RP的信息并把这些信息整理成一个集RP-Set。此后BSR通过BootStrap Message把RP-Set的信息通告给全网所有的路由器,然后在根据BootStra报文选举出RP
2.7 嵌入式RP的原理
1.使能嵌入RP功能允许路由器从IPv6组播组地址中分析出RP的地址,从而取代静态配置RP或由BSR动态计算的RP
2.在接收侧
- 接收者主机发布MLD报告消息,加入组播组
- 接收侧的DR提取内嵌在组播组地址中的RP地址,向其发送IPv6 PIM-SM加入消息
3.在组播源侧
- 组播源知道组播地址后,向此组播组发送报文
- 组播源侧的DR提取内嵌在组播地址中的RP地址,向其以单播方式发送IPv6 PIM-SM注册消息
2.8 嵌入RP的组播组地址
- 头8bits为FF说明是IPv6组播地址。
- Flags字段的范围是7-F,说明是一个嵌入了RP地址的IPv6组播组地址。
- RIID字段:RP Interface ID,抽取出来填充在RP地址的最后4bits。
- Plen字段:RP地址的前缀长度,换算成十进制数后不能为0,也不能大于64。
- Network Prefix字段:RP的地址前缀。
- Group ID:组ID
2.9 RP地址的转换
- 提取“plen”字段,转换为十进制数
- 将“Network Prefix”字段的前“plen” bits提取出来作为RP地址的地址前缀
- 将“RIID”字段提取出来作为RP地址的Interface ID的最后4bits,Interface ID其余部分用0补齐
示例:
组播地址FF70:140:2001:DB8:BEEF:FEED::/96,则从组播地址中获取的RP地址为2001:DB8:BEEF:FEED::1/64
2.10 加入共享生成树的过程
- 当接收者主机加入一个组播组G时,通过MLD报文知会与该主机直接相连的叶子路由器,叶子路由器掌握组播组G的接收者信息,然后朝着RP方向往上游节点发送(*,G)的join消息
- 从叶子路由器到RP之间途经的每个路由器都会在转发表中生成(*,G)表项,这些沿途经过的路由器就形成了RP共享树(RPT)的一个分支。其中(*,G)表示从任意源来的信息去往组播组G。RPT共享树以RP为根,以接收者为叶子
- 当从组播源S来的发往组播组G的报文流经RP时,报文就会沿着已经建立好的RPT共享树路径到达叶子路由器,进而到达接收者主机
- 当某接收者对组播信息不再感兴趣时,离该接收者最近的组播路由器会逆着RPT树朝RP方向逐跳发送Prune剪枝消息。第一个上游路由器接收到该剪枝消息,在接口列表中删除连接此下游路由器的接口,并检查自己是否拥有感兴趣的接收者,如果没有则继续向上游转发该剪枝消息
2.11 组播源注册
- 为了向RP通知组播源S的存在,当组播源S向组播组G发送了一个组播报文时,与组播源S直接相连的路由器接收到该组播报文后,就将该报文封装成IPv6 PIM Register注册报文,并单播发送给对应的RP
- 当RP接收到来自组播源S的注册消息后,一方面解封装注册消息并将组播信息沿着RPT树转发到接收者,另一方面朝组播源S逐跳发送(S,G)加入消息,从而让RP和组播源S之间的所有路由器上都生成了(S,G)表项,这些沿途经过的路由器就形成了SPT树的一个分支。SPT源树以组播源S为根,以RP为目的地
2.12 停止注册的过程
当RP收到沿着SPT树转发的组播流量后,向与组播源S直连的路由器单播发送注册停止报文。组播源注册过程结束
2.13 组播流转发的过程
源数据流延源树(SPT)流向RP,从RP开始,数据流延共享树(RPT)流向接收者
2.14 RPT向SPT切换
如以上婚介所的例子一致
2.15 切换后的剪枝
当路由器在不同接口接收到RPT和SPT两条路径上传输的相同组播数据时,丢弃沿RPT接收的数据,并向RP逐跳发送剪枝消息。RP接收到剪枝消息后,更新转发状态,并停止沿RPT转发(S, G)的组播流量;同时RP向组播源发送剪枝消息删除或更新相关的(S, G)转发项。通过这种方法,组播数据从RPT切换到SPT
3. IPv6 PIM-SSM工作原理
3.1 IPv6 PIM-SSM概述
SSM模型提供了指定源组播的解决方案,配合MLDv2采用IPv6 PIM-SM的部分机制来实现。由于最后一跳路由器通过MLDv2协议已经知道了组播源的地址,可以直接发起指定源-组的加入过程,在SSM网络中创建组播源到接收者的SPT
3.2 IPv6 PIM-SSM工作原理
因为SSM模型是无法预先知道组播源的位置的
4. 组播路由管理
组播路由和转发与单播路由和转发类似,首先每个组播路由协议都各自建立并维护了一张协议路由表。各组播路由协议的组播路由信息经过综合形成一个总的组播路由表。最后,路由器根据组播路由和转发策略,从组播路由表中选出最优的组播路由,并下发到组播转发表,直接用于控制组播数据的转发
4.1 IPv6组播协议路由表
- (FC00::2, FFE3::1) (S, G)表项。
- Protocol: pim-sm 协议类型。第一个Protocol表示生成表项的协议类型,第二个Protocol表示生成下游接口的协议类型。
- Flag: SPT LOC ACT PIM路由表项的标志。
- UpTime: 00:04:24 存在时间。第一个UpTime表示表项已存在的时间,第二个UpTime表示下游接口已存在的时间。
- Upstream interface: Vlanif20 上游接口。
- Upstream neighbor: FE80::A01:100:1 上游邻居。NULL表示不存在上游邻居。
- RPF prime neighbor: FE80::A01:100:1 RPF邻居。NULL表示不存在RPF邻居。
- Downstream interface(s) information: 下游接口信息。
- Total number of downstreams: 1 下游接口数量。
- Expires: 00:02:47 下游接口老化时间
4.2 IPv6组播路由表
- 00001. (FC00::2, FFE3::1) 第00001号表项,是(S, G)形式。
- Uptime: 00:00:14 组播路由表项更新时间。
- Upstream Interface: Vlanif10 上游接口。
- List of 1 downstream interface 下游接口列表
4.3 组播转发表
组播转发表是路由管理模块依据组播路由表信息生成的用于指导组播数据实际转发的表项,通常称为MFIB。这张表与单播中FIB表的功能是一样的,用于指导组播数据转发
参数参考:
- 00001. (FC00:1::3, FF1E::1) 第00001号表项,是(S, G)形式。
- MID: 10 组播转发表项在MFIB表中的唯一标识,用于快速检索组播转发表。
- Flags: ACT 组播转发表项的标志。
- UpTime: 02:54:43 组播转发表项已存在的时间。
- Timeout in: 00:03:26 组播转发表项超时时间。
- Incoming interface: Vlanif10 表项入接口。
- List of 1 outgoing interfaces 表项出接口列表。
- Activetime: 00:23:15 出接口已存在时间。
- Matched 38264 packets(1071392 bytes) 匹配该表项的报文数目。
- Wrong If 0 packets 从错误接口进入的报文数目。
- Forwarded 38264 packets(1071392 bytes) 已转发的报文数目。
4.4 RPF检查
路由器确认组播报文是从自身连接到组播源的接口上收到的,才进行转发,否则丢弃
RPF检查:
- 确保组播流量沿正确路径转发,避免环路
- 基于单播路由表
4.5 组播负载分担
- “负载分担”与“负载均衡”是不同的概念
- “负载分担”是指如果发往某一目的地的数据流存在多条等价的转发路径,就将数据在这多条路径上转发,达到分流的目的。在进行数据转发时,每一条路径上转发的数据流量并不一定相同,转发流量多少需要根据负载分担方式来决定
- “负载均衡”属于“负载分担”的一种特殊形式,不仅将数据流在这多条路径上转发,并且每条路径转发等量的数据流量
4.6 组播负载分担前后对比示意图
组播负载分担是指如果存在多条等价的最优转发路径时,不按照RPF检查规则来选取下一跳地址最大的路由,而是根据配置的组播负载分担方式将组播流在这多条路径上进行分流转发
5. IPV6组播典型应用
可以采取在组播网络中配置PIM-SM,接收端网络配置MLD的形式