概要#
従来、BitTorrent ネットワークでは、20 バイトのピア ID フィールドがクライアントを識別するために使用され、通常はクライアントの実装やバージョンなどの情報が含まれています。このフィールドはトラッカーリクエストやピアハンドシェイクで送信され、他のノードとトラッカーに自分がどのクライアントであり、バージョンが何であるかを伝えるために使用されます。
ピア ID の最初の文字は M に設定され、その後にバージョンを表す ASCII 数字が続きます。メジャー、マイナー、およびタイニーバージョンはハイフンで区切られます。たとえば、バージョン番号が 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 リリースバージョンで使用される peer_id スキームの命名規則は、最初の 2 つの文字が OP であり、次の 4 つの数字がビルドバージョンと等しいことです。その後のすべての文字はランダムな小文字の 16 進数です。したがって、典型的な peer_id は「OP1234abcdefg」のような文字列であり、「1234」はビルドバージョンを表し、「abcdefg」はランダムな小文字の 16 進数を表します。単純に言えば、peer_id は Opera ブラウザが自身を識別するために使用する一種の命名方法であり、ビルドバージョンとランダムに生成された 16 進数が含まれています。
MLdonkey で使用される peer_id スキームの命名規則は、「-ML」で始まり、小数点を含むバージョン番号が続き、最後にハイフン「-」といくつかのランダムな文字が続きます。例えば、「-ML2.7.2-kgjjfkd」では、「2.7.2」がバージョン番号であり、「kgjjfkd」がランダムな文字です。
Bits on Wheels で使用される peer_id スキームの命名規則は、「-BOW」で始まり、バージョン番号に関連する情報を示す 3 つの文字 xxx が続き、最後にいくつかのランダムな大文字の y で構成される文字列が続きます。バージョン 1.0.6 の Bits on Wheels クライアントの場合、xxx の値は A0C です。
Queen Bee で使用される peer_id スキームの命名規則は、「Q1-」で始まり、バージョン番号を示す 2 つの数字が続き、1 つまたは 2 つのハイフン「-」が続き、最後にいくつかのランダムな文字が続きます。Queen Bee クライアントの場合、2 つのバージョン番号があります:Q1-0-0 - および Q1-10-0-、その後にランダムに生成されたバイトが続きます。
BitTyrant で使用される peer_id スキームは、バージョン 1.1 で使用されます。実際、BitTyrant は Azureus の派生であり、その peer_id の命名は基本的に Azureus の命名方法にいくつかの追加のランダムな文字が付加されたものです。具体的には、BitTyrant は 1.1 バージョンで「AZ2500BT」をプレフィックスとして使用し、その後にいくつかのランダムなバイトが続きます。他のいくつかの命名スキームとは異なり、BitTyrant の命名にはハイフンは含まれません。
TorrenTopia 1.90 バージョンは、他のクライアントとの通信時に「Mainline 3.4.6」と自己を称します。ノード ID は「346----」で始まります。
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 はソフトウェア名、バージョン番号、ランダムな文字列、オプションの拡張情報などで構成されるべきです。具体的な形式は以下の通りです:
- ソフトウェア名:2 バイトの ASCII 文字列で表される文字列で、使用されている BitTorrent クライアントソフトウェアの名前を示します。
- バージョン番号:4 バイトの ASCII 文字列で表される文字列で、クライアントソフトウェアのバージョンを示します。
- ランダムな文字列:20 バイトのランダムに生成された文字列で、各ノード ID が一意であるようにします。
- 拡張情報:オプションの 8 バイトの文字列で、追加のメタデータや識別情報を含めるために使用されます。
BitTorrent Peer ID Conventions は公式に認められた規格であるため、ほとんどの BitTorrent クライアントはこの規格に従ってノード ID を生成および解析します。これにより、BitTorrent ネットワークの相互運用性と互換性が確保されます。