一种移动自组织网络上语音通信方法

文档序号:7592994阅读:178来源:国知局
专利名称:一种移动自组织网络上语音通信方法
技术领域
本发明属于通信网络应用技术领域,特别是一种移动自组织网络上语音通信实现方法。
背景技术
移动自组织网络(Mobile Ad Hoc Network-MANET)是一种具有高度动态拓扑结构、结点任意移动的、点对点的自创建、自组织、自管理的网络,它使得节点之间可以自由地进行通讯而无需经过基站、访问点等基础设施。文献[1]Ramanathan R,Redi J,“A Brief Overview of mobile Ad hoc NetworksChallenges andDirections”,IEEE Communications Magazine,50thAnniversary CommemorativeIssue[C],2002。在MANET内,通信节点的地址采用自动配置的技术,生成的地址经过重复地址检测的过程确认其在所属Ad Hoc网络内唯一后才被节点所使用。然而由于节点和网络的移动性,在MANET网络中经常会遇到地址冲突的问题,从而使节点的IP(Internet Protocol)地址发生变化。例如,移动节点A移动出了MANET的传输范围或者是此节点由于其它原因短暂地失去了与MANET网络内其他节点之间的联系。在此期间,节点B加入MANET组,它选择了与节点A同样的IP地址,并且经过重复地址检测没有发现地址冲突(因为节点A失去了联系),所以它就声明自己具有和节点A同样的IP地址。然而一段时间后,当节点A移动回到了MANET网络或者是排除了故障恢复和组内其它节点的联系时,节点A和节点B就产生了地址重复,它们当中就必须有一个改变自己的IP地址。又比如,两个原先独立的MANET网络由于移动汇聚成为一个MANET网络。由于原先两个网络是相互分离的,它们之间可能存在某些重复的地址。这样当两个网络融合后,就会出现地址冲突的问题,也就使得某些节点必须改变自己的IP地址。然而,目前所使用的语音通信VoIP(Voice overInternet Protocol)应用程序都是基于固定不变的源端和目的端IP地址,没有考虑到MANET上这种地址变更的情况,所以如果把它们应用于移动自组织网络中,当通信一方的地址发生变化以后,语音通信就会被错误地保持,节点将会和并非自己想要通信的节点进行语音通信,由此会产生很多的安全性问题。例如在MANET中,节点A和B正在进行语音通信,此时由于与另一个MANET网络进行了合并,节点A和节点C发生了地址冲突,导致节点A的IP地址由x变成了y。然而节点B并不知道这种变化,从B发给A的语音包的目标地址仍然使用x,结果导致节点B错误地与节点C进行了通信。此外,如前所述,由于在移动自组织网络中通信设备的IP地址是不固定的,所以不能像在固定网络上实现的VoIP应用那样采用每个节点的IP地址来发起语音呼叫。取而代之的是给每个设备终端都设定一个通信ID,这个通信ID唯一标志一个节点,节点之间通过这个通信ID来发起语音呼叫。在每次语音呼叫连接建立之前,源节点都需要访问本节点的名字服务模块,名字服务模块负责维护一个本地的数据库,数据库中包含了一系列的记录,每一条记录都含有一个通信ID和IP地址的对应。这些记录是从本节点以前的通话历史中保存下来的。然而,本地数据库中记录的IP地址都只是一些历史信息,它并不一定能够确实反映目标节点当前使用的地址,因为有可能在上一次通话结束之后,目标节点的IP地址已经发生了变化,所以如果直接利用此地址建立语音呼叫连接,很可能会错误地同其它节点建立呼叫关系,这显然违背了我们VoIP应用程序的可靠性要求,因此我们必须在通信连接建立之前对此地址的有效性进行验证。
此外,为了便于在通信节点之间实现相互认证,提高可靠性。规定每个节点都产生本节点的公钥和私钥信息,并且公开本节点的公钥。任何两个需要相互通信的节点都必须知道对方的公钥。
关于在MANET网络上如何获得真实合法的公钥问题,可以采用通信双方预共享的方式,也可以采用类似于文献[2]Asad Amir Pirzada,Chris McDonald,“Kerberos Assisted Authentication in Mobile Ad-hoc Network”,In 27th AustralasianComputer Science Conference,Dunedin,New Zealand,January 18-22,2004提到的方法,只不过在文献[2]提到的环境中,没有考虑地址变化的情况,公钥信息是和节点的IP地址绑定的,而我们的实现方案中公钥是和节点恒定不变的通信ID绑定的。

发明内容
本发明的目的在于提供一种移动自组织网络上语音通信(VoIP)的实现方法,它能够解决移动自组织网络上的地址变更问题,消除其对于VoIP应用的影响。
本发明属于通信网络应用领域,提出了一种适用于MANET的VoIP应用。它通过连接建立前增加握手过程,在通信双方之间共享随机数,通话过程中传送加密的地址通知消息等新型机制来保证在移动自组织网络上语音通信的可靠性,消除了MANET地址变更对VoIP的不良影响。
本发明建立在移动自组织网络(MANET)基础之上,MANET是一种由笔记本电脑、个人数字助理(PDA)、车载台等移动终端所组成的具有高度动态拓扑结构、节点任意移动、点对点自创建、自组织、自管理的网络。在这个网络中,每个节点都带有无线网卡,节点之间通过无线技术互联,并且以多跳的方式进行相互通信。此外,每个节点还配有声卡设备,可以对语音信号进行编解码处理等相应工作。
为了支持语音通信,节点首先要进行声卡和网卡的初始化工作,然后通过驱动网卡发送控制数据包进行连接建立前的握手过程。连接建立之后,通信节点驱动声卡对语音信号进行采集、编解码,以此来接收和播放声音,并且将编码压缩后的语音数据包通过网卡发送出去实现节点之间的语音通信。
本发明是建立在计算机网络通信的基础上,通过计算机进行联络,来实现节点的语音通信。
本发明是在移动自组织网络上语音通信的方法,每一个通信节点都维护一个本地数据库,数据库中保存着本节点的历史通话记录,每一条记录都是<通信ID,IP地址>的二元组,通话时,源节点首先访问本地数据库查找相应的记录,如果找到了相关记录就向该记录中的地址发送单播查询消息以确认地址的有效性,如果源节点在规定时间内收到回复消息说明该地址真实有效,则根据此地址建立通信连接,否则,发送广播查询消息来得到目标节点的当前地址;在单播和广播查询消息中都包含了源节点为本次语音通话产生的随机数,该随机数用语音通信目标节点的公钥进行了加密,所以只有目标节点才能正确解密随机数,源节点可以通过此随机数辨别回复消息的真实性,同时经过在节点之间发送查询和回复消息这么一个握手过程,在本次语音通信的源节点和目标节点之间就共享了一个随机数,这个随机数可以用作通信过程中的加密密钥和认证依据;在通信连接建立之后的通话过程中,要求通信双方周期性地互发地址通知消息,地址通知消息使用握手阶段协商好的随机数作为密钥进行了加密,它包含了序列号字段可以对抗重放攻击和乱序到达,它还包含了随机数字段可以使节点认证消息的真伪,当一个节点的地址发生了变化,它就通过地址通知消息及时地将变化后的地址发给对方,另一方解密消息后就可以取消原先在旧地址上建立的连接转而在新地址上建立语音通信连接;此外,规定当一方在规定的时间内没有收到另一方发来的新的正确的地址通知消息时会释放当前的语音通信连接,这样就保证了即使通信双方的地址同时发生了改变,通信连接也会被及时释放,从而避免了语音通信长时间地被错误保持,提高了语音通信的可靠性。
本发明的实现依赖于以下两个前提条件首先,因为在移动自组织网络中通信设备终端的IP地址是不固定的,所以不能采用IP地址来发起呼叫。取而代之的是给每个通信终端都设定一个通信ID,并利用这个通信ID来发起语音呼叫。通信ID是全局唯一(即对于不同的MANET网络内的节点也不重复),并且是恒定不变的。它能唯一地标志一个节点,并且必须方便用户的记忆。通信ID由一个集中的机构来发放。
其次,为了便于在节点之间实现相互认证,提高可靠性。规定每个节点都产生本节点的公钥和私钥信息,并且公开本节点的公钥。任何两个需要相互通信的节点都必须知道对方的公钥。
本发明是一种移动自组织网络上的语音通信系统,其实现方法如下在MANET中,当一个节点想要对另一个节点发起呼叫时,它首先需要产生一个32位的随机数,并用目标节点的公钥进行加密。随机数的产生为以后通信过程中的认证和加密提供了保证。接着,源节点访问本地的名字服务模块,得到目标节点的IP地址。名字服务模块负责维护一个本地的数据库,数据库中包含了一系列的记录,每一条记录都含有一个通信ID和IP地址的对应。这些记录都是从本节点以前的通话历史中保存下来的。然而,这些历史记录并不一定能够确实反映目标节点当前使用的地址,因为有可能在上一次通话结束之后,目标节点的IP地址已经发生了变化。所以不能直接使用从名字服务模块返回的地址来建立语音通信连接,而是要在尝试建立连接之前通过一条单播查询消息对名字服务模块返回地址的准确性加以验证。如果本地数据库中没有关于目标节点的地址记录,名字服务模块返回空,那么就必须发送广播查询消息来得到目标节点的IP地址了。
语音呼叫源节点向名字服务模块返回的地址发送一个单播查询消息。格式如下。
0 31631++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 类型 + 保留 +序列号+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 随机数(加密)+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++ 源地址 ++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++ 目的地址++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++ 源端通信ID ++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++ 目的端通信ID++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++其中3位的类型字段表明消息的类型,单播查询消息的类型值为0。16位的序列号标记此次查询,因为一个节点可能发出过多个查询消息,所以需要一个字段来指示本次查询,源节点每发出一个查询请求后就把该字段的值递增1。随机数字段放置源节点为本次通话产生的加密“随机数”。源地址和目的地址字段分别标记查询消息源IP地址和目标IP地址。(IPv4地址32位,IPv6地址128位)两个通信ID字段分别记录源节点和目的节点的通信ID。
当此单播查询消息到达目的地址后,该节点检查单播查询消息中的“目的端通信ID”字段,并把它与本节点的通信ID进行对照,然后向通信源节点发送回复消息。格式如下。
0 3 16 31++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 类 型+保留 +序列号 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 随机数(加密)+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++ 源地址 ++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++ 目的地址 ++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++其中3位的类型字段表明消息的类型,单播查询回复消息的类型值为1。序列号标记查询,它是从相应的查询消息中拷贝过来的,表示回答了哪个查询请求。源地址和目的地址字段分别标记此回复消息的源IP地址和目标IP地址。如果本节点通信ID和单播查询消息中“目的端通信ID”字段的值相匹配,则使用本节点的私钥解密单播查询消息中的加密“随机数”得到随机数的明文,然后利用单播查询消息中指明的“源端通信ID”所对应节点的公钥值加密该随机数的明文,并把结果放在回复消息的加密“随机数”字段。反之如果本节点通信ID和单播查询消息中“目的端通信ID”字段的值不匹配,则简单地用全“0”填充回复消息中的加密“随机数”字段。
如果源节点在规定的时间内收到了回复消息(单播查询回复消息的类型值为1),它用自己的私钥解密回复消息中的加密“随机数”得到随机数的明文,如果这个明文和源节点为本次通话产生的随机数相同,则完成了对目的节点的认证,握手结束。此时就可以用单播查询消息中指明的目的地址建立呼叫连接了。如果源节点在规定的时间内没有收到回复消息,或者是用私钥解密回复消息中的加密“随机数”字段得到的随机数明文与源节点为本次通话产生的随机数不同,则证明当初从本地数据库中得到的目标节点的地址信息已经失效了,语音通信的源节点就必须通过发送广播查询消息来得到相应的地址信息了。
广播查询消息的格式与单播查询消息完全相同。只是在广播查询消息中目的地址字段填充的是广播地址,它发送给MANET中的每一个节点。此外对于广播查询消息,其类型值为2。(单播查询消息的类型值为0)MANET网络中的每一个节点接收到广播查询消息后,检查自己的通信ID是否和此查询消息中“目的端通信ID”字段的值相同,如果相同则表明自己就是语音呼叫的目标节点,它就必须发送一条回复消息告知自己当前使用的IP地址。
广播查询回复消息的格式与单播查询回复消息完全相同。其中3位的类型字段表明消息的类型,广播查询回复消息的类型值为3。序列号标记查询,它是从相应的广播查询消息中拷贝过来的,表示回答了哪个查询请求。源地址和目的地址字段分别标记此回复消息的源IP地址和目标IP地址。最后使用本节点的私钥解密广播查询消息中的加密“随机数”得到随机数的明文,然后利用广播查询消息中指明的“源端通信ID”所对应节点的公钥值加密随机数的明文,并把加密后的密文放在回复消息的加密“随机数”字段。
查询节点接收到回复消息后,用自己的私钥解密回复消息的加密“随机数”,得到随机数的明文,然后同自己原先产生的随机数进行比较,如果两者相同,则说明此回复消息确实是从语音通信的目标节点发来的,因为只有这个节点才能正确解密查询消息中的加密“随机数”。这样,语音通信的源节点就得到了目标节点当前的IP地址(在回复消息的源地址字段指明),它就用这个地址信息来更新本地数据库,然后在此地址上建立呼叫连接。如果随机数比较的结果不相同,则丢弃此回复消息。如果查询节点没有在规定的时间内接收到正确的回复消息,它就认为语音呼叫的目标节点当前不在线,语音通话过程结束。
当通信双方得到彼此的IP地址建立呼叫连接后,就进入了语音通话状态。在通话过程中,通信双方的地址仍然有可能因为种种原因而改变。所以必须采用某种机制使得节点在地址变更的时候,语音通信不会被错误地保持。我们要求通信双方在收发语音数据包的同时,还周期性地发送指示当前地址信息的控制数据包。格式如下。
0 3 16 31++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 类型 + 保留 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 序列号(加密)+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++ 当前地址(加密) ++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 随机数(加密)++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++其中3位的类型字段表明消息的类型,地址通知消息的类型值为4。32位的序列号用来抵抗重放攻击和乱序到达。当前地址字段用来指明节点当前所使用的IPv4/IPv6地址。随机数字段记录在通信连接建立之前的握手过程中产生的随机数,它起到了一个认证的作用。后3个字段的内容在实际传输过程中是以密文的形式传送的。
当语音通信的一方收到另一方传来的密文形式的地址通知消息后,它首先解密此消息,检查随机数字段是不是握手时产生的随机数。如果不是,则丢弃此消息;如果是,说明此消息确实是从通信的另一方传来的,因为只有参与本次语音通信的双方才知道此随机数。接下来,检查消息序列号以判断此消息是不是新的,如果不是,丢弃此消息;如果是,则检查“当前地址”字段的值是不是正在使用的IP地址,如果不是,说明通信另一方的地址发生了改变,因此将释放原来在旧地址上建立的通信连接,转而在改变后的IP地址上建立新的语音通信连接。
我们规定通信双方周期性地发送上述地址通知消息,每发送一个消息就把序列号加1。当通信终端在规定的时间内没有收到任何从另一方发来的新的正确的地址通知消息时,它就会释放现有的语音通信连接。
综上所述,本发明移动自组织网络上语音通信(VoIP)的实现方法的总体步骤如下步骤S1语音通信的源节点产生一个32位的随机数,并使用本次语音通信目标节点的公钥进行加密;步骤S2源节点访问名字服务模块,名字服务模块查询本地数据库,如果找到相应记录,就返回目标节点IP地址,进入S3,如果没有找到相应记录,进入S9;步骤S3源节点向名字服务模块返回的IP地址发送一个单播查询消息,以确认此地址的有效性,同时启动定时器;单播查询消息中包含了S1产生的加密随机数;步骤S4单播查询到达目的地址后,相应节点对照本节点的通信ID(Identifier)和查询消息中的“目的端通信ID”字段,如果相同,进入S5;否则,进入S6;步骤S5该节点用自己的私钥解密单播查询消息中的加密随机数得到随机数的明文,然后利用单播查询消息中指明的“源端通信ID”所对应节点的公钥值加密该随机数的明文,并把结果放在单播查询回复消息中,进入S7;步骤S6该节点用全“0”填充单播查询回复消息中加密的“随机数”字段;步骤S7该节点向语音呼叫的源节点发送一个单播查询回复消息;步骤S8如果源节点在规定时间内收到了单播查询回复消息,它用本节点的私钥解密回复消息中的加密随机数,并同在S1产生的随机数进行比较,如果比较的结果相同,则把名字服务模块返回的IP地址作为语音呼叫的目的地址,转入S13;如果比较的结果不同,丢弃此回复消息,进入S9;如果源节点在规定时间内没有收到单播查询回复消息,进入S9;步骤S9源节点向移动自组织网络(Mobile AdHoc Network-MANET)内发送一个广播查询消息,同时启动定时器,广播查询消息中包含了在S1产生的加密随机数;步骤S10MANET中的每一个节点收到广播查询消息后,检查自己的通信ID,如果自己正是呼叫的目的节点,则用自己的私钥解密广播查询消息中的加密随机数得到随机数的明文,然后利用广播查询消息中指明的“源端通信ID”所对应节点的公钥值加密该随机数的明文,并把结果放在广播查询回复消息中,然后向语音呼叫的源节点发送广播查询回复消息;步骤S11源节点侦听端口,如果在定时器超时前收到了广播查询回复消息,它用本节点的私钥解密回复消息中的加密随机数,并同在S1产生的随机数进行比较,如果比较的结果相同,则用回复消息的源地址更新本地数据库,并把此地址作为语音呼叫的目的地址,转入S13;如果比较的结果不同,丢弃此回复消息,继续侦听;如果定时器超时,进入S12;步骤S12源节点认为本次语音呼叫的目标节点当前不在线,通话过程以“不在线”错误类型结束;步骤S13源节点在S8或者S11得到目标节点当前使用的准确IP地址后,在此地址上和目标节点建立语音通信连接;步骤S14通信连接建立进入通话状态后,每一方需要周期性地向另一方发送加密的地址通知消息,以告知本方当前使用的地址信息;步骤S15当一方收到另一方传来的地址通知消息后,它首先解密此消息,检查随机数字段是不是连接建立时共享的随机数;如果不是,则丢弃此消息,如果是,说明此消息确实是从通信的另一方传来的;然后检查消息序列号以判断此消息是不是新的,如果不是,丢弃此消息,如果是,则检查“当前地址”字段的值是不是正在使用的目的IP地址,如果不是,说明通信另一方的地址发生了改变,因此将释放原来在旧地址上建立的通信连接,转而在改变后的IP地址上建立新的语音通信连接;步骤S16当通信一方在规定的时间内(一般为3-10个地址通知消息的发送周期)没有收到任何从另一方发来的新的正确的地址通知消息时,它就会释放现有的语音通信连接。
实现细节1.在握手阶段采用非对称加密算法RSA,同时为了减少大素数的生成时间只采用8位长度的密钥。
2.当一个节点发出单播或者多播查询消息,如果在2秒钟之内没有收到应答,就启动相应的超时操作。这个时间值的设定和网络规模、节点处理速度等因素密切相关。
一般情况可按如下公式计算WAIT_TIME=4*NODE_PROCESS_TIME*NET_DIAMETERWAIT_TIME等待时间。
NODE_PROCESS_TIME节点处理时间,是节点处理报文和转发报文的时间总和,一般为40ms。
NET_DIAMETERMANET中两个结点间的最大跳数,与网络规模有关。
3.在通信过程中,VoIP通信节点每隔5秒钟就向对方发送一个地址通知消息。从加解密效率因素考虑,采用对称加密算法RC4来加密地址通知消息,而RC4算法所使用的密钥就是在握手阶段产生的随机数。
4.规定当通信的一方在30秒的时间内没有收到从另一方发来的新的正确的地址通知消息时,它就切断当前的语音通信连接。
比较本发明与传统的VoIP处理机制,我们显然可以看出本发明具有以下优点1.在语音通信连接建立之前,通过一个握手的过程在通信双方之间共享了一个随机数。因为随机数全部是以密文的方式发送的,所以MANET内的其它节点都不知道此随机数,这个随机数就可以作为语音通信的双方相互认证的依据。
2.我们并没有直接使用从本地数据库中返回的IP地址来建立通信连接,而是试图在使用它之前通过一个单播查询确认它的有效性,以此来提高语音通信的可靠性。
3.利用本地数据库中保存的地址信息发送单播查询来代替每次通过广播方式获得目标节点的IP地址,可以减少移动自组网的广播风暴,节省带宽资源。
4.在通信过程中,当一个节点的地址发生了改变,它会及时地通过地址通知消息将改变后的新地址告诉通信的另一方。另一方解密此地址通知消息后,就可以取消原先在旧地址上建立的通信连接,转而在新地址上建立新的语音通信连接,从而使得语音通信过程能够自动切换到新地址上。因为地址通知消息中包含了随机数字段,而这个随机数又仅仅为语音通信的双方所共享,所以当一方解密得到地址通知消息的明文后,如果看到了一个正确的随机数的值,就可以断定此地址通知消息确实是从通信的另一方发来的,地址通知消息中的随机数字段起到了一个认证的作用。而在地址通知消息中增加了序列号的字段后,既可以抵抗重放攻击,又可以解决在分组网络中地址通知消息乱序到达的问题,即如果本次解密后地址通知消息的序列号值小于或者等于前一次正确收到的地址通知消息的序列号值,则证明此地址通知消息是一个旧消息,可以简单地丢弃。
5.在通信过程中,如果通信双方的地址依次发生改变一次或者多次,语音通信连接依照上述的方法仍然可以正确地保持。
6.在通信过程中,如果在某一个时刻通信双方的地址同时发生了改变,虽然两方发送的地址通知消息都无法到达对方,但因为我们规定当通信一方在规定的时间(30秒)内没有收到任何从另一方发来的新的正确的地址通知消息时,它就会释放现有的语音通信连接,所以经过一段时间后,每一方也会因为收不到来自对方的正确的地址通知消息而释放连接,从而使得语音通信不会被长时间地错误保持,提高了可靠性。


图1是语音呼叫源节点建立呼叫连接前的处理流程图。
图2是通话过程中通信节点处理收到的地址通知消息的流程图。
具体实施例方式
图1中各事件的处理步骤如下步骤S1.1语音呼叫的源节点产生一个32位的随机数,并使用本次语音通信目标节点的公钥进行加密;步骤S1.2源节点访问名字服务模块,名字服务模块查询本地数据库;步骤S1.3如果在本地数据库中找到相应记录,就返回目标节点IP地址,进入S1.4,如果没有找到相应记录,进入S1.10;步骤S1.4源节点向名字服务模块返回的IP地址发送一个单播查询消息,以确认此地址的有效性,同时启动定时器,单播查询消息中包含了S1.1产生的加密随机数;步骤S1.5如果源节点在规定时间内收到了回复消息,进入S1.6;否则,进入S1.10;步骤S1.6源节点用本节点的私钥解密回复消息中的加密随机数;步骤S1.7将解密后的随机数与本节点在S1.1产生的随机数进行比较,如果比较的结果相同,进入S1.8;如果比较的结果不同,进入S1.9;步骤S1.8把名字服务模块返回的IP地址作为语音呼叫的目标地址;进入S1.18;步骤S1.9丢弃回复消息;步骤S1.10源节点向MANET网络内发送一个广播查询消息,同时启动定时器,广播查询消息中包含了在S1.1产生的加密随机数;步骤S1.11源节点侦听端口,如果在定时器超时前有广播查询回复消息到来,进入S1.13;如果定时器超时,进入S1.12;步骤S1.12目标节点不在线,语音通话过程结束;步骤S1.13源节点用本节点的私钥解密回复消息中的加密随机数;步骤S1.14将解密后的随机数与本节点在S1.1产生的随机数进行比较,如果比较的结果相同,进入S1.16;如果比较的结果不同,进入S1.15;步骤S1.15丢弃回复消息,重新回到S1.11;步骤S1.16利用回复消息的源IP地址更新本地数据库;步骤S1.17把该回复消息的源IP地址作为语音呼叫的目标地址;步骤S1.18根据S1.8或者S1.17得到的目标地址建立语音通话连接。
图2中各事件处理步骤如下步骤S2.1通信节点收到地址通知消息;步骤S2.2通信节点用连接建立阶段协商好的随机数作为密钥解密此地址通知消息;步骤S2.3检查随机数字段的值,如果与在连接建立阶段通信双方共享的随机数相同,进入S2.4,否则,进入S2.7;步骤S2.4检查序列号字段,如果是新消息(该值大于前一次正确收到的地址通知消息的序列号),则将该序列号值记录下来,以替代前一次正确收到的地址通知消息的序列号值,进入S2.5,否则,进入S2.7;
步骤S2.5检查当前地址字段,如果发现通信另一方的IP地址发生了变化,进入S2.6,否则,进入S2.7;步骤S2.6切断在旧地址上的语音通信连接,转而在改变后的IP地址上建立新的语音通信连接;步骤S2.7丢弃消息。
权利要求
1.一种在移动自组织网络中语音通信方法,其特征在于,每个节点都维护本节点的历史通话记录,发起语音呼叫时,源节点首先搜寻历史记录,如果找到目标节点的相应地址,就向此地址发送单播查询消息以确认其有效性,如果地址有效,就在此地址上建立通信连接,如果地址无效或者历史记录中没有找到相应地址,就通过广播查询消息得到目标节点当前真实有效的IP地址,从而可靠地建立通信连接;在语音通话过程中,通信双发周期性地互发加密过的地址通知消息,当一方的IP地址发生改变后,另一方通过解密地址通知消息能够及时地做出调整,从而将语音通信连接自动切换到改变后的新地址上,当通信双方的地址同时发生改变时,通信节点也能够感知这种情况,并及时地释放连接,保证语音通话的可靠性。
2.根据权利要求1所述的在移动自组织网络上语音通信的方法,其特征是每一个通信节点都维护一个本地数据库,数据库中保存着本节点的历史通话记录,每一条记录都是<通信ID,IP地址>的二元组,通话时,源节点首先访问本地数据库查找相应的记录,如果找到了相关记录就向该记录中的地址发送单播查询消息以确认地址的有效性,如果源节点在规定时间内收到回复消息说明该地址真实有效,则根据此地址建立通信连接,否则,发送广播查询消息来得到目标节点的当前地址;在单播和广播查询消息中都包含了源节点为本次语音通话产生的随机数,该随机数用语音通信目标节点的公钥进行了加密,所以只有目标节点才能正确解密随机数,源节点可以通过此随机数辨别回复消息的真实性,同时经过在节点之间发送查询和回复消息这么一个握手过程,在本次语音通信的源节点和目标节点之间就共享了一个随机数,这个随机数可以用作通信过程中的加密密钥和认证依据;在通信连接建立之后的通话过程中,要求通信双方周期性地互发地址通知消息,地址通知消息使用握手阶段协商好的随机数作为密钥进行了加密,它包含了序列号字段可以对抗重放攻击和乱序到达,它还包含了随机数字段可以使节点认证消息的真伪,当一个节点的地址发生了变化,它就通过地址通知消息及时地将变化后的地址发给对方,另一方解密消息后就可以取消原先在旧地址上建立的连接转而在新地址上建立语音通信连接;此外,规定当一方在规定的时间内没有收到另一方发来的新的正确的地址通知消息时会释放当前的语音通信连接,这样就保证了即使通信双方的地址同时发生了改变,通信连接也会被及时释放,从而避免了语音通信长时间地被错误保持,提高了语音通信的可靠性。
3.根据权利要求1所述的移动自组织网络上语音通信的实现方法,其具体步骤如下步骤S1语音通信的源节点产生一个32位的随机数,并使用本次语音通信目标节点的公钥进行加密;步骤S2源节点访问名字服务模块,名字服务模块查询本地数据库,如果找到相应记录,就返回目标节点IP地址,进入S3,如果没有找到相应记录,进入S9;步骤S3源节点向名字服务模块返回的IP地址发送一个单播查询消息,以确认此地址的有效性,同时启动定时器;单播查询消息中包含了S1产生的加密随机数;步骤S4单播查询到达目的地址后,相应节点对照本节点的通信ID和查询消息中的“目的端通信ID”字段,如果相同,进入S5;否则,进入S6;步骤S5该节点用自己的私钥解密单播查询消息中的加密随机数得到随机数的明文,然后利用单播查询消息中指明的“源端通信ID”所对应节点的公钥值加密该随机数的明文,并把结果放在单播查询回复消息中,进入S7;步骤S6该节点用全“0”填充单播查询回复消息中加密的“随机数”字段;步骤S7该节点向语音呼叫的源节点发送一个单播查询回复消息;步骤S8如果源节点在规定时间内收到了单播查询回复消息,它用本节点的私钥解密回复消息中的加密随机数,并同在S1产生的随机数进行比较,如果比较的结果相同,则把名字服务模块返回的IP地址作为语音呼叫的目的地址,转入S13;如果比较的结果不同,丢弃此回复消息,进入S9;如果源节点在规定时间内没有收到单播查询回复消息,进入S9;步骤S9源节点向移动自组织网络(MANET)内发送一个广播查询消息,同时启动定时器,广播查询消息中包含了在S1产生的加密随机数;步骤S10MANET中的每一个节点收到广播查询消息后,检查自己的通信ID,如果自己正是呼叫的目的节点,则用自己的私钥解密广播查询消息中的加密随机数得到随机数的明文,然后利用广播查询消息中指明的“源端通信ID”所对应节点的公钥值加密该随机数的明文,并把结果放在广播查询回复消息中,然后向语音呼叫的源节点发送广播查询回复消息;步骤S11源节点侦听端口,如果在定时器超时前收到了广播查询回复消息,它用本节点的私钥解密回复消息中的加密随机数,并同在S1产生的随机数进行比较,如果比较的结果相同,则用回复消息的源地址更新本地数据库,并把此地址作为语音呼叫的目的地址,转入S13;如果比较的结果不同,丢弃此回复消息,继续侦听;如果定时器超时,进入S12;步骤S12源节点认为本次语音呼叫的目标节点当前不在线,通话过程以“不在线”错误类型结束;步骤S13源节点在S8或者S11得到目标节点当前使用的准确IP地址后,在此地址上和目标节点建立语音通信连接;步骤S14通信连接建立进入通话状态后,每一方需要周期性地向另一方发送加密的地址通知消息,以告知本方当前使用的地址信息;步骤S15当一方收到另一方传来的地址通知消息后,它首先解密此消息,检查随机数字段是不是连接建立时共享的随机数;如果不是,则丢弃此消息,如果是,说明此消息确实是从通信的另一方传来的;然后检查消息序列号以判断此消息是不是新的,如果不是,丢弃此消息,如果是,则检查“当前地址”字段的值是不是正在使用的目的IP地址,如果不是,说明通信另一方的地址发生了改变,因此将释放原来在旧地址上建立的通信连接,转而在改变后的IP地址上建立新的语音通信连接;步骤S16当通信一方在规定的时间内没有收到任何从另一方发来的新的正确的地址通知消息时,它就会释放现有的语音通信连接。
4.根据权利要求1所述的移动自组织网络上语音通信的实现方法,语音呼叫源节点建立呼叫连接前的具体步骤步骤S1.1语音呼叫的源节点产生一个32位的随机数,并使用本次语音通信目标节点的公钥进行加密;步骤S1.2源节点访问名字服务模块,名字服务模块查询本地数据库;步骤S1.3如果在本地数据库中找到相应记录,就返回目标节点IP地址,进入S1.4,如果没有找到相应记录,进入S1.10;步骤S1.4源节点向名字服务模块返回的IP地址发送一个单播查询消息,以确认此地址的有效性,同时启动定时器,单播查询消息中包含了S1.1产生的加密随机数;步骤S1.5如果源节点在规定时间内收到了回复消息,进入S1.6;否则,进入S1.10;步骤S1.6源节点用本节点的私钥解密回复消息中的加密随机数;步骤S1.7将解密后的随机数与本节点在S1.1产生的随机数进行比较,如果比较的结果相同,进入S1.8;如果比较的结果不同,进入S1.9;步骤S1.8把名字服务模块返回的IP地址作为语音呼叫的目标地址;进入S1.18;步骤S1.9丢弃回复消息;步骤S1.10源节点向MANET网络内发送一个广播查询消息,同时启动定时器,广播查询消息中包含了在S1.1产生的加密随机数;步骤S1.11源节点侦听端口,如果在定时器超时前有广播查询回复消息到来,进入S1.13;如果定时器超时,进入S1.12;步骤S1.12目标节点不在线,语音通话过程结束;步骤S1.13源节点用本节点的私钥解密回复消息中的加密随机数;步骤S1.14将解密后的随机数与本节点在S1.1产生的随机数进行比较,如果比较的结果相同,进入S1.16;如果比较的结果不同,进入S1.15;步骤S1.15丢弃回复消息,重新回到S1.11;步骤S1.16利用回复消息的源IP地址更新本地数据库;步骤S1.17把该回复消息的源IP地址作为语音呼叫的目标地址;步骤S1.18根据S1.8或者S1.17得到的目标地址建立语音通话连接。
5.据权利要求1所述的移动自组织网络上语音通信的实现方法,通话过程中通信节点处理收到的地址通知消息的具体步骤步骤S2.1通信节点收到地址通知消息;步骤S2.2通信节点用连接建立阶段协商好的随机数作为密钥解密此地址通知消息;步骤S2.3检查随机数字段的值,如果与在连接建立阶段通信双方共享的随机数相同,进入S2.4,否则,进入S2.7;步骤S2.4检查序列号字段,如果是新消息(该值大于前一次正确收到的地址通知消息的序列号),则将该序列号值记录下来,以替代前一次正确收到的地址通知消息的序列号值,进入S2.5,否则,进入S2.7;步骤S2.5检查当前地址字段,如果发现通信另一方的IP地址发生了变化,进入S2.6,否则,进入S2.7;步骤S2.6切断在旧地址上的语音通信连接,转而在改变后的IP地址上建立新的语音通信连接;步骤S2.7丢弃消息。
全文摘要
本发明属于通信网络应用技术领域,是移动自组织网络上语音通信的实现方法,在IP地址动态配置情况下,移动自组织网络的节点地址具有可变更性,本发明能够消除移动自组织网络上地址变更对语音通信的影响。方法的步骤包括在连接建立阶段,通过一个握手过程得到目标节点当前使用的真实IP地址,并在通信双方之间共享了一个随机数用于通信过程中的认证和加密。在完成连接建立进入通话状态后,每一方必须周期性地向另一方发送加密的地址通知消息,用来告知本方当前使用的IP地址,以此来保证能将本节点的地址变化情况及时地通知通信另一方,实现语音通信的自动切换,从而提高通信的可靠性。
文档编号H04L12/28GK1585329SQ200410046389
公开日2005年2月23日 申请日期2004年6月8日 优先权日2004年6月8日
发明者孙毅, 方更法, 石晶林 申请人:中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1