ピアプロトコル
XRP Ledgerのサーバは、XRP Ledgerピアプロトコル(RTXP)を使用して相互に通信します。
ピアプロトコルは、XRP Ledgerのサーバ間のメイン通信モードです。XRP Ledgerの動作、進捗状況、接続に関するすべての情報がピアプロトコルを通じて伝達されます。ピアツーピア通信の例を以下に示します。
- ピアツーピアネットワーク内の他のサーバへの接続のリクエスト、または接続スロットの使用可能性についてのアドバタイズ。
- ネットワークのその他の部分との候補トランザクションの共有。
- 履歴レジャーへのレジャーデータのリクエスト、またはレジャーデータの提供。
- コンセンサスのための一連のトランザクションの提示、またはコンセンサストランザクションセットの適用に関する算出結果の共有。
ピアツーピア接続を確立するには、サーバどうしをHTTPSで接続し、一方のサーバはRTXPへの切り替えのためにHTTPアップグレードをリクエストします。(詳細は、rippled
リポジトリのOverlay Networkをご覧ください。)
ピアの検出
XRP Ledgerでは、「ゴシップ」プロトコルを使用して、XRP Ledgerネットワーク内でサーバが互いを識別できるようにします。サーバは、起動するたびに、以前に接続したその他のあらゆるピアに再接続します。フォールバックとして、ハードコーディングされた公開ハブを使用します。サーバがピアに正常に接続されると、ピアを探している他のXRP Ledgerサーバの接続情報(通常はIPアドレスとポート)をそのピアにリクエストします。その後、サーバはそれらのサーバに接続し、ピア接続するXRP Ledgerサーバの接続情報をさらにリクエストできます。このプロセスにより、サーバは十分なピア接続を確立し、単一のピアへの接続が失われた場合でも、ネットワークの残りの部分にその後も接続されます。
通常、サーバが公開ハブに接続する必要があるのは1回のみです。他のピアを見つけるために、短時間のみ接続します。そうすることで、ネットワーク接続の安定性、ハブのビジー状態、およびサーバが検出する他の高品質ピアの数に応じて、ハブにサーバを引き続き接続するかどうかが異なります。サーバでは、これらの他のピアのアドレスを保存するため、ネットワークの停止後または再起動後、それらのピアへの直接再接続を試行できます。
peersメソッドは、サーバが現在接続しているピアのリストを示します。
価値の高いサーバ(重要なバリデータなど)によっては、ピア検出プロセスを通じて、サーバを信頼性の低いピアに接続しないようにする場合があります。この場合、プライベートピアのみを使用するようにサーバを構成できます。
ピアプロトコルポート
XRP Ledgerに参加するため、rippled
サーバはピアプロトコルを使用して任意のピアに接続します。(すべてのピアは、現行サーバでクラスター化されている場合を除き、信頼できないものとして扱われます。)
サーバがピアポートで接続を送信 かつ 受信できることが理想的です。rippled
サーバに、ファイアウォール経由でピアプロトコルに使用するポートを転送する必要があります。
デフォルトのrippled
構成ファイルは、すべてのネットワークインターフェイスにおいて、ポート51235で着信ピアプロトコル接続をリッスンします。使用するポートを変更するには、rippled.cfg
ファイル内の該当するスタンザを編集します。
例:
[port_peer] port = 51235 ip = 0.0.0.0 protocol = peer
ピアプロトコルポートは特殊なPeer Crawler APIメソッドも処理します。
ノードキーペア
サーバを初めて起動すると、ピアプロトコル通信でサーバ自体を識別するための ノードキーペア が生成されます。サーバはこのキーを使用して、ピアプロトコル通信のすべてに署名します。これにより、ピアツーピアネットワーク内の別のサーバからのメッセージの整合性を、信頼できる方法で識別、検証できます。これは、そのサーバのメッセージが信頼できないピアにより中継される場合も同様です。
ノードキーペアはデータベースに保存され、サーバの再起動時に再利用されます。サーバのデータベースを削除すると、新しいノードキーペアが作成され、異なるアイデンティティでオンラインになります。データベースが削除されても同じキーペアを再利用するには、[node_seed]
スタンザを使用してサーバを設定できます。[node_seed]
スタンザでの使用に適した値を生成するには、validation_createメソッドを使用します。
また、ノードキーペアは、ピアスロットのクラスタリングまたは確保のために他のサーバも識別します。サーバクラスターを使用している場合、一意の[node_seed]
設定を使用してクラスター内の各サーバを構成する必要があります。クラスターの設定についての詳細は、rippled
サーバのクラスター化をご覧ください。
固定ピアとピアリザベーション
通常、rippled
サーバでは多数のピアを維持するよう試みるため、信頼性の低いピアの最大数まで自動接続されます。特定のピアサーバへの接続を維持するようにrippled
サーバを構成するには、いくつかの方法があります。
- 固定ピアを使用して、IPアドレスに基づき特定の他のピアへの接続を維持します。これは、ピアのIPアドレスが固定されている場合にのみ機能します。固定ピアを構成するには、構成スタンザ
[ips_fixed]
を使用します。これは、クラスタリングまたはプライベートピアの重要な部分です。固定ピアは構成ファイルで定義されているため、変更を適用するにはサーバを再起動する必要があります。サーバが同じユーザまたは組織によって実行されている場合、固定ピアは、サーバの接続状態を維持するのに最も有益です。 - ピアリザベーションを使用して、特定のピアに優先順位を付けます。サーバに特定のピアのピアリザベーションがある場合、既に最大数のピアに接続されていても、サーバは常にそのピアからの接続リクエストを受け入れます。(これにより、サーバでのピアの最大接続数を超える可能性があります。)ノードキーペアによって確保済みピアを識別するため、可変IPアドレスを持つピアに対してもこれを行うことができます。ピアリザベーションは、管理コマンドを使用して構成され、サーバデータベースに保存されるため、サーバがオンラインの場合に調整することができ、再起動後も保存されます。ピアリザベーションは、さまざまなユーザや組織が運営するサーバを接続するのに最も有益です。
次の場合、rippled
サーバは、信頼性の低いピアには接続されません。
- プライベートピアとして構成されている場合、サーバは固定ピアに のみ 接続されます。
- スタンドアロンモードで実行されている場合、サーバは どの ピアにも接続されません。
プライベートピア
rippled
サーバが「プライベート」サーバとして動作するように設定し、そのIPアドレスを非公開にすることができます。これは、信頼できるバリデータなどの重要なrippled
サーバへのサービス拒否攻撃や侵入の試みに対する予防対策として有用です。ピアツーピアネットワークに参加するには、プライベートサーバは1つ以上の非プライベートサーバに接続するように設定されている必要があります。この非プライベートサーバにより、メッセージがネットワークのその他の部分へ中継されます。
注意: 固定ピアを使用せずにプライベートサーバを構成すると、サーバはネットワークに接続できないため、ネットワークの状態を認識したり、トランザクションをブロードキャストしたり、コンセンサスプロセスに参加したりすることができません。
サーバをプライベートサーバとして設定すると次のさまざまな影響が生じます。
サーバがピアツーピアネットワーク内の他のサーバに接続するように明示的に設定されていない場合、サーバは他のサーバに発信接続しません。
サーバは、他のサーバからの接続を受け入れるように明示的に設定されていない場合、他のサーバからの着信接続を受け入れません。
サーバはそのダイレクトピアに対し、信頼できない通信(ピアクローラーAPIレスポンスを含む)の中ではサーバのIPアドレスを公開しないように指示します。これは、peers adminメソッドなどの信頼できる通信には影響しません。
プライベートサーバの設定に関係なく、バリデータは常にそのピアに対し、バリデータのIPアドレスを非公開にするように指示します。これにより、バリデータがサービス拒否攻撃を受け過剰な負荷がかかることから保護されます。
注意: サーバのソースコードを改ざんして、サーバがこのリクエストを無視し、直近のピアのIPアドレスを共有する可能性があります。プライベートサーバを、このように改ざんされていないことが確認されているサーバにのみ接続するように設定してください。
ピア接続設定のメリットとデメリット
XRP Ledgerで使用できるように、rippled
サーバをピアツーピアのオープンネットワークの残りの部分に接続する必要があります。大まかに言えば、rippled
サーバがネットワークに接続する方法には、次の3種類の構成があります。
- 検出されたピアを使用します。サーバは、検出された信頼の低いサーバに接続し、それらのサーバが適切に動作する限り接続を維持します。(たとえば、リクエストするデータはそれほど多くなく、ネットワーク接続は安定しているため、同じネットワークをフォローしているように見えます。)デフォルトでは、この構成に設定されています。
- 同じユーザまたは組織が実行するプロキシを使用したプライベートサーバとして使用します。プロキシは、プライベートサーバとの固定ピア接続を維持するストック用の
rippled
サーバです(検出されたピアにも接続されます)。 - 公開ハブを使用するプライベートサーバとして使用します。プロキシを使用する構成と似ていますが、サードパーティーによって異なります。
各構成のメリットとデメリットは次のとおりです。
設定 | メリット | デメリット |
---|---|---|
検出されたピア |
|
|
プロキシを使用したプライベートサーバ |
| |
公開ハブを使用するプライベートサーバ |
|
|
プライベートサーバの設定
サーバをプライベートサーバとして設定するには、設定ファイルの[peer_private]
を1
に設定します。詳細な手順については、プライベートサーバの設定をご覧ください。