宋靜靜
摘 要:大多數結構化P2P網絡都利用分布式哈希表(DHT)來實現無管理、容錯的覆蓋網絡,并保證在O(log N)跳內將消息發送到目的地。網絡中節點的頻繁加入和離開不僅會產生巨大的維護開銷,而且節點的各種行為和資源也會損害網絡的性能和安全性。本文通過結合不同的網絡拓撲感知技術,構建了一個與Internet拓撲結構緊密匹配的覆蓋網絡。基于這種結構的P2P系統不僅路由效率高,而且即使在高度動態的環境下,維護開銷也很低。
一、引言
我們先討論如何構建一個與互聯網拓撲結構非常接近的覆蓋層,然后在此覆蓋層的基礎上構建一個查找效率高、維護開銷低、可用性高的P2P系統。
覆蓋結構背后的本質是根據節點在Internet中的物理網絡位置來組織節點。所有節點都可以按其自治系統(As)軌跡劃分為組。由于Internet是由AS組成的,每個AS都是一個單一管理權限下的網絡,因此它為P2P節點提供了一個良好的邊界。與Internet中的AS一樣,組是覆蓋中路由和組織節點的基本單元。但是,在許多情況下,僅按節點作為駐留來劃分節點可能過于粗糙。
二、P2P覆蓋網絡
為了支持類似DHT的ID查找操作,在覆蓋中采用了類似的ID機制。與當前的DHT設計一樣,網絡中的每個對象都被分配了一個128位的ID。使用兩級映射機制,而不是像當前網絡那樣將一小部分對象映射到每個節點。如前所述,我們的覆蓋層是由類似的組構成的。通常一個組包含10到50個節點。每個組都會選擇一個具有良好網絡帶寬和可用性的領導者。同時,每個組都會分配一個32位的Steam ID。這些ID在第一次出現在覆蓋圖中時隨機分配給每個組。
組是存儲對象的基本單元。兩個對象副本將保存在一個組中,以提高可靠性和可用性。一個副本保存在組的領導者中,以響應所有其他對等方的查詢。許多不穩定的節點加入到系統路由中,只有選擇了帶寬和可用性都比較好的節點才能成為覆蓋層路由的代理。通常,3個代理可以提供足夠的可用性和性能,而不會影響其主機。
由于覆蓋層與Internet拓撲結構非常匹配,因此與當前的DHT設計相比,路由機制實際上很簡單。由于網絡中使用了兩級映射機制,路由表由兩部分組成。其中一個記錄網絡中每個組的ID和代理信息,稱為路由表。此表在每個代理和引導程序中維護,用于為正常節點路由消息。另一個記錄組中所有組的ID和領導信息,稱為交付表。給定一個對象ID,責任組及其代理可以通過路由表定位。消息將直接發送到目標組的代理,而不是逐跳接近目標組。當消息到達該代理時,它只是由傳遞表轉發給響應組領導。最后,領導解析并回復查詢。
三、節點維護
節點的加入和退出過程比較簡單。當一個新節點加入網絡時,它的軌跡可以由它的IP地址決定。通過網絡內的任何節點,加入請求將轉發到該AS的代理。在測量其地標向量之后,節點根據網絡的局部性加入一個組。如果一個組節點太多,則根據節點的網絡位置分成兩個組。如果加入節點是AS中的第一個節點,則加入請求將轉發到附近的物理組。節點最初成為組內的一個隊友,稱為母組,而不是組成一個新組。
對于正常節點,組自動容忍其離開或失敗。如果一個領導或代理節點離開,將選擇一個新的機制。在P2P環境下,不僅每個節點的離開和失敗都是不可預測的,而且每個節點都可以任意的加入和離開網絡,整個網絡也是高度動態的,這對所有P2P覆蓋網絡來說都是一個挑戰。
盡管代理和領導被認為比普通節點的更可用,但他們不是維護良好的服務器。這里使用一個環協議來監視它們。例如,所有的領導節點都形成一個環作為它們的ID關系,并且每秒鐘每個節點都會向它的后續和前繼節點發送消息。盡管這個協議很簡單,但足以檢測出一個或多個領導者的失敗。同樣的方法也適用于不同的代理。通常,組的領導節點可以通過他們的查詢消息來監控組成員的變化。然而,為了準確地區分每個節點的行為,以供領導者和代理的候選,每個節點被設計為每隔30秒向其領導節點發送一個查詢消息。
由于領導節點從組代理緩存在路由表,因此需要一些方法來保持它們的一致性。可以利用當前路由器廣泛支持的管理范圍的IP多播來有效地傳遞最新的代理信息。對于不支持多播協議的AS,使用以代理為根的分發樹將信息多播到所有的領導者。當組更大時,它會分成兩個或多個組。
如前所述,每個代理維護一個記錄所有代理信息的路由表。保持這些路由表的最新狀態對于查找的正確性至關重要。而且這種維護的開銷應該很低,否則,系統性能和可伸縮性都會受到影響。因此,我們的覆蓋被設計成這些維護工作集成到公共操作、查找中。當領導節點發送或應答消息時,有關已更改代理的最新信息將附加到消息中,到達目標組的一個代理,然后傳播到所有領導節點。同樣,這些信息將被發送到更多的組,并最終到達每個組。
四、網絡安全
識別每個節點是P2P覆蓋網絡安全的一個重要問題。然而,在P2P環境下,這是一個真正的挑戰,以往的研究已經指出,惡意攻擊和惡意節點之間的串通幾乎是不可避免的,甚至節點ID的分配都委托給一個可信的中心機構。當前的P2P覆蓋網絡通常通過其IP地址來識別節點。然而,由于不同的網絡配置和連接技術,超過40%的節點沒有真正的IP地址或不時地更改其IP地址。盡管已經有人提出了一些安全地分配節點ID的解決方案,如支付證書費用和將節點ID綁定到真實身份,但是在P2P環境下,這些方案都不實用。
我們不只是使用可變的IP地址作為每個節點的標識符,而是提出通過每個節點準確的網絡物理特性來識別每個節點,稱為網絡打印,這是一組可以用來精確定位節點位置和網絡設備的信息。有兩個原因使它實用有效。如前所述,節點按其As軌跡組織,As在單一網絡管理下,因此一個As內的機器處于相同的網絡配置和策略下,例如DHCP、NAT和防火墻策略。另一個原因是可以直接使用許多功能強大的協議,例如ICMP,由于安全考慮,網絡管理員通常禁止外部訪問,而且由于通信量在附近的物理節點之間,因此開銷很小。
在一個節點加入一個組之前,它將測量AS中多個路由器,以形成其地標向量。網絡打印矢量不是直接使用該節點所聲稱的矢量,而是由這些路由器的子網絡中隨機選擇的節點所測量形成的。通過比較這兩個向量,可以很容易地檢測出作弊行為。此外,該方法還可以通過偽造網絡打印向量來偽裝惡意節點的合謀。此外,由于所有這些節點都在相同的范圍內,因此可以通過具有IP記錄路由的Internet控制消息協議(ICMP)進一步找到節點的默認路由器的IP。此外,MAC地址可以用作網絡打印的一部分,并且可以由同一子網絡下的其他對等方進一步識別。因此,即使在允許節點的IP地址動態變化的環境下,包括節點的默認路由器IP、MAC和地標向量的網絡打印也是每個節點的準確和可信任的標識符。
實際上,網絡打印本身就是一個自認證數據,它可以被其他節點直接驗證。例如,一個節點M想要假裝為另一個節點A,甚至知道A的網絡打印,但是,其他節點可以通過比較所聲稱的網絡打印和直接測量的網絡打印來容易地驗證M。因此,惡意節點之間的串通幾乎是不可能的。雖然惡意節點可以在同一子網下偽裝成不同的節點進行攻擊,但是網絡打印技術可以有效地將其限制在較小的網絡范圍內。通過同時用一個獨特的計算難題挑戰這些節點,可以識別出惡意節點。
五、總結
針對開放網絡環境下P2P網絡所面臨的困難,從不同的角度探討了一種構建P2P覆蓋網絡的新方法。與當前的設計不同,我們的設計側重于自己的系統覆蓋層,我們的方法側重于物理網絡,并在物理網絡之后構建覆蓋網絡。自然地利用物理網絡的特性來構建一個高效、安全的P2P覆蓋網絡。基于節點的物理網絡特性,網絡打印為開放互聯網環境下的節點提供了一種實用的自認證標識。結合簡單的覆蓋路由機制,路由過程是安全的。
參考文獻:
[1] 李聰, 張文紅. 基于DHT的P2P覆蓋網絡的研究[J]. 計算機工程, 2018, 34(7): 101-103.
[2] M. Castro, P. Druschel, A. Ganesh, A. Rowstron, and D. S. Wallach. Secure routing for structured peer-to-peer overlay networks. In Proceedings of 5th Symposium on Operating Systems Design and Implementation (OSDI02), Boston,MA, Dec 2012.