最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

BitTorrent 中的 Extension Protocol 具體是什么?

2023-06-27 15:30 作者:IMFile  | 我要投稿

BitTorrent 中的 Extension Protocol 是一種用于擴(kuò)展和增強(qiáng) BitTorrent 下載協(xié)議功能的機(jī)制。它允許客戶端通過發(fā)送和響應(yīng)與標(biāo)準(zhǔn)協(xié)議不同的消息來進(jìn)行通信。這些消息可以實(shí)現(xiàn)新的功能,如?DHT(分布式哈希表)交換、 PEX(對(duì)等交換)以及支持更高級(jí)別的加密。

Extension Protocol 在 BitTorrent 協(xié)議中起著至關(guān)重要的作用,因?yàn)樗试S客戶端進(jìn)行更有效和更可靠的數(shù)據(jù)交換,并提供了更好的隱私和安全性。例如,DHT 支持無需 Tracker 即可查找其他已連接到網(wǎng)絡(luò)的對(duì)等方;而 PEX 則允許客戶端直接與其他客戶端通信,從而使數(shù)據(jù)交換更加穩(wěn)定和可靠。

協(xié)議簡(jiǎn)介


這個(gè)協(xié)議的目的是為 BitTorrent 協(xié)議的擴(kuò)展提供一個(gè)簡(jiǎn)單而輕量的傳輸方式。支持這個(gè)協(xié)議可以很容易地添加新的擴(kuò)展功能,而不會(huì)干擾標(biāo)準(zhǔn)的 BitTorrent 協(xié)議或不支持你想要添加的擴(kuò)展功能的客戶端。換句話說,這個(gè)協(xié)議提供了一種靈活、可擴(kuò)展的機(jī)制,使得開發(fā)者能夠在不影響其他用戶的情況下,對(duì) BitTorrent 協(xié)議進(jìn)行個(gè)性化的擴(kuò)展和定制。

在 BitTorrent 協(xié)議中,為了向其他支持的客戶端傳播自己,會(huì)使用保留字節(jié)中的一個(gè)字節(jié)。其中,用于擴(kuò)展協(xié)議的字節(jié)是從右邊開始數(shù)的第 20 個(gè)(從 0 開始計(jì)數(shù))。因此,可以通過表達(dá)式(reserved_byte[5] & 0x10)來檢查客戶端是否支持?jǐn)U展消息傳輸。這個(gè)表達(dá)式的含義是,將保留字節(jié)中的第 5 個(gè)字節(jié)與 0x10 進(jìn)行按位與運(yùn)算,如果結(jié)果不為 0,則表示客戶端支持?jǐn)U展消息。

建立對(duì)協(xié)議的支持后,客戶端應(yīng)該支持 1 條新消息:

這個(gè)消息與其他 BitTorrent 消息一樣,以 4 字節(jié)的長(zhǎng)度前綴和一個(gè)單字節(jié)的標(biāo)識(shí)符(在本例中為 20)發(fā)送。在消息有效負(fù)載的開頭,有一個(gè)單字節(jié)的消息標(biāo)識(shí)符。該標(biāo)識(shí)符可以引用不同的擴(kuò)展消息,但只指定了一個(gè) ID,即 0 。如果 ID 是 0,則表示這個(gè)消息是一個(gè)握手消息,下面會(huì)進(jìn)行描述。一般擴(kuò)展消息的布局如下所示(包括 BitTorrent 協(xié)議使用的消息頭):

1)uint8_tbittorrent 消息 ID, = 20uint8_t擴(kuò)展消息 ID 。 0 = 握手,>0 = 握手指定的擴(kuò)展消息。

握手消息

握手消息的有效負(fù)載是一個(gè) bencoded 字典。字典中的所有項(xiàng)都是可選的??蛻舳藨?yīng)該忽略字典中未知的名稱。字典中的所有部分都區(qū)分大小寫。字典中定義了以下項(xiàng)目:

這里列出了一些實(shí)現(xiàn)可能選擇支持的項(xiàng)目:

握手字典還可以包括擴(kuò)展的握手信息,例如支持加密頭部或任何可能的內(nèi)容。

以下是握手消息負(fù)載的示例內(nèi)容:

并以編碼形式:

d1:md11:LT_metadatai1e6:μT_PEXi2ee1:pi6881e1:v13:\xc2\xb5Torrent 1.2e

為了避免擴(kuò)展名不小心發(fā)生沖突,應(yīng)該在擴(kuò)展名前加上一個(gè)或兩個(gè)字符的代碼,以標(biāo)識(shí)引入擴(kuò)展的客戶端。這適用于擴(kuò)展消息的名稱以及放在頂層字典中的任何其他信息。除非由本規(guī)范定義,否則所有一字節(jié)和兩字節(jié)標(biāo)識(shí)符均無效。

此消息應(yīng)在標(biāo)準(zhǔn) bittorrent 握手后立即發(fā)送到支持此擴(kuò)展協(xié)議的任何節(jié)點(diǎn)。在連接的整個(gè)周期內(nèi),可以多次發(fā)送握手消息,發(fā)送方不應(yīng)斷開連接。實(shí)現(xiàn)可以選擇忽略后續(xù)的握手消息(或其部分)。

隨后的握手消息可用于在不重新啟動(dòng)連接的情況下啟用/禁用擴(kuò)展。如果節(jié)點(diǎn)持在運(yùn)行時(shí)更改擴(kuò)展,則應(yīng)注意?m?字典是累加的。它包含擴(kuò)展列表的實(shí)際更改就足夠了。要在運(yùn)行時(shí)禁用對(duì)?LT_metadata?的支持,而不影響任何其他擴(kuò)展,應(yīng)發(fā)送此消息:d11:LT_metadatai0ee?。如上所述,值 0 用于關(guān)閉擴(kuò)展。

必須為每個(gè)節(jié)點(diǎn)存儲(chǔ)擴(kuò)展 ID,因?yàn)槊總€(gè)節(jié)點(diǎn)可能具有相同擴(kuò)展的不同 ID 。

該規(guī)范故意沒有指定任何擴(kuò)展,例如節(jié)點(diǎn)交換或元數(shù)據(jù)交換。該協(xié)議僅是 bittorrent 協(xié)議實(shí)際擴(kuò)展的傳輸方式,上面的示例中命名的擴(kuò)展(例如 p)只是可能擴(kuò)展的示例。

合理的依據(jù)

為了避免使用全局消息 ID 注冊(cè)表,擴(kuò)展消息的 ID 在握手過程中被定義的原因是為了確保擴(kuò)展消息名稱具有唯一性,這樣做比使用全局注冊(cè)表更容易。慣例是在擴(kuò)展消息名稱上使用兩個(gè)字母前綴,該前綴將標(biāo)識(shí)最先實(shí)現(xiàn)該擴(kuò)展消息的客戶端。例如,LT_metadata?由 libtorrent 實(shí)現(xiàn),因此它具有 LT 前綴。

如果支持?jǐn)U展的客戶端可以決定其接收到的消息將具有哪些數(shù)字,那么這些數(shù)字就是該客戶端內(nèi)的常量。也就是說,它們可以用于 switch 語句。對(duì)于另一端來說,存儲(chǔ)一個(gè)包含每個(gè)消息期望的 ID 的數(shù)組并在每次發(fā)送擴(kuò)展消息時(shí)使用該數(shù)組進(jìn)行查找非常容易。

使用字典而不是使用(用于隱式分配索引號(hào)擴(kuò)展的)數(shù)組的原因是,如果客戶端想要禁用某些擴(kuò)展,ID 號(hào)碼將會(huì)改變,它將無法使用常量(因此,不能在?switch? 中使用它們)。如果消息 ID 直接映射到 BitTorrent 消息 ID,則還可以將握手中的擴(kuò)展映射到具有固定消息 ID 的現(xiàn)有擴(kuò)展。

使用單個(gè)字節(jié)作為擴(kuò)展消息標(biāo)識(shí)符的原因是為了遵循 BitTorrent 規(guī)范的單個(gè)字節(jié)消息標(biāo)識(shí)符。這被認(rèn)為足夠了。它不會(huì)限制擴(kuò)展的總數(shù),只會(huì)限制同時(shí)使用的擴(kuò)展數(shù)。

使用單個(gè)字節(jié)標(biāo)識(shí)符作為標(biāo)準(zhǔn)化握手標(biāo)識(shí)符的原因是:1)主線 DHT 使用單個(gè)字節(jié)標(biāo)識(shí)符;2)節(jié)省帶寬。更長(zhǎng)消息的唯一優(yōu)點(diǎn)是使協(xié)議對(duì)人類更易讀,但是 BT 協(xié)議并不是設(shè)計(jì)成人類可讀的協(xié)議,所以為什么要費(fèi)心呢。

總的來說,Extension Protocol 是 BitTorrent 協(xié)議的一個(gè)重要組成部分,它為用戶提供了更多的功能和更好的使用體驗(yàn)。


參考鏈接

  • http://www.bittorrent.org/beps/bep_0010.html


BitTorrent 中的 Extension Protocol 具體是什么?的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
龙岩市| 五原县| 河北区| 台江县| 雷州市| 射阳县| 舞阳县| 金湖县| 香港| 延川县| 额济纳旗| 金门县| 东平县| 温州市| 衢州市| 桐庐县| 灌云县| 卫辉市| 库伦旗| 西城区| 扶绥县| 武义县| 南康市| 盐城市| 惠安县| 抚顺市| 曲阳县| 渭源县| 永登县| 雷波县| 许昌市| 汉中市| 张家界市| 阿图什市| 嘉黎县| 赤壁市| 麟游县| 太康县| 咸阳市| 怀化市| 麻江县|