TECHNICAL BRIEF TCP 通信の最適化

TECHNICAL BRIEF
TCP 通信の
通信の最適化
I.
はじめに
TCP は現在のネットワークには欠かすことのできない技術としてその地位を確立しています。ご自身のパーソナ
ルコンピュータでインターネット上のウェブサーバにある情報を参照する、という身近なネットワークを例に考
えてみましょう。TCP は自宅のルータとパーソナルコンピュータとの接続、その通信先に経由するスイッチ・ル
ータ・ファイアウォールなどのネットワーク機器、そして通信の終着点であるウェブサーバに至るまで、すべて
の通信の基礎となっています。この様にネットワークの随所に存在する技術、TCP は、開発以来その柔軟性によ
って、世界中に驚異的なスピードで広がっていったと言えます。
しかしながら、TCP は開発以来 20 年以上経過している技術です。その柔軟性、利便性が謳われる中でも、開発当
初に意識されていなかった様々な問題が認識されていることも確かです。例えば TCP 開発当初のネットワークか
ら考えてみると、現在市場に流出しているネットワーク機器の性能、そしてネットワーク自体に要求される転送
性能は、TCP 開発者達の想像の範疇を超えていると言っても良いでしょう。そのため、ネットワーク機器の性能
を最大限に発揮させる、そして要求される性能に追いつく為には、プロトコル側での機能拡張が必要となります。
このドキュメントは、TCP 通信において BIG-IP v9 を使用することで図れる効率化に視点をおいて話を進めてい
きます。
II.
“TCP Express”
Express”
BIG-IP v9 はその代表機能として挙げられる負荷分散(ロードバランシング)機能の他に、アプリケーションア
クセラレーションにフォーカスした機能があります。この機能は、BIG-IP の価値を更に高めるため、より高度な
アプリケーション・トラフィック・マネジメントを実現するため、に付与されています。そのアプリケーション
アクセラレーション機能には”HTTP 圧縮機能”、”キャッシング機能”、そして”TCP Express”があります。
このドキュメントでは TCP 通信に視点を定めていくことになりますので、”TCP Express”についてより深く話し
を進めます。
“TCP Express”は、TCP ベースの通信をより効率良く行う為に BIG-IP v9 に付与されている機能群の総称とな
ります。“TCP Express”に含まれる各機能は以下となります。
TCP Extensions for High Performance
Limited Transmit Recovery
Slow Start
Bandwidth Delay
Nagle’s Algorithm
Extended Congestion Notification
Selective ACK
”TCP Express”が目的としている「TCP 通信の効率化」とは、既存ネットワークインフラに対して新規機器を導
入、または機器のアップグレードを行い、その結果に表れる帯域の拡張や、ネットワーク遅延の極小化を目的と
することではありません。ここでの「TCP 通信の効率化」は、既存ネットワークインフラに手を加えることなく、
既存リソースを最大限に活用し、その効果を導き出すことにフォーカスしています。以降の各章では、上記に挙
げた”TCP Express”の各機能とその目的・効果について解説を行います。
III.
“TCP Extension for High Performance”
Performance”
”TCP Extension for High Performance” とは、RFC1323 にある TCP の性能向上を目的とした機能拡張にあたり
ます。これは”ウィンドウスケーリング”、”タイムスタンプ”という主な機能を含みます。
”ウィンドウスケーリング”を使用する際、データ送信側は SYN セグメント中に受信側の対応確認を行います。
その内容は、”ウィンドウスケーリング”に対応しているか、どの程度ウィンドウを拡張できるか、となります。
ウィンドウの拡張幅は通常の最大ウィンドウサイズにあたる 2^16 セグメントに対してどれだけウィンドウサイ
ズを左ビットシフトすることができるか、となります。
例えば、”ウィンドウスケーリング”に対応していない場合(左ビットシフト=0)のウィンドウサイズは;
通常ウィンドウサイズ * 拡張幅
つまり
2^16 * 2^0 となり、ウィンドウサイズは変化しません。
しかし、”ウィンドウスケーリング”に対応し、かつ左ビットシフト数が 3 の設定でのウィンドウサイズは;
通常ウィンドウサイズ * 拡張幅 つまり 2^16 * 2^3 となり、通常に比べ 8 倍のウィンドウサイズとなります。
この最大拡張範囲は左ビットシフト数=14、つまり最大ウィンドウサイズを 2^16*2^14 セグメントまで設定するこ
とができます。
”ウィンドウスケーリング”を利用し、データ送信側/受信側での対応確認、およびウィンドウサイズの設定を
行うことで、通常以上のウィンドウサイズでデータを送受信することが可能となります。この機能は送信するセ
グメント量を拡大させることでの通信効率の向上、そして受信側バッファを最大にすることでのリソース最大限
F5 Networks Japan K.K.
1
July, 2005
TECHNICAL BRIEF
に使う有効活用方法ともなります。遅延が少なく、帯域の広いネットワーク、例えば同一サイト内で BIG-IP とサ
ーバが通信する際に効果を発揮します。
加えて”タイムスタンプ”機能です。この機能は TCP セグメントの再転送タイムアウト:RTO(Retransmission
Timeout)算出をより正確に行うためのものです。通常、TCP ではウィンドウ毎、1 つのセグメントが送出され、そ
の応答が返るまでの時間を RTT(Round Trip Time)として、その時間を元に RTO を算出します。ここで、拡大され
たウィンドウサイズを例にとって再転送タイムアウトの算出について考えてみます。
拡大されたウィンドウで、膨大な数のセグメントがデータ送信側から送出されます。その中でまず、RTT のサン
プルとされる 1 つのセグメントだけが一番速いスピードで応答を返します。その後、ネットワーク上での障害に
より、受信側にデータは到達したけれども応答が遅い、という遅延が発生する状況になります。その場合送信側
は、偶然速く到達したセグメントを元に RTO を算出しているため、ほとんどのセグメントについての再転送を開
始します。極端な例ではありますが、ウィンドウサイズが拡張されていく中で、その一部のみをサンプリングし
て RTO を算出することは、その値の妥当性が低くなることは確かです。
”タイムスタンプ”機能を使用すると、ウィンドウ内の各セグメントに対して RTT を算出するようになります。
これは TCP ヘッダ内のオプションを付与することで適用されます。これにより、送信側は逐次 RTT の状況を把握
することができ、偶然に突出した RTT をサンプリングして RTO を算出するのではなく、より正確な RTO を算出で
きるようになります。誤った RTO に基づいてセグメントの再送を行うことで、すでに受信側に到達しているセグ
メントを再転送してしまうことほど無駄はありません。こういった観点より、”タイムスタンプ”機能は不必要
なトラフィックを削減していきます。
IV.
“Limited Transmit Recovery”
Recovery”
“Limited Transmit Recovery”の機能は TCP の持つセグメントの再送方法を拡張させた機能です。通常、セグメ
ントの再送は RTO を待って行いますが、その設定された RTO に到達するまでにデータの送受信が停止し、通信効
率が悪化する場合があります。パケットが 1 つ受信側まで到達できなかった度にこの様な再送待ちを繰り返すこ
とはスループットを悪化させていく要因となります。この機能はそれを防ぐために、RTO が訪れるまで待ってい
る間に、3 つの Duplicate ACK を受信したらその Duplicate ACK に対応するデータを送る、という Fast
Retransmission を誘発させるものです。
通常 TCP の ACK は、受信側が今までにどのセグメントまでを受信した、という情報が含まれています。送信側は
それを元に、次に送信するセグメントを決定します。例えばセグメント 1,2,3,4,5 と送信された場合で、セグメ
ント 2 が欠落すると、セグメント 3 に対する受信側からの ACK はセグメント 1 のものとなります。この情報を元
に送信側はセグメント 2 を再送します。この様に、セグメント 1 に対する通常の ACK に加え、セグメント 2 が欠
落した状態でのセグメント 3 の ACK は重複する、
ということからこれら(セグメント 3 以降)の ACK は Duplicate ACK
と呼ばれます。そして、Fast Retransmission という機能はその Duplicate ACK の個数を数えて(この場合、セ
グメント 5 の ACK までセグメント 1 の Duplicate ACK であれば、その個数は 3)
、RTO が訪れるよりも早くにセグ
メントの再送を行うことで転送効率を高めます。
しかし、この Fast Retransmission にも送信時のウィンドウサイズが小さい場合には RTO まで再送を待たなけれ
ばならない、という欠点があります。例えば、ウィンドウサイズが 3 と小さく、1,2,3,4 と送信されていった場
合、セグメント 2 が欠落した状態では結局そのウィンドウ内で 2 つしかセグメント 1 の Duplicate ACK がありま
せん。この状況は次の通りとなります。
ウィンドウはセグメント 1 の ACK を受信したのでスライド。このとき、セグメント 2 がそのウィンドウ内で最も
古いデータですが、ACK が無い為にスライド出来ません。
(このときウィンドウ内はセグメント 2,3,4 であり、セ
グメント 2 は ACK が無く、セグメント 3,4 の ACK が Duplicate ACK となっています。
)よって、この状態では
Duplicate ACK の個数が足りず、Fast Retransmission が発動しないので、RTO まで待たざるを得なくなります。
そこで、この機能を誘発させる為に Limited Transmit Recovery という機能があります。この機能はウィンドウ
のサイズを越えて最大 2 つのセグメントを相手側へ送信するものです。
これは、Fast Retransmission が発動しない上記の例(セグメント 1,2,3,4 の送信)に加えて、その次のウィン
ドウにある送信を控えたセグメント 5 を送信することで Duplicate ACK の個数を増やし、Fast Retransmission
を発動させる、というものです。ウィンドウを越えたセグメント 5 が送信され、ACK が戻ることで Duplicate ACK
が 3 個となるため Fast Retransmission が誘発されます。この機能により、Fast Retransmission のみでは対応
できなかった再送を行い、より一層の効率化を図ることが出来ます。
V.
“Slow Start”
Start”
“Slow Start”の機能は送信側・受信側の双方にて設定されたウィンドウサイズに沿って、初回送信時よりウィ
ンドウを最大限使用するのではなく、ネットワークの状況をみながらデータ送出量を増加させていく機能で
す。”Slow Start”では、送信側が受信側から ACK を受け取るごとにそのウィンドウサイズを 1 ずつ左ビットシ
フトさせていき、指数的にそのウィンドウを広げていきます。このようにウィンドウサイズを広げていき、利用
可能な帯域に対して多量なデータを送信することとなった、つまり Congestion が発生した場合は、再度ウィンド
ウサイズを縮小します。縮小された後は、再度 Congestion が発生するまでウィンドウサイズを拡大していきます。
この機能を使用することで、一度に多量のデータが送出された結果に RTT が増加し、BIG-IP の持つ RTO の妥当性
に影響が出ることを防ぎます。
F5 Networks Japan K.K.
2
July, 2005
TECHNICAL BRIEF
VI.
“Bandwidth Delay”
Delay”
“Bandwidth Delay”の機能は、BIG-IP 配下にある最大限利用できる帯域を算出し、転送量拡張に伴う帯域の超
過を防ぎます。この帯域は、利用可能帯域(bits/sec)と BIG-IP から送信されたセグメントの RTT(sec)から算出
されるものです。そして BIG-IP はこの情報を元に受信ウィンドウサイズを変更します。
通信するウィンドウサイズが実際に利用可能な帯域に対して不必要に大きくなってしまうと、データ転送の遅延
やパケットロスなどが発生しやすくなります。例えば BIG-IP~直近ネットワーク機器までは、その間にあるもの
がネットワークケーブルだけであり、遅延・パケットロスの見込みが無いために、そのウィンドウを最大限に拡
張してデータを送受信することができます。しかしそれ以降、他のネットワーク経路にて帯域が狭くなってしま
う場合などは、そのように一度に送出されたデータが通りきれずに滞留してしまいます。この様に非効率的なデ
ータ転送を避けるためには、データ送信元からデータ受信先までに存在する経路に適切な量のデータを送り出す
ことが必要となります。
そこでこの機能を使用することで、実際に使用可能な帯域を算出し、設定されているウィンドウサイズが大きく
なりすぎてしまうことを避ける事ができます。
VII.
“Nagle’
Nagle’s Algorithm”
Algorithm”
“Nagle’s Algorithm”の機能は以下の複数の点を考慮している通信最適化機能です。
・小さいパケットを束ねて送出する
・ワイヤ上のショートパケットを削減し、転送効率を改善する
・多数パケット送出による負荷(ドロップや並替)を軽減する
これらの点はデータ転送に送信側、受信側の間にある経路もデータ転送のファクターとして考えるものです。
例えばデータの送信側と受信側あり、通常のデータ送信を行います。その場合、送信側は受信側から送られる ACK
を待って、新しいデータを送出します。しかしこのシナリオのように、双方が互いにその応答を待った上で処理
を行うという動作には、もしその間の経路が長かった場合には大きなオーバヘッドが見込まれます。そこで、こ
の機能は送信側と受信側の間にある経路(ワイヤ)に可能な限りのデータを送出することで、こういったロスを
防ぐことを目的としています。
この機能は例えば BIG-IP とその対向先ノードでショートパケットが数多くやり取りされる場合に非常に有効で
す。しかし、この機能はその特性(対向先のレスポンスを確認しないで送出する)上、Telnet といったインタラ
クティブな通信には不向きです。デフォルト設定では有効となっているので、必要に応じて設定を変更する必要
があります。
VIII. “Extended Congestion Notification”
Notification”
”Extended Congestion Notification”の機能は、TCP ウィンドウにおけるセグメントの動的管理を行うために
必要なものです。この機能はデータ送信側、受信側、加えてその経路にあるルータなども対応している必要があ
ります。この機能を使用する場合は以下のシナリオが考えられます。
まずハンドシェイク時に、送信側・受信側ともに ECN(Explicit Congestion Notification)[RFC 2481]に対応し
ているかの合意をとります。その後、ECN 対応ルータを経由して送信側から受信側へデータが送出されます。デ
ータが送信されている間、中継ルータは自身で保持している転送待ちパケット数を検査します。その転送待ちパ
ケットが一定数を超えた場合は、ネットワーク内で輻輳が発生したとみなして CE(Congestion Experienced)ビッ
トを転送データヘッダ内に付与し、
受信側へ送ります。CE ビット付データを受信した受信側は、
ACK の中に ECE(ECN
echo)ビットをセットし、その受信応答を返します。ECE を含む ACK を受け取った送信側は以降、その送信ウィン
ドウを縮小することで輻輳中のネットワークへ多量のデータを送信することを防ぎます。そして送信側はその状
態をデータパケット中に CWR(Congestion Window Reduced)ビットをセットすることで受信側に通達します。
この機能を利用することで、データ送信キューを動的に管理し、不要なデータがネットワークに送出され、その
ネットワークパフォーマンスがより低下することを防ぐことができます。しかし、データが経由するルータの対
応状況に応じて機能使用の有無を決める必要があるので、デフォルトでは OFF の設定となっています。
IX.
“Selective
Selective ACK”
ACK”
“Selective ACK”の機能は、再転送が必要となったデータをより少なく絞り込むために必要なものです。この機
能は送信側、受信側の双方に対応が必要な機能であり、その対応確認はデータ送信側が SYN セグメントに SACK
Permitted Option、および SACK Option の 2 つをセットすることで行います。通常、ネットワークの状況によっ
てデータの再転送が必要な場合、つまりこのオプションを使用しない場合は、受信側でシーケンスとして受信し
た一番末尾のもの以降の再転送が必要となります。
例えば、送信側から受信側へデータを 10 セグメント送信した際、そのうち 3 セグメント目のみが欠落した状態が
発生します。(受信成功セグメント=1-2, 4-10)この場合、通常の再転送では 3 セグメント目から再度送信しなお
す、ということになります。
この場合、1 つのセグメントしか送信する必要の無い場合でも、8 セグメント分の送信が必要とされ効率が良くあ
りません。しかし、同じような状態で“Selective ACK”機能を有効にした場合、以下のようにシナリオが変化し
ます。
送 信 側 か ら 受 信 側 へ デ ー タ を 10 セ グ メ ン ト 送 信 し た 際 の 受 信 成 功 セ グ メ ン ト =1-2, 4-10 と し た 場
合、”Selective ACK”オプション使用時では、次に送信が必要であるセグメントは 3 セグメント目である、とい
F5 Networks Japan K.K.
3
July, 2005
TECHNICAL BRIEF
う受信確認に加え、その他に 4-10 セグメント目は受信している、という情報が送信側に伝えられます。この情報
を受け、送信側は 3 セグメント目のみを再送する、という動作をします。
“Selective ACK”機能未使用時と使用時とを比較してみると、その再送するデータ量が削減できる、という面で
この機能は大変効果的であることが分かります。
X.
まとめ
まとめ
ハードウェアの進化が著しく進む今日で、それらを使用するネットワークプロトコルも開発以来の旧態依然とし
たものでなく、併せて進化していかなければ、より高いネットワークパフォーマンスを出すことはできません。
BIG-IPv9 は、負荷分散(ロードバランシング)のみではなく、より高度なアプリケーション・トラフィック・マネ
ジメントに着目して機能を拡充しており、その一部として本ドキュメントにある”TCP Express”という機能があ
ります。この機能を BIG-IPv9 導入先ネットワークで有効に適用していくことで、より一層のパフォーマンス向上
が見込めるようになります。
F5 Networks Japan K.K.
4
July, 2005