磁力連結

磁力連結（Magnet URI scheme），是對等網路中進行資訊檢索和下載文件的電腦程式。和基於 “位置” 連線的統一資源定位符不同，磁力連結是基於元資料檔案內容，屬於統一資源名稱。也就是說，磁力連結不基於文件的 IP 地址或定位符，而是在分散式資料庫中，透過雜湊函式值來識別、搜尋來下載文件。因為不依賴一個處於啟動狀態的主機來下載文件，所以特別適用沒有中心伺服器的對等網路。它符合開源標準。

歷史

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

內容雜湊函式的應用

磁力連結最常見的用途是基於檔案內容的雜湊函式值來連結到特定檔案，生成一個唯一的檔案識別符，類似於 ISBN。不像常規的識別符，內容雜湊可以被任意一位持有此檔案的人生成，所以並不需要一箇中心機構，這使其在檔案共享領域經常被用作搜尋條件，因任何人都可以分發一個磁力連結來確保該連結指向的資源就是他想要的，而和得到該資源的方式無關。（雖然技術上講，兩個不同的檔案可能具有相同的雜湊值，但實際上這是極不可能發生的）

另一個磁力連結的優勢是開放性和跨平臺性：一個磁力連結可被執行在幾乎所有平臺上的應用程式們使用以下載一個檔案。因為磁力連結十分簡潔且為純文字格式，所以使用者可以很方便地將其複製到電子郵件或即時訊息中，比如種子檔案。

2.1 技術描述

磁力連結由一組引數組成，引數間的順序沒有講究，其格式與在 HTTP 連結末尾的查詢字串相同。最常見的引數是 "xt"，是 "exact topic" 的縮寫，通常是一個特定檔案的內容雜湊函式值形成的 URN，例如：

 magnet:?xt=urn:sha1:YNCKHTQCWBTRNJIV4WNAE52SJUQCZO5C

其值是編碼的檔案的 SHA-1 雜湊。

注意，雖然這個連結指向一個特定檔案，但是客戶端應用程式仍然必須進行搜尋來確定哪裡，如果有，能夠獲取那個檔案。

在標準的草稿中其他引數的定義如下:

"dn" ("顯示名稱"）: 為了方便，為使用者顯示檔名稱
"kt" ("關鍵字"): 更籠統的搜尋，指定搜尋關鍵字而不是特定檔案
"mt" ("檔案列表"): 一個 URI 指向一個列表，例如一個專案列表
應用程式定義的實驗引數，必須以 "x." 開頭

標準還建議同類的多個引數可以在引數名稱後面加上 ".1", ".2" 等來使用，例如

 magnet:?xt.1=urn:sha1:YNCKHTQCWBTRNJIV4WNAE52SJUQCZO5C&xt.2=urn:sha1:TXGCZQTH26NL6OUQAJJPFALHG2LTGBC7

描述

磁力連結可以包括一個或多個引數，之間用 '&' 隔開。引數的順序在檔案在標準中沒有記錄。有一些引數的值對於客戶端正確解析磁力連結很重要。

magnet:? xl = 位元組大小 & dn = 檔名（已編碼 URL）& xt = urn: tree: tiger: TTH hash（Base32）

3.1 引數

dn（顯示名稱）- 檔名
xl（絕對長度）- 檔案位元組數
xt（eXact Topic）- 包含檔案雜湊函式值的 URN
as（可接受來源） - 線上檔案的網路連結
xs（絕對資源）- P2P 連結
kt（關鍵字）- 用於搜尋的關鍵字
mt（檔案列表）- 連結到一個包含磁力連結的元檔案 (MAGMA - MAGnet MAnifest ）
tr（Tracker 地址）- BT 下載的 Tracker URL

3.1.1 xt 引數

磁力連結的這部分最重要。用於尋找和驗證包含著磁力連結中的檔案。

TTH（Tiger Tree 雜湊函式）

TigerTree 雜湊函式被用在包括和在內的幾個網路中。

xt=: TTH Hash

SHA-1（安全雜湊演演算法 1）

Gnutella 和使用的雜湊函式。

xt=: SHA-1 Hash

這種雜湊函式包含一個 SHA-1 雜湊函式和一個 TTH 雜湊函式，用 "." 隔開。

Gnutella 和使用。

xt=: SHA-1 Hash. TTH Hash

eD2k Hash（eDonkey2000）雜湊函式

eDonkey2000 使用的雜湊函式演算法。

xt=: ED2K Hash（Hex）

AICH（高階智慧型損壞處理）

不是正式的磁力連結的一部分。eDonkey2000 使用的雜湊函式演算法，用於儲存和控制下載完成、正在下載的檔案的完整性。

xt=: aich Hash

雜湊函式

使用的雜湊函式演算法。

xt=: Hash（Hex）

BTIH（BitTorrent Info Hash）

BitTorrent 使用的雜湊函式演算法。出於向下相容的考慮，客戶端需要同時支援被編碼過的 BTIH 雜湊結果。

xt=: BitTorrent Info Hash（Hex）

MD5（資訊 - 摘要演算法 5）

支援的雜湊函式演算法。

xt=: MD5 Hash（Hex）

CRC-32（迴圈冗餘校驗）

不是正式的磁力連結的一部分。沒有任何已知的 P2P 網路使用。

xt=: CRC-32（Base10）

3.1.2 網路連結至檔案

有兩種可以插入到磁力連結的下載連結作為直接或者備用資源。

3.1.2.1 普通連結（as）

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

as = 檔案的網路連結（已編碼 URL）

3.1.2.2 P2P 連結（xs）

連結可以是連結到磁力連結的檔案的 HTTP（SHTTP、FTP、SFTP 等）下載源、檔案的 P2P 源地址或是 hub（使用 DC++ 時）地址。對於這一連結，客戶端嘗試直接連結，並請求檔案或其來源，有時會同時請求二者。這一欄位常被 P2P 客戶端用來儲存源。引用中可能包含檔案 hash。

內容定址網路（CAN）URL

這類連結被 Gnutella 還有 G2 應用程式使用，基於 RFC 2168。

xs=http:// 客戶端地址：客戶端埠 /uri-res/N2R? 包含一個檔案 hash 的 URN

例：

連結到 hub 併為檔案查詢源

這一連結立即將 DirectConnect 客戶端連線到剛才討論的 hub。

xs=dchub://hub 地址:hub 埠

為上的檔案引用基於網路的源快取

這種情況下，連結包含的點不是客戶端 IP 或直接來源，而是來源快取。這樣的快取並不包含檔案本身，而是儲存了其他客戶端的 IP，這些客戶端連線到快取來下載相同的檔案。一旦客戶端連線到快取並獲得其他替代來源的 IP，其自身 IP 就會存入到快取中，然後繼續連線到下一個快取，繼續請求替代來源。這種系統類似於 BitTorrent tracker 的操作。

SHA-1 hash

引用 ED2K 源

xs=ed2k:// 客戶端地址：客戶端埠 /ed2k hash / 檔案大小 /

3.1.3 檔案列表（mt）

這是一個導向一系列連連結列表（也許是個網頁）的連結……

或者是一個 URN

mt=urn:sha1:3I42H3S6NNFQ2MSVX7XZKYAYSCX5QBYJ

3.1.4 關鍵字（kt）

該部分代表了一串用於 P2P 網路搜尋用的關鍵字

kt=martin+luther+king+mp3

3.1.5 Tracker 地址（tr）

Tracker URL. 用於在不需要分散式雜湊表支援下下載 BitTorrent 資源。

3.1.6 補充格式（x.）

對於實驗性且自補的非正式選項，可以使用字首 x 後加已選擇的第二個字母

x. 新引數名 = 新引數資料（已編碼 URL）

3.1.7 引數組

透過在每個引數後編號並用 "." 來分隔允許一個 Magnet 連結中包含多個檔案及它們 URN, 檔名和雜湊函式值。

magnet:?xt.1 = 第一個檔案的 URN&xt.2 = 第二個檔案的 URN

示例

連結到一個 0 位元組長度的檔案。

magnet:?xt=urn:ed2k:31D6CFE0D16AE931B73C59D7E0C089C0&xl=0&dn=zero_len.fil&xt=urn:bitprint:3I42H3S6NNFQ2MSVX7XZKYAYSCX5QBYJ.LWPNACQDBZRYXW3VHJVCJ64QBZNGHOHHHZWCLNQ&xt=urn:md5:D41D8CD98F00B204E9800998ECF8427E

mediawiki-1.15.1.tar.gz

magnet:?xt=urn:ed2k:354B15E68FB8F36D7CD88FF94116CDC1&xl=10826029&dn=mediawiki-1.15.1.tar.gz&xt=urn:tree:tiger:7N5OAMRNGMSSEUE3ORHOKWN4WWIQ5X4EBOOTLJY&xt=urn:btih:QHQXPYWMACKDWKP47RRVIV7VOURXFE5Q&tr=http%3A%2F%2Ftracker.example.org%2Fannounce.php%3Fuk%3D1111111111%26&as=http%3A%2F%2Fdownload.wikimedia.org%2Fmediawiki%2F1.15%2Fmediawiki-1.15.1.tar.gz&xs=http%3A%2F%2Fcache.example.org%2FXRX2PEFXOOEJFRVUCX6HMZMKS5TWG4K5&xs=dchub://example.org

url magnet

https://web.archive.org/web/20110716164755/http://sure-raza.com/magnet:/?xl=10826029&dn=mediawiki-1.15.1.tar.gz&xt=urn:tree:tiger:7N5OAMRNGMSSEUE3ORHOKWN4WWIQ5X4EBOOTLJY

客戶端

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