著录项信息
专利名称 | 一种移动自组织网络上语音通信方法 |
申请号 | CN200410046389.X | 申请日期 | 2004-06-08 |
法律状态 | 暂无 | 申报国家 | 暂无 |
公开/公告日 | 2005-02-23 | 公开/公告号 | CN1585329 |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | H04L9/20 | IPC分类号 | H;0;4;L;9;/;2;0;;;H;0;4;L;1;2;/;2;8查看分类表>
|
申请人 | 中国科学院计算技术研究所 | 申请人地址 |
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 上海斐讯数据通信技术有限公司 | 当前权利人 | 上海斐讯数据通信技术有限公司 |
发明人 | 孙毅;方更法;石晶林 |
代理机构 | 中科专利商标代理有限责任公司 | 代理人 | 周国城 |
摘要
本发明属于通信网络应用技术领域,是移动自组织网络上语音通信的实现方法,在IP地址动态配置情况下,移动自组织网络的节点地址具有可变更性,本发明能够消除移动自组织网络上地址变更对语音通信的影响。方法的步骤包括在连接建立阶段,通过一个握手过程得到目标节点当前使用的真实IP地址,并在通信双方之间共享了一个随机数用于通信过程中的认证和加密。在完成连接建立进入通话状态后,每一方必须周期性地向另一方发送加密的地址通知消息,用来告知本方当前使用的IP地址,以此来保证能将本节点的地址变化情况及时地通知通信另一方,实现语音通信的自动切换,从而提高通信的可靠性。
1.一种在移动自组织网络中语音通信方法,其特征在于,该方法包括 以下步骤:每个通信节点维护一个本地数据库,数据库中保存着本节点的 历史通话记录,每一条记录都是<通信ID,IP地址>的二元组;
在发起语音呼叫时,源节点首先访问本地数据库查找目标节点地址的 历史记录,如果找到了目标节点地址的历史记录,则向该记录中的目标节 点地址发送单播查询消息以确认地址的有效性,如果源节点在规定时间内 收到回复消息说明该地址真实有效,则根据此地址建立通信连接;否则, 发送广播查询消息来得到目标节点的当前地址;在上述单播和广播查询消 息中包含了源节点为本次语音通话产生的随机数,该随机数用目标节点的 公钥进行了加密,只有目标节点才能正确解密随机数,源节点通过此随机 数辨别回复消息的真实性,同时经过在节点之间发送查询和回复消息这么 一个握手过程,在本次语音通信的源节点和目标节点之间共享了一个随机 数,该随机数用于通信过程中的加密密钥和认证依据;
在通信连接建立后的通话过程中,通信双方周期性地互发地址通知消 息,地址通知消息使用握手阶段协商好的随机数作为密钥进行加密,包含 序列号字段和随机数字段,当一个节点的地址发生变化,节点就通过地址 通知消息及时地将变化后的地址发给对方,另一方解密消息后取消原先在 旧地址上建立的连接转而在新地址上建立语音通信连接;
此外,当一方在规定的时间内没有收到另一方发来的新的正确的地址 通知消息时将释放当前的语音通信连接,保证即使通信双方的地址同时发 生改变,通信连接也会被及时释放,避免语音通信长时间地被错误保持, 提高语音通信的可靠性。
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得到的目标地址建立语音通话连接。
3.据权利要求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:丢弃消息。
4.根据权利要求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产生的加密随机数;
步骤S10:MANET中的每一个节点收到广播查询消息后,检查自己 的通信ID,如果自己正是呼叫的目的节点,则用自己的私钥解密广播查询 消息中的加密随机数得到随机数的明文,然后利用广播查询消息中指明的 “源端通信ID”所对应节点的公钥值加密该随机数的明文,并把结果放在广 播查询回复消息中,然后向语音呼叫的源节点发送广播查询回复消息;
步骤S11:源节点侦听端口,如果在定时器超时前收到了广播查询回 复消息,它用本节点的私钥解密回复消息中的加密随机数,并同在S1产 生的随机数进行比较,如果比较的结果相同,则用回复消息的源地址更新 本地数据库,并把此地址作为语音呼叫的目的地址,转入S13;如果比较 的结果不同,丢弃此回复消息,继续侦听;如果定时器超时,进入S12;
步骤S12:源节点认为本次语音呼叫的目标节点当前不在线,通话过 程以“不在线”错误类型结束;
步骤S13:源节点在S8或者S11得到目标节点当前使用的准确IP地 址后,在此地址上和目标节点建立语音通信连接;
步骤S14:通信连接建立进入通话状态后,每一方需要周期性地向另 一方发送加密的地址通知消息,以告知本方当前使用的地址信息;
步骤S15:当一方收到另一方传来的地址通知消息后,它首先解密此 消息,检查随机数字段是不是连接建立时共享的随机数;如果不是,则丢 弃此消息,如果是,说明此消息确实是从通信的另一方传来的;然后仅在 检查成功后才检查消息序列号以判断此消息是不是新的,如果不是,丢弃 此消息,如果是,则检查“当前地址”字段的值是不是正在使用的目的IP地 址,如果不是,说明通信另一方的地址发生了改变,因此将释放原来在旧 地址上建立的通信连接,转而在改变后的IP地址上建立新的语音通信连 接;
步骤S16:当通信一方在规定的时间内没有收到任何从另一方发来的 新的正确的地址通知消息时,则释放现有的语音通信连接。
技术领域\n本发明属于通信网络应用技术领域,特别是一种移动自组织网络上语音通 信实现方法。\n背景技术\n移动自组织网络(Mobile Ad Hoc Network-MANET)是一种具有高度动态 拓扑结构、结点任意移动的、点对点的自创建、自组织、自管理的网络,它使 得节点之间可以自由地进行通讯而无需经过基站、访问点等基础设施。文献[1] Ramanathan R,Redi J,“A Brief Overview of mobile Ad hoc Networks:Challenges and Directions”,IEEE Communications Magazine,50th Anniversary Commemorative Issue[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 over Internet 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应用程序的可靠性要求,因此我 们必须在通信连接建立之前对此地址的有效性进行验证。\n此外,为了便于在通信节点之间实现相互认证,提高可靠性。规定每个节 点都产生本节点的公钥和私钥信息,并且公开本节点的公钥。任何两个需要相 互通信的节点都必须知道对方的公钥。\n关于在MANET网络上如何获得真实合法的公钥问题,可以采用通信双方 预共享的方式,也可以采用类似于文献[2]Asad Amir Pirzada,Chris McDonald, “Kerberos Assisted Authentication in Mobile Ad-hoc Network”,In 27th Australasian Computer Science Conference,Dunedin,New Zealand,January 18-22,2004提到的 方法,只不过在文献[2]提到的环境中,没有考虑地址变化的情况,公钥信息是 和节点的IP地址绑定的,而我们的实现方案中公钥是和节点恒定不变的通信ID 绑定的。\n发明内容\n本发明的目的在于提供一种移动自组织网络上语音通信(VoIP)的实现方法, 它能够解决移动自组织网络上的地址变更问题,消除其对于VoIP应用的影响。\n本发明属于通信网络应用领域,提出了一种适用于MANET的VoIP应用。 它通过连接建立前增加握手过程,在通信双方之间共享随机数,通话过程中传 送加密的地址通知消息等新型机制来保证在移动自组织网络上语音通信的可靠 性,消除了MANET地址变更对VoIP的不良影响。\n本发明建立在移动自组织网络(MANET)基础之上,MANET是一种由笔 记本电脑、个人数字助理(PDA)、车载台等移动终端所组成的具有高度动态拓 扑结构、节点任意移动、点对点自创建、自组织、自管理的网络。在这个网络 中,每个节点都带有无线网卡,节点之间通过无线技术互联,并且以多跳的方 式进行相互通信。此外,每个节点还配有声卡设备,可以对语音信号进行编解 码处理等相应工作。\n为了支持语音通信,节点首先要进行声卡和网卡的初始化工作,然后通过驱 动网卡发送控制数据包进行连接建立前的握手过程。连接建立之后,通信节点 驱动声卡对语音信号进行采集、编解码,以此来接收和播放声音,并且将编码 压缩后的语音数据包通过网卡发送出去实现节点之间的语音通信。\n本发明是建立在计算机网络通信的基础上,通过计算机进行联络,来实现节 点的语音通信。\n本发明提供了一种在移动自组织网络中语音通信方法,该方法包括以 下步骤:每个通信节点维护一个本地数据库,数据库中保存着本节点的 历史通话记录,每一条记录都是<通信ID,IP地址>的二元组;在发起语 音呼叫时,源节点首先访问本地数据库查找目标节点地址的历史记录, 如果找到了目标节点地址的历史记录,则向该记录的目标节点地址发送 单播查询消息以确认地址的有效性,如果源节点在规定时间内收到回复 消息说明该地址真实有效,则根据此地址建立通信连接;否则,发送广 播查询消息来得到目标节点的当前地址;在上述单播和广播查询消息中 包含了源节点为本次语音通话产生的随机数,该随机数用目标节点的公 钥进行了加密,只有目标节点才能正确解密随机数,源节点通过此随机 数辨别回复消息的真实性,同时经过在节点之间发送查询和回复消息这 么一个握手过程,在本次语音通信的源节点和目标节点之间就共享了一 个随机数,该随机数可用作通信过程中的加密密钥和认证依据;在通信 连接建立后的通话过程中,通信双方周期性地互发地址通知消息,地址 通知消息使用握手阶段协商好的随机数作为密钥进行加密,包含序列号 字段和随机数字段,当一个节点的地址发生变化,节点就通过地址通知 消息及时地将变化后的地址发给对方,另一方解密消息后取消原先在旧 地址上建立的连接转而在新地址上建立语音通信连接;此外,当一方在 规定的时间内没有收到另一方发来的新的正确的地址通知消息时将释放 当前的语音通信连接,保证即使通信双方的地址同时发生改变,通信连 接也会被及时释放,避免语音通信长时间地被错误保持,提高语音通信 的可靠性。\n本发明的实现依赖于以下两个前提条件:\n首先,因为在移动自组织网络中通信设备终端的IP地址是不固定的,所以 不能采用IP地址来发起呼叫。取而代之的是给每个通信终端都设定一个通信ID, 并利用这个通信ID来发起语音呼叫。通信ID是全局唯一(即对于不同的 MANET网络内的节点也不重复),并且是恒定不变的。它能唯一地标志一个节 点,并且必须方便用户的记忆。通信ID由一个集中的机构来发放。\n其次,为了便于在节点之间实现相互认证,提高可靠性。规定每个节点都产 生本节点的公钥和私钥信息,并且公开本节点的公钥。任何两个需要相互通信 的节点都必须知道对方的公钥。\n本发明是一种移动自组织网络上的语音通信系统,其实现方法如下:\n在MANET中,当一个节点想要对另一个节点发起呼叫时,它首先需要产 生一个32位的随机数,并用目标节点的公钥进行加密。随机数的产生为以后通 信过程中的认证和加密提供了保证。接着,源节点访问本地的名字服务模块, 得到目标节点的IP地址。名字服务模块负责维护一个本地的数据库,数据库中 包含了一系列的记录,每一条记录都含有一个通信ID和IP地址的对应。这些 记录都是从本节点以前的通话历史中保存下来的。然而,这些历史记录并不一 定能够确实反映目标节点当前使用的地址,因为有可能在上一次通话结束之后, 目标节点的IP地址已经发生了变化。所以不能直接使用从名字服务模块返回的 地址来建立语音通信连接,而是要在尝试建立连接之前通过一条单播查询消息 对名字服务模块返回地址的准确性加以验证。如果本地数据库中没有关于目标 节点的地址记录,名字服务模块返回空,那么就必须发送广播查询消息来得到 目标节点的IP地址了。\n语音呼叫源节点向名字服务模块返回的地址发送一个单播查询消息。格式如 下。\n 0 3 16 31\n+++++++++++++++++++++++++++++++++++++++++++++++++\n+ 类型 + 保留 + 序列号 +\n+++++++++++++++++++++++++++++++++++++++++++++++++\n+ 随机数(加密) +\n+++++++++++++++++++++++++++++++++++++++++++++++++\n+ +\n+ 源地址 +\n+ +\n+++++++++++++++++++++++++++++++++++++++++++++++++\n+ +\n+ 目的地址 +\n+ +\n+++++++++++++++++++++++++++++++++++++++++++++++++\n+ +\n+ 源端通信ID +\n+ +\n+++++++++++++++++++++++++++++++++++++++++++++++++\n+ +\n+ 目的端通信ID +\n+ +\n+++++++++++++++++++++++++++++++++++++++++++++++++\n其中3位的类型字段表明消息的类型,单播查询消息的类型值为0。 16位的序列号标记此次查询,因为一个节点可能发出过多个查询消息, 所以需要一个字段来指示本次查询,源节点每发出一个查询请求后就把 该字段的值递增1。随机数字段放置源节点为本次通话产生的加密“随机 数”。源地址和目的地址字段分别标记查询消息源IP地址和目标IP地址。 (IPv4地址32位,IPv6地址128位)两个通信ID字段分别记录源节点 和目的节点的通信ID。\n当此单播查询消息到达目的地址后,该节点检查单播查询消 息中的“目的端通信ID”字段,并把它与本节点的通信ID进行对 照,然后向通信源节点发送回复消息。格式如下。\n 0 3 16 31\n+++++++++++++++++++++++++++++++++++++++++++++++++\n+ 类型 + 保留 + 序列号 +\n+++++++++++++++++++++++++++++++++++++++++++++++++\n+ 随机数(加密) +\n+++++++++++++++++++++++++++++++++++++++++++++++++\n+ +\n+ 源地址 +\n+ +\n+++++++++++++++++++++++++++++++++++++++++++++++++\n+ +\n+ 目的地址 +\n+ +\n+++++++++++++++++++++++++++++++++++++++++++++++++\n其中3位的类型字段表明消息的类型,单播查询回复消息的类型值为 1。序列号标记查询,它是从相应的查询消息中拷贝过来的,表示回答了 哪个查询请求。源地址和目的地址字段分别标记此回复消息的源IP地址 和目标IP地址。如果本节点通信ID和单播查询消息中“目的端通信ID” 字段的值相匹配,则使用本节点的私钥解密单播查询消息中的加密“随机 数”得到随机数的明文,然后利用单播查询消息中指明的“源端通信ID” 所对应节点的公钥值加密该随机数的明文,并把结果放在回复消息的加 密 “随机数”字段。反之如果本节点通信ID和单播查询消息中“目的端通 信ID”字段的值不匹配,则简单地用全“0”填充回复消息中的加密“随机 数”字段。\n如果源节点在规定的时间内收到了回复消息(单播查询回复消息的类 型值为1),它用自己的私钥解密回复消息中的加密“随机数”得到随机数 的明文,如果这个明文和源节点为本次通话产生的随机数相同,则完成了对目 的节点的认证,握手结束。此时就可以用单播查询消息中指明的目的地址建立 呼叫连接了。如果源节点在规定的时间内没有收到回复消息,或者是用私钥解 密回复消息中的加密“随机数”字段得到的随机数明文与源节点为本次通话产生 的随机数不同,则证明当初从本地数据库中得到的目标节点的地址信息已经失 效了,语音通信的源节点就必须通过发送广播查询消息来得到相应的地址信息 了。\n广播查询消息的格式与单播查询消息完全相同。只是在广播查询消息中目的 地址字段填充的是广播地址,它发送给MANET中的每一个节点。此外对于广 播查询消息,其类型值为2。(单播查询消息的类型值为0)\nMANET网络中的每一个节点接收到广播查询消息后,检查自己的通信ID 是否和此查询消息中“目的端通信ID”字段的值相同,如果相同则表明自己就是 语音呼叫的目标节点,它就必须发送一条回复消息告知自己当前使用的IP地 址。\n广播查询回复消息的格式与单播查询回复消息完全相同。其中3位的类型字 段表明消息的类型,广播查询回复消息的类型值为3。序列号标记查询,它是 从相应的广播查询消息中拷贝过来的,表示回答了哪个查询请求。源地址和目 的地址字段分别标记此回复消息的源IP地址和目标IP地址。最后使用本节点 的私钥解密广播查询消息中的加密“随机数”得到随机数的明文,然后利用广播 查询消息中指明的“源端通信ID”所对应节点的公钥值加密随机数的明文,并把 加密后的密文放在回复消息的加密“随机数”字段。\n查询节点接收到回复消息后,用自己的私钥解密回复消息的加密“随机数”, 得到随机数的明文,然后同自己原先产生的随机数进行比较,如果两者相同, 则说明此回复消息确实是从语音通信的目标节点发来的,因为只有这个节点才 能正确解密查询消息中的加密“随机数”。这样,语音通信的源节点就得到了目 标节点当前的IP地址(在回复消息的源地址字段指明),它就用这个地址信息 来更新本地数据库,然后在此地址上建立呼叫连接。如果随机数比较的结果不 相同,则丢弃此回复消息。如果查询节点没有在规定的时间内接收到正确的回 复消息,它就认为语音呼叫的目标节点当前不在线,语音通话过程结束。\n当通信双方得到彼此的IP地址建立呼叫连接后,就进入了语音通话状态。 在通话过程中,通信双方的地址仍然有可能因为种种原因而改变。所以必须采 用某种机制使得节点在地址变更的时候,语音通信不会被错误地保持。我们要 求通信双方在收发语音数据包的同时,还周期性地发送指示当前地址信息的控 制数据包。格式如下。\n 0 3 16 31\n+++++++++++++++++++++++++++++++++++++++++++++++++\n+ 类型 + 保留 +\n+++++++++++++++++++++++++++++++++++++++++++++++++\n+ 序列号(加密) +\n+++++++++++++++++++++++++++++++++++++++++++++++++\n+ +\n+ 当前地址(加密) +\n+ +\n+++++++++++++++++++++++++++++++++++++++++++++++++\n+ 随机数(加密) +\n+++++++++++++++++++++++++++++++++++++++++++++++++\n其中3位的类型字段表明消息的类型,地址通知消息的类型值为4。 32位的序列号用来抵抗重放攻击和乱序到达。当前地址字段用来指明节 点当前所使用的IPv4/IPv6地址。随机数字段记录在通信连接建立之前的 握手过程中产生的随机数,它起到了一个认证的作用。后3个字段的内 容在实际传输过程中是以密文的形式传送的。\n当语音通信的一方收到另一方传来的密文形式的地址通知消息后,它 首先解密此消息,检查随机数字段是不是握手时产生的随机数。如果不 是,则丢弃此消息;如果是,说明此消息确实是从通信的另一方传来的, 因为只有参与本次语音通信的双方才知道此随机数。接下来,检查消息 序列号以判断此消息是不是新的,如果不是,丢弃此消息;如果是,则 检查“当前地址”字段的值是不是正在使用的IP地址,如果不是,说明通 信另一方的地址发生了改变,因此将释放原来在旧地址上建立的通信连 接,转而在改变后的IP地址上建立新的语音通信连接。\n我们规定通信双方周期性地发送上述地址通知消息,每发送一个消息就把序 列号加1。当通信终端在规定的时间内没有收到任何从另一方发来的新的正确 的地址通知消息时,它就会释放现有的语音通信连接。\n综上所述,本发明移动自组织网络上语音通信(VoIP)的实现方法的总体步 骤如下:\n步骤S1:语音通信的源节点产生一个32位的随机数,并使用本次语音通 信目标节点的公钥进行加密;\n步骤S2:源节点访问名字服务模块,名字服务模块查询本地数据库,如果 找到相应记录,就返回目标节点IP地址,进入S3,如果没有找到相应记录,进 入S9;\n步骤S3:源节点向名字服务模块返回的IP地址发送一个单播查询消息,以 确认此地址的有效性,同时启动定时器;单播查询消息中包含了S1产生的加密 随机数;\n步骤S4:单播查询到达目的地址后,相应节点对照本节点的通信ID (Identifier)和查询消息中的“目的端通信ID”字段,如果相同,进入S5;否则, 进入S6;\n步骤S5:该节点用自己的私钥解密单播查询消息中的加密随机数得到随机 数的明文,然后利用单播查询消息中指明的“源端通信ID”所对应节点的公钥值 加密该随机数的明文,并把结果放在单播查询回复消息中,进入S7;\n步骤S6:该节点用全“0”填充单播查询回复消息中加密的“随机数”字段;\n步骤S7:该节点向语音呼叫的源节点发送一个单播查询回复消息;\n步骤S8:如果源节点在规定时间内收到了单播查询回复消息,它用本节点 的私钥解密回复消息中的加密随机数,并同在S1产生的随机数进行比较,如果 比较的结果相同,则把名字服务模块返回的IP地址作为语音呼叫的目的地址, 转入S13;如果比较的结果不同,丢弃此回复消息,进入S9;如果源节点在规 定时间内没有收到单播查询回复消息,进入S9;\n步骤S9:源节点向移动自组织网络(Mobile Ad Hoc Network-MANET) 内发送一个广播查询消息,同时启动定时器,广播查询消息中包含了在S1产生 的加密随机数;\n步骤S10:MANET中的每一个节点收到广播查询消息后,检查自己的通 信ID,如果自己正是呼叫的目的节点,则用自己的私钥解密广播查询消息中的 加密随机数得到随机数的明文,然后利用广播查询消息中指明的“源端通信ID” 所对应节点的公钥值加密该随机数的明文,并把结果放在广播查询回复消息中, 然后向语音呼叫的源节点发送广播查询回复消息;\n步骤S11:源节点侦听端口,如果在定时器超时前收到了广播查询回复消 息,它用本节点的私钥解密回复消息中的加密随机数,并同在S1产生的随机 数进行比较,如果比较的结果相同,则用回复消息的源地址更新本地数据库, 并把此地址作为语音呼叫的目的地址,转入S13;如果比较的结果不同,丢弃 此回复消息,继续侦听;如果定时器超时,进入S12;\n步骤S12:源节点认为本次语音呼叫的目标节点当前不在线,通话过程以“不 在线”错误类型结束;\n步骤S13:源节点在S8或者S11得到目标节点当前使用的准确IP地址后, 在此地址上和目标节点建立语音通信连接;\n步骤S14:通信连接建立进入通话状态后,每一方需要周期性地向另一方 发送加密的地址通知消息,以告知本方当前使用的地址信息;\n步骤S15:当一方收到另一方传来的地址通知消息后,它首先解密此消息, 检查随机数字段是不是连接建立时共享的随机数;如果不是,则丢弃此消息, 如果是,说明此消息确实是从通信的另一方传来的;然后仅在检查成功后才 检查消息序列号以判断此消息是不是新的,如果不是,丢弃此消息,如果是, 则检查“当前地址”字段的值是不是正在使用的目的IP地址,如果不是,说明通 信另一方的地址发生了改变,因此将释放原来在旧地址上建立的通信连接,转 而在改变后的IP地址上建立新的语音通信连接;\n步骤S16:当通信一方在规定的时间内(一般为3-10个地址通知消息的发 送周期)没有收到任何从另一方发来的新的正确的地址通知消息时,它就会释 放现有的语音通信连接。\n实现细节:\n1.在握手阶段采用非对称加密算法RSA,同时为了减少大素数的生成时间\n只采用8位长度的密钥。\n2.当一个节点发出单播或者多播查询消息,如果在2秒钟之内没有收到应 答,就启动相应的超时操作。这个时间值的设定和网络规模、节点处理 速度等因素密切相关。\n一般情况可按如下公式计算:\nWAIT_TIME=4*NODE_PROCESS_TIME*NET_DIAMETER\nWAIT_TIME:等待时间。\nNODE_PROCESS_TIME:节点处理时间,是节点处理报文和转发报文的 时间总和,一般为40ms。\nNET_DIAMETER:MANET中两个结点间的最大跳数,与网络规模有关。\n3.在通信过程中,VoIP通信节点每隔5秒钟就向对方发送一个地址通知消 息。从加解密效率因素考虑,采用对称加密算法RC4来加密地址通知消 息,而RC4算法所使用的密钥就是在握手阶段产生的随机数。\n4.规定当通信的一方在30秒的时间内没有收到从另一方发来的新的正确的 地址通知消息时,它就切断当前的语音通信连接。\n比较本发明与传统的VoIP处理机制,我们显然可以看出本发明具有以下优 点:\n1.在语音通信连接建立之前,通过一个握手的过程在通信双方之间共享了 一个随机数。因为随机数全部是以密文的方式发送的,所以MANET内 的其它节点都不知道此随机数,这个随机数就可以作为语音通信的双方 相互认证的依据。\n2.我们并没有直接使用从本地数据库中返回的'地址来建立通信连接,而 是试图在使用它之前通过一个单播查询确认它的有效性,以此来提高语 音通信的可靠性。\n3.利用本地数据库中保存的地址信息发送单播查询来代替每次通过广播方 式获得目标节点的IP地址,可以减少移动自组网的广播风暴,节省带宽 资源。\n4.在通信过程中,当一个节点的地址发生了改变,它会及时地通过地址通知 消息将改变后的新地址告诉通信的另一方。另一方解密此地址通知消息 后,就可以取消原先在旧地址上建立的通信连接,转而在新地址上建立新 的语音通信连接,从而使得语音通信过程能够自动切换到新地址上。因为 地址通知消息中包含了随机数字段,而这个随机数又仅仅为语音通信的双 方所共享,所以当一方解密得到地址通知消息的明文后,如果看到了一个 正确的随机数的值,就可以断定此地址通知消息确实是从通信的另一方发 来的,地址通知消息中的随机数字段起到了一个认证的作用。而在地址通 知消息中增加了序列号的字段后,既可以抵抗重放攻击,又可以解决在分 组网络中地址通知消息乱序到达的问题,即如果本次解密后地址通知消息 的序列号值小于或者等于前一次正确收到的地址通知消息的序列号值,则 证明此地址通知消息是一个旧消息,可以简单地丢弃。\n5.在通信过程中,如果通信双方的地址依次发生改变一次或者多次,语音 通信连接依照上述的方法仍然可以正确地保持。\n6.在通信过程中,如果在某一个时刻通信双方的地址同时发生了改变,虽 然两方发送的地址通知消息都无法到达对方,但因为我们规定当通信一 方在规定的时间(30秒)内没有收到任何从另一方发来的新的正确的地 址通知消息时,它就会释放现有的语音通信连接,所以经过一段时间后, 每一方也会因为收不到来自对方的正确的地址通知消息而释放连接,从 而使得语音通信不会被长时间地错误保持,提高了可靠性。\n附图说明\n图1是语音呼叫源节点建立呼叫连接前的处理流程图。\n图2是通话过程中通信节点处理收到的地址通知消息的流程图。\n具体实施方式\n图1中各事件的处理步骤如下:\n步骤S1.1:语音呼叫的源节点产生一个32位的随机数,并使用本次语音通 信目标节点的公钥进行加密;\n步骤S1.2:源节点访问名字服务模块,名字服务模块查询本地数据库;\n步骤S1.3:如果在本地数据库中找到相应记录,就返回目标节点IP地址, 进入S1.4,如果没有找到相应记录,进入S1.10;\n步骤S1.4:源节点向名字服务模块返回的IP地址发送一个单播查询消息, 以确认此地址的有效性,同时启动定时器,单播查询消息中包含了S1.1产生的 加密随机数;\n步骤S1.5:如果源节点在规定时间内收到了回复消息,进入S1.6;否则, 进入S1.10;\n步骤S1.6:源节点用本节点的私钥解密回复消息中的加密随机数;\n步骤S1.7:将解密后的随机数与本节点在S1.1产生的随机数进行比较,如 果比较的结果相同,进入S1.8;如果比较的结果不同,进入S1.9;\n步骤S1.8:把名字服务模块返回的IP地址作为语音呼叫的目标地址;进入 S1.18;\n步骤S1.9:丢弃回复消息;\n步骤S1.10:源节点向MANET网络内发送一个广播查询消息,同时启动定 时器,广播查询消息中包含了在S1.1产生的加密随机数;\n步骤S1.11:源节点侦听端口,如果在定时器超时前有广播查询回复消息到 来,进入S1.13;如果定时器超时,进入S1.12;\n步骤S1.12:目标节点不在线,语音通话过程结束;\n步骤S1.13:源节点用本节点的私钥解密回复消息中的加密随机数;\n步骤S1.14:将解密后的随机数与本节点在S1.1产生的随机数进行比较, 如果比较的结果相同,进入S1.16;如果比较的结果不同,进入S1.15;\n步骤S1.15:丢弃回复消息,重新回到S1.11;\n步骤S1.16:利用回复消息的源IP地址更新本地数据库;\n步骤S1.17:把该回复消息的源IP地址作为语音呼叫的目标地址;\n步骤S1.18:根据S1.8或者S1.17得到的目标地址建立语音通话连接。\n图2中各事件处理步骤如下:\n步骤S2.1:通信节点收到地址通知消息;\n步骤S2.2:通信节点用连接建立阶段协商好的随机数作为密钥解密此地址 通知消息;\n步骤S2.3:检查随机数字段的值,如果与在连接建立阶段通信双方共享的 随机数相同,进入S2.4,否则,进入S2.7;\n步骤S2.4:检查序列号字段,如果是新消息(该值大于前一次正确收到的 地址通知消息的序列号),则将该序列号值记录下来,以替代前一次正确收到的 地址通知消息的序列号值,进入S2.5,否则,进入S2.7;\n步骤S2.5:检查当前地址字段,如果发现通信另一方的IP地址发生了变化, 进入S2.6,否则,进入S2.7;\n步骤S2.6:切断在旧地址上的语音通信连接,转而在改变后的IP地址上建 立新的语音通信连接,结束本流程;\n步骤S2.7:丢弃消息。
法律信息
- 2021-04-30
- 2021-04-30
- 2018-04-27
- 2011-03-09
专利权的转移
登记生效日: 2011.01.17
专利权人由中国科学院计算技术研究所变更为上海斐讯数据通信技术有限公司
地址由100080 北京市中关村科学院南路6号变更为201600 上海市松江区广富林路4855弄90号
- 2008-06-11
- 2005-04-27
- 2005-02-23
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有引用任何外部专利数据! |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |