公开/公告号CN104023317A
专利类型发明专利
公开/公告日2014-09-03
原文格式PDF
申请/专利权人 中国科学院计算技术研究所;
申请/专利号CN201410270042.7
申请日2014-06-17
分类号H04W4/06(20090101);H04W40/02(20090101);H04W40/10(20090101);H04W52/02(20090101);
代理机构11280 北京泛华伟业知识产权代理有限公司;
代理人王勇;李科
地址 100190 北京市海淀区中关村科学院南路6号
入库时间 2023-12-17 01:59:14
法律状态公告日
法律状态信息
法律状态
2019-02-01
授权
授权
2014-10-08
实质审查的生效 IPC(主分类):H04W4/06 申请日:20140617
实质审查的生效
2014-09-03
公开
公开
技术领域
本发明涉及计算机网络技术领域,具体地说,本发明涉及一种低功耗 多播路由网络及其多播路由方法。
背景技术
随着工业自动化水平要求越来越高,以及各类传感器终端功能的日益 强大,一种特殊的低功耗有损网络——Low-power and Lossy Networks (LLNs)在日常生活中的应用越来越广泛。这种低功耗有损网络通常由传 感器、执行器、路由器以及控制中心组成,它们可以组织成树状网络,一 个例子中,控制中心作为根节点,路由器作为中间节点,传感器和执行器 作为叶节点。这种网络可以部署于市政系统中,例如可以用这种网络将所 有路灯连接,从而实现对整个城市中的所有路灯的控制。
在低功耗有损网络的一些应用中,有时需要实现一对多的数据传输, 例如,控制中心需要单独控制某一街道的路灯。再例如,信息监测传感器 将监测到的数据实时地发送给监控台,同时,这些数据可能也需要实时地 发送给某些报警器。因此低功耗有损网络的多播传输问题,有着较大地实 用与研究意义。
目前,现有的IPv6的多播协议理论上能够支持上述低功耗有损网络。 然而,低功耗有损网络中的设备通常具有低功耗、小存储等特点,如果直 接将IPv6协议移植到低功耗有损网络中,存在网络开销大、节点能耗大 的问题。因此,当前迫切需要一种适合于低功耗有损网络的低功耗IPv6 多播路由解决方案。
发明内容
本发明的任务是提供一种能够克服上述技术问题,适合于低功耗有损 网络的低功耗多播路由解决方案。
本发明提供了一种低功耗多播路由网络,包括至少一个多播组,每个 多播组包括组成树状结构的若干个多播节点,所述多播节点用于根据IPv6 协议接收和转发其所属多播组的多播数据流;
所述多播组中,所述多播节点还用于定期向其子节点发送多播问候消 息,所述多播问候消息通过在IPv6协议中扩展ICMPv6消息实现,且所述 多播问候消息中携带该多播节点所属的多播组的标识;所述多播节点还用 于侦听其父节点所发送的多播问候消息,根据多播问候消息的侦听情况, 选择不做处理或者向其父节点发送申请加入相应多播组的多播加入消息, 所述多播加入消息通过在IPv6协议中扩展ICMPv6消息实现。
其中,所述多播组的所述多播节点的类型包括根节点、中间节点和叶 节点。
其中,每个所述多播节点还用于维护本地多播表,所述多播表的每个 表项存储本节点所属的多播组标识、相应的多播地址,以及属于该多播组 的子节点的地址,其中,一个多播节点可以属于多个多播组。
其中,所述根节点用于侦听并接收其子节点发出的携带多播组标识的 多播加入消息,并根据多播加入消息所携带的多播组标识在本地多播表的 相应表项中增加相应子节点的地址;还用于根据本地多播表所存储表项中 的子节点的地址,以预设的间隔时间自动向每个子节点发送多播问候消 息,所述多播问候消息携带本地多播表所存储的多播组标识;还用于向本 地多播表中的多播地址发送多播数据流。
其中,所述中间节点用于侦听并接收其子节点发出的携带多播组标识 的多播加入消息,并根据多播加入消息所携带的多播组标识在本地多播表 的相应表项中增加相应子节点的地址;还用于根据本地多播表所存储表项 中的子节点的地址,以预设的间隔时间自动向每个子节点发送所述多播问 候消息;还用于侦听并接收父节点发出的多播问候消息,如果在与所述预 设的间隔时间相应的时间内未侦听到父节点发出的多播问候消息,则根据 本地多播表项中存储的所述多播组标识向父节点发出所述多播加入消息; 还用于侦听和接收父节点发送至该中间节点所属多播组的多播地址的多 播数据流,以及向本地多播表相应表项中的子节点地址转发所述多播数据 流。
其中,所述叶节点用于侦听并接收其父节点发出的多播问候消息,如 果在与所述预设的间隔时间相应的时间内未侦听到父节点发出的多播问 候消息,则根据本地多播表项中存储的所述多播组标识向父节点发出所述 多播加入消息;还用于侦听并接收父节点发送至该叶节点所属多播组的多 播地址的多播数据流。
其中,所述根节点还用于作为多播源向所指定的多播组的多播地址发 送多播数据流。
其中,所述叶节点和中间节点还用于作为多播源向所指定的多播组的 多播地址发送多播数据流;
所述中间节点还用于侦听和接收其子节点发送至所属多播组的多播 地址的多播数据流,以及向所述中间节点的父节点和除发送该多播数据流 的子节点以外的其它子节点转发所述多播数据流;
所述根节点还用于侦听和接收其子节点发送至所属多播组的多播地 址的多播数据流,以及向除发送该多播数据流的子节点以外的其它子节点 转发所述多播数据流。
本发明还提供了一种基于上述的低功耗多播路由网络的多播路由方 法,所述多播组的所述多播节点的类型包括根节点、中间节点和叶节点, 所述多播组的多播路由方法包括下列步骤:
1)根节点向所指定的多播组的多播地址发送多播数据流;
2)各个中间节点侦听和接收父节点发送至所属多播组的多播数据流, 以及向本地多播表相应表项中的子节点地址转发所述多播数据流;
3)各个叶节点侦听并接收父节点发送至所属多播组的多播数据流。
其中,所述步骤1)包括下列子步骤:
11)一叶节点或中间节点作为源节点作为源节点,所述叶节点或中间 节点作为源节点向所指定的多播组的多播地址发送多播数据流;
12)各个中间节点侦听和接收子节点发送至所属多播组的多播地址的 多播数据流,以及向所述中间节点的父节点和除发送该多播数据流的子节 点以外的其它子节点转发所述多播数据流;
13)根节点侦听和接收子节点发送至所属多播组的多播地址的多播数 据流,以及向除发送该多播数据流的子节点以外的其它子节点转发所述多 播数据流。
其中,所述多播组的多播路由方法还包括下列步骤:
4)对于正在向某个多播组G播发或者转发多播数据流的节点,以预 设的间隔时间自动向属于该多播组G的每个子节点发送所述多播问候消 息;
5)属于所述多播组G的每个中间节点和叶节点侦听所述多播问候消 息,如果在与所述预设的间隔时间相应的时间内未侦听到父节点发出的多 播问候消息,则根据本地多播表项中存储的多播组G的多播标识向父节点 发出所述多播加入消息;如果在与所述预设的间隔时间相应的时间内侦听 到父节点发出的多播问候消息,则不做处理,继续侦听和接收相应多播地 址的数据流;
6)根节点和中间节点接收子节点发送的所述多播加入消息,在本地 的多播表中的多播组G的表项中加入该子节点的地址。
其中,所述多播组的多播路由方法还包括下列步骤:
7)对于需要退出某个多播组G的节点A,所述节点A从本地多播表 中删去多播组G对应的表项,并向父节点发送多播组退出消息,所述多播 组退出消息通过在IPv6协议中扩展ICMPv6消息实现,且所述多播组退出 消息中携带多播组G的标识;
8)所述节点A的父节点接收所述多播组退出消息,并本地多播表的 多播组G的表项的子节点地址项目中删除所述节点A的地址。
其中,所述步骤7)包括下列子步骤:
71)所述节点A检查本地多播表中多播组G的相应表项,判断当该 表项中子节点地址的项目是否为空,如果是,则执行步骤72),否则,执 行步骤73);
72)所述节点A直接从本地多播表中删去多播组G对应的表项,并 向父节点发送所述多播组退出消息;
73)所述节点A向本地多播表中多播组G的相应表项中记录的子节 点发送多播剪枝消息;所述多播剪枝消息通过在IPv6协议中扩展ICMPv6 消息实现,且所述多播剪枝消息携带所述多播组G的标识;并且,所述节 点A从本地多播表中删去多播组G对应的表项,并向父节点发送所述多 播组退出消息;
74)任意一个子节点收到所述多播剪枝消息后,从本地多播表中删去 多播组G对应的表项,同时向本地多播表中多播组G对应的表项中的子 节点转发所述多播剪枝消息。
与现有技术相比,本发明具有下列技术效果:
1、能够以较低的网络开销和节点能耗,准确地向特定多播组的所有 成员节点发送相应的多播数据流。
2、能够在较低的网络开销和节点能耗的前提下,按需对各多播组节 点的加入和退出进行有序控制。
附图说明
以下,参照附图结合实施例来详细说明本发明,其中:
图1示出了本发明一个实施例的低功耗IPv6多播路由网络的结构;
图2示出了本发明一个实施例中的一个多播组所对应的ROOT树的示 例;
图3示出了本发明一个实施例中基于一个ROOT树的成员多播流的转 发示例;
图4示出了本发明一个实施例中基于一个ROOT树的非成员多播流的 转发示例;
图5示出了本发明一个实施例中一个ROOT树中成员退出的示例;
图6示出了本发明一个实施例中一个ROOT树中成员退出的另一示例。
具体实施方式
下面结合附图和实施例对本发明做进一步地描述。
根据本发明的一个实施例,提供了一种低功耗IPv6多播路由网络,它 采用了适合低功耗有损网络的有向树状拓扑结构(下文中简称为树状结构), 如图1所示。所述低功耗IPv6多播路由网络的根部的节点为根节点,没有 子节点的节点为叶节点,其余节点为中间节点。每个所述节点各自用于维 护本地多播表,所述多播表的每个表项存储本节点所属的多播组标识、相 应的多播地址,以及属于该多播组的子节点的地址。每个多播组也采用有 向树状拓扑结构构建,并且每个多播组所对应的树状结构均为低功耗IPv6 多播路由网络上的子树。本文中将对应于多播组的这种子树称为ROOT树。 ROOT树是一种共享树,同一多播组的所有源节点共享同一个树。图2示出 了一个多播组所对应的ROOT树的示例,该多播组由节点R,节点N1~N8 组成。多播组所对应的ROOT树也可以是图1的低功耗IPv6多播路由网络 的树状结构中的其它任意子树,例如多播组也可以由R节点,N1~N4节点 构成,由R节点,N1节点,N6节点构成,或者由N1~N5节点构成。低 功耗IPv6多播路由网络中,基于一系列MRPL(多播路由协议)控制消息来 实现多播控制。一个实施例中,MRPL控制消息均是通过扩展ICMPv6消息 来实现。MRPL控制消息由一个ICMPv6消息头部和一个紧接着他的消息主 体构成。MRPL控制消息主要包括下述类型:M_Join消息、M_Hello消息、 M_Prune消息和M_Clear消息。
下面从节点加入多播组、维持节点与其所加入的多播组之间的连接性、 多播流量发送、节点离开多播组这四个方面分别进行描述。
一、节点加入多播组。
在节点加入多播组过程中,中间节点或者叶节点与其父节点之间,通过 M__Join消息和M_Hello消息完成节点加入操作,具体包括下列步骤:
步骤11:当某一中间节点或者叶节点试图加入并侦听某一多播组G时, 它向其父节点表达这一需求,即向其父节点以单播的形式发出一条M_Join 消息。M_Join消息的内容指明该节点要加入的多播组并逐跳向上发送。最 终该消息将发送到根节点或者一个已经加入到组G的中间节点。M_Join消 息格式如表1所示。
表1
版本号:MRPL协议的版本号,目前为版本1。
类型:MRPL控制消息是一个类型值为156的ICMPv6信息消息,也就是 说,所有的MRPL控制消息的类型值都是156。
定义字段:定义字段定义了本条MRPL控制消息的类型。本实施例中定义 了字段为如下数值的MRPL控制消息类型。
1)0x00 M_Join消息
2)0x01 M_Hello消息
3)0x02 M_Prune消息
4)0x03 M_Clear消息
如果一个节点收到了一条带有未知定义字段的MRPL控制消息,节点必 须丢弃掉该消息而不进行其他任何处理。
校验和:校验和字段,按照国际通用标准计算方法获取。
多播组地址一般可以由上层应用来提供,比如说某一应用约定一个多播 组地址作为该应用功能的通信地址,要实现这一功能的所有节点都会自动去 申请加入这个多播组。
步骤12:根节点或者一个已经加入到组G的中间节点在收到一个M_Join 消息时,向发出该M_Join消息的节点返回一个M_Hello消息。这个M_Hello 消息相当于传统IPv6协议中的“M_Join_ACK”消息。M_Hello消息格式如表 2所示。
表2
步骤13:发出M_Join消息的收到M_Hello消息,表示子节点成功加入 多播组,可以开始接收该多播组的多播流量。
二、维持节点与其所加入的多播组之间的连接性
节点成功加入多播组后,需要对节点与多播组之间的连接进行维护,以 进行侦听确认并保证连接。一个实施例中,利用M_Hello消息实现了一种“父 节点负责”机制,从而以较少的信道开销和能耗实现了节点与多播组之间连 接的维护。具体步骤如下:
步骤21:根节点和每个中间节点均周期性地向其本地多播表中记录的子 节点发送M_Hello消息。该M_Hello消息会列出父节点在该链路上转发多播 包的所有多播组。此时M_Hello消息的作用为维持节点和其父节点的连接状 况。
步骤22:如果叶节点或中间节点与其所在多播组保持正常连接,该节点 会周期性地接收到父节点发送来的M_Hello消息,此时可以确认自己与加入 的多播组保持连接。如果叶节点或中间节点在预设的计时期间(例如30秒) 一直没有收到来自其父节点的M_Hello消息,或者在计时期间内,子节点收 到的M_Hello消息中一直没有其侦听的某个多播组的地址项,那么表示节点 已经与该多播组断开连接,转入步骤23。
步骤23:在确认节点已经与该多播组断开连接之后,节点重新向其父节 点发送M_Join消息,以实现继续对该组多播数据的侦听(即重新发起加入 相应多播组的流程,包括前文中的步骤11至13。
三、多播流量发送
在多播组中,需要从多播源将数据流发送到该多播组的各个节点,本文 中将其称为多播流量发送。一个实施例中,多播流量的发送主要分为两种, 一种是成员源流量发送,一种是非成员源流量发送。
其中,对于成员源流量,即多播流量的发送方是多播组对应的ROOT树 上的一员的情况,由于成员源是直接连接在ROOT树上,因而成员源流量可 以直接发送到组里的各个成员,具体可见图3。在源节点为叶节点或中间节 点时,成员源流量发送包括下列步骤:
步骤311:当节点发起该多播组的多播包时,首先向上将多播包发给其 父节点。例如当节点N3发起该多播组的多播包时,先将多播包发给其父节 点N2。
步骤312:各个中间节点侦听和接收其子节点发送至所属多播组的多播 地址的多播数据流,以及向所述中间节点的父节点和除发送该多播数据流的 子节点以外的其它子节点转发所述多播数据流。例如节点N2侦听和接收到 其子节点N3的多播数据流时,向父节点N1转发该多播数据流。中间节点 N1侦听和接收到其子节点N2的多播数据流时,向父节点R和除节点N2以 外的子节点N4转发该多播数据流。
步骤313:根节点侦听和接收子节点发送至所属多播组的多播地址的多 播数据流,以及向除发送该多播数据流的子节点以外的其它子节点转发所述 多播数据流。例如根节点R侦听和接收到其子节点N1的多播数据流时,向 除节点N1以外的子节点N6转发该多播数据流。
步骤314:各个中间节点侦听和接收父节点发送至所属多播组的多播数 据流,以及向本地多播表相应表项中的子节点地址转发所述多播数据流。例 如中间节点N4侦听和接收到其父节点N1的多播数据流时,向其子节点N5 转发该多播数据流。中间节点N6侦听和接收到其父节点R的多播数据流时, 向其子节点N7转发该多播数据流。中间节点N7侦听和接收到其父节点N6 的多播数据流时,向其子节点N8转发该多播数据流。
步骤315:各个叶节点侦听并接收父节点发送至所属多播组的多播数据 流。例如叶节点N5侦听并直接接收其父节点N4发送至所属多播组的多播 数据流。叶节点N8侦听并直接接收其父节点N7发送至所属多播组的多播 数据流。
另外,如果在ROOT树以外仍然有该多播组的侦听者(根节点中记录这 类侦听者的信息),那么将通过根节点将多播包发送出去,传递给该多播组 的侦听者。这样就完成了成员源流量的发送。
一个实施例中,还提供了一种非成员源流量发送方法。这是因为不能保 证所有的多播源都是ROOT树上的成员,此时,非成员源流量发送线路可见 图4,非成员源流量发送过程具体包括下列步骤
步骤321:多播源不在所指定的多播组的ROOT树上时,作为多播源的 节点将多播数据流通过隧道发送到所指定ROOT树的根节点。例如非成员节 点N9作为多播源时,多播数据包
步骤322:ROOT树的根节点沿着下行方向将多播流量发送给其子节 点。例如,根节点将多播数据流转发给其子节点N1和N6。
步骤323:各个中间节点侦听和接收父节点发送至所属多播组的多播数 据流,以及向本地多播表相应表项中的子节点地址转发所述多播数据流。例 如:中间节点N1侦听和接收到其父节点R的多播数据流时,向其子节点 N2和N4转发该多播数据流。中间节点N2侦听和接收到其父节点N1的多 播数据流时,向其子节点N3转发该多播数据流。中间节点N4侦听和接收 到其父节点N1的多播数据流时,向其子节点N5转发该多播数据流。中间 节点N6侦听和接收到其父节点R的多播数据流时,向其子节点N7转发该 多播数据流。中间节点N7侦听和接收到其父节点N6的多播数据流时,向 其子节点N8转发该多播数据流。
步骤324:各个叶节点侦听并接收父节点发送至所属多播组的多播数据 流。例如叶节点N3侦听并直接接收其父节点N2发送至所属多播组的多播 数据流。叶节点N5侦听并直接接收其父节点N4发送至所属多播组的多播 数据流。叶节点N8侦听并直接接收其父节点N7发送至所属多播组的多播 数据流。
上述步骤323、324实际上与步骤314、315是一致的。
另外,当ROOT树的根节点作为源节点时,直接执行上述步骤322至 324即可,此处不再赘述。
四、节点离开多播组
一个实施例中,节点离开多播组分为两种情况,一种是节点主动离开 ROOT树,另一种是父节点对子节点进行剪除。这两种方式分别是通过 M_Prune消息和M_Clear消息实现的。表3示出了M_Prune消息的格式。表 4示出了M_Clear消息的格式。
表3
表4
节点主动离开ROOT树的过程如下:当节点本身不再需要接收某多播组 G的数据,或者是对于ROOT树上的某个中间节点,其子节点中不再存在组 G的侦听者时,节点会通过M_Prune消息主动离开ROOT树。具体包括下 列步骤:
步骤411:当节点本身需要离开ROOT树时,其首先会向父节点发送一 条M_Prune消息。M_Prune消息中会列出该节点不再侦听的所有多播组的组 地址。
步骤412:在节点发送完M_Prune消息后,节点默认本次操作成功,父 节点也不需要想子节点发送确认信号。但是,特殊的,如果该节点之后仍然 收到含有多播组G的M_Hello消息,这表示其之前发送的M_Prune消息可 能出现了某种差错,导致他未能成功的进行剪除操作。此时,节点需要再次 向其父节点发送该M_Prune消息。
图5示出了节点N3主动离开ROOT树的示意图。
父节点对子节点进行剪除的过程如下:当ROOT树上的某个中间节点与 其父节点之间对于多播组G无法再进行多播数据的发送与接收时,父节点将 会对子节点进行剪除。具体包括下列步骤:
步骤421:在剪除操作中,首先父节点会向子节点发送M_Clear消息, 消息中含有“无效”多播组信息。
步骤422:子节点收到父节点的M_Clear消息之后,会依照M_Clear消 息中所列出的多播组把这些“无效”多播组信息从自己本地的多播表中清除 掉。同时,节点还向其子节点发送起相同作用的M_Clear消息。
图6示出了节点N1对子其子节点N2进行剪除的示意图。
上述节点退出机制,能够保证在较低的网络开销和节点能耗的前提 下,按需对各多播组节点的加入和退出进行有序控制。
最后应说明的是,以上实施例仅用以描述本发明的技术方案而不是对 本技术方法进行限制,本发明在应用上可以延伸为其它的修改、变化、应 用和实施例,并且因此认为所有这样的修改、变化、应用、实施例都在本 发明的精神和教导范围内。
机译: 无线传感器网络中地理多播路由的方法和基于网络编码的地理多播路由方法
机译: 多播路由设备,采用该多播路由设备的多播网络系统以及分组传输方法
机译: 面向连接的网络中的分布式多播路由的方法以及应用该方法的网络