IPComp[RFC2393]は、 IPパケットのトランスポート層を圧縮するプロトコルである。 IPCompをIPsecのESPと組み合わせることによって、 VPNのスループットを向上できる可能性がある。 特に、低速な回線では、 スループットに対するデータ量の影響が大きいため、IPCompは効果的に機能する。
IPCompと同様の圧縮プロトコルとして、CCP[RFC1962]がある。 CCPはPPPフレームを圧縮することによって通信のスループットを向上させる。 ところが、IPsecでCCPを使用する場合には、 既に暗号化されたデータを圧縮するため、圧縮効率が悪く、実用に適さない。
IPCompでは、IPsecによる暗号化に先んじてIPパケットを圧縮するので、 CCPによって圧縮する場合に比べて圧縮効率を高めることができる。 また、IPパケットを圧縮することで、 暗号化すべきデータの総量を少なくし、暗号化の計算量を減らすことができる。
IPCompに関するRFCとしては、RFC2393、RFC2394、RFC2395がある。RFC2393は、 IPCompの仕様を定義したものであり、RFC2394とRFC2395はそれぞれ、 IPCompの圧縮アルゴリズムとして、 deflateとStac-LZSを利用する場合の情報を提供するものである。
IPCompでは、到着順序の保証されないパケットを扱うため、 履歴(ヒストリ)に基づく圧縮方式を用いることができない。 仮に履歴を扱うことのできるアルゴリズムを利用する場合でも、 パケットを圧縮するたびに履歴を消去する必要がある。 このため、IPCompの圧縮効率は、 CCPのStac-LZSのように履歴を用いる圧縮方式に効率に比べれば低くなる傾向がある。
RFC2394に基づき、圧縮アルゴリズムとしてdeflate(zlib)を使用する。
圧縮のタイミングは、IPパケットがIPsecでカプセル化される直前とする。 トンネルインタフェースでは、他にNATの処理が実施されるが、IPCompの処理は、 NATの処理の後に位置付けられる。 なお、IPパケットを圧縮した結果、 IPパケットが長くなったときには圧縮しないで送信する。
展開のタイミングは、IPsecのカプセルが外された直後とする。 IPCompで包まれたパケットを受信した場合には、 IPCompヘッダのCPI(アルゴリズムの識別子)を見て、 これがdeflateに相当するときのみ、IPパケットを展開する。
なお、IPCompで使用するパラメータを決定するためにIKEを用いることができるが、 この機能はサポートしない。この理由は以下の3点である。
IPsecのトンネルモードと併用することを前提とし、 各トンネルインタフェースに対してコマンドを設定するものとする。 トランスポートモードのみを使用する場合には、 IPCompを使用することはできない。この理由は以下の2つである。
設定コマンドの仕様は以下のとおり。
○ IPCompで使用する圧縮アルゴリズムの設定 [入力形式] ipsec ipcomp type TYPE [パラメータ] TYPE 圧縮アルゴリズム deflate ... 圧縮アルゴリズムとしてdeflateを使用する none ... IPCompを使用しない [説明] IPCompで使用する圧縮アルゴリズムを設定する [デフォルト値] none
設定は以下のようになる。
tunnel select 1 ip tunnel route add net 192.168.0.0/24 1 ipsec ipcomp type deflate ipsec tunnel 101 tunnel enable 1
受信したIPCompパケットを展開するためには、特別な設定を必要としない。 すなわち、サポートしているアルゴリズムで圧縮されたIPCompパケットを受信した ときには、設定に関係なく展開する。
必ずしもセキュリティゲートウェイの両方にこのコマンドを設定する必要はない。 片側にのみ設定した場合には、 そのセキュリティゲートウェイから送信されるIPパケットのみが圧縮される。