複製鏈接
請複製以下鏈接發送給好友

磁力鏈接

鎖定
磁力鏈接(Magnet URI scheme),是對等網絡中進行信息檢索和下載文檔的電腦程序。和基於“位置”連接的統一資源定位符(URL)不同,磁力鏈接是基於元數據(metadata)文件內容,屬於統一資源名稱(URN)。也就是説,磁力鏈接不基於文檔的IP地址或定位符,而是在分佈式數據庫中,通過散列函數值來識別、搜索來下載文檔。因為不依賴一個處於啓動狀態的主機來下載文檔,所以特別適用沒有中心服務器的對等網絡。舉例來説,一個常見的磁力鏈接形式為“magnet:?xt=urn:btih:”。
中文名
磁力鏈接
外文名
Magnet URI scheme
用    途
識別文件
所屬領域
計算機互聯網
基    礎
不同文件內容的Hash結果
特    點
不基於文檔的IP地址或定位符

磁力鏈接歷史概述

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

磁力鏈接特點

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

磁力鏈接內容散列函數應用

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

磁力鏈接磁力鏈接構成

磁力鏈接由一組參數組成,參數間的順序沒有講究,其格式與在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,AICHSHA1MD5等。這個值是文件的標識符,是不可缺少的。
dn:display name的縮寫,表示向用户顯示的文件名。這一項是選填的。
tr:tracker的縮寫,表示tracker服務器的地址。這一項也是選填的。
ws:webseed的縮寫,表示網絡種子。
urn:(Uniform Resource Name, URN 表示資源名
btih:BitTorrent info hash,種子散列函數
應用程序定義的實驗參數,必須以"x."開頭。 [4-5] 
標準還建議同類的多個參數可以在參數名稱後面加上".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)]
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鏈接

鏈接可以是鏈接到磁力鏈接的文件的HTTPSHTTPFTP、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++、Delugegtk-gnutella、Kazaa、LimeWireFrostWire、MP3 Rocket、Morpheus、Shareaza、MLdonkey、aMule、KCeasy和TrustyFiles。

磁力鏈接磁力鏈接優勢

磁力鏈接1.共享優勢

若網絡中兩台計算機同時下載同一個文件,則它們的ID應該是相似的,這兩台計算機就可以通過與之相似的ID找到可以與之交換數據的其它節點。所以共享方便是它的一大優勢。 [7] 

磁力鏈接2.開放性和跨平台性

一個Magnet鏈接可被運行在幾乎所有平台上的應用程序使用,以下載同一個文件。MagnetURI是以普通文本存在,可以簡單地複製、粘貼到各大論壇、博客、空間等即可完成分享,根本無法禁止。 [7] 

磁力鏈接3.速度優勢

Magnet URI下載一方面可以從Tracker服務器中獲取對等用户,這點和BT獲取對等用户的方式是一樣的,另一方面還可以從DHT網絡中獲取對等用户。可以看出,磁力下載的用户連接數可以大於BT,從而獲取更多的下載速度。 [7] 

磁力鏈接4.性能優勢

使用Magnet URI下載使得整個下載網絡的可靠性和穩定性提高了,因為每一個節點都是可以被替代的,中間節點可以隨時離線,不存在“被拔線”的風險。 [7] 

磁力鏈接5.軟件支持優勢

現在很多軟件都支持這種下載方式,如bitcomet、bittorrent、utorrent、迅雷網際快車比特精靈等最新版。隨着這種技術的成熟與發展,相信更多的軟件都會兼容這種下載方式,該種下載方式將會更廣泛的推廣。 [7] 

磁力鏈接問題

“磁力鏈接”是通過DHT網絡來索引需要下載的文件的,因此在某些環境下可能出現“獲取磁力鏈接信息”時間較長,或者獲取失敗的問題。由於相關問題經驗的積累很少,因此除了重試還沒有明確的解決辦法。
參考資料
  • 1.    陳曉露.網絡資源下載 :中國社會出版社,2010.1
  • 2.    辛運幃, 廖大春, 盧桂章. 單向散列函數的原理、實現和在密碼學中的應用[J]. 計算機應用研究, 2002, 19(2):25-27.
  • 3.    李哲, 方勇, 陳淑敏,等. 數據庫加密技術中散列函數的應用[J]. 計算機工程, 2003, 29(17):68-69.
  • 4.    李峯. BT難下載 磁力鏈接MagNet來搞定[J]. 網友世界, 2010(7):14-15.
  • 5.    寂寞的犀利哥. 和BT説拜拜 下載就用迅雷磁力鏈接[J]. 電腦愛好者, 2010(9):40-40.
  • 6.    迅雷的磁力鏈接下載[J].電腦愛好者:普及版,2011(A01):195-195
  • 7.    胡煒,鍾衞連.基於DHT網絡和PEX技術的Magnet URI[J].計算機與現代化,2011(10):93-95