Peer ID Conventions 节点标识协议
概述
传统上,在 BitTorrent 网络中,20 字节的 Peer ID 字段用于标识客户端,并且通常包含了客户端实现和版本号等信息。这个字段会在 tracker 请求和 peer 握手中发送,用来告诉其他节点和 Tracker 自己是哪个客户端、版本号是多少。
在一个点对点网络中,主线客户端会将 peer-id 的第一个字符设置为 M,后面紧跟着使用 ascii 数字来表示版本号,其中 major 、 minor 和 tiny 版本以破折号分隔。例如,版本号为 4.3.6 和 4.20.8 的 peer-id 可能分别为 M4-3-6– 和 M4-20-8- 。 peer-id 其余的字节是随机的。这个列表最初来源于 BitTorrentSpecification 。
Peer id 是一个唯一的标识符,用于标识特定的 BitTorrent 客户端实现和版本。在这种情况下,peer id 以连字符 “-” 开头,后跟两个字符来标识客户端实现,接着是四个 ascii 数字来表示版本号,然后再有一个连字符 “-” 。与主线(Mainline)类似,剩余的字节是随机的。 例如,”-AZ2060-“ 就是这样一个 peer id 的例子。
已知采用此类编码风格的客户端有:
'AG' - Ares
'A~' - Ares
'AR' - Arctic
'AV' - Avicora
'AX' - BitPump
'AZ' - Azureus
'BB' - BitBuddy
'BC' - BitComet
'BF' - Bitflu
'BG' - BTG (uses Rasterbar libtorrent)
'BR' - BitRocket
'BS' - BTSlave
'BX' - ~Bittorrent X
'CD' - Enhanced CTorrent
'CT' - CTorrent
'DE' - DelugeTorrent
'DP' - Propagate Data Client
'EB' - EBit
'ES' - electric sheep
'FT' - FoxTorrent
'FW' - FrostWire
'FX' - Freebox BitTorrent
'GS' - GSTorrent
'HL' - Halite
'HN' - Hydranode
'KG' - KGet
'KT' - KTorrent
'LH' - LH-ABC
'LP' - Lphant
'LT' - libtorrent
'lt' - libTorrent
'LW' - LimeWire
'MO' - MonoTorrent
'MP' - MooPolice
'MR' - Miro
'MT' - MoonlightTorrent
'NX' - Net Transport
'PD' - Pando
'qB' - qBittorrent
'QD' - QQDownload
'QT' - Qt 4 Torrent example
'RT' - Retriever
'S~' - Shareaza alpha/beta
'SB' - ~Swiftbit
'SS' - SwarmScope
'ST' - SymTorrent
'st' - sharktorrent
'SZ' - Shareaza
'TN' - TorrentDotNET
'TR' - Transmission
'TS' - Torrentstorm
'TT' - TuoTu
'UL' - uLeecher!
'UT' - µTorrent
'UW' - µTorrent Web
'VG' - Vagaa
'WD' - WebTorrent Desktop
'WT' - BitLet
'WW' - WebTorrent
'WY' - FireTorrent
'XL' - Xunlei
'XT' - XanTorrent
'XX' - Xtorrent
'ZT' - ZipTorrent
在使用 BitTornado 和其实验性 BitTorrent 实现时,引入了以一个字符开头的节点 ID,该字符在 BitTornado 中为 “T”,然后是最多五个 ASCII 字符的版本号,如果不足五个字符,则用破折号填充,最后是三个连字符(—)。
版本号中表示版本的 ASCII 字符仅限于以下字符:
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.-
例如 ‘S58B—–‘… 指代 5.8.11
和其他节点标识格式一样,剩余的字节是随机的。已知采用此类编码风格的客户端有:
'A' - ABC
'O' - Osprey Permaseed
'Q' - BTQueue
'R' - Tribler
'S' - Shadow's client
'T' - BitTornado
'U' - UPnP NAT Bit Torrent
BitComet 和 BitLord 生成节点 ID 的方法。节点 ID 是用于标识一个 BitTorrent 客户端的唯一 ID 。在 BitComet 中,节点 ID 由四个 ASCII 字符 “exbc” 、两个字节 “x” 和 “y” 以及随机字符组成。版本号是小数点前的 “x”,小数点后的数字是 “y” 。 BitLord 使用相同的方案,并在版本字节后添加 “LORD” 。不过,BitComet 的一个非官方补丁曾经用 “FUTB” 代替了 “exbc” 。从 BitComet 版本 0.59 开始,节点 ID 的编码方式改为 Azureus 风格。
XBT Client 的特定格式,其 peer_id 由三个大写字符 XBT 和三个 ASCII 数字表示的版本号组成。如果客户端是调试构建,则第七个字节是小写字符 d;否则是一个横杠 -。之后是一个横杠 -,然后是随机数字、大写字母和小写字母。例如,XBT054d- 开头表示的是版本为 0.5.4 的调试构建。
Opera 8 预览版和 Opera 9.x 发行版所使用的 peer_id 方案命名规则是:前两个字符是 OP,接下来的四个数字等于构建版本号。所有后续字符都是随机的小写十六进制数字。因此,一个典型的 peer_id 看起来可能是类似于 “OP1234abcdefg” 的字符串,其中 “1234” 代表构建版本号,而 “abcdefg” 则代表随机的小写十六进制数字。简单来说,peer_id 是 Opera 浏览器用于标识自己的一种命名方式,其中包括了构建版本号和随机生成的十六进制数字。
MLdonkey 使用的 peer_id 方案的命名规则是:以 “-ML” 开头,后面跟着一个带有小数点的版本号,然后是一个短横线 “-“,最后是一些随机字符。例如,”-ML2.7.2-kgjjfkd” 中,”2.7.2″ 是版本号,”kgjjfkd” 是随机字符。
Bits on Wheels 使用的 peer_id 方案的命名规则是:以 “-BOW” 开头,后面跟着三个字符 xxx 表示版本号相关信息,然后是一个短横线 “-“,最后是一些随机的大写字母 y 组成的字符串。而对于版本号为 1.0.6 的 Bits on Wheels 客户端,其 xxx 值为 A0C 。
Queen Bee 使用的 peer_id 方案的命名规则是:以 “Q1-” 开头,后面跟着两个数字表示版本号,然后是一个或两个短横线 “-“,最后是一些随机字符。对于 Queen Bee 客户端来说,可能会有两种版本号:Q1-0-0– 和 Q1-10-0-,随后是随机生成的字节。
BitTyrant 在其 1.1 版本中所使用的 peer_id 方案。实际上,BitTyrant 是 Azureus 的一个分支,并且它的 peer_id 命名基本上是 Azureus 的命名方式加上一些额外的随机字符。具体来说,BitTyrant 在其 1.1 版本中使用 “AZ2500BT” 作为前缀,后面紧跟一些随机生成的字节,而与其他的几种命名方案不同的是,BitTyrant 的命名中没有横线。
TorrenTopia 1.90 版本通过在网上与其他客户端进行通信时自称为 “Mainline 3.4.6”,并使用以 “346——” 开头的节点 ID 。
BitSpirit 使用几种不同的模式来生成节点 ID 。在其中一种模式中,它会读取对方的 ID,并以对方 ID 的前 8 个字节为基础重新连接。它的真实 ID 似乎在版本 3.x 中使用 \0\3BS(C 表示法)作为前 4 个字节,在版本 2.x 中使用 \0\2BS 。在所有模式下,ID 可能以 UDP0 结尾。
Rufus 使用其版本号作为前两个字节的十进制 ASCII 值。第三个和第四个字节是 RS 。随后是用户的昵称和一些随机字节。
G3 Torrent 的用户 ID 以 -G3 开始,并添加用户昵称的最多 9 个字符。
FlashGet 使用 Azureus 的风格,但没有尾随的横线。版本 1.82.1002 仍然使用版本数字 0180 。
AllPeers 采用了一种基于用户相关字符串的 sha1 哈希值的方式来生成用户 ID 。然后将哈希值的前几个字符替换为 “AP” + 版本字符串 + “-“ 。
总结
BitTorrent Peer ID Conventions 是一个用于标准化 BitTorrent 客户端生成和解析节点 ID 的规范。在 BitTorrent 网络中,每个客户端都需要根据这个约定生成其自己的节点 ID,并且能够解析来自其他客户端的节点 ID 。通过遵循这个约定,可以确保不同的客户端之间可以彼此识别,从而使它们能够进行有效的文件共享。
根据这个约定,一个标准的 BitTorrent 节点 ID 应该包括软件名称、版本号、随机字符串和可选的扩展信息等部分,具体格式如下:
软件名称:2 个字节 ASCII 字符表示的字符串,用于指示所使用的 BitTorrent 客户端软件名称。
版本号:4 个字节 ASCII 字符表示的字符串,用于指示客户端软件的版本号。
随机字符串:20 个字节随机生成的字符串,用于使每个节点 ID 都是唯一的。
扩展信息:可选的 8 个字节长度的字符串,用于包含额外的元数据或标识。
由于 BitTorrent Peer ID Conventions 是一个公认的标准,因此大多数 BitTorrent 客户端都遵循这个规范来生成和解析节点 ID 。这有助于确保 BitTorrent 网络中的互操作性和兼容性。
参考链接
Like my work? Don't forget to support and clap, let me know that you are with me on the road of creation. Keep this enthusiasm together!