第二有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)的哈希值與所述第一有序哈希樹(shù)中所述樹(shù) 節(jié)點(diǎn)的哈希值不相等,則W所述第二有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)為根節(jié)點(diǎn)形成第=子樹(shù),W 所述第一有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)為根節(jié)點(diǎn)形成第四子樹(shù),遍歷所述第=子樹(shù)和所述第四 子樹(shù)除所述根節(jié)點(diǎn)之外的樹(shù)節(jié)點(diǎn),根據(jù)所述第=子樹(shù)和所述第四子樹(shù)中除所述根節(jié)點(diǎn)之外 的樹(shù)節(jié)點(diǎn)的相對(duì)路徑和哈希值,確定所述RP端需同步的文件,并遍歷所述第一有序哈希樹(shù) 中所述樹(shù)節(jié)點(diǎn)和所述第二有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)的后繼兄弟節(jié)點(diǎn),根據(jù)所述第一有序哈 希樹(shù)中所述樹(shù)節(jié)點(diǎn)的后繼兄弟節(jié)點(diǎn)和所述第二有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)的后繼兄弟節(jié)點(diǎn) 的相對(duì)路徑和哈希值,確定所述RP端需同步的文件。
[0092] 具體來(lái)說(shuō),如圖5A、5B所示,首先比較所述第一有序哈希樹(shù)W及所述第二有序哈 希樹(shù)的根節(jié)點(diǎn)A和A'的哈希值,若哈希值相同,則說(shuō)明RPKI資料庫(kù)和RP端文件相同,無(wú)需 同步,算法結(jié)束;若哈希值不同,則進(jìn)一步遍歷所述第一有序哈希樹(shù)W及所述第二有序哈希 樹(shù)除所述根節(jié)點(diǎn)之外的樹(shù)節(jié)點(diǎn),根據(jù)所述第一有序哈希樹(shù)和所述第二有序哈希樹(shù)中除所述 根節(jié)點(diǎn)之外的樹(shù)節(jié)點(diǎn)的相對(duì)路徑和哈希值,確定所述RP端需同步的文件。
[0093] 由于第一有序哈希樹(shù)和所述第二有序哈希樹(shù)中根節(jié)點(diǎn)的頭子節(jié)點(diǎn)分別為樹(shù)節(jié)點(diǎn)C 和樹(shù)節(jié)點(diǎn)B',因此比較所述第一有序哈希樹(shù)和所述第二有序哈希樹(shù)中樹(shù)節(jié)點(diǎn)C和樹(shù)節(jié)點(diǎn)B' 的相對(duì)路徑;若樹(shù)節(jié)點(diǎn)B'的相對(duì)路徑小于樹(shù)節(jié)點(diǎn)C的相對(duì)路徑,則W樹(shù)節(jié)點(diǎn)B'為根節(jié)點(diǎn)形 成第一子樹(shù),確定所述第一子樹(shù)對(duì)應(yīng)的文件為所述RP端需添加的文件;RPKI資料庫(kù)端的設(shè) 備將所述第一子樹(shù)對(duì)應(yīng)的文件發(fā)送給RP端,RP端同步后得到的新的第一有序哈希樹(shù)如圖 5C所示;將樹(shù)節(jié)點(diǎn)C作為樹(shù)節(jié)點(diǎn)B'的后繼兄弟節(jié)點(diǎn),繼續(xù)遍歷所述第一有序哈希樹(shù)中所述 樹(shù)節(jié)點(diǎn)B'的后繼兄弟節(jié)點(diǎn)C和所述第二有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)B'的后繼兄弟節(jié)點(diǎn)C', 根據(jù)所述樹(shù)節(jié)點(diǎn)B'的后繼兄弟節(jié)點(diǎn)C和所述樹(shù)節(jié)點(diǎn)B'的后繼兄弟節(jié)點(diǎn)C'的相對(duì)路徑和 哈希值,確定所述RP端需同步的文件;
[0094] 圖6A為本發(fā)明方法又一實(shí)施例的第一有序哈希樹(shù)示意圖。圖6B為本發(fā)明方法又 一實(shí)施例的第二有序哈希樹(shù)示意圖。圖6C為圖6A中經(jīng)過(guò)同步后的第一有序哈希樹(shù)示意圖。 如圖6A、6B所示,由于第一有序哈希樹(shù)和所述第二有序哈希樹(shù)中根節(jié)點(diǎn)的頭子節(jié)點(diǎn)分別為 樹(shù)節(jié)點(diǎn)B和樹(shù)節(jié)點(diǎn)C',因此比較所述第一有序哈希樹(shù)和所述第二有序哈希樹(shù)中樹(shù)節(jié)點(diǎn)B和 樹(shù)節(jié)點(diǎn)C'的相對(duì)路徑;若所述第二有序哈希樹(shù)中樹(shù)節(jié)點(diǎn)C'的相對(duì)路徑大于所述第一有序 哈希樹(shù)中樹(shù)節(jié)點(diǎn)B的相對(duì)路徑,則W所述第一有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)B為根節(jié)點(diǎn)形成第 二子樹(shù),確定所述第二子樹(shù)對(duì)應(yīng)的文件為所述RP端需刪除的文件;將所述樹(shù)節(jié)點(diǎn)B為根節(jié) 點(diǎn)形成的第二子樹(shù)刪除后,將所述第二子樹(shù)的根節(jié)點(diǎn)的后繼兄弟節(jié)點(diǎn)作為原第一有序哈希 樹(shù)中W所述根節(jié)點(diǎn)為后繼兄弟節(jié)點(diǎn)的樹(shù)節(jié)點(diǎn)的后繼兄弟節(jié)點(diǎn),RP端新的第一有序哈希樹(shù)如 圖6C所示;遍歷所述新的第一有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)的后繼兄弟節(jié)點(diǎn)和所述第二有序 哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)C',根據(jù)所述新的第一有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)的后繼兄弟節(jié)點(diǎn)和所 述第二有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)C'的相對(duì)路徑和哈希值,確定所述RP端需同步的文件; [00巧]如圖5A、5C所示,由于RP端已將W樹(shù)節(jié)點(diǎn)B'為根節(jié)點(diǎn)形成的第一子樹(shù)添加,因此 進(jìn)一步比較所述第一有序哈希樹(shù)和所述第二有序哈希樹(shù)中樹(shù)節(jié)點(diǎn)C和樹(shù)節(jié)點(diǎn)C'的相對(duì)路 徑;若所述第二有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)C'的相對(duì)路徑等于所述第一有序哈希樹(shù)中所述 樹(shù)節(jié)點(diǎn)C的相對(duì)路徑,則比較所述第二有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)C'和所述第一有序哈希樹(shù) 中所述樹(shù)節(jié)點(diǎn)C的哈希值,根據(jù)所述哈希值確定所述RP端需同步的文件。
[0096] 具體來(lái)說(shuō),若所述第二有序哈希樹(shù)中樹(shù)節(jié)點(diǎn)C'的哈希值與所述第一有序哈希樹(shù)中 樹(shù)節(jié)點(diǎn)C的哈希值相等,則遍歷所述第一有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)C和所述第二有序哈希 樹(shù)中樹(shù)節(jié)點(diǎn)C'的后繼兄弟節(jié)點(diǎn),根據(jù)所述第一有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)的后繼兄弟節(jié)點(diǎn)和 所述第二有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)的后繼兄弟節(jié)點(diǎn)的相對(duì)路徑和哈希值,確定所述RP端 需同步的文件,即重復(fù)執(zhí)行上述方法步驟,進(jìn)行遞歸遍歷;
[0097] 如圖5A、5C所示,所述第二有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)C'的哈希值與所述第一有序 哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)C的哈希值不相等,則W所述第二有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)C'為根節(jié) 點(diǎn)形成第=子樹(shù)T3,W所述第一有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)C為根節(jié)點(diǎn)形成第四子樹(shù)T4,遍 歷所述第=子樹(shù)T3和所述第四子樹(shù)T4除所述根節(jié)點(diǎn)(C和C')之外的樹(shù)節(jié)點(diǎn),根據(jù)所述 第=子樹(shù)T3和所述第四子樹(shù)T4中除所述根節(jié)點(diǎn)之外的樹(shù)節(jié)點(diǎn)的相對(duì)路徑和哈希值,確定 所述RP端需同步的文件,并遍歷所述第一有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)C和所述第二有序哈希 樹(shù)中所述樹(shù)節(jié)點(diǎn)C'的后繼兄弟節(jié)點(diǎn),根據(jù)所述第一有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)的后繼兄弟節(jié) 點(diǎn)和所述第二有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)的后繼兄弟節(jié)點(diǎn)的相對(duì)路徑和哈希值,確定所述RP 端需同步的文件,即重復(fù)執(zhí)行上述方法步驟,進(jìn)行遞歸遍歷。
[0098] 可選的,比較所述第一有序哈希樹(shù)和所述第二有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)的相對(duì)路 徑之前,還包括:
[0099] 確定所述第一有序哈希樹(shù)和所述第二有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)為非空節(jié)點(diǎn)。
[0100] 可選的,所述方法,還包括: 陽(yáng)101] 若所述第一有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)為空節(jié)點(diǎn),所述第二有序哈希樹(shù)中所述樹(shù)節(jié) 點(diǎn)為非空節(jié)點(diǎn),則W所述第二有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)為根節(jié)點(diǎn)形成第五子樹(shù),確定所述 第五子樹(shù)對(duì)應(yīng)的文件為所述RP端需添加的文件,并將所述第五子樹(shù)中根節(jié)點(diǎn)作為所述第 一有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)形成新的第一有序哈希樹(shù),并遍歷所述新的第一有序哈希樹(shù)中 所述樹(shù)節(jié)點(diǎn)和所述第二有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)的后繼兄弟節(jié)點(diǎn),根據(jù)所述新的第一有序 哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)的后繼兄弟節(jié)點(diǎn)和所述第二有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)的后繼兄弟節(jié) 點(diǎn)的相對(duì)路徑和哈希值,確定所述RP端需同步的文件;
[0102] 若所述第一有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)為非空節(jié)點(diǎn),所述第二有序哈希樹(shù)中所述樹(shù) 節(jié)點(diǎn)為空節(jié)點(diǎn),則W所述第一有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)為根節(jié)點(diǎn)形成第六子樹(shù),確定所述 第六子樹(shù)對(duì)應(yīng)的文件為所述RP端需刪除的文件,并將所述第六子樹(shù)中根節(jié)點(diǎn)的后繼兄弟 節(jié)點(diǎn)作為所述第一有序哈希樹(shù)中W所述根節(jié)點(diǎn)為后繼兄弟節(jié)點(diǎn)的樹(shù)節(jié)點(diǎn)的后繼兄弟節(jié)點(diǎn) 形成新的第一有序哈希樹(shù),并遍歷所述新的第一有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)和所述第二有序 哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)的后繼兄弟節(jié)點(diǎn),根據(jù)所述新的第一有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)的后繼 兄弟節(jié)點(diǎn)和所述第二有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)的后繼兄弟節(jié)點(diǎn)的相對(duì)路徑和哈希值,確定 所述RP端需同步的文件。
[0103] 具體來(lái)說(shuō),如圖5A、5B所示,在比較所述第一有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)B和所述第 二有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)B'的相對(duì)路徑之前,首先要確定所述樹(shù)節(jié)點(diǎn)B和所述樹(shù)節(jié)點(diǎn)B' 為非空節(jié)點(diǎn);若均為空節(jié)點(diǎn),則繼續(xù)遞歸遍歷所述樹(shù)節(jié)點(diǎn)B和所述樹(shù)節(jié)點(diǎn)B'的后繼兄弟節(jié) 點(diǎn),對(duì)該后繼兄弟節(jié)點(diǎn)執(zhí)行相同步驟;
[0104] 若所述第一有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)B為空節(jié)點(diǎn),所述第二有序哈希樹(shù)中所述樹(shù) 節(jié)點(diǎn)B'為非空節(jié)點(diǎn),則W所述第二有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)B'為根節(jié)點(diǎn)形成第五子樹(shù),確 定所述第五子樹(shù)對(duì)應(yīng)的文件為所述RP端需添加的文件;并將該第五子樹(shù)對(duì)應(yīng)的文件發(fā)送 給RP端,將該第五子樹(shù)的根節(jié)點(diǎn)替換原樹(shù)節(jié)點(diǎn)B;后續(xù)再遞歸遍歷所述樹(shù)節(jié)點(diǎn)B和所述樹(shù) 節(jié)點(diǎn)B'的后繼兄弟節(jié)點(diǎn);
[01化]若所述第一有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)為非空節(jié)點(diǎn),所述第二有序哈希樹(shù)中所述樹(shù) 節(jié)點(diǎn)為空節(jié)點(diǎn),則W所述第一有序哈希樹(shù)中所述樹(shù)節(jié)點(diǎn)為根節(jié)點(diǎn)形成第六子樹(shù),確定所述 第六子樹(shù)對(duì)應(yīng)的文件為所述RP端需刪除的文件,并將所述第六子樹(shù)中根節(jié)點(diǎn)的后繼兄弟 節(jié)點(diǎn)作為所述第一有序哈希樹(shù)中W所述根節(jié)點(diǎn)為后繼兄弟節(jié)點(diǎn)的樹(shù)節(jié)點(diǎn)的后繼兄弟節(jié)點(diǎn) 形成新的第一有序哈希樹(shù);后續(xù)再遞歸遍歷所述樹(shù)節(jié)點(diǎn)B和所述樹(shù)節(jié)點(diǎn)B'的后繼兄弟節(jié) 點(diǎn)。
[0106] 上述【具體實(shí)施方式】中,遍歷所述第一有序哈希樹(shù)W及所述第二有序哈希樹(shù),根據(jù) 所述第一有序哈希樹(shù)和所述第二有序哈希樹(shù)中樹(shù)節(jié)點(diǎn)的信息,具體是相對(duì)路徑和哈希值, 確定所述RP端需同步的文件,與現(xiàn)有技術(shù)相比,無(wú)需讀取數(shù)量龐大的文件,也無(wú)需將文件 進(jìn)行分塊,直接獲取目錄對(duì)應(yīng)的有序哈希樹(shù),遍歷有序哈希樹(shù)的樹(shù)節(jié)點(diǎn),比現(xiàn)有的分塊處理 能夠更直接快速的查找到需同步的文件,同步數(shù)據(jù)時(shí)的效率較高,而且讀取目錄對(duì)應(yīng)的有 序哈希樹(shù)比讀取文件占用的I/O資源少的多。 陽(yáng)107] 在本發(fā)明RPKI文件的同步方法另一實(shí)施例中,在上述實(shí)施方式的基礎(chǔ)上,進(jìn)一步 的,對(duì)同步算法進(jìn)行詳細(xì)闡述:
[0108] 算法輸入:RPKI資料庫(kù)有序哈希樹(shù)HT,RP端有序哈希樹(shù)HT' 陽(yáng)109] 算法輸出:差異文件列表list
[0110]fimlDiff化T,HT') 陽(yáng)111] 步驟1、令list為HT和HT'比較所得的文件變化列表,root為HT的根節(jié)點(diǎn),root' 為HT'的根節(jié)點(diǎn),若root,hash=root' .hash,進(jìn)入步驟3,否則進(jìn)入步驟2 ;
[0112]步驟2、令node=root,firStQiiId,node,=root,.firStQiiId,對(duì)node和node' 進(jìn)行步驟2.I~2. 8的處理: 陽(yáng) 11引 步驟 2. 1、若node、node,均為NtXL,node=node.nextSibling,node,=node,.nextSibling,進(jìn)入步驟2. 1,進(jìn)行步驟2.I~2. 8的處理;
[0114] 步驟2. 2、若node=NU化并且node'聲NU化,則令SUbHT為HT'中根節(jié)點(diǎn)為node' 的子樹(shù),執(zhí)行子過(guò)程delete(subHT,list) ,node' =node' .nextSibling,進(jìn)入步驟 2. 1,進(jìn) 行步驟2.I~2. 8的處理; 陽(yáng)115] 步驟2. 3、若node聲NU化并且node' =NULL則令SUbHT為HT中根節(jié)點(diǎn)為node的子樹(shù),執(zhí)行子過(guò)程add(subHT,list),node=node.nextSibling,進(jìn)入步驟2. 1,進(jìn)行步驟 2. 1~2. 8的處理;
[0116] 步驟 2. 4、若node聲NtXL并且node'聲NtXL,且若node.p<node' .P,則令SiibHT 為HT中根節(jié)點(diǎn)為node的子樹(shù),執(zhí)行子過(guò)程add(subHT,list),node=node.nextSibling, 進(jìn)入步驟2.I,進(jìn)行步驟2.I~2. 8的處理;
[0117] 步驟 2. 5、若node聲NtXL并且node'聲NtXL,且若node.p〉node' .P,則令SiibHT 為HT'中根節(jié)點(diǎn)為node'的子樹(shù),執(zhí)行子過(guò)程delete(subHT,list),node' =node'. nextSibling,進(jìn)入步驟2. 1,進(jìn)行步驟2.I~2. 8的處理;
[0118] 步驟 2. 6、若node聲NtXL并且node'聲NtXL,且若node.P=node'.P并且node, hash=node' .hash,則進(jìn)入步驟 2. 8 ;
[0119] 步驟 2. 7、若node聲NtXL并且node'聲NtXL,且若node.P=node'.P并且node, hash聲node' .hash,則令subHT為HT中根節(jié)點(diǎn)為node的子樹(shù),subHT'為HT'中根節(jié)點(diǎn)為 node'的子樹(shù),執(zhí)行子過(guò)程update(subHT,subHT' ,list),進(jìn)入步驟2. 8 ;
[0120] 步驟 2. 8、令node=node.nextSibling,node,=node,.nextSibling,進(jìn)入步驟