ピアプロトコル
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
に設定します。詳細な手順については、プライベートサーバーの設定を参照してください。