TCPファストオープン
TCP高速オープンを使用したより効率的なデータ交換
TCP Fast Open(TFO)は、TCP セッション中に標準の 3 方向接続ハンドシェイクを介して最大 1 回の完全なラウンドトリップタイム (RTT) を節約する TCP のアップデートです。TFOはMS-MPCおよびMS-MICに対応しています。
標準的な3方向接続ハンドシェイクでは、2つのホスト間で3セットの送受信メッセージと、以下のSYN(同期)パケットとACK(確認応答)パケットの交換を行います。
ホストAはTCP SYNパケットをホストBに送信し、ホストBはそれを受信します。
ホストBはSYN-ACKパケットをホストAに送信し、ホストAはそれを受信します。
ホストAはホストBにACKパケットを送信し、ホストBはそれを受信します。
標準TCPでは、SYNパケットでデータを伝送することはできますが、スリーウェイハンドシェイクが完了するまでこのデータを配信することはできません。TFOはこの制約を取り除き、SYNパケット内のデータをアプリケーションに配信できるようにし、遅延を大幅に改善します。
TFOの重要なコンポーネントは、サーバーによって生成されるメッセージ認証コード(MAC)タグであるFast Open Cookie(cookie)です。クライアントは、1つの通常のTCP接続でCookieを要求し、その後のTCP接続でこれを使用して、ハンドシェイク中にデータを交換します。
TFOオプションは、TFO Cookieをリクエストまたは送信するために使用されます。Cookie が存在しない場合、または空の場合、クライアントはこのオプションを使用してサーバーに Cookie をリクエストします。Cookieが存在する場合、このオプションを使用して、サーバーからクライアントに、またはクライアントからサーバーにCookieを渡します。
次のリストは、クライアントが TFO Cookie を要求する方法の概要を示しています。
クライアントは、cookieフィールドが空のTFOオプションを含むSYNを送信します。
サーバーは Cookie を生成し、SYN-ACK パケットの TFO オプションを介して送信します。
クライアントは、将来のTFO接続のためにCookieをキャッシュします。
その後、2つのデバイスはTFO交換を実行します。
クライアントは、TFOオプション内のデータとCookieを含むSYNを送信します。
サーバーは 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つあります。
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がサービスセットで設定されており、TFOを使用している場合は、アドレスプーリングペア(APP)を設定する必要があります。APPを使用すると、プライベートIPアドレスをすべてのセッションでNATプールから同じパブリックIPアドレスにマッピングできます。
APPを設定しない場合、NATは、以前にサーバーに送信したものとは異なるIPアドレスを、同じNATプールからクライアントに渡すことができます。サーバーはIPアドレスを認識できず、TFOオプションをドロップし、SYN ACKで応答し、クライアントが送信したデータは確認されません。そのため、接続に成功し、パケットが失われなくても、TFOのメリットは失われます。しかし、クライアントが同じIPアドレスを持って戻ってきた場合、サーバーはそれを認識してデータを確認します。そのため、常にTFOでマッピングタイムアウト値が高いAPPを有効にしてください。
アプリを設定するには:
MS-DPCおよびMS-PICサービスインターフェイスのフラグメント化制御の設定
大量のフラグメントパケットの処理によって引き起こされるサービスPICの計算CPUサイクルの過剰な消費を防ぐために、2つの設定オプションが利用可能です。このようなフラグメント処理は、DOS攻撃で悪用される可能性があります。 fragment-limit オプションは、パケットのフラグメントの最大数を設定します。この数を超えると、パケットは破棄されます。 reassembly-timeout は、パケット内の最初のフラグメントと最新のフラグメントを受信してからの最大時間を指定します。この数を超えると、パケットはドロップされます。
MS-DPCおよびMS-PICサービスインターフェイスのフラグメント化制御を設定するには:
トレーシングサービスのPIC操作
トレース操作は、すべてのアダプティブ サービスの操作を追跡し、ログ ファイルに記録します。ログに記録されたエラーの説明には、問題をより迅速に解決するのに役立つ詳細な情報が記載されています。
デフォルトでは、イベントはトレースされません。[edit services adaptive-services-pics]または[edit services logging]階層レベルでtraceoptionsステートメントを含める場合、デフォルトのトレース動作は次のとおりです。
重要なイベントは、/var/logディレクトリにある
servicedというファイルに記録されます。serviced ファイルが 128 KB(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 adaptive-services-pics traceoptions]または[edit services logging traceoptions]階層レベルでfileステートメントを含めることで、別の名前を指定することができます。
file filename;
アダプティブサービスログファイルの数とサイズの設定
デフォルトでは、トレース ファイルのサイズが 128 キロバイト(KB)に達すると、トレース ファイルが 3 つになるまで名前が filename.0、 filename.1 などに変更されます。次に、最も古いトレース ファイル(filename.2)が上書きされます。
トレース ファイルの数とサイズの制限を設定するには、 [edit services adaptive-services-pics traceoptions] または [edit services logging traceoptions] 階層レベルで以下のステートメントを含めます。
file <filename> files number size size;
例えば、最大ファイルサイズを2MB、最大ファイル数を20に設定します。トレース操作(filename)の出力を受信するファイルが2MBに達すると、 filename の名前が filename.0に変更され、 filename という新しいファイルが作成されます。新しい filename が2MBに達すると、 filename.0 は filename.1 、 filename は filename.0に名前が変更されます。このプロセスは、トレース ファイルが 20 個になるまで繰り返されます。次に、最も古いファイル(filename.19)が最新のファイル(filename.0)で上書きされます。
ファイル数は2〜1000ファイルです。各ファイルのファイルサイズは、10KBから1ギガバイト(GB)の範囲です。
ログファイルへのアクセスの設定
デフォルトでは、ログファイルにはトレース操作を設定したユーザーのみがアクセスできます。
すべてのユーザーがすべてのログファイルを読み取れるように指定するには、[edit services adaptive-services-pics traceoptions]または[edit services logging traceoptions]階層レベルでfile world-readableステートメントを含めます。
file <filename> world-readable;
デフォルトの動作を明示的に設定するには、[edit services adaptive-services-pics traceoptions]または[edit services logging traceoptions]階層レベルでfile no-world-readableステートメントを含めます。
file <filename> no-world-readable;
ログに記録される回線の正規表現の設定
デフォルトでは、トレース操作の出力には、ログに記録されたイベントに関連するすべての行が含まれます。
[edit services adaptive-services-pics traceoptions file filename]または[edit services logging traceoptions]階層レベルでmatchステートメントを含め、一致させる正規表現(正規表現)を指定することで、出力を絞り込むことができます。
file <filename> match regular-expression;
トレース操作の設定
デフォルトでは、 traceoptions 設定が存在する場合、重要なイベントのみがログに記録されます。 [edit services adaptive-services-pics traceoptions] または [edit services logging 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