(57)【要約】【課題】  冗長構成をとるゲートウェイ装置において、Ｌ４コネクションを確立した通信相手から受信したパケットを複製して、現用系と待機系の両方にパケットを入力し、それぞれのＬ４スタックで処理してＬ４コネクションの冗長化を実現する。【解決手段】  独立して動作する複数のパケット処理装置と前記複数のパケット処理装置を接続するスイッチ装置を備え、前記複数のパケット処理装置のうち１台が現用系であり、前記現用系とは異なる１台が待機系となるように冗長構成をとり、前記現用系が通信相手に対してＬ４コネクション端点となるゲートウェイ装置であって、前記通信相手から受信した前記Ｌ４コネクションのパケットが前記現用系もしくは前記待機系に入力されると、前記現用系もしくは前記待機系は前記Ｌ４コネクションに関して記憶しているパラメータを用いて前記パケットのヘッダを書き換えて、Ｌ４スタックに前記パケットを渡す。【選択図】  図５
2011239309.tif 000002
【特許請求の範囲】
【請求項１】
独立して動作する複数のパケット処理装置と前記複数のパケット処理装置を接続するスイッチ装置を備え、前記複数のパケット処理装置のうち１台が現用系であり、前記現用系とは異なる１台が待機系となるように冗長構成をとり、前記現用系が通信相手に対してレイヤ４コネクションの端点となるゲートウェイ装置であって、
前記通信相手から受信した前記レイヤ４コネクションのパケットが前記現用系もしくは前記待機系に入力されると、前記現用系もしくは前記待機系は前記レイヤ４コネクションに関して記憶しているパラメータを用いて前記パケットのヘッダを書き換えて、レイヤ４スタックに前記パケットを渡すことを特徴とするゲートウェイ装置。
【請求項２】
請求項１に記載のゲートウェイ装置において、前記レイヤ４コネクションの確立時に前記通信相手と交換するパラメータと、前記レイヤ４コネクションの確立後のパケット通信において値が更新されるパラメータを、前記現用系もしくは前記待機系において記憶することを特徴とするゲートウェイ装置。
【請求項３】
請求項２に記載のゲートウェイ装置において、前記現用系もしくは前記待機系は前記通信相手から受信した前記レイヤ４コネクションのパケットを受け取ると、それぞれ前記待機系もしくは前記現用系に前記パケットを転送することを特徴とするゲートウェイ装置。
【請求項４】
請求項２に記載のゲートウェイ装置において、前記現用系はレイヤ４スタックから前記通信相手に送信する前記レイヤ４コネクションのパケットを受け取ると、前記現用系は前記レイヤ４コネクションに関して記憶しているパラメータを用いて前記パケットのヘッダを書き換えてパケット網に送信する、もしくは前記パケットを複製して前記待機系に転送する、もしくは前記２つの動作を両方とも行うことを特徴とするゲートウェイ装置。
【請求項５】
請求項４に記載のゲートウェイ装置において、前記待機系は前記現用系から転送された前記通信相手に送信する前記レイヤ４コネクションのパケットを受け取ると、待機系内アプリケーションに前記パケットを通知することを特徴とする、ゲートウェイ装置。
【請求項６】
請求項４に記載のゲートウェイ装置において、前記待機系はレイヤ４スタックから前記通信相手に送信する前記レイヤ４コネクションのパケットを受け取ると、前記現用系が前記パケットをパケット網に送信している場合には前記待機系は前記パケットを破棄し、前記現用系が前記パケットをパケット網に送信していない場合には前記待機系は前記パケットをパケット網に送信することを特徴とするゲートウェイ装置。
【請求項７】
請求項１に記載のゲートウェイ装置において、前記現用系（第１の現用系）と前記待機系（第１の待機系）とは異なるパケット処理装置を第２の現用系もしくは第２の待機系として追加する場合に、前記第１の現用系もしくは前記第１の待機系は前記第２の現用系もしくは前記第２の待機系に対して前記レイヤ４コネクションに関して記憶しているパラメータを通知し、前記第２の現用系もしくは前記第２の待機系から前記通知に対する応答を受け取ると前記レイヤ４コネクションのパケットの転送先を前記第２の現用系もしくは前記第２の待機系に切り替えることを特徴とするゲートウェイ装置。
【請求項８】
請求項７に記載のゲートウェイ装置において、前記第２の現用系もしくは前記第２の待機系は前記第１の現用系もしくは前記前記第１の待機系から前記レイヤ４コネクションのパラメータ通知を受け取ると、前記第２の現用系もしくは前記第２の待機系内のレイヤ４スタックに対して、通知された前記パラメータを用いて新規レイヤ４コネクションを擬似的に確立する挙動をさせ、前記新規レイヤ４コネクションのパラメータを記憶することを特徴とするゲートウェイ装置。
【請求項９】
請求項７に記載のゲートウェイ装置において、前記第１の現用系もしくは前記第１の待機系は前記レイヤ４コネクションの転送先を切り替えた後に、前記第１の現用系もしくは前記第１の待機系内のレイヤ４スタックに対して、前記レイヤ４コネクションを擬似的に切断する挙動をさせることを特徴とするゲートウェイ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ゲートウェイ装置に係わり、特に、現用系と待機系を用意して冗長化を行い、かつ、レイヤ４コネクションの端点となるゲートウェイ装置に関する。
【背景技術】
【０００２】
３ＧＰＰ（３ｒｄ  Ｇｅｎｅｒａｔｉｏｎ  Ｐａｒｔｎｅｒｓｈｉｐ  Ｐｒｏｊｅｃｔ）のＬＴＥ（Ｌｏｎｇ  Ｔｅｒｍ  Ｅｖｏｌｕｔｉｏｎ）に代表される第３．９世代移動体通信網では、ネットワークがオールＩＰ化されて、従来は回線交換網で提供されてきた電話サービスがＩＰ網で提供されるようになる。このため、今後は移動体通信システムにおけるゲートウェイ装置に対しても電話交換機並の高信頼性が要求される。この高信頼性を達成するために、物理的に独立した２つ以上の装置を用意して、実際にサービスを提供する現用系としての役割と、通常はバックアップとして動作して、現用系故障時には代わりにサービスを提供する待機系としての役割を与えて、ゲートウェイ装置の冗長化を行う。これにより継続的なサービス提供が可能となる。このとき、現用系と待機系の切替時間、すなわちサービス停止時間は短時間（１秒以内）であることが望まれる。
【０００３】
一方、ゲートウェイ装置は、通信システム内の他装置と通信する際に、ＳＣＴＰ（Ｓｔｒｅａｍ  Ｃｏｎｔｒｏｌ  Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｐｒｏｔｏｃｏｌ）やＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）に代表されるコネクション型レイヤ４（Ｌ４）プロトコルを用いる。特に移動体通信システムにおいては、呼処理関係のシグナリングにＳＣＴＰが用いられる傾向にあり、今後も利用は増えていくと考えられる。一般に、Ｌ４コネクションは状態遷移を持つため、冗長切替が発生すると、Ｌ４コネクションは一度切断され、その後再接続処理が行われる。これを図１を用いて説明する。
【０００４】
図１は現用系故障時の冗長切替において、ＳＣＴＰを例にとり、Ｌ４コネクションを再接続するシーケンスである。冗長化装置１０１は、レイヤ２（Ｌ２）スイッチ１０２と現用系１０３と待機系１０４から構成される。現用系と待機系は、Ｌ２スイッチを介して他装置１０５と通信を行う。図１では、現用系と他装置との間であらかじめＳＣＴＰコネクションを確立している。そのため、他装置が送信したＤＡＴＡパケット（１１０、１１１）を現用系は受信し、またその応答であるＳＡＣＫパケット（１１２、１１３）を他装置は受信することができる。
【０００５】
図２ＡはＤＡＴＡパケットのデータ構造であり、図２ＢはＳＡＣＫパケットのデータ構造である。ＤＡＴＡパケット１１０のヘッダの送信元ポート番号２０１、送信先ポート番号２０２、送信先の検証タグ２０３、およびＳＡＣＫパケット１１２のヘッダの送信元ポート番号２１１、送信先ポート番号２１２、送信先の検証タグ２１３は、Ｌ４コネクションを確立する際に通信相手である他装置と現用系との間で交換するパラメータである。また、ＤＡＴＡパケットヘッダの送信元が付けるシーケンス番号２０４は、初期値をＳＣＴＰコネクション確立時に交換し、ＤＡＴＡパケットを送信するごとに増加されるパラメータである。さらに、ＳＡＣＫパケットヘッダに付加する受信したＤＡＴＡパケットのシーケンス番号２１４は、対応するＤＡＴＡパケットのシーケンス番号２０４と同じ値をとるパラメータである。ＯＳ（Ｏｐｅｒａｔｉｏｎ  Ｓｙｓｔｅｍ）内においてＳＣＴＰコネクションを管理するＬ４スタックは、ＤＡＴＡパケットとＳＡＣＫパケットを受信するごとにパケットに付加されるこれらの情報が正しいことを精査する。もしこれらの情報に誤りやズレがあれば、受信パケットを破棄するか、もしくはパケットの再送を要求する。Ｌ４スタックは内部に独自の状態遷移を持ちながら、上述したパケット精査を自動的に行う。
【０００６】
図１に戻る。現用系に故障が発生すると（１１４）、他装置から送信されたＤＡＴＡパケット（１１５、１１６）がＬ２スイッチから転送されない状態になる。待機系は現用系の故障を検知すると（１１７）、自分がサービスを提供するために現用系に移行する（１１８）。以降、待機系１０４を旧待機系１０４と記述する。旧待機系１０４は、冗長化装置１０１に送られたパケットを受信できるようにするために、Ｌ２スイッチに対してＧｒａｔｕｉｔｏｕｓ  ＡＲＰ（１１９）を送信する。すると、ＤＡＴＡパケット１２０は、旧待機系に転送されるようになる（１２１）。しかしながら、旧待機系のＬ４スタックは、このＳＣＴＰコネクションに関する状態遷移情報を持たないため、ＤＡＴＡパケットを破棄して、応答として接続を強制終了させるＡＢＯＲＴパケット（１２２、１２３）を他装置に送信する。他装置は、ＡＢＯＲＴパケットを受信すると、ＳＣＴＰコネクションが強制切断されたことを、そのＳＣＴＰコネクションを利用していたアプリケーションに通知する。アプリケーションは、再度データを送信するために再接続処理を要求する（１２４）。他装置のＬ４スタックは自動的に、待機系のＬ４スタックとの間でＩＮＩＴパケット、ＩＮＩＴ−ＡＣＫパケット、ＣＯＯＫＩＥ−ＥＣＨＯパケット、ＣＯＯＫＩＥ−ＡＣＫパケット（１２５〜１３２）をやり取りし、ＤＡＴＡパケット、ＳＡＣＫパケット送受信に必要となる情報を新たに交換して、新規のＳＣＴＰコネクションを再確立する。その後、他装置内のアプリケーションは、故障発生前後に送信し損なったデータの再送信処理を行う（１３３）。そして、新たに確立したＳＣＴＰコネクションを用いて、ＤＡＴＡパケット（１３４、１３５）とＳＡＣＫパケット（１３６、１３７）が送受信される。以上のように、Ｌ４コネクションを持つ冗長化装置が冗長切替を行う場合には、強制切断、再接続、再送信の処理が必要になる。そのため、確立されるＬ４コネクション数が多くなると、高速な冗長切替達成に影響を与える。したがって、図１の破線部分１４０の処理を省き、Ｌ４コネクションの冗長化を行うことが要求される。
【０００７】
これを解決するためには、現用系と待機系内のそれぞれのＬ４スタックが持つＬ４コネクションの状態遷移を同期させればよい。この方式として、共有方式と並列処理方式が挙げられる。共有方式は、現用系が管理するＬ４コネクションの状態遷移を、ネットワークを介してリアルタイムに待機系に転送する方式である。また、並列処理方式は、通信相手である他装置から受信したパケットを複製して現用系と待機系の両方にパケットを入力し、現用系と待機系のＬ４スタックが独立に処理を行うことで、同じ状態遷移を作り出す方式である。
【０００８】
特許文献１では、装置間で共有可能な特殊なメモリを用いて、共有方式を実現する。しかしながら、移動体通信システムにおけるゲートウェイ装置は、一般的にＡＴＣＡ（Ａｄｖａｎｃｅｄ  Ｔｅｌｅｃｏｍ  Ｃｏｍｐｕｔｉｎｇ  Ａｒｃｈｉｔｅｃｔｕｒｅ）などの汎用装置に実装されるため、特殊なハードウェアを設けてＬ４コネクションを冗長化することが困難である。そこで近年では、ゲートウェイ装置に対する並列処理方式の適用が検討されている。
【０００９】
非特許文献１は、Ｌ４コネクション確立時に現用系と待機系で通知しあって、現用系と待機系のパラメータと状態遷移初期値を揃える方式を示している。
【００１０】
【特許文献１】特開２００７−２７４２５６号
【非特許文献１】狩野秀一、地引昌弘、“トランスポート端点のポータブルなクラスタ方式”、電子情報通信学会技術報告、ＩＡ２００７−２、ｐｐ．５−１０
【発明の概要】
【発明が解決しようとする課題】
【００１１】
本発明では、並列処理方式によってＬ４コネクションの冗長化を実現する。
【００１２】
上述したように、装置間でＬ４コネクションを確立する際、いくつかのパラメータを通信相手と交換し、共有する。以降のパケット通信では、交換したパラメータと状態遷移に基づく値をパケットヘッダに埋め込んで、データの送受信を行う。交換したパラメータもしくは現在の状態遷移と異なる値が検出された場合には、そのパケットは破棄される。その結果通信が正しく処理されなくなるか、もしくはＬ４コネクションが強制切断される。
【００１３】
上記パラメータの一部は、ＯＳ内のＬ４スタックが自動的に生成する乱数である。そのため、独立した装置であれば異なる値を生成し、異なる状態遷移初期値をとる。一方、冗長構成を組んでいる場合、通信相手からは冗長化装置は１台の装置にしか見えない、すなわち現用系のパラメータと状態遷移しかパケットヘッダには反映されない。したがって、現用系と待機系の両方にパケットを入力したとしても、現用系のＬ４スタックでは処理されるが、待機系のＬ４スタックでは処理されないことになる。
そこで本発明は、Ｌ４コネクションを確立した通信相手から受信したパケットを複製して、現用系と待機系の両方にパケットを入力し、それぞれのＬ４スタックで処理できるようにすることを課題とする。
【００１４】
なお、非特許文献１では、Ｌ４コネクション確立時に現用系と待機系で通知しあって、現用系と待機系のパラメータと状態遷移初期値を揃えている。しかしながら、非特許文献１の方式では、Ｌ４コネクション確立時にしか対応できず、Ｌ４コネクション確立後に現用系もしくは待機系を追加したり交換したりする際には、Ｌ４コネクションを一度切断して再確立しなければならない。このことは、動的な負荷分散を目的とした装置の追加時や、故障装置の交換時にはＬ４コネクションの冗長化が引き継げないことを意味する。
【課題を解決するための手段】
【００１５】
本願で開示される実施態様の代表的なゲートウェイ装置は、独立して動作する複数のパケット処理装置と前記複数のパケット処理装置を接続するスイッチ装置を備え、前記複数のパケット処理装置のうち１台が現用系であり、前記現用系とは異なる１台が待機系となるように冗長構成をとり、前記現用系が通信相手に対してＬ４コネクションの端点となり、前記通信相手から受信した前記Ｌ４コネクションのパケットが前記現用系もしくは前記待機系に入力されると、前記現用系もしくは前記待機系は前記Ｌ４コネクションに関して記憶しているパラメータを用いて前記パケットのヘッダを書き換えて、Ｌ４スタックに前記パケットを渡すことを特徴とする。
【００１６】
また、前記レイヤ４コネクションの確立時に前記通信相手と交換するパラメータと、前記レイヤ４コネクションの確立後のパケット通信においてパケットに付加されるパラメータを、前記現用系もしくは前記待機系において記憶する。
【００１７】
また、前記現用系もしくは前記待機系は前記通信相手から受信した前記レイヤ４コネクションのパケットを受け取ると、それぞれ前記待機系もしくは前記現用系に前記パケットを転送する。
【発明の効果】
【００１８】
本発明によれば、冗長構成をとるゲートウェイ装置において、Ｌ４コネクションを確立した通信相手から受信したパケットを複製して、現用系と待機系の両方にパケットを入力し、それぞれのＬ４スタックで処理してＬ４コネクションの冗長化を実現できる。また、Ｌ４コネクションを確立したまま柔軟な冗長化装置の運用が可能となる。
【図面の簡単な説明】
【００１９】
【図１】現用系故障時の冗長切替においてＳＣＴＰコネクションを再接続するシーケンス図である。
【図２Ａ】ＳＣＴＰ ＤＡＴＡパケットのデータ構成図である。
【図２Ｂ】ＳＣＴＰ ＳＡＣＫパケットのデータ構成図である。
【図３】本発明を適用する通信システムの構成図である。
【図４】本実施の形態のゲートウェイ装置のハードウェア構成図である。
【図５】本実施の形態のゲートウェイ装置のソフトウェアプログラム構成図である。
【図６】スイッチブレードに対して現用系を転送先に登録するシーケンス図である。
【図７Ａ】他装置から現用系にＳＣＴＰコネクションを確立するシーケンス図である。
【図７Ｂ】他装置から現用系にＳＣＴＰコネクションを確立するシーケンス図の続きである。
【図８】各ＣＰＵブレードのヘッダ処理部が保持する転送先テーブルである。
【図９Ａ】図７Ｂ後においてＣＰＵブレード１のヘッダ処理部が保持するＳＣＴＰのパラメータ格納テーブルである。
【図９Ｂ】図７Ｂ後においてＣＰＵブレード２のヘッダ処理部が保持するＳＣＴＰのパラメータ格納テーブルである。
【図１０Ａ】現用系から他装置にＳＣＴＰコネクションを確立するシーケンス図である。
【図１０Ｂ】現用系から他装置にＳＣＴＰコネクションを確立するシーケンス図の続きである。
【図１１】他装置からＳＣＴＰ  ＤＡＴＡパケットを受信するシーケンス図である。
【図１２】現用系からＳＣＴＰ  ＤＡＴＡパケットを送信するシーケンス図である。
【図１３】現用系故障発生時においてスイッチブレードに対して予備系を転送先に登録するシーケンス図である。
【図１４】現用系故障発生時において他装置からＳＣＴＰ  ＤＡＴＡパケットを受信するシーケンス図である。
【図１５】現用系故障発生時において旧待機系からＳＣＴＰ  ＤＡＴＡパケットを送信するシーケンス図である。
【図１６】待機系故障発生時において待機系へパケット通知を停止するシーケンス図である。
【図１７】待機系故障発生時において他装置からＳＣＴＰ  ＤＡＴＡパケットを受信するシーケンス図である。
【図１８】待機系故障発生時において現用系からＳＣＴＰ  ＤＡＴＡパケットを送信するシーケンス図である。
【図１９Ａ】負荷分散のため新たにＣＰＵブレード３を追加するシーケンス図である。
【図１９Ｂ】負荷分散のため新たにＣＰＵブレード３を追加するシーケンス図の続きである。
【図２０】Ｌ４パラメータ通知メッセージのデータ構造である。
【図２１】図１９Ｂ後においてＣＰＵブレード３のヘッダ処理部が保持するＳＣＴＰのパラメータ格納テーブルである。
【図２２】図１９Ｂ後において他装置からＳＣＴＰ  ＤＡＴＡパケットを受信するシーケンス図である。
【図２３】図１９Ｂ後においてＣＰＵブレード３からＳＣＴＰ  ＤＡＴＡパケットを送信するシーケンス図である。
【図２４】現用系においてヘッダ処理部がＶＮＩＣから読込んだＳＣＴＰパケットを処理するフローチャート図である。
【図２５】現用系においてヘッダ処理部がＶＮＩＣ以外から受取ったＳＣＴＰパケットを処理するフローチャート図である。
【図２６】待機系においてヘッダ処理部がＶＮＩＣから読込したＳＣＴＰパケットを処理するフローチャート図である。
【図２７】待機系においてヘッダ処理部がＶＮＩＣ以外から受取ったＳＣＴＰパケットを処理するフローチャート図である。
【発明を実施するための最良の形態】
【００２０】
１．装置構成
はじめに、図３を用いて本発明が適用される通信システムの構成例を説明する。ここでは移動体通信システムを例にとる。移動体通信システムは、無線インタフェースを介してデータ通信を行う端末３４０と、端末を収容する無線アクセス網（３２０、３３０）と、加入者情報を管理し端末をサービス網に接続するユーザホーム網３１０と、端末に対してサービスを提供するサービス網３００とから構成される。
【００２１】
無線アクセス網３２０は、無線信号を有線信号に相互変換する基地局３２１ａ、３２１ｂと、アクセスゲートウェイ３２３と、移動管理サーバ３２２から構成される。無線アクセス網３３０も同様に基地局アクセスゲートウェイ３３１ａ、３３１ｂ、移動管理サーバ３３２で構成される。アクセスゲートウェイは、基地局から受信したユーザトラフィックをユーザホーム網に転送する装置である。また移動管理サーバは、端末の接続状況を管理するとともに、基地局とアクセスゲートウェイ間のデータパスを制御する装置である。
【００２２】
ユーザホーム網３１０は、サービス網ゲートウェイ３１１と、ポリシーサーバ３１２と、認証サーバ３１３から構成される。サービス網ゲートウェイは、アクセスゲートウェイから受信したユーザトラフィックを適切なサービス網に転送する装置である。また、ポリシーサーバは、サービス網ゲートウェイに対してユーザトラフィックの課金手段やＱｏＳを指示する装置である。また、認証サーバは、端末ユーザの加入者情報を管理する装置である。
【００２３】
サービス網３００には、端末に対してサービスを提供するアプリケーションサーバ３０１が接続される。
【００２４】
ＬＴＥでは、サービス網ゲートウェイ３１１とポリシーサーバ３１２の間、認証サーバ３１２と移動管理サーバ（３２２、３３２）の間、移動管理サーバ（３２２、３３２）と基地局（３２１ａ、３２１ｂ、３３１ａ、３３１ｂ）の間のシグナリングのＬ４プロトコルにＳＣＴＰが用いられる。本発明は、特にサービス網ゲートウェイ、移動管理サーバといったゲートウェイ装置への適用が最も効果的だが、これらに限らず、Ｌ４コネクションの端点となる装置であれば適用可能である。
【００２５】
次に、図４を用いて、本実施の形態のゲートウェイ装置構成例を説明する。ゲートウェイ装置４００は、シグナリング処理やユーザトラフィック転送処理を実現するＣＰＵブレード１とＣＰＵブレード２（４１０−１、４１０−２）と、レイヤ２（Ｌ２）スイッチ機能を備えるスイッチブレード４２０から構成される。
【００２６】
ＣＰＵブレード１は、メモリ４１１−１、ＣＰＵ４１２−１、ＩＦ（インタフェース）４１３−１、４１４−１、ＦＲＯＭ（フラッシュＲＯＭ）４１５−１を備える。ゲートウェイ装置としての機能を提供するためのソフトウェアプログラムはＦＲＯＭに記憶されており、装置の起動時にメモリに展開される。ＣＰＵは、メモリ内に展開されたソフトウェアプログラムを順次読み出して実行する。なお、ＩＦはイーサネット回線でスイッチブレード４２０に接続されており、ＩＦ４１３−１はデータ通信用に、ＩＦ４１４−１は装置制御用に使用される。  
スイッチブレード４２０は、ＩＦ４２１、４２２、４２３、４２４、４２６および４２７、スイッチ部４２５、メモリ４２８、ＣＰＵ４２９、ＦＲＯＭ４３０から構成される。ＩＦ４２１、４２２、４２３および４２４はＣＰＵブレード１とＣＰＵブレード２（４１０−１、４１０−２）に、ＩＦ４２６、４２７は外部のパケット網に接続されており、スイッチ部はこれらの間でパケットを中継する。また、メモリ、ＣＰＵ、ＦＲＯＭは、スイッチ部を制御、管理するのに用いられる。
【００２７】
図５は、ＣＰＵブレード１およびＣＰＵブレード２（４１０−１、４１０−２）のメモリ４１１−１、４１１−２に展開されるソフトウェアプログラムの構成図である。アプリケーションプログラム５０３−１、５０３−２は、Ｌ４コネクションを利用して特定のサービスを提供する。ただし、本実施の形態のゲートウェイ装置は冗長構成を形成しており、アプリケーションプログラム５０３−１、５０３−２についても、一方が現用状態として動作中は、他方は待機状態となる。Ｌ４スタック５０２−１、５０２−２はＬ４コネクションを管理する。ＶＮＩＣ（Ｖｉｒｔｕａｌ  Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ）５０１−１、５０１−２は他のプログラムからデータの読み書きを可能とする仮想ネットワークインタフェースである。ヘッダ処理部５００−１、５００−２はＬ４コネクションのパケットヘッダの書き換えを行う。
【００２８】
ヘッダ処理部は、Ｒａｗソケットを用いてスイッチブレード４２０を介して外部のパケット網とパケットを送受信する。また、ヘッダ処理部は、ＴＩＰＣ（Ｔｒａｎｓｐａｒｅｎｔ  Ｉｎｔｅｒ−ｐｒｏｃｅｓｓ  Ｃｏｍｍｕｎｉｃａｔｉｏｎ）などの通信プロトコルを用いてスイッチブレード４２０を介して、他のＣＰＵブレードのヘッダ処理部とデータのやり取りを行う。さらに、ヘッダ処理部は、Ｌ４コネクションの冗長化に必要となるパラメータを格納するパラメータ格納テーブル（５１０−１、５１０−２）と、受信するＬ４コネクションのパケットをどのＣＰＵブレードのヘッダ処理部に転送するかを決定する転送先テーブル（５１１−１、５１１−２）をもつ。パラメータ格納テーブルと転送先テーブルの詳細な説明については、後述の２．処理（シーケンス）の中で行う。
【００２９】
本実施の形態のゲートウェイ装置では、アプリケーションとヘッダ処理部はユーザ領域（５２０−１、５２０−２）に、Ｌ４スタックとＶＮＩＣはカーネル領域（５２１−１、５２１−２）にそれぞれ置かれる。このような構成を採ることで、本実施の形態のゲートウェイ装置では、ＯＳに改造を加えることなく、Ｌ４コネクションの冗長化を実現できる。
【００３０】
以上が、本実施の形態の装置構成である。
２．処理（シーケンス）
本実施の形態のゲートウェイ装置において、Ｌ４コネクションの冗長化処理について、３つの手順を説明する。具体的には、ＳＣＴＰの場合を例にとり、（Ａ）：通常状態におけるパケット送受信と、（Ｂ）：故障発生時におけるパケット送受信と、（Ｃ）：負荷分散のために新たに現用系を追加する際のパケット送受信の手順である。
（Ａ）通常状態におけるＳＣＴＰパケット送受信
故障未発生時の通常状態において、ＳＣＴＰコネクションを確立し、ＤＡＴＡパケットを送受信する流れについて説明する。
（Ａ−１）ＳＣＴＰコネクション確立
図６は、現用系がパケットを受信するための前準備の手順である。まず、装置の管理者がＣＰＵブレード１（４１０−１）を現用系に設定する（６００）。また、ＣＰＵブレード２（４１０−２）を待機系に設定する（６０１）。その際、ＣＰＵブレード１は、スイッチブレード４２０に対してＧｒａｔｕｉｔｏｕｓ  ＡＲＰパケットを送信し、ＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）アドレスをスイッチブレードに登録する（６０２）。こうすることで、ゲートウェイ装置宛に送られてきたパケットがＣＰＵブレード１に転送されるようになる。
【００３１】
図７Ａ、図７Ｂは、外部の他装置からＳＣＴＰコネクションの確立要求があった際の処理手順である。まず、図７Ａから説明する。図６の手順後の状態であり、ＣＰＵブレード１（４１０−１）が現用系、ＣＰＵブレード２（４１０−２）が待機系である。したがって、アプリケーション５０３−１は実際にサービスを提供する現用状態、アプリケーション５０３−２は現用側の処理をバックアップする待機状態として動作する。どちらのアプリケーションも、それぞれのＣＰＵブレードで稼動するＬ４スタック（５０２−１、５０２−２）に対して待ち受け登録（Ｌｉｓｔｅｎ）をしておく（７００、７０１）。スイッチブレード４２０が、外部の他装置からＳＣＴＰコネクション確立要求であるＩＮＩＴパケットを受信する（７１０）。スイッチブレードはＣＰＵブレード１にＩＮＩＴパケットを転送し、ヘッダ処理部５００−１がそのＩＮＩＴパケットを受信する（７０２）。ここで、ヘッダ処理部は、自身が保持する転送先テーブル５１１−１を参照する。
【００３２】
図８は、ＣＰＵブレード１のヘッダ処理部が保持する転送先テーブル５１１−１のデータ構造である。転送先テーブルは、通信相手のＩＰアドレスごとに作成される。転送先テーブルでは、自分のポート番号８００と相手のポート番号８０１をインデックスとし、転送先８０２を記述する。本例では、自分のポート番号が５０００番で相手のポート番号が１１１１１番であるエントリに対して、転送先が＜ｌｏｃａｌ＞と＜ＣＰＵブレード２＞に設定されている。これは、自分のポート番号が５０００番で相手のポート番号が１１１１１番であるパケットを、ＣＰＵブレード１内で動作するアプリケーションと、ＣＰＵブレード２のヘッダ処理部に転送することを意味する。転送先テーブルは、装置の管理者があらかじめ設定しておく。
【００３３】
図７Ａに戻る。ヘッダ処理部５００−１は、転送先テーブル５１１−１を参照して、ＩＮＩＴパケットをＣＰＵブレード２のヘッダ処理部５００−２に通知する（７１２）。この際、実際にはスイッチブレードを介してパケットを通知するが、シーケンスの記述では省略する。ヘッダ処理部５００−２は、ＩＮＩＴパケットからパラメータを抽出し、パラメータ格納テーブルに記憶する（７１３）。
【００３４】
図９Ａ、図９Ｂは、それぞれＣＰＵブレード１と２がもつパラメータ格納テーブル（５１０−１、５１０−２）である。パラメータ格納テーブルは、通信相手のＩＰアドレスごとに作成される。パラメータ格納テーブルでは、自分のポート番号９００と相手のポート番号９０１をインデックスとし、自分の検証タグ９０２と、自分のシーケンス番号９０３と、書換用の検証タグ９０４と、書換用のシーケンス番号９０５と、通信相手の検証タグ９０６と、通信相手のシーケンス番号９０７を記述する。ここで、書換用の検証タグ９０４と書換用のシーケンス番号９０５には、ＳＣＴＰコネクション確立時に現用系であったＣＰＵブレードのＬ４スタックが作成した検証タグとシーケンス番号の値が格納される。
【００３５】
図７Ａに戻る。ヘッダ処理部５００−２は、ＩＮＩＴパケットに記述されている通信相手の検証タグとシーケンス番号の初期値を抽出し、パラメータ格納テーブル５１０−２にエントリを作成して、通信相手の検証タグ９０６と通信相手のシーケンス番号９０７に上記パラメータを記憶する。ヘッダ処理部は５００−２は、自身が保持する転送先テーブルを参照して、ＶＮＩＣ５０１−２を介してＬ４スタック５０２−２にＩＮＩＴパケットを渡す（７１４、７１５）。Ｌ４スタックは、応答としてＩＮＩＴ−ＡＣＫパケットを返す（７１６）。ヘッダ処理５００−２は、ＶＮＩＣ５０１−２を介して、ＩＮＩＴ−ＡＣＫパケットを受け取る（７１７）。ヘッダ処理部は、ＩＮＩＴ−ＡＣＫパケットに記述されている自分の検証タグとシーケンス番号の初期値を抽出し、自分の検証タグ９０２と自分のシーケンス番号９０３に上記パラメータを記憶する（７１８）。このＩＮＩＴ−ＡＣＫパケットは、待機系側のＬ４スタックが作成したものなので、通信相手には送信すべきものではない。そのため、ヘッダ処理部５００−２はＩＮＩＴ−ＡＣＫパケットを破棄する（７１９）。
【００３６】
一方、ＣＰＵブレード１のヘッダ処理部５００−１でもＩＮＩＴパケットに記述されている通信相手の検証タグとシーケンス番号の初期値を抽出し、パラメータ格納テーブル５１０−１にエントリを作成して、通信相手の検証タグ９０６と通信相手のシーケンス番号９０７に上記パラメータを記憶する（７２０）。その後、ＶＮＩＣ５０１−１を介してＬ４スタック５０２−１にＩＮＩＴパケットを渡す（７２１、７２２）。Ｌ４スタックは、応答としてＩＮＩＴ−ＡＣＫパケットを返す（７２３）。ヘッダ処理５００−１は、ＶＮＩＣ５０１−１を介して、ＩＮＩＴ−ＡＣＫパケットを受け取る（７２４）。ヘッダ処理部５００−１は、転送先テーブルを参照し、ＩＮＩＴ−ＡＣＫパケットをヘッダ処理部５００−２に通知する（７２５）。ヘッダ処理部５００−２は、ＩＮＩＴ−ＡＣＫパケットに記述されている現用系の検証タグとシーケンス番号初期値を抽出し、パラメータ格納テーブル５１０−２の書換用の検証タグ９０４と書換用のシーケンス番号９０５に記憶する（７２６）。一方、ＣＰＵブレード１のヘッダ処理部５００−１も、ＩＮＩＴ−ＡＣＫパケットに記述されている自分の検証タグとシーケンス番号初期値を抽出し、パラメータ格納テーブル５１０−１の自分の検証タグ９０２と自分のシーケンス番号９０３に記憶する（７２７）。なお、現用系であるＣＰＵブレード１に保持されるパラメータ格納テーブル５１０−１の書換用の検証タグ９０４と書換用のシーケンス番号９０５のカラムは空のままで、何も格納されない。その後、ＩＮＩＴ−ＡＣＫパケットをスイッチブレード４２０に転送する（７２８）。スイッチブレードは、通信相手にＩＮＩＴ−ＡＣＫパケットを送信する（７２９）。この時点で、ヘッダ処理部５００−１と５００−２のそれぞれが保持するパラメータ転送テーブル５１０−１と５１０−２は、図９Ａと図９Ｂに示したエントリのようになっている。
【００３７】
図７Ｂに進む。スイッチブレード４２０は、通信相手からＣＯＯＫＩＥ−ＥＣＨＯパケットを受信し（７３０）、ＣＰＵブレード１に転送する。ヘッダ処理部５００−１は、ＣＯＯＫＩＥ−ＥＣＨＯパケットを受け取る（７３１）。ヘッダ処理部５００−１は、転送先テーブルを参照して、ＣＯＯＫＩＥ−ＥＣＨＯパケットをヘッダ処理部５００−２に通知する（７３２）。ここで、このＣＯＯＫＩＥ−ＥＣＨＯパケットのヘッダには現用系であるＣＰＵブレード１の検証タグが記述されおり、ＣＰＵブレード２のＬ４スタック５０２−２はそのままではパケットを破棄してしまう。そのため、ヘッダ処理部５００−２は、図９Ｂに示したパラメータ格納テーブル５１０−２のエントリの自分の検証タグ９０２を参照し、ＣＯＯＫＩＥ−ＥＣＨＯパケットのヘッダの検証タグを、参照した値に書き換える（７３３）。その後、ヘッダ処理部は、ＶＮＩＣ５０１−２を介してＬ４スタック５０２−２にＣＯＯＫＩＥ−ＥＣＨＯパケットを渡す（７３４、７３５）。Ｌ４スタックは、応答としてＣＯＯＫＩＥ−ＡＣＫパケットを返す（７３６）。ヘッダ処理５００−２は、ＶＮＩＣ５０１−２を介して、ＣＯＯＫＩＥ−ＡＣＫパケットを受け取る（７３７）。このＣＯＯＫＩＥ−ＡＣＫパケットは、待機系側のＬ４スタックが作成したものなので、通信相手には送信すべきものではない。そのため、ヘッダ処理部５００−２はＣＯＯＫＩＥ−ＡＣＫパケットを破棄する（７３８）。この後、Ｌ４スタック５０２−２は、待ち受け登録をしたアプリケーション５０３−２に対して、このＳＣＴＰコネクションのソケット番号を通知し（７３９）、コネクション確立状態に遷移する（７４０）。
【００３８】
一方、ＣＰＵブレード１のヘッダ処理部５００−１も、受け取ったＣＯＯＫＩＥ−ＥＣＨＯパケットに対して、パラメータ格納テーブル５１０−１を参照する。しかしながら、図９Ａに示したように、パラメータ格納テーブル５１０−１のエントリで、書換用の検証タグの項には何も記述がないので、ヘッダ処理部５００−１はパケットヘッダに対して操作を行わない。ヘッダ処理部５００−１は、ＶＮＩＣ５０１−１を介してＬ４スタック５０２−１にＣＯＯＫＩＥ−ＥＣＨＯパケットを渡す（７５０、７５１）。Ｌ４スタックは、応答としてＣＯＯＫＩＥ−ＡＣＫパケットを返す（７５２）。ヘッダ処理５００−１は、ＶＮＩＣ５０１−１を介して、ＣＯＯＫＩＥ−ＡＣＫパケットを受け取る（７５３）。ここで、Ｌ４スタック５０２−１は、待ち受け登録をしたアプリケーション５０３−１に対して、このＳＣＴＰコネクションのソケット番号を通知し（７５４）、コネクション確立状態に遷移する（７５５）。その後、ヘッダ処理部５００−１は、ＣＯＯＫＩＥ−ＡＣＫパケットをスイッチブレード４２０に転送する（７５６）。スイッチブレードは、通信相手にＣＯＯＫＩＥ−ＡＣＫパケットを送信する（７５７）。
【００３９】
以上の手順により、他装置とゲートウェイ装置間のＳＣＴＰコネクション確立が完了する。
【００４０】
次に、図７Ａ、図７Ｂの場合とは反対にゲートウェイ装置の現用系であるＣＰＵブレード１から外部の他装置に対してＳＣＴＰコネクションの確立要求を行う際の処理手順を、図１０Ａ、図１０Ｂを用いて説明する。まず、図１０Ａから説明する。ＣＰＵブレード１（４１０−１）のアプリケーション５０３−１が、Ｌ４スタック５０２−１に対して接続要求（Ｃｏｎｎｅｃｔ）を行う（１０００）。Ｌ４スタックは、ＩＮＩＴパケットをＶＮＩＣ５０１−１に渡す（１００１）。ヘッダ処理５００−１は、ＶＮＩＣを介してＩＮＩＴパケットを受け取る（１００２）。ヘッダ処理部は、転送先テーブルを参照して、ＩＮＩＴパケットをＣＰＵブレード２のヘッダ処理部５００−２に通知する（１００３）。ヘッダ処理部５００−１は同時に、ＩＮＩＴパケットに記述されている自分の検証タグとシーケンス番号の初期値を抽出し、パラメータ格納テーブル５１０−１にエントリを作成して、自分の検証タグ９０２と自分のシーケンス番号９０３に上記パラメータを記憶する（１００４）。その後、ＩＮＩＴパケットをスイッチブレード４２０に転送する（１００５）。スイッチブレードは、通信相手にＩＮＩＴパケットを送信する（１００６）。
【００４１】
一方、ＣＰＵブレード２のヘッダ処理部５００−２も、ＩＮＩＴパケットに記述されている現用系の検証タグとシーケンス番号初期値を抽出し、パラメータ格納テーブル５１０−２にエントリを作成して、書換用の検証タグ９０４と書換用のシーケンス番号９０５に記憶する（１００７）。その後、ヘッダ処理部は、現用系であるＣＰＵブレード１のアプリケーション５０３−１から接続要求があったことを通知し、待機系であるＣＰＵブレード２のアプリケーション５０３−２が同様に接続要求を行うことを促す（１００８）。すると、アプリケーション５０３−２は、Ｌ４スタック５０２−２に対して接続要求（Ｃｏｎｎｅｃｔ）を行う（１００９）。Ｌ４スタックはＩＮＩＴパケットをＶＮＩＣ５０１−２に渡す（１０１０）。ヘッダ処理５００−２は、ＶＮＩＣを介してＩＮＩＴパケットを受け取る（１０１１）。ヘッダ処理部は、ＩＮＩＴパケットに記述されている自分の検証タグとシーケンス番号の初期値を抽出し、パラメータ格納テーブル５１０−２に自分の検証タグ９０２と自分のシーケンス番号９０３に上記パラメータを記憶する（１０１２）。このＩＮＩＴパケットは、待機系側のＬ４スタックが作成したものなので、通信相手には送信すべきものではない。そのため、ヘッダ処理部５００−２はＩＮＩＴパケットを破棄する（１０１３）。
【００４２】
その後、スイッチブレード４２０が、通信相手の外部の他装置からＩＮＩＴ−ＡＣＫパケットを受信する（１０２０）。スイッチブレードはＣＰＵブレード１にＩＮＩＴ−ＡＣＫパケットを転送し、ヘッダ処理部５００−１がそのＩＮＩＴ−ＡＣＫパケットを受信する（１０２１）。ヘッダ処理部は、転送先テーブルを参照して、ＩＮＩＴ−ＡＣＫパケットをＣＰＵブレード２のヘッダ処理部５００−２に通知する（１０２２）。ヘッダ処理部５００−１は同時に、ＩＮＩＴ−ＡＣＫパケットに記述されている通信相手の検証タグとシーケンス番号の初期値を抽出し、パラメータ格納テーブル５１０−１に、通信相手の検証タグ９０６と通信相手のシーケンス番号９０７に上記パラメータを記憶する（１０２３）。その後、ＶＮＩＣ５０１−１を介してＬ４スタック５０２−１にＩＮＩＴ−ＡＣＫパケットを渡す（１０２４、１０２５）。
【００４３】
一方、ＣＰＵブレード２のヘッダ処理部５００−２は、１０２２のＩＮＩＴ−ＡＣＫパケット通知を受けた後、パラメータ格納テーブル５１０−２のエントリの自分の検証タグ９０２を参照し、ＩＮＩＴ−ＡＣＫパケットのヘッダの検証タグを、参照した値に書き換える（１０２６）。これは、ＩＮＩＴ−ＡＣＫパケットのヘッダの検証タグには現用系のものが記述されており、そのままではＣＰＵブレード２のＬ４スタック５０２−２がパケットを破棄してしまうからである。その後、ヘッダ処理部５００−２は、ＩＮＩＴ−ＡＣＫパケットに記述されている通信相手の検証タグとシーケンス番号の初期値を抽出し、パラメータ転送テーブル５１０−２の通信相手の検証タグ９０６と通信相手のシーケンス番号９０７に上記パラメータを記憶する（１０２７）。そして、ヘッダ処理部は、ＶＮＩＣ５０１−２を介してＬ４スタック５０２−２にＩＮＩＴ−ＡＣＫパケットを渡す（１０２８，１０２９）。この時点で、図７Ａ，図７Ｂの場合と同様に、ヘッダ処理部５００−１と５００−２のそれぞれが保持するパラメータ転送テーブル５１０−１と５１０−２は、図９Ａと図９Ｂに示したエントリのようになる。
【００４４】
図１０Ｂに進む。ＣＰＵブレード１のＬ４スタック５０２−１は、応答としてＣＯＯＫＩＥ−ＥＣＨＯパケットを返す（１０３０）。ヘッダ処理５００−１は、ＶＮＩＣ５０１−１を介して、ＣＯＯＫＩＥ−ＥＣＨＯパケットを受け取る（１０３１）。ヘッダ処理部５００−１は、受け取ったＣＯＯＫＩＥ−ＥＣＨＯパケットに対して、パラメータ格納テーブル５１０−１を参照する。しかしながら、図９Ａに示したように、パラメータ格納テーブル５１０−１のエントリで、書換用の検証タグの項には何も記述がないので、ヘッダ処理部５００−１はパケットヘッダに対して操作を行わない。その後、ヘッダ処理部は、ＣＯＯＫＩＥ−ＥＣＨＯパケットをスイッチブレード４２０に転送する（１０３２）。スイッチブレードは、通信相手にＣＯＯＫＩＥ−ＥＣＨＯパケットを送信する（１０３３）。
【００４５】
一方、ＣＰＵブレード２のＬ４スタック５０２−２も、応答としてＣＯＯＫＩＥ−ＥＣＨＯパケットを返す（１０３４）。ヘッダ処理５００−２は、ＶＮＩＣ５０１−２を介して、ＣＯＯＫＩＥ−ＥＣＨＯパケットを受け取る（１０３５）。このＣＯＯＫＩＥ−ＥＣＨＯパケットは、待機系側のＬ４スタックが作成したものなので、通信相手には送信すべきものではない。そのため、ヘッダ処理部５００−２はＣＯＯＫＩＥ−ＥＣＨＯパケットを破棄する（１０３６）。
【００４６】
その後、スイッチブレード４２０が、通信相手の外部の他装置からＣＯＯＫＩＥ−ＡＣＫパケットを受信する（１０４０）。スイッチブレードはＣＰＵブレード１にＣＯＯＫＩＥ−ＡＣＫパケットを転送し、ヘッダ処理部５００−１がそのＣＯＯＫＩＥ−ＡＣＫパケットを受信する（１０４１）。ヘッダ処理部は、転送先テーブルを参照して、ＣＯＯＫＩＥ−ＡＣＫパケットをＣＰＵブレード２のヘッダ処理部５００−２に通知する（１０４２）。ヘッダ処理部５００−１は同時に、ＶＮＩＣ５０１−１を介してＬ４スタック５０２−１にＣＯＯＫＩＥ−ＡＣＫパケットを渡す（１０４３、１０４４）。Ｌ４スタック５０２−１は、接続要求をしたアプリケーション５０３−１に対して、このＳＣＴＰコネクションのソケット番号を通知し（１０４５）、コネクション確立状態に遷移する（１０４６）。
【００４７】
一方、ＣＰＵブレード２のヘッダ処理部５００−２は、１０４２のＣＯＯＫＩＥ−ＡＣＫパケット通知を受けた後、パラメータ格納テーブル５１０−２のエントリの自分の検証タグ９０２を参照し、ＣＯＯＫＩＥ−ＡＣＫパケットのヘッダの検証タグを、参照した値に書き換える（１０４７）。これは、ＣＯＯＫＩＥ−ＡＣＫパケットのヘッダの検証タグには現用系のものが記述されており、そのままではＣＰＵブレード２のＬ４スタック５０２−２がパケットを破棄してしまうからである。その後、ヘッダ処理部５００−２は、ＶＮＩＣ５０１−２を介してＬ４スタック５０２−２にＣＯＯＫＩＥ−ＡＣＫパケットを渡す（１０４８，１０４９）。Ｌ４スタック５０２−２は、接続要求をしたアプリケーション５０３−２に対して、このＳＣＴＰコネクションのソケット番号を通知し（１０５０）、コネクション確立状態に遷移する（１０５１）。
以上の手順により、図７Ａ、図７Ｂの場合と同様に、他装置とゲートウェイ装置間のＳＣＴＰコネクション確立が完了する。
（Ａ−２）ＳＣＴＰ  ＤＡＴＡパケット送受信
次に、図１１を用いて、ＳＣＴＰコネクションを確立した通信相手である外部の他装置から、ＳＣＴＰ  ＤＡＴＡパケットを受信する処理手順を説明する。スイッチブレード４２０は、通信相手からＤＡＴＡパケットを受信し（１１００）、ＣＰＵブレード１に転送する。ヘッダ処理部５００−１は、ＤＡＴＡパケットを受け取る（１１０１）。ヘッダ処理部５００−１は、転送先テーブルを参照して、ＤＡＴＡパケットをヘッダ処理部５００−２に通知する（１１０２）。ヘッダ処理部５００−１は同時に、受け取ったＤＡＴＡパケットに対して、パラメータ格納テーブル５１０−１を参照する。しかしながら、図９Ａに示したように、パラメータ格納テーブル５１０−１のエントリで、書換用の検証タグの項には何も記述がないので、ヘッダ処理部５００−１はパケットヘッダに対して操作を行わない。その後、ヘッダ処理部は、自身が保持するパラメータ格納テーブル５１０−１のエントリの通信相手のシーケンス番号９０７を１だけ更新する。そして、ヘッダ処理部は、ＶＮＩＣ５０１−１を介してＬ４スタック５０２−１にＤＡＴＡパケットを渡す（１１０３、１１０４）。Ｌ４スタックはＤＡＴＡパケットのペイロード部分にあるアプリケーションデータを抽出し、アプリケーション５０３−１に渡す（１１０５）。Ｌ４スタックは同時に、応答としてＳＡＣＫパケットを返す（１１０６）。ヘッダ処理５００−１は、ＶＮＩＣ５０１−１を介して、ＳＡＣＫパケットを受け取る（１１０７）。ヘッダ処理部は、ＳＡＣＫパケットをスイッチブレード４２０に転送する（１１０８）。スイッチブレードは、通信相手にＳＡＣＫパケットを送信する（１１０９）。
【００４８】
一方、ＣＰＵブレード２のヘッダ処理部５００−２は、１１０２のＤＡＴＡパケット通知を受けた後、パラメータ格納テーブル５１０−２のエントリの自分の検証タグ９０２を参照し、図２Ａに示したＤＡＴＡパケットのヘッダの検証タグ２０３を、参照した値に書き換える（１１１０）。これは、ＤＡＴＡパケットのヘッダの検証タグには現用系のものが記述されており、そのままではＣＰＵブレード２のＬ４スタック５０２−２がパケットを破棄してしまうからである。その後、ヘッダ処理部は、自身が保持するパラメータ格納テーブル５１０−２のエントリの通信相手のシーケンス番号９０７を１だけ増やして更新する。そして、ヘッダ処理部は、ＶＮＩＣ５０１−２を介してＬ４スタック５０２−２にＤＡＴＡパケットを渡す（１１１１、１１１２）。Ｌ４スタックはＤＡＴＡパケットのペイロード部分にあるアプリケーションデータを抽出し、アプリケーション５０３−２に渡す（１１１３）。こうすることで、待機系側のアプリケーション５０３−２も現用系と同様のアプリケーションデータを受信することができ、アプリケーション間の同期も可能になる。Ｌ４スタック５０２−２は同時に、応答としてＳＡＣＫパケットを返す（１１１４）。ヘッダ処理５００−２は、ＶＮＩＣ５０１−２を介して、ＳＡＣＫパケットを受け取る（１１１５）。このＳＡＣＫパケットは、待機系側のＬ４スタックが作成したものなので、通信相手には送信すべきものではない。そのため、ヘッダ処理部５００−２はＳＡＣＫパケットを破棄する（１１１６）。
【００４９】
以上の手順を踏むことで、外部の他装置から受信したＤＡＴＡパケットを現用系と待機系に入力し、適当なヘッダの値に書き換えることで、現用系と待機系のＬ４スタックでＳＣＴＰパケットを並列処理できるようになる。すなわち、ヘッダ処理部と併せることで、ＯＳに改造を加えることなく、現用系と待機系のＬ４スタックが正しい状態遷移をとることができる。
【００５０】
次に、図１１の場合とは反対にゲートウェイ装置の現用系であるＣＰＵブレード１から、ＳＣＴＰコネクションを確立した通信相手である外部の他装置に対して、ＳＣＴＰ  ＤＡＴＡパケットを送信する処理手順を、図１２を用いて説明する。ＣＰＵブレード１のアプリケーション５０３−１が、Ｌ４スタック５０２−１に対してアプリケーションデータの送信を要求する（１２００）。Ｌ４スタックは、ＤＡＴＡパケットを作成し、ＶＮＩＣ５０１−１に渡す（１２０１）。ヘッダ処理５００−１は、ＶＮＩＣを介してＤＡＴＡパケットを受け取る（１２０２）。ヘッダ処理部は、転送先テーブルを参照して、ＤＡＴＡパケットをＣＰＵブレード２のヘッダ処理部５００−２に通知する（１２０３）。ヘッダ処理部５００−１は同時に、受け取ったＤＡＴＡパケットに対して、パラメータ格納テーブル５１０−１を参照する。しかしながら、図９Ａに示したように、パラメータ格納テーブル５１０−１のエントリで、書換用の検証タグの項には何も記述がないので、ヘッダ処理部５００−１はパケットヘッダに対して操作を行わない。その後、ヘッダ処理部は、自身が保持するパラメータ格納テーブル５１０−１のエントリの自分のシーケンス番号９０３を１だけ増やして更新する。そして、ヘッダ処理部は、ＤＡＴＡパケットをスイッチブレード４２０に転送する（１２０４）。スイッチブレードは、通信相手にＤＡＴＡパケットを送信する（１２０５）。
【００５１】
一方、ＣＰＵブレード２のヘッダ処理部５００−２は、１２０３のＤＡＴＡパケット通知を受けた後、現用系であるＣＰＵブレード１のアプリケーション５０３−１からアプリケーション送信要求があったことを通知し、待機系であるＣＰＵブレード２のアプリケーション５０３−２が同様のアプリケーションデータ送信要求を行うことを促す（１２０６）。こうすることで、待機系側のアプリケーション５０３−２は、現用系側のアプリケーション５０３−１がどのようなアプリケーションデータを送信したのかを知ることができ、アプリケーション間の同期も可能になる。アプリケーション５０３−２は、Ｌ４スタック５０２−２に対してアプリケーションデータの送信要求を行う（１２０７）。Ｌ４スタックは、ＤＡＴＡパケットを作成し、ＶＮＩＣ５０１−２に渡す（１２０８）。ヘッダ処理５００−２は、ＶＮＩＣを介してＤＡＴＡパケットを受け取る（１２０９）。ヘッダ処理部は、自身が保持するパラメータ格納テーブル５１０−２のエントリの自分のシーケンス番号９０３と、現用系を示す書換用のシーケンス番号９０５をそれぞれ１だけ増やして更新する。このＤＡＴＡパケットは、待機系側のＬ４スタックが作成したものなので、通信相手には送信すべきものではない。そのため、ヘッダ処理部５００−２はＤＡＴＡパケットを破棄する（１２１０）。
【００５２】
その後、スイッチブレード４２０が、通信相手の外部の他装置からＳＡＣＫパケットを受信する（１２２０）。スイッチブレードはＣＰＵブレード１にＳＡＣＫパケットを転送し、ヘッダ処理部５００−１がそのＳＡＣＫパケットを受信する（１２２１）。ヘッダ処理部は、転送先テーブルを参照して、ＳＡＣＫパケットをＣＰＵブレード２のヘッダ処理部５００−２に通知する（１２２２）。ヘッダ処理部５００−１は同時に、ＶＮＩＣ５０１−１を介してＬ４スタック５０２−１にＳＡＣＫパケットを渡す（１２２３、１２２４）。
【００５３】
一方、ＣＰＵブレード２のヘッダ処理部５００−２は、１２２２のＳＡＣＫパケット通知を受けた後、パラメータ格納テーブル５１０−２のエントリの自分の検証タグ９０２と自分のシーケンス番号９０３を参照し、図２Ｂに示したＳＡＣＫパケットのヘッダにある検証タグ２１３と受信ＤＡＴＡパケットのシーケンス番号２１４を、参照した値に書き換える（１２２５）。これは、ＳＡＣＫパケットのヘッダの検証タグには現用系のものが、また受信ＤＡＴＡパケットのシーケンス番号には現用系が送信したＤＡＴＡパケットのシーケンス番号が記述されており、そのままではＣＰＵブレード２のＬ４スタック５０２−２がパケットを破棄してしまうからである。その後、ヘッダ処理部５００−２は、ＶＮＩＣ５０１−２を介してＬ４スタック５０２−２にＳＡＣＫパケットを渡す（１２２６、１２２７）。
【００５４】
以上の手順を踏むことで、現用系側のアプリケーションから外部の他装置に送信するＤＡＴＡパケットを現用系と待機系で作り出し、また応答であるＳＡＣＫパケットを現用系と待機系に入力して適当なヘッダの値に書き換えて、現用系と待機系のＬ４スタックでＳＣＴＰパケットを並列処理できるようになる。すなわち、ヘッダ処理部と併せることで、ＯＳに改造を加えることなく、現用系と待機系のＬ４スタックが正しい状態遷移をとることができる。
【００５５】
また、本実施例では、スイッチブレードが通信相手からＳＣＴＰパケットを受信した場合、先に現用系に転送するように設定しているが、実際には先に待機系に転送するようにすることも可能である。
（Ｂ）故障発生時におけるＳＣＴＰパケット送受信
次に、前記（Ａ）の手順を満たしておくことで、現用系もしくは待機系に故障が発生した場合でも、Ｌ４コネクションを切断することなく、通信を継続できることを説明する。
（Ｂ−１）現用系故障発生時におけるＳＣＴＰ  ＤＡＴＡパケット送受信
図１３は、現用系であるＣＰＵブレード１（４１０−１）に故障が発生した際に、待機系であるＣＰＵブレード２（４１０−２）がパケットを受信するための前準備の手順である。ＣＰＵブレード１に故障が発生する（１３００）。ＣＰＵブレード２は、その故障を検知する（１３０１）。すると、ＣＰＵブレード２では、ヘッダ処理部が保持する転送先テーブルの各エントリにある転送先から、＜ＣＰＵブレード１＞という記述を削除し、転送を停止する（１３０２）。ＣＰＵブレード２は、スイッチブレード４２０に対してＧｒａｔｕｉｔｏｕｓ  ＡＲＰパケットを送信し、ＭＡＣアドレスをスイッチブレードに登録する（１３０４）。こうすることで、ゲートウェイ装置宛に送られてきたパケットがＣＰＵブレード２に転送されるようになる。その後、ＣＰＵブレード２は、現用系として動作するように、内部で動くアプリケーションを現用状態に移行する（１３０５）。なお、本実施の形態のゲートウェイ装置のように、あらかじめ待機系側のアプリケーションにすべてのアプリケーションデータを転送しておくことで、冗長切替時にアプリケーション情報の引継ぎを行わなくて済む。
【００５６】
次に、図１４を用いて、ＳＣＴＰコネクションを確立した通信相手である外部の他装置から、ＳＣＴＰ  ＤＡＴＡパケットを受信する処理手順を説明する。スイッチブレード４２０は、通信相手からＤＡＴＡパケットを受信し（１４００）、ＣＰＵブレード２に転送する。ヘッダ処理部５００−２は、ＤＡＴＡパケットを受け取る（１４０１）。ヘッダ処理部５００−１は、受け取ったＤＡＴＡパケットに対して、パラメータ格納テーブル５１０−２のエントリの自分の検証タグ９０２を参照し、図２Ａに示したＤＡＴＡパケットのヘッダの検証タグ２０３を、参照した値に書き換える（１４０２）。これは、ＤＡＴＡパケットのヘッダの検証タグには現用系であったＣＰＵブレード１のものが記述されており、そのままではＣＰＵブレード２のＬ４スタック５０２−２がパケットを破棄してしまうからである。その後、ヘッダ処理部は、自身が保持するパラメータ格納テーブル５１０−２のエントリの通信相手のシーケンス番号９０７を１だけ増やして更新する。そして、ヘッダ処理部は、ＶＮＩＣ５０１−２を介してＬ４スタック５０２−２にＤＡＴＡパケットを渡す（１４０３、１４０４）。Ｌ４スタックは、ＤＡＴＡパケットのペイロード部分にあるアプリケーションデータを抽出し、アプリケーション５０３−２に渡す（１４０５）。Ｌ４スタックは同時に、応答としてＳＡＣＫパケットを返す（１４０６）。ヘッダ処理５００−２は、ＶＮＩＣ５０１−２を介して、ＳＡＣＫパケットを受け取る（１４０７）。このＳＡＣＫパケットのヘッダ書換は不要である。ヘッダ処理部は、ＳＡＣＫパケットをスイッチブレード４２０に転送する（１４０８）。スイッチブレードは、通信相手にＳＡＣＫパケットを送信する（１４０９）。
【００５７】
次に、図１５を用いて、ゲートウェイ装置の現在の現用系であるＣＰＵブレード２から、ＳＣＴＰコネクションを確立した通信相手である外部の他装置に対して、ＳＣＴＰ  ＤＡＴＡパケットを送信する処理手順を説明する。ＣＰＵブレード２のアプリケーション５０３−２が、Ｌ４スタック５０２−２に対してアプリケーションデータの送信を要求する（１５００）。Ｌ４スタックは、ＤＡＴＡパケットを作成し、ＶＮＩＣ５０１−２に渡す（１５０１）。ヘッダ処理５００−２は、ＶＮＩＣを介してＤＡＴＡパケットを受け取る（１５０２）。ヘッダ処理部は、自身が保持するパラメータ格納テーブル５１０−２のエントリの自分のシーケンス番号９０３と、書換用のシーケンス番号９０５をそれぞれ１だけ増やして更新する。ヘッダ処理部は同時に、パラメータ格納テーブルのエントリの書換用のシーケンス番号９０５を参照し、図２Ａに示したＤＡＴＡパケットのヘッダのシーケンス番号２０４を、参照した値に書き換える（１５０３）。これは、ＤＡＴＡパケットのヘッダのシーケンス番号にはＣＰＵブレード２のものが記述されているからである。ＳＣＴＰコネクションが確立されたままなので、通信相手はＤＡＴＡパケットのシーケンス番号にはＣＰＵブレード１のもの、すなわち参照している書換用のシーケンス番号９０５の値が記述されていることを期待している。そのため、そのままでは通信相手がパケットを破棄してしまう。ヘッダ処理部５００−２は、ヘッダを書き換えた後、ＤＡＴＡパケットをスイッチブレード４２０に転送する（１５０４）。スイッチブレードは、通信相手にＤＡＴＡパケットを送信する（１５０５）。
【００５８】
その後、スイッチブレード４２０が、通信相手の外部の他装置からＳＡＣＫパケットを受信する（１５０６）。スイッチブレードはＣＰＵブレード２にＳＡＣＫパケットを転送し、ヘッダ処理部５００−２がそのＳＡＣＫパケットを受信する（１５０７）。ヘッダ処理部は、パラメータ格納テーブル５１０−２のエントリの自分の検証タグ９０２と自分のシーケンス番号９０３を参照し、図２Ｂに示したＳＡＣＫパケットのヘッダにある検証タグ２１３と受信ＤＡＴＡパケットのシーケンス番号２１４を、参照した値に書き換える（１５０８）。これは、ＳＡＣＫパケットのヘッダの検証タグ２１３には現用系であったＣＰＵブレード１のものが、また受信ＤＡＴＡパケットのシーケンス番号２１４には、ヘッダを書換用のシーケンス番号に書き換えて送信したＤＡＴＡパケットのシーケンス番号が記述されており、そのままではＣＰＵブレード２のＬ４スタック５０２−２がパケットを破棄してしまうからである。その後、ヘッダ処理部５００−２は、ＶＮＩＣ５０１−２を介してＬ４スタック５０２−２にＳＡＣＫパケットを渡す（１５０９、１５１０）。
【００５９】
以上の手順を踏むことで、ＳＣＴＰコネクションを切断することなく、通信を継続できる。すなわち、Ｌ４コネクションの冗長化を達成できる。また、故障発生時に必要な動作は、図１３の手順だけであり、冗長切替の高速化に貢献できる。
（Ｂ−２）待機系故障発生時におけるＳＣＴＰ  ＤＡＴＡパケット送受信
図１６は、待機系であるＣＰＵブレード２（４１０−２）に故障が発生した際に、現用系であるＣＰＵブレード１（４１０−１）が行う手順である。ＣＰＵブレード２に故障が発生する（１６００）。ＣＰＵブレード１は、その故障を検知する（１６０１）。すると、ＣＰＵブレード１では、ヘッダ処理部が保持する転送先テーブルの各エントリにある転送先から、＜ＣＰＵブレード２＞という記述を削除し、転送を停止する（１６０２）。要するに、ＣＰＵブレード１から２へのＳＣＴＰパケットの転送を停止するだけである。
【００６０】
次に、図１７を用いて、ＳＣＴＰコネクションを確立した通信相手である外部の他装置から、ＳＣＴＰ  ＤＡＴＡパケットを受信する処理手順を説明する。スイッチブレード４２０は、通信相手からＤＡＴＡパケットを受信し（１７００）、ＣＰＵブレード１に転送する。ヘッダ処理部５００−１は、ＤＡＴＡパケットを受け取る（１７０１）。ヘッダ処理部５００−１は、受け取ったＤＡＴＡパケットに対して、パラメータ格納テーブル５１０−１を参照する。しかしながら、図９Ａに示したように、パラメータ格納テーブル５１０−１のエントリで、書換用の検証タグの項には何も記述がないので、ヘッダ処理部５００−１はパケットヘッダに対して操作を行わない。その後、ヘッダ処理部は、自身が保持するパラメータ格納テーブル５１０−１のエントリの通信相手のシーケンス番号９０７を１だけ更新する。そして、ヘッダ処理部は、ＶＮＩＣ５０１−１を介してＬ４スタック５０２−１にＤＡＴＡパケットを渡す（１７０２、１７０３）。Ｌ４スタックはＤＡＴＡパケットのペイロード部分にあるアプリケーションデータを抽出し、アプリケーション５０３−１に渡す（１７０４）。Ｌ４スタックは同時に、応答としてＳＡＣＫパケットを返す（１７０５）。ヘッダ処理５００−１は、ＶＮＩＣ５０１−１を介して、ＳＡＣＫパケットを受け取る（１７０６）。ヘッダ処理部は、ＳＡＣＫパケットをスイッチブレード４２０に転送する（１７０７）。スイッチブレードは、通信相手にＳＡＣＫパケットを送信する（１７０８）。
【００６１】
次に、図１８を用いて、ゲートウェイ装置の現用系であるＣＰＵブレード１から、ＳＣＴＰコネクションを確立した通信相手である外部の他装置に対して、ＳＣＴＰ  ＤＡＴＡパケットを送信する処理手順を説明する。ＣＰＵブレード１のアプリケーション５０３−１が、Ｌ４スタック５０２−１に対してアプリケーションデータの送信を要求する（１８００）。Ｌ４スタックは、ＤＡＴＡパケットを作成し、ＶＮＩＣ５０１−１に渡す（１８０１）。ヘッダ処理５００−１は、ＶＮＩＣを介してＤＡＴＡパケットを受け取る（１８０２）。ヘッダ処理部は、受け取ったＤＡＴＡパケットに対して、パラメータ格納テーブル５１０−１を参照する。しかしながら、図９Ａに示したように、パラメータ格納テーブル５１０−１のエントリで、書換用の検証タグの項には何も記述がないので、ヘッダ処理部５００−１はパケットヘッダに対して操作を行わない。その後、ヘッダ処理部は、自身が保持するパラメータ格納テーブル５１０−１のエントリの自分のシーケンス番号９０３を１だけ増やして更新する。そして、ヘッダ処理部は、ＤＡＴＡパケットをスイッチブレード４２０に転送する（１８０３）。スイッチブレードは、通信相手にＤＡＴＡパケットを送信する（１８０４）。
【００６２】
その後、スイッチブレード４２０が、通信相手の外部の他装置からＳＡＣＫパケットを受信する（１８０５）。スイッチブレードはＣＰＵブレード１にＳＡＣＫパケットを転送し、ヘッダ処理部５００−１がそのＳＡＣＫパケットを受信する（１８０６）。ヘッダ処理部は、ＶＮＩＣ５０１−１を介してＬ４スタック５０２−１にＳＡＣＫパケットを渡す（１８０７、１８０８）。
【００６３】
以上の手順を踏むことで、待機系故障発生時にもなんら問題なく、ＤＡＴＡパケットの送受信を続けることができる。
（Ｃ）新たにＣＰＵブレード３を現用系として追加した際のＳＣＴＰパケット送受信
次に、前記（Ａ）の手順を満たしておくことで、負荷分散のために新たに現用系を追加した場合でも、Ｌ４コネクションを切断することなく、通信を継続できることを説明する。ここで想定する状況は、現用系であるＣＰＵブレード１のＣＰＵ負荷が高くなってきた際に、あらたにＣＰＵブレード３を追加し、一部のＳＣＴＰコネクションのパケット処理をＣＰＵブレード３に切り替える場合である。
（Ｃ−１）ＣＰＵブレード１からＣＰＵブレード３へのＳＣＴＰコネクション切替
図１９Ａ、図１９Ｂを用いて、ＣＰＵブレード１からＣＰＵブレード３への特定のＳＣＴＰコネクションの端点を切り替える手順を説明する。図１９Ａから説明する。ＣＰＵブレード３（４１０−３）も、他のＣＰＵブレードと同様に、ヘッダ処理部５００−３、ＶＮＩＣ５０１−３、Ｌ４スタック５０２−３、アプリケーション５０３−３を備える。まず、装置の管理者が、各ＣＰＵブレードに負荷分散を開始することを設定する（１９００）。すると、ＣＰＵブレード３のアプリケーション５０３−３が、現用状態で起動する（１９０１）。アプリケーションは、Ｌ４スタック５０２−３に対して待ち受け登録（Ｌｉｓｔｅｎ）を行う（１９０２）。次に、ＣＰＵブレード１のヘッダ処理部５００−１は、ヘッダ処理部５００−３に対して、端点の切替をしたいＳＣＴＰコネクションのＬ４パラメータを通知する（１９１０）。
【００６４】
図２０は、Ｌ４パラメータ通知メッセージ１９１０のデータ構造である。Ｌ４パラメータ通知メッセージは、通信相手のアドレス２０００と、自分のポート番号２００１と、通信相手のポート番号２００２と、書換用の検証タグ２００３と、書換用のシーケンス番号２００４と、通信相手の検証タグ２００５と、通信相手のシーケンス番号２００６を含む。これらの情報はすべて、ヘッダ処理部５００−１が保持する、図９Ａに示したパラメータ格納テーブル５１０−１のエントリから作成される。自分のポート番号２００１には自分のポート番号９００を、通信相手のポート番号２００２には通信相手のポート番号９０１を、書換用の検証タグ２００３には自分の検証タグ９０２を、書換用のシーケンス番号２００４には現在の自分のシーケンス番号９０３を、通信相手の検証タグ２００５には通信相手の検証タグ９０６を、通信相手のシーケンス番号２００６には現在のシーケンス番号９０７を格納する。
【００６５】
図１９Ａに戻る。ヘッダ処理部５００−３は、Ｌ４パラメータ通知メッセージの通信相手の検証タグ２００５と、通信相手のシーケンス番号２００６を用いて、ＩＮＩＴパケットを作成し、ＶＮＩＣ５０１−３を介してＬ４スタック５０２−３に渡す（１９１１、１９１２）。ヘッダ処理部５００−３がこのようなＩＮＩＴパケットを作成することで、Ｌ４スタック５０２−３に対して、擬似的に通信相手からＳＣＴＰコネクション確立要求があったかのように挙動させることができる。このとき、通信相手のシーケンス番号を引き継ぐため、通信相手はＳＣＴＰコネクションを張り直すことなく、ＳＣＴＰパケットを送信し続けることができる。その後、Ｌ４スタック５０２−３は、応答としてＩＮＩＴ−ＡＣＫパケットを返す（１９１３）。ヘッダ処理５００−３は、ＶＮＩＣ５０１−３を介して、ＩＮＩＴ−ＡＣＫパケットを受け取る（１９１４）。ヘッダ処理部は、ＩＮＩＴ−ＡＣＫパケットに記述されている自分の検証タグとシーケンス番号の初期値を抽出し、パラメータ格納テーブルに記憶する（１９１５）。
【００６６】
図２１は、ＣＰＵブレード３のヘッダ処理部５００−３がもつパラメータ格納テーブル５１０−３である。ヘッダ処理部は、パラメータ格納テーブル５１０−３にエントリを作成し、１９１０のＬ４パラメータ通知メッセージに記述されたパラメータと、１９１５で抽出したパラメータを格納する。図２１に示すエントリは、１９１５の時点での状態である。このとき、書換用の検証タグ９０３には元の現用系であったＣＰＵブレード１の検証タグが、書換用のシーケンス番号には９０４には切替直前のＣＰＵブレード１のシーケンス番号が、それぞれ記述されることになる。
【００６７】
図１９Ａに戻る。ヘッダ処理部５００−３はＣＯＯＫＩＥ−ＥＣＨＯパケットを作成し、ＶＮＩＣ５０１−３を介してＬ４スタック５０２−３に渡す（１９１６、１９１７）。Ｌ４スタックは、応答としてＣＯＯＫＩＥ−ＡＣＫパケットを返す（１９１８）。ヘッダ処理５００−３は、ＶＮＩＣ５０１−３を介して、ＣＯＯＫＩＥ−ＡＣＫパケットを受け取る（１９１９）。ここで、Ｌ４スタック５０２−３は、待ち受け登録をしたアプリケーション５０３−３に対して、このＳＣＴＰコネクションのソケット番号を通知し（１９２０）、コネクション確立状態に遷移する（１９２１）。これ以降、Ｌ４スタック５０２−３は、切替対象となったＳＣＴＰパケットを送受信することができるようになる。その後、ヘッダ処理部５００−３は、ＣＰＵブレード１のヘッダ処理部５００−１に対して、ＳＣＴＰコネクション設定が完了したことを通知する（１９２２）。
【００６８】
図１９Ｂに進む。ＣＰＵブレード１のアプリケーション５０３−１は、ＣＰＵブレード３のアプリケーション５０３−３に対して、サービスを引き継ぐのに必要なアプリケーション情報を通知する（１９３０）。本実施の形態のゲートウェイ装置では、アプリケーション情報通知の方法については特に制限はなく、任意の方法を採ることが可能である。その後、各ＣＰＵブレードのヘッダ処理部は、１９００で管理者が設定した情報に転送先テーブルを変更する（１９３１、１９３２、１９３３）。具体的には、ＣＰＵブレード１とＣＰＵブレード３の間、ＣＰＵブレード２とＣＰＵブレード３の間で切替対象となったＳＣＴＰコネクションのパケットを転送するように設定される。その後、ＣＰＵブレード１のＬ４スタックが持っているＳＣＴＰコネクションリソースを解放するため、ヘッダ処理部５００−１は、図９Ａに示すパラメータ格納テーブル５１０−１のエントリの通信相手の検証タグを用いてＳＨＵＴＤＯＷＮパケットを作成し、ＶＮＩＣ５０１−１を介してＬ４スタック５０２−１に渡す（１９３４、１９３５）。ヘッダ処理部５００−１がこのようなＳＨＵＴＤＯＷＮパケットを作成することで、Ｌ４スタック５０２−１に対して、擬似的に通信相手からＳＣＴＰコネクション終了要求があったかのように挙動させることができる。その後、Ｌ４スタック５０２−１は、応答としてＳＨＵＴＤＯＷＮ−ＡＣＫパケットを返す（１９３６）。ヘッダ処理５００−１は、ＶＮＩＣ５０１−１を介して、ＳＨＵＴＤＯＷＮ−ＡＣＫパケットを受け取る（１９３７）。ヘッダ処理部は、完了通知としてＳＨＵＤＯＷＮ−ＣＯＭＰＬＥＴＥパケットを作成し、ＶＮＩＣ５０１−１を介してＬ４スタック５０２−１に渡す（１９３８、１９３９）。Ｌ４スタックは該当するＳＣＴＰコネクションを利用していたアプリケーション５０３−１に対して、ＳＣＴＰコネクションの切断通知を行い（１９４０）、コネクション終了状態に遷移する（１９４１）。
【００６９】
以上の手順を踏むことで、特定のＳＣＴＰコネクションの端点をＣＰＵブレード１からＣＰＵブレード３へ切り替える操作が完了する。
（Ｃ−２）前記（Ｃ−１）後におけるＳＣＴＰ  ＤＡＴＡパケット送受信
次に、図２２を用いて、前記（Ｃ−１）の手順を満たした後に、ＳＣＴＰコネクションを確立した通信相手である外部の他装置から、ＳＣＴＰ  ＤＡＴＡパケットを受信する処理手順を説明する。スイッチブレード４２０は、通信相手からＤＡＴＡパケットを受信し（２２００）、ＣＰＵブレード１に転送する。ＣＰＵブレード１のヘッダ処理部５００−１は、ＤＡＴＡパケットを受け取る（２２０１）。ヘッダ処理部５００−１は、転送先テーブルを参照して、ＤＡＴＡパケットをＣＰＵブレード３のヘッダ処理部５００−３に通知する（２２０２）。ヘッダ処理部５００−３は、転送先テーブルを参照して、ＤＡＴＡパケットをＣＰＵブレード２のヘッダ処理部５００−２に通知する（２２０３）。ヘッダ処理部５００−３は同時に、受け取ったＤＡＴＡパケットに対して、パラメータ格納テーブル５１０−３のエントリの自分の検証タグ９０２を参照し、図２Ａに示したＤＡＴＡパケットのヘッダの検証タグ２０３を、参照した値に書き換える（２２０４）。これは、ＤＡＴＡパケットのヘッダの検証タグには元の現用系であったＣＰＵブレード１の検証タグが記述されており、そのままではＣＰＵブレード３のＬ４スタック５０２−３がパケットを破棄してしまうからである。その後、ヘッダ処理部５００−３は、自身が保持するパラメータ格納テーブル５１０−３のエントリの通信相手のシーケンス番号９０７を１だけ増やして更新する。そして、ヘッダ処理部は、ＶＮＩＣ５０１−３を介してＬ４スタック５０２−３にＤＡＴＡパケットを渡す（２２０５、２２０６）。Ｌ４スタックはＤＡＴＡパケットのペイロード部分にあるアプリケーションデータを抽出し、アプリケーション５０３−３に渡す（２２０７）。Ｌ４スタックは同時に、応答としてＳＡＣＫパケットを返す（２２０８）。ヘッダ処理５００−３は、ＶＮＩＣ５０１−３を介して、ＳＡＣＫパケットを受け取る（２２０９）。ヘッダ処理部は、ＳＡＣＫパケットをスイッチブレード４２０に転送する（２２１０）。スイッチブレードは、通信相手にＳＡＣＫパケットを送信する（２２１１）。
【００７０】
一方、ＣＰＵブレード２のヘッダ処理部５００−２は、２２０３のＤＡＴＡパケット通知を受けた後、図１１に示した１１１０〜１１１６と同様の手順を行う。そのため、ここでは説明を省略する。
【００７１】
以上の手順を踏むことで、一部のＳＣＴＰコネクションのパケット処理をＣＰＵブレード１からＣＰＵブレード３に切り替えた場合でも、ＳＣＴＰコネクションを切断することなく、継続的にＤＡＴＡパケットを受信することができる。
【００７２】
次に、図２３を用いて、現在の現用系であるＣＰＵブレード３から、ＳＣＴＰコネクションを確立した通信相手である外部の他装置に対して、ＳＣＴＰ  ＤＡＴＡパケットを送信する処理手順を説明する。ＣＰＵブレード３のアプリケーション５０３−３が、Ｌ４スタック５０２−３に対してアプリケーションデータの送信を要求する（２３００）。Ｌ４スタックは、ＤＡＴＡパケットを作成し、ＶＮＩＣ５０１−３に渡す（２３０１）。ヘッダ処理５００−３は、ＶＮＩＣを介してＤＡＴＡパケットを受け取る（２３０２）。ヘッダ処理部は、自身が保持するパラメータ格納テーブル５１０−３のエントリの自分のシーケンス番号９０３と、書換用のシーケンス番号９０５をそれぞれ１だけ増やして更新する。ヘッダ処理部は同時に、パラメータ格納テーブルのエントリの書換用のシーケンス番号９０５を参照し、図２Ａに示したＤＡＴＡパケットのヘッダのシーケンス番号２０４を、参照した値に書き換える（２３０３）。これは、ＤＡＴＡパケットのヘッダのシーケンス番号にはＣＰＵブレード３のものが記述されているからである。ＳＣＴＰコネクションが確立されたままなので、通信相手はＤＡＴＡパケットのシーケンス番号にはＣＰＵブレード１のもの、すなわち参照している書換用のシーケンス番号９０５の値が記述されていることを期待している。そのため、そのままでは通信相手がパケットを破棄してしまう。ヘッダ処理部５００−３は、ヘッダを書き換えた後、ＤＡＴＡパケットをスイッチブレード４２０に転送する（２３０４）。スイッチブレードは、通信相手にＤＡＴＡパケットを送信する（２３０５）。
一方、ヘッダ処理部５００−３は、２３０４で転送するＤＡＴＡパケットを複製し、転送先テーブルを参照して、複製したＤＡＴＡパケットをＣＰＵブレード２のヘッダ処理部５００−２に通知する（２３０６）。その後、ヘッダ処理部５００−２は、図１２に示した１２０６〜１２１０と同様の手順を行う。そのため、ここでは説明を省略する。
【００７３】
その後、スイッチブレード４２０が、通信相手の外部の他装置からＳＡＣＫパケットを受信する（２３１０）。スイッチブレードはＣＰＵブレード１にＳＡＣＫパケットを転送し、ヘッダ処理部５００−１がそのＳＡＣＫパケットを受信する（２３１１）。ヘッダ処理部５００−１は、転送先テーブルを参照して、ＳＡＣＫパケットをＣＰＵブレード３のヘッダ処理部５００−３に通知する（２３１２）。ヘッダ処理部５００−３は、転送先テーブルを参照して、ＳＡＣＫパケットをＣＰＵブレード２のヘッダ処理部５００−２に通知する（２３１３）。ヘッダ処理部５００−３は同時に、パラメータ格納テーブル５１０−３のエントリの自分の検証タグ９０２と自分のシーケンス番号９０３を参照し、図２Ｂに示したＳＡＣＫパケットのヘッダにある検証タグ２１３と受信ＤＡＴＡパケットのシーケンス番号２１４を、参照した値に書き換える（２３１４）。これは、ＳＡＣＫパケットのヘッダの検証タグ２１３には元の現用系であるＣＰＵブレード１のものが、また受信ＤＡＴＡパケットのシーケンス番号２１４には、ヘッダを書換用のシーケンス番号に書き換えて送信したＤＡＴＡパケットのシーケンス番号が記述されており、そのままではＣＰＵブレード２のＬ４スタック５０２−２がパケットを破棄してしまうからである。その後、ヘッダ処理部５００−３は、ＶＮＩＣ５０１−３を介してＬ４スタック５０２−３にＳＡＣＫパケットを渡す（２３１５、２３１６）。
【００７４】
一方、ＣＰＵブレード２のヘッダ処理部５００−２は、２３１３のＳＡＣＫパケット通知を受けた後、図１２に示した１２２５〜１２２７と同様の手順を行う。そのため、ここでは説明を省略する。
【００７５】
以上の手順を踏むことで、一部のＳＣＴＰコネクションのパケット処理をＣＰＵブレード１からＣＰＵブレード３に切り替えた場合でも、ＳＣＴＰコネクションを切断することなく、継続的にＤＡＴＡパケットを送信することができる。
３．処理（フローチャート）
本実施の形態のゲートウェイ装置では、ヘッダ処理部がＬ４コネクションで用いるパラメータを記憶して、必要に応じてヘッダを書き換えることによって、Ｌ４コネクションの冗長化を実現している。ヘッダ処理部の動作パターンは、ＶＮＩＣ、すなわち装置内のＬ４スタックからパケットを読み込んだ場合と、ＶＮＩＣ以外からパケットを受け取った場合に分けられる。また、装置が現用系である場合と、装置が待機系である場合に分けられる。図２４、図２５、図２６、図２７を用いて、ＳＣＴＰを例にとり、ヘッダ処理部の動作を説明する。
【００７６】
図２４は、現用系においてヘッダ処理部がＶＮＩＣから読込んだＳＣＴＰパケットを処理するフローチャート図である。まず、ＶＮＩＣからＳＣＴＰパケットを読み込む（２４００）。読み込んだパケットがＤＡＴＡパケットである場合（２４０１）、図９Ａなどで示したパラメータ格納テーブルに該当するエントリがあれば、自分のシーケンス番号９０３と書換用のシーケンス番号９０５の値を１だけ増やして更新する（２４０２）。その後、同エントリの書換用シーケンス番号９０５に値が記述されている場合には、ＤＡＴＡパケットのヘッダをその値に書き換える（２４０３）。その後、ヘッダ処理部は、図８に示した転送先テーブルを参照して、適当なＣＰＵブレードのヘッダ処理部にＳＣＴＰパケットを転送する（２４０６）。
【００７７】
一方、ＶＮＩＣから読み込んだＳＣＴＰパケットが、ＩＮＩＴパケットもしくはＩＮＩＴ−ＡＣＫパケットである場合（２４０４）、パケットに記述されている検証タグとシーケンス番号初期値を抽出し、図９Ａなどで示したパラメータ格納テーブルに新たなエントリを作成して、自分の検証タグ９０２と自分のシーケンス番号９０３に記憶する（２４０５）。その後、ヘッダ処理部は、図８に示した転送先テーブルを参照して、適当なＣＰＵブレードのヘッダ処理部にＳＣＴＰパケットを転送する（２４０６）。
【００７８】
最後に、ＶＮＩＣから読み込んだＳＣＴＰパケットの種別に係わらず、スイッチブレードを介してそのパケットを通信相手に送信し（２４０７）、処理を終了する（２４０８）。
【００７９】
図２５は、現用系においてヘッダ処理部がＶＮＩＣ以外から受取ったＳＣＴＰパケットを処理するフローチャート図である。まず、ＶＮＩＣ以外からＳＣＴＰパケットを受け取る（２５００）。これはすなわち、通信相手からのＳＣＴＰパケットを受け取ったことを意味する。次に、図８に示した転送先テーブルを参照して、適当なＣＰＵブレードのヘッダ処理部にＳＣＴＰパケットを転送する（２５０１）。転送先テーブルの転送先８０２に、装置内のＬ４スタックにパケットを渡すことを意味する＜ｌｏｃａｌ＞を含むか検査し（２５０２）、含まなければ処理を終了する（２５１１）。
【００８０】
２５０２に戻り、転送先に＜ｌｏｃａｌ＞を含む場合に進む。受け取ったＳＣＴＰパケットがＤＡＴＡパケットである場合（２５０３）、図９Ａなどで示したパラメータ格納テーブルに該当するエントリがあれば、通信相手のシーケンス番号９０７の値を１だけ増やして更新する（２５０４）。あるいは、受け取ったＳＣＴＰパケットがＩＮＩＴパケットもしくはＩＮＩＴ−ＡＣＫパケットである場合（２５０５）、パケットに記述されている検証タグとシーケンス番号初期値を抽出し、図９Ａなどで示したパラメータ格納テーブルに新たなエントリを作成して、通信相手の検証タグ９０６と通信相手のシーケンス番号９０７に記憶する（２５０６）。あるいは、受け取ったＳＣＴＰパケットがＳＡＣＫパケットである場合（２５０７）、ＳＡＣＫパケットのヘッダにある受信ＤＡＴＡパケットのシーケンス番号を、パラメータ格納テーブルの該当するエントリの自分のシーケンス番号９０３の値と異なれば、その値に書き換える（２５０８）。その後、受け取ったＳＣＴＰパケットの種別に係わらず、ＳＣＴＰパケットのヘッダの検証タグを、パラメータ格納テーブルの該当するエントリの自分の検証タグ９０２の値と異なれば、その値に書き換える（２５０９）。そして、ＶＮＩＣにＳＣＴＰパケットを書き込み（２５１０）、処理を終了する（２５１１）。
【００８１】
図２６は、待機系においてヘッダ処理部がＶＮＩＣから読込したＳＣＴＰパケットを処理するフローチャート図である。まず、ＶＮＩＣからＳＣＴＰパケットを読み込む（２６００）。読み込んだパケットがＤＡＴＡパケットである場合（２６０１）、図９Ｂなどで示したパラメータ格納テーブルに該当するエントリがあれば、自分のシーケンス番号９０３と書換用のシーケンス番号９０５の値を１だけ増やして更新する（２６０２）。一方、ＶＮＩＣから読み込んだＳＣＴＰパケットが、ＩＮＩＴパケットもしくはＩＮＩＴ−ＡＣＫパケットである場合（２６０３）、パケットに記述されている検証タグとシーケンス番号初期値を抽出し、図９Ａなどで示したパラメータ格納テーブルに新たなエントリを作成して、自分の検証タグ９０２と自分のシーケンス番号９０３に記憶する（２６０４）。
【００８２】
最後に、ＶＮＩＣから読み込んだＳＣＴＰパケットの種別に係わらず、パケットを破棄し（２６０５）、処理を終了する（２６０６）。
【００８３】
図２７は、待機系においてヘッダ処理部がＶＮＩＣ以外から受取ったＳＣＴＰパケットを処理するフローチャート図である。まず、ＶＮＩＣ以外からＳＣＴＰパケットを受け取る（２７００）。ＳＣＴＰパケットの送信元のアドレスを特定する（２７０１）。送信元が現用系である、すなわち現用系から通信相手に送信されるＳＣＴＰパケットである場合に進む。ＳＣＴＰパケットがＩＮＩＴパケットもしくはＩＮＩＴ−ＡＣＫパケットである場合（２７０２）、パケットに記述されている検証タグとシーケンス番号初期値を抽出し、図９Ｂなどで示したパラメータ格納テーブルに新たなエントリを作成して、書換用の検証タグ９０４と書換用のシーケンス番号９０５に記憶する（２７０３）。次に、ＳＣＴＰパケットがＩＮＩＴパケットもしくはＤＡＴＡパケットである場合（２７０４）、接続要求やアプリケーションデータ送信を促すために、装置内のアプリケーションに対してＩＮＩＴパケットもしくはＤＡＴＡパケットを直接通知し（２７０５）、処理を終了する（２７１５）。一方、装でない場合、パケットを破棄し（２７０６）、処理を終了する（２７１５）。
【００８４】
２７０１に戻り、ＳＣＴＰ送信元が通信相手である、すなわちゲートウェイ装置が通信相手から受信したＳＣＴＰパケットである場合に進む。受け取ったＳＣＴＰパケットがＤＡＴＡパケットである場合（２７０７）、図９Ａなどで示したパラメータ格納テーブルに該当するエントリがあれば、通信相手のシーケンス番号９０７の値を１だけ増やして更新する（２７０８）。あるいは、受け取ったＳＣＴＰパケットがＩＮＩＴパケットもしくはＩＮＩＴ−ＡＣＫパケットである場合（２７０９）、パケットに記述されている検証タグとシーケンス番号初期値を抽出し、図９Ａなどで示したパラメータ格納テーブルに新たなエントリを作成して、通信相手の検証タグ９０６と通信相手のシーケンス番号９０７に記憶する（２７１０）。あるいは、受け取ったＳＣＴＰパケットがＳＡＣＫパケットである場合（２７１１）、ＳＡＣＫパケットのヘッダにある受信ＤＡＴＡパケットのシーケンス番号を、パラメータ格納テーブルの該当するエントリの自分のシーケンス番号９０３の値と異なれば、その値に書き換える（２７１２）。その後、受け取ったＳＣＴＰパケットの種別に係わらず、ＳＣＴＰパケットのヘッダの検証タグを、パラメータ格納テーブルの該当するエントリの自分の検証タグ９０２の値と異なれば、その値に書き換える（２７１３）。そして、ＶＮＩＣにＳＣＴＰパケットを書き込み（２７１４）、処理を終了する（２７１５）。
【００８５】
以上の処理によって、本実施の形態のゲートウェイ装置は、冗長構成をとるゲートウェイ装置において、Ｌ４コネクションを確立した通信相手から受信したパケットを複製して、現用系と待機系の両方にパケットを入力し、それぞれのＬ４スタックで処理してＬ４コネクションの冗長化を実現できる。また、Ｌ４コネクションを確立したまま柔軟な冗長化装置の運用が可能となる。
【産業上の利用可能性】
【００８６】
本発明は、移動体通信のゲートウェイ装置に限らず、様々な通信システムにおいてＬ４コネクション端点となる通信制御装置の冗長化に適用することができる。
【符号の説明】
【００８７】
４００  ゲートウェイ装置
４１０−１  ＣＰＵブレード１
４２０  スイッチブレード
５００−１  ヘッダ処理部
５０１−１  ＶＮＩＣ
５０２−１  Ｌ４スタック
５０３−１  アプリケーション
５１０−１  パラメータ格納テーブル
５１１−１  転送先テーブル
１９１０  Ｌ４パラメータ通知メッセージ
【図１】
2011239309.tif 000003
【図２Ａ】
2011239309.tif 000004
【図２Ｂ】
2011239309.tif 000005
【図３】
2011239309.tif 000006
【図４】
2011239309.tif 000007
【図５】
2011239309.tif 000008
【図６】
2011239309.tif 000009
【図７Ａ】
2011239309.tif 000010
【図７Ｂ】
2011239309.tif 000011
【図８】
2011239309.tif 000012
【図９Ａ】
2011239309.tif 000013
【図９Ｂ】
2011239309.tif 000014
【図１０Ａ】
2011239309.tif 000015
【図１０Ｂ】
2011239309.tif 000016
【図１１】
2011239309.tif 000017
【図１２】
2011239309.tif 000018
【図１３】
2011239309.tif 000019
【図１４】
2011239309.tif 000020
【図１５】
2011239309.tif 000021
【図１６】
2011239309.tif 000022
【図１７】
2011239309.tif 000023
【図１８】
2011239309.tif 000024
【図１９Ａ】
2011239309.tif 000025
【図１９Ｂ】
2011239309.tif 000026
【図２０】
2011239309.tif 000027
【図２１】
2011239309.tif 000028
【図２２】
2011239309.tif 000029
【図２３】
2011239309.tif 000030
【図２４】
2011239309.tif 000031
【図２５】
2011239309.tif 000032
【図２６】
2011239309.tif 000033
【図２７】
2011239309.tif 000034