具体实施方式
为了克服现有技术中发送节点单纯进行报文组播发送所带来的缺陷,本发明提供了一种发送节点和接收节点在会话建立之初进行协商,由发送节点缓冲已发送报文,并根据接收节点的确认标识决定是否进行报文重新发送的技术方案,以保证报文组播的可靠性。
请参见图2,显示了一个组播节点的组播处理方案:组播管理根据应用协议的指令创建组播组,会话管理进行具体的会话建立并经收发管理通过硬件媒体进行报文的发送/接收。本发明所提供的分布式节点组播方法沿用该处理思想,但在此基础上进行了相应的处理改进。
请参见图3,为本发明所提供的分布式节点组播方法一实施例的流程图,该分布式节点组播方法适用于发送节点与接收节点分布式连接构成的***,其中发送节点根据应用协议的指令建立组播组,并分配相应的组播组ID;组播组成员包括至少一个接收节点。本领域普通技术人员可以理解,当组播组成员仅包括一个接收节点时,相当于点对点的单播,由于无论是组播还是单播,都能够通过硬件媒体实现,因此都适用于本发明所提供的分布式节点组播方法。
具体的,该分布式节点组播方法包括以下步骤:
S101、发送节点与组播组内的全部接收节点进行会话协商,并建立会话;
本发明在在组播组创建完成后,就进入会话协商的阶段,这是与现有节点组播技术的区别点之一:现有技术是发送节点按照建立的组播组直接组播发送报文,并不会先行于接收节点进行协商,难以保证组播通信的可靠性。
具体的,如图4所示,会话协商可以包括:
发送节点与各接收节点协商配置组播报文序号编码规则,保证接收节点能够识别缺失的报文;例如,约定连续的报文序号或者符合一定算法的报文序号,并约定报文的初始序列号,以保证接收节点识别缺失报文;
发送节点与各接收节点协商配置确认条件,该确认条件为下述情况的任意组合:累计发送/接收到预设数目的连续报文;累计发送/接收连续报文达到预设时间;以及,发送/接收的报文超过预设的优先级;
该确认条件对于协商后的发送节点和接收节点是统一的,具体来说,当发送节点累计发送预设数目的连续报文满足确认条件时,相应的,接收节点接收到预设数目的连续报文也满足确认条件;当发送节点累计发送连续报文到达预设时间满足确认条件时,相应的,接收节点累计接收连续报文达到预设时间也满足确认条件;以及,当发送节点发送的报文超过预设的优先级满足确认条件时,相应的,接收节点累计接收的报文超过预设的优先级也满足确认条件。
发送节点和各接收节点协商配置确认标识格式,所述确认标识中携带组播组成员标识以及所确认的报文序号;当然,该报文序号可以使用区间值来表示,或者,当所确认的报文构成一个报文组时,可以采用该报文组的序号加以表示,视乎实际情况而定。
同时需要指出,一般为了提高组播效率,一个会话只是在开始阶段进行会话协商,在该会话结束时无需协商,将保持直至被下一次会话协商所取代。
S102、发送节点根据所建立的会话,以组播的形式向所述接收节点发送报文,并缓冲所发送的报文;
需要注意的是,发送节点发送的报文应携带有协商好的报文序号,以保证接收节点的后续识别。
至该会话结束,删除相应的组播组。
S103、发送节点根据组播会话协商的结果监控已发送的报文,如果已发送的报文符合预设的确认条件,但超时未获一接收节点的确认标识如ACK报文时,执行步骤S104;
其中,该确认标识在任一接收节点已接收的报文符合预设的确认条件时,由该接收节点向发送节点发送。
具体来说,由于发送节点和接收节点经历了共同协商的过程,具有统一的确认标准,因此,如果发送节点所发送的报文满足了确认条件,且接收节点加以正常接收,那么从接收节点的角度而言,其接收的报文无疑也满足了确认条件,并由此进行确认标识的发送;但如果发送节点所发送的报文满足了确认条件,而接收节点未曾实现正常接收,即中间有报文遗失,那么从接收节点的角度而言,其接收的报文就无法满足确认条件,不会进行确认标识的发送。
在上述两种情况下,从发送节点的角度而言,通过监控已发送报文是否获得了应有的确认标识,即可识别接收节点是否正常接收。考虑到发送节点和接收节点之间通信交互所需要的时间,可以为发送节点设置超时时限,如果超时为接收到确认标识,即可认为报文发送失败,执行步骤S104。
S104、发送节点调用所缓冲的相应报文并重新向所述接收节点发送。
一般来说,发送节点根据确认标识中的接收节点标识和报文序号就能够实现准确的定点发送,从而使组播组成员都能够获得组播报文,保证了组播传输的可靠性。
从上述步骤S101~S104可以看出,本发明实施例所提供的分布式节点组播方法,能够通过硬件组播,在进行一次发送时可以以组播形式同时向若干目标发送报文,具有组播高速性;同时,通过报文缓冲和确认标识的配合处理,能够保证组播可靠性。
在上述实施例中需要注意的是,随着确认条件的不同,本发明实施例所提供的分布式节点组播方法,其报文重传的粒度也有所不同。比如,如果设置确认条件为累计发送/接收到5个连续报文,那么超时设置必须预留有接收节点识别5个报文的时间,其粒度粗于每发送/接收到1个报文的确认条件;但反过来,每发送/接收到1个报文就执行确认,又会给网络造成很多不必要的开销。因此,具体确认条件的设置可以在实际应用中根据需要灵活掌握,以达到粒度和资源开销的较佳组合。
一般情况下,往往采用预设数目、预设时间和预设优先级的组合作为确认条件,即以定时和批量的方式回复确认标识(如ACK报文),减少ACK引起的发送、接收带宽开销,既避免了ACK报文过多,也不至于长期没有ACK确认;而对优先级较高报文的即时回复,能够保证对紧急报文的实时处理。
在上述实施例中还需要注意的是,由于大量的已发送报文长期保留在缓存中显然降低了资源的利用率,为了克服这一问题,可以采取针对某一个组播报文,如果收到了组播组中全部成员的ACK反馈,就可以将其从缓冲中删除的操作,以降低缓冲占用。其具体实现方式包括:
在步骤S103中,如果已发送的报文符合预设的确认条件,且在超时期限内获得一接收节点的确认标识如ACK报文时,执行步骤S105;
S105、监测是否已接收到组播组全部接收节点的确认标识,是则执行步骤S106,否则重新执行步骤S103;
S106、发送节点相应删除所缓冲的报文。
同时,在上述实施例中发送节点进行缓冲、重发和缓冲删除操作的同时,接收节点需要执行接收报文的处理。在现有技术中,为了避免处理过程中组播报文丢失,接收节点需要先行对接收到的组播报文进行缓冲,再对缓冲的报文加以回调处理。而在本发明的实施例中,由于组播报文的传输可靠性得到保证,即使发生报文丢失也能够重新获取,因此接收节点无需进行报文的缓冲回调,而是对符合预设的确认条件的已接收报文,接收节点以队列方式直接发送给应用协议进行处理,从而提高了组播处理的效率。
进一步的,上述实施例所描述的分布式节点组播方法通过接收节点的确认机制,为节点间组播的可靠性提供了保证。但也需要注意到,出于信道资源角度的考虑,确认条件的粒度往往不能过细,这就导致了可能存在中间只发生了一个或几个报文的丢失,但由于发送节点无法进一步识别,不得不重新发送一组报文的情况。为了克服这一问题,本发明在接收节点确认机制的基础上,还提供了相应的缺失提示机制。
由于节点确认机制的过程中,接收节点需要按照预前协商的结果进行报文的识别,从而判断是否可以发送确认标识,因此同时也能够识别出是否发色和能够了报文缺失。如果识别出报文缺失的接收节点仅针对所缺失的报文主动向发送节点进行提示,那么无疑发送节点可以有针对性地进行所缺失报文的补发。上述机制的具体实现方式如图5所示:
S201、根据组播会话协商的结果,接收节点对已接收报文的缺失情况加以识别;
具体的,步骤20 1可以通过以下操作实现:接收节点提取应接收报文的报文序号,该应接收报文的报文序号由组播报文序号编码规则和上一次接收到的报文确定;识别实际接收报文的序号;与应接收报文的报文序号一致,则未发生报文缺失;与所述应接收报文的报文序号不一致,则对应的报文缺失。
S202、当发生报文缺失时,接收节点向发送节点发出重传请求;
其中,该重传请求的报文格式是在会话协商的步骤中完成的,携带接收节点标识以保证发送节点能够确定重传的目的节点,携带有报文序号以保证发送节点能够确定需要重传的报文对象。
S203、接收到任一接收节点重传请求的发送节点调用所缓冲的相应报文并重新向该接收节点发送。
可以看出,通过上述步骤S201~S203,在ACK确认机制的基础上,又针对性的提供了对个别报文缺失情况的补充方案。举例来说,如果在一次组播过程中,一接收节点丢失了某一个报文之后的全部报文,则由于该接收节点无法根据后续报文识别到缺失情况,因此不会做出任何反应;此时,发送节点由于超时未接收到确认标识,因此主动重新发送。再比如说,在一次组播过程中,一接收节点丢失了某一个报文,则其根据后续接收的报文可以迅速判断中报文缺失情况,则通过及时反馈并重新获得该报文;如果获得该报文后满足了确认条件,那么发送节点甚至有可能在超时前获得相应的确认标识,无需重新发送整组的报文。总的来说,确认机制和提示机制相结合,不但有效的保证了节点间组播的可靠性,而且能够提高报文重发的粒度和效率。
在提示机制中,为了保证所缺失的报文能够按照协商的顺序正确编入队列,本发明的实施例也可以设置相应的缓冲,以便发生报文缺失时,接收节点对已接收到的报文进行缺失缓冲,等收到重传报文时,结合缓冲的报文一起以队列方式发送给应用协议进行处理。
即,步骤S202还包括接收节点对已接收到的、所缺失报文之后的组播报文进行缓冲,直至与重新发送的所缺失报文按照组播会话协商的结果组合后再发送给应用协议进行处理,以保证组播报文处理的顺序性。
虽然上述步骤也在接收节点进行了缓冲设置,但本领域技术人员可以了解,这种缓冲仅仅针对的是发生报文缺失的情况,而非对所有的报文都采用缓冲回调的方式,因此对缓冲的长度要求较小,也不会在未发生报文缺失时影响处理效率。
下面,通过一个具体的实施例对本发明所提供的分布式***节点间的组播发送/接收方法进行描述,以应用协议指令节点A向节点B、C和D三个节点发送组播报文为例,包括以下步骤:
步骤一、节点A根据应用协议指令创建组播组a,包括申请资源,下发驱动,分配相应的组播组ID,以及添加组播组成员B、C和D;
步骤二、当应用协议指令发送第一个组播报文时,触发节点A的会话管理,进行组播会话协商创建,请求建立与节点B、C和D的直接联系;
步骤三、节点B、C、D的会话管理根据节点A的协商请求,建立与节点A的会话链接;
步骤四、节点A的会话管理封装应用协议的报文,经收发管理通过硬件媒体,向组播组内的接收节点B、C和D组播发送报文;
步骤五、节点A的会话管理对所发送的报文进行缓冲;;
步骤六、在节点B、C和D上,识别实际接收报文的序号,与应接收报文的报文序号一致,则执行步骤七,否则执行步骤十;
步骤七、以队列方式直接将所接收到的报文上送到对应的应用协议进行处理;
步骤八、检查是否满足ACK报文发送条件,是则执行步骤九,否则对该报文的处理结束;
步骤九、向节点A发送ACK报文;
步骤十、对应的报文缺失,向发送节点A发出重传请求,该请求中携带应接收报文的报文序号和接收节点标识;
步骤十一、节点A调用所缓冲的相应报文并重新向该接收节点发送。
此外,本实施例还包括节点A监控所缓冲的报文,调用超时未获任一接收节点ACK报文的报文,重新向该接收节点发送;以及发送节点A监控所缓冲的报文,如果收到组播组全部接收节点的确认标识,则相应删除所缓冲的报文。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,所述的程序可以存储于一计算机可读取存储介质中,适用于发送节点与接收节点分布式连接构成的***,其中发送节点根据应用协议的指令建立组播组,所述组播组成员包括至少一个接收节点,该程序在执行时,包括如下步骤:
发送节点与组播组内的全部接收节点进行会话协商,建立会话并以组播的形式向所述接收节点发送报文,以及,缓冲所发送的报文;
根据组播会话协商的结果,如果发送节点已发送的报文符合预设的确认条件,但超时未获一接收节点的确认标识时,发送节点调用所缓冲的相应报文并重新向所述接收节点发送;
其中,所述确认标识在任一接收节点已接收的报文符合预设的确认条件时,由所述接收节点向发送节点发送。
所述的存储介质包括:ROM/RAM(Read Only Memory/Random-AccessMemory,只读存储器/随机访问内存)、磁碟或者光盘等。
本发明的实施例还提供了一种分布式节点组播组件10,如图6所示,适用于发送节点与接收节点分布式连接构成的***,其中发送节点根据应用协议的指令建立组播组,该组播组成员包括至少一个接收节点。可以理解,发送节点和接收节点是根据应用协议建立邻居的需要动态变化的,每一个节点即可以作为发送节点也可以作为接收节点;但对于一个组播组而言,其发送节点和接收节点则是确定的。
该分布式节点组播组件10还包括运行于发送节点的组播发送单元100和分别运行于每一接收节点的组播接收单元200。
该组播发送单元100分别与组播组内每一接收节点的组播接收单元200建立连接,用于根据应用协议的指令建立组播组,与各组播接收单元200进行会话协商并建立会话,向组播接收单元200组播发送报文并缓冲,以及调用所缓冲的、符合预设的确认条件但超时未获一组播接收单元200确认标识的相应报文,并重新向该组播接收单元200发送;
该组播接收单元200用于与组播发送单元100进行会话协商并建立会话,接收组播发送单元100组播发送的报文,以及根据组播会话协商的结果,对已接收到的、符合预设的确认条件的报文,向组播发送单元100发送确认标识。
可以看出,上述分布式节点组播组件10能够实现发送节点对于组播报文的缓冲和重发,保证了组播的可靠性。
具体的,请参见图7,显示了组播发送单元100的一个实施例,包括:
一组播组管理模块101,用于根据应用协议的指令创建、更新和删除组播组。一般情况下,应用协议需要向多个邻居发送报文时,就向发送节点的组播组管理模块101申请创建组播组,由该组播组管理模块101执行具体的创建操作,包括申请资源,下发驱动,添加组播组成员等;当组播组成员发生变化,比如删除/添加某个或某些成员时,还需要进行相应的更新操作;当应用协议报文发送完成时,触发组播组管理模块101删除相应的组播组。
一会话管理模块102,与组播组管理模块101连接,用于根据应用协议的指令,与组播组成员建立直接的联系,并进行会话协商。该会话协商的具体内容可根据实际需要确定,但至少需要包括以下内容:
(1)配置组播报文序号编码规则;
(2)配置发送节点与各接收节点协商配置确认条件,该确认条件为下述情况的任意组合:累计发送/接收到预设数目的连续报文;累计发送/接收连续报文达到预设时间;例如:
当累计接收到X个报文时发送ACK报文;
当累计接收报文达Y时间时发送ACK报文,即距前一次发送ACK报文达Y时间时;
或者,当接收到一些优先级较高的报文时,即时发送ACK报文。
以及,发送/接收的报文超过预设的优先级;
这样,通过定时和批量的方式回复ACK,减少ACK引起的发送、接收带宽开销,既避免了ACK报文过多,也不至于长期没有ACK确认;而对优先级较高报文的即时回复,能够保证对紧急报文的实时处理。
(3)配置携带接收节点标识以及报文序号的确认标识格式,这样,才能够保证发送节点能够识别所确认的报文并对未确认的报文执行重新发送。
此外,会话管理模块102还用于封装应用协议下发的会话报文。
一第一报文收发模块103,与会话管理模块102和组播组管理模块101连接,用于向组播组成员以组播的形式发送报文,特别是,该报文收发模块103是通过硬件媒体直接发送报文,以充分利用硬件能力,提高发送效率,达到高速通信的目的。该报文收发模块103还用于接收组播组成员的确认标识。
一第一缓冲模块104,与第一报文收发模块103连接,用于对所发送的报文进行缓冲;
一缓冲监控模块105,监控第一缓冲模块104,并对于符合预设的确认条件但超时未获一组播接收单元200确认标识的报文,相应触发重传模块106;
一重传模块106,与第一缓冲模块104和第一报文收发模块103连接,用于根据缓冲监控模块105的触发,调用所缓冲的相应报文并通过第一报文收发模块103重新向该组播组成员发送。
可以看出,分布式***节点间的组播发送单元100通过本地缓冲,并对未确认的报文执行重新发送,能够保证可靠完整的发送组播报文,因此不需要在本地进行发送情况的检测,如果发送失败,即使设置了相应的失败提示信息,组播发送单元100也无需进行任何处理,避免了因为额外的检测控制对处理资源的占用。
从上述描述可以看出,本发明实施例的一个改进之处在于由发送节点进行报文缓冲,该缓冲的报文用于重传以及进行ACK确认。但是,大量的已发送报文长期保留在缓存中显然降低了资源的利用率。作为改进的方案,为了避免缓冲报文过多对于发送节点的资源占用,该组播发送单元100还包括:
一缓冲清空模块107,与第一报文收发模块103和第一缓冲模块104连接,用于根据组播组全部接收节点上组播接收单元200的确认标识,相应删除所缓冲的报文。即当针对某一个组播报文,收到了组播组中全部成员的ACK反馈,就可以将其从缓冲中删除。
相应的,本发明还提供了组播接收单元200的具体实施例,参见图8,包括:
一会话协商模块201,用于与发送节点进行会话协商,建立与发送节点的会话链接;同样的,该会话协商的具体内容可根据实际需要确定,但至少需要协商组播报文序号编码规则、确认条件以及携带接收节点标识和报文序号的确认标识格式,以保证发送节点识别已被正确接收的报文。
一第二报文收发模块202,用于接收发送节点组播发送的报文,并通过中断直接发送给报文处理模块203,避免了任务切换引起的效率问题;
一报文处理模块203,与会话协商模块201和第二报文收发模块202连接,用于接收第二报文收发模块201发送的组播报文,根据会话协商结果,对已接收到的、符合预设的确认条件的报文相应触发确认标识发送模块204;;
一确认标识发送模块204,与所述第二报文收发模块202连接,用于根据报文处理模块203的触发,通过第二报文收发模块202向组播发送单元100发送相应的确认标识加以确认。
较佳的,组播接收单元200的报文处理模块203与上层应用协议连接,用于将接收到的、未发生缺失的报文,以队列方式直接发送给应用协议进行处理。从而,取代现有技术中的缓冲回调方式,通过队列顺序提交,避免了报文分发过程被打断和延误,提高了处理效率。
上述实施例的分布式节点组播组件提供了接收节点的确认机制。较佳的,本发明所提供的分布式节点组播组件还提供有接收节点提示机制,请参见图9。其中,组播接收单元200还包括:
一重传请求模块205,用于根据所述报文处理模块203的触发,通过第二报文收发模块202向组播发送单元发送重传请求;其中,所述报文处理模块203根据会话协商结果对所接收到报文的缺失情况加以识别,并在发生报文缺失的情况下相应触发重传请求模块205;
具体的,报文处理模块203对于缺失报文的识别方式可以根据预先的协商确定,举例来说,如果协商的结果为发送连续序号的报文,则当接收节点收到的报文序号大于期待的报文序号时,就可以识别具有所期待序号的报文缺失,进而发出重传请求。同时,该重传请求的格式也由协商确定。
同时,组播发送单元100中,重传模块106还接受第一报文收发模块103的触发,用于根据任一组播接收单元200的重传请求,调用所缓冲的相应报文并通过第一报文收发模块103重新向该组播接收单元200发送。
通过上述完成提示功能的组播接收单元200和组播发送单元100,可以看出,其在发现缺失报文的时候要求重传,保证了组播的可靠性和及时性
在上述缺失提示机制中,为了保证组播报文处理的顺序性,可以对缺失报文的相应部分进行缓冲,即组播接收单元200还包括第二缓冲模块206,与报文处理模块203连接,用于对已接收到的、所缺失报文之后的组播报文进行缓冲,并由报文处理模块203调用,与重新发送的所缺失报文按照组播会话协商的结果组合,以便后续顺序处理。
本发明的实施例还提供了一种分布式***1,如图10所示,包括分布式应用协议层20、分布式节点层30以及硬件转发层40。
该硬件转发层40用于传输组播报文;
该分布式节点层30包括多个分布式连接的节点31;
该分布式应用协议层20包括与分布式节点层30中各节点31一一对应连接的应用协议21,用于指令创建组播组和处理组播报文;
其中,当某一应用协议21指令一节点31创建组播组时,该节点31就成为发送节点,而组播组的其他成员就成为接收节点;
还包括上述的分布式节点组播组件10,其中,该分布式节点组播***10组播发送单元100设置在发送节点上,该组播接收单元200设置在接收节点上。
本领域普通技术人员可以理解,由于发送节点和接收节点是根据实际情况不断转变的,因此在实际应用中,每一个节点上都设有组播发送单元100和组播接收单元200,并根据所在节点的当前角色相应启动。
最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围。