磁力鏈接

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

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

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

**技術描述**
磁力連結由一組參數組成，參數間的順序沒有講究，其格式與在HTTP鏈接末尾的查詢字符串相同。最常見的參數是"xt"，是"exact topic"的縮寫，通常是一個特定文件的內容散列函數值形成的URN，例如：
File:Magnet-icon.gif magnet:?xt=urn:sha1:YNCKHTQCWBTRNJIV4WNAE52SJUQCZO5C
其值是編碼的文件的SHA-1散列。
注意，雖然這個鏈接指向一個特定文件，但是客戶端應用程序仍然必須進行搜索來確定哪裡，如果有，能夠獲取那個文件。
在標準的草稿中其他參數的定義如下:- "dn" ("顯示名稱"）:為了方便，為用戶顯示文件名稱- "kt" ("關鍵字"):更籠統的搜索，指定搜索關鍵字而不是特定文件- "mt" ("文件列表"):一個URI指向一個列表，例如一個項目列表- 應用程序定義的實驗參數，必須以"x."開頭
標準還建議同類的多個參數可以在參數名稱後面加上".1", ".2"等來使用，例如
File:Magnet-icon.gif magnet:?xt.1=urn:sha1:YNCKHTQCWBTRNJIV4WNAE52SJUQCZO5C&xt.2=urn:sha1:TXGCZQTH26NL6OUQAJJPFALHG2LTGBC7

**描述**
磁力連結可以包括一個或多個參數，之間用'&'隔開。參數的順序在文件在標準中沒有記錄。有一些參數的值對於客戶端正確解析磁力連結很重要。
magnet:? xl = -{zh-hans:字節; zh-hant:位元組}-大小& dn = -{zh-hans:文件; zh-hant:檔案;}-名（已編碼URL）& xt = urn: tree: tiger:  TTH hash（Base32）

**參數**
 dn（顯示名稱）- 文件名- xl（絕對長度）- 文件字節數- xt（eXact Topic）- 包含文件散列函數值的URN- as（可接受來源） - 在線文件的網絡鏈接- xs（絕對資源）- P2P鏈接- kt（關鍵字）- 用於搜索的關鍵字- mt（文件列表）- 鏈接到一個包含磁力連結的元文件 (MAGMA -  MAGnet MAnifest date=20090923191015 ）- tr（Tracker地址）- BT下載的Tracker URL

**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）

**網路連結至檔案**
有兩種可以插入到磁力連結的下載鏈接作為直接或者備用資源。

**= 普通連結（as） =**
"as"的意思是"acceptable source"。這種鏈接指向從網絡服務器的直接下載。只有在指定的超時後才會連結，防止服務器過載。客戶端在考慮向服務器發送下載請求前會先花一定時間在P2P網絡中定位文件。
as=-{zh-hans:文件; zh-hant:檔案}-的-{zh-hans:網絡鏈接; zh-hant:網路連結}-（已編碼URL）

**= 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/文件大小/

**文件列表（mt）**
這是一個導向一系列連鏈接列表（也許是個網頁）的鏈接……

或者是一個URN
mt=urn:sha1:3I42H3S6NNFQ2MSVX7XZKYAYSCX5QBYJ

**關鍵字（kt）**
該部分代表了一串用於P2P網絡搜索用的關鍵字
kt=martin+luther+king+mp3

**Tracker地址（tr）**
Tracker URL.用於在不需要分散式雜湊表支持下下載BitTorrent資源。


**補充格式（x.）**
對於實驗性且自補的非正式選項，可以使用前綴x後加已選擇的第二個字母
x.新-{zh-hans:參數; zh-hant:參數}-名=新-{zh-hans:參數數據; zh-hant:參數資料}-（-{zh-hans:已編碼; zh-hant:已編碼}-URL）

**參數組**
通過在每個參數後編號並用"."來分隔允許一個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 date=20211228160403 
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。

**參見**
Metalink
*DHT

**參考文獻**

**外部鏈接**
 MAGNET-URI項目網站 date=20100215012724 - Magnet.so date=20171107021800 ，Magnet.so搜索引擎- ENBT.org date=20160825074922 ，Magnet搜索引擎- Freebase date=20100204110253 ，使用磁力連結索引免費軟件的網站- RHash date=20190607012832 ，開源命令行工具，可以計算磁力連結- torrent2magnet date=20131006015956 ，Magnet轉換工具，可以把torrent文件轉換成磁力鏈接