磁力連結(磁力下載)

磁力連結

磁力下載一般指本詞條

磁力連結(Magnet URI scheme),是對等網路中進行信息檢索和下載文檔的電腦程式。和基於“位置”連線的統一資源定位符(URL)不同,磁力連結是基於元數據(metadata)檔案內容,屬於統一資源名稱(URN)。也就是說,磁力連結不基於文檔的IP位址或定位符,而是在分散式資料庫中,通過散列函式值來識別、搜尋來下載文檔。因為不依賴一個處於啟動狀態的主機來下載文檔,所以特別適用沒有中心伺服器的對等網路。舉例來說,一個常見的磁力連結形式為“magnet:?xt=urn:btih:”。

基本介紹

  • 中文名:磁力連結
  • 外文名:Magnet URI scheme
  • 用途:識別檔案
  • 所屬領域:計算機網際網路
  • 基礎:不同檔案內容的Hash結果
  • 特點:不基於文檔的IP位址或定位符
歷史概述,特點,內容散列函式套用,磁力連結構成,xt參數詳述,普通連結,P2P連結,常用客戶端,問題,

歷史概述

這個標準的草稿出現於2002年,是為了對eDonkey2000的“ed2k:”和Freenet的“freenet:”兩個URI格式進行“廠商與項目中立化”(vendor- and project-neutral generalization)而制定的。同時這個標準也嘗試緊密地跟進IETF官方的URI標準。

特點

眾所周知,BT下載速度不夠穩定,當中斷時則無法完整下載。
磁力連結很好地解決了這個問題。磁力連結的問世與大行其道,標誌著BT 1.0時代已經過去,BT 2.0 時代已經到來。
深刻理解磁力連結
簡單地說,磁力連結是一種特殊連結,但是它與傳統基於檔案的位置或名稱的普通連結(如http://xxx)不一樣,它只是通過不同檔案內容的Hash結果生成一個純文本的“數字指紋”,並用它來識別檔案。
它類似於生活消費品包裝上常見的條碼,不同的是這個“數字指紋”可以被任何人從任何檔案上生成,這也就注定了磁力連結不需要任何“中心機構”的支持,且識別準確度極高。
因此任何人都可以生成一個Magnet 連結並確保通過該連結下載的檔案準確無誤。

內容散列函式套用

磁力連結最常見的用途是基於檔案內容的散列函式值來連結到特定檔案,生成一個唯一的檔案識別符,類似於ISBN。不像常規的識別符,內容散列可以被任意一位持有此檔案的人生成,所以並不需要一個中心機構,這使其在檔案共享領域經常被用作搜尋條件,因任何人都可以分發一個磁力連結來確保該連結指向的資源就是他想要的,而和得到該資源的方式無關。
另一個磁力連結的優勢是開放性和跨平台性:一個磁力連結可被運行在幾乎所有平台上的應用程式們使用以下載一個檔案。因為磁力連結十分簡潔且為純文本格式,所以用戶可以很方便地將其複製到電子郵件或即時訊息中,比如種子檔案。

磁力連結構成

磁力連結由一組參數組成,參數間的順序沒有講究,其格式與在HTTP連結末尾的查詢字元串相同。通常是一個特定檔案的內容散列函式值形成的URN,例如:
magnet:?xt=urn:btih:4D9FA761D69964B00DF0B3B0C9C1F968EA6C47D0&xt=urn:ed2k:7655dbacff9395e579c4c9cb49cbec0e&dn=bbb_sunflower_2160p_30fps_stereo_abl.mp4&tr=udp%3a%2f%2ftracker.openbittorrent.com%3a80%2fannounce&tr=udp%3a%2f%2ftracker.publicbt.com%3a80%2fannounce&ws=http%3a%2f%2fdistribution.bbb3d.renderfarming.net%2fvideo%2fmp4%2fbbb_sunflower_2160p_30fps_stereo_abl.mp4
雖然這個連結指向一個特定檔案,但是客戶端應用程式仍然必須進行搜尋來確定哪裡。
在標準的草稿中其他參數的定義如下:
magnet:協定名。
xt:exact topic的縮寫,包含檔案哈希值的統一資源名稱。BTIH(BitTorrent Info Hash)表示哈希方法名,這裡還可以使用ED2K,AICH,SHA1和MD5等。這個值是檔案的標識符,是不可缺少的。
dn:display name的縮寫,表示向用戶顯示的檔案名稱。這一項是選填的。
tr:tracker的縮寫,表示tracker伺服器的地址。這一項也是選填的。
ws:webseed的縮寫,表示網路種子。
urn:(Uniform Resource Name, URN 表示資源名
btih:BitTorrent info hash,種子散列函式
應用程式定義的實驗參數,必須以"x."開頭。
標準還建議同類的多個參數可以在參數名稱後面加上".1", ".2"等來使用,例如:
magnet:?xt.1=urn:sha1:YNCKHTQCWBTRNJIV4WNAE52SJUQCZO5C&xt.2=urn:sha1:TXGCZQTH26NL6OUQAJJPFALHG2LTGBC7

xt參數詳述

磁力連結的這部分最重要。用於尋找和驗證包含著磁力連結中的檔案。
TTH(Tiger Tree散列函式)
TigerTree散列函式被用在包括Direct Connect和Gnutella2在內的幾個網路中。
xt=urn:tree:tiger:[ TTH Hash(Base32)]
SHA-1(安全散列算法1)
Gnutella和Gnutella2使用的散列函式。
xt=urn:sha1:[ SHA-1 Hash(Base32)]
BitPrint
這種散列函式包含一個SHA-1散列函式和一個TTH散列函式,用"."隔開。
Gnutella和Gnutella2使用。
xt=urn:bitprint:[ SHA-1 Hash(Base32)].[ TTH Hash(Base32)]
eD2k Hash(eDonkey2000)散列函式
eDonkey2000使用的散列函式算法。
xt=urn:ed2k:[ ED2K Hash(Hex)]
AICH(高級智慧型型損壞處理)
不是正式的磁力連結的一部分。eDonkey2000使用的散列函式算法,用於存儲和控制下載完成、正在下載的檔案的完整性。
xt=urn:aich:[ aich Hash(Base32)]
Kazaa散列函式
FastTrack使用的散列函式算法。
xt=urn:kzhash:[ Kazaa Hash(Hex)]
BTIH(BitTorrent Info Hash)
BitTorrent使用的散列函式算法。出於向下兼容的考慮,客戶端需要同時支持被 Base32 編碼過 的 BTIH 散列結果。
xt=urn:btih:[ BitTorrent Info Hash(Hex)]
MD5(信息-摘要算法5)
Gnutella2支持的散列函式算法。
xt=urn:md5:[ MD5 Hash(Hex)]
CRC-32(循環冗餘校驗)
不是正式的磁力連結的一部分。沒有任何已知的P2P網路使用。
xt=urn:crc32:[ CRC-32(Base10)]

普通連結

"as"的意思是"acceptable source"。這種連結指向從網路伺服器的直接下載。只有在指定的逾時後才會連結,防止伺服器過載。客戶端在考慮向伺服器傳送下載請求前會先花一定時間在P2P網路中定位檔案。
as=[檔案的網路連結(已編碼URL)]

P2P連結

連結可以是連結到磁力連結的檔案的HTTP(SHTTP、FTP、SFTP等)下載源、檔案的P2P源地址或是hub(使用DC++時)地址。對於這一連結,客戶端嘗試直接連結,並請求檔案或其來源,有時會同時請求二者。這一欄位常被P2P客戶端用來存儲源。引用中可能包含檔案hash。
內容定址網路(CAN)URL
這類連結被Gnutella還有G2應用程式使用,基於RFC 2168。
xs=http://[ 客戶端地址]:[客戶端連線埠]/uri-res/N2R?[包含一個檔案hash的URN ]
例:
xs=http://192.0.2.0.27:6346/uri-res/N2R?urn:sha1:FINYVGHENTHSMNDSQQYDNLPONVBZTICF
連結到DirectConnect hub並為檔案查找源
這一連結立即將DirectConnect客戶端連線到剛才討論的hub。
xs=dchub://[hub 地址]:[hub連線埠]
為Gnutella2上的檔案引用基於網路的源快取
這種情況下,連結包含的點不是客戶端IP或直接來源,而是來源快取。這樣的快取並不包含檔案本身,而是存儲了其他客戶端的IP,這些客戶端連線到快取來下載相同的檔案。一旦客戶端連線到快取並獲得其他替代來源的IP,其自身IP就會存入到快取中,然後繼續連線到下一個快取,繼續請求替代來源。這種系統類似於BitTorrent tracker的操作。
xs=http://cache.freebase.be/[ SHA-1 hash ]
引用ED2K源
xs=ed2k://[ 客戶端地址]:[客戶端連線埠]/[ed2k hash]/[檔案大小]/

常用客戶端

客戶端起始支持版本
μTorrent
1.8
BitComet
1.17
BitSpirit
3.6.0.126
迅雷
5.9.17
Transmission
1.80
qBittorrent
1.5.0
NeoLoader
0.10 Public Beta Release

此外,支持磁力連結的應用程式還包括Vuze、BearShare、DC++、Deluge、gtk-gnutella、Kazaa、LimeWire、FrostWire、MP3 Rocket、Morpheus、Shareaza、MLdonkey、aMule、KCeasy和TrustyFiles。

問題

前面我們說過,“磁力連結”是通過DHT網路來索引需要下載的檔案的,因此在某些環境下可能出現“獲取磁力連結信息”時間較長,或者獲取失敗的問題。由於相關問題經驗的積累很少,因此除了重試還沒有明確的解決辦法。

相關詞條

熱門詞條

聯絡我們