Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

TCP 高速オープン

TCP Fast Open を使用したデータ交換の効率化

TCP Fast Open (TFO) は TCP の更新プログラムであり、TCP セッション中の標準の 3 方向接続ハンドシェイクよりも最大 1 つの完全なラウンドトリップ タイム (RTT) を節約します。TFO は MS-MPC および MS-MIC でサポートされています。

標準の 3 方向接続ハンドシェイクでは、2 つのホスト間の 3 組の送受信メッセージと、以下の SYN(同期)パケットと ACK(確認応答)パケットの交換が含まれます。

  1. ホストAがTCP SYNパケットをホストBに送信し、ホストBが受信します。

  2. ホストBがSYN-ACKパケットをホストAに送信し、ホストAが受信します。

  3. ホストAはホストBにACKパケットを送信し、ホストBはそれを受信します。

標準TCPでは、データはSYNパケットで伝送できますが、このデータは3ウェイハンドシェイクが完了するまで配信できません。TFOはこの制約を取り除き、SYNパケットのデータをアプリケーションに配信できるようにするため、レイテンシーが大幅に改善されます。

TFO の重要なコンポーネントは、サーバーによって生成されるメッセージ認証コード (MAC) タグである高速オープン Cookie (Cookie) です。クライアントは、1 つの通常の TCP 接続で Cookie を要求し、それを使用して、ハンドシェイク中にデータを交換します。

TFO オプションは、TFO Cookie を要求または送信するために使用されます。Cookie が存在しないか空の場合、クライアントはこのオプションを使用してサーバーに Cookie を要求します。Cookie が存在する場合、オプションは、サーバーからクライアントへ、またはクライアントからサーバーへ Cookie を渡すために使用されます。

次の一覧は、クライアントが TFO Cookie を要求する方法の概要を示しています。

  1. クライアントは、Cookie フィールドが空の TFO オプションを含む SYN を送信します。

  2. サーバーは Cookie を生成し、SYN-ACK パケットの TFO オプションを介して送信します。

  3. クライアントは、将来の TFO 接続のために Cookie をキャッシュします。

その後、2つのデバイスはTFO交換を実行します。

  1. クライアントは、TFO オプションのデータと Cookie を含む SYN を送信します。

  2. サーバーは Cookie を検証します。

    • Cookie が有効な場合、サーバーは SYN とデータの両方を確認する SYN-ACK を送信します。

      その後、サーバーはデータをアプリケーションに配信します。

    • それ以外の場合、サーバーはデータを削除し、SYN シーケンス番号のみを確認する SYN-ACK を送信します。

残りの接続は、通常のTCP接続と同様に進行します。クライアントは、Cookie を取得すると (サーバーによって Cookie の有効期限が切れるまで) 多くの TFO 操作を繰り返すことができます。したがって、TFO は、同じクライアントが同じサーバーに複数回再接続し、データを交換するアプリケーションに役立ちます。

TFO の設定

このトピックでは、TCP Fast Open (TFO) の 3 つのモードについて説明し、例を示します。TFOでNATを使用する場合についても説明します。

TFOの3つのモード

TFO を使用するための設定は必要ありません。TFO はデフォルトで有効になっています。デフォルト モードでは、すべてのTFOパケットがサービスPICによって転送されます。デフォルトの他に、CLI で設定する TFO のモードが 2 つあります。

  • [Drop TFO]:このモードが設定されている場合、TFO パケットは転送されません。

  • TFOを無効にする—このモードが設定されている場合、TFO、データ、またはその両方を伝送するSYNまたはSYN ACKパケットは、転送される前にTFOとデータを削除します。

TFOオプションは、サービスセットごとに有効です。サービス セットは、ネクストホップ サービス セットまたはインターフェイススタイルのサービス セットのいずれかです。以下は、インターフェイススタイルのサービス セット構成の例です。

この場合、TFO はデフォルトで有効になっています(TFO 設定なし)。 show services service-sets statistics tcp コマンドの出力は次のとおりです。

TFO 有効パケットをドロップすると、以下の設定と出力が得られます。

TFO オプションを削除すると、それに応じて設定と出力が変更されます。

NAT と TFO の使用

サービス セットで NAT が設定されていて、TFO を使用している場合は、アドレス プーリング ペア(APP)を設定する必要があります。APPを使用すると、すべてのセッションでプライベートIPアドレスをNAT プールから同じパブリックIPアドレスにマッピングできます。

APPを設定しない場合、NATは、以前にサーバーに送信したIPアドレスとは異なるIPアドレスを、同じNAT プールからクライアントに割り当てることができます。サーバーは IP アドレスを認識せず、TFO オプションをドロップし、SYN ACK で応答し、クライアントが送信したデータは確認されません。そのため、接続が成功し、パケットが失われなくても、TFO の利点は失われます。しかし、クライアントが同じIPアドレスで戻ってきた場合、サーバーはそれを認識し、データを確認します。したがって、TFOでは常に高いマッピングタイムアウト値でAPPを有効にします。

APPを設定するには:

  1. APPを設定します。
  2. 高いマッピング タイムアウト値を設定します。

MS-DPCおよびMS-PICサービスインターフェイスのフラグメント化制御の設定

大量のフラグメントパケットの処理によって引き起こされるサービスPIC上の計算CPUサイクルの過剰な消費を防ぐために、2つの設定オプションが利用可能です。このようなフラグメント処理は、DOS攻撃で悪用される可能性があります。 fragment-limit オプションは、パケットのフラグメントの最大数を設定します。この数を超えると、パケットは破棄されます。 reassembly-timeout は、パケットの最初と最後のフラグメントの受信からの最大時間を指定します。この数を超えると、パケットは破棄されます。

MS-DPCおよびMS-PICサービスインターフェイスのフラグメンテーション制御を設定するには、次の手順に従います。

  1. 設定モードで、 [edit interfaces interface-name services-options 階層レベルに移動します。
  2. フラグメント制限を設定します。
  3. 再アセンブリのタイムアウトを設定します。

トレース サービス PIC 動作

トレース操作は、すべてのアダプティブ サービス操作を追跡し、ログ ファイルに記録します。ログに記録されたエラーの説明には、問題の迅速な解決に役立つ詳細情報が記載されています。

デフォルトでは、イベントはトレースされません。[edit services adaptive-services-pics] または [edit services logging] 階層レベルに traceoptions ステートメントを含める場合、デフォルトのトレース動作は次のようになります。

  • 重要なイベントは、/var/log ディレクトリにある serviced というファイルに記録されます。

  • serviced ファイルが 128 キロバイト (KB) に達すると、トレース ファイルが 3 つになるまで、serviced.0serviced.2 というように名前が変更されます。次に、最も古いトレース ファイル(serviced.2)が上書きされます。(ログ ファイルの作成方法の詳細については、システム ログ エクスプローラを参照してください)。

  • ログ・ファイルにアクセスできるのは、トレース操作を設定したユーザーのみです。

トレース ファイルが配置されているディレクトリ(/var/log)は変更できません。ただし、以下のステートメントを含めることで、他のトレース ファイルの設定をカスタマイズすることができます。

これらのステートメントは、 [edit services adaptive-services-pics traceoptions] または [edit services logging traceoptions] 階層レベルで含めます。

これらのステートメントは、次のセクションで説明されています。

アダプティブ・サービス・ログ・ファイル名の設定

デフォルトでは、トレース出力を記録するファイルの名前は service されます[edit services adaptive-services-pics traceoptions] または [edit services logging traceoptions] 階層レベルで file ステートメントを含めることで、別の名前を指定することができます。

アダプティブ・サービス・ログ・ファイルの数とサイズの設定

既定では、トレース ファイルのサイズが 128 キロバイト (KB) に達すると、トレース ファイルが 3 つになるまで、 filename.0filename.1 というように名前が変更されます。次に、最も古いトレースファイル(filename.2)が上書きされます。

トレース ファイルの数とサイズに制限を設定するには、 [edit services adaptive-services-pics traceoptions] または [edit services logging traceoptions] 階層レベルで次のステートメントを含めます。

たとえば、最大ファイル サイズを 2 MB に設定し、最大ファイル数を 20 に設定します。トレース操作 (filename) の出力を受信するファイルが 2 MB に達すると、 filename の名前が filename.0 に変更され、 filename という新しいファイルが作成されます。新しい filename が 2 MB に達すると、 filename.0 の名前は filename.1 に、 filename の名前は filename.0 に変更されます。このプロセスは、トレース ファイルが 20 個になるまで繰り返されます。次に、最も古いファイル(filename.19)が最新のファイル(filename.0)で上書きされます。

ファイルの数は 2 から 1000 ファイルまでです。各ファイルのファイルサイズは、10 KB から 1 ギガバイト (GB) までです。

ログ ファイルへのアクセスの設定

デフォルトでは、ログファイルにアクセスできるのは、トレース操作を設定したユーザーのみです。

すべてのユーザーがすべてのログファイルを読み取ることができるように指定するには、[edit services adaptive-services-pics traceoptions]または[edit services logging traceoptions]階層レベルでfile world-readableステートメントを含めます。

デフォルトの動作を明示的に設定するには、[edit services adaptive-services-pics traceoptions]または[edit services logging traceoptions]階層レベルでfile no-world-readableステートメントを含めます。

ログに記録される行の正規表現の設定

デフォルトでは、トレース操作の出力には、ログに記録されたイベントに関連するすべての行が含まれます。

[edit services adaptive-services-pics traceoptions file filename]または[edit services logging traceoptions]階層レベルでmatchステートメントを含め、一致させる正規表現(regex)を指定することで、出力を絞り込むことができます。

トレース操作の設定

デフォルトでは、 traceoptions 設定が存在する場合は、重要なイベントのみがログに記録されます。トレース操作をログに記録するように設定するには、 [edit services adaptive-services-pics traceoptions] または [edit services logging traceoptions] 階層レベルで以下のステートメントを記述します。

表 1 に、アダプティブ・サービス・トレース・フラグの意味を示します。

表 1: アダプティブ サービス トレース フラグ

形容

デフォルト設定

all

すべての操作をトレースします。

オフ

command-queued

コマンドのエンキュー・イベントをトレースします。

オフ

config

[edit services] 階層レベルでの設定のログ読み取り。

オフ

handshake

ハンドシェイク イベントをトレースします。

オフ

init

初期化イベントをトレースします。

オフ

interfaces

インターフェイス イベントのトレースをします。

オフ

mib

GGSN SNMP MIB イベントをトレースします。

オフ

removed-client

クライアントのクリーンアップ イベントをトレースします。

オフ

show

CLIコマンドのサービスをトレースします。

オフ

ログの末尾を表示するには、 show log serviced | last 運用モードコマンドを発行します。