PIM穿越BIER隧道的研究
2022-05-08蒋元兵康宗绪王亚昕
瞿 辉,蒋元兵,康宗绪,王亚昕
(重庆金美通信有限责任公司,重庆 400030)
组播的研究起源于斯坦福大学的博士生Steve Deering,他于1989年提出了IP组播规范[1],并在1992年建立了IP组播实验室网。1999年以后,出现了组播路由协议如PIM-SM[2]、PIM-SSM[3]、PIM-DM[4],IP组播的技术和应用开始得到快速发展并沿用至今。
传统组播技术(PIM)需要依赖事先创建的组播树来转发数据流,每个流均需维护组播树和流状态,这使得网络节点的组播表、组播状态等的增长,成为组播网络中最复杂、不可控的部分。因此BIER(Bit Index Explicit Replication),即基于比特位的显式复制技术被提出并得到了广泛的关注。BIER技术于2015年在IETF成立了专门的工作组来推进标准化工作,众多设备厂商、芯片厂商和运营商关注并参与了标准的讨论,已形成了多篇工作组文稿,包括架构、转发面封装、流量工程、OAM等多方面的技术内容,并推出了RFC标准文档[5]。
1 应用场景分析
PIM域内一定会部署应用终端,但是后来者BIER,是为了解决路由交换节点的组播传递,其域内可以不部署应用终端。因此BIER作为核心域,其内部无终端接收组播流,仅承接PIM路由器的组播流,并建立隧道发送到相应的PIM路由器是常用的应用场景。
2 业界研究成果
IETF研究组于2018年2月颁布了第00版的《PIM Signaling Through BIER Core》草案,并于2021年更新为第12版[6]。该草案的主要内容如下。
(1)PIM信令穿越BIER域的过程:定义了PIM域和BIER的边界节点及其功能,定义了边界节点PIM组播转发表的接口,定义了BIER隧道的建立及头部格式各个字段的值及用法。
(2)组播数据流穿越BIER域的过程:定义了组播数据流到达域边界的处理(从PIM域进入BIER域、从BIER域出到PIM域)。
(3)根据组播源(或者RP)的IP地址,获取外出边界路由器的BIER节点号。
该草案在实现PIM穿越BIER域的描述中,着重PIM的JOIN消息如何处理,但未包括以下几点。
(1)PIM邻居维护(Hello),边界路由器收到对方PIM路由器的邻居维护消息的处理。
(2)BSR选举(Bootstrap),BSR消息采用泛洪机制,被BIER隔离的PIM域如何完成BSR选举。
(3)CRP汇报给BSR,由候选RP路由器发送单播IP消息给BSR,即PIM路由器发送候选RP消息给BSR时,如何穿越BIER域。
(4)BSR发布RP集合,同BSR选举。
(5)断言(Assert),断言消息的处理。
(6)嫁接(Graft),嫁接消息穿越BIER域传递。
3 实现方法
3.1 邻居维护
BIER路由器识别到PIM的邻居维护报文后,需要进行2个操作。
(1)标识自己为边界路由器(BBR),并将身份信息进行BIER域内的扩散,BIER域内每个路由器均需明确BBR的节点号(BBR-id)。同时识别维护报文Hold-Time选项字段(OptionType=1,OptionLength=2),以HoldTime为超时值启动定时器(每次接收维护报文刷新该值),超时后标识自己不再是边界路由器(BBR)。
(2)启动邻居维护定时器,超时值为HoldTime的1/3,超时后发送PIM邻居维护报文给对方,让PIM路由器认为自己也是一个PIM路由器(真正身份是BBR)。
通过邻居维护的处理,所有连接在BIER域上的PIM路由器将识别直连的BBR为邻居。
3.2 BSR选举
BSR发送的消息需要在整个PIM域内进行泛洪,因此边界路由器(BBR)收到此报文后将加入BIER比特前缀,BitString填写所有边界路由器(BBR)的ID bit值,并执行BIER转发。BBR收到此报文后,去除BIER比特前缀,并转发给连接的PIM路由器。
通过BSR选举报文的处理,PIM域内将选举出IP地址最大的路由器作为BSR(BIER路由器不参与BSR的选举),在任何一个PIM路由器上可观察到BSR的存在。
3.3 CRP收集
CRP收集报文由候选RP(CRP)以单播形式发送给BSR,在BIER域内执行IP单播转发即可。BSR收到CRP集合后,能够显示CRP的集合。
3.4 CRP通告
CRP通告报文是BSR报文的一种,采用组播地址泛洪发送。
报文处理同BSR选举。所有PIM路由器接收到RP通告后,可以显示域内的所有候选RP信息。
3.5 加入/剪枝
PIM处理“加入/剪枝”消息是以邻居为单位,即向同一个邻居可发送不同源、不同组、(*,G)和(S,G)混合的“加入/剪枝”消息。在PIM域内邻居关系是确定的,该混合消息的处理比较简单。但是进入BIER域内,需要确定RP和S的位置,如果多个组的源不一致或者既存在共享树又存在最短路径树,而且RP和源不在同一位置,那么BIER域内需要分别处理,把到不同边界路由器(BBR)的“加入/剪枝”消息归类分别进行发送。
如图1所示,2.0.0.3的PIM路由器将向邻居3.0.0.3发送“加入/剪枝”消息,包含的内容为发向RP2.0.0.2的(*,G)加入和发向16.0.100.1的(S,G)加入消息。(*,G)加入消息应该发向BBR3.0.0.2,而(S,G)加入消息应该发向BBR3.0.0.1,如果发送的BBR错误,接收的PIM路由器建立的组播树将包含不必要的出接口,并且执行组播流转发时非最优路径。
图1 一条“加入/剪枝”消息面向不同的BBR
面向(S,G)的转发表建立,端到端的组播流基本建立成功。
3.6 注册/注册停止
共享树建立后,组播发送源所在的PIM路由器将通过注册消息将组播流发送到RP,此报文为单播报文执行IP单播转发流程,BIER域仅执行IP单播的转发。
从第二个注册报文开始,RP将朝着发送源的方向发送“加入/剪枝”消息,如果该消息要穿越BIER域其处理方法见3.5。当RP到源的组播转发状态建立好后,RP以IP单播方式向源发送“注册停止”消息,BIER域仅执行IP单播的转发。
3.7 断言
如图2所示,边界路由器(bfir)对断言报文不处理,边界路由器(bfer)主动发起断言消息以确定3.0.0.2还是3.0.0.4作为转发路由器。
图2 bfir和bfer的断言处理
bfer发送断言的准则:当路由器通过外出接口列表中的一个接口收到组播信息包,它将通过该接口发送断言消息,以确定哪台路由器继续转发该组播流。
断言消息的内容是到源的度量值,具有最佳度量值的路由器可以转发组播流,如果度量相同,则选择具有最大IP地址的路由器转发组播流。未被选择到的路由器剪枝掉该出接口。
通过断言的处理,仅一份组播流在网络内传递。
3.8 嫁接
嫁接报文和嫁接确认报文是密集模式(DM)特有的报文,其报文格式同“加入/剪枝”消息,处理方法也同“加入/剪枝”的处理。
通过嫁接的处理,其上级路由节点该接口立刻由剪枝状态变为转发状态。
4 结束语
PIM路由器配置时需要确定接口是稀疏模式(SM)还是密集模式(DM),两种模式下路由器的处理方式不一致,而且从报文类型上无法区分是SM还是DM。
因此,使用BIER隧道模式同样需要配置SM或者DM模式。DM模式下由组播流直接建立转发表,组播流转发到所有的边界路由器(BBR),由叶子节点发起“剪枝”消息以删除不必要的组播流。SM模式下BIER路由器必须依靠组播转发表转发组播流,否则触发注册过程,而不是直接向所有边界路由器转发该组播流。