TCP オプティマイゼーション
渋滞制御戦略
比例レート回復 (PRR) アルゴリズム
TCP ファストオープン (TFO)
TFO の仕組み
-
クライアント自体を認証するためのTCPファストオープンクッキーがない場合、クライアントはSYNパケットでファストオープンクッキーリクエストをNetScalerアプライアンス上の仮想サーバーに送信します。
-
仮想サーバにバインドされたTCPプロファイルでTFOオプションが有効になっている場合、アプライアンスは(クライアントのIPアドレスを秘密鍵で暗号化することにより)Cookie を生成し、生成されたFast Open CookieをTCPオプションフィールドに含むSYN-ACKでクライアントに応答します。
-
クライアントは、アプライアンス上の同じ仮想サーバーへの今後の TFO 接続に備えて Cookie をキャッシュします。
-
クライアントが同じ仮想サーバーへのTFO接続を確立しようとすると、キャッシュされたFast Open Cookie(TCPオプションとして)を含むSYNをHTTPデータとともに送信します。
-
NetScalerアプライアンスはCookie を検証し、認証が成功すると、サーバーはSYNパケット内のデータを受け入れ、SYN-ACK、TFOクッキー、HTTPレスポンスでイベントを確認します。
-
サーバー側では、サービスにバインドされたTCPプロファイルでTFOオプションが有効になっている場合、NetScalerアプライアンスは、接続しようとしているサービスにTCP Fast Open Cookieが存在するかどうかを判断します。
-
TCP Fast Open Cookie が存在しない場合、アプライアンスは SYN パケットで Cookie リクエストを送信します。
-
バックエンドサーバーが Cookie を送信すると、アプライアンスはその Cookie をサーバー情報キャッシュに保存します。
-
アプライアンスに特定の宛先 IP ペアの Cookie が既にある場合は、古い Cookie が新しい Cookie に置き換えられます。
-
仮想サーバーが同じ SNIP アドレスを使用して同じバックエンドサーバーに再接続しようとしたときに Cookie がサーバー情報キャッシュに存在する場合、アプライアンスは SYN パケット内のデータを Cookie と結合し、バックエンドサーバーに送信します。
-
バックエンドサーバーは、データと SYN の両方を使用してイベントを確認します。
TCP ファストオープンの設定
CLI を使用して TFO を有効または無効にする
add tcpprofile <TCP Profile Name> - tcpFastOpen ENABLED | DISABLED
set tcpprofile <TCP Profile Name> - tcpFastOpen ENABLED | DISABLED
unset tcpprofile <TCP Profile Name> - tcpFastOpen
Examples
add tcpprofile Profile1 – tcpFastOpen
Set tcpprofile Profile1 – tcpFastOpen Enabled
unset tcpprofile Profile1 – tcpFastOpen
コマンドラインインターフェイスを使用して TCP Fast Open Cookie のタイムアウト値を設定するには
set tcpparam –tcpfastOpenCookieTimeout <Timeout Value>
Example
set tcpprofile –tcpfastOpenCookieTimeout 30secs
GUI を使用して TCP ファストオープンを設定するには
GUI を使用して TCP ファストクッキーのタイムアウト値を設定するには
TCP ハイスタート
TCP ハイスタートの設定
コマンドラインインターフェイス (CLI) を使用して HyStart を設定するには
add tcpprofile <profileName> -hystart ENABLED
set tcpprofile <profileName> -hystart ENABLED
unset tcprofile <profileName> -hystart
add tcpprofile profile1 -hystart ENABLED
set tcpprofile profile1 -hystart ENABLED
unset tcprofile profile1 -hystart
-
「 TCP プロファイルの設定 」ページで、「 Cubic Hystart 」チェックボックスを選択します。
-
**OK をクリックしてから、「**完了」をクリックします。
TCP バーストレート制御
TCP バーストレート制御の仕組み
TCP バーストレート制御の設定
コマンドラインを使用して TCP バーストレート制御を設定するには
add tcpprofile <TCP Profile Name> -burstRateControl Disabled | Dynamic | Fixed
set tcpprofile <TCP Profile Name> -burstRateControl Disabled | Dynamic | Fixed
unset tcpprofile <TCP Profile Name> -burstRateControl Disabled | Dynamic | Fixed
add tcpProfile profile1 -burstRateControl Disabled
set tcpProfile profile1 -burstRateControl Dynamic
unset tcpProfile profile1 -burstRateControl Fixed
コマンドラインインターフェイスを使用して TCP バーストレート制御パラメータを設定するには
set ns tcpprofile nstcp_default_profile –burstRateControl <type of burst rate control> –tcprate <TCP rate> -rateqmax <maximum bytes in queue>
T1300-10-2> show ns tcpprofile nstcp_default_profile
Name: nstcp_default_profile
Window Scaling status: ENABLED
Window Scaling factor: 8
SACK status: ENABLED
MSS: 1460
MaxBurst setting: 30 MSS
Initial cwnd setting: 16 MSS
TCP Delayed-ACK Timer: 100 millisec
Nagle's Algorithm: DISABLED
Maximum out-of-order packets to queue: 15000
Immediate ACK on PUSH packet: ENABLED
Maximum packets per MSS: 0
Maximum packets per retransmission: 1
TCP minimum RTO in millisec: 1000
TCP Slow start increment: 1
TCP Buffer Size: 8000000 bytes
TCP Send Buffer Size: 8000000 bytes
TCP Syncookie: ENABLED
Update Last activity on KA Probes: ENABLED
TCP flavor: BIC
TCP Dynamic Receive Buffering: DISABLED
Keep-alive probes: ENABLED
Connection idle time before starting keep-alive probes: 900 seconds
Keep-alive probe interval: 75 seconds
Maximum keep-alive probes to be missed before dropping connection: 3
Establishing Client Connection: AUTOMATIC
TCP Segmentation Offload: AUTOMATIC
TCP Timestamp Option: DISABLED
RST window attenuation (spoof protection): ENABLED
Accept RST with last acknowledged sequence number: ENABLED
SYN spoof protection: ENABLED
TCP Explicit Congestion Notification: DISABLED
Multipath TCP: DISABLED
Multipath TCP drop data on pre-established subflow: DISABLED
Multipath TCP fastopen: DISABLED
Multipath TCP session timeout: 0 seconds
DSACK: ENABLED
ACK Aggregation: DISABLED
FRTO: ENABLED
TCP Max CWND : 4000000 bytes
FACK: ENABLED
TCP Optimization mode: ENDPOINT
TCP Fastopen: DISABLED
HYSTART: DISABLED
TCP dupack threshold: 3
Burst Rate Control: Dynamic
TCP Rate: 0
TCP Rate Maximum Queue: 0
GUI を使用して TCP バーストレート制御を設定するには
ラップシーケンスからの保護 (PAWS) アルゴリズム
PAWSの仕組み
-
If
SEG.TSval<Ts.recent:受信パケットは受け入れられません。PAWS は(RFC-793 で指定されているように)確認応答を送信し、パケットをドロップします。注:ハーフオープン接続を検出して回復する TCP のメカニズムを維持するには、ACK セグメントの送信が必要です。 -
パケットがウィンドウの外にある場合:PAWS は、通常の TCP 処理と同様にパケットを拒否します。
-
SEG.TSvalIf >Ts.recent: PAWSがパケットを受け入れて処理します。 -
SEG.TSval<=Last.ACK.sent(到着セグメントが満たす場合): PAWSはSEG.TSval値をTs.recentにコピーします。 -
パケットが順番に並んでいる場合:PAWS はパケットを受け入れます。
-
パケットが順番に並んでいない場合:パケットは通常のウィンドウ内順序外の TCP セグメントとして扱われます。たとえば、後で配信するためにキューに入れられている場合があります。
-
Ts.recent値が 24 日以上アイドル状態の場合:PAWS タイムスタンプチェックが失敗すると、Ts.recentの有効性が確認されます。ts.Recent の値が無効であることが判明した場合、そのセグメントは受け入れられ、PAWS ruleが新しいセグメントのTs.recentのをTSval 値で更新します。
コマンドラインインターフェイスを使用して TCP タイムスタンプを有効または無効にするには
最適化手法
ポリシーベースの TCP プロファイル選択
ポリシーベースの TCP プロファイル選択の設定
-
AppQoE を有効にする。TCP プロファイル機能を設定する前に、AppQoE 機能を有効にする必要があります。
-
AppQoE アクションを追加します。AppQoE 機能を有効にしたら、TCP プロファイルを使用して AppQoE アクションを設定します。
-
AppQoE ベースの TCP プロファイル選択の設定さまざまなクラスのトラフィックにTCPプロファイル選択を実装するには、NetScalerが接続を識別し、正しいAppQoEアクションを各ポリシーにバインドできるAppQoEポリシーを構成する必要があります。
-
AppQoE ポリシーを仮想サーバにバインドします。AppQoEポリシーを構成したら、それらを1つ以上の負荷分散、コンテンツスイッチング、またはキャッシュリダイレクト仮想サーバーにバインドする必要があります。
コマンドラインインターフェイスを使用した構成
コマンドラインインターフェイスを使用して AppQoE を有効にするには
-
enable ns feature appqoe -
show ns feature
コマンドラインインターフェイスを使用して AppQoE アクションを作成する際に TCP プロファイルをバインドするには
tcpprofiletobind
add appqoe action <name> [-priority <priority>] [-respondWith ( ACS | NS ) [<CustomFile>] [-altContentSvcName <string>] [-altContentPath <string>] [-maxConn <positive_integer>] [-delay <usecs>]] [-polqDepth <positive_integer>] [-priqDepth <positive_integer>] [-dosTrigExpression <expression>] [-dosAction ( SimpleResponse |HICResponse )] [-tcpprofiletobind <string>] show appqoe action
コマンドラインインターフェイスを使用して AppQoE ポリシーを構成するには
add appqoe policy <name> -rule <expression> -action <string>
コマンドラインインターフェイスを使用してAppQoEポリシーを負荷分散、キャッシュリダイレクト、またはコンテンツスイッチング仮想サーバーにバインドするには
bind cs vserver cs1 -policyName <appqoe_policy_name> -priority <priority> bind lb vserver <name> - policyName <appqoe_policy_name> -priority <priority> bind cr vserver <name> -policyName <appqoe_policy_name> -priority <priority>
例
add ns tcpProfile tcp1 -WS ENABLED -SACK ENABLED -WSVal 8 -nagle ENABLED -maxBurst 30 -initialCwnd 16 -oooQSize 15000 -minRTO 500 -slowStartIncr 1 -bufferSize 4194304 -flavor BIC -KA ENABLED -sendBuffsize 4194304 -rstWindowAttenuate ENABLED -spoofSynDrop ENABLED -dsack enabled -frto ENABLED -maxcwnd 4000000 -fack ENABLED -tcpmode ENDPOINT
add appqoe action appact1 -priority HIGH -tcpprofile tcp1
add appqoe policy apppol1 -rule "client.ip.src.eq(10.102.71.31)" -action appact1
bind lb vserver lb2 -policyName apppol1 -priority 1 -gotoPriorityExpression END -type REQUEST
bind cs vserver cs1 -policyName apppol1 -priority 1 -gotoPriorityExpression END -type REQUEST
GUI を使用したポリシーベースの TCP プロファイリングの設定
GUI を使用して AppQoE ポリシーを設定するには
-
詳細ウィンドウで、次のいずれかの操作を行います。
-
「 AppQoE アクションの作成 」または「 AppQoE アクションの設定 」画面で、パラメータの値を入力または選択します。ダイアログボックスの内容は、「AppQoE アクションを構成するためのパラメーター」で説明されているパラメーターに次のように対応します (アスタリスクは必須パラメーターを示します)。
-
名前—名前
-
アクションタイプ — 次の式で応答
-
優先度 — 優先度
-
ポリシーキューの深さ:POLQ の深さ
-
キューの深さ — PRIQ の深さ
-
DOS アクション—ディスコクション
-
-
[作成] をクリックします。
GUI を使用して AppQoE ポリシーをバインドするには
-
「 ポリシー 」セクションで、(+) をクリックしてAppQoEポリシーをバインドします。
-
「 ポリシー 」スライダーで、次の操作を行います。
-
ドロップダウンリストから AppQoE としてポリシータイプを選択します。
-
ドロップダウンリストからトラフィックタイプを選択します。
-
-
「 ポリシーバインディング 」セクションで、次の操作を行います。
-
「 新規 」をクリックして AppQoE ポリシーを作成します。
-
既存のポリシーをクリックして 、ドロップダウンリストから AppQoE ポリシーを選択します。
-
-
バインディングの優先順位を設定し、 ポリシーを仮想サーバにバインドをクリックします 。
-
[完了] をクリックします。
SACK ブロック生成
クライアントリネージング
PCB 上の end_point をマーキングするためのメモリチェックでは、使用可能なメモリの合計が考慮されない
SACK ブロックの欠落による不必要な再送信
接続の SNMP が過負荷のため最適化をバイパスしました
-
1.3.6.1.4.1.5951.4.1.46.131 (TCP 最適化が有効)。TCP 最適化で有効になっている接続の総数を追跡します。
-
1.3.6.1.4.1.5951.4.1.46.132 (TCP 最適化バイパス)。接続の総数を追跡するには、TCP最適化をバイパスしました。
ダイナミック受信バッファ
テール・ロス・プローブ・アルゴリズム
テールロスプローブの設定
コマンドラインを使用して TLP を有効にする
add tcpprofile <TCP Profile Name> - taillossprobe ENABLED | DISABLED
set tcpprofile <TCP Profile Name> - taillossprobe ENABLED | DISABLED
unset tcpprofile <TCP Profile Name> - taillossprobe
add tcpprofile nstcp_default_profile – taillossprobe
set tcpprofile nstcp_default_profile –taillossprobe Enabled
unset tcpprofile nstcp_default_profile –taillossprobe