OneConnectについて

BIG-IPが持つTCP効率化機能の中核を担う「OneConnect」について説明します。
OneConnectはサーバで行うTCP処理をオフロード(肩代わり)することで、サーバで行うTCPの処理負荷の軽減を図る機能です。OneConnectは、TCP処理の効率化を図るいくつかの機能を備えています。そのコアとなる機能が「OneConnect Transformation」と「Connection Pooling」のふたつです。それぞれ説明していきましょう。

OneConnect Transformation

OneConnect Transformationは、HTTPリクエスト内のHTTPヘッダ(Connectionヘッダ)を加工処理することによって、サーバサイドのTCPコネクションを可能な限りオープンし続けようとする機能です。HTTP Profileの中で設定することができ、OneConnect Profileを適用したときだけ有効になります。OneConnect Transformationは、HTTP/1.0とHTTP/1.1、HTTPのバージョンごとに分けて考えると分かりやすくなります。それぞれ説明します。

HTTP/1.0の場合

HTTP/1.0はHTTPリクエストのたびにTCPコネクションを作っては壊す、サーバに優しくないプロトコルです。BIG-IPは、クライアントから受け取ったHTTP/1.0のHTTPリクエストのヘッダに「Connection: Keep-Alive」を挿入し、サーバに対する持続的接続機能を有効にします。持続的接続機能は、一度作ったTCPコネクションを使いまわしてHTTPリクエストを行う機能です。持続的接続機能を有効にすることによって、サーバサイドのTCPコネクションをオープンし続けるようになり、TCPオープン/クローズ処理のときに発生する処理負荷を軽減します。

HTTP/1.1の場合

HTTP/1.1は標準機能として持続的接続機能が含まれています。なので、基本的にTCPコネクションはオープンし続けようとします。BIG-IPは、ある条件にマッチしたときだけ、TCPコネクションをオープンし続けるように、HTTPヘッダの書き換えを行います。ある条件とは、具体的に言うと、HTTPリクエストに「Connection: Close」が含まれていたときです。通常、HTTPリクエストのヘッダに「Connection: Close」が含まれていると、TCPコネクションはクローズしてしまいます。そこで、BIG-IPは「Connection: Close」を「X-Cnection: Close」に変換します。「X-Cnection: Close」はサーバが認識できないHTTPヘッダなので、サーバ側で無視されます。結果として、HTTP/1.1の持続的接続機能がそのまま効き続け、サーバ側のTCPコネクションはオープンし続けるため、サーバの処理負荷が軽減します。

  col03-fig_01

Connection Pooling

Connection PoolingはクライアントサイドのTCPコネクションを集約し、かつ再利用する機能です。OneConnect ProfileでTCPコネクションの集約単位(どのサブネットで集約するか)や生存時間(どれくらい維持するか)など、どのように再利用するかを設定することができます。なお、TCPコネクションを再利用した場合、クライアントの送信元IPアドレスが再利用したTCPコネクションの送信元IPアドレスに変換されるため、必ずしもオリジナルの送信元IPアドレスと一致しなくなります(集約単位を255.255.255.255にしたときを除いて・・・)。クライアントの送信元IPアドレスを取得したい場合は、HTTP Profileの「X-Forwarded-For」を併用し、サーバでは「X-Forwarded-For」の値を取得します。

 

col03-fig_02