TCP 最適化設定
TCP最適化を構成する前に、NetScaler ADCアプライアンスに次の基本構成設定を適用します。
初期設定:
enable ns feature LB IPv6PT
enable ns mode FR L3 USIP MBF Edge USNIP PMTUD
disable ns feature SP
disable ns mode TCPB
set lb parameter -preferDirectRoute NO
set lb parameter -vServerSpecificMac ENABLED
set l4param -l2ConnMethod Vlan
set rsskeytype -rsstype SYMMETRIC
set ns param -useproxyport DISABLED
<!--NeedCopy-->
注
rsskeytype システムパラメータを変更した場合は、NetScaler アプライアンスを再起動します。
TCP ターミネーション
NetScaler T1がTCP最適化を適用するには、まず着信TCPトラフィックを終了する必要があります。そのためには、ワイルドカード TCP vserver を作成し、入力トラフィックをインターセプトしてインターネットルーターに転送するように設定する必要があります。
スタティックまたはダイナミックルーティング環境
静的ルーティングまたは動的ルーティングが導入されている環境では、vserverはルーティングテーブル情報を使用してパケットをインターネットルーターに転送できます。デフォルトルートはインターネットルーターを指している必要があり、ワイヤレスルーターへのクライアントサブネットのルーティングエントリも設定されている必要があります。
例:
add lb vserver vsrv-wireless TCP * * -persistenceType NONE -Listenpolicy "CLIENT.VLAN.ID.EQ(100) && SYS.VSERVER("vsrv-wireless").STATE.EQ(UP)" -m IP -cltTimeout 9000
add route 0.0.0.0 0.0.0.0 192.168.2.1
add route 10.0.0.0 255.0.0.0 192.168.1.1
<!--NeedCopy-->
VLAN 間 (PBR) 環境
加入者トラフィックが複数のフローに分割され、受信トラフィックパラメータに基づいて異なるルータに転送する必要があるお客様の環境があります。ポリシーベースルーティング(PBR)を使用すると、VLAN、MACアドレス、インターフェイス、送信元IP、送信元ポート、宛先IPアドレス、宛先ポートなどの着信パケットパラメータに基づいてパケットをルーティングできます。
例:
add lb vserver vsrv-wireless TCP * * -m IP -l2Conn ON -listenpolicy "CLIENT.VLAN.ID.EQ(100) || CLIENT.VLAN.ID.EQ(101) || CLIENT.VLAN.ID.EQ(102)"
add ns pbr pbr-vlan100-to-vlan200 ALLOW -vlan 100 -nexthop 172.16.200.1
add ns pbr pbr-vlan101-to-vlan201 ALLOW -vlan 101 -nexthop 172.16.201.1
add ns pbr pbr-vlan102-to-vlan202 ALLOW -vlan 102 -nexthop 172.16.202.1
<!--NeedCopy-->
ポリシーベースルーティングを使用して TCP 最適化トラフィックをルーティングすることは、リリース 11.1 50.10 で追加された新機能です。以前のリリースでは、VLAN ごとに複数の「モード MAC」仮想サーバーエンティティを持つことが、複数の VLAN 環境の代替ソリューションでした。各仮想サーバーには、特定のフローのインターネットルーターを表すバインドされたサービスがあります。
例:
add server internet_router_1 172.16.200.1
add server internet_router_2 172.16.201.1
add server internet_router_3 172.16.202.1
add service svc-internet-1 internet_router_1 TCP * -usip YES -useproxyport NO
add service svc-internet-2 internet_router_2 TCP * -usip YES -useproxyport NO
add service svc-internet-3 internet_router_3 TCP * -usip YES -useproxyport NO
bind service svc-internet-1 -monitorName arp
bind service svc-internet-2 -monitorName arp
bind service svc-internet-3 -monitorName arp
add lb vserver vsrv-wireless-1 TCP * * -Listenpolicy "CLIENT.VLAN.ID.EQ(100) && SYS.VSERVER("vsrv-wireless-1").STATE.EQ(UP)" -m MAC -l2Conn ON
add lb vserver vsrv-wireless-2 TCP * * -Listenpolicy "CLIENT.VLAN.ID.EQ(101) && SYS.VSERVER("vsrv-wireless-2").STATE.EQ(UP)" -m MAC -l2Conn ON
add lb vserver vsrv-wireless-3 TCP * * -Listenpolicy "CLIENT.VLAN.ID.EQ(102) && SYS.VSERVER("vsrv-wireless-3").STATE.EQ(UP)" -m MAC -l2Conn ON
bind lb vserver vsrv-wireless-1 svc-internet-1
bind lb vserver vsrv-wireless-2 svc-internet-2
bind lb vserver vsrv-wireless-3 svc-internet-3
<!--NeedCopy-->
注:
vserver モードは MAC ですが、これまでの例ではモード IP になっています。これは、サービスが vserver にバインドされている場合に、宛先 IP 情報を保持するために必要です。また、追加の PBR 設定では、最適化されていないトラフィックをルーティングする必要があります。
TCP の最適化
すぐに使用できるNetScaler ADC TCPターミネーションは、TCPパススルー機能用に構成されています。TCPパススルーとは、基本的に、NetScaler T1がクライアント/サーバーのTCPストリームを透過的に傍受できるが、クライアント/サーバーバッファを個別に保持したり、最適化技術を適用したりしないことを意味します。
TCP 最適化を有効にするには、nstcpprofile という名前の TCP プロファイルを使用して TCP 構成を指定します。この構成は、サービスレベルまたは仮想サーバレベルで TCP 構成が提供されていない場合に使用されます。次のように変更する必要があります。
コマンド:
add ns tcpProfile nstcpprofile -WS ENABLED -SACK ENABLED -WSVal 8 -mss 1460 -maxBurst 30 -initialCwnd 16 -oooQSize 15000 -minRTO 800 -bufferSize 4000000 -flavor BIC -dynamicReceiveBuffering ENABLED -KA ENABLED -sendBuffsize 4000000 -rstWindowAttenuate ENABLED -spoofSynDrop ENABLED -ecn ENABLED -frto ENABLED -maxcwnd 1000000 -fack ENABLED -rstMaxAck enABLED -tcpmode ENDPOINT
<!--NeedCopy-->
注:
プロファイルが明示的に作成されず、vserver とサービスにバインドされていない場合、プロファイル nstcp_default_profile がデフォルトでバインドされます。
複数の TCP プロファイルが必要な場合は、追加の TCP プロファイルを作成して適切な仮想サーバーに関連付けることができます。
コマンド:
add ns tcpProfile custom_profile -WS ENABLED -SACK ENABLED -WSVal 8 -mss 1460 -maxBurst 30 -initialCwnd 16 -oooQSize 15000 -minRTO 800 -bufferSize 4000000 -flavor BIC -dynamicReceiveBuffering ENABLED -KA ENABLED -sendBuffsize 4000000 -rstWindowAttenuate ENABLED -spoofSynDrop ENABLED -ecn ENABLED -frto ENABLED -maxcwnd 1000000 -fack ENABLED -rstMaxAck enABLED -tcpmode ENDPOINT
set lb vserver vsrv-wireless -tcpProfileName custom_profile
<!--NeedCopy-->
注:
vserver-m MAC と service を使用するデプロイでは、同じプロファイルをサービスに関連付ける必要があります。
set service svc-internet -tcpProfileName custom_profile
<!--NeedCopy-->
TCP 最適化機能
NetScaler ADCアプライアンスの関連するTCP最適化機能のほとんどは、対応するTCPプロファイルを通じて公開されます。TCP プロファイルを作成する際に考慮すべき一般的な CLI パラメータは次のとおりです。
- ウィンドウスケーリング (WS): TCP ウィンドウスケーリングにより、TCP 受信ウィンドウサイズを 65535 バイト以上に増やすことができます。これにより、TCP のパフォーマンスが全体的に向上し、特に高帯域幅で遅延が長いネットワークで改善されます。レイテンシを削減し、TCP での応答時間を改善するのに役立ちます。
- 選択的確認応答 (SACK): TCP SACK は、全体的なスループット容量を低下させる複数のパケット損失の問題に対処します。選択的確認により、受信者は正常に受信されたすべてのセグメントについて送信者に通知できるため、送信者は失われたセグメントのみを再送信できます。この手法は、T1 が全体的なスループットを向上させ、接続遅延を減らすのに役立ちます。
- ウィンドウスケーリング係数 (WSVal): 新しいウィンドウサイズの計算に使用される係数。NS がアドバタイズするウィンドウが少なくともバッファサイズと等しくなるように、高い値に設定する必要があります。
- 最大セグメントサイズ (MSS): 単一の TCP セグメントの MSS。この値は、中間ルータとエンドクライアントの MTU 設定によって異なります。1460 の値は MTU が 1500 に相当します。
- MaxBurst: バーストで許可される TCP セグメントの最大数。
- 初期輻輳ウィンドウサイズ (InitialCWnd): TCP の初期輻輳ウィンドウサイズによって、トランザクションの開始時に未処理のまま残せるバイト数が決まります。これにより、T1 は回線の輻輳を気にすることなく、これだけ多くのバイトを送信できます。
- OOO パケットキューの最大サイズ (OOOQSize): TCP はアウトオブオーダーキューを維持して、OOO パケットを TCP 通信に保持します。この設定は、パケットをランタイムメモリに保持する必要があるためにキューサイズが大きい場合、システムメモリに影響します。したがって、ネットワークの種類とアプリケーションの特性に基づいて、これを最適なレベルに保つ必要があります。
- 最小 RTO (minRTO): TCP 再送信タイムアウトは、内部実装ロジックに基づいて受信した ACK ごとに計算されます。デフォルトの再送信タイムアウトは最初は 1 秒ですが、この設定で微調整できます。 これらのパケットの 2 回目の再送信では、RTO は N*2 で計算され、N*4… N*8… は最後の再送信試行まで続きます。
- BufferSize/SendBuffSize: これらは、T1 がサーバーから受信し、クライアントに送信せずに内部的にバッファリングできる最大データ量を指します。これらは、基盤となる伝送チャネルの帯域幅遅延積よりも大きい(少なくとも2倍の)値に設定する必要があります。
- フレーバー:これは TCP 輻輳制御アルゴリズムを指します。有効な値は、デフォルト、BIC、CUBIC、ウェストウッド、ナイルです。
- 動的受信バッファリング:メモリとネットワークの状態に基づいて受信バッファを動的に調整できます。固定サイズのバッファーをサーバーから先に読み込んで、クライアントのダウンロードパイプをいっぱいにするのに必要なだけバッファをいっぱいにします。後者は TCP プロファイルで指定され、通常は 2*BDP などの条件に基づいて接続します。NetScaler T1は、クライアントのネットワーク状態を監視し、サーバーから先に読み取る必要がある量を推定します。
- キープアライブ(KA):定期的にTCPキープアライブ(KA)プローブを送信して、ピアがまだ稼働しているかどうかを確認します。
- RST ウィンドウ減衰:スプーフィング攻撃から TCP を防御します。シーケンス番号が無効な場合は、訂正 ACK を返信します。
- RstMaxAck: ウィンドウ外であっても最も大きい ACKシーケンス番号をエコーする RST の受け入れを有効または無効にします。
- SpoofSynDrop: スプーフィングを防ぐために無効な SYN パケットをドロップします。
- 明示的な混雑通知 (ecn): ネットワークの混雑状況の通知をデータの送信者に送信し、データの混雑やデータ破損の是正措置を講じます。
- フォワードRTOリカバリ:スプリアス再送信の場合、輻輳制御設定は元の状態に戻ります。
- TCP 最大輻輳ウィンドウ (maxcwnd): ユーザが設定可能な TCP 最大輻輳ウィンドウサイズ。
- 転送確認 (FACK): ネットワーク内の未処理のデータバイトの総数を明示的に測定し、再送信タイムアウト時に送信者 (T1 またはクライアント) がネットワークに注入されるデータ量を制御できるようにすることで、TCP の輻輳を回避します。
- tcpmode: 特定のプロファイルの TCP 最適化モード。TCP 最適化モードには、トランスペアレントモードとエンドポイントモードの 2 つがあります。
- エンドポイント。このモードでは、アプライアンスはクライアント接続とサーバー接続を別々に管理します。
- トランスペアレント。トランスペアレントモードでは、クライアントは仮想サーバを介さずにサーバに直接アクセスする必要があります。クライアントはサーバーにアクセスできる必要があるので、サーバーIPアドレスはパブリックにする必要があります。
アイドル状態の接続をサイレントドロップする
通信ネットワークでは、NetScaler ADCアプライアンスのTCP接続のほぼ50%がアイドル状態になり、アプライアンスはRSTパケットを送信して接続を閉じます。無線チャネルを介して送信されるパケットは、それらのチャネルを不必要にアクティブ化し、メッセージが殺到し、その結果、アプライアンスから大量のサービス拒否メッセージが生成されます。デフォルトの TCP プロファイルに dropHalfClosedConnonTimeout パラメータと dropEstConnonTimeout パラメータが含まれるようになりました。これらはデフォルトでは無効になっています。両方を有効にすると、ハーフクローズ接続でも確立された接続でも、接続がタイムアウトしたときに RST パケットがクライアントに送信されることはありません。アプライアンスは接続を切断するだけです。
set ns tcpProfile nstcpprofile -DropHalfClosedConnOnTimeout ENABLED
set ns tcpProfile nstcpprofile -DropEstConnOnTimeout ENABLED
<!--NeedCopy-->