跳至內容

點對點 (P2P) 世界/第 P2P 實現章

來自華夏公益教科書,開放世界開放書籍

P2P 網路和協議

[編輯 | 編輯原始碼]

本章將嘗試概述什麼是點對點,其歷史演變、技術和用途。

P2P 和網際網路:“一點”歷史

[編輯 | 編輯原始碼]

P2P 並不是一項新技術,P2P 幾乎和網際網路一樣古老,它始於電子郵件協議,下一代被稱為“元計算”或歸類為“中介軟體”。它之所以在網際網路上掀起風暴,是因為 P2P 協議的普遍分散化,這不僅賦予了普通使用者權力,還使資訊分發資源的節省成為可能,這與舊的集中化概念截然不同。

這對共享資訊的安全性或控制可能是個問題,換句話說,是資訊的“民主化”(P2P 用於從檔案共享網路下載 MP3、程式甚至電影副本的眾所周知用途),由於其分散化性質,流量模式難以預測,因此,提供基礎設施來支援它是大多數 ISP 現在意識到的一個主要問題。

P2P 也被譽為索引深層網路的解決方案,因為 P2P 技術的大多數植入都基於並面向執行TCP/IP的有線網路。一些甚至正在被轉移到無線用途(感測器、電話和機器人應用),您可能已經聽說過一些智慧地雷或機器人昆蟲群的軍事應用。

最終讓 P2P 廣受歡迎的原因是它創造了一個公平的競爭環境,這是由於我們今天在世界大多數地區都可以輕鬆獲得計算機和網路基礎設施。我們可以自由地輕鬆地成為生產者,取代舊的集中化模型,在這種模型中,大多數人口仍然是消費者,依賴於單一實體(壟斷、品牌、知名度)來分發或建立服務或數字商品。這種轉變無疑會降低生產和分發成本,因為可以進行數字傳輸的服務和產品的價格,現在也越來越明顯的是,質量也會下降,直到出現新的分類系統,這在網際網路影響後的書面媒體中就可以看到。

FIdoNet 今天仍然是一個全球計算機網路,用於公告板系統 (BBSes) 之間的通訊。它使用儲存轉發系統在網路中的 BBSes 之間交換私人 (電子郵件) 和公共 (論壇) 訊息,以及某些情況下的其他檔案和協議。


Clipboard

待辦事項
最好是提示節點的自組織和準獨立性,以及支援它的獨裁和整體層次結構,以及它是如何主要分散和自組織的


FidoNet 系統是基於許多小型協作互動程式啟動的。這些“對等方”與 BBS 系統一起執行,並透過指令碼或某種形式的低階程序間通訊與它們互動。它們的功能是自動打包/解包和匯入/匯出內容,從一個系統的位置到另一個系統的位置。獨立性極大地簡化了移植,FidoNet 是為數不多的幾乎所有 BBS 軟體都廣泛支援的網路之一,以及許多非 BBS 線上服務。這種模組化結構還允許 FidoNet 輕鬆升級到新的資料壓縮系統,這在使用調變解調器透過電話線進行通訊併產生高長途通話費用的時代非常重要。

1990 年代初調變解調器速度的快速提高,以及計算機系統和儲存價格的迅速下降,使得 BBS 越來越受歡迎。到 1990 年代中期,FidoNet 有近 40,000 個系統在執行,並且可以與世界各地數百萬使用者進行通訊。就廣度或數量而言,只有 UUCP 接近;FidoNet 的使用者群遠遠超過 BITNET 等其他網路。

從 1990 年代中期開始,低成本網際網路連線的廣泛可用性降低了對 FidoNet 儲存轉發系統的需求,因為世界上的任何系統都可以以相同的成本訪問。直接撥號到本地 BBS 系統迅速減少。網際網路連線的可用性並非普遍,儘管 FidoNet 自 1990 年代初以來已經大幅縮減,但它仍然在世界各地使用。

電子郵件

[編輯 | 編輯原始碼]

電子郵箱(通常簡稱為電子郵件或電子郵件),最初作為一種集中式服務,用於建立、傳輸或儲存主要是基於文字的人類通訊,以及數字通訊系統,第一次標準化工作導致採用簡單的郵件傳輸協議(SMTP),該協議於 1982 年首次作為網際網路標準 10 (RFC 821) 釋出。

現代電子郵件系統基於儲存和轉發模型,其中電子郵件計算機伺服器系統代表使用者接受、轉發或儲存郵件,使用者僅在郵件傳輸或檢索期間使用個人計算機或其他網路裝置連線到電子郵件基礎設施,以或從其指定的伺服器進行。

最初,電子郵件僅包含以 ASCII 字元集編寫的文字訊息,如今,幾乎任何媒體格式都可以傳送,包括音訊和影片剪輯的附件。


Clipboard

待辦事項
完成


Peer2Mail

[編輯 | 編輯原始碼]

Peer to Mail (http://www.peer2mail.com/ ) 是一款適用於 Windows 的免費軟體,它允許您在任何 Web 郵件帳戶上儲存和共享檔案,您可以使用 Gmail(Google 郵件)、Walla!、Yahoo 等 Web 郵件提供商,它會將共享檔案拆分為段,然後壓縮和加密這些段,然後將檔案段逐一發送到您擁有管理許可權的帳戶。要下載檔案,該過程會反過來進行。

Peer2Mail v1.4 中的加密被破解(之前的版本也受到影響) - Peer2Mail Encrypt PassDumper 漏洞

Usenet 是最初的點對點檔案共享應用程式。它最初是為了利用 UUCP(Unix 到 Unix 複製)同步兩臺計算機的訊息佇列而開發的。Usenet 將每篇文章儲存在一個單獨的檔案中,並將每個新聞組儲存在它自己的目錄中。同步兩個對等方就像同步兩個不同檔案系統中的選定目錄一樣簡單。

Usenet 是在每個人都會接收、儲存和轉發相同新聞的假設下建立的。這個假設極大地簡化了開發,以至於一個對等方能夠連線到任何其他對等方以獲取新聞。Usenet 分成無數的新聞組,這使它能夠在保留其基本架構的同時進行擴充套件。'每個節點都儲存所有新聞' 變成 '每個節點都儲存它訂閱的新聞組中的所有新聞'。

在所有其他點對點協議中,Usenet 最接近 Freenet,因為所有節點絕對平等,並且網路的全域性對映沒有由任何節點子集維護。與透過沿著對等方線性鏈遞迴拉取請求物件來工作的 Freenet 不同,Usenet 透過遞迴將所有新聞推送到其直接鄰居,形成一棵樹。


檔案傳輸協議 (FTP) 可以被視為一種原始的 P2P 協議。即使它依賴於客戶端/伺服器結構,限制也僅在於執行的應用程式型別(客戶端/伺服器),因為角色是靈活的。

檔案交換協議 (FXP)

[編輯 | 編輯原始碼]
Clipboard

待辦事項
新增缺失資訊


零配置網路

[編輯 | 編輯原始碼]

零配置網路 (zeroconf) 是一組技術,它以點對點的方式自動建立一個可用的網際網路協議 (IP) 網路,無需人工干預或專用配置伺服器。

Bonjour,以前稱為Rendezvous。由Apple Inc.服務發現協議。Bonjour 以點對點的方式定位裝置,例如印表機,以及其他計算機和這些裝置在本地網路上提供的服務,使用多播來維護域名系統記錄。該軟體內置於從 10.2 版開始的 Apple 的Mac OS X作業系統中,並且可以安裝到使用Microsoft Windows作業系統的計算機上。Bonjour 還支援包含其他軟體的元件,例如iTunes

Bonjour for Windows (http://support.apple.com/downloads/Bonjour_for_Windows )
Bonjour for Windows 包含一個外掛,用於使用 Internet Explorer 發現已釋出的 HTTP 伺服器。如果您在本地網路上擁有嵌入式 HTTP(Web)伺服器的 Bonjour 裝置,它們將出現在列表中。

網際網路中繼聊天 (IRC)

[編輯 | 編輯原始碼]

網際網路中繼聊天,通常縮寫為IRC,是一種即時基於文字的多使用者通訊協議規範和實現;它在網路上的使用者之間中繼訊息。IRC 出生於 1988 年的某個時候,來自Jarkko Oikarinen 的想法。根據 IRChelp.org (http://www.irchelp.org/irchelp/rfc/ ),IRC 的官方規範是在 1993 年以RFC 格式編寫的。該協議在“RFC 1459:網際網路中繼聊天協議”中定義,這是對 IRC 協議的介紹和詳細資訊的絕佳來源。

IRC 的最大架構單元是IRC 網路。世界上可能有數百個 IRC 網路,每個網路都平行執行並且彼此獨立。登入到一個網路的客戶端只能與同一個網路上的其他客戶端通訊,而不能與其他網路上的客戶端通訊。每個網路都由一個或多個IRC 伺服器組成。IRC 客戶端是一個程式,它連線到給定的 IRC 伺服器,以便伺服器將通訊中繼到同一個網路上的其他客戶端,但不一定是同一個伺服器。

IRC 上的訊息以塊的形式傳送。也就是說,其他 IRC 客戶端不會看到一個人在打字和編輯時的狀態。一個人建立一個訊息塊(通常只是一句話),然後立即傳輸該塊,該塊由伺服器接收,並根據地址,將其傳遞給相應的客戶端,或將其中繼到其他伺服器,以便再次傳遞或中繼,等等。要了解 IRC 網路上交換的訊息,您可以檢視 (http://www.alien.net.au/irc/irc2numerics.html),它清楚地識別了幾個實現和功能。

連線到伺服器後,透過IRC 暱稱實現對其他客戶端的定址。暱稱只是一個唯一的 ASCII 字串,用於標識特定的客戶端。雖然實現方式不同,但暱稱的限制通常規定它們只能由字元 a-z、A-Z、0-9、下劃線和連字元組成。

IRC 上的另一種定址方式,也是它最突出的特點,是IRC 頻道。IRC 頻道通常與 CB 無線電(公民頻段無線電)頻道相比較。雖然使用 CB 時,據說人們在“收聽”一個頻道,但在 IRC 中,人們的客戶端據說“加入”了該頻道。傳送到該頻道的任何通訊都會被客戶端“聽到”或看到。另一方面,同一網路上甚至同一伺服器上的其他客戶端,但不在同一頻道上的客戶端將不會看到傳送到該頻道的任何訊息。

有關 IRC 的更新資訊,可以從 IRC.org 獲取,支援 IPv6 的遷移以及新的技術論文,IETF(網際網路工程任務組)批准了最新的技術草案(2000 年 4 月 - 作者為 C Kalt)

     RFC 2810 : IRC Architecture
     RFC 2811 : IRC Channel-Management
     RFC 2812 : IRC Client-Protocol
     RFC 2813 : IRC Server-Protocol

這些文件已經可以在 IRC.org 的官方 FTP 伺服器上獲得,可以透過 ftp://ftp.irc.org/irc/server 訪問。

雖然 IRC 本質上不是 P2P 協議,但 IRC 確實有一些擴充套件可以支援從客戶端到客戶端的文字和檔案傳輸,而無需任何中繼。這些擴充套件被稱為 DCC(直接客戶端到客戶端)和 CTCP(客戶端到客戶端協議)。

Ident 協議

[edit | edit source]

Ident 協議,在 RFC 1413 中定義,是一種網際網路協議,它可以幫助識別特定 TCP 連線的使用者,並將他們與在同一伺服器上共享相同連線的其他人區分開來。

Ident 協議旨在作為伺服器 守護程序,在使用者的計算機上執行,它接收對指定 的請求,通常為 113。然後,伺服器將傳送一個專門設計的響應,用於識別當前使用者的使用者名稱。

大多數獨立的 Windows 計算機預設情況下沒有執行或存在 Ident 服務,在這種情況下,您可能需要在自己的計算機上執行 Ident 伺服器(有幾個獨立的伺服器可用),另一方面,如果您在 Unix/Linux 機器上,該服務預設情況下就在那裡。一些 Windows IRC 客戶端也內建了 Ident 伺服器。

執行 Ident 伺服器的原因是由於 IRC 伺服器出於安全原因使用該資訊(這並不是一種特別有效的方式),有些伺服器甚至會阻止沒有 Ident 響應的客戶端,主要原因是它使透過“開放代理”或您已以某種方式損害單個帳戶但沒有root許可權的系統連線變得更加困難。

DCC(直接客戶端連線)協議

[edit | edit source]
Clipboard

待辦事項
新增缺失資訊


CTCP(客戶端到客戶端協議)協議

[edit | edit source]

使用 CTCP,客戶端可以實現諸如“ctcp nickname version”或“ctcp nickname ping”之類的命令來獲取有關其他使用者的某些有趣資訊(就像 mIRC 所做的那樣)。


Clipboard

待辦事項
新增更多資訊


機器人或機器人

[edit | edit source]

IRC 系統也支援(ro)機器人,在這種情況下,它們不是真實使用者,而是從指令碼(文字)檔案中載入到 IRC 客戶端中的一組命令,甚至是一個連線到 IRC 頻道的獨立程式。它們的作用是簡化人機互動,提供某種程度的自動化,甚至用於測試或實現某些 AI。

基本命令

[edit | edit source]

以下是 IRC 的一些基本命令

命令 它做什麼 示例
/attach

/server

登入到伺服器 /attach irc.freenode.net

/server irc.freenode.net

/nick 設定您的暱稱 /nick YourName
/join 加入頻道 /join #wikibooks
/msg 傳送訊息(可以是私人訊息或傳送給整個頻道) 傳送頻道訊息:/msg #wikibooks hello world!

傳送私人訊息:/msg JohnDoe Hi john.

/whois 顯示伺服器上使用者的相關資訊 /whois JohnDoe
/clear

/clearall

清除頻道的文字。

清除所有開啟的頻道的文字。

/clear

/clearall

/away 設定離開訊息。注意:再次輸入 /away 以從離開狀態返回。 /away I'm away because...
/me 傳送動作到頻道。請參閱示例。 以下

/me loves pie.

將在 JohnDoe 的情況下輸出到聊天中

JohnDoe loves pie.

特權使用者命令

[edit | edit source]

適用於半操作員、頻道操作員、頻道所有者和管理員的命令

命令 它做什麼 示例
/kick 踢出或將使用者從頻道中移除。您必須是半操作員或更高許可權才能執行此操作。 將使用者從頻道踢出並附帶原因:/kick JohnDoe I kicked you because...
/ban

/unban

禁止使用者進入頻道。您必須是頻道操作員或更高許可權才能執行此操作。

解除使用者在頻道中的禁令。您必須是頻道操作員或更高許可權才能執行此操作。

/ban JohnDoe

/unban JohnDoe

IRC 網路

[edit | edit source]

安全風險

[edit | edit source]
Clipboard

待辦事項
新增缺失資訊


軟體實現

[edit | edit source]
  • KVIrc ( http://www.kvirc.net/ ) 是基於 Qt GUI 工具包並用 C++ 編寫的開源(GPL)行動式 IRC 客戶端。
  • Bersirc ( http://bersirc.free2code.net/index.php/home/ ) 是一個用 C 編寫的開源 IRC 客戶端(LGPL),它透過利用 Claro GUI 工具包在 Windows 上執行(Linux 和 Mac OS X 埠正在開發中)。
  • XChat ( http://www.xchat.org/ ) 是適用於 Windows 和 UNIX(Linux/BSD)作業系統的 IRC(聊天)程式。IRC 代表網際網路中繼聊天。XChat 執行在大多數 BSD 和符合 POSIX 的作業系統上。開源(GPL),用 C 編寫。
  • Irssi ( http://irssi.org/ ) 是一款 IRC 客戶端程式,最初由 Timo Sirainen 編寫,並在 GNU 通用公共許可證的條款下發布。它使用 C 程式語言編寫,在正常執行中使用文字模式使用者介面。
  • mIRC ( http://www.mirc.co.uk/ ) 是適用於 Windows 的共享軟體網際網路中繼聊天客戶端,由 Khaled Mardam-Bey 於 1995 年建立並開發。最初它只用於此目的,但由於其整合的指令碼語言,它已經發展成為一種高度可配置的工具,可用於多種用途。

您還可以檢視維基百科IRC 客戶端列表IRC 客戶端比較(未更新)...

隱形 IRC 專案

[edit | edit source]

由 invisibleNET 組織建立的一種比普通 IRC 網路更先進的技術。invisibleNET 是一家以研發為主導的組織,其主要目標是創新智慧網路技術。它的目標是在廣泛使用但臭名昭著的不安全的網際網路上提供最高的安全和隱私標準。

Invisible IRC 專案(http://invisibleip.sourceforge.net/iip/)是一個三層級的,點對點分散式網路,旨在成為一種安全的、私密的傳輸介質,用於高速、低容量、動態內容。特點

  • 使用 Diffie-Hellman 金鑰交換協議實現完美前向安全性
  • 不斷輪換會話金鑰
  • 128 位 Blowfish 節點到節點加密
  • 160 位 Blowfish 端到端加密
  • 使用填充流量來阻止流量分析
  • 使用加密簽名的名稱空間進行節點標識的安全動態路由
  • 節點級別的洪泛控制
  • 無縫使用標準 IRC 客戶端
  • GUI 介面
  • 點對點分散式拓撲結構,用於保護使用者身份
  • 完全模組化設計,所有協議都支援外掛

IIP 軟體在 GPL 許可下發布,可用於 Windows 98/ME/NT/2000/XP、*nix/BSD 和 Mac OSX,用 C 語言編寫。

即時通訊

[edit | edit source]

即時通訊可以被認為是 P2P 的一種子型別,簡單來說,它是在網路(LAN 或 WAN)上透過文字進行兩個或多個使用者之間即時交流的行為。這需要使用客戶端程式,以便在傳送訊息時,目的地應用程式會在短時間後顯示通知,讓使用者可以回覆原始訊息。IM 協議可以是集中式的、分散式的或兩者混合的。

即時通訊允許使用者以幾乎即時的方式向其他使用者傳送快速筆記或提醒。IM 可以,也可能不包括任何 P2P 實現或支援額外的 P2P 服務,例如檔案共享、VoIP 或視訊會議,廣義的定義是,IM 是幾乎瞬時的訊息交換,無論它採取何種形式。

由於任何 P2P 網路都依賴於參與,因此支援某種 IM 實現非常重要,因為它可以建立社群並維持網路。


Clipboard

待辦事項
描述它是如何運作的,未來發展,以及它與 P2P 的關係...


安全風險

[edit | edit source]
Clipboard

待辦事項
點對點(P2P)的世界


IM 軟體實現

[edit | edit source]
  • Gaim/Pidginhttp://pidgin.im/pidgin/home/)開源(GPL)即時通訊客戶端,支援 Windows、GNU、BSD 和許多 Unix 衍生系統,相容 AIM、ICQ、MSN、雅虎、IRC、Jabber、Gadu-Gadu、SILC、GroupWise Messenger 和 Zephyr 網路。
  • Trillianhttp://www.ceruleanstudios.com/)是可換膚的聊天客戶端,支援 AIM、ICQ、MSN、雅虎和 IRC,它還包含許多那些聊天程式中沒有的功能。
  • BitWise IMhttp://www.bitwiseim.com),加密跨平臺(Windows、Mac OS X 和 Linux)即時通訊,免費但閉源,使用wxWidgets。還支援白板、語音聊天。
  • digsbyhttp://www.digsby.com),一個閉源的、僅限 Windows 的多協議 IM 客戶端,可以讓你透過一個簡單的、易於管理的聯絡人列表與 AIM、MSN、雅虎、ICQ、谷歌 Talk 和 Jabber 上的所有朋友聊天。
  • 谷歌 Talkhttp://www.google.com/talk/),僅限 Windows XP+,閉源,支援 IM,並與 Gmail(谷歌 WEB 郵件)平臺互動。


Clipboard

待辦事項
AIM、ICQ、MSN、雅虎、IRC、Jabber、Gadu-Gadu、SILC、GroupWise Messenger 和 Zephyr

語音 over IP 也可以看作是 IM 的擴充套件,文字被即時音訊或影片取代,技術挑戰非常相似,如果不考慮需要傳輸的資料型別和由於時間因素而需要考慮的特定因素。IM 應用程式通常也支援 VoIP 或視訊會議。

VoIP 上的安全面臨著與其他 P2P 協議和應用程式相同的漏洞和安全威脅,包括模糊測試、洪泛攻擊、欺騙攻擊、隱形攻擊和 VoIP 垃圾郵件。

Napster

[edit | edit source]

Napster 網路是使用點對點 TCP 上的客戶端-伺服器協議在應用程式級別建立的。在這種情況下,伺服器是一個集中式目錄,它將儲存所有提供檔案的索引(MP3/WMA)。客戶端將連線到伺服器,向伺服器標識自己(使用者在伺服器上擁有帳戶),並將他們共享的 MP3/WMA 檔案列表傳送給它,使其他客戶端能夠搜尋該中央儲存庫以查詢網路上的任何檔案,然後從任何可用的來源請求它。

Napster 協議規範

軟體實現

[edit | edit source]
  • OpenNaphttp://opennap.sourceforge.net),一個基於 Napster 的點對點網路,建立為開源(GPL),用 C 語言編寫,使用 Win32,因此適用於 Windows。旨在擴充套件 Napster 協議,允許共享任何媒體型別,並新增將伺服器連結在一起的功能。已停止維護。
  • audioGnomehttp://www.audiognome.com),閉源,但作為 Windows 的免費軟體。
  • JNervehttp://jnerve.sourceforge.net),一個開源(GPL)的 Java Napster 伺服器協議實現,旨在實現跨平臺相容性。
  • Napsackhttp://napsack.sourceforge.net)是一個專門的多執行緒客戶端,用於將 Napster 查詢廣播到多個伺服器;目標伺服器列表是從 www.napigator.com 獲取的,並且是使用者可過濾的(基於索引的使用者數、檔案數或千兆位元組數)。使用 Java 開源(GPL)。

Gnutella

[edit | edit source]

Gnutella 是一個開放的檔案共享網路,最初由 Nullsoft 的 Justin Frankel 建立。這意味著,與大多數其他網路不同,任何人都可以編寫一個客戶端來訪問 GNet,只要它符合公開的規範。

規範由GDF(Gnutella 開發論壇)討論和建立,這是一個面向開發人員的開放郵件列表,迄今為止擁有超過 1000 名成員。之後它們在rfc-gnutella中被記錄。透過這種方式,所有程式都共享一個共同的基礎,同時協議也允許客戶端特定的選項。開發人員謹慎地確保最大程度的向後相容性。


Clipboard

待辦事項
[http://rfc-gnutella.sourceforge.net/developer/testing/index.html RFC-Gnutella 0.6]


儘管有這個名字,但 Gnutella 不是 GNU 軟體,儘管一些 Gnutella 客戶端是 GPL 授權的。它是一個開放的網路,它的名字的起源可能更容易透過吃太多 Nutella 來找到,而不是在 GNU 中找到。(這意味著:Gnutella 不是 FSF 的專案,也不與 GNU 軟體工具相關)。雖然 Gnutella 最初被定義為一個完全分散式的資訊共享技術,但該協議的後續版本是集中式和分散式網路的混合體,包含“伺服器”(超級對等體)和“客戶端”(葉子節點)。

Gnutella 客戶端軟體基本上是一個小型搜尋引擎(提供對網路搜尋引擎的替代)和檔案服務系統合二為一。新實現的 Gnutella 還支援 Tiger 樹雜湊(TTH)用於檔案傳輸。

Gnutella 的一個兄弟網路值得特別關注,儘管當前客戶端的一些開發人員可能會否認它。大多數 Gnutella 開發人員稱之為 MP(Mike 的協議)或 Shareaza 協議,而它的開發人員稱之為 Gnutella2,這個名字給他的程式(Shareaza)帶來了大量的媒體報道,並在 the_gdf 中造成了很多爭議和反感。

Gnutella2(Mike 的協議,G2)

由於開發人員社群未能就協議演進達成共識,導致 Gnutella 協議出現分支

Gnutella2 也被稱為 Mike 的協議,因為最初的更改和實現來自單個開發人員Michael Stokes。2002 年 11 月,Michael Stokes正式地、單方面地宣佈了 Gnutella2 協議的建立,該協議在開發人員中引起了分裂,導致一些 Gnutella 應用程式不再支援這些修改,因為最初的提案與其他供應商的概念(尤其是 LimeWire 和 Bearshare)存在衝突。

現在產生的實現放棄了所有舊的 Gnutella 協議,除了連線握手,並採用了一種全新的搜尋演算法。Gnutella2 通常縮寫為G2


Clipboard

待辦事項
完整資訊


網路模型

[編輯 | 編輯原始碼]

最初的模型: FoF

[編輯 | 編輯原始碼]

你可以將 Gnutella 網路的最初模型想象成朋友之間互相打電話獲取資訊。一個人問另外五個人,每個人再問另外五個人,以此類推。第一步後,接觸到的人數為 5 人,第二步為 25 人,第五步為 3125 人,第七步為 78,125 人,第十四步約為 61 億人。這足以接觸到地球上的每個人。最初的 Gnutella 使用了 7 步(稱為 HTL: Hops To Live)。

這個模型最大的問題(其中之一)是你必須先成為其中一員才能使用它。

FoF 模型的問題
[編輯 | 編輯原始碼]

朋友的朋友模型(FoF)具有一些缺點,這些缺點源於搜尋執行的方式。如果搜尋結果太多,連線你的節點(你最近的 5 個朋友)可能會過載,因為每個答案都必須經過它們,因為它們不提供你的“電話號碼”,而是提供它們自己的號碼並將答案傳遞給你。如果你問校園裡大學領導的名字,現實中你會得到數百個答案,而網路上則會得到數千到數百萬個答案。同樣,如果每個問題都傳遞給一個包含 75,000 到 600,000 臺計算機的網路中的每個人,並且每臺計算機每小時只問一次,那麼它們中的每一臺都必須每秒回答大約 130 到 1600 個問題。而且他們必須將這些問題傳遞下去。雖然計算機速度很快,而且今天的網際網路連線與幾年前相比可以處理相當多的流量,但這對它們來說仍然太多了。想象一下,你的電話整天不停地響,接聽各種各樣的問題。

加入網路

[編輯 | 編輯原始碼]

為了解決連線問題,已經出現了一些解決方案。

第一種方法: Ping-快取
[編輯 | 編輯原始碼]

Ping-快取是指節點(即你)詢問其朋友他們的朋友是誰。這意味著你的朋友會把你介紹給他們的朋友,特別是他們高度重視的朋友,你將所有新的地址都寫進你的電話簿,這樣你就可以在你的原始朋友度假時知道該聯絡誰(有點像參加一個持續的雞尾酒會)。這很容易,並且有給你提供非常可靠聯絡人的優勢,但是如果沒有一個已經加入網路的聯絡人,就沒有辦法加入網路。這意味著你始終可以重新加入,但如果以前從未加入過,你將無法連線。

第二種方法: 記住誰回答
[編輯 | 編輯原始碼]

第二種方法非常簡單。當你的五個朋友中的一個回電話說史密斯(你以前不認識他)知道一些事情時,你記下她的號碼。當你下次把他作為你的五個直接聯絡人之一打過去時,你更有可能更快地得到你的資訊,因為他很可能有一些與你興趣相似的朋友(他從哪裡得到資訊?),而這些人比隨機挑選的人更有可能擁有你的資訊(至少當你問與你上次問題類似的問題時)。缺點是這些聯絡人可能不常在家,因此你可能會找到一個知識淵博的聯絡人,但你可能再也無法聯絡到他。仍然沒有辦法第一次加入網路。現在我們談談 Gnutella 最近的發展之一: GWebCaches。我將在下一部分討論它們。

第三種方法: GWebCaches
[編輯 | 編輯原始碼]

為了保持一致性,GWebCache 是一種將自己的電話號碼公佈在報紙上並記錄所有來電者的聯絡人。當你離開一段時間後,不再確定你的聯絡人是否仍然擁有相同的手機號碼時,你可以撥打公開的聯絡人的電話。在提供號碼之前,他/她會問你:“你認識其他公開的聯絡人嗎?如果認識,請告訴我他們的號碼。”之所以這樣做是因為他們不能閱讀所有報紙,而你一直在做這件事,而且沒有花太多力氣。這樣,他們就可以互相跟蹤。然後,聯絡人會給你一些號碼讓你撥打,並記下你的號碼(以便提供給其他人)以及他/她知道的其他公開聯絡人的地址(GWebCaches)。

這大致是 GWebCaches 的工作方式。GwebCaches 僅對第一次連線至關重要。當你本地地址簿為空時,你就可以使用它們。它們不應該優先於你的本地地址簿。正如我所說,它們是 Gnutella 的一項新發展,因此我將繼續介紹 Gnutella 內的一些最新變化以及未來計劃。

超級節點和葉子節點

[編輯 | 編輯原始碼]
改變誰呼叫誰

你一定有認識很多其他人的朋友,你可以問他們,並且確信他們會知道能給你答案的人。在 Gnutella 中,這些被稱為超級節點。超級節點不需要自己知道很多東西,他/她只需要知道誰知道。在 Gnutella 中,這意味著一個優秀的超級節點不需要擁有很多檔案就能使網路受益。如果你害怕分享太多東西,你應該在 Gnutella 中成為一個超級節點。

更詳細的資訊

在計算機世界中,就像在現實世界中一樣,有一些聯絡人可以處理更多的電話,而另一些則不能經常打電話(或負擔不起電話費)。在現實世界中,這是因為他們有更多空閒時間。而在計算機世界中,這是因為它們擁有更快的連線(比如 DSL、電纜、T1、T3 或類似的寬頻)。意識到這一點後,開發人員決定改變拓撲結構,這意味著當你從外部繪製網路時,它看起來像什麼。現在你不再只是給任何朋友打電話,而是隻給那些你知道有時間接聽你的電話並將其轉發給其他人的朋友。為了避免你接到太多電話,他們會問你擁有哪些型別的資訊,或者用更人性化的話來說,你的專業領域是什麼。在計算機世界中,這意味著你的計算機向超級節點發送所有檔案的列表,我們稱這些型別的聯絡人為超級節點。該列表包含所有共享檔案的摘要(雜湊字串)(你決定讓其他人下載的檔案),下載者可以透過它來驗證這些檔案確實是他們想要的檔案。每當一個呼叫到達超級節點時,它會檢查你是否可能知道答案,並且只在這種情況下才呼叫你。

這些超級節點與許多其他節點建立了連線,這意味著它們有一個非常大的地址簿。通常情況下,它們與地址簿中 16 個其他超級節點保持聯絡,並將問題傳送給他們,而這些超級節點又會將其傳送給另外 16 個超級節點。此外,它們大約有 16 個葉子節點,這些葉子節點無法或不願經常打電話,超級節點會接受來自它們的電話,並知道它們的 檔案或在人類世界中的專業領域。

對於超節點來說,這似乎是一筆不公平的交易,因為他們投入的資源遠遠超過葉子節點,以維持網路的完整性。但實際上並非如此。雖然超節點 (UP) 將大部分時間用於維持網路執行,但葉子節點則專注於收集和傳遞資訊。因此,當任何使用者,無論是超節點還是葉子節點,想要了解某件事時,他們只需發起一個呼叫,然後一個葉子節點專家就可以向他們解釋。這樣,每個人都可以專攻自己的領域,從而為所有人帶來更多收益。

超節點間 QRP
[編輯 | 編輯原始碼]

雖然在超節點模式下,並非每個人都需要參與向其他人傳送問題,並且人們可以專攻分享自己的資訊,但超節點仍然會將每個問題傳送給所有人,而不會考慮該超節點是否擁有葉子節點,以及葉子節點是否擁有這些檔案。這聽起來很正常,因為超節點如何知道其他超節點擁有哪些檔案呢?答案,同樣來自現實生活。一個普通人會知道她的朋友,也知道他們中哪些人可能知道某個問題的答案,哪些人肯定不知道。在現實生活中,這主要是透過友好的聊天來完成的。

現在,計算機通常不會閒聊,因此他們不會透過這種方式交換資訊。因此,查詢路由協議 (QRP) 被開發出來。在 QRP 中,每個葉子節點都會告訴其超節點它擁有哪些檔案,但它們不會使用檔名,因為這會佔用太多空間,而是將檔名中每個單詞都儲存為數字(畢竟這是計算機)。你可以將這個過程想象成玩“戰艦遊戲”(數字形成一個有二維座標的棋盤)。一個超節點不會將所有問題都發送給葉子節點,而只會傳送那些葉子節點可能能夠回答的問題(擊中船隻),因此葉子節點接收到的無用呼叫大大減少。

現在,既然這大大減輕了葉子節點的負擔,為什麼不擴充套件它呢?這正是他們所做的事情。現在,所有超節點都會將其棋盤傳送給其直接鄰居。他們只會將那些需要再進行一步搜尋才能找到答案的搜尋請求傳送給那些在其棋盤上擊中船隻的其他超節點。這意味著,只有在搜尋結果可能存在的情況下才會執行最後兩步搜尋。你可以很容易地看到為什麼這會大幅減少頻寬使用量:想象一棵樹,一棵普通的樹,而不是那些數學結構。如果你試圖數葉子,你幾乎沒有機會。但如果你去掉葉子,只數樹枝,你的工作量就會大大減少。如果你再去掉所有這些細小的樹枝,你就可以真正開始數它們了。QRP 並沒有去除所有葉子和所有細小的樹枝,但它去除了那些無法提供答案的葉子和樹枝。由於問題必須經過的每個部分都會消耗頻寬,而且葉子節點的數量遠遠超過樹枝,因此在許多情況下,去掉最後兩步中的很多步驟(這意味著去掉很多葉子和細小的樹枝)會減少計算機需要傳送的查詢數量(葉子節點的數量遠遠超過樹枝)。這個例子並不適用於整個 Gnutella 網路,但它很適合這裡。

搜尋:動態查詢
[編輯 | 編輯原始碼]

現在,雖然超節點模式和 QRP 部分解決了以下問題:你沒有時間向別人解釋某件事,或者別人沒有時間向你解釋某件事,因為你的電話一直在響,接到的都是你不知道答案的問題(或者用技術術語來說:因為網路流量超過了你的連線速度),但仍然存在另一個問題,如果你仔細觀察,它可能並不明顯。在現實世界中,一個超節點會詢問一個能夠提供資訊的專家,直到找到為止,然後停止詢問。在計算機世界中,問題會不斷髮送,傳送給儘可能多的聯絡人,而不考慮是否已經有了答案。

動態查詢改變了這一點。現在,超節點一次詢問一個其他超節點,然後等待一段時間,看看是否得到答案。當他們得到足夠多的答案以滿足需求時,他們就會停止詢問更多。這聽起來很自然,但對 Gnutella 來說是一個巨大的進步,因為它節省了原本浪費在非常流行的問題上的資源。我將再次以大學領導為例:現在,如果你詢問大學領導,你的超節點會首先看看他們是否直接認識可以回答你問題的人。然後,他們會簡單地給你一些他們認識的住在校園裡的人的聯絡方式。你仍然會得到不止一個答案,因為他們會給你不止一個聯絡方式,因為他們無法確定你能否聯絡到他們給你的每個人。但你不會收到成千上萬的電話號碼(校園裡每個學生都有一個),首先是因為超節點會在那些不會給你帶來額外收益的事情上浪費時間,其次,因為你無法打給所有這些人,第三,因為這樣你可能無法再聯絡到你的超節點,因為他們會忙於接聽來自其他告訴他們聯絡方式的人的回電,以及將你的問題傳送給其他超節點。

無需搜尋即可找到資源,也稱為下載網格

[編輯 | 編輯原始碼]

現在你可能會說,“但我無法從這三個人那裡下載,因為其他人已經在下載了。我想獲取所有可以下載的地址。”(你並不是唯一有這種想法的人。我也有同樣的感受。)透過觀察現實世界,我們可以找到解決這個問題的方法,而不必在上面浪費太多資源。在現實世界中,如果你詢問一個專家向你解釋某件事,而那個專家很忙,他或她會知道一些其他專家(因為他們相互認識),這些專家可能現在有更多時間。

將這應用到 Gnutella 中並不像超節點-葉子節點模型或動態查詢模型那樣容易。但程式設計師找到了方法。正如我在動態查詢模型中所說,你會得到不止一個可以詢問的聯絡方式。現在,當你呼叫一個應該知道答案的人時,你還會向他或她提供你所知道的其他聯絡方式。這樣,專家們就會互相認識(就像我之前提到的 GWebCaches 那樣,它們會學習到其他類似的快取)。由於每個詢問者都會帶上自己的聯絡方式集合,專家們就會了解到越來越多的其他地址,當你在詢問他們解釋某件事,而他們現在沒有時間的時候,他們會將這些地址提供給你(即使他們有時間,他們也會這樣做,以防萬一他們會被打斷,而且因為在 Gnutella 中,你可以從多個來源同時下載,就像你在 overnet 網路中一樣(overnet 網路對此做到了極致,但它只對大型檔案真正有效)。此外,專家們也會將你新增到他們備用聯絡人的名單中,只要你足夠了解,可以向其他人解釋。

這就是為什麼很多人會從你那裡下載你剛下載的檔案。

蜂群式下載和部分檔案共享
[編輯 | 編輯原始碼]

蜂群式下載的解釋很簡單(但在朋友的朋友模型中很難實現,因此我在這裡只忽略它)。它的工作原理是簡單地從多個使用者同時獲取一個檔案。檔案被簡單地分成幾個部分,就好像你想從一些朋友那裡得到一本書,每個人只影印了幾頁一樣。當你要求每個人影印書的不同部分時,你就會得到完整的書,而且每個人只需要做很少的工作(如果一個人沒有時間做,另一個人可以做)。

蜂群式下載與下載網格和部分檔案共享 (PFS) 最佳搭配,部分檔案共享允許使用者分享他們正在下載的檔案,因為他們可以分享他們已經擁有的部分,而他們仍然從其他人那裡下載。你可以複製你擁有的那些頁面,而無需擁有整本書,因為你的頁面都已編號,朋友可以向你索取特定的頁碼。

透過防火牆下載
[編輯 | 編輯原始碼]

想象一下,有些人無法接聽電話,但可以給別人打電話(也許是因為他們只使用公用電話,或者他們的號碼沒有顯示在你的手機上,而且他們不喜歡公佈自己的號碼,因為他們不喜歡被推銷電話或恐嚇電話騷擾)。在 Gnutella 中,這些是位於防火牆後面的計算機。他們可以呼叫其他人並從其他人那裡獲取資訊,但沒有人可以呼叫他們。

解決方案是讓防火牆後面的使用者定期呼叫他們的超節點,當有人想呼叫他們時,他們只需呼叫超節點,然後超節點將兩部電話放在一起,一部是防火牆後面的使用者(無法接聽電話的使用者)撥打的電話,另一部是您撥打的電話。這樣你就可以和防火牆後面的使用者通話,但這需要同時進行兩個電話呼叫,這意味著在計算機世界中需要兩倍的頻寬。防火牆後面的使用者會始終保持與超節點的連線,超節點會簡單地中轉資訊或資料。

有一些計劃旨在讓其他使用者來完成電話連線,從而減輕超節點的額外頻寬使用負擔。然後,當有人想從防火牆後面的專家那裡獲取資訊時,超節點會告訴防火牆後面的使用者和詢問者呼叫第三個人。然後,那個人會將兩部電話放在一起。在 Gnutella 中,大多數使用者擁有三到五部電話,因此這不會是一個大問題。這些電話聯結器很可能被稱為路由節點。

檔案磁力連結

[編輯 | 編輯原始碼]

檔案磁力連結偏離了“朋友的朋友”模式。它們是網頁上的連結,你只需點選它們,它們就會告訴你的檔案共享程式去搜索 Gnutella(實際上也包括其他網路)以查詢特定檔案,並準確下載它。

你可以把它想象成報紙上的文章,文章中提供的資訊會告訴你的超級節點,你想要學習的專家需要知道哪些資訊。在現實生活中,你很可能會找到一位專家,以及從他或她那裡學到東西的人。

使用磁力連結,你可以避免獲取不良檔案,因為它們使用雜湊字串,這就像專家提供給你的資訊的摘要一樣。如果他或她開始告訴你垃圾資訊,你馬上就會發現它與摘要不符。在 Gnutella 中,程式會請求具有相同摘要的檔案,而擁有這些檔案的使用者會分配給這些檔案相同的摘要,也稱為雜湊字串。下載後,程式會進行自己的摘要,並檢查它們是否真的匹配。如果不匹配,它會告訴你檔案已損壞。來自相同檔案的摘要總是完全相同的,因為它們是透過特定的數學方法完成的,當給定相同資料(也稱為資訊)時,這些方法總是得到相同的結果。

與磁力連結不同,KaZaA 連結和 eDonkey 連結並不安全,因為它們使用的方法可能會被偽造的檔案欺騙(例如,KaZaA 連結會請求一種摘要,該摘要只檢查資訊的開頭和第一部分,而所有其他部分都被忽略,以便更快地建立摘要。自然,很容易讓你獲得虛假資訊,因為它們只需要在開頭說真話,然後就可以隨心所欲地撒謊或編造資訊)。有關磁力連結的更多資訊,請訪問此處:Magnet-UriMagnetLink.org

現在有一種新的磁力連結版本:KaZaA 磁力連結。不幸的是,這些並不安全,因為它們使用的是 KaZaA 雜湊系統(不完整的摘要)進行了一些更改(現在添加了另一個較小的摘要,它可能會告訴你關於缺失部分的資訊,但他們沒有釋出它們是如何建立它的)。如果 KaZaA 磁力連結提供了有關搜尋詞的資訊,它們可能會與 Gnutella 配合使用,但它們不能保證你能得到它們提供給你的東西。如果你在連結中找到“kzhash”一詞,它可能並不安全(除了名字有點錯位之外)。

Lime Wire LLC

[編輯 | 編輯原始碼]

LimeWire 是一款跨平臺 Java 平臺點對點檔案共享 客戶端,開源 (GPL),它使用 Gnutella 網路來查詢和傳輸檔案。它還鼓勵使用者付費,付費後使用者就可以使用 LimeWire Pro。它還透過使用 C++、Boost 許可的 libtorrent 庫支援 BitTorrent 協議。

軟體實現

[編輯 | 編輯原始碼]

要成為 Gnutella 網路的一部分,可以使用以下列出的客戶端之一

  • Deepnet Explorer (http://www.deepnetexplorer.com/) 是一款帶有 RSS 新聞閱讀器、P2P 客戶端整合 (Gnutella) 和網路釣魚警報的瀏覽器,閉源,僅限 Windows,免費軟體。
  • Phex 跨平臺 Java 客戶端。
  • XoloX
  • Gnucleus - Gnutella、Gnutella2 (G2) 使用 C++ 和 Microsoft MFC 庫編寫。核心是 LGPL,並使用 Windows COM-base 與 GPL 前端通訊。
  • Gtk-Gnutella,GPL,適用於 GNU/Linux。
  • Hydranode(多協議,在 eDonkey2000/eMule 部分中引用)
  • ezpeer,一款中國客戶端。
  • pp365,一款中國客戶端。
  • POCO,一款中國客戶端,使用 GnucDNA。
  • Bearshare,適用於 Window 的免費閉源軟體。
  • CocoGnut,適用於 RISC OS。
  • Swapper,適用於 Windows 的免費閉源軟體,利用 .NET。
  • TrustyFiles,適用於 Windows,支援 FatTrack (KaZaA)、Gnutella 和 G2。
  • Shareaza (http://shareaza.sourceforge.net/),開源 (GPL),使用 C++、MFC 和 ATL 編寫。支援 Gnutella2 (G2)、Gnutella、eDonkey2000/eMule、BitTorrent、FTP 和 HTTP 協議的多網路點對點檔案共享客戶端。
  • FrostWire (http://sourceforge.net/projects/frostwire/),一款適用於 Gnutella 網路的點對點 (P2P) 資訊共享客戶端。該專案與 LimeWire LLC 無關。它是 Limewire 的 Java 實現的分支,承諾永遠不包含內容過濾器。FrostWires 的原始碼 (Java) 採用 GNU GPL 開源許可證。較新的版本已遷移到使用 BitTorrent 協議。
    • Acquisition,一款基於 Limewire 核心的 Mac OS X 客戶端,使用 Cocoa 編寫,共享軟體。
    • XNap,一款使用 Limewire 核心進行 Gnutella 的多網路 Java 程式。

Ares 網路

[編輯 | 編輯原始碼]

Ares(軟體實現)是在 2002 年中期開發的,最初使用 Gnutella 網路。在運行了六個月後,它切換到了自己的網路,該網路包含葉子和 超級節點 p2p 架構。由於協議難以識別,Ares 有時是唯一一個可以在受限網路(例如一些大學校園)上正常執行的 P2P 客戶端。

軟體實現

[編輯 | 編輯原始碼]
  • Ares (http://aresgalaxy.sourceforge.net/),一款使用 Delphi/Kylix 編寫的聊天/檔案共享 P2P 實現。它基於一個組織成葉子和超級節點的網路,以廣播式搜尋為特徵。Ares 可以透過 DHT 技術提供更廣泛的搜尋範圍,使用 mime 過濾器到 DHT 引擎。Ares 使用者還可以加入聊天室或主持頻道。它適用於 32 位 MS Windows 作業系統 (NT/2000/XP),並在 GPL 許可證 (GNU 通用公共許可證) 下開源。從 1.9.0 版本開始,兩個防火牆後面的對等點之間可以共享資料。從 1.9.4 版本開始,Ares 包含對 BitTorrent 協議的支援。從 1.9.9 版本開始,Ares Galaxy 支援 SHOUTcast 網際網路廣播電臺。
已停止的實現
  • Warez P2P 是一款專有的 P2P 檔案共享 服務,它使用 Ares 網路,並提供類似於 Kazaa 的服務。在 1.6 版本之前,Warez P2P 是 Ares Galaxy 的克隆,由義大利開發者 Alberto Trevisan 建立,但從那時起,它一直由 Neoteric Ltd 獨立開發,直到最近才停止使用。

直接連線

[編輯 | 編輯原始碼]

直接連線是一種點對點檔案共享協議/網路,但它使用中央伺服器,這種對中央點的依賴也可以在舊的 Napster 網路上看到,因為每個伺服器都構建了一個獨立的網路(不像 eMule 那樣是混合網路)。應該注意的是,一些客戶端現在也正在實現 DHT,這將導致使用的網路統一。Direct Connect 協議最初由 Jonathan Hess 開發,用於 Neo-Modus Direct Connect (NMDC) v1,於 2001 年 9 月釋出,部分在 NMDC v2 中釋出,於 2003 年 7 月釋出。

Direct Connect 將伺服器定義為集線器。客戶端連線到中央集線器,該集線器具有連線到它的客戶端或使用者的列表。然後,使用者可以搜尋要下載的檔案,或者與在(該伺服器上)出現的其他使用者聊天。

Direct Connect 還為檔案傳輸實現了 Tiger 樹雜湊 (TTH)。

NMDC 協議

[編輯 | 編輯原始碼]

由 Jon Hess 在 Neo-modus 協議映象中建立 (http://www.teamfair.info/wiki/index.php)

ADC 協議

[編輯 | 編輯原始碼]

ADC 協議(http://dcplusplus.sourceforge.net/ADC.html)與 Neo-Modus 直連 (NMDC) 協議類似。它由一個用於客戶端-伺服器網路的文字協議組成,旨在簡單且可擴充套件。

Jon Hess 透過 Neo-Modus 直連客戶端/集線器為該協議的建立做出了貢獻,最初的想法來自於直連。另一個主要的貢獻來源是 Jan Vidar Krey 的 DCTNG 草案,該草案導致了 Dustin Brody、Walter Doekes、Timmo Stange、Fredrik Ullner、Fredrik Stenberg 等人的後續工作。

集線器軟體實現

[編輯 | 編輯原始碼]
  • DConnect 守護程序http://www.dc.ds.pg.gda.pl/),一個用 C 語言編寫的開源直連集線器(作為守護程序執行)。目前在 GNU Linux 和 FreeBSD 上執行,但計劃使其能夠在所有類 Unix 系統和 Windows 上執行。作為守護程序,它在後臺執行,不需要任何 Xwindow 系統。支援 telnet 管理控制檯。

客戶端軟體實現

[編輯 | 編輯原始碼]

eDonkey 是 eDonkey 網路(也稱為 eDonkey2000 網路或 eD2k)的原始客戶端,由 MetaMachines(Sam Yagan 和 Jed McCaleh)在紐約市建立和管理。它擁有一個穩定的 P2P 社群,該協議比 BitTorrent 更早,它是在 2002 年 Napster 關閉後不久建立的,並與 FastTrack 網路競爭。2005 年 6 月,娛樂行業在美國最高法院取得了勝利,最高法院裁定,如果任何檔案共享開發者誘導此類行為,他們可能會因侵犯版權而被起訴。2005 年 9 月,美國唱片業協會 (RIAA) 向多家商業 P2P 開發商發出停止並 desist 信函,包括 MetaMachines,由於沒有資金來對抗最高法院裁決的解釋,Sam Yagan 承認失敗,正如他對美國參議院司法委員會所作的證詞。

2006 年 9 月 11 日,使用者無法獲得 eDonkey2000 客戶端軟體,2006 年 9 月 12 日,MetaMachines 支付了 3000 萬美元(美金)的和解金,該協議關閉了 MetaMachines 未來處理任何 P2P 技術的任何途徑...

eDonkey 網路是集中的(因為它依賴於伺服器)以提供內容的去中心化共享(未儲存在伺服器上),仍然有許多支援該網路的軟體實現,最受歡迎的是 eMule。

"The eMule Protocol Specification"(http://sourceforge.net/project/showfiles.php?group_id=53489&package_id=145950)由 Yoram Kulbak 和 Danny Bickson DANSS(分散式演算法、網路和安全系統)實驗室 - 希伯來大學計算機科學與工程學院 - 以色列 - 2005 年 1 月 20 日提供,由 Emule 專案提供的 PDF 文件。

由 Jed McCaleb(eDonkey2000 的建立者)啟動,作為 Overnet 專案,以克服對伺服器的需求。Overnet 實現了 Kademlia 演算法。在 2006 年底,由於來自 RIAA 和其他組織的法律訴訟,Overnet 和所有 Overnet 擁有的資源都被關閉。然而,由於 Overnet 的核心是去中心化的,Overnet 客戶端仍然能夠以有限的功能執行。

KadC 庫(http://kadc.sourceforge.net/)提供了一個開源 C 庫,用於在基於 Kademlia 的分散式雜湊表中釋出和檢索記錄。

一篇比較古老的論文名為 Kademlia:基於 XOR 度量的點對點資訊系統,由 Petar Maymounkov 和 David Mazières 撰寫,也可以作為有關該協議的資訊來源。

該網路現在被稱為 Kademlia,並得到許多舊的 eDonkey/Overnet 客戶端實現的支援,尤其是 eMule 專案。Kademlia 是一項研究工作,旨在基於 XOR 度量 路由 來實現一個功能齊全的點對點系統。特別值得注意的是,其目標是實現高效的資料儲存和查詢;匿名性;網路、內容和使用者安全以及身份驗證。

eMule 內容資料庫

[編輯 | 編輯原始碼]
eMule mascot.
eMule 吉祥物。


http://content.emule-project.net/)eMule 專案團隊為 eDonkey2000 和 Kad 網路使用者提供的一項服務,使他們可以免費下載內容並易於查詢。該內容資料庫自 2004 年新年左右開始上線。

軟體實現

[編輯 | 編輯原始碼]
  • eMulehttp://www.emule-project.net/)基於 eDonkey2000 網路的檔案共享軟體實現,但提供比標準客戶端更多的功能,開源 C++/MFC,僅限 Windows,在 GPL 下授權(http://sourceforge.net/projects/emule/
  • Xmodhttp://savannah.nongnu.org/projects/x-mod/)Xmod 專案基於 eMule 客戶端,在 GPL 下開源。
  • xMulehttp://www.xmule.ws/),X11 Mule,旨在將 eMule 的克隆版本帶到幾乎所有主要的 Unix 平臺,特別強調 Linux。使用 wxWidgets 的 C++ 用於 GUI,在 GPL 下開源釋出。
  • MLdonkeyhttp://mldonkey.sourceforge.net)是一個跨平臺、多網路的P2P實現。它支援多個大型網路,例如eDonkey、Overnet、Kademlia、Bittorrent、Gnutella(Bearshare、Limewire等)、Gnutella2(Shareaza)或Fasttrack(Kazaa、Imesh、Grobster)。網路可以啟用或停用。搜尋在所有啟用的網路上並行執行。對於某些網路,每個檔案可以從多個客戶端同時下載。
  • AMulehttp://www.amule.org/wiki/)這個專案基於eMule客戶端,也使用C++,但也使用wxWidgets和crypto++。在GPL下開源,目前支援Linux、FreeBSD、OpenBSD、Windows、MacOS X和X-Box,無論是在32位還是64位計算機上。
  • eMule Bowlfishhttp://pwp.netcabo.pt/DeepSea/),另一個基於eMule的專案,旨在提供受限的網路解決方案。
  • Hydranodehttp://hydranode.com/)是一個模組化、外掛驅動的點對點客戶端框架,它旨在進行真正的多網路下載(支援eDonkey2000和Bittorrent網路)。在GPL下開源,支援Linux和Windows。
  • Shareaza(多協議,在Gnutella部分提及)

BitTorrent

[編輯 | 編輯原始碼]

BitTorrent是由布拉姆·科恩建立的一種協議(BitTorrent協議規範v1.0),它源自Gnutella概念,但主要用於在網際網路上傳播大型計算機檔案並允許WEB整合,實際上它旨在取代舊的集中式HTTP下載,而不是一個完整的P2P網路。因此,它最初避免了在網路上傳輸搜尋請求的限制,這是最近透過採用類似於eDonkey解決方案的DHT實現的,它允許在整個網路中搜索。使BitTorrent成為一個兩層P2P。

BitTorrent用於分發合法內容,但本身不會對共享材料的版權狀態進行任何區分,就像任何其他去中心化網路一樣,這允許大規模侵權。布拉姆·科恩和阿什溫·納文於2004年9月22日建立了BitTorrent公司,總部位於舊金山加利福尼亞州,是一傢俬人持有的美國公司,開發變革性技術和產品以繼續推動更有效和開放的網際網路發展,還透過研發和開放規範促進BitTorrent協議的發展。

BitTorrent(http://www.bittorrent.com)也是該協議的原始實現的名稱。它最初是一個Python原始碼和舊版本)應用程式,現在被稱為BitTorrent Mainline,它導致了一個功能齊全的商業企業。BitTorrent.com是BitTorrent公司的一部分,現在是使用BitTorrent協議下載娛樂內容的目的地。該網站提供快速、按需訪問最全面的授權目錄,其中包括數千部電影、電視劇、音樂和遊戲,但它也為內容建立者提供了一個釋出平臺,讓他們可以將自己的作品以高品質的方式列出,與主要電影工作室、電視網路和唱片公司的最知名作品並列。

BitTorrent公司還透過更廣泛的標準機構,例如網際網路工程任務組(IETF)的LEDBAT工作組(http://www.ietf.org/html.charters/ledbat-charter.html),做出貢獻。BitTorrent公司擁有BitTorrent Mainline和µTorrent客戶端,以及BitTorrent DNA(交付網路加速器),這是一個基於BitTorrent協議的免費內容交付服務,它將使用者貢獻頻寬的力量帶給了傳統的內容釋出商,同時讓釋出商完全控制自己的檔案。

BitTorrent協議本質上是點對點的,它最初的創新方法不是圍繞建立真正的分散式網路,而是圍繞特定的共享資源,在這種情況下是檔案,最好是大檔案,因為使用者直接連線到彼此以從其他對等體傳送和接收大檔案的各個部分,這些對等體也已下載了該檔案或其部分。然後,這些片段重新組裝成完整的檔案。由於使用者彼此下載而不是從一箇中央伺服器下載,因此下載大型檔案的頻寬負載分配到使用者從其下載的眾多來源之間。這降低了託管大型檔案的使用者的頻寬成本,並提高了下載大型檔案的使用者的下載速度,因為該協議利用每個下載者的上行頻寬來提高整體分發的效率,並使下載者受益。但是,有一箇中央伺服器(稱為跟蹤器)協調所有此類對等體的操作。跟蹤器只管理連線,它不知道正在分發的檔案的任何內容,因此可以使用相對有限的跟蹤器頻寬來支援大量使用者。

BitTorrent的關鍵理念是使用者應該在下載(接收入站)的同時上傳(傳輸出站)。以這種方式,網路頻寬能夠得到儘可能高效地利用。BitTorrent的設計目的是隨著對某個檔案的興趣人數增加而更好地工作,這與其他檔案傳輸協議形成對比。

BitTorrent正在重新定義人們共享和搜尋內容的方式,並且由於它非常特定於檔案,並且在P2P內容的“新”因素方面有所提高,因此越來越流行用於下載電影、電視劇、完整音樂專輯和應用程式(它在與其他替代方案的效能方面有所提高),更多使用者意味著更多速度,但它不是罕見檔案或分發未被高度搜索的內容的最佳解決方案。

要下載使用BitTorrent託管的檔案,使用者必須擁有BitTorrent客戶端,並且要釋出檔案,使用者必須執行跟蹤器。

2004年11月,BitTorrent佔網際網路所有流量的驚人35%,據英國網路分析公司CacheLogic稱,2006年BitTorrent協議已上升到網際網路所有流量的60%以上。由於這一點,一些ISP正在進行流量整形,也稱為頻寬限流,這意味著它們正在降低協議在其網路中的優先順序,並降低其整體效能,這導致了兩種反應,一些ISP正在投資升級其網路併為該協議提供本地快取,而該協議的實施者正在開始與拒絕適應的ISP作鬥爭,方法是加密和隨機化它,這種適應的需要以及由於偏離其建立者的願景而導致的越來越高的普及程度正在將更多協議的演變交到獨立開發人員手中。

BitTorrent系統高度依賴於對等體的積極參與,因為它唯一的目標是共享檔案。在該系統中,罕見和“舊”內容不容易找到,只有高度搜索的內容才能從這種P2P實現中獲益。小檔案也不能充分利用它,因為複製所需的時間太短,在某些極端情況下甚至會降低體驗。

內容索引器

[編輯 | 編輯原始碼]

有許多不同的BitTorrent網站索引內容,每個網站都提供有關透過BitTorrent協議分發檔案的的資訊。它們通常包含多個種子檔案以及這些檔案的索引。在典型情況下,使用者會進入此類網站並瀏覽或搜尋他們想要的內容,這些內容基於其他使用者在該網站上釋出的種子檔案描述。如果找到包含所尋求內容的種子檔案,使用者可以下載該種子檔案。

合法種子檔案(http://www.legaltorrents.com),這是一組Creative Commons授權、合法可下載、自由分發的創作者批准的檔案,從電子/獨立音樂到電影和書籍,這些檔案已透過BitTorrent提供。每個獲取BitTorrent客戶端並下載的人都有助於貢獻更多頻寬。

還有OpenBitTorrent(http://openbittorrent.com)、OpenBitTorrent.kg(http://www.openbittorrent.kg)、myTorrentTracker(http://www.mytorrenttracker.com)和trackhub(http://trackhub.appspot.com),所有這些都是任何人都可以用來共享檔案的免費BitTorrent跟蹤器。您無需在任何地方註冊、上傳或索引種子檔案,您只需在種子檔案中包含跟蹤器URL即可。

其他

這些網站都有不同的功能來幫助使用者搜尋。請參閱維基百科的BitTorrent網站比較頁面。幾個較大的BitTorrent跟蹤器網站被關閉,理由是擔心版權所有者,主要是大型商業利益的代表。雖然從短期來看,它確實阻止了大規模的版權侵權,但也給合法使用帶來了困難,而且存在虛假通知問題,即聲稱對他們不擁有的作品擁有權利的侵權行為。從長遠來看,這並不能解決問題,反而迫使該協議以避免此類破壞的方式發展。人們適應這種壓力的一個方法是建立私人跟蹤器,這些跟蹤器只能透過邀請獲得。

如前所述,BitTorrent是一種分發檔案的協議。它透過URL識別內容,並設計為與網路無縫整合。它優於普通HTTP的優勢在於,當同一檔案的多個下載同時發生時,每個下載者都互相上傳,從而使檔案源能夠以適度的負載增加來支援大量下載者。(http://www.bittorrent.com/protocol.html)。BitTorrent分享了其他P2P協議中的一些術語,但也建立了一些新的術語(請參閱維基百科的頁面BitTorrent詞彙以瞭解更完整的列表)。

種子檔案
種子檔案”可以指代一個.torrent元資料檔案,也可以指代由它描述的所有檔案,具體含義取決於上下文。根據 BitTorrent 規範的定義,種子檔案包含多個跟蹤器的 URL,這些跟蹤器協調蜂群中對等節點之間的通訊,幷包含有關所有可下載檔案完整性的元資料,包括檔名稱、大小和校驗和。它還可以包含 BitTorrent 規範擴充套件中定義的附加元資料,稱為BitTorrent 增強提案。此類提案的示例包括元資料,用於宣告誰建立了種子檔案以及何時建立的。
索引
索引是一個由網站管理的 .torrent 檔案列表(通常包括描述和其他資訊),可供搜尋。索引網站有時也被稱為跟蹤器,但它跟蹤的是“種子檔案”而不是 BitTorrent 跟蹤器。

該協議部分依賴於中心化,因為需要跟蹤器。

客戶端
該程式使透過 BitTorrent 協議進行P2P檔案共享成為可能。它仍然表明該協議的半中心化性質,在協議定義中,該術語有時被替換為對等節點(例如:peer_id),例如 Gnutella 將參與者始終稱為對等節點或節點,將實現者稱為供應商。
跟蹤器
一個跟蹤器是一個伺服器,它跟蹤蜂群中哪些種子和對等節點。客戶端定期向跟蹤器報告資訊,並交換接收有關其他客戶端的資訊,以便它們可以連線。跟蹤器不直接參與資料傳輸,也不擁有檔案的副本。
抓取
當客戶端向跟蹤伺服器傳送請求,以獲取有關種子檔案的統計資訊時,例如與誰共享檔案以及其他使用者共享檔案的效率如何。

隨著 DHT(分散式雜湊表)的採用,BitTorrent 協議開始從圍繞單個資源的半中心化分發網路轉變為更加去中心化的網路,它去除了靜態控制點(跟蹤器),這是透過依賴 DHT 和使用PEX 擴充套件來實現的。它使不穩定的對等節點也能夠充當跟蹤器,但即使這解決了對靜態跟蹤器伺服器的需求,網路仍然圍繞內容進行中心化。對等節點沒有預設的能力在該上下文中相互聯絡。

種子
一個種子是一個客戶端,它擁有種子的完整副本,並且仍然提供上傳。種子越多,獲得更高下載速度的可能性就越大。如果種子上傳了下載的完整副本,則應該獲得更快的下載速度。

種子規則,就像我們在超級種子的特殊情況下看到的那樣,是在客戶端本地實施的變數和演算法,通常以某種形式開放供使用者控制。這些規則控制並可能用於最佳化對可用種子的選擇,而不僅僅是在列表中啟動下一個種子,並根據種子排名對種子進行排序。

種子排名
這是一個優先順序評級,它根據客戶端的活動種子規則進行計算,用於根據種子的需求優先順序對種子進行排序。它生成一個優先順序佇列,其中可用種子被授予使用可用傳輸開放插槽的許可權。幾個因素可能影響種子排名
  • 種子比率。比率越低,種子越稀有,它的種子排名應該越高,優先考慮稀有種子。
  • 種子數量。類似於種子比率,但不僅考慮完整種子,還考慮對種子感興趣的任何客戶端的數量,以相反的方式工作,優先考慮更大的蜂群和需求量大的種子。
  • 定時輪換。種子將在種子模式中輪換進出。每個種子都有一個保留種子的持續時間。
  • 預設。每個種子將根據它們新增到種子列表中的順序進行排序。
宣佈
類似於“抓取”,但意味著客戶端還會宣佈它想加入蜂群,並且伺服器應該將其新增到該蜂群的對等節點列表中。
可用性(也稱為分散式副本)
這是分散式系統中常用的一個詞,在本例中,它指的是客戶端可以使用的檔案的完整副本數量。每個種子將此數字增加 1.0,因為它們擁有檔案的完整副本。連線的對等節點擁有檔案的某個部分,它會將該部分新增到可用性中,如果其他對等節點沒有此部分檔案。
示例:擁有 65.3% 檔案下載的對等節點將可用性增加 0.653。但是,如果兩個對等節點都擁有相同的下載部分(例如 50%),並且只有一個種子,則可用性為 1.5。
感興趣
描述一個希望獲取客戶端擁有的檔案部分的下載器。例如,如果下載的客戶端沒有上傳的客戶端擁有的部分,並且希望獲得該部分,則上傳的客戶端會將下載的客戶端標記為“感興趣”。
下載器
一個下載器是任何沒有整個檔案並且正在下載檔案的對等節點。這個術語,在布拉姆·科恩Python 實現中使用,缺乏與吸血鬼相關的負面含義。布拉姆選擇下載器而不是吸血鬼是因為 BitTorrent 的等價交換確保下載器也上傳,因此不公平地歸類為吸血鬼
阻塞
描述一個被拒絕檔案部分的客戶端。客戶端在幾種情況下會阻塞另一個客戶端
  • 第二個客戶端是一個種子,在這種情況下它不想要任何部分(即,它完全不感興趣
  • 客戶端已經以其全部容量上傳(它已達到max_uploads的值)
  • 第二個客戶端已被列入黑名單,因為它具有攻擊性或正在使用列入黑名單的 BitTorrent 客戶端。
冷落
如果下載的客戶端在超過 60 秒的時間內沒有收到上傳的客戶端的任何資料,則上傳的客戶端會被標記為冷落


Clipboard

待辦事項
新的協議來提高 BitTorrent 速度,稱為“快取發現協議”或 CDP,它應該充當對等網路的 DHCP。


BitTorrent 的擴充套件協議

[edit | edit source]

由阿維德·諾伯格和路德維格·斯特里吉斯建立(描述http://www.rasterbar.com/products/libtorrent/extension_protocol.html),它是協議的擴充套件,旨在為 BitTorrent 協議的未來擴充套件提供簡單且輕薄的傳輸。該協議使新增新擴充套件變得容易,而不會干擾標準 BitTorrent 協議或不支援此擴充套件的客戶端。

擴充套件訊息 ID 在握手時定義,以避免擁有訊息 ID 的全域性登錄檔。相反,擴充套件訊息的名稱需要唯一名稱,這在沒有全域性登錄檔的情況下更容易實現。

Vuze 似乎還有一個並行實現或變體(http://wiki.vuze.com/w/Azureus_messaging_protocol),它被 Vuze 和 Transmission 使用。

對等節點交換

[edit | edit source]

對等節點交換PEX是一種通訊協議,它增強了BitTorrent 檔案共享協議。它允許一組使用者(或對等節點)協同共享給定檔案,以更快速、更高效的方式進行共享。PEX 透過使用兩種常見的擴充套件協議之一來實現。

在 BitTorrent 檔案共享協議的原始設計中,檔案共享組(稱為“蜂群”)中的使用者(對等節點)依賴於一個稱為跟蹤器的中央計算機伺服器來相互查詢並維護蜂群。PEX 透過允許每個對等節點直接更新蜂群中的其他對等節點,從而大大減少了對等節點對跟蹤器的依賴。透過減少對集中式跟蹤器的依賴,PEX 提高了 BitTorrent 協議的速度、效率和穩健性,使其更加去中心化。

如前所述,想要獲取檔案副本的使用者通常會先下載一個 .torrent 檔案,該檔案描述了要共享的檔案,以及一個或多個稱為 跟蹤器 的中央計算機的 URL,這些中央計算機維護著當前共享 .torrent 檔案中描述的檔案的節點列表。在最初的 BitTorrent 設計中,節點依靠這個中央跟蹤器來互相查詢並維護群組。後來,分散式雜湊表 (DHT) 的發展意味著群組中其他計算機可以儲存部分節點列表,從而減輕了中央跟蹤器計算機的負載。PEX 允許群組中的節點直接交換有關群組的資訊,而無需詢問 (輪詢) 跟蹤器計算機或 DHT。透過這樣做,PEX 利用了使用者連線的節點的知識,透過詢問它們連線的節點的地址。這比僅僅依靠跟蹤器更快、更有效,並減輕了跟蹤器的處理負載。它還能在跟蹤器宕機時保持群組的完整性。事實上,一旦節點儲存了檔案共享的完整副本,就消除了對分發的任何控制。

節點交換本身無法用於將新節點引入群組。為了與群組建立初始連線,每個節點必須使用“.torrent”檔案連線到跟蹤器,或者使用稱為 引導節點 的路由器計算機來查詢描述群組節點列表的分散式雜湊表 (DHT)。對於大多數 BitTorrent 使用者來說,DHT 和 PEX 會在使用者啟動 BitTorrent 客戶端並開啟 .torrent 檔案後自動開始工作。一個顯著的例外是“私有種子”,它們不是公開可用的;它們會停用 DHT。

Azureus 和 µTorrent 開發人員一致同意,任何實現上述機制的客戶端在傳送 PEX 訊息時都應遵守以下限制:

  • 任何給定的 PEX 訊息中,新增的節點數不應超過 50 個,刪除的節點數不應超過 50 個。
  • 節點交換訊息的傳送頻率不應超過每分鐘一次。

一些客戶端可能會選擇強制執行這些限制,並斷開忽略這些限制的客戶端的連線。

永久 DHT 跟蹤

[edit | edit source]

隨著 PEX 的實現和對分散式雜湊表 (DHT) 的依賴,向建立真正無伺服器的 P2P 覆蓋網路演變成為下一步的邏輯步驟,就像 eDonkey 網路的演變一樣。DHT 的工作方式基本相同,它將不僅從舊的跟蹤器中獲取資訊,還會從 PEX 實現中獲取資訊,從而建立類似於共享種子的分散式資料庫,充當備份跟蹤器,在所有其他跟蹤器都宕機或無法提供足夠的節點時發揮作用,同時也能實現無跟蹤器的種子。如果客戶端啟用了該選項,則 DHT 會充當並新增到種子中,作為偽跟蹤器,DHT 跟蹤器可以像普通跟蹤器一樣,在每個種子中啟用和停用。使用這種永久 DHT 跟蹤的客戶端現在是一個完全連線的去中心化 P2P 網路,它們作為新節點加入 DHT,這當然需要私有跟蹤器(或非公開分發)自行排除在參與範圍之外。

引導 DHT

由於 DHT 獨立於任何單個跟蹤器(和故障點),因此必須解決 DHT 路由表在首次使用 DHT 時如何引導的問題。這可以通過幾種方法實現:

  1. 手動輸入 DHT 節點的主機名和埠號。
  2. 連線到具有包含 DHT 節點列表的 .torrent 檔案的跟蹤器。
  3. 下載任何具有廣告支援 DHT 的節點的種子。並非所有客戶端都完全支援,因為它要求客戶端在 BitTorrent 握手中廣告 DHT 支援。
磁力連結

傳統上,.torrent 檔案是從種子網站下載的。但一些客戶端也支援 磁力 URI 方案。磁力連結不僅可以提供在 DHT 中搜索共享檔案的所需節點所需的種子雜湊,還可以包含該檔案的跟蹤器。

BitTorrent 增強提案 (BEP)

[edit | edit source]

BitTorrent 增強提案流程 (BEP) 是由 John Hoffman 發起的流程。該流程在公共領域文件 ( http://www.bittorrent.org/beps/bep_0001.html ) 中定義。

BitTorrent 增強提案列表可用 ( http://www.bittorrent.org/beps/bep_0000.html )。

BEP 是一種設計文件,它向 BitTorrent 社群提供資訊,或描述 BitTorrent 協議的新功能。BEP 應提供該功能的簡明技術規範以及該功能的理由,旨在成為提出新功能、收集社群對某個問題的意見以及記錄 BitTorrent 設計決策的主要機制。

BEP 作者負責在社群內達成共識並記錄異議。由於 BEP 作為結構化文字檔案儲存在版本控制的儲存庫中,因此它們的修訂歷史記錄就是功能提案的歷史記錄。

超級覆蓋

[edit | edit source]

超級覆蓋 在 BEP 16 ( http://www.bittorrent.org/beps/bep_0016.html ) 中指定,是對 BitTorrent 協議 的擴充套件(在不更改協議的情況下實現),旨在用於只有一個 種子 的情況,它允許管理資源的稀缺性。

在種子檢測到自己是檔案唯一來源的情況下,它將嘗試將上傳的資料量降到最低,以保證外部共享並最佳化對稀缺資源的訪問,直到它檢測到其他完整種子存在。該功能由 John Hoffman 構思,並於 2003 年在 BitTornado 客戶端中首次實現。

uTPµTP(有時也稱為 微傳輸協議)是一種 開源 跨平臺 協議,旨在構建在 UDP 協議之上,是 LEDBAT(一種 TCP 擁塞避免演算法)的類似 TCP 的實現。

µTP 是在 BitTorrent, Inc. 內部開發的,沒有任何來自網路或 BitTorrent 社群的輸入,旨在提供可靠、有序的交付,同時保持最小的額外延遲,以便在干擾其他應用程式時自動降低 對等 檔案共享 種子 使用者之間資料包的傳輸速率。例如,該協議應自動允許在 BitTorrent 應用程式和 Web 瀏覽器之間共享 ADSL 線路。它最初是在 µTorrent 1.8.x 測試版分支中引入的,並在 µTorrent 1.9 的 alpha 版本中公佈,現在是 uTorrent 對等連線的主要傳輸協議。

uTP 在 BEP 29 ( http://bittorrent.org/beps/bep_0029.html ) 中被記錄為 BitTorrent 擴充套件。BitTorrent, Inc. 已根據 MIT 許可證提供了一個 C++ 實現 ( http://github.com/bittorrent/libutp ),但外部介面嚴格來說是 C(ANSI C89)。

BitTorrent 協議加密

[edit | edit source]

截至 2005 年 1 月,BitTorrent 流量佔總住宅網際網路流量的三分之一以上。一些 ISP 決定採取不同的措施來控制甚至破壞 P2P 流量,如本書的 暗中行動 部分所述。

這催生了對提供 BitTorrent 協議加密 的需求。混淆和加密使流量更難以檢測和監控,因此更難以限速。BitTorrent 協議加密並非旨在提供 匿名性機密性,即使有些解決方案會透過混淆內容來提高機密性。

BitTorrent 的發明者布拉姆·科恩反對在 BitTorrent 協議中新增加密。科恩表示,他擔心加密會導致客戶端之間不相容,並強調大多數 ISP 並沒有遮蔽 BitTorrent 協議。科恩寫道:“我懷疑一些開發人員被他們的 ISP 限速了,他們更感興趣的是試圖繞過他們 ISP 的限制,而不是整個網際網路的效能”。在受到了一些對這種立場的批評之後,科恩後來在他的 主線客戶端 上添加了接收加密連線但不發起加密連線的能力。值得注意的是,當 µTorrent 被 BitTorrent, Inc. 收購併成為下一個主線版本後,發起加密連線的能力得以保留,但預設情況下被關閉了。

加密並不能阻止配置為普遍降低所有加密、不可識別或未知協議速度的流量整形系統,這種方法簡單到只需丟棄資料包。加密跟蹤器通訊可以防止監聽對等節點列表,並且不需要升級對等節點連線的雙方,但它需要對跟蹤器施加計算開銷。

協議頭加密 (PHE)
由 RnySmile 建立,並在 2005 年 9 月 8 日的 BitComet 0.60 版本中首次實現。規格既沒有釋出,也不相容 MSE/PE,並且有人聲稱它已經被反向工程,降低了它的實用性。
訊息流加密 (MSE)/協議加密 (PE)
由 Azureus(現在是 Vuze)在 2006 年 1 月下旬開發,後來經過多次修改,使其被其他 BitTorrent 客戶端的建立者更廣泛地接受。
根據規格(http://wiki.vuze.com/w/Message_Stream_Encryption),MSE/PE 使用 金鑰交換 與 torrent 的 infohash 相結合,建立一個 RC4 加密金鑰。金鑰交換有助於最大程度地降低被動監聽的風險,而 infohash 有助於避免 中間人攻擊。選擇 RC4 是因為它速度快。第一個千位元組的 RC4 輸出被丟棄,以防止 特定攻擊
規格允許使用者選擇僅加密頭或加密整個連線。加密整個連線提供更多混淆,但會使用更多 CPU 時間。為了確保與不支援此規範的其他客戶端的相容性,使用者也可以選擇是否仍然允許未加密的傳入或傳出連線。支援的客戶端透過 PEXDHT 傳播它們啟用了 MSE/PE 的事實。
對這種方法的分析表明,對 TCP 會話中前 100 個數據包的資料包大小和資料包方向的統計測量可以用來識別混淆的協議,準確率超過 96%,這使得這種解決方案僅對沒有采用最先進的流量分析的 ISP(主要是較小的 ISP)有效。

存在各種解決方案來保護 BitTorrent 網路免受攻擊,包括加密對等節點到跟蹤器和對等節點之間的通訊,使用微軟的 Teredo 使 TCP 連線在 UDP 資料包內進行隧道傳輸,在它們到達終端主機上的 TCP 層之前過濾掉 TCP 重置,或完全從基於 TCP 的傳輸切換到基於 UDP 的傳輸。每種解決方案都有其權衡。過濾掉攻擊性 TCP 重置通常需要核心訪問許可權,以及遠端對等節點的參與,因為攻擊者必須將重置資料包傳送到本地和遠端對等節點。Teredo 並非在所有 BitTorrent 客戶端上都可用。在新的 UDP 協議中重寫 TCP 可靠性、按順序交付和擁塞控制代表著重大的工程工作量,並且需要升級任何對等節點連線的雙方。

軟體實現

[編輯 | 編輯原始碼]

維基百科在諸如 BitTorrent 軟體比較BitTorrent 客戶端使用份額 的文章中提供了一些相關資訊。以下列表旨在提供一個關於與其他 P2P 協議相關的實現細節的一般概念和比較。
(這不應該被視為 BitTorrent 客戶端的完整列表,沒有使用特殊的排序。所有連結都已驗證,軟體的程式語言和許可證已得到特別關注。最後更新於 2010 年 9 月 11 日)

  • BitTorrent 佇列管理器http://btqueue.sourceforge.net),一個基於控制檯的 BitTorrent 客戶端,內建排程程式用於處理多個會話。它旨在輕鬆地管理佇列中的會話,而無需重量級的 GUI。外部模組可以搜尋跟蹤器中的新 torrent 並自動提交它。開源(Python 軟體基金會許可證)專案,使用 Python。
  • Vuze 以前稱為 Azureus(http://azureus.sourceforge.nethttp://www.vuze.com/),一個用 Java 編寫的開源 BitTorrent 客戶端,可能是網路中最先進的對等節點(支援多個 torrent 下載、排隊/優先順序系統、啟動/停止種子選項、嵌入式跟蹤器、主線 DHT 等等),但它也是眾所周知的資源佔用大戶,會消耗大量的記憶體和 CPU 功率。
  • µTorrenthttp://utorrent.com),一個用 C++ 編寫的閉源、免費軟體 BitTorrent 客戶端,一個非常完整對等節點(包括頻寬優先順序、排程、RSS 自動下載和主線 DHT 等等),系統佔用率非常低。
  • BitTornadohttp://bittornado.com),一個基於 Python 編寫的開源 BitTorrent 客戶端,基於原始的 BitTorrent 客戶端。
  • BitComethttp://www.bitcomet.com),(最初從 0.11 到 0.37 版本名為 SimpleBT 客戶端)是一個閉源但免費的 BitTorrent 客戶端,僅適用於 MS Windows 作業系統,它也支援 HTTP/FTP 下載管理。
  • ABC(另一個 BitTorrent 客戶端)http://pingpong-abc.sourceforge.net),一個基於 BitTornado 的開源 BitTorrent 客戶端。
  • Transmissionhttp://transmission.m0k.org/),一個具有簡單圖形使用者介面的輕量級開源 BitTorrent 客戶端,位於跨平臺後端之上。Transmission 在 Mac OS X 上執行,具有 Cocoa 介面,在 Linux/NetBSD/FreeBSD/OpenBSD 上執行,具有 GTK+ 介面,在 BeOS 上執行,具有本地介面。根據 MIT/X Consortium 許可證釋出。
  • Warezhttp://www.warezclient.com),一個來自 Neoteric Ltd. 的閉源、僅適用於 MS Windows 的 BitTorrent 客戶端(以前支援 Ares Network Warez P2P 客戶端)。
  • Bits on Wheelshttp://bitsonwheels.com),一個用 Objective-C 和 Cocoa 為 Macintosh 編寫的免費但閉源的實現。
  • Vidorahttp://www.videora.com/),一個閉源、免費軟體實現,也支援 Really Simple Syndication (RSS) 提要。
  • sharktorrenthttp://sharktorrent.sourceforge.net/),一個用 C++ 編寫的開源(GNU GPL)。這是一個跨平臺的 BitTorrent 客戶端,使用 QT、libtorrent 和 boost 庫。
  • ted [Torrent 劇集下載器]http://www.ted.nu/),一個用 Java 編寫的開源(GNU GPL)BitTorrent 客戶端,它也支援 torrent RSS 提要。
  • rTorrent|http://libtorrent.rakshasa.no)是一個用 C++ 編寫的基於文字的 ncurses BitTorrent 客戶端,基於 libTorrent 庫,適用於 Unix(不要與 Arvid Norberg/Rasterbar 的 libtorrent 混淆),其作者的目標是“專注於高效能和良好的程式碼。客戶端和庫都在 GNU GPL 下可用。
  • libtorrenthttp://www.rasterbar.com/products/libtorrent/)來自 Rasterbar Software,一個開源 C++ 庫,實現了 BitTorrent 協議和應用程式的基本需求,使用 zlib 和 Boost 庫,特別是 Boost.Asio 並共享 Boost 許可證。這個庫也通常被 嵌入到裝置 中。該庫還提供對 UPnP 配置的支援。libtorrent 被以下實現使用
    • Halitehttp://www.binarynotions.com/halite-bittorrent-client),一個開源的,根據 Boost 軟體許可證,這個 BitTorrent 客戶端使用 libtorrent 庫。用 C++ 編寫的,使用 Boost 庫和 WTL(僅限 Windows)。
    • FireTorrenthttps://addons.mozilla.org/en-US/firefox/addon/10931)由 Pete Collins、Radical Software Ltd、Jan Varga、Matthew Gertner 開發,使用 libtorrent 庫的開源 JavaScript,Mozilla 公共許可證 Firefox 擴充套件/附加元件,用於下載 torrent。
    • Folxhttp://www.mac-downloader.com/),閉源,使用 libtorrent 庫(僅限 Mac)。
    • qBittorrenthttp://www.qbittorrent.org/),開源 GNU GPL,由一名博士生(Christophe Dumez)開發,一個使用 C++ / libtorrent 和 Qt4 圖形使用者介面的 Bittorrent 客戶端。
    • Delugehttp://deluge-torrent.org),一個開源的,使用 Python 和 libtorrent,輕量級的,跨平臺的 BitTorrent 客戶端,用 Python 編寫的,根據 GNU GPL 許可證釋出。
    • Limewire,作為知名的 Gnutella 實現,也支援 BitTorrent 協議,它使用 libtorrent 庫。
    • BTG ( http://btg.berlios.de ),一個用 C++ 實現的 Bittorrent 客戶端,使用 Rasterbar Libtorrent 庫,釋出在 GNU GPL 許可證下。提供 Ncurses、SDL、Gtkmm 和 WWW GUI,它們與執行實際 BitTorrent 操作的公共後端進行通訊,僅適用於 OSX、BSD 和 Linux。
    • Free Download Manager (FDM),( http://www.freedownloadmanager.org ),用 C++ 編寫的開源軟體,在 GNU GPL 許可證下發布,使用 libtorrent 庫(僅限 Windows)。
    • torrent2exe.com,一個網路工具,據稱可以將 .torrents 轉換為可執行檔案(Windows),閉源,使用 libtorrent 庫。
    • Flush ( http://sourceforge.net/projects/flush ),基於 GTK 的 Linux BitTorrent 客戶端,開源 C++/GTK+,使用 libtorrent 庫。
    • Pump ( http://www.vipeers.com ),一個閉源影片管理器,透過使用 libtorrent 庫支援 BitTorrent 協議。
    • Lince ( http://lincetorrent.sourceforge.net ),開源 C++/GTK+/libtorrent BitTorrent 客戶端,釋出在 GNU GPL 許可證下(Linux/BSD/類 Unix 作業系統)。
    • Miro,以前稱為 Democracy Player 和 DTV ( http://getmiro.com ),旨在自動下載來自基於 RSS 的“頻道”的影片,管理它們並播放它們。開源 Python/GTK/libtorrent,在 GNU 通用公共許可證條款下發布。
    • tvitty ( http://tvitty.com ),使用 libtorrent 的 Vista Media Center 閉源 BitTorrent 下載外掛(僅限 Windows)。
    • FatRat ( http://fatrat.dolezel.info ),是一個用 C++ 編寫的 Linux 開源下載管理器,使用 Qt4 和 libtorrent 庫。
    • LeechCraft ( http://leechcraft.org ),開源 BitTorrent 客戶端(也支援 HTTP/FTP 下載),使用 C++、Qt 和 libtorrent 建立。釋出在 GNU 通用公共許可證下。
    • MooPolice ( http://www.moopolice.de ),Windows BitTorrent 客戶端,具有非傳統的 GUI。開源(沒有特定許可證)C++,使用 MFC 和 libtorrent BitTorrent 客戶端庫以及 MiniUPnP。
    • Linkage ( http://code.google.com/p/linkage ),一個用 C++ 編寫的輕量級 BitTorrent 客戶端,使用 gtkmm 和 libtorrent,在 GNU 通用公共許可證下開源(不再維護)。
    • Arctic Torrent ( http://int64.org/projects/arctic-torrent ),一個適用於 Windows 的小型 BitTorrent 客戶端(包括 64 位版本)。在 MIT 許可證下開源 C++,使用 libtorrent。

特定 BitTorrent 文件

[edit | edit source]
  • 2003 年 5 月 22 日 - 激勵在 BitTorrent 中構建健壯性 (PDF),Bram Cohen
    BitTorrent 檔案分發系統使用“以牙還牙”作為尋求帕累託效率的方法。它實現了比任何已知的合作技術更高的健壯性和資源利用率。我們解釋了 BitTorrent 的工作原理,以及如何使用經濟方法來實現這一目標。

其他軟體實現

[edit | edit source]

JXTA™ 技術,由 Sun™ 建立 ( http://www.jxta.org ),是一套開放協議,允許網路上從手機和無線 PDA 到 PC 和伺服器的任何連線裝置以 P2P 方式進行通訊和協作。JXTA 對等節點建立一個虛擬網路,其中任何對等節點都可以直接與其他對等節點及其資源進行互動,即使某些對等節點和資源位於防火牆和 NAT 後面或位於不同的網路傳輸上。專案目標是跨不同的對等網路和社群的互操作性、平臺獨立性、多種/不同的語言、系統和網路,以及普遍性:每個具有數字心跳的裝置。該技術使用 Apache 軟體許可證(類似於 BSD 許可證)授權。

大部分實現是用 Java 完成的(有一些用 C 編寫的示例)。

iFolder

[edit | edit source]

iFolder ( http://www.ifolder.com ) 仍處於早期開發階段,由 Novell, Inc. 開發,旨在透過使用 Mono/.Net 框架,允許跨計算機網路進行 跨平臺 檔案共享

iFolder 基於共享 資料夾 的概念,其中將資料夾標記為共享,然後透過網路將資料夾的內容同步到其他計算機,無論是直接在 對等 方式下計算機之間同步,還是透過伺服器同步。這旨在允許單個使用者在不同的計算機之間 (例如工作計算機和家用計算機之間) 同步其檔案,或與其他使用者共享檔案 (例如在一個專案上進行協作的一組人)。

iFolder 的核心實際上是一個名為 Simias 的專案。實際上,是 Simias 監控檔案更改,同步這些更改並控制資料夾的訪問許可權。實際的 iFolder 客戶端(包括圖形桌面客戶端和 Web 客戶端)作為與 Simias 後端通訊的單獨程式開發。

iFolder 客戶端以兩種操作模式執行:企業共享(使用伺服器)和工作組共享(對等,或不使用伺服器)。

Freenet

[edit | edit source]

Freenet 專案 ( http://freenetproject.org ),旨在允許在網際網路上自由交換資訊,而不必擔心審查或報復。為了實現這一點,Freenet 使對手難以揭露釋出或下載內容的人的身份。Freenet 專案始於 1999 年,於 2000 年 3 月釋出了 Freenet 0.1,並且從那時起一直處於積極開發階段。

Freenet 的獨特之處在於它處理內容的儲存,這意味著如果需要,使用者可以將內容上傳到 Freenet,然後斷開連線。我們發現,這是許多 Freenet 使用者的關鍵需求。上傳後,內容會在 Freenet 網路中映象和移動,使其難以追蹤或銷燬。只要有人檢索內容,內容就會保留在 Freenet 中,儘管 Freenet 不保證內容會無限期地儲存。

通往 Freenet 0.7 的旅程始於 2005 年,當時人們意識到 Freenet 的一些最脆弱的使用者需要隱藏他們正在使用 Freenet 的事實,而不僅僅是他們用它做什麼。這一認識的結果是對 Freenet 進行徹底的重新設計和重寫,增加了“暗網”功能,允許使用者限制其 Freenet 軟體與哪些受信任的朋友進行通訊。這將使第三方更難以確定誰在使用 Freenet。

Freenet 0.7 還體現了對 Freenet 幾乎所有其他方面的重大改進,包括效率、安全性和可用性。Freenet 可用於 Windows、Linux 和 OSX。可以從以下位置下載:

軟體實現

[edit | edit source]

所有軟體都可以在 Freenet 專案頁面上獲得。

Frost 是 Freenet 的一個應用程式,它為我們提供了類似 Usenet 的留言板以及檔案上傳/下載/共享功能。如果您使用了標準的 Freenet 安裝程式,它應該會與 Freenet 0.7 一起自動安裝。

jSite 是一款圖形應用程式,您可以使用它來建立、插入和管理您自己的 Freenet 站點。它是由 Bombe 用 Java 編寫的。

Thaw 是一款檔案共享實用程式和上傳/下載管理器。它用作 Freenet 檔案共享的圖形介面。

KaZaa

[edit | edit source]

KaZaa ( http://www.kazaa.com )


Clipboard

待辦事項
新增缺失資訊


軟體(FastTrack)實現

[edit | edit source]
  • Kazaa
  • Kazaa Lite
  • Diet Kaza
  • giFT
  • Grokster
  • iMesh

GNUnet(http://gnunet.org/)始於2001年末,作為一個安全的點對點網路框架,它不使用任何中心化的或可信賴的服務。該框架提供了一個傳輸抽象層,目前可以將網路流量封裝在UDP(IPv4和IPv6)、TCP(IPv4和IPv6)、HTTP或SMTP訊息中。網路中的所有點對點訊息都是機密的和經過身份驗證的。

建立在該框架之上的主要服務是匿名檔案共享,它是在網路層之上實現的,允許匿名、抗審查的檔案共享。GNUnet使用一個簡單的基於盈餘的經濟模型來分配資源。GNUnet中的節點會監控彼此在資源使用方面的行為;為網路做出貢獻的節點會獲得更好的服務獎勵。

GNUnet是GNU專案的一部分。我們的官方GNU網站可以在(http://www.gnu.org/software/gnunet/)找到,那裡只有一個現有的客戶端,開源的、GPL的,用C語言編寫,與網路同名。GNUnet可以從該網站或GNU映象下載。

MANOLITO(MP2P)

[編輯 | 編輯原始碼]

MANOLITOMP2PPablo Soto開發的專有點對點檔案共享網路的內部協議名稱。MANOLITO在埠41170上使用UDP連線進行搜尋路由,並且基於Gnutella。此外,檔案傳輸使用基於TCP的專有協議。

MANOLITO主機透過聯絡HTTP網路閘道器來獲得網路入口,閘道器會返回大約一百個MANOLITO主機的列表。主機也可以手動連線。服務端會與固定數量的節點保持聯絡(取決於網際網路連線),這些節點會發送搜尋查詢和結果。

軟體實現

[編輯 | 編輯原始碼]

Mute檔案共享

[編輯 | 編輯原始碼]

MUTE檔案共享(http://mute-net.sourceforge.net)是一個匿名、去中心化的搜尋和下載檔案共享系統。MUTE使用受螞蟻行為啟發的演算法,透過鄰居連線的網狀網路路由所有訊息,包括檔案傳輸。
作者Jason Rohrer - jcr13 (at) cornell (dot) edu 使用C++和Crypto++庫建立,支援多個作業系統,有一個用MFC建立的Windows前端,Mute是開源的,並在GPL許可下發布。

iMeshhttp://www.imesh.com)是一個免費但閉源的P2P網路(IM2Net),在埠80、443和1863上執行,適用於Windows。iMesh由美國公司iMesh, Inc.擁有,並在以色列設有開發中心。還與MPAA達成了一項協議。大小超過50MB且時長超過15分鐘的影片檔案將不再允許在iMesh網路上共享,保證不能透過網路傳輸完整版電影。

BitCoop (http://bitcoop.sourceforge.net/) 由Philippe Marchesseault建立,是一個基於控制檯(文字)的點對點備份系統,它允許在遠端計算機上儲存檔案,並支援加密和壓縮。檔案的大小取決於您希望與其他節點共享的量。它適用於希望彼此之間備份資料的伺服器場。支援包括Windows、Linux和Mac OS X在內的各種作業系統,它用Java實現(在GPL下開源)。

CSpace (http://cspace.in/) 提供了一個平臺,用於在網際網路上進行安全、去中心化的使用者對使用者通訊。CSpace平臺背後的驅動力是提供一個connect(user,service)原語,類似於sockets API connect(ip,port)。建立在CSpace之上的應用程式只需呼叫connect(user,service)即可建立連線。CSpace平臺會負責定位使用者並建立一個安全、支援NAT/防火牆友好的連線。因此,應用程式開發人員無需再費心建立連線,可以專注於應用程式級邏輯!CSpace是用Python開發的。它使用OpenSSL進行加密,並使用Qt進行GUI。CSpace在GPL下授權。

I2P是一個通用的匿名和安全點對點通訊層。它是一個建立在另一個網路之上的網路(在本例中,它建立在網際網路之上)。它負責匿名、安全地將訊息傳送到另一個位置。

p300 (http://p300.eu/) 是一個用Java建立的P2P應用程式,旨在為多種作業系統提供即用型單下載解決方案,而無需處理使用者帳戶或特定的協議和安全配置(例如samba)。另一個方面是p300主要用於LAN或VPN。該應用程式是開源的,在GNU GPL v3下發布。

Netsukuku

[編輯 | 編輯原始碼]

Netsukuku (http://netsukuku.freaknet.org/) 是一個點對點(網狀)網路系統,最初由FreakNet MediaLab開發,可以自主生成和維持自身。它旨在處理無限數量的節點,而CPU和記憶體資源消耗極低。它似乎可以輕鬆地用於構建一個全球性的分散式、匿名的去中心化網路,在網際網路之上,無需任何伺服器、ISP或權威控制的支援。Netsukuku使用另一個路由協議替換了OSI模型的網路層3。一個開源的Python實現於2007年10月完成。

Netsukuku基於一個非常簡單的想法:將Wi-Fi網狀網路的概念擴充套件到全球範圍,儘管不一定使用該媒介。透過使用專門的路由協議和演算法,可以利用當前的Wi-Fi技術,允許形成一個全球性的點對點無線網路,其中每個節點(節點)都連線到其鄰居。

其他媒介在連線節點方面也同樣有效,因為互動作用獨立於傳輸媒介,但人們認為Wi-Fi將是最實用的方式,讓普通使用者可以充分利用。一旦更廣泛的普及實現,可能會看到一些節點之間建立高速陸線連線,以提高網路頻寬,並降低連線延遲。

Adobe 的 RTMFP (即時媒體流協議) 組

[編輯 | 編輯原始碼]

RTMFP 基於 Amicima 的建立,是基於一個封閉協議/實現,Amicima 是一家成立於 2004 年的初創公司,專注於改進用於客戶端-伺服器和點對點網路以及衍生應用程式的網際網路協議 (p2p-hackers - amicima's MFP - preannouncement, Jul 2005, MFP - The Secure Media Flow Protocol - version 1),後被 Adobe 收購,並被整合到 Flash 平臺中,使開發人員能夠在不經過中央伺服器 (Flash Media Server) 的情況下將資料流傳輸到端點。Flash Player v10.1+ 功能的這一補充使 Flash 能夠滿足大多數點對點網路需求。目前還沒有關於實現的太多資訊。簡報以 Flash 影片形式提供 (http://tv.adobe.com/watch/max-2009-develop/p2p-on-the-flash-platform-with-rtmfp )。

  • Thunderbolt (又稱 Thunder) (http://www.xunlei.com/) 由 Xunlei Network Technology Ltd. 建立。Thunderbolt 專有的點對點網路支援多協議點對點資源(支援 BitTorrent、eDonkey、Kad 和 FTP),還支援 HTTP 下載(下載加速器),因為它會使用網路快取來幫助加速下載。它主要用於中國大陸,最近釋出了英文版。尤其值得關注的是,2007 年 1 月 5 日,Google 收購了該公司 4% 的股份。
  • Cassandra (http://code.google.com/p/the-cassandra-project/) 是一個構建在點對點網路上的結構化儲存系統,用於管理結構化資料,同時提供大規模可靠性。它使用 Java 編寫,並採用 Apache 許可證 2.0 版。
  • XNap ( http://xnap.sourceforge.net/ ) 開源 (GPL),使用 Java 編寫。客戶端具有基於現代 Swing 的使用者介面和控制檯支援。能夠在多個點對點網路中工作,包括 OpenNap、Gnutella、Overnet 和 OpenFT(以及 giFT 支援的其他網路,如 FastTrack)。它還支援 ICQ 和 IRC,以及 MP3 標籤、影像、PDF、ZIP 檔案和文字轉語音的檢視器。
  • Filetopia ( http://www.filetopia.com ),一個適用於 Windows 的免費但閉源伺服器/客戶端點對點應用程式。它包括即時訊息、聊天和檔案共享系統,以及搜尋引擎、線上好友列表和留言板。它還支援使用中轉伺服器(開源,Java)作為匿名層,實現間接連線。
  • Napster 網路
    • WinMX
    • Napigator
    • FileNavigator
  • WPNP 網路
    • WinMX
  • 其他網路
    • 星際檔案系統 - 協議和網路旨在建立一個內容可定址的點對點方式,用於在分散式檔案系統中儲存和共享超媒體。最初由 Juan Benet 設計,現在已開源。
    • MojoNation
    • Carracho
    • Hotwire
    • Chord 點對點查詢服務 | Chord
    • Dexter
    • Swarmcast
    • Alpine 程式 | Alpine
    • Scribe
    • Groove
    • Squid_Soft | Squid
    • Akamai
    • Evernet
    • Overnet 網路
    • Audiogalaxy 網路
    • SongSpy 網路
    • The Circle
    • OpenFT
  • Acquisition
  • Cabos
  • Swapper
  • SoulSeek
華夏公益教科書