Network

提供: tezos-wiki
移動先: 案内検索

Bitcoinは、単純なブロードキャストネットワークを使用してトランザクションとブロックを伝播します。すべての通信はTCP経由で行われます。 Bitcoinは-portパラメータを使用して8333以外のポートを完全に使用できます。 IPv6はBitcoind / Bitcoin-Qt v0.7で[1]です。

メッセージ[編集]

  • version - プログラムのバージョンとブロック数に関する情報。最初に接続したときに交換されます。
  • verack - 私たちが接続しようとしていることを認識するバージョンメッセージに応答して送信されます。
  • addr - 1つ以上のIPアドレスとポートのリスト。
  • inv - 「私はこれらのブロック/トランザクションを持っています:...」通常、「新しい」ブロックまたはトランザクションが中継されているときにのみ送られます。これはリストに過ぎず、実際のデータではありません。
  • getdata - ハッシュで単一のブロックまたはトランザクションを要求します。
  • getblocks - 範囲内のすべてのブロックの inv を要求します。
  • getheaders - 範囲内のすべてのブロックヘッダーを含む ヘッダー メッセージを要求します。
  • tx - トランザクションを送信します。これは、 getdata リクエストに対する応答としてのみ送信されます。
  • block - ブロックを送信します。これは、 getdata リクエストに対する応答としてのみ送信されます。
  • headers - 最大2,000個のブロックヘッダを送信します。非ジェネレータはブロック全体ではなくブロックのヘッダをダウンロードできます。
  • getaddr - ブートストラップのための既知のアクティブなピアの束を含む addr メッセージを要求します。
  • submitorder 、 'checkorder' '、' reply - [IPアドレス| IPトランザクション]を実行するときに使用されます。
  • alert - ネットワークアラートを送信します。
  • ping - 何もしません。接続がまだオンラインであることを確認するために使用されます。接続が切断された場合、TCPエラーが発生します。

詳細な情報と詳細な技術情報は、Protocol Specificationにあります。

接続[編集]

ピアに接続するには、バージョン番号、ブロック数、および現在の時刻を含む バージョン メッセージを送信します。あなたがあなたのバージョンからの接続を受け入れるならば、リモートピアは "verack"メッセージと彼自身の "version"メッセージを送り返します。彼のバージョンからの接続を受け入れるならばあなた自身の "verack"で応答します。

すべてのピアからの時間データが収集され、その時間を使用するすべてのネットワークタスクに対して中央値がBitcoinによって使用されます(他のバージョンメッセージを除く)。

次に、あなたは知らないすべてのアドレスを格納して、 getaddr addr メッセージを交換します。 addr メッセージにはしばしば1つのアドレスしか含まれませんが、時には1000までのアドレスを含むことがあります。これは交換の始めに最も一般的です。

標準リレー[編集]

誰かがトランザクションを送信すると、それを含む「inv」というメッセージをすべての同輩に送ります。彼らの同僚は、 getdata を使って完全なトランザクションを要求します。彼らはそれを受け取った後でトランザクションが有効であると考えるならば、彼らはまた、 "'inv' 'などですべての同輩にトランザクションをブロードキャストします。ピアツーピアは、まだトランザクションを持っていない場合にのみ、トランザクションを要求します。ピアは、すでに知っているトランザクションを再ブロードキャストすることはありませんが、しばらくしてもブロックに入らないと、トランザクションは最終的には忘れ去られます。しかし、トランザクションの送信者と受信者は再ブロードキャストされます。

生成している誰でも、有効な受信トランザクションを収集し、それらをブロックに含める作業を行います。誰かがブロックを見つけたら、それを上のようにすべての同輩に含んでいる "'inv' 'を送ります。トランザクションと同じように動作します。

誰もが自分のIPアドレスを含む "addr"を24時間ごとにブロードキャストします。ノードはこれらのメッセージをいくつかの同輩に中継し、新しいものであればそのアドレスを保存します。このシステムでは、誰がどのIPが現在ネットワークに接続されているかについて誰でも合理的に明確なイメージを持っています。ネットワークに接続した後は、あなたの最初の「addr」のためにほとんどの人のアドレスデータベースにすぐに追加されます。

ネットワークアラートは、「アラート」メッセージでブロードキャストされます。 inv のようなシステムは使用されません。これらにはアラート全体が含まれます。受け取ったアラートが有効な場合(プライベートキーを持つ人の1人によって署名されている)、すべてのピアに中継されます。アラートがまだ有効な場合は、新しい接続が開始されるたびに再ブロードキャストされます。

最初のブロックのダウンロード[編集]

接続の開始時に、知っている最新のブロックのハッシュを含む "getblocks"メッセージを送信します。同輩がこれが最新のブロックだと思っていないならば、あなたはあなたがリストアップしたものよりも500ブロック先の "inv"を送ります。これらのブロックをすべて getdata で要求すると、同輩はあなたにブロックのメッセージを送ります。これらのブロックをすべてダウンロードして処理した後は、ブロックをすべて取得するまで別の getblocks などを送信します。

細いSPVクライアント[編集]

BIP 0037は、Simple Payment Verificationを使用して、シンクライアントまたはライトクライアントのサポートを導入しました。 SPVクライアントは、ブロックチェーン内の資金の存在を確認するためにブロックの全内容をダウンロードする必要はありませんが、ブロックヘッダーとブルームフィルターのチェーンを使用して、他のノードから必要なデータを取得します。このクライアント通信の方法は、完全なノードとの高いセキュリティの信頼できない通信を可能にするが、SPVクライアントが情報を求めているアドレスをピアが推測することができるので、プライバシーが高価である。

マルチビットBitcoin Walletは、ライブラリbitcoinjを基盤としてこのように動作します。

ブートストラップ[編集]

最後にアドレスを見てからランダムなビットを追加してからアドレスデータベースをソートすることで、接続先のピアを選択します。

Bitcoinには、ピアを見つける3つの方法があります。

Addr[編集]

上記の "addr"メッセージは、IRCブートストラップ方法と同様の効果を作り出します。ピアが参加するたびに、合理的に素早く知ることができますが、離れるときはしばらく分かりません。

Bitcoinには、「シードノード」と呼ばれるアドレスのリストが付属しています。 IRCに接続できず、以前にネットワークに接続したことがない場合、クライアントはこのリストのいずれかのノードに接続してアドレスデータベースを更新します。

-addnodeコマンドラインオプションは、手動でノードを追加するために使用できます。 -connectオプションを指定すると、Bitcoinは特定のノードにのみ接続されます。

DNS[編集]

Bitcoinはいくつかのホスト名のIPアドレスを調べ、それらを潜在的なアドレスのリストに追加します。これはv0.6.x以降のデフォルトのシードメカニズムです。

IRC[編集]

Bitcoinクライアントのバージョン0.6.xでは、IRCのブートストラップはデフォルトでは有効になっていません。下記の情報は、以前のほとんどのバージョンで正確です。

Bitcoinは、irc.lfnet.orgの#bitcoin00と#bitcoin99の間のランダムなチャンネルに参加します。ニックネームは、あなたのIPアドレスのエンコードされた形式に設定されています。チャンネル上のすべてのユーザーのすべてのニックネームをデコードすることで、現在Bitcoinに接続されているすべてのIPアドレスのリストが取得できます。

ポート6667でアウトバウンド接続を確立できないホストの場合、lfnetサーバーはポート7777でリッスンされています。

ハートビート[編集]

クライアントがメッセージを送信してから30分以上経過すると、ピアノードへの接続を維持するメッセージが送信されます。

ピアノードがメッセージを通信してから90分が経過した場合、クライアントはその接続が切断されたとみなします。

関連項目[編集]

Category:技術

pl:Sieć