APP下载

基于VxWorks 的PIM-SM 协议的改进设计*

2023-02-02吴明曦刘小娟毛天立

通信技术 2023年12期
关键词:路由表信令内核

张 成,吴明曦,刘小娟,毛天立

(武汉中原电子集团有限公司,湖北 武汉 430205)

0 引言

随着移动无线自组网(Mobile Ad hoc Networks,MANET)的需求和场景不断拓展,多媒体传输需求越来越多,而组播技术很好地解决了传统单播和广播技术在新需求下出现的带宽消耗急剧上升、网络资源浪费等问题[1-2]。

IP 组播的研究始于20 世纪80 年代,随着用户规模的增加,域内组播协议相继提出,包括距离向量多播选路协议(Distance Vector Multicast Routing Protocol,DVMRP)、组播开放最短路径优先(Multicast Open Shortest Path First,MOSPF)、协议无关组播(Protocol Independent Multicast,PIM)等。其中DVMRP 由RFC 1075 文件提出,是从路由信息协议(Routing Information Protocol,RIP)协议改进而来[3];MOSPF 由RFC 1584 文件提出,拓展了开放式最短路径优先(Open Shortest Path First,OSPF)路由协议[4];组播协议开始多从单播协议改进或拓展而成,而PIM 协议则很好地解决了这个问题。

1997 年,RFC 2117 定义了协议无关组播的密集模式(PIM-Dense Mode,PIM-DM),主要用于局域网应用场景[5-6];RFC 2236 定义了互联网组管理协议(Internet Group Management Protocol,IGMP),用于获取组信息和成员信息[7]。1998 年,RFC 2362 定义了协议无关组播的稀疏模式(PIMSparse Mode,PIM-SM)的工作原理和实现机制,主要用于大范围域间网络场景[8]。PIM-SM 组播协议为多点通信业务的开展提供了良好的技术支撑,它可以有效利用带宽,避免重复发送造成的网络资源浪费,可以提高数据传递效率,还可以避免广播风暴问题出现[9-12]。

VxWorks 操作系统是WindRiver 公司于1983 年设计开发的一种嵌入式实时操作系统(Real-Time Operating System,RTOS),是嵌入式开发环境的重要组成部分。VxWorks 以其良好的可靠性和卓越的实时性被广泛应用于通信、军事、航空、航天等对实时性要求极高的领域中[13-14]。VxWorks 的多任务调度策略为抢占式调度,具有多个可选组件模块,能在实际的工程任务中同时具有灵活、占用空间小和高实时性的特点,能很好地满足移动无线通信需求。

在组播技术方面,VxWorks 支持IGMP,但缺乏对PIM 协议的支持。同时,标准PIM-SM 协议需要内核提供支持,与内核有较大的耦合性,不利于跨平台、跨硬件使用与移植。故针对降低同VxWorks 内核组件的耦合程度,同时改进协议在无线自组网环境下的问题的研究很有必要。

1 组播协议

1.1 IGMP 协议

IGMP 协议是在主机与其直连的组播路由器之间建立和维护组播组成员关系的Internet 组管理协议。IGMP 协议有3 个版本,分别是IGMPv1、IGMPv2 和IGMPv3。关于IGMP 协议3 个版本涉及的查询器选举和对各种消息的支持情况如表1所示。

表1 IGMP 协议版本对比

1.2 PIM-SM 协议

PIM 是协议无关的组播路由协议,协议无关是指PIM 协议在运行过程中不依赖某一种单播路由协议,而是利用单播路由协议建立的单播路由表作为组播路由的基础。PIM-SM 协议是PIM 协议的稀疏模式,该模式下假设所有主机均不需要接收组播数据,只有在主机明确要接收某组播组的数据时,才构造到主机的组播路由,并把数据转发至要接收组播数据的主机。

1.2.1 基本概念

在PIM-SM 协议中,主要有指定路由器(Designated Router,DR)节点、汇聚点(Rendezvous Point,RP)节点(候选RP 节点)、自举路由器(Bootstrap Router,BSR)节点(候选BSR 节点)、以RP 节点为根节点的共享树(Rendezvous Point Tree,RPT)、最短路径树(Shortest Path Tree,SPT)、(*,G)和(S,G)路由表项等核心概念。其中,DR 节点是该网段中组播报文的唯一转发节点;RP节点是汇集节点,用于处理组播数据源端DR 发送的注册消息及接收端的组播组成员的加入请求;BSR 节点管理RP 节点的选举,候选RP 节点将RP信息单播到BSR 节点,BSR 节点将收到的候选RP信息周期性地洪泛至全网;RPT 树是以RP 为根,数据接收者为叶子节点的共享树,在没有可用SPT树时,组播数据沿该树转发;(*,G)路由表项存在于RPT 树中,表示特定组在共享树中的状态,其源可以为任意源,G 为所加入的组播组;SPT 树以组播源为根,接收者或RP 节点为叶子节点的最短路径树,在完成SPT 切换后,组播数据沿该树转发;(S,G)路由表项表示一个特定组播流,S 表示发送组播数据的源IP 地址,G 表示发送组播报文的目的地址,即组播组地址。

1.2.2 协议机制与数据转发过程

PIM-SM 协议的核心机制包含PIM 邻居发现、DR 选举、RP 选举、组播源注册、RPT 树和SPT 树的构建和维护等部分,主要由如表2 所示的几种消息来完成。

一方面,在启动PIM 任务后,当有主机(记为主机A)加入组播组时,与主机A 直连的DR 节点(记为节点A)向RP 节点发送Join 消息,沿途经过的节点均会新建(*,G)表项,从而形成一棵RPT 树。当有主机(记为主机B)开始发送数据时,与主机B 直连的DR 节点(记为节点B)将主机B 下发的组播数据封装成Register 消息,并以单播的形式发往RP 节点,RP 节点收到Register 消息后,向节点B 发送Join 消息,沿途建立(S,G)表项,建立节点B到RP 节点之间的SPT 树,同时组播数据沿RPT 树发往节点A,从而实现了组播数据的转发。

另一方面,当(S,G)表项均建立完成后,RP 节点向节点B 发送Register-stop 消息。当速率或者包数达到阈值后,节点A 向节点B 发送Join 消息来完成SPT 树切换,同时向RP 方向发送Prune 消息实现(*,G)表项的剪枝操作。另外,本文讨论的PIM-SM 机制的实现源码均是基于版本号为pimd-2.3.2 的Release 版本开展讨论的。

2 基于无线自组网和VxWorks 的PIM-SM改进与设计

2.1 IGMP 模块改进与移植配置

当一个网段内有多个路由器时,IGMPv1 协议通过PIM-SM 协议选举出来的网内唯一转发者(如DR 节点)充当查询器。IGMPv2、IGMPv3 协议使用独立的查询器选举算法选出查询器,该查询器向同一网段内所有组播路由器和主机发送查询消息,了解和维护组播组成员信息。但在移动无线自组网下,可能存在很多节点处于同一个网段或有节点频繁入、退网,而只有一个查询器存在抗毁性差、查询开销大、时延长、成员关系报告不及时等问题。基于此,本文提出了一种改进方法,在节点启动后默认选择自身为当前网段查询器并发送查询消息时,PIM 任务不将该查询消息发给其他PIM 路由器节点,即每个节点都是一个查询器,也是DR 节点。该查询器发出的查询消息只发送给与其直连的电脑主机或网控终端,接收与其直连的电脑主机或网控终端的组成员关系报告报文,实现组成员管理的功能。

VxWorks 提 供COMPONENT_IPMCP 宏 和INCLUDE_IPMCP、INCLUDE_IPMCP_USE_IGMP、INCLUDE_IPNET_USE_MCAST_ROUTING 等组件来支持IGMP 协议的功能。具体而言,首先需要创建Wind River VxWorks6.9 Source Build(Kernel Library)Project 工程(下称VSB 工程),将宏COMPONENT_IPMCP 的编译项改为y,重新编译该工程。而后基于该VSB 工程创建Wind River VxWorks6.9 Image Project工程(下称VIP 工程),将INCLUDE_IPMCP、INCLUDE_IPMCP_USE_IGMP、INCLUDE_IPNET_USE_MCAST_ROUTING 等组件包含进来,重新编译该VIP 工程,生成VxWorks 内核文件,并对相关结构体和socket 进行适配。

2.2 PIM-SM 协议的解耦设计与改进

PIM-SM 协议的运行涉及协议模块、VxWorks内核模块,以及两者之间的信令交互。协议在组播组成员发生变化,如组播组成员加入、退出或组播路由表项定时器超时等情况下,会产生或处理Join/Prune 消息等报文,并将有变化的组播路由表项更新至本地组播路由缓存,通过复用套接字的方式将组播路由表项更新至内核组播路由表(Multicast Routing Table,MRT)中。内核在转发组播数据报文时,会调用组播转发状态机函数查询单播路由表进行逆向路径转发(Reverse Path Forwarding,RPF)检查和MRT 查询组播路由,在校验通过后将组播数据包发送至转发队列进行转发。若查找失败或校验不通过,则内核通过守护进程触发“IGMPMSG_NOCACHE”“IGMPMSG_WRONGVIF”“IGMPMSG_WHOLEPKT”等类型信令的处理操作。而PIM-SM 协议在使用中通常要求组播数据转发接口和来源接口不相同,即通过区分上下游接口来判断数据流向,以防止发生组播数据风暴。

不难发现,PIM-SM 协议的处理与内核模块存在较强的耦合。在实践中,存在路由表项不写入内核,电台的收发使用同一接口,内核缺乏对PIMSM 协议的功能支持等情况。这些情况会导致内核查询路由表异常,PIM-SM 协议的Bootstrap 消息洪泛和组播路由表建立异常,以及PIM 交互报文和组播数据包处理流程不能正确触发等不良后果。基于此,本文设计了一套报文交互和数据包处理流程,取代内核中的处理操作,以降低PIM-SM 协议与内核的耦合,将PIM-SM 协议适配进可能存在上述情况的实践中。

2.2.1 单播、组播路由和接口改进

PIM 任务在设置iif(incoming interface)接口、查找邻居PIM 路由器等处理中会通过Netlink 通信机制查询单播路由表中的信息,但不同平台或操作系统对Netlink 机制的兼容度不同,或在单播路由表项不写入内核时,该机制便会出现异常。然而,PIM-SM 协议是一个与单播路由协议无关的组播协议,故本文结合实际情况,在单播路由协议中提供单播路由查询接口,同时将PIM-SM 协议中有关该部分的处理都予以替换、删减。对于组播路由,在本地维护一套组播路由表,以方便组播数据包的转发和PIM 任务的命令触发功能。

同时,PIM-SM 协议通常要求路由器有两个以上接口,通过RPF 检查等方式来避免报文重复发送等问题。但事实上,面对单接口等应用场景,本文方法会在报文发送或接收时添加一个重复包检测和过滤模块,对内容完全相同的报文进行检查并丢弃,而后取消age_routes()、change_interfaces()等函数和Bootstrap 消息等处理中对incoming 接口和outcoming接口的限制,便能适配PIM-SM 协议。

2.2.2 与内核解耦及任务设计

上下层(如驱动层、MAC 层)与PIM-SM 协议的所有交互报文不通过套接字发送至内核,也不由内核进行信令触发与转发调度,而是交由以下6个任务和两个接口进行调度,分别是下行报文任务、IGMP 任务、下行数据任务、上行报文任务、PIM信令任务、上行数据任务和上行接口、下行接口。各任务与各接口之间的关系如图1 所示。

图1 任务与接口关系

当PIM-SM 协议启动后,节点发送IGMP 查询消息,该消息通过上行接口送至主机侧。当主机有加组或退组等操作或者发送组播数据时,主机通过下行通道将报文送至下行报文任务,下行报文任务进行报文合法性校验,而后根据协议类型区分IGMP 信令和下行组播数据,并发送至对应的任务。当收到下行IGMP 信令时,因成员加组或退组可能会触发PIM 信令的产生和处理。当有下行组播数据时,调用组播路由表查询组播路由,并可能触发PIM 信令(如register 消息和“IGMPMSG_NOCACHE”等信令),决定该组播数据以何种方式下发并进行重复性检测。换言之,IGMP 信令与PIM 信令、下行数据处理与PIM 信令、PIM 信令与上行数据处理、上行数据处理与下行数据处理之间也有关联关系。

当本节点从上行报文任务收到报文时,进行报文合法性校验,而后根据协议类型区分是PIM 信令或是上行组播数据,并发送至对应的任务。若是PIM 信令报文(如hello 消息,Register 消息),复用协议源码accept_pim()函数分类处理。若是上行组播数据,则查询组播路由表,根据表项决定组播数据上送主机或转发、信令触发等操作。

当然,上述任务与接口中均不包含PIM-SM 协议中报文交互的具体处理和建立路由的过程。IGMP报文、PIM 报文交互内容是上文中适配过的处理流程。

2.2.3 数据包下发与转发

当图1 中的下行报文任务接收到主机下发的组播数据包时,下行数据任务的处理流程如图2 所示。

图2 下行数据处理流程

从图2 可知,组播数据的下发不仅要查询路由表项,而且要根据路由表项和标记位(如MRTF_SPT/ MRTF_WC 标记位)来判断是否要做出对应的处理。值得注意的是,当(S,G)条目可用时,仍需判断注册抑制定时器的状态。

另外,由于本文中适配了单接口的情形,所以在组播数据下发和转发过程中不会触发“wrong iif”的处理消息,对来源接口和出接口没有限制,也简化了PIM-SM 协议的处理。

在上行数据任务收到组播数据包时,查询路由表项,如(S,G)和(*,G)。若能找到可用表项,则将数据包上送与转发。

3 实测环境搭建与结果分析

为验证上述方案的可行性,搭建两对“主机-电台”的实测环境,如图3 所示。

图3 实测环境

实测环境中,电台运行VxWorks 操作系统,版本为VxWorks6.9;主机运行Windows 操作系统,版本为Windows 7。Windows 系统支持IGMPv3 协议,VxWorks系统中包含IGMPv3协议的相关宏和组件,经编译进内核后可支持IGMPv3 协议的交互操作。

将本方案适配进Ad hoc 时,会获取主机的ip地址来替换电台的网口ip 地址,并参与单接口的PIM-SM 协议运行。

首先,在PIM-SM 协议的配置文件pimd.conf 中,将电台1 和电台2 都配置成候选BSR 和候选RP 节点,并且将电台1 配置成全域唯一的静态RP。运行PIM-SM 协议后,两个电台都会发送组播组成员Query 消息、Hello 消息、Bootstrap 消息等交互消息,经过BSR 选举算法计算后,将电台2 选举为BSR节点。

其次,操作自研Qt 组播数据收发终端将主机2加入组播组(225.3.2.1),使用Wireshark 进行抓包,结果如图4 所示。

图4 Wireshark 抓包结果

结果表明,当电台2 作为查询器发送Query 消息后,主机2 能通过Report 报文响应查询消息,将加入的组播组报告给电台2 中运行的PIM-SM 任务。该PIM-SM 任务随即创建(*,G)表项,而后发送Join 消息至RP 节点并创建(*,G)等路由表项,PIM-SM 协议的日志打印如图5 所示。

图5 (*,G)路由表项

最后使用自研Qt 组播数据收发终端从电台2给电台1 发送组播数据包。根据本方案的策略,会有将数据包封装并发送注册消息等处理操作,且电台1 能正确收到组播数据包。本实测实验囊括了PIM-SM 协议运行的核心内容,证明了该方案的正确性和可行性。

4 结语

PIM-SM 协议作为一种可行的组播技术得到了业界的青睐,同时VxWorks 操作系统因其优良的特性广泛应用于军事领域。结合移动无线自组网的需求,本文对基于VxWorks 的PIM-SM 协议移植做出了适配和改进,并提出了一种PIM-SM 协议与内核交互解耦的设计方法,最后通过实测验证了方案的可行性。考虑到本方案中当前域内组播的单RP 节点的抗毁性差等问题,下一步研究需要考虑多RP 节点的PIM-SM 协议在移动无线自组网中的应用及多RP节点集合频繁变动带来的组播路由震荡的问题。

猜你喜欢

路由表信令内核
强化『高新』内核 打造农业『硅谷』
基于OSPF特殊区域和LSA的教学设计与实践
SLS字段在七号信令中的运用
移动信令在交通大数据分析中的应用探索
基于嵌入式Linux内核的自恢复设计
Linux内核mmap保护机制研究
基于信令分析的TD-LTE无线网络应用研究
微生物内核 生态型农资
LTE网络信令采集数据的分析及探讨
基于新路由表的双向搜索chord路由算法