TCP 高速オープン
TCP Fast Open を使用したデータ交換の効率化
TCP Fast Open (TFO) は TCP の更新プログラムであり、TCP セッション中の標準の 3 方向接続ハンドシェイクよりも最大 1 つの完全なラウンドトリップ タイム (RTT) を節約します。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パケットで伝送できますが、このデータは3ウェイハンドシェイクが完了するまで配信できません。TFOはこの制約を取り除き、SYNパケットのデータをアプリケーションに配信できるようにするため、レイテンシーが大幅に改善されます。
TFO の重要なコンポーネントは、サーバーによって生成されるメッセージ認証コード (MAC) タグである高速オープン Cookie (Cookie) です。クライアントは、1 つの通常の TCP 接続で Cookie を要求し、それを使用して、ハンドシェイク中にデータを交換します。
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 つあります。
[Drop 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アドレスとは異なる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 adaptive-services-pics] または [edit services logging] 階層レベルに 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] 階層レベルで含めます。
これらのステートメントは、次のセクションで説明されています。
アダプティブ・サービス・ログ・ファイル名の設定
デフォルトでは、トレース出力を記録するファイルの名前は service されます。[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;
たとえば、最大ファイル サイズを 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ステートメントを含めます。
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ステートメントを含め、一致させる正規表現(regex)を指定することで、出力を絞り込むことができます。
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