TCP キープアライブ

一部の中間ノード (例えば、ロード・バランサーやファイアウォール) では、TCP 接続が存続していることを確認するものとして、データ・トラフィックが使用されます。長時間 TCP パスをデータが通過しないと、中間ノードは接続をリセットする場合があります。TCP キープアライブ処理では、TCP 接続を使用してパケットが定期的に送信され、接続がリセットされないようにします。

SMC 通信を使用するためのランデブー・ネゴシエーションは、TCP 接続経由で実行されます。SMC プロトコルへの切り替えの決定後も TCP 接続はアクティブなままですが、必要に応じて、終了メッセージのみが TCP 接続を通過します。アプリケーション・ソケット・データは RMDA プロトコルまたは ISM プロトコルを使用して帯域外にフローします。このため、次の 2 つのパスを使用して、SMC を使用している TCP 接続を確認できます。

  • 初期 3 ウェイ・ハンドシェーク・パケット、FIN パケット、RST パケットなどの非データ・パケットに使用する TCP パス。
  • データに使用する SMC パス。

TCP 接続ではデータ・パケットの交換に TCP パスは使用されないため、中間ノードでは接続が長時間アイドル状態になっていると見なされる場合があります。SMC 経由の TCP 接続の場合は、キープアライブ処理で、TCP パスと SMC パスの両方が作動可能状態のままであることを確認する必要があります。

従来の TCP 接続の場合、キープアライブ・プローブを送信する時間間隔は、次の順序で決定されます。

  1. TCP_KEEPALIVE setsockopt() オプションの値 (アプリケーションによって指定されている場合)
  2. TCPCONFIG ステートメントの INTERVAL パラメーターの値
SMC リンクを通過する TCP 接続の場合、SMC パスでキープアライブ・プローブを送信する時間間隔は、SMC パスが実際のデータが通過するパスであるため、同じ方式を使用して決定されます。ただし、このような接続の場合、この同じ方式を TCP パスで使用すると、過度のキープアライブ・プローブ・トラフィックが生成される可能性があるため、TCP パスのキープアライブの時間間隔の決定には別の方式が使用されます。
  • SMC-R 通信を使用する TCP 接続の場合、この方式では、GLOBALCONFIG SMCR TCPKEEPMININTERVAL 値、TCPCONFIG INTERVAL 値、および TCP_KEEPALIVE setsockopt() 値のうち、大きい方の値が使用されます。
  • SMC-D 通信を使用する TCP 接続の場合、この方式では、GLOBALCONFIG SMCD TCPKEEPMININTERVAL 値、TCPCONFIG INTERVAL 値、および TCP_KEEPALIVE setsockopt() 値のうち、大きい方の値が使用されます。

以下に例を示します。

  • SO_KEEPALIVE はアプリケーションによって指定され、TCPCONFIG INTERVAL は 120 分で、GLOBALCONFIG SMCR TCPKEEPMININTERVAL 値は 5 分です。

    この場合、SMC-R パスと TCP パスの両方の時間間隔が 120 分です。

  • SO_KEEPALIVE はアプリケーションによって指定され、TCPCONFIG INTERVAL は 10 分で、TCP_KEEPALIVE setsockopt() はアプリケーションによって値 5 分が指定され、GLOBALCONFIG SMCD TCPKEEPMININTERVAL 値は 15 分です。

    この場合、SMC-D パスの時間間隔は 5 分ですが、TCP パスの時間間隔は 15 分です。