概要#
従来、BitTorrent ネットワークでは、20 バイトのピア ID フィールドがクライアントを識別するために使用され、通常はクライアントの実装やバージョンなどの情報を含んでいます。このフィールドはトラッカーリクエストやピアハンドシェイクで送信され、他のノードとトラッカーに自分がどのクライアントであり、バージョンが何であるかを伝えるために使用されます。
ピア ID の最初の文字を M に設定し、その後にバージョンを表す ASCII 数字を続けることで、ピアツーピアネットワークでは、メインクライアントがピア ID を設定します。メジャーバージョン、マイナーバージョン、およびタイニーバージョンはハイフンで区切られます。たとえば、バージョン番号が 4.3.6 および 4.20.8 のピア ID は、それぞれ M4-3-6 - および M4-20-8 - になる可能性があります。ピア ID の残りのバイトはランダムです。このリストは最初に BitTorrentSpecification から取得されました。
ピア ID は、特定の BitTorrent クライアントの実装とバージョンを識別するための一意の識別子です。この場合、ピア ID はハイフンで始まり、クライアントの実装を示す 2 つの文字、バージョンを表す 4 つの ASCII 数字、そしてさらにハイフンが続きます。メインライン(Mainline)と同様に、残りのバイトはランダムです。例えば、"-AZ2060-" はこのようなピア 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 の先頭に 1 文字を導入しました。BitTornado では、この文字は「T」であり、最大 5 文字の ASCII 文字のバージョン番号が続きます。5 文字に満たない場合はハイフンで埋められます。最後に 3 つのハイフン(—)が続きます。
バージョン番号で表される 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 は 4 つの ASCII 文字「exbc」、2 つのバイト「x」と「y」、およびランダムな文字で構成されます。バージョン番号は小数点の前の「x」であり、小数点以下の数字は「y」です。BitLord は同じ方法を使用し、バージョンバイトの後に「LORD」を追加します。ただし、BitComet の非公式なパッチでは、「exbc」の代わりに「FUTB」が使用されました。BitComet バージョン 0.59 以降、ノード ID のエンコーディング方式が Azureus スタイルに変更されました。
XBT Client の特定の形式では、ピア ID は XBT と 3 つの ASCII 数字で表されるバージョン番号で構成されます。クライアントがデバッグビルドの場合、7 番目のバイトは小文字の「d」であり、それ以外の場合はハイフン「-」です。その後にハイフン「-」が続き、その後にランダムな数字、大文字、小文字が続きます。例えば、XBT054d - で始まるものは、バージョン 0.5.4 のデバッグビルドを表します。
Opera 8 プレビューバージョンおよび Opera 9.x リリース版で使用されるピア ID スキームの命名規則は、最初の 2 文字が OP であり、次の 4 つの数字がビルドバージョンと等しいことです。その後のすべての文字はランダムな小文字の 16 進数です。したがって、典型的なピア ID は「OP1234abcdefg」のような文字列であり、「1234」はビルドバージョンを表し、「abcdefg」はランダムな小文字の 16 進数を表します。要するに、ピア ID は Opera ブラウザが自身を識別するために使用する一種の命名規則であり、ビルドバージョンとランダムに生成された 16 進数が含まれています。
MLdonkey が使用するピア ID スキームの命名規則は、「-ML」で始まり、小数点を含むバージョン番号が続き、最後にハイフン「-」といくつかのランダムな文字が続きます。例えば、「-ML2.7.2-kgjjfkd」では、「2.7.2」がバージョン番号であり、「kgjjfkd」がランダムな文字です。
Bits on Wheels が使用するピア ID スキームの命名規則は、「-BOW」で始まり、バージョン番号に関連する情報を示す 3 つの文字 xxx が続き、最後にいくつかのランダムな大文字の y で構成される文字列が続きます。バージョン 1.0.6 の Bits on Wheels クライアントの場合、xxx の値は A0C です。
Queen Bee が使用するピア ID スキームの命名規則は、「Q1-」で始まり、バージョン番号を示す 2 つの数字が続き、その後に 1 つまたは 2 つのハイフン「-」が続き、最後にいくつかのランダムな文字が続きます。Queen Bee クライアントの場合、2 つのバージョン番号があります:Q1-0-0 - および Q1-10-0-、その後にランダムに生成されたバイトが続きます。
BitTyrant は、その 1.1 バージョンで使用されるピア ID スキームです。実際、BitTyrant は Azureus の派生であり、基本的には Azureus の命名方法にいくつかの追加のランダムな文字が付加されたものです。具体的には、BitTyrant は 1.1 バージョンで「AZ2500BT」というプレフィックスを使用し、その後にいくつかのランダムなバイトが続きます。他のいくつかの命名スキームとは異なり、BitTyrant の命名にはハイフンは含まれません。
TorrenTopia 1.90 バージョンは、他のクライアントとの通信時に「Mainline 3.4.6」と自己を称するようになり、「346-----」で始まるノード ID を使用します。
BitSpirit は、ノード ID を生成するためにいくつかの異なるパターンを使用します。そのうちの 1 つのパターンでは、相手の ID を読み取り、相手の ID の最初の 8 バイトを基に再接続します。実際の ID は、バージョン 3.x では \0\3BS(C 表記法)を使用した最初の 4 バイトであり、バージョン 2.x では \0\2BS を使用します。すべてのパターンで、ID は UDP0 で終わる可能性があります。
Rufus は、バージョン番号を最初の 2 つのバイトの 10 進 ASCII 値として使用します。3 番目と 4 番目のバイトは 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 は、ソフトウェア名、バージョン番号、ランダムな文字列、オプションの拡張情報などの部分で構成されるべきです。具体的な形式は以下の通りです:
ソフトウェア名:ASCII 文字 2 文字の文字列で、使用されている BitTorrent クライアントソフトウェアの名前を示します。
バージョン番号:ASCII 文字 4 文字の文字列で、クライアントソフトウェアのバージョンを示します。
ランダムな文字列:20 バイトのランダムに生成された文字列で、各ノード ID が一意であるようにします。
拡張情報:オプションの 8 バイトの文字列で、追加のメタデータや識別情報を含めるために使用されます。
BitTorrent Peer ID Conventions は公認の標準であるため、ほとんどの BitTorrent クライアントはこの規格に従ってノード ID を生成および解析します。これにより、BitTorrent ネットワークの相互運用性と互換性が確保されます。
参考リンク#
http://www.bittorrent.org/beps/bep_0020.html
https://wiki.theory.org/BitTorrentSpecification