專利名稱:一種移動自組織網(wǎng)絡(luò)上語音通信方法
技術(shù)領(lǐng)域:
本發(fā)明屬于通信網(wǎng)絡(luò)應(yīng)用技術(shù)領(lǐng)域,特別是一種移動自組織網(wǎng)絡(luò)上語音通信實現(xiàn)方法。
背景技術(shù):
移動自組織網(wǎng)絡(luò)(Mobile Ad Hoc Network-MANET)是一種具有高度動態(tài)拓撲結(jié)構(gòu)、結(jié)點任意移動的、點對點的自創(chuàng)建、自組織、自管理的網(wǎng)絡(luò),它使得節(jié)點之間可以自由地進行通訊而無需經(jīng)過基站、訪問點等基礎(chǔ)設(shè)施。文獻[1]Ramanathan R,Redi J,“A Brief Overview of mobile Ad hoc NetworksChallenges andDirections”,IEEE Communications Magazine,50thAnniversary CommemorativeIssue[C],2002。在MANET內(nèi),通信節(jié)點的地址采用自動配置的技術(shù),生成的地址經(jīng)過重復(fù)地址檢測的過程確認其在所屬Ad Hoc網(wǎng)絡(luò)內(nèi)唯一后才被節(jié)點所使用。然而由于節(jié)點和網(wǎng)絡(luò)的移動性,在MANET網(wǎng)絡(luò)中經(jīng)常會遇到地址沖突的問題,從而使節(jié)點的IP(Internet Protocol)地址發(fā)生變化。例如,移動節(jié)點A移動出了MANET的傳輸范圍或者是此節(jié)點由于其它原因短暫地失去了與MANET網(wǎng)絡(luò)內(nèi)其他節(jié)點之間的聯(lián)系。在此期間,節(jié)點B加入MANET組,它選擇了與節(jié)點A同樣的IP地址,并且經(jīng)過重復(fù)地址檢測沒有發(fā)現(xiàn)地址沖突(因為節(jié)點A失去了聯(lián)系),所以它就聲明自己具有和節(jié)點A同樣的IP地址。然而一段時間后,當節(jié)點A移動回到了MANET網(wǎng)絡(luò)或者是排除了故障恢復(fù)和組內(nèi)其它節(jié)點的聯(lián)系時,節(jié)點A和節(jié)點B就產(chǎn)生了地址重復(fù),它們當中就必須有一個改變自己的IP地址。又比如,兩個原先獨立的MANET網(wǎng)絡(luò)由于移動匯聚成為一個MANET網(wǎng)絡(luò)。由于原先兩個網(wǎng)絡(luò)是相互分離的,它們之間可能存在某些重復(fù)的地址。這樣當兩個網(wǎng)絡(luò)融合后,就會出現(xiàn)地址沖突的問題,也就使得某些節(jié)點必須改變自己的IP地址。然而,目前所使用的語音通信VoIP(Voice overInternet Protocol)應(yīng)用程序都是基于固定不變的源端和目的端IP地址,沒有考慮到MANET上這種地址變更的情況,所以如果把它們應(yīng)用于移動自組織網(wǎng)絡(luò)中,當通信一方的地址發(fā)生變化以后,語音通信就會被錯誤地保持,節(jié)點將會和并非自己想要通信的節(jié)點進行語音通信,由此會產(chǎn)生很多的安全性問題。例如在MANET中,節(jié)點A和B正在進行語音通信,此時由于與另一個MANET網(wǎng)絡(luò)進行了合并,節(jié)點A和節(jié)點C發(fā)生了地址沖突,導(dǎo)致節(jié)點A的IP地址由x變成了y。然而節(jié)點B并不知道這種變化,從B發(fā)給A的語音包的目標地址仍然使用x,結(jié)果導(dǎo)致節(jié)點B錯誤地與節(jié)點C進行了通信。此外,如前所述,由于在移動自組織網(wǎng)絡(luò)中通信設(shè)備的IP地址是不固定的,所以不能像在固定網(wǎng)絡(luò)上實現(xiàn)的VoIP應(yīng)用那樣采用每個節(jié)點的IP地址來發(fā)起語音呼叫。取而代之的是給每個設(shè)備終端都設(shè)定一個通信ID,這個通信ID唯一標志一個節(jié)點,節(jié)點之間通過這個通信ID來發(fā)起語音呼叫。在每次語音呼叫連接建立之前,源節(jié)點都需要訪問本節(jié)點的名字服務(wù)模塊,名字服務(wù)模塊負責維護一個本地的數(shù)據(jù)庫,數(shù)據(jù)庫中包含了一系列的記錄,每一條記錄都含有一個通信ID和IP地址的對應(yīng)。這些記錄是從本節(jié)點以前的通話歷史中保存下來的。然而,本地數(shù)據(jù)庫中記錄的IP地址都只是一些歷史信息,它并不一定能夠確實反映目標節(jié)點當前使用的地址,因為有可能在上一次通話結(jié)束之后,目標節(jié)點的IP地址已經(jīng)發(fā)生了變化,所以如果直接利用此地址建立語音呼叫連接,很可能會錯誤地同其它節(jié)點建立呼叫關(guān)系,這顯然違背了我們VoIP應(yīng)用程序的可靠性要求,因此我們必須在通信連接建立之前對此地址的有效性進行驗證。
此外,為了便于在通信節(jié)點之間實現(xiàn)相互認證,提高可靠性。規(guī)定每個節(jié)點都產(chǎn)生本節(jié)點的公鑰和私鑰信息,并且公開本節(jié)點的公鑰。任何兩個需要相互通信的節(jié)點都必須知道對方的公鑰。
關(guān)于在MANET網(wǎng)絡(luò)上如何獲得真實合法的公鑰問題,可以采用通信雙方預(yù)共享的方式,也可以采用類似于文獻[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]提到的環(huán)境中,沒有考慮地址變化的情況,公鑰信息是和節(jié)點的IP地址綁定的,而我們的實現(xiàn)方案中公鑰是和節(jié)點恒定不變的通信ID綁定的。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種移動自組織網(wǎng)絡(luò)上語音通信(VoIP)的實現(xiàn)方法,它能夠解決移動自組織網(wǎng)絡(luò)上的地址變更問題,消除其對于VoIP應(yīng)用的影響。
本發(fā)明屬于通信網(wǎng)絡(luò)應(yīng)用領(lǐng)域,提出了一種適用于MANET的VoIP應(yīng)用。它通過連接建立前增加握手過程,在通信雙方之間共享隨機數(shù),通話過程中傳送加密的地址通知消息等新型機制來保證在移動自組織網(wǎng)絡(luò)上語音通信的可靠性,消除了MANET地址變更對VoIP的不良影響。
本發(fā)明建立在移動自組織網(wǎng)絡(luò)(MANET)基礎(chǔ)之上,MANET是一種由筆記本電腦、個人數(shù)字助理(PDA)、車載臺等移動終端所組成的具有高度動態(tài)拓撲結(jié)構(gòu)、節(jié)點任意移動、點對點自創(chuàng)建、自組織、自管理的網(wǎng)絡(luò)。在這個網(wǎng)絡(luò)中,每個節(jié)點都帶有無線網(wǎng)卡,節(jié)點之間通過無線技術(shù)互聯(lián),并且以多跳的方式進行相互通信。此外,每個節(jié)點還配有聲卡設(shè)備,可以對語音信號進行編解碼處理等相應(yīng)工作。
為了支持語音通信,節(jié)點首先要進行聲卡和網(wǎng)卡的初始化工作,然后通過驅(qū)動網(wǎng)卡發(fā)送控制數(shù)據(jù)包進行連接建立前的握手過程。連接建立之后,通信節(jié)點驅(qū)動聲卡對語音信號進行采集、編解碼,以此來接收和播放聲音,并且將編碼壓縮后的語音數(shù)據(jù)包通過網(wǎng)卡發(fā)送出去實現(xiàn)節(jié)點之間的語音通信。
本發(fā)明是建立在計算機網(wǎng)絡(luò)通信的基礎(chǔ)上,通過計算機進行聯(lián)絡(luò),來實現(xiàn)節(jié)點的語音通信。
本發(fā)明是在移動自組織網(wǎng)絡(luò)上語音通信的方法,每一個通信節(jié)點都維護一個本地數(shù)據(jù)庫,數(shù)據(jù)庫中保存著本節(jié)點的歷史通話記錄,每一條記錄都是<通信ID,IP地址>的二元組,通話時,源節(jié)點首先訪問本地數(shù)據(jù)庫查找相應(yīng)的記錄,如果找到了相關(guān)記錄就向該記錄中的地址發(fā)送單播查詢消息以確認地址的有效性,如果源節(jié)點在規(guī)定時間內(nèi)收到回復(fù)消息說明該地址真實有效,則根據(jù)此地址建立通信連接,否則,發(fā)送廣播查詢消息來得到目標節(jié)點的當前地址;在單播和廣播查詢消息中都包含了源節(jié)點為本次語音通話產(chǎn)生的隨機數(shù),該隨機數(shù)用語音通信目標節(jié)點的公鑰進行了加密,所以只有目標節(jié)點才能正確解密隨機數(shù),源節(jié)點可以通過此隨機數(shù)辨別回復(fù)消息的真實性,同時經(jīng)過在節(jié)點之間發(fā)送查詢和回復(fù)消息這么一個握手過程,在本次語音通信的源節(jié)點和目標節(jié)點之間就共享了一個隨機數(shù),這個隨機數(shù)可以用作通信過程中的加密密鑰和認證依據(jù);在通信連接建立之后的通話過程中,要求通信雙方周期性地互發(fā)地址通知消息,地址通知消息使用握手階段協(xié)商好的隨機數(shù)作為密鑰進行了加密,它包含了序列號字段可以對抗重放攻擊和亂序到達,它還包含了隨機數(shù)字段可以使節(jié)點認證消息的真?zhèn)?,當一個節(jié)點的地址發(fā)生了變化,它就通過地址通知消息及時地將變化后的地址發(fā)給對方,另一方解密消息后就可以取消原先在舊地址上建立的連接轉(zhuǎn)而在新地址上建立語音通信連接;此外,規(guī)定當一方在規(guī)定的時間內(nèi)沒有收到另一方發(fā)來的新的正確的地址通知消息時會釋放當前的語音通信連接,這樣就保證了即使通信雙方的地址同時發(fā)生了改變,通信連接也會被及時釋放,從而避免了語音通信長時間地被錯誤保持,提高了語音通信的可靠性。
本發(fā)明的實現(xiàn)依賴于以下兩個前提條件首先,因為在移動自組織網(wǎng)絡(luò)中通信設(shè)備終端的IP地址是不固定的,所以不能采用IP地址來發(fā)起呼叫。取而代之的是給每個通信終端都設(shè)定一個通信ID,并利用這個通信ID來發(fā)起語音呼叫。通信ID是全局唯一(即對于不同的MANET網(wǎng)絡(luò)內(nèi)的節(jié)點也不重復(fù)),并且是恒定不變的。它能唯一地標志一個節(jié)點,并且必須方便用戶的記憶。通信ID由一個集中的機構(gòu)來發(fā)放。
其次,為了便于在節(jié)點之間實現(xiàn)相互認證,提高可靠性。規(guī)定每個節(jié)點都產(chǎn)生本節(jié)點的公鑰和私鑰信息,并且公開本節(jié)點的公鑰。任何兩個需要相互通信的節(jié)點都必須知道對方的公鑰。
本發(fā)明是一種移動自組織網(wǎng)絡(luò)上的語音通信系統(tǒng),其實現(xiàn)方法如下在MANET中,當一個節(jié)點想要對另一個節(jié)點發(fā)起呼叫時,它首先需要產(chǎn)生一個32位的隨機數(shù),并用目標節(jié)點的公鑰進行加密。隨機數(shù)的產(chǎn)生為以后通信過程中的認證和加密提供了保證。接著,源節(jié)點訪問本地的名字服務(wù)模塊,得到目標節(jié)點的IP地址。名字服務(wù)模塊負責維護一個本地的數(shù)據(jù)庫,數(shù)據(jù)庫中包含了一系列的記錄,每一條記錄都含有一個通信ID和IP地址的對應(yīng)。這些記錄都是從本節(jié)點以前的通話歷史中保存下來的。然而,這些歷史記錄并不一定能夠確實反映目標節(jié)點當前使用的地址,因為有可能在上一次通話結(jié)束之后,目標節(jié)點的IP地址已經(jīng)發(fā)生了變化。所以不能直接使用從名字服務(wù)模塊返回的地址來建立語音通信連接,而是要在嘗試建立連接之前通過一條單播查詢消息對名字服務(wù)模塊返回地址的準確性加以驗證。如果本地數(shù)據(jù)庫中沒有關(guān)于目標節(jié)點的地址記錄,名字服務(wù)模塊返回空,那么就必須發(fā)送廣播查詢消息來得到目標節(jié)點的IP地址了。
語音呼叫源節(jié)點向名字服務(wù)模塊返回的地址發(fā)送一個單播查詢消息。格式如下。
0 31631++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 類型 + 保留 +序列號+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 隨機數(shù)(加密)+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++ 源地址 ++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++ 目的地址++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++ 源端通信ID ++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++ 目的端通信ID++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++其中3位的類型字段表明消息的類型,單播查詢消息的類型值為0。16位的序列號標記此次查詢,因為一個節(jié)點可能發(fā)出過多個查詢消息,所以需要一個字段來指示本次查詢,源節(jié)點每發(fā)出一個查詢請求后就把該字段的值遞增1。隨機數(shù)字段放置源節(jié)點為本次通話產(chǎn)生的加密“隨機數(shù)”。源地址和目的地址字段分別標記查詢消息源IP地址和目標IP地址。(IPv4地址32位,IPv6地址128位)兩個通信ID字段分別記錄源節(jié)點和目的節(jié)點的通信ID。
當此單播查詢消息到達目的地址后,該節(jié)點檢查單播查詢消息中的“目的端通信ID”字段,并把它與本節(jié)點的通信ID進行對照,然后向通信源節(jié)點發(fā)送回復(fù)消息。格式如下。
0 3 16 31++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 類 型+保留 +序列號 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 隨機數(shù)(加密)+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++ 源地址 ++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++ 目的地址 ++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++其中3位的類型字段表明消息的類型,單播查詢回復(fù)消息的類型值為1。序列號標記查詢,它是從相應(yīng)的查詢消息中拷貝過來的,表示回答了哪個查詢請求。源地址和目的地址字段分別標記此回復(fù)消息的源IP地址和目標IP地址。如果本節(jié)點通信ID和單播查詢消息中“目的端通信ID”字段的值相匹配,則使用本節(jié)點的私鑰解密單播查詢消息中的加密“隨機數(shù)”得到隨機數(shù)的明文,然后利用單播查詢消息中指明的“源端通信ID”所對應(yīng)節(jié)點的公鑰值加密該隨機數(shù)的明文,并把結(jié)果放在回復(fù)消息的加密“隨機數(shù)”字段。反之如果本節(jié)點通信ID和單播查詢消息中“目的端通信ID”字段的值不匹配,則簡單地用全“0”填充回復(fù)消息中的加密“隨機數(shù)”字段。
如果源節(jié)點在規(guī)定的時間內(nèi)收到了回復(fù)消息(單播查詢回復(fù)消息的類型值為1),它用自己的私鑰解密回復(fù)消息中的加密“隨機數(shù)”得到隨機數(shù)的明文,如果這個明文和源節(jié)點為本次通話產(chǎn)生的隨機數(shù)相同,則完成了對目的節(jié)點的認證,握手結(jié)束。此時就可以用單播查詢消息中指明的目的地址建立呼叫連接了。如果源節(jié)點在規(guī)定的時間內(nèi)沒有收到回復(fù)消息,或者是用私鑰解密回復(fù)消息中的加密“隨機數(shù)”字段得到的隨機數(shù)明文與源節(jié)點為本次通話產(chǎn)生的隨機數(shù)不同,則證明當初從本地數(shù)據(jù)庫中得到的目標節(jié)點的地址信息已經(jīng)失效了,語音通信的源節(jié)點就必須通過發(fā)送廣播查詢消息來得到相應(yīng)的地址信息了。
廣播查詢消息的格式與單播查詢消息完全相同。只是在廣播查詢消息中目的地址字段填充的是廣播地址,它發(fā)送給MANET中的每一個節(jié)點。此外對于廣播查詢消息,其類型值為2。(單播查詢消息的類型值為0)MANET網(wǎng)絡(luò)中的每一個節(jié)點接收到廣播查詢消息后,檢查自己的通信ID是否和此查詢消息中“目的端通信ID”字段的值相同,如果相同則表明自己就是語音呼叫的目標節(jié)點,它就必須發(fā)送一條回復(fù)消息告知自己當前使用的IP地址。
廣播查詢回復(fù)消息的格式與單播查詢回復(fù)消息完全相同。其中3位的類型字段表明消息的類型,廣播查詢回復(fù)消息的類型值為3。序列號標記查詢,它是從相應(yīng)的廣播查詢消息中拷貝過來的,表示回答了哪個查詢請求。源地址和目的地址字段分別標記此回復(fù)消息的源IP地址和目標IP地址。最后使用本節(jié)點的私鑰解密廣播查詢消息中的加密“隨機數(shù)”得到隨機數(shù)的明文,然后利用廣播查詢消息中指明的“源端通信ID”所對應(yīng)節(jié)點的公鑰值加密隨機數(shù)的明文,并把加密后的密文放在回復(fù)消息的加密“隨機數(shù)”字段。
查詢節(jié)點接收到回復(fù)消息后,用自己的私鑰解密回復(fù)消息的加密“隨機數(shù)”,得到隨機數(shù)的明文,然后同自己原先產(chǎn)生的隨機數(shù)進行比較,如果兩者相同,則說明此回復(fù)消息確實是從語音通信的目標節(jié)點發(fā)來的,因為只有這個節(jié)點才能正確解密查詢消息中的加密“隨機數(shù)”。這樣,語音通信的源節(jié)點就得到了目標節(jié)點當前的IP地址(在回復(fù)消息的源地址字段指明),它就用這個地址信息來更新本地數(shù)據(jù)庫,然后在此地址上建立呼叫連接。如果隨機數(shù)比較的結(jié)果不相同,則丟棄此回復(fù)消息。如果查詢節(jié)點沒有在規(guī)定的時間內(nèi)接收到正確的回復(fù)消息,它就認為語音呼叫的目標節(jié)點當前不在線,語音通話過程結(jié)束。
當通信雙方得到彼此的IP地址建立呼叫連接后,就進入了語音通話狀態(tài)。在通話過程中,通信雙方的地址仍然有可能因為種種原因而改變。所以必須采用某種機制使得節(jié)點在地址變更的時候,語音通信不會被錯誤地保持。我們要求通信雙方在收發(fā)語音數(shù)據(jù)包的同時,還周期性地發(fā)送指示當前地址信息的控制數(shù)據(jù)包。格式如下。
0 3 16 31++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 類型 + 保留 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 序列號(加密)+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++ 當前地址(加密) ++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 隨機數(shù)(加密)++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++其中3位的類型字段表明消息的類型,地址通知消息的類型值為4。32位的序列號用來抵抗重放攻擊和亂序到達。當前地址字段用來指明節(jié)點當前所使用的IPv4/IPv6地址。隨機數(shù)字段記錄在通信連接建立之前的握手過程中產(chǎn)生的隨機數(shù),它起到了一個認證的作用。后3個字段的內(nèi)容在實際傳輸過程中是以密文的形式傳送的。
當語音通信的一方收到另一方傳來的密文形式的地址通知消息后,它首先解密此消息,檢查隨機數(shù)字段是不是握手時產(chǎn)生的隨機數(shù)。如果不是,則丟棄此消息;如果是,說明此消息確實是從通信的另一方傳來的,因為只有參與本次語音通信的雙方才知道此隨機數(shù)。接下來,檢查消息序列號以判斷此消息是不是新的,如果不是,丟棄此消息;如果是,則檢查“當前地址”字段的值是不是正在使用的IP地址,如果不是,說明通信另一方的地址發(fā)生了改變,因此將釋放原來在舊地址上建立的通信連接,轉(zhuǎn)而在改變后的IP地址上建立新的語音通信連接。
我們規(guī)定通信雙方周期性地發(fā)送上述地址通知消息,每發(fā)送一個消息就把序列號加1。當通信終端在規(guī)定的時間內(nèi)沒有收到任何從另一方發(fā)來的新的正確的地址通知消息時,它就會釋放現(xiàn)有的語音通信連接。
綜上所述,本發(fā)明移動自組織網(wǎng)絡(luò)上語音通信(VoIP)的實現(xiàn)方法的總體步驟如下步驟S1語音通信的源節(jié)點產(chǎn)生一個32位的隨機數(shù),并使用本次語音通信目標節(jié)點的公鑰進行加密;步驟S2源節(jié)點訪問名字服務(wù)模塊,名字服務(wù)模塊查詢本地數(shù)據(jù)庫,如果找到相應(yīng)記錄,就返回目標節(jié)點IP地址,進入S3,如果沒有找到相應(yīng)記錄,進入S9;步驟S3源節(jié)點向名字服務(wù)模塊返回的IP地址發(fā)送一個單播查詢消息,以確認此地址的有效性,同時啟動定時器;單播查詢消息中包含了S1產(chǎn)生的加密隨機數(shù);步驟S4單播查詢到達目的地址后,相應(yīng)節(jié)點對照本節(jié)點的通信ID(Identifier)和查詢消息中的“目的端通信ID”字段,如果相同,進入S5;否則,進入S6;步驟S5該節(jié)點用自己的私鑰解密單播查詢消息中的加密隨機數(shù)得到隨機數(shù)的明文,然后利用單播查詢消息中指明的“源端通信ID”所對應(yīng)節(jié)點的公鑰值加密該隨機數(shù)的明文,并把結(jié)果放在單播查詢回復(fù)消息中,進入S7;步驟S6該節(jié)點用全“0”填充單播查詢回復(fù)消息中加密的“隨機數(shù)”字段;步驟S7該節(jié)點向語音呼叫的源節(jié)點發(fā)送一個單播查詢回復(fù)消息;步驟S8如果源節(jié)點在規(guī)定時間內(nèi)收到了單播查詢回復(fù)消息,它用本節(jié)點的私鑰解密回復(fù)消息中的加密隨機數(shù),并同在S1產(chǎn)生的隨機數(shù)進行比較,如果比較的結(jié)果相同,則把名字服務(wù)模塊返回的IP地址作為語音呼叫的目的地址,轉(zhuǎn)入S13;如果比較的結(jié)果不同,丟棄此回復(fù)消息,進入S9;如果源節(jié)點在規(guī)定時間內(nèi)沒有收到單播查詢回復(fù)消息,進入S9;步驟S9源節(jié)點向移動自組織網(wǎng)絡(luò)(Mobile AdHoc Network-MANET)內(nèi)發(fā)送一個廣播查詢消息,同時啟動定時器,廣播查詢消息中包含了在S1產(chǎn)生的加密隨機數(shù);步驟S10MANET中的每一個節(jié)點收到廣播查詢消息后,檢查自己的通信ID,如果自己正是呼叫的目的節(jié)點,則用自己的私鑰解密廣播查詢消息中的加密隨機數(shù)得到隨機數(shù)的明文,然后利用廣播查詢消息中指明的“源端通信ID”所對應(yīng)節(jié)點的公鑰值加密該隨機數(shù)的明文,并把結(jié)果放在廣播查詢回復(fù)消息中,然后向語音呼叫的源節(jié)點發(fā)送廣播查詢回復(fù)消息;步驟S11源節(jié)點偵聽端口,如果在定時器超時前收到了廣播查詢回復(fù)消息,它用本節(jié)點的私鑰解密回復(fù)消息中的加密隨機數(shù),并同在S1產(chǎn)生的隨機數(shù)進行比較,如果比較的結(jié)果相同,則用回復(fù)消息的源地址更新本地數(shù)據(jù)庫,并把此地址作為語音呼叫的目的地址,轉(zhuǎn)入S13;如果比較的結(jié)果不同,丟棄此回復(fù)消息,繼續(xù)偵聽;如果定時器超時,進入S12;步驟S12源節(jié)點認為本次語音呼叫的目標節(jié)點當前不在線,通話過程以“不在線”錯誤類型結(jié)束;步驟S13源節(jié)點在S8或者S11得到目標節(jié)點當前使用的準確IP地址后,在此地址上和目標節(jié)點建立語音通信連接;步驟S14通信連接建立進入通話狀態(tài)后,每一方需要周期性地向另一方發(fā)送加密的地址通知消息,以告知本方當前使用的地址信息;步驟S15當一方收到另一方傳來的地址通知消息后,它首先解密此消息,檢查隨機數(shù)字段是不是連接建立時共享的隨機數(shù);如果不是,則丟棄此消息,如果是,說明此消息確實是從通信的另一方傳來的;然后檢查消息序列號以判斷此消息是不是新的,如果不是,丟棄此消息,如果是,則檢查“當前地址”字段的值是不是正在使用的目的IP地址,如果不是,說明通信另一方的地址發(fā)生了改變,因此將釋放原來在舊地址上建立的通信連接,轉(zhuǎn)而在改變后的IP地址上建立新的語音通信連接;步驟S16當通信一方在規(guī)定的時間內(nèi)(一般為3-10個地址通知消息的發(fā)送周期)沒有收到任何從另一方發(fā)來的新的正確的地址通知消息時,它就會釋放現(xiàn)有的語音通信連接。
實現(xiàn)細節(jié)1.在握手階段采用非對稱加密算法RSA,同時為了減少大素數(shù)的生成時間只采用8位長度的密鑰。
2.當一個節(jié)點發(fā)出單播或者多播查詢消息,如果在2秒鐘之內(nèi)沒有收到應(yīng)答,就啟動相應(yīng)的超時操作。這個時間值的設(shè)定和網(wǎng)絡(luò)規(guī)模、節(jié)點處理速度等因素密切相關(guān)。
一般情況可按如下公式計算WAIT_TIME=4*NODE_PROCESS_TIME*NET_DIAMETERWAIT_TIME等待時間。
NODE_PROCESS_TIME節(jié)點處理時間,是節(jié)點處理報文和轉(zhuǎn)發(fā)報文的時間總和,一般為40ms。
NET_DIAMETERMANET中兩個結(jié)點間的最大跳數(shù),與網(wǎng)絡(luò)規(guī)模有關(guān)。
3.在通信過程中,VoIP通信節(jié)點每隔5秒鐘就向?qū)Ψ桨l(fā)送一個地址通知消息。從加解密效率因素考慮,采用對稱加密算法RC4來加密地址通知消息,而RC4算法所使用的密鑰就是在握手階段產(chǎn)生的隨機數(shù)。
4.規(guī)定當通信的一方在30秒的時間內(nèi)沒有收到從另一方發(fā)來的新的正確的地址通知消息時,它就切斷當前的語音通信連接。
比較本發(fā)明與傳統(tǒng)的VoIP處理機制,我們顯然可以看出本發(fā)明具有以下優(yōu)點1.在語音通信連接建立之前,通過一個握手的過程在通信雙方之間共享了一個隨機數(shù)。因為隨機數(shù)全部是以密文的方式發(fā)送的,所以MANET內(nèi)的其它節(jié)點都不知道此隨機數(shù),這個隨機數(shù)就可以作為語音通信的雙方相互認證的依據(jù)。
2.我們并沒有直接使用從本地數(shù)據(jù)庫中返回的IP地址來建立通信連接,而是試圖在使用它之前通過一個單播查詢確認它的有效性,以此來提高語音通信的可靠性。
3.利用本地數(shù)據(jù)庫中保存的地址信息發(fā)送單播查詢來代替每次通過廣播方式獲得目標節(jié)點的IP地址,可以減少移動自組網(wǎng)的廣播風暴,節(jié)省帶寬資源。
4.在通信過程中,當一個節(jié)點的地址發(fā)生了改變,它會及時地通過地址通知消息將改變后的新地址告訴通信的另一方。另一方解密此地址通知消息后,就可以取消原先在舊地址上建立的通信連接,轉(zhuǎn)而在新地址上建立新的語音通信連接,從而使得語音通信過程能夠自動切換到新地址上。因為地址通知消息中包含了隨機數(shù)字段,而這個隨機數(shù)又僅僅為語音通信的雙方所共享,所以當一方解密得到地址通知消息的明文后,如果看到了一個正確的隨機數(shù)的值,就可以斷定此地址通知消息確實是從通信的另一方發(fā)來的,地址通知消息中的隨機數(shù)字段起到了一個認證的作用。而在地址通知消息中增加了序列號的字段后,既可以抵抗重放攻擊,又可以解決在分組網(wǎng)絡(luò)中地址通知消息亂序到達的問題,即如果本次解密后地址通知消息的序列號值小于或者等于前一次正確收到的地址通知消息的序列號值,則證明此地址通知消息是一個舊消息,可以簡單地丟棄。
5.在通信過程中,如果通信雙方的地址依次發(fā)生改變一次或者多次,語音通信連接依照上述的方法仍然可以正確地保持。
6.在通信過程中,如果在某一個時刻通信雙方的地址同時發(fā)生了改變,雖然兩方發(fā)送的地址通知消息都無法到達對方,但因為我們規(guī)定當通信一方在規(guī)定的時間(30秒)內(nèi)沒有收到任何從另一方發(fā)來的新的正確的地址通知消息時,它就會釋放現(xiàn)有的語音通信連接,所以經(jīng)過一段時間后,每一方也會因為收不到來自對方的正確的地址通知消息而釋放連接,從而使得語音通信不會被長時間地錯誤保持,提高了可靠性。
圖1是語音呼叫源節(jié)點建立呼叫連接前的處理流程圖。
圖2是通話過程中通信節(jié)點處理收到的地址通知消息的流程圖。
具體實施例方式
圖1中各事件的處理步驟如下步驟S1.1語音呼叫的源節(jié)點產(chǎn)生一個32位的隨機數(shù),并使用本次語音通信目標節(jié)點的公鑰進行加密;步驟S1.2源節(jié)點訪問名字服務(wù)模塊,名字服務(wù)模塊查詢本地數(shù)據(jù)庫;步驟S1.3如果在本地數(shù)據(jù)庫中找到相應(yīng)記錄,就返回目標節(jié)點IP地址,進入S1.4,如果沒有找到相應(yīng)記錄,進入S1.10;步驟S1.4源節(jié)點向名字服務(wù)模塊返回的IP地址發(fā)送一個單播查詢消息,以確認此地址的有效性,同時啟動定時器,單播查詢消息中包含了S1.1產(chǎn)生的加密隨機數(shù);步驟S1.5如果源節(jié)點在規(guī)定時間內(nèi)收到了回復(fù)消息,進入S1.6;否則,進入S1.10;步驟S1.6源節(jié)點用本節(jié)點的私鑰解密回復(fù)消息中的加密隨機數(shù);步驟S1.7將解密后的隨機數(shù)與本節(jié)點在S1.1產(chǎn)生的隨機數(shù)進行比較,如果比較的結(jié)果相同,進入S1.8;如果比較的結(jié)果不同,進入S1.9;步驟S1.8把名字服務(wù)模塊返回的IP地址作為語音呼叫的目標地址;進入S1.18;步驟S1.9丟棄回復(fù)消息;步驟S1.10源節(jié)點向MANET網(wǎng)絡(luò)內(nèi)發(fā)送一個廣播查詢消息,同時啟動定時器,廣播查詢消息中包含了在S1.1產(chǎn)生的加密隨機數(shù);步驟S1.11源節(jié)點偵聽端口,如果在定時器超時前有廣播查詢回復(fù)消息到來,進入S1.13;如果定時器超時,進入S1.12;步驟S1.12目標節(jié)點不在線,語音通話過程結(jié)束;步驟S1.13源節(jié)點用本節(jié)點的私鑰解密回復(fù)消息中的加密隨機數(shù);步驟S1.14將解密后的隨機數(shù)與本節(jié)點在S1.1產(chǎn)生的隨機數(shù)進行比較,如果比較的結(jié)果相同,進入S1.16;如果比較的結(jié)果不同,進入S1.15;步驟S1.15丟棄回復(fù)消息,重新回到S1.11;步驟S1.16利用回復(fù)消息的源IP地址更新本地數(shù)據(jù)庫;步驟S1.17把該回復(fù)消息的源IP地址作為語音呼叫的目標地址;步驟S1.18根據(jù)S1.8或者S1.17得到的目標地址建立語音通話連接。
圖2中各事件處理步驟如下步驟S2.1通信節(jié)點收到地址通知消息;步驟S2.2通信節(jié)點用連接建立階段協(xié)商好的隨機數(shù)作為密鑰解密此地址通知消息;步驟S2.3檢查隨機數(shù)字段的值,如果與在連接建立階段通信雙方共享的隨機數(shù)相同,進入S2.4,否則,進入S2.7;步驟S2.4檢查序列號字段,如果是新消息(該值大于前一次正確收到的地址通知消息的序列號),則將該序列號值記錄下來,以替代前一次正確收到的地址通知消息的序列號值,進入S2.5,否則,進入S2.7;
步驟S2.5檢查當前地址字段,如果發(fā)現(xiàn)通信另一方的IP地址發(fā)生了變化,進入S2.6,否則,進入S2.7;步驟S2.6切斷在舊地址上的語音通信連接,轉(zhuǎn)而在改變后的IP地址上建立新的語音通信連接;步驟S2.7丟棄消息。
權(quán)利要求
1.一種在移動自組織網(wǎng)絡(luò)中語音通信方法,其特征在于,每個節(jié)點都維護本節(jié)點的歷史通話記錄,發(fā)起語音呼叫時,源節(jié)點首先搜尋歷史記錄,如果找到目標節(jié)點的相應(yīng)地址,就向此地址發(fā)送單播查詢消息以確認其有效性,如果地址有效,就在此地址上建立通信連接,如果地址無效或者歷史記錄中沒有找到相應(yīng)地址,就通過廣播查詢消息得到目標節(jié)點當前真實有效的IP地址,從而可靠地建立通信連接;在語音通話過程中,通信雙發(fā)周期性地互發(fā)加密過的地址通知消息,當一方的IP地址發(fā)生改變后,另一方通過解密地址通知消息能夠及時地做出調(diào)整,從而將語音通信連接自動切換到改變后的新地址上,當通信雙方的地址同時發(fā)生改變時,通信節(jié)點也能夠感知這種情況,并及時地釋放連接,保證語音通話的可靠性。
2.根據(jù)權(quán)利要求1所述的在移動自組織網(wǎng)絡(luò)上語音通信的方法,其特征是每一個通信節(jié)點都維護一個本地數(shù)據(jù)庫,數(shù)據(jù)庫中保存著本節(jié)點的歷史通話記錄,每一條記錄都是<通信ID,IP地址>的二元組,通話時,源節(jié)點首先訪問本地數(shù)據(jù)庫查找相應(yīng)的記錄,如果找到了相關(guān)記錄就向該記錄中的地址發(fā)送單播查詢消息以確認地址的有效性,如果源節(jié)點在規(guī)定時間內(nèi)收到回復(fù)消息說明該地址真實有效,則根據(jù)此地址建立通信連接,否則,發(fā)送廣播查詢消息來得到目標節(jié)點的當前地址;在單播和廣播查詢消息中都包含了源節(jié)點為本次語音通話產(chǎn)生的隨機數(shù),該隨機數(shù)用語音通信目標節(jié)點的公鑰進行了加密,所以只有目標節(jié)點才能正確解密隨機數(shù),源節(jié)點可以通過此隨機數(shù)辨別回復(fù)消息的真實性,同時經(jīng)過在節(jié)點之間發(fā)送查詢和回復(fù)消息這么一個握手過程,在本次語音通信的源節(jié)點和目標節(jié)點之間就共享了一個隨機數(shù),這個隨機數(shù)可以用作通信過程中的加密密鑰和認證依據(jù);在通信連接建立之后的通話過程中,要求通信雙方周期性地互發(fā)地址通知消息,地址通知消息使用握手階段協(xié)商好的隨機數(shù)作為密鑰進行了加密,它包含了序列號字段可以對抗重放攻擊和亂序到達,它還包含了隨機數(shù)字段可以使節(jié)點認證消息的真?zhèn)?,當一個節(jié)點的地址發(fā)生了變化,它就通過地址通知消息及時地將變化后的地址發(fā)給對方,另一方解密消息后就可以取消原先在舊地址上建立的連接轉(zhuǎn)而在新地址上建立語音通信連接;此外,規(guī)定當一方在規(guī)定的時間內(nèi)沒有收到另一方發(fā)來的新的正確的地址通知消息時會釋放當前的語音通信連接,這樣就保證了即使通信雙方的地址同時發(fā)生了改變,通信連接也會被及時釋放,從而避免了語音通信長時間地被錯誤保持,提高了語音通信的可靠性。
3.根據(jù)權(quán)利要求1所述的移動自組織網(wǎng)絡(luò)上語音通信的實現(xiàn)方法,其具體步驟如下步驟S1語音通信的源節(jié)點產(chǎn)生一個32位的隨機數(shù),并使用本次語音通信目標節(jié)點的公鑰進行加密;步驟S2源節(jié)點訪問名字服務(wù)模塊,名字服務(wù)模塊查詢本地數(shù)據(jù)庫,如果找到相應(yīng)記錄,就返回目標節(jié)點IP地址,進入S3,如果沒有找到相應(yīng)記錄,進入S9;步驟S3源節(jié)點向名字服務(wù)模塊返回的IP地址發(fā)送一個單播查詢消息,以確認此地址的有效性,同時啟動定時器;單播查詢消息中包含了S1產(chǎn)生的加密隨機數(shù);步驟S4單播查詢到達目的地址后,相應(yīng)節(jié)點對照本節(jié)點的通信ID和查詢消息中的“目的端通信ID”字段,如果相同,進入S5;否則,進入S6;步驟S5該節(jié)點用自己的私鑰解密單播查詢消息中的加密隨機數(shù)得到隨機數(shù)的明文,然后利用單播查詢消息中指明的“源端通信ID”所對應(yīng)節(jié)點的公鑰值加密該隨機數(shù)的明文,并把結(jié)果放在單播查詢回復(fù)消息中,進入S7;步驟S6該節(jié)點用全“0”填充單播查詢回復(fù)消息中加密的“隨機數(shù)”字段;步驟S7該節(jié)點向語音呼叫的源節(jié)點發(fā)送一個單播查詢回復(fù)消息;步驟S8如果源節(jié)點在規(guī)定時間內(nèi)收到了單播查詢回復(fù)消息,它用本節(jié)點的私鑰解密回復(fù)消息中的加密隨機數(shù),并同在S1產(chǎn)生的隨機數(shù)進行比較,如果比較的結(jié)果相同,則把名字服務(wù)模塊返回的IP地址作為語音呼叫的目的地址,轉(zhuǎn)入S13;如果比較的結(jié)果不同,丟棄此回復(fù)消息,進入S9;如果源節(jié)點在規(guī)定時間內(nèi)沒有收到單播查詢回復(fù)消息,進入S9;步驟S9源節(jié)點向移動自組織網(wǎng)絡(luò)(MANET)內(nèi)發(fā)送一個廣播查詢消息,同時啟動定時器,廣播查詢消息中包含了在S1產(chǎn)生的加密隨機數(shù);步驟S10MANET中的每一個節(jié)點收到廣播查詢消息后,檢查自己的通信ID,如果自己正是呼叫的目的節(jié)點,則用自己的私鑰解密廣播查詢消息中的加密隨機數(shù)得到隨機數(shù)的明文,然后利用廣播查詢消息中指明的“源端通信ID”所對應(yīng)節(jié)點的公鑰值加密該隨機數(shù)的明文,并把結(jié)果放在廣播查詢回復(fù)消息中,然后向語音呼叫的源節(jié)點發(fā)送廣播查詢回復(fù)消息;步驟S11源節(jié)點偵聽端口,如果在定時器超時前收到了廣播查詢回復(fù)消息,它用本節(jié)點的私鑰解密回復(fù)消息中的加密隨機數(shù),并同在S1產(chǎn)生的隨機數(shù)進行比較,如果比較的結(jié)果相同,則用回復(fù)消息的源地址更新本地數(shù)據(jù)庫,并把此地址作為語音呼叫的目的地址,轉(zhuǎn)入S13;如果比較的結(jié)果不同,丟棄此回復(fù)消息,繼續(xù)偵聽;如果定時器超時,進入S12;步驟S12源節(jié)點認為本次語音呼叫的目標節(jié)點當前不在線,通話過程以“不在線”錯誤類型結(jié)束;步驟S13源節(jié)點在S8或者S11得到目標節(jié)點當前使用的準確IP地址后,在此地址上和目標節(jié)點建立語音通信連接;步驟S14通信連接建立進入通話狀態(tài)后,每一方需要周期性地向另一方發(fā)送加密的地址通知消息,以告知本方當前使用的地址信息;步驟S15當一方收到另一方傳來的地址通知消息后,它首先解密此消息,檢查隨機數(shù)字段是不是連接建立時共享的隨機數(shù);如果不是,則丟棄此消息,如果是,說明此消息確實是從通信的另一方傳來的;然后檢查消息序列號以判斷此消息是不是新的,如果不是,丟棄此消息,如果是,則檢查“當前地址”字段的值是不是正在使用的目的IP地址,如果不是,說明通信另一方的地址發(fā)生了改變,因此將釋放原來在舊地址上建立的通信連接,轉(zhuǎn)而在改變后的IP地址上建立新的語音通信連接;步驟S16當通信一方在規(guī)定的時間內(nèi)沒有收到任何從另一方發(fā)來的新的正確的地址通知消息時,它就會釋放現(xiàn)有的語音通信連接。
4.根據(jù)權(quán)利要求1所述的移動自組織網(wǎng)絡(luò)上語音通信的實現(xiàn)方法,語音呼叫源節(jié)點建立呼叫連接前的具體步驟步驟S1.1語音呼叫的源節(jié)點產(chǎn)生一個32位的隨機數(shù),并使用本次語音通信目標節(jié)點的公鑰進行加密;步驟S1.2源節(jié)點訪問名字服務(wù)模塊,名字服務(wù)模塊查詢本地數(shù)據(jù)庫;步驟S1.3如果在本地數(shù)據(jù)庫中找到相應(yīng)記錄,就返回目標節(jié)點IP地址,進入S1.4,如果沒有找到相應(yīng)記錄,進入S1.10;步驟S1.4源節(jié)點向名字服務(wù)模塊返回的IP地址發(fā)送一個單播查詢消息,以確認此地址的有效性,同時啟動定時器,單播查詢消息中包含了S1.1產(chǎn)生的加密隨機數(shù);步驟S1.5如果源節(jié)點在規(guī)定時間內(nèi)收到了回復(fù)消息,進入S1.6;否則,進入S1.10;步驟S1.6源節(jié)點用本節(jié)點的私鑰解密回復(fù)消息中的加密隨機數(shù);步驟S1.7將解密后的隨機數(shù)與本節(jié)點在S1.1產(chǎn)生的隨機數(shù)進行比較,如果比較的結(jié)果相同,進入S1.8;如果比較的結(jié)果不同,進入S1.9;步驟S1.8把名字服務(wù)模塊返回的IP地址作為語音呼叫的目標地址;進入S1.18;步驟S1.9丟棄回復(fù)消息;步驟S1.10源節(jié)點向MANET網(wǎng)絡(luò)內(nèi)發(fā)送一個廣播查詢消息,同時啟動定時器,廣播查詢消息中包含了在S1.1產(chǎn)生的加密隨機數(shù);步驟S1.11源節(jié)點偵聽端口,如果在定時器超時前有廣播查詢回復(fù)消息到來,進入S1.13;如果定時器超時,進入S1.12;步驟S1.12目標節(jié)點不在線,語音通話過程結(jié)束;步驟S1.13源節(jié)點用本節(jié)點的私鑰解密回復(fù)消息中的加密隨機數(shù);步驟S1.14將解密后的隨機數(shù)與本節(jié)點在S1.1產(chǎn)生的隨機數(shù)進行比較,如果比較的結(jié)果相同,進入S1.16;如果比較的結(jié)果不同,進入S1.15;步驟S1.15丟棄回復(fù)消息,重新回到S1.11;步驟S1.16利用回復(fù)消息的源IP地址更新本地數(shù)據(jù)庫;步驟S1.17把該回復(fù)消息的源IP地址作為語音呼叫的目標地址;步驟S1.18根據(jù)S1.8或者S1.17得到的目標地址建立語音通話連接。
5.據(jù)權(quán)利要求1所述的移動自組織網(wǎng)絡(luò)上語音通信的實現(xiàn)方法,通話過程中通信節(jié)點處理收到的地址通知消息的具體步驟步驟S2.1通信節(jié)點收到地址通知消息;步驟S2.2通信節(jié)點用連接建立階段協(xié)商好的隨機數(shù)作為密鑰解密此地址通知消息;步驟S2.3檢查隨機數(shù)字段的值,如果與在連接建立階段通信雙方共享的隨機數(shù)相同,進入S2.4,否則,進入S2.7;步驟S2.4檢查序列號字段,如果是新消息(該值大于前一次正確收到的地址通知消息的序列號),則將該序列號值記錄下來,以替代前一次正確收到的地址通知消息的序列號值,進入S2.5,否則,進入S2.7;步驟S2.5檢查當前地址字段,如果發(fā)現(xiàn)通信另一方的IP地址發(fā)生了變化,進入S2.6,否則,進入S2.7;步驟S2.6切斷在舊地址上的語音通信連接,轉(zhuǎn)而在改變后的IP地址上建立新的語音通信連接;步驟S2.7丟棄消息。
全文摘要
本發(fā)明屬于通信網(wǎng)絡(luò)應(yīng)用技術(shù)領(lǐng)域,是移動自組織網(wǎng)絡(luò)上語音通信的實現(xiàn)方法,在IP地址動態(tài)配置情況下,移動自組織網(wǎng)絡(luò)的節(jié)點地址具有可變更性,本發(fā)明能夠消除移動自組織網(wǎng)絡(luò)上地址變更對語音通信的影響。方法的步驟包括在連接建立階段,通過一個握手過程得到目標節(jié)點當前使用的真實IP地址,并在通信雙方之間共享了一個隨機數(shù)用于通信過程中的認證和加密。在完成連接建立進入通話狀態(tài)后,每一方必須周期性地向另一方發(fā)送加密的地址通知消息,用來告知本方當前使用的IP地址,以此來保證能將本節(jié)點的地址變化情況及時地通知通信另一方,實現(xiàn)語音通信的自動切換,從而提高通信的可靠性。
文檔編號H04L12/28GK1585329SQ200410046389
公開日2005年2月23日 申請日期2004年6月8日 優(yōu)先權(quán)日2004年6月8日
發(fā)明者孫毅, 方更法, 石晶林 申請人:中國科學(xué)院計算技術(shù)研究所