RealPath:
WebPath:
2017/01/05 10:36 (JST) 更新
regtest環境 >>

ノード間接続

Contents

regtestノードは能動的にノード間接続を行わない。ノード間接続を行いたい場合には設定ファイルや手動コマンド(および、ここでは解説しないが起動引数でも可)により繋げる。

コマンドによる接続はちょっとした実験には良いが bitcoind を起動する毎に実行する必要があったりして割と面倒。接続ノードが固定で決まっている場合は設定ファイルで接続設定を行うほうが後々楽だと思う。

ノード接続

設定ファイルによる接続: addnode

bitcoin.conf 内に以下のように接続先ノードの情報を書いておくと bitcoind 起動時に指定ノードへの接続が行われる。相手ノードが後から起動したとしても接続は試行される。

bitcoin.conf
addnode=102.102.102.102
addnode=103.103.103.103

設定ファイルによる限定接続: connect

bitcoin.conf 内に以下のように接続先ノードの情報を書いておくと bitcoind 起動時に指定ノードへの接続が行われる。相手ノードが後から起動したとしても接続は試行される。

bitcoin.conf
connect=102.102.102.102
connect=103.103.103.103

addnode と connect はほとんど同じようなふるまいをするが、connect は特に接続ノードを絞りたいときに用いる。
たとえば上記のような connect 設定を記述した場合、102.102.102.102 および 103.103.103.103 への接続を行うことに加えて、他ノードからのポート待ち受けを行わない

connect 設定を行った状態でポート待ち受けも行いたい場合には追加設定で listen=1 とすれば待ち受けは行われるが、わざわざそのようにするのであれば最初から connect ではなく addnode を使うほうが良い気がする。

コマンドによる接続予約: addnode(add)

以下のように接続したいノードのIPアドレス(またはホスト名)を指定してノード間接続の予約を行うこともできる。

$ bitcoin-cli addnode 102.102.102.102 add

このコマンドを実行後、しばらく待つとノード間接続が確立する。(体感では1分程度必要っぽい)

コマンドによる接続(再試行無し): addnode(onetry)

以下のように addnode(onetry) コマンドを用いるとその場ですぐにノード接続を行うことができる。接続の再試行は行われない。

$ bitcoin-cli addnode 102.102.102.102 onetry

ノード切断

ノード直接切断: disconnectnode

disconnectnode コマンドにより指定ノードの接続を切ることができる。

$ bitcoin-cli disconnectnode 102.102.102.102
  • ノード接続予約 (addnode (add)) が残っている場合には disconnectnode をした後にもまた自動で接続が試行される。完全に切断したい場合には addnode(remove) を先に実行しておく必要がある。
  • 設定ファイルによる接続情報 (connect) が設定されている場合には disconnectnode をした後にもまた自動で接続が試行される。完全に切断したい場合には設定ファイルから connect 項目を削除して bitcoind を起動し直す必要がある。

ノード接続予約解除: addnode(remove)

以下のように接続予約を削除することができる。

$ bitcoin-cli addnode 102.102.102.102 remove
  • すでに接続が確立している場合はこれをやってもノード間接続が切れるわけではないことに注意。確立済みの接続を切るためには disconnectnode を実行する必要がある。

ノード接続予約状態の確認: getaddednodeinfo

getaddednodeinfo コマンドによりノード接続予約の反映状況が確認できる。

$ bitcoin-cli getaddednodeinfo
[
  {
    "addednode": "102.102.102.102",
    "connected": false, … まだ接続は確立していない状態
    "addresses": [
    ]
  }
]

 
上記のようにまだ接続が確立していない場合は1分くらい待ってから getaddednodeinfo を実行しなおすと良い。

$ bitcoin-cli getaddednodeinfo
[
  {
    "addednode": "102.102.102.102",
    "connected": true, … 繋がった
    "addresses": [
      {
        "address": "102.102.102.102:18444", … ポートを含む詳細なネットワーク情報
        "connected": "outbound"
      }
    ]
  }
]

ピア情報の確認

接続手段に関わらず確立済みの接続情報についてはピア情報を参照するのが良い。

ピア接続数

$ bitcoin-cli getconnectioncount
2

ピア詳細

$ bitcoin-cli getpeerinfo
[
  {
    "id": 2,
    "addr": "102.102.102.102", … 相手ノード情報
    "addrlocal": "101.101.101.101:48334", … 自ノード情報
    ....
  },
  {
    "id": 3,
    "addr": "103.103.103.103", … 相手ノード情報
    "addrlocal": "101.101.101.101:38250", … 自ノード情報
    ....
  },
  ....
]

ネットワーク構成

たとえばノードが4つあるとしたら以下のように全ノードを双方向に繋げるような設定にしても構わないが、

 
単純にデータが全ノード間で共有されれば良いだけであれば以下のような接続で十分。とにかくどこかしらにネットワーク経路がありさえすればデータは伝搬される。

 
ちなみに前者のようなフルコネクト型が無駄かというとそういうわけでもなく、どのノードが落ちてもネットワークが壊れないというメリットはある。