TCPファストオープン
TCPファストオープンを使用したより効率的なデータ交換
TCPファストオープン(TFO)はTCPのアップデートで、TCPセッション中の標準の3ウェイ接続ハンドシェイクを介して最大1つの完全なラウンドトリップタイム(RTT)を節約します。TFO のサポートは、MS-MPC および MS-MIC に対して行われます。
標準の 3 ウェイ接続ハンドシェイクでは、2 つのホスト間で 3 セットの送受信メッセージと、次の SYN (同期) パケットと ACK (確認応答) パケットが交換されます。
ホスト A がホスト B に TCP SYN パケットを送信し、ホスト B がそれを受信します。
ホスト B がホスト A に SYN-ACK パケットを送信し、ホスト A がそれを受信します。
ホスト A がホスト B に ACK パケットを送信し、ホスト B がそれを受信します。
標準TCPでは、SYNパケットでデータを伝送できますが、このデータは3ウェイハンドシェイクが完了するまで配信できません。TFOはこの制約を取り除き、SYNパケット内のデータをアプリケーションに配信できるようにするため、レイテンシが大幅に改善されます。
TFOの主要なコンポーネントは、サーバーによって生成されるメッセージ認証コード(MAC)タグであるファストオープンクッキー(クッキー)です。クライアントは、1 つの通常の TCP 接続で Cookie を要求し、ハンドシェイク中にデータを交換するための今後の TCP 接続にそれを使用します。
TFOオプションは、TFOクッキーを要求または送信するために使用されます。Cookie が存在しない場合、または空の場合、クライアントはこのオプションを使用してサーバーから Cookie を要求します。Cookie が存在する場合、このオプションを使用して、サーバーからクライアントに、またはクライアントからサーバーに Cookie を渡します。
次の一覧は、クライアントが TFO クッキーを要求する方法の概要を示しています。
クライアントは、クッキーフィールドが空であるTFOオプションを使用してSYNを送信します。
サーバーはクッキーを生成し、SYN-ACKパケットのTFOオプションを介して送信します。
クライアントは、将来の TFO 接続のためにクッキーをキャッシュします。
その後、2つのデバイスはTFO交換を実行します。
クライアントは、TFO オプションでデータとクッキーを含む SYN を送信します。
サーバーはクッキーを検証します。
クッキーが有効な場合、サーバーは SYN とデータの両方を確認する SYN-ACK を送信します。
その後、サーバーはデータをアプリケーションに配信します。
それ以外の場合、サーバーはデータをドロップし、SYN シーケンス番号のみを確認する SYN-ACK を送信します。
接続の残りの部分は、通常のTCP接続と同様に進行します。クライアントは、クッキーを取得すると(クッキーがサーバーによって期限切れになるまで)、多くのTFO操作を繰り返すことができます。したがって、TFO は、同じクライアントが同じサーバーに複数回再接続してデータを交換するアプリケーションに役立ちます。
関連項目
TFO の設定
このトピックでは、TCP ファスト オープン (TFO) の 3 つのモードについて説明し、例を示します。TFO と共に NAT を使用する場合についても説明します。
TFOの3つのモード
TSO を使用するための設定は必要ありません。TFO はデフォルトで有効になっています。デフォルトモードでは、すべてのTFOパケットがサービスPICによって転送されます。デフォルトの他に、CLIで設定するTFOのモードが2つあります。
ドロップ TFO—このモードが設定されている場合、TFO パケットは転送されません。
TFOを無効にする—このモードが設定されている場合、TFO、データ、またはその両方を伝送する SYN または SYN ACK パケットは、転送される前に TFO とデータが削除されます。
TFO オプションは、サービス セットごとに有効になります。サービス セットには、ネクストホップ サービス セットまたはインターフェイス スタイルのサービス セットがあります。次に、インターフェイススタイルのサービスセットの設定例を示します。
[edit] services { service-set ss2 { stateful-firewall-rules sfw_rule; interface-service { service-interface ms-2/3/0; } } stateful-firewall { rule sfw_rule { match-direction input-output; term 0 { from { source-address { any-ipv4; } destination-address { any-ipv4; } then { accept; } } } } } }
この場合、TFO は既定で有効になっています (TFO 構成なし)。コマンドの出力 show services service-sets statistics tcp
は次のとおりです。
user@host> show services service-sets statistics tcp Interface: ms-2/3/0 Service set: ss2 TCP open/close statistics: TCP first packet non-syn: 0 TCP first packet reset: 0 TCP first packet FIN: 0 TCP non syn discard: 0 TCP extension alloc fail: 0 TFO SYN with cookie request: 1 TFO SYN with cookie: 0 TFO SYN ACK with cookie: 0 TFO packets forwarded: 0 TFO packets dropped: 1 TFO packets stripped: 0
TFO 対応パケットをドロップすると、以下の設定と出力が得られます。
[edit] services { service-set ss2 { service-set-options { tcp-fast-open drop; } stateful-firewall-rules sfw_rule; interface-service { service-interface ms-2/3/0; } } }
user@host> show services service-sets statistics tcp Interface: ms-2/3/0 Service set: ss2 TCP open/close statistics: TCP first packet non-syn: 0 TCP first packet reset: 0 TCP first packet FIN: 0 TCP non syn discard: 0 TCP extension alloc fail: 0 TFO SYN with cookie request: 1 TFO SYN with cookie: 0 TFO SYN ACK with cookie: 0 TFO packets forwarded: 0 TFO packets dropped: 1 TFO packets stripped: 0
TFO オプションを削除すると、それに応じて構成と出力が変更されます。
[edit] services { service-set ss2 { service-set-options { tcp-fast-open disabled; } stateful-firewall-rules sfw_rule; interface-service { service-interface ms-2/3/0; } } }
user@host> show services service-sets statistics tcp Interface: ms-2/3/0 Service set: ss2 TCP open/close statistics: TCP first packet non-syn: 0 TCP first packet reset: 0 TCP first packet FIN: 0 TCP non syn discard: 0 TCP extension alloc fail: 0 TFO SYN with cookie request: 1 TFO SYN with cookie: 0 TFO SYN ACK with cookie: 0 TFO packets forwarded: 0 TFO packets dropped: 0 TFO packets stripped: 1
NAT と TFO の使用
サービス セットで NAT が設定されていて、TSO を使用している場合は、アドレス プーリング ペア(APP)を設定する必要があります。APPを使用すると、プライベートIPアドレスをすべてのセッションのNATプールから同じパブリックIPアドレスにマッピングできます。
APPを設定しない場合、NATは、以前にサーバーに送信したものとは異なるIPアドレスを同じNATプールからクライアントに提供できます。サーバーはIPアドレスを認識せず、TFOオプションをドロップし、SYN ACKで応答し、クライアントが送信したデータは確認応答されません。したがって、接続が成功し、パケットが失われなくても、TFO の利点は失われます。しかし、クライアントが同じIPアドレスで戻ってきた場合、サーバーはそれを認識し、データを確認します。したがって、TFO でマッピング タイムアウト値が高い APP を常に有効にします。
APPを設定するには:
MS-DPC および MS-PIC サービス インターフェイスのフラグメント化制御の設定
大量のフラグメント化されたパケットの取り扱いによって、サービスPICでの計算CPUサイクルが過剰に消費されるのを防ぐために、2つの設定オプションが用意されています。このようなフラグメント処理は、DOS攻撃で悪用される可能性があります。オプションは fragment-limit
、パケットのフラグメントの最大数を設定します。この数を超えると、パケットはドロップされます。は reassembly-timeout
、パケット内の最初と最新のフラグメントを受信してからの最大時間を指定します。この数を超えると、パケットはドロップされます。
MS-DPC および MS-PIC サービス インターフェイスのフラグメント化制御を設定するには、次の手順に従います。
トレーシングサービス PIC 操作
トレーシング操作は、すべてのアダプティブサービス操作を追跡し、ログファイルに記録します。ログに記録されたエラーの説明は、問題を迅速に解決するのに役立つ詳細情報を提供します。
既定では、イベントはトレースされません。または [edit services logging]
階層レベルで ステートメント[edit services adaptive-services-pics]
を含めるtraceoptions
場合、デフォルトのトレース動作は次のようになります。
重要なイベントは /var/log ディレクトリにある という
serviced
ファイルに記録されます。serviced ファイルが 128 KB に達すると、3 つのトレース ファイルが存在するまで、serviced.0、serviced.2 というように名前が変更されます。その後、最も古いトレース ファイル (serviced.2) が上書きされます。(ログ・ファイルの作成方法の詳細については、システム・ログ・エクスプローラーを参照してください。
ログ ファイルにアクセスできるのは、トレース操作を設定したユーザーのみです。
トレースファイルが配置されているディレクトリ(/var/log)を変更することはできません。ただし、次のステートメントを含めることで、他のトレース ファイルの設定をカスタマイズできます。
file filename <files number> <match regular-expression> <size size> <world-readable | no-world-readable>; flag { all; command-queued; config; handshake; init; interfaces; mib; removed-client; show; }
これらのステートメントは、 [edit services adaptive-services-pics traceoptions]
または [edit services logging traceoptions]
階層レベルで記述します。
これらのステートメントは、次のセクションで説明されています。
アダプティブサービスログファイル名の設定
既定では、トレース出力を記録するファイルの名前が処理されます。または [edit services logging traceoptions]
階層レベルで ステートメントを含めるfile
ことで、[edit services adaptive-services-pics traceoptions]
別の名前を指定できます。
file filename;
Adaptive Servicesログファイルの数とサイズの設定
既定では、トレース ファイルのサイズが 128 キロバイト (KB) に達すると、トレース ファイルが 3 つになるまで .0、.1 というように名前filenameが変更されます。filenameその後、最も古いトレース ファイル (filename.2) が上書きされます。
トレース ファイルの数とサイズに制限を設けるには、または [edit services logging traceoptions]
階層レベルで次のステートメントを含めます[edit services adaptive-services-pics traceoptions]
。
file <filename> files number size size;
たとえば、最大ファイル サイズを 2 MB、最大ファイル数を 20 に設定します。トレース操作 (filename) の出力を受信するファイルが 2 MB に達すると、.0 という名前filenameに変更され、 filename というfilename新しいファイルが作成されます。新しい filename MB が 2 MB に達すると、.0 は .1 に名前が変更され、filenamefilename.0 にfilename変更されますfilename。このプロセスは、トレース ファイルが 20 個になるまで繰り返されます。次に、最も古いファイル (.19) が最新のファイル (filenamefilename.0) で上書きされます。
ファイル数は 2 から 1000 ファイルまでです。各ファイルのファイル サイズは、10 KB から 1 ギガバイト (GB) までです。
ログファイルへのアクセスの設定
既定では、ログ ファイルにアクセスできるのは、トレース操作を構成したユーザーのみです。
すべてのユーザーがすべてのログ ファイルを読み取ることができるように指定するには、 または 階層レベルで ステートメントを含めfile world-readable
ます[edit services adaptive-services-pics traceoptions]
[edit services logging traceoptions]
。
file <filename> world-readable;
デフォルトの動作を明示的に設定するには、 または [edit services logging traceoptions]
階層レベルで ステートメントを含めfile no-world-readable
ます[edit services adaptive-services-pics traceoptions]
。
file <filename> no-world-readable;
ログに記録する行の正規表現の設定
デフォルトでは、トレース操作の出力には、ログに記録されたイベントに関連するすべての行が含まれます。
または [edit services logging traceoptions]
階層レベルで ステートメント[edit services adaptive-services-pics traceoptions file filename]
を含めmatch
、一致させる正規表現(regex)を指定することで、出力を絞り込むことができます。
file <filename> match regular-expression;
トレース操作の設定
デフォルトでは、traceoptions
構成が存在する場合、重要なイベントのみがログに記録されます。または [edit services logging traceoptions]
階層レベルで次のステートメント[edit services adaptive-services-pics traceoptions]
を含めることで、ログに記録されるトレース操作を構成できます。
flag { all; configuration; routing-protocol; routing-socket; snmp; }
表 1 に、適応サービス トレース フラグの意味を示します。
フラグ |
説明 |
デフォルト設定 |
---|---|---|
|
すべての操作をトレースします。 |
オフ |
|
トレース コマンドのエンキュー イベント。 |
オフ |
|
階層レベルでの設定 |
オフ |
|
ハンドシェイク イベントをトレースします。 |
オフ |
|
初期化イベントをトレースします。 |
オフ |
|
インターフェイス イベントのトレースをします。 |
オフ |
|
GGSN SNMP MIB イベントをトレースします。 |
オフ |
|
クライアントのクリーンアップ イベントをトレースします。 |
オフ |
|
CLI コマンド サービスのトレースを実行します。 |
オフ |
ログの終わりを表示するには、 運用モード・コマンドを発行します show log serviced | last
。
[edit] user@host# run show log serviced | last