點對點 (P2P) 世界/構建 P2P 系統
許多原因促使人們投入時間和精力建立 P2P 應用程式。正如我們在第一章中所述,P2P 技術已觸及並開始影響人類活動的許多領域。除了任何型別的程式設計任務背後的正常原因(金錢、名聲和樂趣)之外,它還可以表達一種政治立場,或成為在網路甚至經濟學中實施新概念的工具。歸根結底,P2P 本身就是人與人之間的互動,人們為了特定目標而共同努力。作為程式設計師,您有責任建立必要的基礎設施來實現這一點。
任何 P2P 專案的目標都是成為廣泛使用、值得信賴和可靠的。很少有專案是開放的、安全的、免費的、無歧視的、平等主義的、不受約束的和抗審查的。

為任何公開發布的軟體選擇合適的許可證是至關重要的步驟。它將決定專案的執行方式,甚至限制為實現解決方案而選擇的程式語言,以及獲得最終產品所需的時間,並且對於與使用者的關係也越來越重要。
您可以隨時使用現成的許可證列表,作為實施者,您甚至可以建立自己的許可證。在最後一步要格外小心,如果您不瞭解所有含義,則不應冒險。
開源計劃 (OSI) 提供了對開源含義的出色註釋定義,請訪問此處 ( http://www.opensource.org/docs/osd )。


⁴
由於可能導致法律糾紛以及需要遵守的繁文縟節和義務,這是一種最麻煩的設定。
此外,限制網路參與度將有意降低其實用性,這就是為什麼大多數P2P服務是免費的或至少支援一定程度的免費訪問。
有幾種模式是簡單捐贈/付費模式的變體,它們根據收集到的價值為使用者或專案設定具體目標。
- 贖金
- 將應用程式的功能或程式碼作為贖金支付,如果人們確實捐款並達到該目標,您同意遵守您的提議(例如:公開原始碼,修復或實現功能)。
贖金已被證明在實踐中有效,它被用於多個開源專案,甚至作家也測試了這種方案,後者的一個例子是作家勞倫斯·沃特-埃文斯在多個作品上進行的測試,所有這些都成功地實現了他的金錢和生產目標。
- 付費功能
- 在這種贖金模式的變體中,在這種特殊情況下,您應該格外小心地告知使用者他們正在為哪些內容付費,以及您為該付款提供的服務的合法性。額外的功能可能是更好的服務,甚至現有服務的更高質量。
- 付費支援
- 付費支援包括向用戶提供付費優先的技術支援服務,這在開源專案中非常常見。您應該避免過度複雜化軟體,以便從中獲利,因為使用者將是網路。一種解決方案是為公眾消費提供預設的簡化版本,並啟用對軟體、協議或網路進行高度調整,然後嘗試從中獲利。
如果您想出了新的技術或一種互連現有技術的新方法,則可以將其轉化為收入來源。
節點及其執行它的使用者是所有P2P系統的基石,沒有節點,您將無法建立網路,這似乎很明顯,但通常會忽視使用者的需求,而專注於最終目標,即網路本身,有點像看著森林而沒有看到樹木。
將社交元素融入軟體中是有益的。讓人們能夠走到一起,不僅是為了共享內容或服務,而且是為了圍繞共同的目標而合作,其中合作以實現最佳狀態應始終是最終目標。

- P2P應用程式是一種社交軟體
社交軟體定義為任何促進和支援社交協作的軟體。這當然也是現代P2P系統定義的一部分,在該系統中,守門人不再存在,參與者可以根據自己的條件自由互動。P2P應用程式在這種現實中成為一種支援工具。
世界可以越來越多地被定義為網路的網路,所有事物在某種程度上都是相互關聯的。隨著網際網路的普及成為現實,它不僅使通訊速度加快,而且還增加了來源的數量,這造成了質量保證問題。
圍繞功能性點對點網路的共同目標構建的線上協作,不僅有助於改進系統,還有助於建立信任關係,並隨之出現聲譽階梯。在參與者之間以及網路和軟體本身,這種個性化最終將能夠將這種信任和聲譽擴充套件到點對點網路中可能存在的眾多關係。
隨著社群的出現和聚集,它們不僅增加了內容的可定址性,而且增加了生產者和消費者之間可定址性,這些生產者和消費者將自行組織,以便根據個人喜好建立超級和子組(多對多)。
支援有意義的資訊交換和促進協作的增加,也增加了稀有或模糊內容的可用性和微內容的重要性,因為去除了無關資訊,因為內容可以持續地傳遞到合適的受眾(拉取,而不是推送)。
使用社交軟體或任何型別的集中式社交網路可以輕鬆提取使用者行為的指標,這已被公司深入探索,這些公司在一段時間以來一直在發動戰爭,不僅是為了獲得這些互動產生的資料的一部分,而且是為了控制此類資訊(例如:谷歌和微軟)。微軟有一個專門針對此主題的研究專案(企業社會計算)。
- 開啟圍牆花園
當您開始設計您的P2P應用程式時,GUI是使用者必須與其互動以使用您的創作的內容,您應該嘗試定義不僅要支援哪個OS,而且在什麼框架內可以設計應用程式以便從WEB瀏覽器使用或選擇一個可移植的框架,以便您可以將其移植到其他系統。
- 成為使用者
用選項壓倒使用者始終是一個糟糕的解決方案,並且只會吸引經驗豐富的使用者,即使它是基於您自己的喜好完成的,您也應該記住,您不是為了自己使用而建立它。
- 簡單是終極的複雜性
除了技術決策之外,您提供的功能也應該被考慮在內,最佳方法是一致並提供與現有實現、其他應用程式甚至您正在使用的環境/OS上的正常操作方式類似的選項。您可以選擇遵循一些準則,例如Apple提供了OSX的準則(http://developer.apple.com/documentation/UserExperience/Conceptual/OSXHIGuidelines/)。
- 內容為王
- 差異在於細節
- 引導使用者
P2P網路的拓撲結構可以非常多樣化,它取決於執行它的介質(硬體)、網路的大小(LAN、WAN)甚至軟體/協議,這些軟體/協議可以強加或使特定的網路組織出現。
下面我們可以看到最常用的拓撲結構(可以是混合拓撲結構,甚至可以在同一網路上分層),大多數如果不是全部的點對點網路都被歸類為覆蓋網路,因為它們是在已經存在的網路及其自己的拓撲結構上建立的。

環形拓撲 - 網狀拓撲 - 星形拓撲 - 全網狀或完全網狀 - 線形拓撲 - 樹形拓撲 - 匯流排拓撲 - 混合拓撲
當有大量節點參與時,完全連線的P2P網路是不可行的。
- 在數千或數百萬參與者的網路中(n = 參與者)
- 如果一個對等節點需要處理 O(n2) 數量的連線,那麼它將無法擴充套件。
由於大多數 P2P 網路也屬於覆蓋網路的一種,因此 P2P 系統的最終拓撲結構也取決於協議、基礎設施(介質/基礎網路)或對等節點之間的互動。這些“變數”增加了普通網路複雜性的更多層次,而普通網路的基本特徵是頻寬、延遲和魯棒性,這使得大多數 P2P 網路成為自組織覆蓋網路。
在對 P2P 網路進行研究時,最終的拓撲結構(結構特性)至關重要,有很多論文涉及 P2P 網路的最佳化或特性。
Gonzalo Travieso 和 Luciano da Fontoura Costa 的論文《用於即時分散式處理的有效網路》(http://arxiv.org/abs/physics/0612134)似乎表明,均勻隨機互連方案,即具有固定邊數的特定Erdős-Rényi (ER) 隨機網路模型,比無標度對應模型,即Barabási-Albert(BA) 無標度模型,效率高得多。
P2P 系統預設屬於此類,考慮到大多數 P2P 系統試圖消除大多數集中式系統/網路中存在的集中控制或指揮 (C&C) 結構。
自組織系統研究相對較新,它適用於從組織到自然發生的事件的各種系統或結構。主要使用數學方法,並依賴於模型和模擬,其準確性取決於結構的複雜性、干預因素的數量和初始選項。
本書不會詳細介紹 P2P 系統的這一方面,但一些參考和結構特徵確實與 SOS 概念並行。有關 SOS 的更多資訊,請檢視 USENET 新聞組 comp.theory.self-org-sys 的自組織系統 (SOS) 常見問題解答 (http://www.calresco.org/sos/sosfaq.htm)。
協同作用
SOS 的一個新興特徵是協同作用,其中成員圍繞共同目標聚集,每個人都為所有人的利益而努力。這在大多數 P2P 系統中也存在,在這些系統中,對等節點協同工作以最佳地共享資源並改進網路。
群體
SOS 中參與者產生的效應,即聚集並進行互補工作,從而以一種改進協調的方式共享知識和行為。這在鳥群或社會昆蟲等自然界中可見。我們稍後會介紹 P2P 的這一方面,但請記住它與 SOS 相關。
大多數 P2P 系統沒有(或不需要)中央伺服器,但需要知道網路中的一個入口點。這就是所謂的引導 P2P 應用程式。它處理對等節點的連線,以便即使沒有確切地知道誰在哪裡以及是什麼,也能找到並連線其他 P2P 對等節點(網路)。
這不是一個新問題;它在幾種網路技術中共享,這些技術避免了需要中央伺服器來索引所有參與者(門戶)的中央故障點。
一種解決方案,零配置網路 (zeroconf)(參見 http://www.zeroconf.org/),包含一系列技術,這些技術可以自動(無需手動操作員干預或特殊配置伺服器)建立可用的網際網路協議 (IP) 網路。這些技術通常用於幫助引導、配置或跨路由器和防火牆開啟路徑。
P2P 系統的主要目標之一是確保其任何單個部分都不對集體目標至關重要。透過向對等網路引入任何型別的集中化,就會產生故障點,因為某些對等節點將比其他對等節點更重要,這甚至會導致安全或穩定性問題,就像舊的客戶端-伺服器模型一樣,其中單個使用者可能會使伺服器崩潰並拒絕其他網路使用者使用它。
由於 P2P 網路的不穩定性,節點始終加入和離開,因此必須做出一些努力來保證網路不僅可用並允許新節點加入,而且共享的資源在暫時不可用時繼續被識別或至少被索引。
由於對等網路的開放性,大多數網路都受到具有各種動機的人員的持續攻擊。大多數攻擊可以透過仔細設計對等網路並使用加密來防禦或控制。實際上,P2P 網路防禦與“拜占庭將軍問題”密切相關。但是,當大多數對等節點試圖破壞網路時,幾乎任何網路都會發生故障,並且許多協議可能會因更少數量的對等節點而失效。
計算機科學通常將計算機叢集定義為一組緊密耦合的計算機,它們緊密協作,因此在許多方面可以將它們視為一臺計算機。
叢集的元件通常透過高速網路相互連線,並且通常用於提高效能和/或可用性,而這些效能和/或可用性是單臺計算機無法提供的,同時通常比具有可比速度或可用性的單臺計算機更具成本效益。
正如我們之前所見,如果將此概念應用於分散式網路或 WAN(代替 LAN),則會生成分散式計算、網格和其他系統。所有這些應用程式都是 P2P 概念的一部分。
我們鬆散地將叢集定義為物理的、社會的甚至經濟的/統計的事件。也就是說,它是由實體由於共享共同屬性而聚集定義的,該屬性可能是共享的目的或特徵,或任何其他共性。
當我們檢視 P2P 網路生成的拓撲結構時,我們可以觀察到大多數協議會在網路結構和資源周圍生成某種型別的叢集,它們甚至可能作為網路狀況的結果而出現。因此,叢集是一個無監督的學習問題,一個自動出現的事件,導致建立了臨時未標記物件的集合(資料/專案或事件)。有關叢集的更多資訊,您可以檢視《聚類演算法教程》(http://home.dei.polimi.it//matteucc/Clustering/tutorial_html/)。
因此,叢集是物件的集合,這些物件在它們之間是“相似”的,並且對於使用相同特徵集屬於其他叢集的物件是“不同”的。
這個概念不僅對 P2P 網路的形式非常重要,而且對可以基於使用 P2P 應用程式構建的社會結構/關係也有影響。
突發人群是一種行為模型,參與者傾向於圍繞某個事件聚集/擁擠,用 P2P 術語來說,這可能是一種稀缺資源,例如,正如我們稍後將看到的,BitTorrent 優先考慮大檔案而不是小檔案,新檔案而不是舊檔案,這是基於單個專案的網路連線的結果,BitTorrent 的速度主要取決於圍繞檔案生成突發人群(更多的對等節點,更高的速度,這將導致更多的種子節點)。
這也會導致拒絕服務 (DoS) 或洪泛攻擊。例如,如果 P2P 系統設計不當,嘗試將大量對等節點連線到網路可能會干擾使用的引導方法。
您應該教育使用者,更多的連線並不等於更高的速度,最多會導致查詢得到更多響應,但這可能取決於協議的結構,但啟用它們會消耗頻寬。另一方面,更多的對等節點將導致更多資源被共享,這也會導致共享重疊,從而獲得更好的速度,隨著 P2P 網路規模的擴大,它可以更好地為使用者提供服務。
在任何 P2P 協議中都應該進行一些簡單的最佳化,這可以為對等節點和整個網路帶來好處。這些最佳化基於系統指標或配置檔案,例如 IP(ISP 或範圍)、內容、物理位置、共享歷史記錄、比率、搜尋以及許多其他變數。
大多數 P2P 網路和拓撲結構(在廣域網環境中)的邏輯/特性會導致對等節點的聚合,因此這些叢集將共享分散式行為模型的相同屬性,例如群體、獸群和魚群,這導致了一個更容易研究的環境,並可以建立對等節點關係的相關性,並推匯出提高效率的方法。
- 對齊
- 獲取本地系統/環境的資訊/特性,以便透過選擇和最佳化分離和凝聚函式來最佳化網路上的對等節點“位置”,從而改進本地鄰域。
- 分離
- 實現一種基於不需要的對齊來避免與其他對等節點擁擠的方法。
- 凝聚
- 根據對等節點自身的對齊選擇對等節點。

由於所使用的協議和拓撲結構的性質,在網際網路上檢測到的 P2P 流量有時只能透過基於感知使用(線上使用者、給定實現的下載次數)的估計來完成,或者透過對網路本身進行點檢查來完成。如果協議或應用程式的實現是為了這個目標而進行的,甚至可以訪問資訊,例如,Gnutella 的幾個實現具有該選項,而 Bearshare 甚至報告了一些使用者系統引數,例如防火牆型別等。
例如,提供此類 P2P 網路流量資訊的服務包括 Cachelogic(http://www.cachelogic.com/research/2005_slide16.php#)。
- 通訊
您最重要的考慮因素之一是如何預測對等節點的通訊方式,即使我們放棄使用像超級節點這樣的中央伺服器以及多個分散式客戶端作為對等節點/節點,也需要考慮幾個問題
- 通訊是否需要跨越防火牆和代理伺服器?
- 網路傳輸速度是否重要?使用者可以配置它嗎?
- 通訊是同步的還是非同步的?
- 它是否只需要/使用單個埠?我們應該使用哪個埠?
- 您需要支援哪些資源?是否有大小限制?是否應該使用壓縮?
- 資料是否需要加密?
- 等等...
必須仔細考慮專案的具體目標和需求,這將有助於您評估工具包和框架的使用。如果您無法提出更好的解決方案或沒有時間、能力或意願,請儘量不要重新發明輪子。您還可以使用開放標準(例如:使用 HTTP 協議),但也可以自由探索其他方法。
如今,即使是小型區域網也至少會配備防火牆,並且可能還會配備路由器,即使所有元件都在使用者的控制之下,有些使用者只是缺乏如何正確設定它們的知識。另一個考慮因素是應用程式的簡單配置要求,大多數使用者在處理技術術語和依賴項時都會遇到問題,即使是 Windows 作業系統的新版本也會預設啟用防火牆,這些都可能成為使用者難以逾越的障礙,值得慶幸的是,有一些工具可以使所有人的生活更輕鬆。
通用即插即用 (UPnP) 架構由 UPnP 論壇(http://www.upnp.org/)制定的一套開放標準和技術,其目標是擴充套件即插即用概念以支援網路和對等節點發現(網路上的自動發現,有線或無線)、配置和控制,從而使裝置、PC 和服務能夠透明地連線。允許任何 UPnP 裝置動態加入網路,獲取其 IP 地址並同步功能(從其他裝置學習和通知其他裝置)。從一般意義上講,它也可以看作是分散式 簡單網路管理協議 (SNMP)。
由於 UPnP 在大多數現代路由器和網路裝置中提供,並且自 Windows XP 以來一直受 Microsoft 支援。雖然據稱旨在解決網路程式使用者接受來自 Internet 的傳入連線(“埠轉發”或“NAT 穿越”)的問題,因為它將刪除配置路由器以接受傳入連線然後將其路由到路由器後面的區域網本地機器的必要步驟,這對於普通使用者來說很難解釋和理解。
所有這一切都使得 Windows P2P 應用程式必須以程式設計方式支援此架構,以避免使用者處理啟用 UPnP 時必要的更改的要求(預設情況下應停用它,因為存在安全風險)。此外,如果本地機器上的防火牆不符合 UPnP,則必須更改其配置以啟用 UPnP 必要的 TCP(埠 2859)和 UDP(埠 1900)通訊。
Microsoft 提供了 UPnP 控制點 API。它在 Windows Me、CE .Net、XP 及更高版本中可用,位於系統服務“SSDP 發現服務”(ssdpsrv)和“通用即插即用裝置主機”(upnphost)中,或透過 COM 庫。它可以在 C++ 或 Visual Basic 應用程式中使用,或在嵌入 HTML 頁面中的指令碼中使用。
有關 Windows 上 UPnP 技術的更多資訊,可以從以下來源收集
- 使用 UPnP 控制點 API 程式設計控制點應用程式(http://www.codeproject.com/KB/IP/upnplib.aspx)作者:amatecki
- 使用 UPnP 進行程式設計埠轉發和 NAT 穿越(http://www.codeproject.com/KB/IP/PortForward.aspx)作者:Mike O'Neill
- 免費可用的實現
- CyberLink(http://sourceforge.net/projects/clinkcc)用於 C++,是面向 UPnP 程式設計師的開發包。使用該包,您可以輕鬆建立 UPnP 裝置和控制點。在 BSD 許可證下發布。
- MiniUPnP 專案(https://miniupnp.tuxfamily.org)開源 C 實現,在 BSD 相容許可證下發布。
- GUPnP(http://www.gupnp.org),一個面向物件的開源框架,用於建立 UPnP 裝置和控制點,使用 GObject 和 libsoup 以 C 編寫。它提供與 libupnp 相同的功能集,但為開發人員遮蔽了大多數 UPnP 的內部細節。在 GNU LGPL 下發布。
- UPNPLib(http://www.sbbi.net/site/upnp)開源 Java 實現,在 Apache 軟體許可證下發布。
透過使用 P2P 系統,使用者會將其存在廣播給他人,這與他們可能與他人互動但其匿名性可以得到保護的集中式服務形成對比。
違反網路安全可能構成犯罪,例如 科羅拉多大學和華盛頓大學 2008 年的研究專案案例,研究人員參與了跨 Tor 匿名代理網路的使用者機動化,並且可能因窺探而面臨法律風險。
這種分散式通訊的漏洞可能導致身份攻擊(例如,追蹤網路使用者並騷擾或對他們進行法律攻擊)、DoS、垃圾郵件、竊聽和其他威脅或濫用行為。所有這些行為通常針對單個使用者,有些甚至可能是自動化的,建立者可以採取一些措施使其更難,但最終無法阻止,並且應該預期並處理,第一步是向用戶提供資訊,以便他們可以在本地實施硬體或軟體操作,甚至是一種抵消這種濫用的社會行為。
由於每個使用者都是一個“伺服器”,因此他們也容易受到 拒絕服務 攻擊(如果最佳化,這些攻擊可能會使網路執行非常緩慢或完全中斷),結果可能取決於攻擊者的資源以及 P2P 協議的去中心化程度另一方面,成為 垃圾郵件(例如,在網路上傳輸未經請求的資訊 - 不一定作為拒絕服務攻擊)的目標僅取決於您的可見性和可聯絡性,例如,如果其他使用者可以向您傳送訊息。大多數 P2P 應用程式都支援某種聊天系統,並且此類濫用行為在這種系統中非常普遍,它們可以解決問題,但無法完全解決,這可能導致社會工程攻擊,使用者可能會被誘導執行危及自身或其系統的操作,在這一點上,只有向用戶提供資訊,使他們能夠意識到風險才能奏效。
由於大多數網路應用程式,特別是P2P工具容易成為安全問題的來源(它們會繞過某些內部預設的安全措施),因此在使用或建立此類工具時,必須注意授予可能性或配置系統以儘可能安全。
有幾種工具和選項可用於此目的,無論是配置防火牆,新增IP攔截器,還是確保在部署應用程式時預設啟用某些限制。
- PeerGuardian 2(http://phoenixlabs.org/pg2/)是Phoenix Labs開發的一款開源工具,它是一個適用於Windows作業系統的IP攔截器,支援多個列表、列表編輯、自動更新以及阻止所有IPv4(TCP、UDP、ICMP等)。
- PeerGuardian Lite(http://phoenixlabs.org/pglite/)是PeerGuardian 2的一個版本,旨在降低系統佔用。
黑名單是包含反對並積極打擊檔案共享(如RIAA)的組織的IP地址的文字檔案,以及任何挖掘網路或試圖在不參與實際檔案共享的情況下使用資源的企業。它基本上類似於電子郵件系統中存在的垃圾郵件過濾器。
隨著計算機嘗試為使用者提供更安全的保障,當今的作業系統預設會提供某種形式的外部通訊限制,允許使用者定義不同的信任級別,這稱為防火牆。防火牆可以有硬體或軟體實現,並配置為允許、拒絕或代理透過計算機網路的資料。大多數最新的作業系統都會自帶軟體實現,因為網際網路連線正變得越來越普遍,防火牆的缺乏甚至預設配置可能會導致P2P應用程式的使用出現一些困難。

微軟在最近的作業系統版本中,為了使用者的安全,在沒有使用者干預的情況下,從Windows XP SP2開始預設包含並啟用了簡單的防火牆解決方案。這會阻止任何傳入連線(80埠上的HTTP或110或25埠上的郵件),“未經請求的訊息”的分類有點過度強調,因為這些訊息可能是P2P(或任何其他型別的分散式)網路的一部分。這也會對阻止本地計算機上的UPnP功能產生影響。
- ICF(Internet Connection Firewall)包含在微軟的Windows XP、Windows Server 2003和Windows Vista作業系統中。
位於NAT背後的使用者應該能夠互相連線,有一些可用的解決方案試圖啟用它。
STUN(Simple Traversal of UDP over NATs)是一種網路協議,它幫助許多型別的軟體和硬體透過使用NAT的家用寬頻路由器正確接收UDP資料。
摘自其標準文件,RFC 3489
- 它還提供了使應用程式能夠確定NAT分配給它們的公共IP地址的能力。
- “STUN適用於許多現有的NAT,並且不需要它們有任何特殊行為。因此,它允許各種各樣的應用程式透過現有的NAT基礎設施工作。”
如STUN RFC所述,此協議並非解決與NAT相關問題的靈丹妙藥,但它對於使語音通訊透過家用路由器工作特別有用。VoIP信令協議(如SIP)使用UDP資料包透過網際網路傳輸聲音資料,但這些UDP資料包通常難以透過家用路由器中的NAT。
STUN是一種客戶端-伺服器協議。VoIP電話或軟體包可能包含一個STUN客戶端,該客戶端將向STUN伺服器傳送請求。然後,伺服器將向STUN客戶端報告NAT路由器的公共IP地址是什麼,以及NAT為允許傳入流量返回網路而打開了哪個埠。
該響應還允許STUN客戶端確定正在使用哪種型別的NAT,因為不同型別的NAT對傳入UDP資料包的處理方式不同。它將適用於四種主要型別中的三種:全錐NAT、受限錐NAT和埠受限錐NAT。它不適用於對稱NAT(也稱為雙向NAT),這種NAT通常存在於大型公司的網路中。

如果對等節點位於路由器或防火牆(使用NAT)之後,可能需要手動配置它,以允許P2P程式正常執行。對於技術能力不強的人來說,這可能是一項艱鉅的任務,甚至會影響P2P應用程式的採用率。使用UPnP等一些解決方案可以自動解決此問題。
埠轉發或埠對映,有時也稱為埠對映,是指將網路埠從一個網路節點轉發到另一個網路節點的行為,虛擬地建立一條跨網路的路徑。在本例中,從連線到路由器或防火牆的Internet端到LAN內部的計算機,允許外部使用者從外部訪問私有IP地址(LAN內部)上的埠。否則,LAN內部的計算機將無法訪問,並且P2P將無法完全工作(它可以聯絡外部機器,但無法從外部完全可見)。
由於最終允許相同功能的GUI實現種類繁多,因此進行必要的更改並非易事,而且一種解決方案並不適用於所有情況。
首先要注意的是,路由器或連線到Internet的計算機將具有不同的IP地址,一個由您的ISP提供,在Internet上可見,另一個僅在LAN內部可見,此地址可以由使用者分配,或者預設為出廠設定或作業系統出廠設定。
要對路由器的配置進行任何更改,您需要知道可以訪問其配置頁面並登入的IP地址。如果使用計算機,則可以在本地或遠端執行此任務(如果軟體允許)。使用者需要具備一些關於IP和埠甚至協議(某些配置允許區分TCP和UDP資料包)如何使用的基本知識才能執行這些任務,因此對於普通使用者來說,這可能變得複雜。
數字控制著你的生活。隨著時間的推移,任何人都可以透過大量的數字來識別。比如電話號碼、信用卡號碼、駕駛證號碼、社會安全號碼,甚至郵政編碼或汽車牌照。這些唯一號碼的建立、分配和驗證方式都非常引人入勝。Alan De Smet 的唯一ID網站 (http://www.highprogrammer.com/alan/numbers/) 提供了關於這個主題的一般資訊。對於我們特定的主題,相關的是其背後的演算法。如何為使用者和資源建立唯一的識別符號。
為了使P2P協議/應用程式能夠管理使用者身份識別、身份驗證、構建路由協議、識別資源等,需要(一組)唯一識別符號。雖然真正的對等協議並不打算建立集中式服務,但它經常會利用已經建立的此類服務。例如,Usenet利用域名來為文章建立全域性唯一識別符號。如果協議避免使用此類服務,則唯一性只能基於隨機數和數學機率。
生成唯一ID的問題可以分解為空間上的唯一性和時間上的唯一性,這兩者結合起來,旨在產生一個全域性唯一的序列。這導致在使用開放協議/多個供應商實現的一些P2P網路中檢測到一個問題,由於在生成GUID時使用了不同的演算法,導致空間上的唯一性被破壞,從而導致零星的衝突。
UUID正式且專門定義為ISO-11578標準的一部分,也存在其他規範,例如RFC 4122、ITU-T建議X.667。
使用示例
- Usenet文章ID。
- 在微軟的元件物件模型 (COM) 混亂中,這是一種包含MFC(Microsoft Foundation Classes)、OLE(物件連結和嵌入)、ActiveX、ActiveMovie以及微軟最近推出的所有其他內容的面向物件程式設計模型,GUID是一個16位元組或128位數字,用於唯一標識物件、資料格式以及所有內容。
- Windows登錄檔中的識別符號。
- RPC(遠端過程呼叫)中使用的識別符號。
- 在ActiveMovie中,存在用於影片格式的GUID,對應於Video for Windows中使用的FOURCC或四字元程式碼。這些在Active Movie軟體開發工具包(SDK)中的uuids.h檔案中指定。ActiveMovie需要傳遞與AVI檔案中影片的FOURCC對應的GUID。
安全性版本1(基於時間和節點)的UUID存在已知的脆弱性,因為它會廣播節點的ID。
需要實現UUID的程式設計師可以參考以下示例
- OSSP uuid(http://www.ossp.org/pkg/lib/uuid/)是用於ISO C、ISO C++、Perl和PHP的API,以及用於生成符合DCE 1.1、ISO/IEC 11578:1996和RFC4122的通用唯一識別符號(UUID)的相應CLI。它支援版本1(基於時間和節點)、版本3(基於名稱,MD5)、版本4(基於隨機數)和版本5(基於名稱,SHA-1)的DCE 1.1變體UUID。UUID是128位數字,旨在在空間和時間上具有很高的唯一性可能性,並且在計算上難以猜測。它們是全域性唯一識別符號,可以在本地生成,而無需聯絡全域性註冊機構。它是根據MIT/X Consortium許可證開源的。
大多數P2P系統必須至少實現一種用於雜湊、加密/解密和壓縮/解壓縮的演算法,本節將嘗試提供一些關於這些操作與P2P主題相關聯的想法,因為我們將在後面其他章節中討論這些問題。
有關該主題的詳細資訊可以在加密華夏公益教科書中找到(https://wikibook.tw/wiki/Cryptography)。
建立結構化P2P網路的一種方法是維護一個分散式雜湊表 (DHT),它將充當網路上資源的分散式索引。
加密的另一個需求是保護分散式資源本身的完整性,為了使它們能夠抵禦攻擊,大多數P2P實現某種雜湊函式(MD5、SHA1),甚至可能實現雜湊樹以檢測資源內容作為整體或使用者獲取的部分的損壞(例如使用Tiger Tree Hash)。
雜湊函式是一種可重現的方法,用於將某種資料轉換為(相對)較小的數字,該數字可以用作資料的數字“指紋”。該演算法替換或轉置資料以建立此類指紋。指紋稱為雜湊值、雜湊值、雜湊碼或簡稱為雜湊。當您指的是雜湊或雜湊時,必須注意,因為它也可能表示雜湊函式。
一組雜湊(將雜湊函式應用於資料的結果)有時被稱為桶或更準確地說是雜湊桶。如果由非衝突雜湊函式生成,則大多數雜湊桶將為給定的資料輸入生成不同的雜湊,在選擇雜湊函式時應考慮其他特徵,但這超出了本書的範圍,只需記住檢查您正在實現的雜湊函式/演算法是否滿足您的要求。華夏公益教科書包含幾本以某種方式涵蓋雜湊的書籍,您可以在演算法實現或加密中檢視有關該主題的更多資訊

雜湊值通常用作雜湊表或雜湊檔案的索引。密碼雜湊函式用於資訊安全應用程式中的各種目的。
- 選擇一個好的雜湊函式
一個好的雜湊函式對於雜湊表的高效能至關重要。如果選擇了一個糟糕的雜湊函式,很可能會導致鍵聚集,即鍵對映到同一個雜湊桶(即發生衝突)的機率遠大於隨機函式所期望的機率。在任何雜湊實現中,非零的衝突機率都是不可避免的,但通常解決衝突所需的操作次數與對映到同一個桶的鍵的數量成線性關係,因此過多的衝突會顯著降低效能。此外,一些雜湊函式的計算量很大,因此計算雜湊所需的時間(以及在某些情況下,記憶體)可能成為負擔。
在點對點系統(以及一般的檔案傳輸)中,用於驗證檔案完整性的早期雜湊演算法之一是1992年建立的MD5(參見rfc1321 **MD5訊息摘要演算法**)。但就像大多數雜湊演算法一樣,經過一段時間後,一些弱點被發現了,SHA1演算法也重複了這一過程,並且很可能其他演算法也會如此。選擇合適的工具還不夠,程式設計師必須持續檢查他所選擇的演算法的安全性在多大程度上滿足了對所選雜湊演算法的要求。
簡單性和速度可以很容易地進行客觀衡量(例如,透過程式碼行數和CPU基準測試),但強度是一個更難以捉摸的概念。顯然,像SHA-1這樣的加密雜湊函式(參見安全雜湊標準FIPS 180-1)可以滿足雜湊表所需的相對寬鬆的強度要求,但它們的速度慢且複雜,因此不受歡迎。然而,當雜湊表模數及其因子可以對攻擊者保密時,或者透過應用一個秘密的鹽,使用加密雜湊函式可以防止衝突攻擊。但是,對於這些特殊情況,可以使用通用雜湊函式來代替一個靜態雜湊。
在沒有雜湊函式強度標準度量的情況下,目前的技術是採用一系列統計測試來衡量雜湊函式是否可以很容易地與隨機函式區分開來。可以說,最重要的測試是確定雜湊函式是否顯示雪崩效應,它本質上表明輸入鍵的任何一位變化都應該平均影響輸出中的一半位元。Bret Mulvey尤其主張測試嚴格雪崩條件,該條件指出,對於任何一位變化,每個輸出位元都應該以二分之一的機率發生變化,與鍵中的其他位元無關。純粹的加法雜湊函式,如CRC,慘敗於這個更強的條件。
有關雜湊的更多資訊
- 雜湊函式酒廊,其中包含已知安全漏洞的演算法摘要。
大多數雜湊演算法都具有很高的複雜度,並且是為特定的目標(雜湊函式)設計的,在其他任務中可能無法應用相同的保證級別。這些演算法(或它們的原始描述)可以免費獲取,您可以實現自己的版本,或者選擇使用現有的經過測試的實現(並注意安全問題)。一些公開可用的實現示例可在密碼學華夏公益教科書中找到。
需要一致的結果和可重複性,在選擇和實現雜湊演算法時,請記住在測試向量批次上執行它。如果您使用的是測試框架,則應將其新增到您的測試中。
在密碼學中,**雜湊樹**(也稱為**默克爾樹**,由Ralph Merkle於1979年發明)是對更簡單的雜湊列表概念的擴充套件,而雜湊列表又是對舊的雜湊概念的擴充套件。它是一種雜湊結構,具有用於以增量或亂序方式驗證檔案和檔案子範圍完整性的理想屬性。
底層雜湊函式為Tiger的雜湊樹(http://www.cs.technion.ac.il/~biham/Reports/Tiger/)通常被稱為**Tiger樹**或**Tiger樹雜湊**。
雜湊樹的主要用途是確保從點對點網路中的其他節點接收到的資料塊未損壞且未被更改,甚至檢查其他節點是否傳送了摻假的資料塊。這將最佳化網路的使用,並允許快速排除摻假內容,而不是等待整個檔案下載完成以進行單一雜湊檢查,可以下載部分或完整的雜湊樹,並且可以立即檢查每個分支的完整性(因為它們由雜湊塊或雜湊樹的葉子組成),即使整個樹/內容尚未可用,也使得正在下載的節點可以上傳未完成檔案的塊成為可能。
通常,使用SHA-1、Whirlpool或Tiger等加密雜湊函式進行雜湊。如果雜湊樹只需要防止無意的損壞,可以使用CRC等安全性較低的校驗和。
在雜湊樹的頂部有一個頂部雜湊(或根雜湊或主雜湊)。在點對點網路上下載檔案之前,在大多數情況下,頂部雜湊是從受信任的來源(具有較高信任度的節點或中央伺服器)獲取的。當頂部雜湊可用時,雜湊樹就可以從任何來源接收。然後將接收到的雜湊樹與受信任的頂部雜湊進行檢查,如果雜湊樹損壞或已損壞,則將嘗試來自其他來源的另一個雜湊樹,直到程式找到一個與頂部雜湊匹配的雜湊樹。
這需要考慮幾個因素
- 根雜湊的受信任來源是什麼。
- 雜湊演算法的一致實現(例如,要傳輸的塊的大小必須已知,並且在每個檔案傳輸中都是恆定的)。
Tiger樹雜湊是點對點網路上最有用的一種雜湊樹形式。它基於Eli Biham和Ross Anderson於1995年建立的加密雜湊Tiger(有關建立者的資訊和C原始碼示例,請參見http://www.cs.technion.ac.il/~biham/Reports/Tiger/)。該雜湊演算法的設計考慮了現代CPU,尤其是在處理64位資料時,它是32位機器上最快、最安全的雜湊之一。
TTH使用一種二叉雜湊樹形式,通常具有1024-位元組的資料塊大小,並使用加密安全的Tiger雜湊。
使用Tiger雜湊是因為它速度很快(並且樹需要計算大量的雜湊),透過最近的實現和架構,TTH與SHA1一樣快,透過更多的最佳化和64位處理器的使用,它會變得更快,即使它生成更大的雜湊值(192位對比SHA1的160位)。
Tiger Tree 雜湊值(TTH)被用於 Gnutella、Gnutella2 和 Direct Connect 等許多其他 P2P 檔案共享協議,以及在一般的 檔案共享 中。
關於 TTH 用法的逐步介紹曾作為 Tree Hash Exchange (THEX) 格式的一部分提供(請參閱網路檔案中的頁面)。
在 計算機科學 中,雜湊表 或 雜湊對映 是一種 資料結構,它將 鍵 與 值 關聯起來。它主要有效支援的操作是 查詢:給定一個鍵,找到對應的值。它的工作原理是使用 雜湊函式 將鍵轉換為 雜湊值,這是一個數字,用於索引陣列以定位應放置值的所需位置(“桶”)。

雜湊表支援高效新增新條目,並且花費在搜尋所需資料上的時間與儲存的專案數量無關(即 O(1))。
在 P2P 系統中,雜湊表在每個客戶端/伺服器應用程式上本地使用,以執行資料路由或檔案的本地索引,當我們嘗試以分散式方式使用相同的系統時,這個概念得到了進一步發展,在這種情況下,分散式雜湊表用於解決問題。
分散式雜湊表 (DHT) 的概念於 2001 年公開,但公開發布穩健實現的機構很少。
- 內容定址網路 (CAN)
- Chord(http://pdos.csail.mit.edu/chord/)——旨在利用點對點思想構建可擴充套件、健壯的分散式系統。它是完全去中心化和對稱的,並且只需使用 log(N) 條訊息即可查詢資料,其中 N 是系統中的節點數。Chord 的查詢機制在面對頻繁的節點故障和重新加入時具有可證明的魯棒性。一個單一的 C 語言研究實現可用,但也有其他 C++、Java 和 Python 實現。
- Tulip
- Tapestry
- Pastry
- Bamboo(http://bamboo-dht.org/)——基於 Pastry,一個用 Java 編寫的 Pastry 協議的重新設計,並根據 BSD 許可證授權。
作為任何 P2P 網路安全的一部分,加密是必要的,以確保只有“允許的”方才能訪問敏感資料。例如,在伺服器/客戶端設定(即使在 P2P 上)上對資料進行加密,客戶端可以在不擔心伺服器訪問資料的情況下共享資料(如果網路本身支援用於傳輸的分散式快取機制,則為無伺服器混合),傳輸加密,以防止中間人攻擊或資料監控(請參閱 FreeNet)以及許多其他旨在保護隱私併為網路提供擴充套件安全級別的應用程式。
有幾種演算法可用於實現加密,P2P 專案最常用的包括:BlowFish。
P2P 應用程式可用於以可唯一標識的打包資訊形式共享任何型別的數字資產。P2P 應用程式以共享檔案而聞名,這引發了若干問題和可能性。
元資料(元資料或有時稱為元資訊)是“關於資料的資料”。元資料項可以描述單個 資料、內容項或資料集合,包括多個內容項和層次結構級別,例如資料庫模式。
資料 是知識的最低抽象級別,資訊是下一個級別,最後,我們擁有知識,它是三者中最高的級別。元資料由幫助定義目標項知識的直接和間接資料組成。
元資料描述的層次結構可以無限地延續,但通常上下文或語義理解會使過於詳細的解釋變得不必要。
任何特定 資料 所扮演的角色取決於上下文。例如,在考慮倫敦的地理位置時,“E83BJ”將是一個數據,而“郵政編碼”將是元資料。但是,在考慮管理地理資料的自動化系統的資料管理時,“郵政編碼”可能是資料,然後“資料項名稱”和“5 個字元,以 A – Z 開頭”將是元資料。
在任何特定上下文中,元資料表徵它所描述的資料,而不是該資料所描述的實體。因此,關於“E83BJ”,資料“位於倫敦”是對具有郵政編碼“E83BJ”的現實世界中的位置的進一步描述,而不是對程式碼本身的描述。因此,儘管它提供了與“E83BJ”相關的資訊(告訴我們這是倫敦某個地方的郵政編碼),但這通常不被認為是元資料,因為它描述的是“E83BJ”qua現實世界中的位置,而不是qua資料。
- 資料和元資料之間的區別
通常無法區分(普通)資料和元資料,因為
- 某些東西可以同時是資料和元資料。文章的標題既是它的標題(元資料),也是其文字(資料)的一部分。
- 資料和元資料可以改變它們的角色。一首詩本身會被視為資料,但如果有一首歌以它作為歌詞,那麼整首詩可以作為元資料附加到歌曲的音訊檔案上。因此,標籤取決於觀點。
無論考慮上述哪個定義,這些考慮都適用,除非使用顯式標記來表示什麼是資料以及什麼是元資料。
- 元資料的層次結構
當結構化為層次結構時,元資料更恰當地稱為 本體 或 模式。這兩個術語都描述了出於某種目的或為了啟用某些操作而“存在的東西”。例如,圖書館目錄中主題詞的排列不僅用作查詢書架上特定主題書籍的指南,而且還用作指導圖書館自身本體中“存在”的主題以及更專業的主題如何與更一般的主題詞相關或派生自更一般的主題詞的指南。
元資料通常儲存在中心位置,並用於幫助組織標準化其資料。此資訊通常儲存在 元資料登錄檔 中。
- 模式示例
關於元資料工作以及如何使其可訪問和有用的一個很好的例子,可以在W3C的舊頁面元資料活動宣告(http://www.w3.org/Metadata/Activity.html)以及資源描述框架(RDF)中找到,RDF透過使用宣告性語言,提供了一種使用XML以語句的形式表示元資料的標準方式,這些語句描述了Web上專案的屬性和關係。RDF在http://www.w3.org/RDF/ 有其自身更新的頁面。
- 免費服務
- MusicBrainz ( http://musicbrainz.org/ )是一個社群音樂元資料庫(非營利性服務),旨在建立一個全面的音樂資訊網站。您可以透過瀏覽該網站使用MusicBrainz資料,或者您可以從客戶端程式訪問資料——例如,CD播放器程式可以使用MusicBrainz識別CD並提供有關CD、藝術家或相關資訊的資訊。MusicBrainz還支援MusicIP的Open FingerprintTM架構,該架構可以識別音訊檔案中的聲音,而不管數字檔案細節的變化如何。該社群提供了一個基於REST風格的XML Web服務。
P2P應用程式的使用者可以選擇檔案作為要在網路上共享的資源。最簡單和安全的方法是以不可變的方式共享檔案內容,大多數P2P應用程式都滿足了這一需求,在任何情況下,都可以圍繞檔案資源和這些檔案的可能狀態構建其他同時模型,其中最複雜的是分散式檔案系統的實現。
在P2P網路上共享檔案包括管理(索引、啟用搜索和傳輸)兩種不同的資源:本地檔案和遠端檔案。
如果P2P應用程式支援檔案共享。最常見的檔案共享方法是允許使用者選擇本地檔案系統卷中的一個或多個目錄。這包括在應用程式首選項中提供選擇要共享的檔案路徑以及放置下載檔案的位置的功能。
自動將下載目錄新增到共享路徑列表或下載檔案列表中也是一種常見做法,以便對等節點立即參與下載資源的複製。
在確定使用者指定的資源後,應用程式需要在執行時驗證對任何共享檔案的刪除、重新命名或寫入操作,因為這可能構成檔案狀態(內容更改)的更改或任何檔案的新增,或對共享資源的任何更改。這可能會使先前生成的雜湊值或索引失效。可以透過為檔案內容生成雜湊值並使用作業系統對檔案系統的控制來監視發生的更改來解決此問題(例如,在Windows上可以使用Win32 API ReadDirectoryChangesW)。
根據實現的要求,使用多個內容雜湊可能會有益,一個更強的雜湊用於網路傳輸,另一個更快、質量較低的雜湊僅用於監視本地更改。
- 檢測到的共享檔案及其更改
由於不期望應用程式始終執行並能夠持續監視對資源所做的任何更改,因此必須採取措施來維護進一步的完整性。因為如果應用程式關閉,它將無法繼續監視更改,並且作業系統將允許某種API來檢測檔案更改,例如上次寫入訪問時間戳。因此,每次執行應用程式時保證完整性所需的步驟是
- 驗證資源(已知檔案和共享路徑)是否仍然有效(它們仍然存在且未被更改)。
- 更新本地索引以反映上述步驟中發現的內容(從共享列表中刪除任何無效目錄或卷)。甚至可以提示使用者進行糾正操作,因為有些可能是可移動介質(DVD等)。
- 開始監視新的更改。
- 檢查自應用程式上次退出以來所有資源內容的更改,這可能意味著必須單獨檢查每個檔案的上次寫入日期(大多數現代作業系統允許這樣做)。根據實現方式,可以包含接下來的兩個步驟以減少重複工作。
- 驗證所有先前索引的檔案是否仍然存在。
- 驗證是否存在新檔案。
- 重要的本地路徑
至少有兩條路徑對P2P應用程式具有更高的實用價值。應用程式所在的路徑,因為它可能需要用於更新或任何必要的安全檢查,甚至可能用作定位應用程式首選項的基礎(如果未使用其他設定,例如Windows作業系統上的系統登錄檔)和/或下載目錄,一個啟用寫入的目錄,所有下載都將放置在此目錄中。
這些檔案不在本地使用者的直接控制之下。
大多數P2P應用程式都不允許選擇單個檔案進行共享,而是透過啟用特定目錄的選擇來批次進行共享,需要提供一種機制來排除特定檔案不被共享,這可能是使用者的意願、網路的具體要求,或者是為了減少檔案共享系統處理不需要檔案的負擔。無論是透過大小、副檔名還是檔案的內在內容,能夠剔除它們都是有用的。
索引,即對資源(如共享檔案)進行索引的任務,其目標是使應用程式能夠知道哪些資源可用於在網路上共享。
索引在每次執行應用程式時都會發生,因為只有在應用程式執行時才能監視資源的更改,並且在對共享資源首選項進行更改時也會發生。這也使得在應用程式執行時必須有一個函式來監視資源的更改。
大多數P2P應用程式還支援排除或過濾共享資源,例如,如果選擇了一個目錄進行共享,但需要排除其中的一些內容。
在自然界中,合作現象普遍存在,但吸附者(欺詐者、變異體)也同樣存在。從進化的角度來看,欺詐者確實應該會繁榮發展,因為他們不為集體利益做出貢獻,只是簡單地獲取他人合作努力的成果,但事實並非如此。兩者都使用不同的策略競爭相同的目標,合作是所有人成本最低的途徑(即使從長遠來看,吸附者也是如此),合作提供了穩定性和可預測性,另一方面,如果不對欺詐者進行某種程度的平衡,它們會導致系統退化,最終導致系統整體崩潰。
在計算機科學中,尤其是在網際網路上,“吸附”或“吸附者”指的是受益於他人資訊或努力的行為,通常是故意的,但沒有提供任何回報,或者只提供象徵性的回報以試圖避免被稱之為吸附者。這種行為普遍受到譴責。
這個名稱來源於水蛭,一種吸食血液然後試圖悄無聲息離開的動物。其他術語也被使用,例如“免費搭車者”,但“吸附者”是最常見的。
示例
- 在點對點網路中,吸附者不共享任何內容(或很少共享無價值的內容)進行上傳。許多應用程式都提供了處理吸附者的選項,例如降低對不共享任何內容的使用者上傳速度,或者完全不允許他們上傳。一些檔案共享論壇有反吸附策略來保護下載內容,這要求使用者付出比大多數吸附者願意付出的更多精力或耐心,才能訪問“下載區域”。
- 大多數BitTorrent網站將吸附者稱為正在下載檔案但無法播種(Seeding)的客戶端,因為他們沒有檔案的完整副本。它們預設配置為允許某個客戶端在上傳更多時下載更多。
- 在共享網路(例如學校或辦公室區域網)上,任何故意過度使用頻寬的行為(達到明顯降低網路正常使用程度的程度)都可以稱為吸附。
- 在網路遊戲中(尤其是角色扮演遊戲),吸附指的是玩家加入一個團隊的明確目的是為了獲取獎勵,而不對獲得這些獎勵所必需的努力做出任何貢獻。有時,為了提升玩家等級,這是允許的。通常,在未經團隊許可的情況下這樣做被認為是不好的行為。在第一人稱射擊遊戲中,這個術語指的是依靠隊友獲得勝利的玩家。
- 直接連結是一種頻寬吸附形式,它發生在將未經授權的連結物件(通常是影像)從一個網站放置到屬於第二個網站(吸附者)的網頁中時。這構成對主機網站頻寬和內容的未經授權的使用。
在某些情況下,吸附被用作“免費搭車”的同義詞,而不是僅限於計算機環境。
由於點對點網路的易變性和模組化特性,對等信任(在構建社群的參考中提到)和使用者參與是為線上服務或資源交易提供動機或潤滑劑的少數幾個因素之一,最終歸因於建立者。參與者擁有良好的平均聲譽也將增強對網路及其上構建的系統的信任。

傳統上,檔案傳輸涉及兩臺計算機,通常被指定為客戶端和伺服器,大多數操作用於將檔案從一臺機器複製到另一臺機器。
大多數Web和FTP伺服器因受歡迎而受到懲罰。由於所有上傳都從一箇中央位置進行,因此受歡迎的網站需要更多資源(CPU和頻寬)才能應對。透過使用P2P,客戶端會自動映象他們下載的檔案,從而減輕釋出者的負擔。
大多數P2P協議的一個限制是它們不提供複雜的檔案系統模擬或使用者許可權系統,因此像NFS或FTP協議提供的複雜檔案操作非常少見,這也有其原因,因為網路是分散的,因此很難實現使用者身份驗證系統,而且大多數系統很容易被破解。
關於P2P傳輸的另一個概念是頻寬的使用,事情不會是線性的,傳輸將取決於資源的可用性、種子節點的負載、網路大小以及本地使用者的連線及其頻寬上的負載。
如前所述,下載具有限制性版權、許可證或在特定國家/地區法律下的檔案可能會增加被起訴的風險。這些網路上提供的一些檔案可能是受版權保護或受法律保護的。您必須意識到存在風險。
多源下載(分段下載、叢集下載)可能是從多個對等節點同時下載檔案的更有效方法。單個檔案並行地從檔案的幾個不同的來源或上傳者下載。這可以幫助一群使用者使用非對稱連線(例如ADSL)為一個下載者提供高總頻寬,並處理下載需求高峰。所有叢集傳輸都依賴於至少存在一個完整的檔案副本(可能的演變包括在混合中新增某種裡德-所羅門(RS)演算法),並且它主要用於大型檔案(大小取決於可用頻寬,因為權衡包括更高的CPU成本和額外的資料傳輸以使系統工作)。
這種技術不能神奇地解決問題,在一組上傳頻寬不足的使用者中,需求高於供應。但是,它可以很好地處理峰值,並且在某種程度上還可以讓上傳者“更頻繁地”上傳,以更好地利用他們的連線。但是,簡單的實現通常會導致檔案損壞,因為無法知道所有來源是否都實際上傳了同一檔案的片段。這導致大多數程式使用某種校驗和或雜湊演算法的分段下載來確保檔案完整性。
允許使用者在下載過程完成之前儘可能早地預覽檔案可能會有所幫助,這將提高網路上共享的質量,增強使用者的信心並減少時間和頻寬的浪費。
例如
- 投毒攻擊(例如,提供內容與描述不符的檔案)
- 汙染攻擊(例如,在網路上原本有效的檔案中插入“不良”資料塊/資料包)
- 插入
- 病毒到傳輸資料中(例如,下載或傳輸的檔案可能感染了病毒或其他惡意軟體)
- 對等網路軟體本身中的惡意軟體(例如,分發軟體可能包含間諜軟體)
不應該將保護內容版權的責任強加給公眾,即使今天大多數版權政策已經取消了宣告作品保留權利的必要性,也不應該期望公眾必須不遺餘力地保護少數人的利益,尤其是在這些利益沒有明確說明的情況下。預計今天公共領域的著作數量將超過擁有有效版權的著作數量。
鑑於實際情況,任何P2P應用程式都應有義務告知使用者由於這種非常混亂的情況而產生的問題。一些緩解問題並幫助版權所有者保護其作品的解決方案已經逐漸出現,但那些應該關心此問題的人似乎沒有表現出任何興趣。本節將嘗試展示可用的可能性。
解決此問題的簡單方法是明確將識別受版權保護的作品的責任賦予權利所有者,為了實施此解決方案,需要向P2P應用程式提供一個可公開訪問的資料庫,以便可以宣告內容受版權保護,或者必須建立一個標準來明確識別這些作品。針對這個問題,已經討論和提出了幾種解決方案,但在2003年7月,Kokopelli Network Inc.(由Alex Sauriol共同創立)提出了名為BluFilter的解決方案,該方案允許透過比較儲存在mp3中的波形來識別版權狀態(參見kokopellinetworks.com @ web.archive.org),這種方法似乎是可行的,但似乎還沒有公開使用類似的技術來告知使用者,但有傳言稱類似的方法已被用作法律訴訟的基礎。
啟用傳輸的動態優先順序設定不僅可以使使用者滿意,還可以提供一種簡單的方法來提升熱門內容的傳輸速度,從而提高其在網路上的複製速度。
人們甚至可以更進一步,允許按資源進行配置,啟用對每個資源的刪除或配置訪問許可權,就像在檔案系統上一樣,甚至啟用一種方式來允許資料自由交易的市場,讓使用者為該資源設定特定的比率。
管理本地資源不僅對本地使用者很重要,對全域性網路也很重要。管理和啟用對應用程式頻寬使用的控制將作為激勵使用者改進其管理該資源(使用什麼以及如何使用)的方式,如果應用程式將其視為動態資源,則可以透過減少浪費對全域性網路產生積極影響。
許多現有的P2P應用程式都允許使用者控制其頻寬,但這不僅僅是P2P可以從中受益的策略,如今,大多數計算機的重要組成部分都已連線到網際網路,因此管理這種稀缺資源至關重要。一個例子是微軟的後臺智慧傳輸服務(BITS),旨在允許系統更新甚至MS IM服務在其他應用程式未使用頻寬時傳輸資料,值得注意的是,還可以使用BITS技術,因為它透過元件物件模型(COM)公開。
