ゲートウェイ装置
【課題】 冗長構成をとるゲートウェイ装置において、L4コネクションを確立した通信相手から受信したパケットを複製して、現用系と待機系の両方にパケットを入力し、それぞれのL4スタックで処理してL4コネクションの冗長化を実現する。
【解決手段】 独立して動作する複数のパケット処理装置と前記複数のパケット処理装置を接続するスイッチ装置を備え、前記複数のパケット処理装置のうち1台が現用系であり、前記現用系とは異なる1台が待機系となるように冗長構成をとり、前記現用系が通信相手に対してL4コネクション端点となるゲートウェイ装置であって、前記通信相手から受信した前記L4コネクションのパケットが前記現用系もしくは前記待機系に入力されると、前記現用系もしくは前記待機系は前記L4コネクションに関して記憶しているパラメータを用いて前記パケットのヘッダを書き換えて、L4スタックに前記パケットを渡す。
【解決手段】 独立して動作する複数のパケット処理装置と前記複数のパケット処理装置を接続するスイッチ装置を備え、前記複数のパケット処理装置のうち1台が現用系であり、前記現用系とは異なる1台が待機系となるように冗長構成をとり、前記現用系が通信相手に対してL4コネクション端点となるゲートウェイ装置であって、前記通信相手から受信した前記L4コネクションのパケットが前記現用系もしくは前記待機系に入力されると、前記現用系もしくは前記待機系は前記L4コネクションに関して記憶しているパラメータを用いて前記パケットのヘッダを書き換えて、L4スタックに前記パケットを渡す。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ゲートウェイ装置に係わり、特に、現用系と待機系を用意して冗長化を行い、かつ、レイヤ4コネクションの端点となるゲートウェイ装置に関する。
【背景技術】
【0002】
3GPP(3rd Generation Partnership Project)のLTE(Long Term Evolution)に代表される第3.9世代移動体通信網では、ネットワークがオールIP化されて、従来は回線交換網で提供されてきた電話サービスがIP網で提供されるようになる。このため、今後は移動体通信システムにおけるゲートウェイ装置に対しても電話交換機並の高信頼性が要求される。この高信頼性を達成するために、物理的に独立した2つ以上の装置を用意して、実際にサービスを提供する現用系としての役割と、通常はバックアップとして動作して、現用系故障時には代わりにサービスを提供する待機系としての役割を与えて、ゲートウェイ装置の冗長化を行う。これにより継続的なサービス提供が可能となる。このとき、現用系と待機系の切替時間、すなわちサービス停止時間は短時間(1秒以内)であることが望まれる。
【0003】
一方、ゲートウェイ装置は、通信システム内の他装置と通信する際に、SCTP(Stream Control Transmission Protocol)やTCP(Transmission Control Protocol)に代表されるコネクション型レイヤ4(L4)プロトコルを用いる。特に移動体通信システムにおいては、呼処理関係のシグナリングにSCTPが用いられる傾向にあり、今後も利用は増えていくと考えられる。一般に、L4コネクションは状態遷移を持つため、冗長切替が発生すると、L4コネクションは一度切断され、その後再接続処理が行われる。これを図1を用いて説明する。
【0004】
図1は現用系故障時の冗長切替において、SCTPを例にとり、L4コネクションを再接続するシーケンスである。冗長化装置101は、レイヤ2(L2)スイッチ102と現用系103と待機系104から構成される。現用系と待機系は、L2スイッチを介して他装置105と通信を行う。図1では、現用系と他装置との間であらかじめSCTPコネクションを確立している。そのため、他装置が送信したDATAパケット(110、111)を現用系は受信し、またその応答であるSACKパケット(112、113)を他装置は受信することができる。
【0005】
図2AはDATAパケットのデータ構造であり、図2BはSACKパケットのデータ構造である。DATAパケット110のヘッダの送信元ポート番号201、送信先ポート番号202、送信先の検証タグ203、およびSACKパケット112のヘッダの送信元ポート番号211、送信先ポート番号212、送信先の検証タグ213は、L4コネクションを確立する際に通信相手である他装置と現用系との間で交換するパラメータである。また、DATAパケットヘッダの送信元が付けるシーケンス番号204は、初期値をSCTPコネクション確立時に交換し、DATAパケットを送信するごとに増加されるパラメータである。さらに、SACKパケットヘッダに付加する受信したDATAパケットのシーケンス番号214は、対応するDATAパケットのシーケンス番号204と同じ値をとるパラメータである。OS(Operation System)内においてSCTPコネクションを管理するL4スタックは、DATAパケットとSACKパケットを受信するごとにパケットに付加されるこれらの情報が正しいことを精査する。もしこれらの情報に誤りやズレがあれば、受信パケットを破棄するか、もしくはパケットの再送を要求する。L4スタックは内部に独自の状態遷移を持ちながら、上述したパケット精査を自動的に行う。
【0006】
図1に戻る。現用系に故障が発生すると(114)、他装置から送信されたDATAパケット(115、116)がL2スイッチから転送されない状態になる。待機系は現用系の故障を検知すると(117)、自分がサービスを提供するために現用系に移行する(118)。以降、待機系104を旧待機系104と記述する。旧待機系104は、冗長化装置101に送られたパケットを受信できるようにするために、L2スイッチに対してGratuitous ARP(119)を送信する。すると、DATAパケット120は、旧待機系に転送されるようになる(121)。しかしながら、旧待機系のL4スタックは、このSCTPコネクションに関する状態遷移情報を持たないため、DATAパケットを破棄して、応答として接続を強制終了させるABORTパケット(122、123)を他装置に送信する。他装置は、ABORTパケットを受信すると、SCTPコネクションが強制切断されたことを、そのSCTPコネクションを利用していたアプリケーションに通知する。アプリケーションは、再度データを送信するために再接続処理を要求する(124)。他装置のL4スタックは自動的に、待機系のL4スタックとの間でINITパケット、INIT−ACKパケット、COOKIE−ECHOパケット、COOKIE−ACKパケット(125〜132)をやり取りし、DATAパケット、SACKパケット送受信に必要となる情報を新たに交換して、新規のSCTPコネクションを再確立する。その後、他装置内のアプリケーションは、故障発生前後に送信し損なったデータの再送信処理を行う(133)。そして、新たに確立したSCTPコネクションを用いて、DATAパケット(134、135)とSACKパケット(136、137)が送受信される。以上のように、L4コネクションを持つ冗長化装置が冗長切替を行う場合には、強制切断、再接続、再送信の処理が必要になる。そのため、確立されるL4コネクション数が多くなると、高速な冗長切替達成に影響を与える。したがって、図1の破線部分140の処理を省き、L4コネクションの冗長化を行うことが要求される。
【0007】
これを解決するためには、現用系と待機系内のそれぞれのL4スタックが持つL4コネクションの状態遷移を同期させればよい。この方式として、共有方式と並列処理方式が挙げられる。共有方式は、現用系が管理するL4コネクションの状態遷移を、ネットワークを介してリアルタイムに待機系に転送する方式である。また、並列処理方式は、通信相手である他装置から受信したパケットを複製して現用系と待機系の両方にパケットを入力し、現用系と待機系のL4スタックが独立に処理を行うことで、同じ状態遷移を作り出す方式である。
【0008】
特許文献1では、装置間で共有可能な特殊なメモリを用いて、共有方式を実現する。しかしながら、移動体通信システムにおけるゲートウェイ装置は、一般的にATCA(Advanced Telecom Computing Architecture)などの汎用装置に実装されるため、特殊なハードウェアを設けてL4コネクションを冗長化することが困難である。そこで近年では、ゲートウェイ装置に対する並列処理方式の適用が検討されている。
【0009】
非特許文献1は、L4コネクション確立時に現用系と待機系で通知しあって、現用系と待機系のパラメータと状態遷移初期値を揃える方式を示している。
【0010】
【特許文献1】特開2007−274256号
【非特許文献1】狩野秀一、地引昌弘、“トランスポート端点のポータブルなクラスタ方式”、電子情報通信学会技術報告、IA2007−2、pp.5−10
【発明の概要】
【発明が解決しようとする課題】
【0011】
本発明では、並列処理方式によってL4コネクションの冗長化を実現する。
【0012】
上述したように、装置間でL4コネクションを確立する際、いくつかのパラメータを通信相手と交換し、共有する。以降のパケット通信では、交換したパラメータと状態遷移に基づく値をパケットヘッダに埋め込んで、データの送受信を行う。交換したパラメータもしくは現在の状態遷移と異なる値が検出された場合には、そのパケットは破棄される。その結果通信が正しく処理されなくなるか、もしくはL4コネクションが強制切断される。
【0013】
上記パラメータの一部は、OS内のL4スタックが自動的に生成する乱数である。そのため、独立した装置であれば異なる値を生成し、異なる状態遷移初期値をとる。一方、冗長構成を組んでいる場合、通信相手からは冗長化装置は1台の装置にしか見えない、すなわち現用系のパラメータと状態遷移しかパケットヘッダには反映されない。したがって、現用系と待機系の両方にパケットを入力したとしても、現用系のL4スタックでは処理されるが、待機系のL4スタックでは処理されないことになる。
そこで本発明は、L4コネクションを確立した通信相手から受信したパケットを複製して、現用系と待機系の両方にパケットを入力し、それぞれのL4スタックで処理できるようにすることを課題とする。
【0014】
なお、非特許文献1では、L4コネクション確立時に現用系と待機系で通知しあって、現用系と待機系のパラメータと状態遷移初期値を揃えている。しかしながら、非特許文献1の方式では、L4コネクション確立時にしか対応できず、L4コネクション確立後に現用系もしくは待機系を追加したり交換したりする際には、L4コネクションを一度切断して再確立しなければならない。このことは、動的な負荷分散を目的とした装置の追加時や、故障装置の交換時にはL4コネクションの冗長化が引き継げないことを意味する。
【課題を解決するための手段】
【0015】
本願で開示される実施態様の代表的なゲートウェイ装置は、独立して動作する複数のパケット処理装置と前記複数のパケット処理装置を接続するスイッチ装置を備え、前記複数のパケット処理装置のうち1台が現用系であり、前記現用系とは異なる1台が待機系となるように冗長構成をとり、前記現用系が通信相手に対してL4コネクションの端点となり、前記通信相手から受信した前記L4コネクションのパケットが前記現用系もしくは前記待機系に入力されると、前記現用系もしくは前記待機系は前記L4コネクションに関して記憶しているパラメータを用いて前記パケットのヘッダを書き換えて、L4スタックに前記パケットを渡すことを特徴とする。
【0016】
また、前記レイヤ4コネクションの確立時に前記通信相手と交換するパラメータと、前記レイヤ4コネクションの確立後のパケット通信においてパケットに付加されるパラメータを、前記現用系もしくは前記待機系において記憶する。
【0017】
また、前記現用系もしくは前記待機系は前記通信相手から受信した前記レイヤ4コネクションのパケットを受け取ると、それぞれ前記待機系もしくは前記現用系に前記パケットを転送する。
【発明の効果】
【0018】
本発明によれば、冗長構成をとるゲートウェイ装置において、L4コネクションを確立した通信相手から受信したパケットを複製して、現用系と待機系の両方にパケットを入力し、それぞれのL4スタックで処理してL4コネクションの冗長化を実現できる。また、L4コネクションを確立したまま柔軟な冗長化装置の運用が可能となる。
【図面の簡単な説明】
【0019】
【図1】現用系故障時の冗長切替においてSCTPコネクションを再接続するシーケンス図である。
【図2A】SCTP DATAパケットのデータ構成図である。
【図2B】SCTP SACKパケットのデータ構成図である。
【図3】本発明を適用する通信システムの構成図である。
【図4】本実施の形態のゲートウェイ装置のハードウェア構成図である。
【図5】本実施の形態のゲートウェイ装置のソフトウェアプログラム構成図である。
【図6】スイッチブレードに対して現用系を転送先に登録するシーケンス図である。
【図7A】他装置から現用系にSCTPコネクションを確立するシーケンス図である。
【図7B】他装置から現用系にSCTPコネクションを確立するシーケンス図の続きである。
【図8】各CPUブレードのヘッダ処理部が保持する転送先テーブルである。
【図9A】図7B後においてCPUブレード1のヘッダ処理部が保持するSCTPのパラメータ格納テーブルである。
【図9B】図7B後においてCPUブレード2のヘッダ処理部が保持するSCTPのパラメータ格納テーブルである。
【図10A】現用系から他装置にSCTPコネクションを確立するシーケンス図である。
【図10B】現用系から他装置にSCTPコネクションを確立するシーケンス図の続きである。
【図11】他装置からSCTP DATAパケットを受信するシーケンス図である。
【図12】現用系からSCTP DATAパケットを送信するシーケンス図である。
【図13】現用系故障発生時においてスイッチブレードに対して予備系を転送先に登録するシーケンス図である。
【図14】現用系故障発生時において他装置からSCTP DATAパケットを受信するシーケンス図である。
【図15】現用系故障発生時において旧待機系からSCTP DATAパケットを送信するシーケンス図である。
【図16】待機系故障発生時において待機系へパケット通知を停止するシーケンス図である。
【図17】待機系故障発生時において他装置からSCTP DATAパケットを受信するシーケンス図である。
【図18】待機系故障発生時において現用系からSCTP DATAパケットを送信するシーケンス図である。
【図19A】負荷分散のため新たにCPUブレード3を追加するシーケンス図である。
【図19B】負荷分散のため新たにCPUブレード3を追加するシーケンス図の続きである。
【図20】L4パラメータ通知メッセージのデータ構造である。
【図21】図19B後においてCPUブレード3のヘッダ処理部が保持するSCTPのパラメータ格納テーブルである。
【図22】図19B後において他装置からSCTP DATAパケットを受信するシーケンス図である。
【図23】図19B後においてCPUブレード3からSCTP DATAパケットを送信するシーケンス図である。
【図24】現用系においてヘッダ処理部がVNICから読込んだSCTPパケットを処理するフローチャート図である。
【図25】現用系においてヘッダ処理部がVNIC以外から受取ったSCTPパケットを処理するフローチャート図である。
【図26】待機系においてヘッダ処理部がVNICから読込したSCTPパケットを処理するフローチャート図である。
【図27】待機系においてヘッダ処理部がVNIC以外から受取ったSCTPパケットを処理するフローチャート図である。
【発明を実施するための最良の形態】
【0020】
1.装置構成
はじめに、図3を用いて本発明が適用される通信システムの構成例を説明する。ここでは移動体通信システムを例にとる。移動体通信システムは、無線インタフェースを介してデータ通信を行う端末340と、端末を収容する無線アクセス網(320、330)と、加入者情報を管理し端末をサービス網に接続するユーザホーム網310と、端末に対してサービスを提供するサービス網300とから構成される。
【0021】
無線アクセス網320は、無線信号を有線信号に相互変換する基地局321a、321bと、アクセスゲートウェイ323と、移動管理サーバ322から構成される。無線アクセス網330も同様に基地局アクセスゲートウェイ331a、331b、移動管理サーバ332で構成される。アクセスゲートウェイは、基地局から受信したユーザトラフィックをユーザホーム網に転送する装置である。また移動管理サーバは、端末の接続状況を管理するとともに、基地局とアクセスゲートウェイ間のデータパスを制御する装置である。
【0022】
ユーザホーム網310は、サービス網ゲートウェイ311と、ポリシーサーバ312と、認証サーバ313から構成される。サービス網ゲートウェイは、アクセスゲートウェイから受信したユーザトラフィックを適切なサービス網に転送する装置である。また、ポリシーサーバは、サービス網ゲートウェイに対してユーザトラフィックの課金手段やQoSを指示する装置である。また、認証サーバは、端末ユーザの加入者情報を管理する装置である。
【0023】
サービス網300には、端末に対してサービスを提供するアプリケーションサーバ301が接続される。
【0024】
LTEでは、サービス網ゲートウェイ311とポリシーサーバ312の間、認証サーバ312と移動管理サーバ(322、332)の間、移動管理サーバ(322、332)と基地局(321a、321b、331a、331b)の間のシグナリングのL4プロトコルにSCTPが用いられる。本発明は、特にサービス網ゲートウェイ、移動管理サーバといったゲートウェイ装置への適用が最も効果的だが、これらに限らず、L4コネクションの端点となる装置であれば適用可能である。
【0025】
次に、図4を用いて、本実施の形態のゲートウェイ装置構成例を説明する。ゲートウェイ装置400は、シグナリング処理やユーザトラフィック転送処理を実現するCPUブレード1とCPUブレード2(410−1、410−2)と、レイヤ2(L2)スイッチ機能を備えるスイッチブレード420から構成される。
【0026】
CPUブレード1は、メモリ411−1、CPU412−1、IF(インタフェース)413−1、414−1、FROM(フラッシュROM)415−1を備える。ゲートウェイ装置としての機能を提供するためのソフトウェアプログラムはFROMに記憶されており、装置の起動時にメモリに展開される。CPUは、メモリ内に展開されたソフトウェアプログラムを順次読み出して実行する。なお、IFはイーサネット回線でスイッチブレード420に接続されており、IF413−1はデータ通信用に、IF414−1は装置制御用に使用される。
スイッチブレード420は、IF421、422、423、424、426および427、スイッチ部425、メモリ428、CPU429、FROM430から構成される。IF421、422、423および424はCPUブレード1とCPUブレード2(410−1、410−2)に、IF426、427は外部のパケット網に接続されており、スイッチ部はこれらの間でパケットを中継する。また、メモリ、CPU、FROMは、スイッチ部を制御、管理するのに用いられる。
【0027】
図5は、CPUブレード1およびCPUブレード2(410−1、410−2)のメモリ411−1、411−2に展開されるソフトウェアプログラムの構成図である。アプリケーションプログラム503−1、503−2は、L4コネクションを利用して特定のサービスを提供する。ただし、本実施の形態のゲートウェイ装置は冗長構成を形成しており、アプリケーションプログラム503−1、503−2についても、一方が現用状態として動作中は、他方は待機状態となる。L4スタック502−1、502−2はL4コネクションを管理する。VNIC(Virtual Network Interface)501−1、501−2は他のプログラムからデータの読み書きを可能とする仮想ネットワークインタフェースである。ヘッダ処理部500−1、500−2はL4コネクションのパケットヘッダの書き換えを行う。
【0028】
ヘッダ処理部は、Rawソケットを用いてスイッチブレード420を介して外部のパケット網とパケットを送受信する。また、ヘッダ処理部は、TIPC(Transparent Inter−process Communication)などの通信プロトコルを用いてスイッチブレード420を介して、他のCPUブレードのヘッダ処理部とデータのやり取りを行う。さらに、ヘッダ処理部は、L4コネクションの冗長化に必要となるパラメータを格納するパラメータ格納テーブル(510−1、510−2)と、受信するL4コネクションのパケットをどのCPUブレードのヘッダ処理部に転送するかを決定する転送先テーブル(511−1、511−2)をもつ。パラメータ格納テーブルと転送先テーブルの詳細な説明については、後述の2.処理(シーケンス)の中で行う。
【0029】
本実施の形態のゲートウェイ装置では、アプリケーションとヘッダ処理部はユーザ領域(520−1、520−2)に、L4スタックとVNICはカーネル領域(521−1、521−2)にそれぞれ置かれる。このような構成を採ることで、本実施の形態のゲートウェイ装置では、OSに改造を加えることなく、L4コネクションの冗長化を実現できる。
【0030】
以上が、本実施の形態の装置構成である。
2.処理(シーケンス)
本実施の形態のゲートウェイ装置において、L4コネクションの冗長化処理について、3つの手順を説明する。具体的には、SCTPの場合を例にとり、(A):通常状態におけるパケット送受信と、(B):故障発生時におけるパケット送受信と、(C):負荷分散のために新たに現用系を追加する際のパケット送受信の手順である。
(A)通常状態におけるSCTPパケット送受信
故障未発生時の通常状態において、SCTPコネクションを確立し、DATAパケットを送受信する流れについて説明する。
(A−1)SCTPコネクション確立
図6は、現用系がパケットを受信するための前準備の手順である。まず、装置の管理者がCPUブレード1(410−1)を現用系に設定する(600)。また、CPUブレード2(410−2)を待機系に設定する(601)。その際、CPUブレード1は、スイッチブレード420に対してGratuitous ARPパケットを送信し、MAC(Media Access Control)アドレスをスイッチブレードに登録する(602)。こうすることで、ゲートウェイ装置宛に送られてきたパケットがCPUブレード1に転送されるようになる。
【0031】
図7A、図7Bは、外部の他装置からSCTPコネクションの確立要求があった際の処理手順である。まず、図7Aから説明する。図6の手順後の状態であり、CPUブレード1(410−1)が現用系、CPUブレード2(410−2)が待機系である。したがって、アプリケーション503−1は実際にサービスを提供する現用状態、アプリケーション503−2は現用側の処理をバックアップする待機状態として動作する。どちらのアプリケーションも、それぞれのCPUブレードで稼動するL4スタック(502−1、502−2)に対して待ち受け登録(Listen)をしておく(700、701)。スイッチブレード420が、外部の他装置からSCTPコネクション確立要求であるINITパケットを受信する(710)。スイッチブレードはCPUブレード1にINITパケットを転送し、ヘッダ処理部500−1がそのINITパケットを受信する(702)。ここで、ヘッダ処理部は、自身が保持する転送先テーブル511−1を参照する。
【0032】
図8は、CPUブレード1のヘッダ処理部が保持する転送先テーブル511−1のデータ構造である。転送先テーブルは、通信相手のIPアドレスごとに作成される。転送先テーブルでは、自分のポート番号800と相手のポート番号801をインデックスとし、転送先802を記述する。本例では、自分のポート番号が5000番で相手のポート番号が11111番であるエントリに対して、転送先が<local>と<CPUブレード2>に設定されている。これは、自分のポート番号が5000番で相手のポート番号が11111番であるパケットを、CPUブレード1内で動作するアプリケーションと、CPUブレード2のヘッダ処理部に転送することを意味する。転送先テーブルは、装置の管理者があらかじめ設定しておく。
【0033】
図7Aに戻る。ヘッダ処理部500−1は、転送先テーブル511−1を参照して、INITパケットをCPUブレード2のヘッダ処理部500−2に通知する(712)。この際、実際にはスイッチブレードを介してパケットを通知するが、シーケンスの記述では省略する。ヘッダ処理部500−2は、INITパケットからパラメータを抽出し、パラメータ格納テーブルに記憶する(713)。
【0034】
図9A、図9Bは、それぞれCPUブレード1と2がもつパラメータ格納テーブル(510−1、510−2)である。パラメータ格納テーブルは、通信相手のIPアドレスごとに作成される。パラメータ格納テーブルでは、自分のポート番号900と相手のポート番号901をインデックスとし、自分の検証タグ902と、自分のシーケンス番号903と、書換用の検証タグ904と、書換用のシーケンス番号905と、通信相手の検証タグ906と、通信相手のシーケンス番号907を記述する。ここで、書換用の検証タグ904と書換用のシーケンス番号905には、SCTPコネクション確立時に現用系であったCPUブレードのL4スタックが作成した検証タグとシーケンス番号の値が格納される。
【0035】
図7Aに戻る。ヘッダ処理部500−2は、INITパケットに記述されている通信相手の検証タグとシーケンス番号の初期値を抽出し、パラメータ格納テーブル510−2にエントリを作成して、通信相手の検証タグ906と通信相手のシーケンス番号907に上記パラメータを記憶する。ヘッダ処理部は500−2は、自身が保持する転送先テーブルを参照して、VNIC501−2を介してL4スタック502−2にINITパケットを渡す(714、715)。L4スタックは、応答としてINIT−ACKパケットを返す(716)。ヘッダ処理500−2は、VNIC501−2を介して、INIT−ACKパケットを受け取る(717)。ヘッダ処理部は、INIT−ACKパケットに記述されている自分の検証タグとシーケンス番号の初期値を抽出し、自分の検証タグ902と自分のシーケンス番号903に上記パラメータを記憶する(718)。このINIT−ACKパケットは、待機系側のL4スタックが作成したものなので、通信相手には送信すべきものではない。そのため、ヘッダ処理部500−2はINIT−ACKパケットを破棄する(719)。
【0036】
一方、CPUブレード1のヘッダ処理部500−1でもINITパケットに記述されている通信相手の検証タグとシーケンス番号の初期値を抽出し、パラメータ格納テーブル510−1にエントリを作成して、通信相手の検証タグ906と通信相手のシーケンス番号907に上記パラメータを記憶する(720)。その後、VNIC501−1を介してL4スタック502−1にINITパケットを渡す(721、722)。L4スタックは、応答としてINIT−ACKパケットを返す(723)。ヘッダ処理500−1は、VNIC501−1を介して、INIT−ACKパケットを受け取る(724)。ヘッダ処理部500−1は、転送先テーブルを参照し、INIT−ACKパケットをヘッダ処理部500−2に通知する(725)。ヘッダ処理部500−2は、INIT−ACKパケットに記述されている現用系の検証タグとシーケンス番号初期値を抽出し、パラメータ格納テーブル510−2の書換用の検証タグ904と書換用のシーケンス番号905に記憶する(726)。一方、CPUブレード1のヘッダ処理部500−1も、INIT−ACKパケットに記述されている自分の検証タグとシーケンス番号初期値を抽出し、パラメータ格納テーブル510−1の自分の検証タグ902と自分のシーケンス番号903に記憶する(727)。なお、現用系であるCPUブレード1に保持されるパラメータ格納テーブル510−1の書換用の検証タグ904と書換用のシーケンス番号905のカラムは空のままで、何も格納されない。その後、INIT−ACKパケットをスイッチブレード420に転送する(728)。スイッチブレードは、通信相手にINIT−ACKパケットを送信する(729)。この時点で、ヘッダ処理部500−1と500−2のそれぞれが保持するパラメータ転送テーブル510−1と510−2は、図9Aと図9Bに示したエントリのようになっている。
【0037】
図7Bに進む。スイッチブレード420は、通信相手からCOOKIE−ECHOパケットを受信し(730)、CPUブレード1に転送する。ヘッダ処理部500−1は、COOKIE−ECHOパケットを受け取る(731)。ヘッダ処理部500−1は、転送先テーブルを参照して、COOKIE−ECHOパケットをヘッダ処理部500−2に通知する(732)。ここで、このCOOKIE−ECHOパケットのヘッダには現用系であるCPUブレード1の検証タグが記述されおり、CPUブレード2のL4スタック502−2はそのままではパケットを破棄してしまう。そのため、ヘッダ処理部500−2は、図9Bに示したパラメータ格納テーブル510−2のエントリの自分の検証タグ902を参照し、COOKIE−ECHOパケットのヘッダの検証タグを、参照した値に書き換える(733)。その後、ヘッダ処理部は、VNIC501−2を介してL4スタック502−2にCOOKIE−ECHOパケットを渡す(734、735)。L4スタックは、応答としてCOOKIE−ACKパケットを返す(736)。ヘッダ処理500−2は、VNIC501−2を介して、COOKIE−ACKパケットを受け取る(737)。このCOOKIE−ACKパケットは、待機系側のL4スタックが作成したものなので、通信相手には送信すべきものではない。そのため、ヘッダ処理部500−2はCOOKIE−ACKパケットを破棄する(738)。この後、L4スタック502−2は、待ち受け登録をしたアプリケーション503−2に対して、このSCTPコネクションのソケット番号を通知し(739)、コネクション確立状態に遷移する(740)。
【0038】
一方、CPUブレード1のヘッダ処理部500−1も、受け取ったCOOKIE−ECHOパケットに対して、パラメータ格納テーブル510−1を参照する。しかしながら、図9Aに示したように、パラメータ格納テーブル510−1のエントリで、書換用の検証タグの項には何も記述がないので、ヘッダ処理部500−1はパケットヘッダに対して操作を行わない。ヘッダ処理部500−1は、VNIC501−1を介してL4スタック502−1にCOOKIE−ECHOパケットを渡す(750、751)。L4スタックは、応答としてCOOKIE−ACKパケットを返す(752)。ヘッダ処理500−1は、VNIC501−1を介して、COOKIE−ACKパケットを受け取る(753)。ここで、L4スタック502−1は、待ち受け登録をしたアプリケーション503−1に対して、このSCTPコネクションのソケット番号を通知し(754)、コネクション確立状態に遷移する(755)。その後、ヘッダ処理部500−1は、COOKIE−ACKパケットをスイッチブレード420に転送する(756)。スイッチブレードは、通信相手にCOOKIE−ACKパケットを送信する(757)。
【0039】
以上の手順により、他装置とゲートウェイ装置間のSCTPコネクション確立が完了する。
【0040】
次に、図7A、図7Bの場合とは反対にゲートウェイ装置の現用系であるCPUブレード1から外部の他装置に対してSCTPコネクションの確立要求を行う際の処理手順を、図10A、図10Bを用いて説明する。まず、図10Aから説明する。CPUブレード1(410−1)のアプリケーション503−1が、L4スタック502−1に対して接続要求(Connect)を行う(1000)。L4スタックは、INITパケットをVNIC501−1に渡す(1001)。ヘッダ処理500−1は、VNICを介してINITパケットを受け取る(1002)。ヘッダ処理部は、転送先テーブルを参照して、INITパケットをCPUブレード2のヘッダ処理部500−2に通知する(1003)。ヘッダ処理部500−1は同時に、INITパケットに記述されている自分の検証タグとシーケンス番号の初期値を抽出し、パラメータ格納テーブル510−1にエントリを作成して、自分の検証タグ902と自分のシーケンス番号903に上記パラメータを記憶する(1004)。その後、INITパケットをスイッチブレード420に転送する(1005)。スイッチブレードは、通信相手にINITパケットを送信する(1006)。
【0041】
一方、CPUブレード2のヘッダ処理部500−2も、INITパケットに記述されている現用系の検証タグとシーケンス番号初期値を抽出し、パラメータ格納テーブル510−2にエントリを作成して、書換用の検証タグ904と書換用のシーケンス番号905に記憶する(1007)。その後、ヘッダ処理部は、現用系であるCPUブレード1のアプリケーション503−1から接続要求があったことを通知し、待機系であるCPUブレード2のアプリケーション503−2が同様に接続要求を行うことを促す(1008)。すると、アプリケーション503−2は、L4スタック502−2に対して接続要求(Connect)を行う(1009)。L4スタックはINITパケットをVNIC501−2に渡す(1010)。ヘッダ処理500−2は、VNICを介してINITパケットを受け取る(1011)。ヘッダ処理部は、INITパケットに記述されている自分の検証タグとシーケンス番号の初期値を抽出し、パラメータ格納テーブル510−2に自分の検証タグ902と自分のシーケンス番号903に上記パラメータを記憶する(1012)。このINITパケットは、待機系側のL4スタックが作成したものなので、通信相手には送信すべきものではない。そのため、ヘッダ処理部500−2はINITパケットを破棄する(1013)。
【0042】
その後、スイッチブレード420が、通信相手の外部の他装置からINIT−ACKパケットを受信する(1020)。スイッチブレードはCPUブレード1にINIT−ACKパケットを転送し、ヘッダ処理部500−1がそのINIT−ACKパケットを受信する(1021)。ヘッダ処理部は、転送先テーブルを参照して、INIT−ACKパケットをCPUブレード2のヘッダ処理部500−2に通知する(1022)。ヘッダ処理部500−1は同時に、INIT−ACKパケットに記述されている通信相手の検証タグとシーケンス番号の初期値を抽出し、パラメータ格納テーブル510−1に、通信相手の検証タグ906と通信相手のシーケンス番号907に上記パラメータを記憶する(1023)。その後、VNIC501−1を介してL4スタック502−1にINIT−ACKパケットを渡す(1024、1025)。
【0043】
一方、CPUブレード2のヘッダ処理部500−2は、1022のINIT−ACKパケット通知を受けた後、パラメータ格納テーブル510−2のエントリの自分の検証タグ902を参照し、INIT−ACKパケットのヘッダの検証タグを、参照した値に書き換える(1026)。これは、INIT−ACKパケットのヘッダの検証タグには現用系のものが記述されており、そのままではCPUブレード2のL4スタック502−2がパケットを破棄してしまうからである。その後、ヘッダ処理部500−2は、INIT−ACKパケットに記述されている通信相手の検証タグとシーケンス番号の初期値を抽出し、パラメータ転送テーブル510−2の通信相手の検証タグ906と通信相手のシーケンス番号907に上記パラメータを記憶する(1027)。そして、ヘッダ処理部は、VNIC501−2を介してL4スタック502−2にINIT−ACKパケットを渡す(1028,1029)。この時点で、図7A,図7Bの場合と同様に、ヘッダ処理部500−1と500−2のそれぞれが保持するパラメータ転送テーブル510−1と510−2は、図9Aと図9Bに示したエントリのようになる。
【0044】
図10Bに進む。CPUブレード1のL4スタック502−1は、応答としてCOOKIE−ECHOパケットを返す(1030)。ヘッダ処理500−1は、VNIC501−1を介して、COOKIE−ECHOパケットを受け取る(1031)。ヘッダ処理部500−1は、受け取ったCOOKIE−ECHOパケットに対して、パラメータ格納テーブル510−1を参照する。しかしながら、図9Aに示したように、パラメータ格納テーブル510−1のエントリで、書換用の検証タグの項には何も記述がないので、ヘッダ処理部500−1はパケットヘッダに対して操作を行わない。その後、ヘッダ処理部は、COOKIE−ECHOパケットをスイッチブレード420に転送する(1032)。スイッチブレードは、通信相手にCOOKIE−ECHOパケットを送信する(1033)。
【0045】
一方、CPUブレード2のL4スタック502−2も、応答としてCOOKIE−ECHOパケットを返す(1034)。ヘッダ処理500−2は、VNIC501−2を介して、COOKIE−ECHOパケットを受け取る(1035)。このCOOKIE−ECHOパケットは、待機系側のL4スタックが作成したものなので、通信相手には送信すべきものではない。そのため、ヘッダ処理部500−2はCOOKIE−ECHOパケットを破棄する(1036)。
【0046】
その後、スイッチブレード420が、通信相手の外部の他装置からCOOKIE−ACKパケットを受信する(1040)。スイッチブレードはCPUブレード1にCOOKIE−ACKパケットを転送し、ヘッダ処理部500−1がそのCOOKIE−ACKパケットを受信する(1041)。ヘッダ処理部は、転送先テーブルを参照して、COOKIE−ACKパケットをCPUブレード2のヘッダ処理部500−2に通知する(1042)。ヘッダ処理部500−1は同時に、VNIC501−1を介してL4スタック502−1にCOOKIE−ACKパケットを渡す(1043、1044)。L4スタック502−1は、接続要求をしたアプリケーション503−1に対して、このSCTPコネクションのソケット番号を通知し(1045)、コネクション確立状態に遷移する(1046)。
【0047】
一方、CPUブレード2のヘッダ処理部500−2は、1042のCOOKIE−ACKパケット通知を受けた後、パラメータ格納テーブル510−2のエントリの自分の検証タグ902を参照し、COOKIE−ACKパケットのヘッダの検証タグを、参照した値に書き換える(1047)。これは、COOKIE−ACKパケットのヘッダの検証タグには現用系のものが記述されており、そのままではCPUブレード2のL4スタック502−2がパケットを破棄してしまうからである。その後、ヘッダ処理部500−2は、VNIC501−2を介してL4スタック502−2にCOOKIE−ACKパケットを渡す(1048,1049)。L4スタック502−2は、接続要求をしたアプリケーション503−2に対して、このSCTPコネクションのソケット番号を通知し(1050)、コネクション確立状態に遷移する(1051)。
以上の手順により、図7A、図7Bの場合と同様に、他装置とゲートウェイ装置間のSCTPコネクション確立が完了する。
(A−2)SCTP DATAパケット送受信
次に、図11を用いて、SCTPコネクションを確立した通信相手である外部の他装置から、SCTP DATAパケットを受信する処理手順を説明する。スイッチブレード420は、通信相手からDATAパケットを受信し(1100)、CPUブレード1に転送する。ヘッダ処理部500−1は、DATAパケットを受け取る(1101)。ヘッダ処理部500−1は、転送先テーブルを参照して、DATAパケットをヘッダ処理部500−2に通知する(1102)。ヘッダ処理部500−1は同時に、受け取ったDATAパケットに対して、パラメータ格納テーブル510−1を参照する。しかしながら、図9Aに示したように、パラメータ格納テーブル510−1のエントリで、書換用の検証タグの項には何も記述がないので、ヘッダ処理部500−1はパケットヘッダに対して操作を行わない。その後、ヘッダ処理部は、自身が保持するパラメータ格納テーブル510−1のエントリの通信相手のシーケンス番号907を1だけ更新する。そして、ヘッダ処理部は、VNIC501−1を介してL4スタック502−1にDATAパケットを渡す(1103、1104)。L4スタックはDATAパケットのペイロード部分にあるアプリケーションデータを抽出し、アプリケーション503−1に渡す(1105)。L4スタックは同時に、応答としてSACKパケットを返す(1106)。ヘッダ処理500−1は、VNIC501−1を介して、SACKパケットを受け取る(1107)。ヘッダ処理部は、SACKパケットをスイッチブレード420に転送する(1108)。スイッチブレードは、通信相手にSACKパケットを送信する(1109)。
【0048】
一方、CPUブレード2のヘッダ処理部500−2は、1102のDATAパケット通知を受けた後、パラメータ格納テーブル510−2のエントリの自分の検証タグ902を参照し、図2Aに示したDATAパケットのヘッダの検証タグ203を、参照した値に書き換える(1110)。これは、DATAパケットのヘッダの検証タグには現用系のものが記述されており、そのままではCPUブレード2のL4スタック502−2がパケットを破棄してしまうからである。その後、ヘッダ処理部は、自身が保持するパラメータ格納テーブル510−2のエントリの通信相手のシーケンス番号907を1だけ増やして更新する。そして、ヘッダ処理部は、VNIC501−2を介してL4スタック502−2にDATAパケットを渡す(1111、1112)。L4スタックはDATAパケットのペイロード部分にあるアプリケーションデータを抽出し、アプリケーション503−2に渡す(1113)。こうすることで、待機系側のアプリケーション503−2も現用系と同様のアプリケーションデータを受信することができ、アプリケーション間の同期も可能になる。L4スタック502−2は同時に、応答としてSACKパケットを返す(1114)。ヘッダ処理500−2は、VNIC501−2を介して、SACKパケットを受け取る(1115)。このSACKパケットは、待機系側のL4スタックが作成したものなので、通信相手には送信すべきものではない。そのため、ヘッダ処理部500−2はSACKパケットを破棄する(1116)。
【0049】
以上の手順を踏むことで、外部の他装置から受信したDATAパケットを現用系と待機系に入力し、適当なヘッダの値に書き換えることで、現用系と待機系のL4スタックでSCTPパケットを並列処理できるようになる。すなわち、ヘッダ処理部と併せることで、OSに改造を加えることなく、現用系と待機系のL4スタックが正しい状態遷移をとることができる。
【0050】
次に、図11の場合とは反対にゲートウェイ装置の現用系であるCPUブレード1から、SCTPコネクションを確立した通信相手である外部の他装置に対して、SCTP DATAパケットを送信する処理手順を、図12を用いて説明する。CPUブレード1のアプリケーション503−1が、L4スタック502−1に対してアプリケーションデータの送信を要求する(1200)。L4スタックは、DATAパケットを作成し、VNIC501−1に渡す(1201)。ヘッダ処理500−1は、VNICを介してDATAパケットを受け取る(1202)。ヘッダ処理部は、転送先テーブルを参照して、DATAパケットをCPUブレード2のヘッダ処理部500−2に通知する(1203)。ヘッダ処理部500−1は同時に、受け取ったDATAパケットに対して、パラメータ格納テーブル510−1を参照する。しかしながら、図9Aに示したように、パラメータ格納テーブル510−1のエントリで、書換用の検証タグの項には何も記述がないので、ヘッダ処理部500−1はパケットヘッダに対して操作を行わない。その後、ヘッダ処理部は、自身が保持するパラメータ格納テーブル510−1のエントリの自分のシーケンス番号903を1だけ増やして更新する。そして、ヘッダ処理部は、DATAパケットをスイッチブレード420に転送する(1204)。スイッチブレードは、通信相手にDATAパケットを送信する(1205)。
【0051】
一方、CPUブレード2のヘッダ処理部500−2は、1203のDATAパケット通知を受けた後、現用系であるCPUブレード1のアプリケーション503−1からアプリケーション送信要求があったことを通知し、待機系であるCPUブレード2のアプリケーション503−2が同様のアプリケーションデータ送信要求を行うことを促す(1206)。こうすることで、待機系側のアプリケーション503−2は、現用系側のアプリケーション503−1がどのようなアプリケーションデータを送信したのかを知ることができ、アプリケーション間の同期も可能になる。アプリケーション503−2は、L4スタック502−2に対してアプリケーションデータの送信要求を行う(1207)。L4スタックは、DATAパケットを作成し、VNIC501−2に渡す(1208)。ヘッダ処理500−2は、VNICを介してDATAパケットを受け取る(1209)。ヘッダ処理部は、自身が保持するパラメータ格納テーブル510−2のエントリの自分のシーケンス番号903と、現用系を示す書換用のシーケンス番号905をそれぞれ1だけ増やして更新する。このDATAパケットは、待機系側のL4スタックが作成したものなので、通信相手には送信すべきものではない。そのため、ヘッダ処理部500−2はDATAパケットを破棄する(1210)。
【0052】
その後、スイッチブレード420が、通信相手の外部の他装置からSACKパケットを受信する(1220)。スイッチブレードはCPUブレード1にSACKパケットを転送し、ヘッダ処理部500−1がそのSACKパケットを受信する(1221)。ヘッダ処理部は、転送先テーブルを参照して、SACKパケットをCPUブレード2のヘッダ処理部500−2に通知する(1222)。ヘッダ処理部500−1は同時に、VNIC501−1を介してL4スタック502−1にSACKパケットを渡す(1223、1224)。
【0053】
一方、CPUブレード2のヘッダ処理部500−2は、1222のSACKパケット通知を受けた後、パラメータ格納テーブル510−2のエントリの自分の検証タグ902と自分のシーケンス番号903を参照し、図2Bに示したSACKパケットのヘッダにある検証タグ213と受信DATAパケットのシーケンス番号214を、参照した値に書き換える(1225)。これは、SACKパケットのヘッダの検証タグには現用系のものが、また受信DATAパケットのシーケンス番号には現用系が送信したDATAパケットのシーケンス番号が記述されており、そのままではCPUブレード2のL4スタック502−2がパケットを破棄してしまうからである。その後、ヘッダ処理部500−2は、VNIC501−2を介してL4スタック502−2にSACKパケットを渡す(1226、1227)。
【0054】
以上の手順を踏むことで、現用系側のアプリケーションから外部の他装置に送信するDATAパケットを現用系と待機系で作り出し、また応答であるSACKパケットを現用系と待機系に入力して適当なヘッダの値に書き換えて、現用系と待機系のL4スタックでSCTPパケットを並列処理できるようになる。すなわち、ヘッダ処理部と併せることで、OSに改造を加えることなく、現用系と待機系のL4スタックが正しい状態遷移をとることができる。
【0055】
また、本実施例では、スイッチブレードが通信相手からSCTPパケットを受信した場合、先に現用系に転送するように設定しているが、実際には先に待機系に転送するようにすることも可能である。
(B)故障発生時におけるSCTPパケット送受信
次に、前記(A)の手順を満たしておくことで、現用系もしくは待機系に故障が発生した場合でも、L4コネクションを切断することなく、通信を継続できることを説明する。
(B−1)現用系故障発生時におけるSCTP DATAパケット送受信
図13は、現用系であるCPUブレード1(410−1)に故障が発生した際に、待機系であるCPUブレード2(410−2)がパケットを受信するための前準備の手順である。CPUブレード1に故障が発生する(1300)。CPUブレード2は、その故障を検知する(1301)。すると、CPUブレード2では、ヘッダ処理部が保持する転送先テーブルの各エントリにある転送先から、<CPUブレード1>という記述を削除し、転送を停止する(1302)。CPUブレード2は、スイッチブレード420に対してGratuitous ARPパケットを送信し、MACアドレスをスイッチブレードに登録する(1304)。こうすることで、ゲートウェイ装置宛に送られてきたパケットがCPUブレード2に転送されるようになる。その後、CPUブレード2は、現用系として動作するように、内部で動くアプリケーションを現用状態に移行する(1305)。なお、本実施の形態のゲートウェイ装置のように、あらかじめ待機系側のアプリケーションにすべてのアプリケーションデータを転送しておくことで、冗長切替時にアプリケーション情報の引継ぎを行わなくて済む。
【0056】
次に、図14を用いて、SCTPコネクションを確立した通信相手である外部の他装置から、SCTP DATAパケットを受信する処理手順を説明する。スイッチブレード420は、通信相手からDATAパケットを受信し(1400)、CPUブレード2に転送する。ヘッダ処理部500−2は、DATAパケットを受け取る(1401)。ヘッダ処理部500−1は、受け取ったDATAパケットに対して、パラメータ格納テーブル510−2のエントリの自分の検証タグ902を参照し、図2Aに示したDATAパケットのヘッダの検証タグ203を、参照した値に書き換える(1402)。これは、DATAパケットのヘッダの検証タグには現用系であったCPUブレード1のものが記述されており、そのままではCPUブレード2のL4スタック502−2がパケットを破棄してしまうからである。その後、ヘッダ処理部は、自身が保持するパラメータ格納テーブル510−2のエントリの通信相手のシーケンス番号907を1だけ増やして更新する。そして、ヘッダ処理部は、VNIC501−2を介してL4スタック502−2にDATAパケットを渡す(1403、1404)。L4スタックは、DATAパケットのペイロード部分にあるアプリケーションデータを抽出し、アプリケーション503−2に渡す(1405)。L4スタックは同時に、応答としてSACKパケットを返す(1406)。ヘッダ処理500−2は、VNIC501−2を介して、SACKパケットを受け取る(1407)。このSACKパケットのヘッダ書換は不要である。ヘッダ処理部は、SACKパケットをスイッチブレード420に転送する(1408)。スイッチブレードは、通信相手にSACKパケットを送信する(1409)。
【0057】
次に、図15を用いて、ゲートウェイ装置の現在の現用系であるCPUブレード2から、SCTPコネクションを確立した通信相手である外部の他装置に対して、SCTP DATAパケットを送信する処理手順を説明する。CPUブレード2のアプリケーション503−2が、L4スタック502−2に対してアプリケーションデータの送信を要求する(1500)。L4スタックは、DATAパケットを作成し、VNIC501−2に渡す(1501)。ヘッダ処理500−2は、VNICを介してDATAパケットを受け取る(1502)。ヘッダ処理部は、自身が保持するパラメータ格納テーブル510−2のエントリの自分のシーケンス番号903と、書換用のシーケンス番号905をそれぞれ1だけ増やして更新する。ヘッダ処理部は同時に、パラメータ格納テーブルのエントリの書換用のシーケンス番号905を参照し、図2Aに示したDATAパケットのヘッダのシーケンス番号204を、参照した値に書き換える(1503)。これは、DATAパケットのヘッダのシーケンス番号にはCPUブレード2のものが記述されているからである。SCTPコネクションが確立されたままなので、通信相手はDATAパケットのシーケンス番号にはCPUブレード1のもの、すなわち参照している書換用のシーケンス番号905の値が記述されていることを期待している。そのため、そのままでは通信相手がパケットを破棄してしまう。ヘッダ処理部500−2は、ヘッダを書き換えた後、DATAパケットをスイッチブレード420に転送する(1504)。スイッチブレードは、通信相手にDATAパケットを送信する(1505)。
【0058】
その後、スイッチブレード420が、通信相手の外部の他装置からSACKパケットを受信する(1506)。スイッチブレードはCPUブレード2にSACKパケットを転送し、ヘッダ処理部500−2がそのSACKパケットを受信する(1507)。ヘッダ処理部は、パラメータ格納テーブル510−2のエントリの自分の検証タグ902と自分のシーケンス番号903を参照し、図2Bに示したSACKパケットのヘッダにある検証タグ213と受信DATAパケットのシーケンス番号214を、参照した値に書き換える(1508)。これは、SACKパケットのヘッダの検証タグ213には現用系であったCPUブレード1のものが、また受信DATAパケットのシーケンス番号214には、ヘッダを書換用のシーケンス番号に書き換えて送信したDATAパケットのシーケンス番号が記述されており、そのままではCPUブレード2のL4スタック502−2がパケットを破棄してしまうからである。その後、ヘッダ処理部500−2は、VNIC501−2を介してL4スタック502−2にSACKパケットを渡す(1509、1510)。
【0059】
以上の手順を踏むことで、SCTPコネクションを切断することなく、通信を継続できる。すなわち、L4コネクションの冗長化を達成できる。また、故障発生時に必要な動作は、図13の手順だけであり、冗長切替の高速化に貢献できる。
(B−2)待機系故障発生時におけるSCTP DATAパケット送受信
図16は、待機系であるCPUブレード2(410−2)に故障が発生した際に、現用系であるCPUブレード1(410−1)が行う手順である。CPUブレード2に故障が発生する(1600)。CPUブレード1は、その故障を検知する(1601)。すると、CPUブレード1では、ヘッダ処理部が保持する転送先テーブルの各エントリにある転送先から、<CPUブレード2>という記述を削除し、転送を停止する(1602)。要するに、CPUブレード1から2へのSCTPパケットの転送を停止するだけである。
【0060】
次に、図17を用いて、SCTPコネクションを確立した通信相手である外部の他装置から、SCTP DATAパケットを受信する処理手順を説明する。スイッチブレード420は、通信相手からDATAパケットを受信し(1700)、CPUブレード1に転送する。ヘッダ処理部500−1は、DATAパケットを受け取る(1701)。ヘッダ処理部500−1は、受け取ったDATAパケットに対して、パラメータ格納テーブル510−1を参照する。しかしながら、図9Aに示したように、パラメータ格納テーブル510−1のエントリで、書換用の検証タグの項には何も記述がないので、ヘッダ処理部500−1はパケットヘッダに対して操作を行わない。その後、ヘッダ処理部は、自身が保持するパラメータ格納テーブル510−1のエントリの通信相手のシーケンス番号907を1だけ更新する。そして、ヘッダ処理部は、VNIC501−1を介してL4スタック502−1にDATAパケットを渡す(1702、1703)。L4スタックはDATAパケットのペイロード部分にあるアプリケーションデータを抽出し、アプリケーション503−1に渡す(1704)。L4スタックは同時に、応答としてSACKパケットを返す(1705)。ヘッダ処理500−1は、VNIC501−1を介して、SACKパケットを受け取る(1706)。ヘッダ処理部は、SACKパケットをスイッチブレード420に転送する(1707)。スイッチブレードは、通信相手にSACKパケットを送信する(1708)。
【0061】
次に、図18を用いて、ゲートウェイ装置の現用系であるCPUブレード1から、SCTPコネクションを確立した通信相手である外部の他装置に対して、SCTP DATAパケットを送信する処理手順を説明する。CPUブレード1のアプリケーション503−1が、L4スタック502−1に対してアプリケーションデータの送信を要求する(1800)。L4スタックは、DATAパケットを作成し、VNIC501−1に渡す(1801)。ヘッダ処理500−1は、VNICを介してDATAパケットを受け取る(1802)。ヘッダ処理部は、受け取ったDATAパケットに対して、パラメータ格納テーブル510−1を参照する。しかしながら、図9Aに示したように、パラメータ格納テーブル510−1のエントリで、書換用の検証タグの項には何も記述がないので、ヘッダ処理部500−1はパケットヘッダに対して操作を行わない。その後、ヘッダ処理部は、自身が保持するパラメータ格納テーブル510−1のエントリの自分のシーケンス番号903を1だけ増やして更新する。そして、ヘッダ処理部は、DATAパケットをスイッチブレード420に転送する(1803)。スイッチブレードは、通信相手にDATAパケットを送信する(1804)。
【0062】
その後、スイッチブレード420が、通信相手の外部の他装置からSACKパケットを受信する(1805)。スイッチブレードはCPUブレード1にSACKパケットを転送し、ヘッダ処理部500−1がそのSACKパケットを受信する(1806)。ヘッダ処理部は、VNIC501−1を介してL4スタック502−1にSACKパケットを渡す(1807、1808)。
【0063】
以上の手順を踏むことで、待機系故障発生時にもなんら問題なく、DATAパケットの送受信を続けることができる。
(C)新たにCPUブレード3を現用系として追加した際のSCTPパケット送受信
次に、前記(A)の手順を満たしておくことで、負荷分散のために新たに現用系を追加した場合でも、L4コネクションを切断することなく、通信を継続できることを説明する。ここで想定する状況は、現用系であるCPUブレード1のCPU負荷が高くなってきた際に、あらたにCPUブレード3を追加し、一部のSCTPコネクションのパケット処理をCPUブレード3に切り替える場合である。
(C−1)CPUブレード1からCPUブレード3へのSCTPコネクション切替
図19A、図19Bを用いて、CPUブレード1からCPUブレード3への特定のSCTPコネクションの端点を切り替える手順を説明する。図19Aから説明する。CPUブレード3(410−3)も、他のCPUブレードと同様に、ヘッダ処理部500−3、VNIC501−3、L4スタック502−3、アプリケーション503−3を備える。まず、装置の管理者が、各CPUブレードに負荷分散を開始することを設定する(1900)。すると、CPUブレード3のアプリケーション503−3が、現用状態で起動する(1901)。アプリケーションは、L4スタック502−3に対して待ち受け登録(Listen)を行う(1902)。次に、CPUブレード1のヘッダ処理部500−1は、ヘッダ処理部500−3に対して、端点の切替をしたいSCTPコネクションのL4パラメータを通知する(1910)。
【0064】
図20は、L4パラメータ通知メッセージ1910のデータ構造である。L4パラメータ通知メッセージは、通信相手のアドレス2000と、自分のポート番号2001と、通信相手のポート番号2002と、書換用の検証タグ2003と、書換用のシーケンス番号2004と、通信相手の検証タグ2005と、通信相手のシーケンス番号2006を含む。これらの情報はすべて、ヘッダ処理部500−1が保持する、図9Aに示したパラメータ格納テーブル510−1のエントリから作成される。自分のポート番号2001には自分のポート番号900を、通信相手のポート番号2002には通信相手のポート番号901を、書換用の検証タグ2003には自分の検証タグ902を、書換用のシーケンス番号2004には現在の自分のシーケンス番号903を、通信相手の検証タグ2005には通信相手の検証タグ906を、通信相手のシーケンス番号2006には現在のシーケンス番号907を格納する。
【0065】
図19Aに戻る。ヘッダ処理部500−3は、L4パラメータ通知メッセージの通信相手の検証タグ2005と、通信相手のシーケンス番号2006を用いて、INITパケットを作成し、VNIC501−3を介してL4スタック502−3に渡す(1911、1912)。ヘッダ処理部500−3がこのようなINITパケットを作成することで、L4スタック502−3に対して、擬似的に通信相手からSCTPコネクション確立要求があったかのように挙動させることができる。このとき、通信相手のシーケンス番号を引き継ぐため、通信相手はSCTPコネクションを張り直すことなく、SCTPパケットを送信し続けることができる。その後、L4スタック502−3は、応答としてINIT−ACKパケットを返す(1913)。ヘッダ処理500−3は、VNIC501−3を介して、INIT−ACKパケットを受け取る(1914)。ヘッダ処理部は、INIT−ACKパケットに記述されている自分の検証タグとシーケンス番号の初期値を抽出し、パラメータ格納テーブルに記憶する(1915)。
【0066】
図21は、CPUブレード3のヘッダ処理部500−3がもつパラメータ格納テーブル510−3である。ヘッダ処理部は、パラメータ格納テーブル510−3にエントリを作成し、1910のL4パラメータ通知メッセージに記述されたパラメータと、1915で抽出したパラメータを格納する。図21に示すエントリは、1915の時点での状態である。このとき、書換用の検証タグ903には元の現用系であったCPUブレード1の検証タグが、書換用のシーケンス番号には904には切替直前のCPUブレード1のシーケンス番号が、それぞれ記述されることになる。
【0067】
図19Aに戻る。ヘッダ処理部500−3はCOOKIE−ECHOパケットを作成し、VNIC501−3を介してL4スタック502−3に渡す(1916、1917)。L4スタックは、応答としてCOOKIE−ACKパケットを返す(1918)。ヘッダ処理500−3は、VNIC501−3を介して、COOKIE−ACKパケットを受け取る(1919)。ここで、L4スタック502−3は、待ち受け登録をしたアプリケーション503−3に対して、このSCTPコネクションのソケット番号を通知し(1920)、コネクション確立状態に遷移する(1921)。これ以降、L4スタック502−3は、切替対象となったSCTPパケットを送受信することができるようになる。その後、ヘッダ処理部500−3は、CPUブレード1のヘッダ処理部500−1に対して、SCTPコネクション設定が完了したことを通知する(1922)。
【0068】
図19Bに進む。CPUブレード1のアプリケーション503−1は、CPUブレード3のアプリケーション503−3に対して、サービスを引き継ぐのに必要なアプリケーション情報を通知する(1930)。本実施の形態のゲートウェイ装置では、アプリケーション情報通知の方法については特に制限はなく、任意の方法を採ることが可能である。その後、各CPUブレードのヘッダ処理部は、1900で管理者が設定した情報に転送先テーブルを変更する(1931、1932、1933)。具体的には、CPUブレード1とCPUブレード3の間、CPUブレード2とCPUブレード3の間で切替対象となったSCTPコネクションのパケットを転送するように設定される。その後、CPUブレード1のL4スタックが持っているSCTPコネクションリソースを解放するため、ヘッダ処理部500−1は、図9Aに示すパラメータ格納テーブル510−1のエントリの通信相手の検証タグを用いてSHUTDOWNパケットを作成し、VNIC501−1を介してL4スタック502−1に渡す(1934、1935)。ヘッダ処理部500−1がこのようなSHUTDOWNパケットを作成することで、L4スタック502−1に対して、擬似的に通信相手からSCTPコネクション終了要求があったかのように挙動させることができる。その後、L4スタック502−1は、応答としてSHUTDOWN−ACKパケットを返す(1936)。ヘッダ処理500−1は、VNIC501−1を介して、SHUTDOWN−ACKパケットを受け取る(1937)。ヘッダ処理部は、完了通知としてSHUDOWN−COMPLETEパケットを作成し、VNIC501−1を介してL4スタック502−1に渡す(1938、1939)。L4スタックは該当するSCTPコネクションを利用していたアプリケーション503−1に対して、SCTPコネクションの切断通知を行い(1940)、コネクション終了状態に遷移する(1941)。
【0069】
以上の手順を踏むことで、特定のSCTPコネクションの端点をCPUブレード1からCPUブレード3へ切り替える操作が完了する。
(C−2)前記(C−1)後におけるSCTP DATAパケット送受信
次に、図22を用いて、前記(C−1)の手順を満たした後に、SCTPコネクションを確立した通信相手である外部の他装置から、SCTP DATAパケットを受信する処理手順を説明する。スイッチブレード420は、通信相手からDATAパケットを受信し(2200)、CPUブレード1に転送する。CPUブレード1のヘッダ処理部500−1は、DATAパケットを受け取る(2201)。ヘッダ処理部500−1は、転送先テーブルを参照して、DATAパケットをCPUブレード3のヘッダ処理部500−3に通知する(2202)。ヘッダ処理部500−3は、転送先テーブルを参照して、DATAパケットをCPUブレード2のヘッダ処理部500−2に通知する(2203)。ヘッダ処理部500−3は同時に、受け取ったDATAパケットに対して、パラメータ格納テーブル510−3のエントリの自分の検証タグ902を参照し、図2Aに示したDATAパケットのヘッダの検証タグ203を、参照した値に書き換える(2204)。これは、DATAパケットのヘッダの検証タグには元の現用系であったCPUブレード1の検証タグが記述されており、そのままではCPUブレード3のL4スタック502−3がパケットを破棄してしまうからである。その後、ヘッダ処理部500−3は、自身が保持するパラメータ格納テーブル510−3のエントリの通信相手のシーケンス番号907を1だけ増やして更新する。そして、ヘッダ処理部は、VNIC501−3を介してL4スタック502−3にDATAパケットを渡す(2205、2206)。L4スタックはDATAパケットのペイロード部分にあるアプリケーションデータを抽出し、アプリケーション503−3に渡す(2207)。L4スタックは同時に、応答としてSACKパケットを返す(2208)。ヘッダ処理500−3は、VNIC501−3を介して、SACKパケットを受け取る(2209)。ヘッダ処理部は、SACKパケットをスイッチブレード420に転送する(2210)。スイッチブレードは、通信相手にSACKパケットを送信する(2211)。
【0070】
一方、CPUブレード2のヘッダ処理部500−2は、2203のDATAパケット通知を受けた後、図11に示した1110〜1116と同様の手順を行う。そのため、ここでは説明を省略する。
【0071】
以上の手順を踏むことで、一部のSCTPコネクションのパケット処理をCPUブレード1からCPUブレード3に切り替えた場合でも、SCTPコネクションを切断することなく、継続的にDATAパケットを受信することができる。
【0072】
次に、図23を用いて、現在の現用系であるCPUブレード3から、SCTPコネクションを確立した通信相手である外部の他装置に対して、SCTP DATAパケットを送信する処理手順を説明する。CPUブレード3のアプリケーション503−3が、L4スタック502−3に対してアプリケーションデータの送信を要求する(2300)。L4スタックは、DATAパケットを作成し、VNIC501−3に渡す(2301)。ヘッダ処理500−3は、VNICを介してDATAパケットを受け取る(2302)。ヘッダ処理部は、自身が保持するパラメータ格納テーブル510−3のエントリの自分のシーケンス番号903と、書換用のシーケンス番号905をそれぞれ1だけ増やして更新する。ヘッダ処理部は同時に、パラメータ格納テーブルのエントリの書換用のシーケンス番号905を参照し、図2Aに示したDATAパケットのヘッダのシーケンス番号204を、参照した値に書き換える(2303)。これは、DATAパケットのヘッダのシーケンス番号にはCPUブレード3のものが記述されているからである。SCTPコネクションが確立されたままなので、通信相手はDATAパケットのシーケンス番号にはCPUブレード1のもの、すなわち参照している書換用のシーケンス番号905の値が記述されていることを期待している。そのため、そのままでは通信相手がパケットを破棄してしまう。ヘッダ処理部500−3は、ヘッダを書き換えた後、DATAパケットをスイッチブレード420に転送する(2304)。スイッチブレードは、通信相手にDATAパケットを送信する(2305)。
一方、ヘッダ処理部500−3は、2304で転送するDATAパケットを複製し、転送先テーブルを参照して、複製したDATAパケットをCPUブレード2のヘッダ処理部500−2に通知する(2306)。その後、ヘッダ処理部500−2は、図12に示した1206〜1210と同様の手順を行う。そのため、ここでは説明を省略する。
【0073】
その後、スイッチブレード420が、通信相手の外部の他装置からSACKパケットを受信する(2310)。スイッチブレードはCPUブレード1にSACKパケットを転送し、ヘッダ処理部500−1がそのSACKパケットを受信する(2311)。ヘッダ処理部500−1は、転送先テーブルを参照して、SACKパケットをCPUブレード3のヘッダ処理部500−3に通知する(2312)。ヘッダ処理部500−3は、転送先テーブルを参照して、SACKパケットをCPUブレード2のヘッダ処理部500−2に通知する(2313)。ヘッダ処理部500−3は同時に、パラメータ格納テーブル510−3のエントリの自分の検証タグ902と自分のシーケンス番号903を参照し、図2Bに示したSACKパケットのヘッダにある検証タグ213と受信DATAパケットのシーケンス番号214を、参照した値に書き換える(2314)。これは、SACKパケットのヘッダの検証タグ213には元の現用系であるCPUブレード1のものが、また受信DATAパケットのシーケンス番号214には、ヘッダを書換用のシーケンス番号に書き換えて送信したDATAパケットのシーケンス番号が記述されており、そのままではCPUブレード2のL4スタック502−2がパケットを破棄してしまうからである。その後、ヘッダ処理部500−3は、VNIC501−3を介してL4スタック502−3にSACKパケットを渡す(2315、2316)。
【0074】
一方、CPUブレード2のヘッダ処理部500−2は、2313のSACKパケット通知を受けた後、図12に示した1225〜1227と同様の手順を行う。そのため、ここでは説明を省略する。
【0075】
以上の手順を踏むことで、一部のSCTPコネクションのパケット処理をCPUブレード1からCPUブレード3に切り替えた場合でも、SCTPコネクションを切断することなく、継続的にDATAパケットを送信することができる。
3.処理(フローチャート)
本実施の形態のゲートウェイ装置では、ヘッダ処理部がL4コネクションで用いるパラメータを記憶して、必要に応じてヘッダを書き換えることによって、L4コネクションの冗長化を実現している。ヘッダ処理部の動作パターンは、VNIC、すなわち装置内のL4スタックからパケットを読み込んだ場合と、VNIC以外からパケットを受け取った場合に分けられる。また、装置が現用系である場合と、装置が待機系である場合に分けられる。図24、図25、図26、図27を用いて、SCTPを例にとり、ヘッダ処理部の動作を説明する。
【0076】
図24は、現用系においてヘッダ処理部がVNICから読込んだSCTPパケットを処理するフローチャート図である。まず、VNICからSCTPパケットを読み込む(2400)。読み込んだパケットがDATAパケットである場合(2401)、図9Aなどで示したパラメータ格納テーブルに該当するエントリがあれば、自分のシーケンス番号903と書換用のシーケンス番号905の値を1だけ増やして更新する(2402)。その後、同エントリの書換用シーケンス番号905に値が記述されている場合には、DATAパケットのヘッダをその値に書き換える(2403)。その後、ヘッダ処理部は、図8に示した転送先テーブルを参照して、適当なCPUブレードのヘッダ処理部にSCTPパケットを転送する(2406)。
【0077】
一方、VNICから読み込んだSCTPパケットが、INITパケットもしくはINIT−ACKパケットである場合(2404)、パケットに記述されている検証タグとシーケンス番号初期値を抽出し、図9Aなどで示したパラメータ格納テーブルに新たなエントリを作成して、自分の検証タグ902と自分のシーケンス番号903に記憶する(2405)。その後、ヘッダ処理部は、図8に示した転送先テーブルを参照して、適当なCPUブレードのヘッダ処理部にSCTPパケットを転送する(2406)。
【0078】
最後に、VNICから読み込んだSCTPパケットの種別に係わらず、スイッチブレードを介してそのパケットを通信相手に送信し(2407)、処理を終了する(2408)。
【0079】
図25は、現用系においてヘッダ処理部がVNIC以外から受取ったSCTPパケットを処理するフローチャート図である。まず、VNIC以外からSCTPパケットを受け取る(2500)。これはすなわち、通信相手からのSCTPパケットを受け取ったことを意味する。次に、図8に示した転送先テーブルを参照して、適当なCPUブレードのヘッダ処理部にSCTPパケットを転送する(2501)。転送先テーブルの転送先802に、装置内のL4スタックにパケットを渡すことを意味する<local>を含むか検査し(2502)、含まなければ処理を終了する(2511)。
【0080】
2502に戻り、転送先に<local>を含む場合に進む。受け取ったSCTPパケットがDATAパケットである場合(2503)、図9Aなどで示したパラメータ格納テーブルに該当するエントリがあれば、通信相手のシーケンス番号907の値を1だけ増やして更新する(2504)。あるいは、受け取ったSCTPパケットがINITパケットもしくはINIT−ACKパケットである場合(2505)、パケットに記述されている検証タグとシーケンス番号初期値を抽出し、図9Aなどで示したパラメータ格納テーブルに新たなエントリを作成して、通信相手の検証タグ906と通信相手のシーケンス番号907に記憶する(2506)。あるいは、受け取ったSCTPパケットがSACKパケットである場合(2507)、SACKパケットのヘッダにある受信DATAパケットのシーケンス番号を、パラメータ格納テーブルの該当するエントリの自分のシーケンス番号903の値と異なれば、その値に書き換える(2508)。その後、受け取ったSCTPパケットの種別に係わらず、SCTPパケットのヘッダの検証タグを、パラメータ格納テーブルの該当するエントリの自分の検証タグ902の値と異なれば、その値に書き換える(2509)。そして、VNICにSCTPパケットを書き込み(2510)、処理を終了する(2511)。
【0081】
図26は、待機系においてヘッダ処理部がVNICから読込したSCTPパケットを処理するフローチャート図である。まず、VNICからSCTPパケットを読み込む(2600)。読み込んだパケットがDATAパケットである場合(2601)、図9Bなどで示したパラメータ格納テーブルに該当するエントリがあれば、自分のシーケンス番号903と書換用のシーケンス番号905の値を1だけ増やして更新する(2602)。一方、VNICから読み込んだSCTPパケットが、INITパケットもしくはINIT−ACKパケットである場合(2603)、パケットに記述されている検証タグとシーケンス番号初期値を抽出し、図9Aなどで示したパラメータ格納テーブルに新たなエントリを作成して、自分の検証タグ902と自分のシーケンス番号903に記憶する(2604)。
【0082】
最後に、VNICから読み込んだSCTPパケットの種別に係わらず、パケットを破棄し(2605)、処理を終了する(2606)。
【0083】
図27は、待機系においてヘッダ処理部がVNIC以外から受取ったSCTPパケットを処理するフローチャート図である。まず、VNIC以外からSCTPパケットを受け取る(2700)。SCTPパケットの送信元のアドレスを特定する(2701)。送信元が現用系である、すなわち現用系から通信相手に送信されるSCTPパケットである場合に進む。SCTPパケットがINITパケットもしくはINIT−ACKパケットである場合(2702)、パケットに記述されている検証タグとシーケンス番号初期値を抽出し、図9Bなどで示したパラメータ格納テーブルに新たなエントリを作成して、書換用の検証タグ904と書換用のシーケンス番号905に記憶する(2703)。次に、SCTPパケットがINITパケットもしくはDATAパケットである場合(2704)、接続要求やアプリケーションデータ送信を促すために、装置内のアプリケーションに対してINITパケットもしくはDATAパケットを直接通知し(2705)、処理を終了する(2715)。一方、装でない場合、パケットを破棄し(2706)、処理を終了する(2715)。
【0084】
2701に戻り、SCTP送信元が通信相手である、すなわちゲートウェイ装置が通信相手から受信したSCTPパケットである場合に進む。受け取ったSCTPパケットがDATAパケットである場合(2707)、図9Aなどで示したパラメータ格納テーブルに該当するエントリがあれば、通信相手のシーケンス番号907の値を1だけ増やして更新する(2708)。あるいは、受け取ったSCTPパケットがINITパケットもしくはINIT−ACKパケットである場合(2709)、パケットに記述されている検証タグとシーケンス番号初期値を抽出し、図9Aなどで示したパラメータ格納テーブルに新たなエントリを作成して、通信相手の検証タグ906と通信相手のシーケンス番号907に記憶する(2710)。あるいは、受け取ったSCTPパケットがSACKパケットである場合(2711)、SACKパケットのヘッダにある受信DATAパケットのシーケンス番号を、パラメータ格納テーブルの該当するエントリの自分のシーケンス番号903の値と異なれば、その値に書き換える(2712)。その後、受け取ったSCTPパケットの種別に係わらず、SCTPパケットのヘッダの検証タグを、パラメータ格納テーブルの該当するエントリの自分の検証タグ902の値と異なれば、その値に書き換える(2713)。そして、VNICにSCTPパケットを書き込み(2714)、処理を終了する(2715)。
【0085】
以上の処理によって、本実施の形態のゲートウェイ装置は、冗長構成をとるゲートウェイ装置において、L4コネクションを確立した通信相手から受信したパケットを複製して、現用系と待機系の両方にパケットを入力し、それぞれのL4スタックで処理してL4コネクションの冗長化を実現できる。また、L4コネクションを確立したまま柔軟な冗長化装置の運用が可能となる。
【産業上の利用可能性】
【0086】
本発明は、移動体通信のゲートウェイ装置に限らず、様々な通信システムにおいてL4コネクション端点となる通信制御装置の冗長化に適用することができる。
【符号の説明】
【0087】
400 ゲートウェイ装置
410−1 CPUブレード1
420 スイッチブレード
500−1 ヘッダ処理部
501−1 VNIC
502−1 L4スタック
503−1 アプリケーション
510−1 パラメータ格納テーブル
511−1 転送先テーブル
1910 L4パラメータ通知メッセージ
【技術分野】
【0001】
本発明は、ゲートウェイ装置に係わり、特に、現用系と待機系を用意して冗長化を行い、かつ、レイヤ4コネクションの端点となるゲートウェイ装置に関する。
【背景技術】
【0002】
3GPP(3rd Generation Partnership Project)のLTE(Long Term Evolution)に代表される第3.9世代移動体通信網では、ネットワークがオールIP化されて、従来は回線交換網で提供されてきた電話サービスがIP網で提供されるようになる。このため、今後は移動体通信システムにおけるゲートウェイ装置に対しても電話交換機並の高信頼性が要求される。この高信頼性を達成するために、物理的に独立した2つ以上の装置を用意して、実際にサービスを提供する現用系としての役割と、通常はバックアップとして動作して、現用系故障時には代わりにサービスを提供する待機系としての役割を与えて、ゲートウェイ装置の冗長化を行う。これにより継続的なサービス提供が可能となる。このとき、現用系と待機系の切替時間、すなわちサービス停止時間は短時間(1秒以内)であることが望まれる。
【0003】
一方、ゲートウェイ装置は、通信システム内の他装置と通信する際に、SCTP(Stream Control Transmission Protocol)やTCP(Transmission Control Protocol)に代表されるコネクション型レイヤ4(L4)プロトコルを用いる。特に移動体通信システムにおいては、呼処理関係のシグナリングにSCTPが用いられる傾向にあり、今後も利用は増えていくと考えられる。一般に、L4コネクションは状態遷移を持つため、冗長切替が発生すると、L4コネクションは一度切断され、その後再接続処理が行われる。これを図1を用いて説明する。
【0004】
図1は現用系故障時の冗長切替において、SCTPを例にとり、L4コネクションを再接続するシーケンスである。冗長化装置101は、レイヤ2(L2)スイッチ102と現用系103と待機系104から構成される。現用系と待機系は、L2スイッチを介して他装置105と通信を行う。図1では、現用系と他装置との間であらかじめSCTPコネクションを確立している。そのため、他装置が送信したDATAパケット(110、111)を現用系は受信し、またその応答であるSACKパケット(112、113)を他装置は受信することができる。
【0005】
図2AはDATAパケットのデータ構造であり、図2BはSACKパケットのデータ構造である。DATAパケット110のヘッダの送信元ポート番号201、送信先ポート番号202、送信先の検証タグ203、およびSACKパケット112のヘッダの送信元ポート番号211、送信先ポート番号212、送信先の検証タグ213は、L4コネクションを確立する際に通信相手である他装置と現用系との間で交換するパラメータである。また、DATAパケットヘッダの送信元が付けるシーケンス番号204は、初期値をSCTPコネクション確立時に交換し、DATAパケットを送信するごとに増加されるパラメータである。さらに、SACKパケットヘッダに付加する受信したDATAパケットのシーケンス番号214は、対応するDATAパケットのシーケンス番号204と同じ値をとるパラメータである。OS(Operation System)内においてSCTPコネクションを管理するL4スタックは、DATAパケットとSACKパケットを受信するごとにパケットに付加されるこれらの情報が正しいことを精査する。もしこれらの情報に誤りやズレがあれば、受信パケットを破棄するか、もしくはパケットの再送を要求する。L4スタックは内部に独自の状態遷移を持ちながら、上述したパケット精査を自動的に行う。
【0006】
図1に戻る。現用系に故障が発生すると(114)、他装置から送信されたDATAパケット(115、116)がL2スイッチから転送されない状態になる。待機系は現用系の故障を検知すると(117)、自分がサービスを提供するために現用系に移行する(118)。以降、待機系104を旧待機系104と記述する。旧待機系104は、冗長化装置101に送られたパケットを受信できるようにするために、L2スイッチに対してGratuitous ARP(119)を送信する。すると、DATAパケット120は、旧待機系に転送されるようになる(121)。しかしながら、旧待機系のL4スタックは、このSCTPコネクションに関する状態遷移情報を持たないため、DATAパケットを破棄して、応答として接続を強制終了させるABORTパケット(122、123)を他装置に送信する。他装置は、ABORTパケットを受信すると、SCTPコネクションが強制切断されたことを、そのSCTPコネクションを利用していたアプリケーションに通知する。アプリケーションは、再度データを送信するために再接続処理を要求する(124)。他装置のL4スタックは自動的に、待機系のL4スタックとの間でINITパケット、INIT−ACKパケット、COOKIE−ECHOパケット、COOKIE−ACKパケット(125〜132)をやり取りし、DATAパケット、SACKパケット送受信に必要となる情報を新たに交換して、新規のSCTPコネクションを再確立する。その後、他装置内のアプリケーションは、故障発生前後に送信し損なったデータの再送信処理を行う(133)。そして、新たに確立したSCTPコネクションを用いて、DATAパケット(134、135)とSACKパケット(136、137)が送受信される。以上のように、L4コネクションを持つ冗長化装置が冗長切替を行う場合には、強制切断、再接続、再送信の処理が必要になる。そのため、確立されるL4コネクション数が多くなると、高速な冗長切替達成に影響を与える。したがって、図1の破線部分140の処理を省き、L4コネクションの冗長化を行うことが要求される。
【0007】
これを解決するためには、現用系と待機系内のそれぞれのL4スタックが持つL4コネクションの状態遷移を同期させればよい。この方式として、共有方式と並列処理方式が挙げられる。共有方式は、現用系が管理するL4コネクションの状態遷移を、ネットワークを介してリアルタイムに待機系に転送する方式である。また、並列処理方式は、通信相手である他装置から受信したパケットを複製して現用系と待機系の両方にパケットを入力し、現用系と待機系のL4スタックが独立に処理を行うことで、同じ状態遷移を作り出す方式である。
【0008】
特許文献1では、装置間で共有可能な特殊なメモリを用いて、共有方式を実現する。しかしながら、移動体通信システムにおけるゲートウェイ装置は、一般的にATCA(Advanced Telecom Computing Architecture)などの汎用装置に実装されるため、特殊なハードウェアを設けてL4コネクションを冗長化することが困難である。そこで近年では、ゲートウェイ装置に対する並列処理方式の適用が検討されている。
【0009】
非特許文献1は、L4コネクション確立時に現用系と待機系で通知しあって、現用系と待機系のパラメータと状態遷移初期値を揃える方式を示している。
【0010】
【特許文献1】特開2007−274256号
【非特許文献1】狩野秀一、地引昌弘、“トランスポート端点のポータブルなクラスタ方式”、電子情報通信学会技術報告、IA2007−2、pp.5−10
【発明の概要】
【発明が解決しようとする課題】
【0011】
本発明では、並列処理方式によってL4コネクションの冗長化を実現する。
【0012】
上述したように、装置間でL4コネクションを確立する際、いくつかのパラメータを通信相手と交換し、共有する。以降のパケット通信では、交換したパラメータと状態遷移に基づく値をパケットヘッダに埋め込んで、データの送受信を行う。交換したパラメータもしくは現在の状態遷移と異なる値が検出された場合には、そのパケットは破棄される。その結果通信が正しく処理されなくなるか、もしくはL4コネクションが強制切断される。
【0013】
上記パラメータの一部は、OS内のL4スタックが自動的に生成する乱数である。そのため、独立した装置であれば異なる値を生成し、異なる状態遷移初期値をとる。一方、冗長構成を組んでいる場合、通信相手からは冗長化装置は1台の装置にしか見えない、すなわち現用系のパラメータと状態遷移しかパケットヘッダには反映されない。したがって、現用系と待機系の両方にパケットを入力したとしても、現用系のL4スタックでは処理されるが、待機系のL4スタックでは処理されないことになる。
そこで本発明は、L4コネクションを確立した通信相手から受信したパケットを複製して、現用系と待機系の両方にパケットを入力し、それぞれのL4スタックで処理できるようにすることを課題とする。
【0014】
なお、非特許文献1では、L4コネクション確立時に現用系と待機系で通知しあって、現用系と待機系のパラメータと状態遷移初期値を揃えている。しかしながら、非特許文献1の方式では、L4コネクション確立時にしか対応できず、L4コネクション確立後に現用系もしくは待機系を追加したり交換したりする際には、L4コネクションを一度切断して再確立しなければならない。このことは、動的な負荷分散を目的とした装置の追加時や、故障装置の交換時にはL4コネクションの冗長化が引き継げないことを意味する。
【課題を解決するための手段】
【0015】
本願で開示される実施態様の代表的なゲートウェイ装置は、独立して動作する複数のパケット処理装置と前記複数のパケット処理装置を接続するスイッチ装置を備え、前記複数のパケット処理装置のうち1台が現用系であり、前記現用系とは異なる1台が待機系となるように冗長構成をとり、前記現用系が通信相手に対してL4コネクションの端点となり、前記通信相手から受信した前記L4コネクションのパケットが前記現用系もしくは前記待機系に入力されると、前記現用系もしくは前記待機系は前記L4コネクションに関して記憶しているパラメータを用いて前記パケットのヘッダを書き換えて、L4スタックに前記パケットを渡すことを特徴とする。
【0016】
また、前記レイヤ4コネクションの確立時に前記通信相手と交換するパラメータと、前記レイヤ4コネクションの確立後のパケット通信においてパケットに付加されるパラメータを、前記現用系もしくは前記待機系において記憶する。
【0017】
また、前記現用系もしくは前記待機系は前記通信相手から受信した前記レイヤ4コネクションのパケットを受け取ると、それぞれ前記待機系もしくは前記現用系に前記パケットを転送する。
【発明の効果】
【0018】
本発明によれば、冗長構成をとるゲートウェイ装置において、L4コネクションを確立した通信相手から受信したパケットを複製して、現用系と待機系の両方にパケットを入力し、それぞれのL4スタックで処理してL4コネクションの冗長化を実現できる。また、L4コネクションを確立したまま柔軟な冗長化装置の運用が可能となる。
【図面の簡単な説明】
【0019】
【図1】現用系故障時の冗長切替においてSCTPコネクションを再接続するシーケンス図である。
【図2A】SCTP DATAパケットのデータ構成図である。
【図2B】SCTP SACKパケットのデータ構成図である。
【図3】本発明を適用する通信システムの構成図である。
【図4】本実施の形態のゲートウェイ装置のハードウェア構成図である。
【図5】本実施の形態のゲートウェイ装置のソフトウェアプログラム構成図である。
【図6】スイッチブレードに対して現用系を転送先に登録するシーケンス図である。
【図7A】他装置から現用系にSCTPコネクションを確立するシーケンス図である。
【図7B】他装置から現用系にSCTPコネクションを確立するシーケンス図の続きである。
【図8】各CPUブレードのヘッダ処理部が保持する転送先テーブルである。
【図9A】図7B後においてCPUブレード1のヘッダ処理部が保持するSCTPのパラメータ格納テーブルである。
【図9B】図7B後においてCPUブレード2のヘッダ処理部が保持するSCTPのパラメータ格納テーブルである。
【図10A】現用系から他装置にSCTPコネクションを確立するシーケンス図である。
【図10B】現用系から他装置にSCTPコネクションを確立するシーケンス図の続きである。
【図11】他装置からSCTP DATAパケットを受信するシーケンス図である。
【図12】現用系からSCTP DATAパケットを送信するシーケンス図である。
【図13】現用系故障発生時においてスイッチブレードに対して予備系を転送先に登録するシーケンス図である。
【図14】現用系故障発生時において他装置からSCTP DATAパケットを受信するシーケンス図である。
【図15】現用系故障発生時において旧待機系からSCTP DATAパケットを送信するシーケンス図である。
【図16】待機系故障発生時において待機系へパケット通知を停止するシーケンス図である。
【図17】待機系故障発生時において他装置からSCTP DATAパケットを受信するシーケンス図である。
【図18】待機系故障発生時において現用系からSCTP DATAパケットを送信するシーケンス図である。
【図19A】負荷分散のため新たにCPUブレード3を追加するシーケンス図である。
【図19B】負荷分散のため新たにCPUブレード3を追加するシーケンス図の続きである。
【図20】L4パラメータ通知メッセージのデータ構造である。
【図21】図19B後においてCPUブレード3のヘッダ処理部が保持するSCTPのパラメータ格納テーブルである。
【図22】図19B後において他装置からSCTP DATAパケットを受信するシーケンス図である。
【図23】図19B後においてCPUブレード3からSCTP DATAパケットを送信するシーケンス図である。
【図24】現用系においてヘッダ処理部がVNICから読込んだSCTPパケットを処理するフローチャート図である。
【図25】現用系においてヘッダ処理部がVNIC以外から受取ったSCTPパケットを処理するフローチャート図である。
【図26】待機系においてヘッダ処理部がVNICから読込したSCTPパケットを処理するフローチャート図である。
【図27】待機系においてヘッダ処理部がVNIC以外から受取ったSCTPパケットを処理するフローチャート図である。
【発明を実施するための最良の形態】
【0020】
1.装置構成
はじめに、図3を用いて本発明が適用される通信システムの構成例を説明する。ここでは移動体通信システムを例にとる。移動体通信システムは、無線インタフェースを介してデータ通信を行う端末340と、端末を収容する無線アクセス網(320、330)と、加入者情報を管理し端末をサービス網に接続するユーザホーム網310と、端末に対してサービスを提供するサービス網300とから構成される。
【0021】
無線アクセス網320は、無線信号を有線信号に相互変換する基地局321a、321bと、アクセスゲートウェイ323と、移動管理サーバ322から構成される。無線アクセス網330も同様に基地局アクセスゲートウェイ331a、331b、移動管理サーバ332で構成される。アクセスゲートウェイは、基地局から受信したユーザトラフィックをユーザホーム網に転送する装置である。また移動管理サーバは、端末の接続状況を管理するとともに、基地局とアクセスゲートウェイ間のデータパスを制御する装置である。
【0022】
ユーザホーム網310は、サービス網ゲートウェイ311と、ポリシーサーバ312と、認証サーバ313から構成される。サービス網ゲートウェイは、アクセスゲートウェイから受信したユーザトラフィックを適切なサービス網に転送する装置である。また、ポリシーサーバは、サービス網ゲートウェイに対してユーザトラフィックの課金手段やQoSを指示する装置である。また、認証サーバは、端末ユーザの加入者情報を管理する装置である。
【0023】
サービス網300には、端末に対してサービスを提供するアプリケーションサーバ301が接続される。
【0024】
LTEでは、サービス網ゲートウェイ311とポリシーサーバ312の間、認証サーバ312と移動管理サーバ(322、332)の間、移動管理サーバ(322、332)と基地局(321a、321b、331a、331b)の間のシグナリングのL4プロトコルにSCTPが用いられる。本発明は、特にサービス網ゲートウェイ、移動管理サーバといったゲートウェイ装置への適用が最も効果的だが、これらに限らず、L4コネクションの端点となる装置であれば適用可能である。
【0025】
次に、図4を用いて、本実施の形態のゲートウェイ装置構成例を説明する。ゲートウェイ装置400は、シグナリング処理やユーザトラフィック転送処理を実現するCPUブレード1とCPUブレード2(410−1、410−2)と、レイヤ2(L2)スイッチ機能を備えるスイッチブレード420から構成される。
【0026】
CPUブレード1は、メモリ411−1、CPU412−1、IF(インタフェース)413−1、414−1、FROM(フラッシュROM)415−1を備える。ゲートウェイ装置としての機能を提供するためのソフトウェアプログラムはFROMに記憶されており、装置の起動時にメモリに展開される。CPUは、メモリ内に展開されたソフトウェアプログラムを順次読み出して実行する。なお、IFはイーサネット回線でスイッチブレード420に接続されており、IF413−1はデータ通信用に、IF414−1は装置制御用に使用される。
スイッチブレード420は、IF421、422、423、424、426および427、スイッチ部425、メモリ428、CPU429、FROM430から構成される。IF421、422、423および424はCPUブレード1とCPUブレード2(410−1、410−2)に、IF426、427は外部のパケット網に接続されており、スイッチ部はこれらの間でパケットを中継する。また、メモリ、CPU、FROMは、スイッチ部を制御、管理するのに用いられる。
【0027】
図5は、CPUブレード1およびCPUブレード2(410−1、410−2)のメモリ411−1、411−2に展開されるソフトウェアプログラムの構成図である。アプリケーションプログラム503−1、503−2は、L4コネクションを利用して特定のサービスを提供する。ただし、本実施の形態のゲートウェイ装置は冗長構成を形成しており、アプリケーションプログラム503−1、503−2についても、一方が現用状態として動作中は、他方は待機状態となる。L4スタック502−1、502−2はL4コネクションを管理する。VNIC(Virtual Network Interface)501−1、501−2は他のプログラムからデータの読み書きを可能とする仮想ネットワークインタフェースである。ヘッダ処理部500−1、500−2はL4コネクションのパケットヘッダの書き換えを行う。
【0028】
ヘッダ処理部は、Rawソケットを用いてスイッチブレード420を介して外部のパケット網とパケットを送受信する。また、ヘッダ処理部は、TIPC(Transparent Inter−process Communication)などの通信プロトコルを用いてスイッチブレード420を介して、他のCPUブレードのヘッダ処理部とデータのやり取りを行う。さらに、ヘッダ処理部は、L4コネクションの冗長化に必要となるパラメータを格納するパラメータ格納テーブル(510−1、510−2)と、受信するL4コネクションのパケットをどのCPUブレードのヘッダ処理部に転送するかを決定する転送先テーブル(511−1、511−2)をもつ。パラメータ格納テーブルと転送先テーブルの詳細な説明については、後述の2.処理(シーケンス)の中で行う。
【0029】
本実施の形態のゲートウェイ装置では、アプリケーションとヘッダ処理部はユーザ領域(520−1、520−2)に、L4スタックとVNICはカーネル領域(521−1、521−2)にそれぞれ置かれる。このような構成を採ることで、本実施の形態のゲートウェイ装置では、OSに改造を加えることなく、L4コネクションの冗長化を実現できる。
【0030】
以上が、本実施の形態の装置構成である。
2.処理(シーケンス)
本実施の形態のゲートウェイ装置において、L4コネクションの冗長化処理について、3つの手順を説明する。具体的には、SCTPの場合を例にとり、(A):通常状態におけるパケット送受信と、(B):故障発生時におけるパケット送受信と、(C):負荷分散のために新たに現用系を追加する際のパケット送受信の手順である。
(A)通常状態におけるSCTPパケット送受信
故障未発生時の通常状態において、SCTPコネクションを確立し、DATAパケットを送受信する流れについて説明する。
(A−1)SCTPコネクション確立
図6は、現用系がパケットを受信するための前準備の手順である。まず、装置の管理者がCPUブレード1(410−1)を現用系に設定する(600)。また、CPUブレード2(410−2)を待機系に設定する(601)。その際、CPUブレード1は、スイッチブレード420に対してGratuitous ARPパケットを送信し、MAC(Media Access Control)アドレスをスイッチブレードに登録する(602)。こうすることで、ゲートウェイ装置宛に送られてきたパケットがCPUブレード1に転送されるようになる。
【0031】
図7A、図7Bは、外部の他装置からSCTPコネクションの確立要求があった際の処理手順である。まず、図7Aから説明する。図6の手順後の状態であり、CPUブレード1(410−1)が現用系、CPUブレード2(410−2)が待機系である。したがって、アプリケーション503−1は実際にサービスを提供する現用状態、アプリケーション503−2は現用側の処理をバックアップする待機状態として動作する。どちらのアプリケーションも、それぞれのCPUブレードで稼動するL4スタック(502−1、502−2)に対して待ち受け登録(Listen)をしておく(700、701)。スイッチブレード420が、外部の他装置からSCTPコネクション確立要求であるINITパケットを受信する(710)。スイッチブレードはCPUブレード1にINITパケットを転送し、ヘッダ処理部500−1がそのINITパケットを受信する(702)。ここで、ヘッダ処理部は、自身が保持する転送先テーブル511−1を参照する。
【0032】
図8は、CPUブレード1のヘッダ処理部が保持する転送先テーブル511−1のデータ構造である。転送先テーブルは、通信相手のIPアドレスごとに作成される。転送先テーブルでは、自分のポート番号800と相手のポート番号801をインデックスとし、転送先802を記述する。本例では、自分のポート番号が5000番で相手のポート番号が11111番であるエントリに対して、転送先が<local>と<CPUブレード2>に設定されている。これは、自分のポート番号が5000番で相手のポート番号が11111番であるパケットを、CPUブレード1内で動作するアプリケーションと、CPUブレード2のヘッダ処理部に転送することを意味する。転送先テーブルは、装置の管理者があらかじめ設定しておく。
【0033】
図7Aに戻る。ヘッダ処理部500−1は、転送先テーブル511−1を参照して、INITパケットをCPUブレード2のヘッダ処理部500−2に通知する(712)。この際、実際にはスイッチブレードを介してパケットを通知するが、シーケンスの記述では省略する。ヘッダ処理部500−2は、INITパケットからパラメータを抽出し、パラメータ格納テーブルに記憶する(713)。
【0034】
図9A、図9Bは、それぞれCPUブレード1と2がもつパラメータ格納テーブル(510−1、510−2)である。パラメータ格納テーブルは、通信相手のIPアドレスごとに作成される。パラメータ格納テーブルでは、自分のポート番号900と相手のポート番号901をインデックスとし、自分の検証タグ902と、自分のシーケンス番号903と、書換用の検証タグ904と、書換用のシーケンス番号905と、通信相手の検証タグ906と、通信相手のシーケンス番号907を記述する。ここで、書換用の検証タグ904と書換用のシーケンス番号905には、SCTPコネクション確立時に現用系であったCPUブレードのL4スタックが作成した検証タグとシーケンス番号の値が格納される。
【0035】
図7Aに戻る。ヘッダ処理部500−2は、INITパケットに記述されている通信相手の検証タグとシーケンス番号の初期値を抽出し、パラメータ格納テーブル510−2にエントリを作成して、通信相手の検証タグ906と通信相手のシーケンス番号907に上記パラメータを記憶する。ヘッダ処理部は500−2は、自身が保持する転送先テーブルを参照して、VNIC501−2を介してL4スタック502−2にINITパケットを渡す(714、715)。L4スタックは、応答としてINIT−ACKパケットを返す(716)。ヘッダ処理500−2は、VNIC501−2を介して、INIT−ACKパケットを受け取る(717)。ヘッダ処理部は、INIT−ACKパケットに記述されている自分の検証タグとシーケンス番号の初期値を抽出し、自分の検証タグ902と自分のシーケンス番号903に上記パラメータを記憶する(718)。このINIT−ACKパケットは、待機系側のL4スタックが作成したものなので、通信相手には送信すべきものではない。そのため、ヘッダ処理部500−2はINIT−ACKパケットを破棄する(719)。
【0036】
一方、CPUブレード1のヘッダ処理部500−1でもINITパケットに記述されている通信相手の検証タグとシーケンス番号の初期値を抽出し、パラメータ格納テーブル510−1にエントリを作成して、通信相手の検証タグ906と通信相手のシーケンス番号907に上記パラメータを記憶する(720)。その後、VNIC501−1を介してL4スタック502−1にINITパケットを渡す(721、722)。L4スタックは、応答としてINIT−ACKパケットを返す(723)。ヘッダ処理500−1は、VNIC501−1を介して、INIT−ACKパケットを受け取る(724)。ヘッダ処理部500−1は、転送先テーブルを参照し、INIT−ACKパケットをヘッダ処理部500−2に通知する(725)。ヘッダ処理部500−2は、INIT−ACKパケットに記述されている現用系の検証タグとシーケンス番号初期値を抽出し、パラメータ格納テーブル510−2の書換用の検証タグ904と書換用のシーケンス番号905に記憶する(726)。一方、CPUブレード1のヘッダ処理部500−1も、INIT−ACKパケットに記述されている自分の検証タグとシーケンス番号初期値を抽出し、パラメータ格納テーブル510−1の自分の検証タグ902と自分のシーケンス番号903に記憶する(727)。なお、現用系であるCPUブレード1に保持されるパラメータ格納テーブル510−1の書換用の検証タグ904と書換用のシーケンス番号905のカラムは空のままで、何も格納されない。その後、INIT−ACKパケットをスイッチブレード420に転送する(728)。スイッチブレードは、通信相手にINIT−ACKパケットを送信する(729)。この時点で、ヘッダ処理部500−1と500−2のそれぞれが保持するパラメータ転送テーブル510−1と510−2は、図9Aと図9Bに示したエントリのようになっている。
【0037】
図7Bに進む。スイッチブレード420は、通信相手からCOOKIE−ECHOパケットを受信し(730)、CPUブレード1に転送する。ヘッダ処理部500−1は、COOKIE−ECHOパケットを受け取る(731)。ヘッダ処理部500−1は、転送先テーブルを参照して、COOKIE−ECHOパケットをヘッダ処理部500−2に通知する(732)。ここで、このCOOKIE−ECHOパケットのヘッダには現用系であるCPUブレード1の検証タグが記述されおり、CPUブレード2のL4スタック502−2はそのままではパケットを破棄してしまう。そのため、ヘッダ処理部500−2は、図9Bに示したパラメータ格納テーブル510−2のエントリの自分の検証タグ902を参照し、COOKIE−ECHOパケットのヘッダの検証タグを、参照した値に書き換える(733)。その後、ヘッダ処理部は、VNIC501−2を介してL4スタック502−2にCOOKIE−ECHOパケットを渡す(734、735)。L4スタックは、応答としてCOOKIE−ACKパケットを返す(736)。ヘッダ処理500−2は、VNIC501−2を介して、COOKIE−ACKパケットを受け取る(737)。このCOOKIE−ACKパケットは、待機系側のL4スタックが作成したものなので、通信相手には送信すべきものではない。そのため、ヘッダ処理部500−2はCOOKIE−ACKパケットを破棄する(738)。この後、L4スタック502−2は、待ち受け登録をしたアプリケーション503−2に対して、このSCTPコネクションのソケット番号を通知し(739)、コネクション確立状態に遷移する(740)。
【0038】
一方、CPUブレード1のヘッダ処理部500−1も、受け取ったCOOKIE−ECHOパケットに対して、パラメータ格納テーブル510−1を参照する。しかしながら、図9Aに示したように、パラメータ格納テーブル510−1のエントリで、書換用の検証タグの項には何も記述がないので、ヘッダ処理部500−1はパケットヘッダに対して操作を行わない。ヘッダ処理部500−1は、VNIC501−1を介してL4スタック502−1にCOOKIE−ECHOパケットを渡す(750、751)。L4スタックは、応答としてCOOKIE−ACKパケットを返す(752)。ヘッダ処理500−1は、VNIC501−1を介して、COOKIE−ACKパケットを受け取る(753)。ここで、L4スタック502−1は、待ち受け登録をしたアプリケーション503−1に対して、このSCTPコネクションのソケット番号を通知し(754)、コネクション確立状態に遷移する(755)。その後、ヘッダ処理部500−1は、COOKIE−ACKパケットをスイッチブレード420に転送する(756)。スイッチブレードは、通信相手にCOOKIE−ACKパケットを送信する(757)。
【0039】
以上の手順により、他装置とゲートウェイ装置間のSCTPコネクション確立が完了する。
【0040】
次に、図7A、図7Bの場合とは反対にゲートウェイ装置の現用系であるCPUブレード1から外部の他装置に対してSCTPコネクションの確立要求を行う際の処理手順を、図10A、図10Bを用いて説明する。まず、図10Aから説明する。CPUブレード1(410−1)のアプリケーション503−1が、L4スタック502−1に対して接続要求(Connect)を行う(1000)。L4スタックは、INITパケットをVNIC501−1に渡す(1001)。ヘッダ処理500−1は、VNICを介してINITパケットを受け取る(1002)。ヘッダ処理部は、転送先テーブルを参照して、INITパケットをCPUブレード2のヘッダ処理部500−2に通知する(1003)。ヘッダ処理部500−1は同時に、INITパケットに記述されている自分の検証タグとシーケンス番号の初期値を抽出し、パラメータ格納テーブル510−1にエントリを作成して、自分の検証タグ902と自分のシーケンス番号903に上記パラメータを記憶する(1004)。その後、INITパケットをスイッチブレード420に転送する(1005)。スイッチブレードは、通信相手にINITパケットを送信する(1006)。
【0041】
一方、CPUブレード2のヘッダ処理部500−2も、INITパケットに記述されている現用系の検証タグとシーケンス番号初期値を抽出し、パラメータ格納テーブル510−2にエントリを作成して、書換用の検証タグ904と書換用のシーケンス番号905に記憶する(1007)。その後、ヘッダ処理部は、現用系であるCPUブレード1のアプリケーション503−1から接続要求があったことを通知し、待機系であるCPUブレード2のアプリケーション503−2が同様に接続要求を行うことを促す(1008)。すると、アプリケーション503−2は、L4スタック502−2に対して接続要求(Connect)を行う(1009)。L4スタックはINITパケットをVNIC501−2に渡す(1010)。ヘッダ処理500−2は、VNICを介してINITパケットを受け取る(1011)。ヘッダ処理部は、INITパケットに記述されている自分の検証タグとシーケンス番号の初期値を抽出し、パラメータ格納テーブル510−2に自分の検証タグ902と自分のシーケンス番号903に上記パラメータを記憶する(1012)。このINITパケットは、待機系側のL4スタックが作成したものなので、通信相手には送信すべきものではない。そのため、ヘッダ処理部500−2はINITパケットを破棄する(1013)。
【0042】
その後、スイッチブレード420が、通信相手の外部の他装置からINIT−ACKパケットを受信する(1020)。スイッチブレードはCPUブレード1にINIT−ACKパケットを転送し、ヘッダ処理部500−1がそのINIT−ACKパケットを受信する(1021)。ヘッダ処理部は、転送先テーブルを参照して、INIT−ACKパケットをCPUブレード2のヘッダ処理部500−2に通知する(1022)。ヘッダ処理部500−1は同時に、INIT−ACKパケットに記述されている通信相手の検証タグとシーケンス番号の初期値を抽出し、パラメータ格納テーブル510−1に、通信相手の検証タグ906と通信相手のシーケンス番号907に上記パラメータを記憶する(1023)。その後、VNIC501−1を介してL4スタック502−1にINIT−ACKパケットを渡す(1024、1025)。
【0043】
一方、CPUブレード2のヘッダ処理部500−2は、1022のINIT−ACKパケット通知を受けた後、パラメータ格納テーブル510−2のエントリの自分の検証タグ902を参照し、INIT−ACKパケットのヘッダの検証タグを、参照した値に書き換える(1026)。これは、INIT−ACKパケットのヘッダの検証タグには現用系のものが記述されており、そのままではCPUブレード2のL4スタック502−2がパケットを破棄してしまうからである。その後、ヘッダ処理部500−2は、INIT−ACKパケットに記述されている通信相手の検証タグとシーケンス番号の初期値を抽出し、パラメータ転送テーブル510−2の通信相手の検証タグ906と通信相手のシーケンス番号907に上記パラメータを記憶する(1027)。そして、ヘッダ処理部は、VNIC501−2を介してL4スタック502−2にINIT−ACKパケットを渡す(1028,1029)。この時点で、図7A,図7Bの場合と同様に、ヘッダ処理部500−1と500−2のそれぞれが保持するパラメータ転送テーブル510−1と510−2は、図9Aと図9Bに示したエントリのようになる。
【0044】
図10Bに進む。CPUブレード1のL4スタック502−1は、応答としてCOOKIE−ECHOパケットを返す(1030)。ヘッダ処理500−1は、VNIC501−1を介して、COOKIE−ECHOパケットを受け取る(1031)。ヘッダ処理部500−1は、受け取ったCOOKIE−ECHOパケットに対して、パラメータ格納テーブル510−1を参照する。しかしながら、図9Aに示したように、パラメータ格納テーブル510−1のエントリで、書換用の検証タグの項には何も記述がないので、ヘッダ処理部500−1はパケットヘッダに対して操作を行わない。その後、ヘッダ処理部は、COOKIE−ECHOパケットをスイッチブレード420に転送する(1032)。スイッチブレードは、通信相手にCOOKIE−ECHOパケットを送信する(1033)。
【0045】
一方、CPUブレード2のL4スタック502−2も、応答としてCOOKIE−ECHOパケットを返す(1034)。ヘッダ処理500−2は、VNIC501−2を介して、COOKIE−ECHOパケットを受け取る(1035)。このCOOKIE−ECHOパケットは、待機系側のL4スタックが作成したものなので、通信相手には送信すべきものではない。そのため、ヘッダ処理部500−2はCOOKIE−ECHOパケットを破棄する(1036)。
【0046】
その後、スイッチブレード420が、通信相手の外部の他装置からCOOKIE−ACKパケットを受信する(1040)。スイッチブレードはCPUブレード1にCOOKIE−ACKパケットを転送し、ヘッダ処理部500−1がそのCOOKIE−ACKパケットを受信する(1041)。ヘッダ処理部は、転送先テーブルを参照して、COOKIE−ACKパケットをCPUブレード2のヘッダ処理部500−2に通知する(1042)。ヘッダ処理部500−1は同時に、VNIC501−1を介してL4スタック502−1にCOOKIE−ACKパケットを渡す(1043、1044)。L4スタック502−1は、接続要求をしたアプリケーション503−1に対して、このSCTPコネクションのソケット番号を通知し(1045)、コネクション確立状態に遷移する(1046)。
【0047】
一方、CPUブレード2のヘッダ処理部500−2は、1042のCOOKIE−ACKパケット通知を受けた後、パラメータ格納テーブル510−2のエントリの自分の検証タグ902を参照し、COOKIE−ACKパケットのヘッダの検証タグを、参照した値に書き換える(1047)。これは、COOKIE−ACKパケットのヘッダの検証タグには現用系のものが記述されており、そのままではCPUブレード2のL4スタック502−2がパケットを破棄してしまうからである。その後、ヘッダ処理部500−2は、VNIC501−2を介してL4スタック502−2にCOOKIE−ACKパケットを渡す(1048,1049)。L4スタック502−2は、接続要求をしたアプリケーション503−2に対して、このSCTPコネクションのソケット番号を通知し(1050)、コネクション確立状態に遷移する(1051)。
以上の手順により、図7A、図7Bの場合と同様に、他装置とゲートウェイ装置間のSCTPコネクション確立が完了する。
(A−2)SCTP DATAパケット送受信
次に、図11を用いて、SCTPコネクションを確立した通信相手である外部の他装置から、SCTP DATAパケットを受信する処理手順を説明する。スイッチブレード420は、通信相手からDATAパケットを受信し(1100)、CPUブレード1に転送する。ヘッダ処理部500−1は、DATAパケットを受け取る(1101)。ヘッダ処理部500−1は、転送先テーブルを参照して、DATAパケットをヘッダ処理部500−2に通知する(1102)。ヘッダ処理部500−1は同時に、受け取ったDATAパケットに対して、パラメータ格納テーブル510−1を参照する。しかしながら、図9Aに示したように、パラメータ格納テーブル510−1のエントリで、書換用の検証タグの項には何も記述がないので、ヘッダ処理部500−1はパケットヘッダに対して操作を行わない。その後、ヘッダ処理部は、自身が保持するパラメータ格納テーブル510−1のエントリの通信相手のシーケンス番号907を1だけ更新する。そして、ヘッダ処理部は、VNIC501−1を介してL4スタック502−1にDATAパケットを渡す(1103、1104)。L4スタックはDATAパケットのペイロード部分にあるアプリケーションデータを抽出し、アプリケーション503−1に渡す(1105)。L4スタックは同時に、応答としてSACKパケットを返す(1106)。ヘッダ処理500−1は、VNIC501−1を介して、SACKパケットを受け取る(1107)。ヘッダ処理部は、SACKパケットをスイッチブレード420に転送する(1108)。スイッチブレードは、通信相手にSACKパケットを送信する(1109)。
【0048】
一方、CPUブレード2のヘッダ処理部500−2は、1102のDATAパケット通知を受けた後、パラメータ格納テーブル510−2のエントリの自分の検証タグ902を参照し、図2Aに示したDATAパケットのヘッダの検証タグ203を、参照した値に書き換える(1110)。これは、DATAパケットのヘッダの検証タグには現用系のものが記述されており、そのままではCPUブレード2のL4スタック502−2がパケットを破棄してしまうからである。その後、ヘッダ処理部は、自身が保持するパラメータ格納テーブル510−2のエントリの通信相手のシーケンス番号907を1だけ増やして更新する。そして、ヘッダ処理部は、VNIC501−2を介してL4スタック502−2にDATAパケットを渡す(1111、1112)。L4スタックはDATAパケットのペイロード部分にあるアプリケーションデータを抽出し、アプリケーション503−2に渡す(1113)。こうすることで、待機系側のアプリケーション503−2も現用系と同様のアプリケーションデータを受信することができ、アプリケーション間の同期も可能になる。L4スタック502−2は同時に、応答としてSACKパケットを返す(1114)。ヘッダ処理500−2は、VNIC501−2を介して、SACKパケットを受け取る(1115)。このSACKパケットは、待機系側のL4スタックが作成したものなので、通信相手には送信すべきものではない。そのため、ヘッダ処理部500−2はSACKパケットを破棄する(1116)。
【0049】
以上の手順を踏むことで、外部の他装置から受信したDATAパケットを現用系と待機系に入力し、適当なヘッダの値に書き換えることで、現用系と待機系のL4スタックでSCTPパケットを並列処理できるようになる。すなわち、ヘッダ処理部と併せることで、OSに改造を加えることなく、現用系と待機系のL4スタックが正しい状態遷移をとることができる。
【0050】
次に、図11の場合とは反対にゲートウェイ装置の現用系であるCPUブレード1から、SCTPコネクションを確立した通信相手である外部の他装置に対して、SCTP DATAパケットを送信する処理手順を、図12を用いて説明する。CPUブレード1のアプリケーション503−1が、L4スタック502−1に対してアプリケーションデータの送信を要求する(1200)。L4スタックは、DATAパケットを作成し、VNIC501−1に渡す(1201)。ヘッダ処理500−1は、VNICを介してDATAパケットを受け取る(1202)。ヘッダ処理部は、転送先テーブルを参照して、DATAパケットをCPUブレード2のヘッダ処理部500−2に通知する(1203)。ヘッダ処理部500−1は同時に、受け取ったDATAパケットに対して、パラメータ格納テーブル510−1を参照する。しかしながら、図9Aに示したように、パラメータ格納テーブル510−1のエントリで、書換用の検証タグの項には何も記述がないので、ヘッダ処理部500−1はパケットヘッダに対して操作を行わない。その後、ヘッダ処理部は、自身が保持するパラメータ格納テーブル510−1のエントリの自分のシーケンス番号903を1だけ増やして更新する。そして、ヘッダ処理部は、DATAパケットをスイッチブレード420に転送する(1204)。スイッチブレードは、通信相手にDATAパケットを送信する(1205)。
【0051】
一方、CPUブレード2のヘッダ処理部500−2は、1203のDATAパケット通知を受けた後、現用系であるCPUブレード1のアプリケーション503−1からアプリケーション送信要求があったことを通知し、待機系であるCPUブレード2のアプリケーション503−2が同様のアプリケーションデータ送信要求を行うことを促す(1206)。こうすることで、待機系側のアプリケーション503−2は、現用系側のアプリケーション503−1がどのようなアプリケーションデータを送信したのかを知ることができ、アプリケーション間の同期も可能になる。アプリケーション503−2は、L4スタック502−2に対してアプリケーションデータの送信要求を行う(1207)。L4スタックは、DATAパケットを作成し、VNIC501−2に渡す(1208)。ヘッダ処理500−2は、VNICを介してDATAパケットを受け取る(1209)。ヘッダ処理部は、自身が保持するパラメータ格納テーブル510−2のエントリの自分のシーケンス番号903と、現用系を示す書換用のシーケンス番号905をそれぞれ1だけ増やして更新する。このDATAパケットは、待機系側のL4スタックが作成したものなので、通信相手には送信すべきものではない。そのため、ヘッダ処理部500−2はDATAパケットを破棄する(1210)。
【0052】
その後、スイッチブレード420が、通信相手の外部の他装置からSACKパケットを受信する(1220)。スイッチブレードはCPUブレード1にSACKパケットを転送し、ヘッダ処理部500−1がそのSACKパケットを受信する(1221)。ヘッダ処理部は、転送先テーブルを参照して、SACKパケットをCPUブレード2のヘッダ処理部500−2に通知する(1222)。ヘッダ処理部500−1は同時に、VNIC501−1を介してL4スタック502−1にSACKパケットを渡す(1223、1224)。
【0053】
一方、CPUブレード2のヘッダ処理部500−2は、1222のSACKパケット通知を受けた後、パラメータ格納テーブル510−2のエントリの自分の検証タグ902と自分のシーケンス番号903を参照し、図2Bに示したSACKパケットのヘッダにある検証タグ213と受信DATAパケットのシーケンス番号214を、参照した値に書き換える(1225)。これは、SACKパケットのヘッダの検証タグには現用系のものが、また受信DATAパケットのシーケンス番号には現用系が送信したDATAパケットのシーケンス番号が記述されており、そのままではCPUブレード2のL4スタック502−2がパケットを破棄してしまうからである。その後、ヘッダ処理部500−2は、VNIC501−2を介してL4スタック502−2にSACKパケットを渡す(1226、1227)。
【0054】
以上の手順を踏むことで、現用系側のアプリケーションから外部の他装置に送信するDATAパケットを現用系と待機系で作り出し、また応答であるSACKパケットを現用系と待機系に入力して適当なヘッダの値に書き換えて、現用系と待機系のL4スタックでSCTPパケットを並列処理できるようになる。すなわち、ヘッダ処理部と併せることで、OSに改造を加えることなく、現用系と待機系のL4スタックが正しい状態遷移をとることができる。
【0055】
また、本実施例では、スイッチブレードが通信相手からSCTPパケットを受信した場合、先に現用系に転送するように設定しているが、実際には先に待機系に転送するようにすることも可能である。
(B)故障発生時におけるSCTPパケット送受信
次に、前記(A)の手順を満たしておくことで、現用系もしくは待機系に故障が発生した場合でも、L4コネクションを切断することなく、通信を継続できることを説明する。
(B−1)現用系故障発生時におけるSCTP DATAパケット送受信
図13は、現用系であるCPUブレード1(410−1)に故障が発生した際に、待機系であるCPUブレード2(410−2)がパケットを受信するための前準備の手順である。CPUブレード1に故障が発生する(1300)。CPUブレード2は、その故障を検知する(1301)。すると、CPUブレード2では、ヘッダ処理部が保持する転送先テーブルの各エントリにある転送先から、<CPUブレード1>という記述を削除し、転送を停止する(1302)。CPUブレード2は、スイッチブレード420に対してGratuitous ARPパケットを送信し、MACアドレスをスイッチブレードに登録する(1304)。こうすることで、ゲートウェイ装置宛に送られてきたパケットがCPUブレード2に転送されるようになる。その後、CPUブレード2は、現用系として動作するように、内部で動くアプリケーションを現用状態に移行する(1305)。なお、本実施の形態のゲートウェイ装置のように、あらかじめ待機系側のアプリケーションにすべてのアプリケーションデータを転送しておくことで、冗長切替時にアプリケーション情報の引継ぎを行わなくて済む。
【0056】
次に、図14を用いて、SCTPコネクションを確立した通信相手である外部の他装置から、SCTP DATAパケットを受信する処理手順を説明する。スイッチブレード420は、通信相手からDATAパケットを受信し(1400)、CPUブレード2に転送する。ヘッダ処理部500−2は、DATAパケットを受け取る(1401)。ヘッダ処理部500−1は、受け取ったDATAパケットに対して、パラメータ格納テーブル510−2のエントリの自分の検証タグ902を参照し、図2Aに示したDATAパケットのヘッダの検証タグ203を、参照した値に書き換える(1402)。これは、DATAパケットのヘッダの検証タグには現用系であったCPUブレード1のものが記述されており、そのままではCPUブレード2のL4スタック502−2がパケットを破棄してしまうからである。その後、ヘッダ処理部は、自身が保持するパラメータ格納テーブル510−2のエントリの通信相手のシーケンス番号907を1だけ増やして更新する。そして、ヘッダ処理部は、VNIC501−2を介してL4スタック502−2にDATAパケットを渡す(1403、1404)。L4スタックは、DATAパケットのペイロード部分にあるアプリケーションデータを抽出し、アプリケーション503−2に渡す(1405)。L4スタックは同時に、応答としてSACKパケットを返す(1406)。ヘッダ処理500−2は、VNIC501−2を介して、SACKパケットを受け取る(1407)。このSACKパケットのヘッダ書換は不要である。ヘッダ処理部は、SACKパケットをスイッチブレード420に転送する(1408)。スイッチブレードは、通信相手にSACKパケットを送信する(1409)。
【0057】
次に、図15を用いて、ゲートウェイ装置の現在の現用系であるCPUブレード2から、SCTPコネクションを確立した通信相手である外部の他装置に対して、SCTP DATAパケットを送信する処理手順を説明する。CPUブレード2のアプリケーション503−2が、L4スタック502−2に対してアプリケーションデータの送信を要求する(1500)。L4スタックは、DATAパケットを作成し、VNIC501−2に渡す(1501)。ヘッダ処理500−2は、VNICを介してDATAパケットを受け取る(1502)。ヘッダ処理部は、自身が保持するパラメータ格納テーブル510−2のエントリの自分のシーケンス番号903と、書換用のシーケンス番号905をそれぞれ1だけ増やして更新する。ヘッダ処理部は同時に、パラメータ格納テーブルのエントリの書換用のシーケンス番号905を参照し、図2Aに示したDATAパケットのヘッダのシーケンス番号204を、参照した値に書き換える(1503)。これは、DATAパケットのヘッダのシーケンス番号にはCPUブレード2のものが記述されているからである。SCTPコネクションが確立されたままなので、通信相手はDATAパケットのシーケンス番号にはCPUブレード1のもの、すなわち参照している書換用のシーケンス番号905の値が記述されていることを期待している。そのため、そのままでは通信相手がパケットを破棄してしまう。ヘッダ処理部500−2は、ヘッダを書き換えた後、DATAパケットをスイッチブレード420に転送する(1504)。スイッチブレードは、通信相手にDATAパケットを送信する(1505)。
【0058】
その後、スイッチブレード420が、通信相手の外部の他装置からSACKパケットを受信する(1506)。スイッチブレードはCPUブレード2にSACKパケットを転送し、ヘッダ処理部500−2がそのSACKパケットを受信する(1507)。ヘッダ処理部は、パラメータ格納テーブル510−2のエントリの自分の検証タグ902と自分のシーケンス番号903を参照し、図2Bに示したSACKパケットのヘッダにある検証タグ213と受信DATAパケットのシーケンス番号214を、参照した値に書き換える(1508)。これは、SACKパケットのヘッダの検証タグ213には現用系であったCPUブレード1のものが、また受信DATAパケットのシーケンス番号214には、ヘッダを書換用のシーケンス番号に書き換えて送信したDATAパケットのシーケンス番号が記述されており、そのままではCPUブレード2のL4スタック502−2がパケットを破棄してしまうからである。その後、ヘッダ処理部500−2は、VNIC501−2を介してL4スタック502−2にSACKパケットを渡す(1509、1510)。
【0059】
以上の手順を踏むことで、SCTPコネクションを切断することなく、通信を継続できる。すなわち、L4コネクションの冗長化を達成できる。また、故障発生時に必要な動作は、図13の手順だけであり、冗長切替の高速化に貢献できる。
(B−2)待機系故障発生時におけるSCTP DATAパケット送受信
図16は、待機系であるCPUブレード2(410−2)に故障が発生した際に、現用系であるCPUブレード1(410−1)が行う手順である。CPUブレード2に故障が発生する(1600)。CPUブレード1は、その故障を検知する(1601)。すると、CPUブレード1では、ヘッダ処理部が保持する転送先テーブルの各エントリにある転送先から、<CPUブレード2>という記述を削除し、転送を停止する(1602)。要するに、CPUブレード1から2へのSCTPパケットの転送を停止するだけである。
【0060】
次に、図17を用いて、SCTPコネクションを確立した通信相手である外部の他装置から、SCTP DATAパケットを受信する処理手順を説明する。スイッチブレード420は、通信相手からDATAパケットを受信し(1700)、CPUブレード1に転送する。ヘッダ処理部500−1は、DATAパケットを受け取る(1701)。ヘッダ処理部500−1は、受け取ったDATAパケットに対して、パラメータ格納テーブル510−1を参照する。しかしながら、図9Aに示したように、パラメータ格納テーブル510−1のエントリで、書換用の検証タグの項には何も記述がないので、ヘッダ処理部500−1はパケットヘッダに対して操作を行わない。その後、ヘッダ処理部は、自身が保持するパラメータ格納テーブル510−1のエントリの通信相手のシーケンス番号907を1だけ更新する。そして、ヘッダ処理部は、VNIC501−1を介してL4スタック502−1にDATAパケットを渡す(1702、1703)。L4スタックはDATAパケットのペイロード部分にあるアプリケーションデータを抽出し、アプリケーション503−1に渡す(1704)。L4スタックは同時に、応答としてSACKパケットを返す(1705)。ヘッダ処理500−1は、VNIC501−1を介して、SACKパケットを受け取る(1706)。ヘッダ処理部は、SACKパケットをスイッチブレード420に転送する(1707)。スイッチブレードは、通信相手にSACKパケットを送信する(1708)。
【0061】
次に、図18を用いて、ゲートウェイ装置の現用系であるCPUブレード1から、SCTPコネクションを確立した通信相手である外部の他装置に対して、SCTP DATAパケットを送信する処理手順を説明する。CPUブレード1のアプリケーション503−1が、L4スタック502−1に対してアプリケーションデータの送信を要求する(1800)。L4スタックは、DATAパケットを作成し、VNIC501−1に渡す(1801)。ヘッダ処理500−1は、VNICを介してDATAパケットを受け取る(1802)。ヘッダ処理部は、受け取ったDATAパケットに対して、パラメータ格納テーブル510−1を参照する。しかしながら、図9Aに示したように、パラメータ格納テーブル510−1のエントリで、書換用の検証タグの項には何も記述がないので、ヘッダ処理部500−1はパケットヘッダに対して操作を行わない。その後、ヘッダ処理部は、自身が保持するパラメータ格納テーブル510−1のエントリの自分のシーケンス番号903を1だけ増やして更新する。そして、ヘッダ処理部は、DATAパケットをスイッチブレード420に転送する(1803)。スイッチブレードは、通信相手にDATAパケットを送信する(1804)。
【0062】
その後、スイッチブレード420が、通信相手の外部の他装置からSACKパケットを受信する(1805)。スイッチブレードはCPUブレード1にSACKパケットを転送し、ヘッダ処理部500−1がそのSACKパケットを受信する(1806)。ヘッダ処理部は、VNIC501−1を介してL4スタック502−1にSACKパケットを渡す(1807、1808)。
【0063】
以上の手順を踏むことで、待機系故障発生時にもなんら問題なく、DATAパケットの送受信を続けることができる。
(C)新たにCPUブレード3を現用系として追加した際のSCTPパケット送受信
次に、前記(A)の手順を満たしておくことで、負荷分散のために新たに現用系を追加した場合でも、L4コネクションを切断することなく、通信を継続できることを説明する。ここで想定する状況は、現用系であるCPUブレード1のCPU負荷が高くなってきた際に、あらたにCPUブレード3を追加し、一部のSCTPコネクションのパケット処理をCPUブレード3に切り替える場合である。
(C−1)CPUブレード1からCPUブレード3へのSCTPコネクション切替
図19A、図19Bを用いて、CPUブレード1からCPUブレード3への特定のSCTPコネクションの端点を切り替える手順を説明する。図19Aから説明する。CPUブレード3(410−3)も、他のCPUブレードと同様に、ヘッダ処理部500−3、VNIC501−3、L4スタック502−3、アプリケーション503−3を備える。まず、装置の管理者が、各CPUブレードに負荷分散を開始することを設定する(1900)。すると、CPUブレード3のアプリケーション503−3が、現用状態で起動する(1901)。アプリケーションは、L4スタック502−3に対して待ち受け登録(Listen)を行う(1902)。次に、CPUブレード1のヘッダ処理部500−1は、ヘッダ処理部500−3に対して、端点の切替をしたいSCTPコネクションのL4パラメータを通知する(1910)。
【0064】
図20は、L4パラメータ通知メッセージ1910のデータ構造である。L4パラメータ通知メッセージは、通信相手のアドレス2000と、自分のポート番号2001と、通信相手のポート番号2002と、書換用の検証タグ2003と、書換用のシーケンス番号2004と、通信相手の検証タグ2005と、通信相手のシーケンス番号2006を含む。これらの情報はすべて、ヘッダ処理部500−1が保持する、図9Aに示したパラメータ格納テーブル510−1のエントリから作成される。自分のポート番号2001には自分のポート番号900を、通信相手のポート番号2002には通信相手のポート番号901を、書換用の検証タグ2003には自分の検証タグ902を、書換用のシーケンス番号2004には現在の自分のシーケンス番号903を、通信相手の検証タグ2005には通信相手の検証タグ906を、通信相手のシーケンス番号2006には現在のシーケンス番号907を格納する。
【0065】
図19Aに戻る。ヘッダ処理部500−3は、L4パラメータ通知メッセージの通信相手の検証タグ2005と、通信相手のシーケンス番号2006を用いて、INITパケットを作成し、VNIC501−3を介してL4スタック502−3に渡す(1911、1912)。ヘッダ処理部500−3がこのようなINITパケットを作成することで、L4スタック502−3に対して、擬似的に通信相手からSCTPコネクション確立要求があったかのように挙動させることができる。このとき、通信相手のシーケンス番号を引き継ぐため、通信相手はSCTPコネクションを張り直すことなく、SCTPパケットを送信し続けることができる。その後、L4スタック502−3は、応答としてINIT−ACKパケットを返す(1913)。ヘッダ処理500−3は、VNIC501−3を介して、INIT−ACKパケットを受け取る(1914)。ヘッダ処理部は、INIT−ACKパケットに記述されている自分の検証タグとシーケンス番号の初期値を抽出し、パラメータ格納テーブルに記憶する(1915)。
【0066】
図21は、CPUブレード3のヘッダ処理部500−3がもつパラメータ格納テーブル510−3である。ヘッダ処理部は、パラメータ格納テーブル510−3にエントリを作成し、1910のL4パラメータ通知メッセージに記述されたパラメータと、1915で抽出したパラメータを格納する。図21に示すエントリは、1915の時点での状態である。このとき、書換用の検証タグ903には元の現用系であったCPUブレード1の検証タグが、書換用のシーケンス番号には904には切替直前のCPUブレード1のシーケンス番号が、それぞれ記述されることになる。
【0067】
図19Aに戻る。ヘッダ処理部500−3はCOOKIE−ECHOパケットを作成し、VNIC501−3を介してL4スタック502−3に渡す(1916、1917)。L4スタックは、応答としてCOOKIE−ACKパケットを返す(1918)。ヘッダ処理500−3は、VNIC501−3を介して、COOKIE−ACKパケットを受け取る(1919)。ここで、L4スタック502−3は、待ち受け登録をしたアプリケーション503−3に対して、このSCTPコネクションのソケット番号を通知し(1920)、コネクション確立状態に遷移する(1921)。これ以降、L4スタック502−3は、切替対象となったSCTPパケットを送受信することができるようになる。その後、ヘッダ処理部500−3は、CPUブレード1のヘッダ処理部500−1に対して、SCTPコネクション設定が完了したことを通知する(1922)。
【0068】
図19Bに進む。CPUブレード1のアプリケーション503−1は、CPUブレード3のアプリケーション503−3に対して、サービスを引き継ぐのに必要なアプリケーション情報を通知する(1930)。本実施の形態のゲートウェイ装置では、アプリケーション情報通知の方法については特に制限はなく、任意の方法を採ることが可能である。その後、各CPUブレードのヘッダ処理部は、1900で管理者が設定した情報に転送先テーブルを変更する(1931、1932、1933)。具体的には、CPUブレード1とCPUブレード3の間、CPUブレード2とCPUブレード3の間で切替対象となったSCTPコネクションのパケットを転送するように設定される。その後、CPUブレード1のL4スタックが持っているSCTPコネクションリソースを解放するため、ヘッダ処理部500−1は、図9Aに示すパラメータ格納テーブル510−1のエントリの通信相手の検証タグを用いてSHUTDOWNパケットを作成し、VNIC501−1を介してL4スタック502−1に渡す(1934、1935)。ヘッダ処理部500−1がこのようなSHUTDOWNパケットを作成することで、L4スタック502−1に対して、擬似的に通信相手からSCTPコネクション終了要求があったかのように挙動させることができる。その後、L4スタック502−1は、応答としてSHUTDOWN−ACKパケットを返す(1936)。ヘッダ処理500−1は、VNIC501−1を介して、SHUTDOWN−ACKパケットを受け取る(1937)。ヘッダ処理部は、完了通知としてSHUDOWN−COMPLETEパケットを作成し、VNIC501−1を介してL4スタック502−1に渡す(1938、1939)。L4スタックは該当するSCTPコネクションを利用していたアプリケーション503−1に対して、SCTPコネクションの切断通知を行い(1940)、コネクション終了状態に遷移する(1941)。
【0069】
以上の手順を踏むことで、特定のSCTPコネクションの端点をCPUブレード1からCPUブレード3へ切り替える操作が完了する。
(C−2)前記(C−1)後におけるSCTP DATAパケット送受信
次に、図22を用いて、前記(C−1)の手順を満たした後に、SCTPコネクションを確立した通信相手である外部の他装置から、SCTP DATAパケットを受信する処理手順を説明する。スイッチブレード420は、通信相手からDATAパケットを受信し(2200)、CPUブレード1に転送する。CPUブレード1のヘッダ処理部500−1は、DATAパケットを受け取る(2201)。ヘッダ処理部500−1は、転送先テーブルを参照して、DATAパケットをCPUブレード3のヘッダ処理部500−3に通知する(2202)。ヘッダ処理部500−3は、転送先テーブルを参照して、DATAパケットをCPUブレード2のヘッダ処理部500−2に通知する(2203)。ヘッダ処理部500−3は同時に、受け取ったDATAパケットに対して、パラメータ格納テーブル510−3のエントリの自分の検証タグ902を参照し、図2Aに示したDATAパケットのヘッダの検証タグ203を、参照した値に書き換える(2204)。これは、DATAパケットのヘッダの検証タグには元の現用系であったCPUブレード1の検証タグが記述されており、そのままではCPUブレード3のL4スタック502−3がパケットを破棄してしまうからである。その後、ヘッダ処理部500−3は、自身が保持するパラメータ格納テーブル510−3のエントリの通信相手のシーケンス番号907を1だけ増やして更新する。そして、ヘッダ処理部は、VNIC501−3を介してL4スタック502−3にDATAパケットを渡す(2205、2206)。L4スタックはDATAパケットのペイロード部分にあるアプリケーションデータを抽出し、アプリケーション503−3に渡す(2207)。L4スタックは同時に、応答としてSACKパケットを返す(2208)。ヘッダ処理500−3は、VNIC501−3を介して、SACKパケットを受け取る(2209)。ヘッダ処理部は、SACKパケットをスイッチブレード420に転送する(2210)。スイッチブレードは、通信相手にSACKパケットを送信する(2211)。
【0070】
一方、CPUブレード2のヘッダ処理部500−2は、2203のDATAパケット通知を受けた後、図11に示した1110〜1116と同様の手順を行う。そのため、ここでは説明を省略する。
【0071】
以上の手順を踏むことで、一部のSCTPコネクションのパケット処理をCPUブレード1からCPUブレード3に切り替えた場合でも、SCTPコネクションを切断することなく、継続的にDATAパケットを受信することができる。
【0072】
次に、図23を用いて、現在の現用系であるCPUブレード3から、SCTPコネクションを確立した通信相手である外部の他装置に対して、SCTP DATAパケットを送信する処理手順を説明する。CPUブレード3のアプリケーション503−3が、L4スタック502−3に対してアプリケーションデータの送信を要求する(2300)。L4スタックは、DATAパケットを作成し、VNIC501−3に渡す(2301)。ヘッダ処理500−3は、VNICを介してDATAパケットを受け取る(2302)。ヘッダ処理部は、自身が保持するパラメータ格納テーブル510−3のエントリの自分のシーケンス番号903と、書換用のシーケンス番号905をそれぞれ1だけ増やして更新する。ヘッダ処理部は同時に、パラメータ格納テーブルのエントリの書換用のシーケンス番号905を参照し、図2Aに示したDATAパケットのヘッダのシーケンス番号204を、参照した値に書き換える(2303)。これは、DATAパケットのヘッダのシーケンス番号にはCPUブレード3のものが記述されているからである。SCTPコネクションが確立されたままなので、通信相手はDATAパケットのシーケンス番号にはCPUブレード1のもの、すなわち参照している書換用のシーケンス番号905の値が記述されていることを期待している。そのため、そのままでは通信相手がパケットを破棄してしまう。ヘッダ処理部500−3は、ヘッダを書き換えた後、DATAパケットをスイッチブレード420に転送する(2304)。スイッチブレードは、通信相手にDATAパケットを送信する(2305)。
一方、ヘッダ処理部500−3は、2304で転送するDATAパケットを複製し、転送先テーブルを参照して、複製したDATAパケットをCPUブレード2のヘッダ処理部500−2に通知する(2306)。その後、ヘッダ処理部500−2は、図12に示した1206〜1210と同様の手順を行う。そのため、ここでは説明を省略する。
【0073】
その後、スイッチブレード420が、通信相手の外部の他装置からSACKパケットを受信する(2310)。スイッチブレードはCPUブレード1にSACKパケットを転送し、ヘッダ処理部500−1がそのSACKパケットを受信する(2311)。ヘッダ処理部500−1は、転送先テーブルを参照して、SACKパケットをCPUブレード3のヘッダ処理部500−3に通知する(2312)。ヘッダ処理部500−3は、転送先テーブルを参照して、SACKパケットをCPUブレード2のヘッダ処理部500−2に通知する(2313)。ヘッダ処理部500−3は同時に、パラメータ格納テーブル510−3のエントリの自分の検証タグ902と自分のシーケンス番号903を参照し、図2Bに示したSACKパケットのヘッダにある検証タグ213と受信DATAパケットのシーケンス番号214を、参照した値に書き換える(2314)。これは、SACKパケットのヘッダの検証タグ213には元の現用系であるCPUブレード1のものが、また受信DATAパケットのシーケンス番号214には、ヘッダを書換用のシーケンス番号に書き換えて送信したDATAパケットのシーケンス番号が記述されており、そのままではCPUブレード2のL4スタック502−2がパケットを破棄してしまうからである。その後、ヘッダ処理部500−3は、VNIC501−3を介してL4スタック502−3にSACKパケットを渡す(2315、2316)。
【0074】
一方、CPUブレード2のヘッダ処理部500−2は、2313のSACKパケット通知を受けた後、図12に示した1225〜1227と同様の手順を行う。そのため、ここでは説明を省略する。
【0075】
以上の手順を踏むことで、一部のSCTPコネクションのパケット処理をCPUブレード1からCPUブレード3に切り替えた場合でも、SCTPコネクションを切断することなく、継続的にDATAパケットを送信することができる。
3.処理(フローチャート)
本実施の形態のゲートウェイ装置では、ヘッダ処理部がL4コネクションで用いるパラメータを記憶して、必要に応じてヘッダを書き換えることによって、L4コネクションの冗長化を実現している。ヘッダ処理部の動作パターンは、VNIC、すなわち装置内のL4スタックからパケットを読み込んだ場合と、VNIC以外からパケットを受け取った場合に分けられる。また、装置が現用系である場合と、装置が待機系である場合に分けられる。図24、図25、図26、図27を用いて、SCTPを例にとり、ヘッダ処理部の動作を説明する。
【0076】
図24は、現用系においてヘッダ処理部がVNICから読込んだSCTPパケットを処理するフローチャート図である。まず、VNICからSCTPパケットを読み込む(2400)。読み込んだパケットがDATAパケットである場合(2401)、図9Aなどで示したパラメータ格納テーブルに該当するエントリがあれば、自分のシーケンス番号903と書換用のシーケンス番号905の値を1だけ増やして更新する(2402)。その後、同エントリの書換用シーケンス番号905に値が記述されている場合には、DATAパケットのヘッダをその値に書き換える(2403)。その後、ヘッダ処理部は、図8に示した転送先テーブルを参照して、適当なCPUブレードのヘッダ処理部にSCTPパケットを転送する(2406)。
【0077】
一方、VNICから読み込んだSCTPパケットが、INITパケットもしくはINIT−ACKパケットである場合(2404)、パケットに記述されている検証タグとシーケンス番号初期値を抽出し、図9Aなどで示したパラメータ格納テーブルに新たなエントリを作成して、自分の検証タグ902と自分のシーケンス番号903に記憶する(2405)。その後、ヘッダ処理部は、図8に示した転送先テーブルを参照して、適当なCPUブレードのヘッダ処理部にSCTPパケットを転送する(2406)。
【0078】
最後に、VNICから読み込んだSCTPパケットの種別に係わらず、スイッチブレードを介してそのパケットを通信相手に送信し(2407)、処理を終了する(2408)。
【0079】
図25は、現用系においてヘッダ処理部がVNIC以外から受取ったSCTPパケットを処理するフローチャート図である。まず、VNIC以外からSCTPパケットを受け取る(2500)。これはすなわち、通信相手からのSCTPパケットを受け取ったことを意味する。次に、図8に示した転送先テーブルを参照して、適当なCPUブレードのヘッダ処理部にSCTPパケットを転送する(2501)。転送先テーブルの転送先802に、装置内のL4スタックにパケットを渡すことを意味する<local>を含むか検査し(2502)、含まなければ処理を終了する(2511)。
【0080】
2502に戻り、転送先に<local>を含む場合に進む。受け取ったSCTPパケットがDATAパケットである場合(2503)、図9Aなどで示したパラメータ格納テーブルに該当するエントリがあれば、通信相手のシーケンス番号907の値を1だけ増やして更新する(2504)。あるいは、受け取ったSCTPパケットがINITパケットもしくはINIT−ACKパケットである場合(2505)、パケットに記述されている検証タグとシーケンス番号初期値を抽出し、図9Aなどで示したパラメータ格納テーブルに新たなエントリを作成して、通信相手の検証タグ906と通信相手のシーケンス番号907に記憶する(2506)。あるいは、受け取ったSCTPパケットがSACKパケットである場合(2507)、SACKパケットのヘッダにある受信DATAパケットのシーケンス番号を、パラメータ格納テーブルの該当するエントリの自分のシーケンス番号903の値と異なれば、その値に書き換える(2508)。その後、受け取ったSCTPパケットの種別に係わらず、SCTPパケットのヘッダの検証タグを、パラメータ格納テーブルの該当するエントリの自分の検証タグ902の値と異なれば、その値に書き換える(2509)。そして、VNICにSCTPパケットを書き込み(2510)、処理を終了する(2511)。
【0081】
図26は、待機系においてヘッダ処理部がVNICから読込したSCTPパケットを処理するフローチャート図である。まず、VNICからSCTPパケットを読み込む(2600)。読み込んだパケットがDATAパケットである場合(2601)、図9Bなどで示したパラメータ格納テーブルに該当するエントリがあれば、自分のシーケンス番号903と書換用のシーケンス番号905の値を1だけ増やして更新する(2602)。一方、VNICから読み込んだSCTPパケットが、INITパケットもしくはINIT−ACKパケットである場合(2603)、パケットに記述されている検証タグとシーケンス番号初期値を抽出し、図9Aなどで示したパラメータ格納テーブルに新たなエントリを作成して、自分の検証タグ902と自分のシーケンス番号903に記憶する(2604)。
【0082】
最後に、VNICから読み込んだSCTPパケットの種別に係わらず、パケットを破棄し(2605)、処理を終了する(2606)。
【0083】
図27は、待機系においてヘッダ処理部がVNIC以外から受取ったSCTPパケットを処理するフローチャート図である。まず、VNIC以外からSCTPパケットを受け取る(2700)。SCTPパケットの送信元のアドレスを特定する(2701)。送信元が現用系である、すなわち現用系から通信相手に送信されるSCTPパケットである場合に進む。SCTPパケットがINITパケットもしくはINIT−ACKパケットである場合(2702)、パケットに記述されている検証タグとシーケンス番号初期値を抽出し、図9Bなどで示したパラメータ格納テーブルに新たなエントリを作成して、書換用の検証タグ904と書換用のシーケンス番号905に記憶する(2703)。次に、SCTPパケットがINITパケットもしくはDATAパケットである場合(2704)、接続要求やアプリケーションデータ送信を促すために、装置内のアプリケーションに対してINITパケットもしくはDATAパケットを直接通知し(2705)、処理を終了する(2715)。一方、装でない場合、パケットを破棄し(2706)、処理を終了する(2715)。
【0084】
2701に戻り、SCTP送信元が通信相手である、すなわちゲートウェイ装置が通信相手から受信したSCTPパケットである場合に進む。受け取ったSCTPパケットがDATAパケットである場合(2707)、図9Aなどで示したパラメータ格納テーブルに該当するエントリがあれば、通信相手のシーケンス番号907の値を1だけ増やして更新する(2708)。あるいは、受け取ったSCTPパケットがINITパケットもしくはINIT−ACKパケットである場合(2709)、パケットに記述されている検証タグとシーケンス番号初期値を抽出し、図9Aなどで示したパラメータ格納テーブルに新たなエントリを作成して、通信相手の検証タグ906と通信相手のシーケンス番号907に記憶する(2710)。あるいは、受け取ったSCTPパケットがSACKパケットである場合(2711)、SACKパケットのヘッダにある受信DATAパケットのシーケンス番号を、パラメータ格納テーブルの該当するエントリの自分のシーケンス番号903の値と異なれば、その値に書き換える(2712)。その後、受け取ったSCTPパケットの種別に係わらず、SCTPパケットのヘッダの検証タグを、パラメータ格納テーブルの該当するエントリの自分の検証タグ902の値と異なれば、その値に書き換える(2713)。そして、VNICにSCTPパケットを書き込み(2714)、処理を終了する(2715)。
【0085】
以上の処理によって、本実施の形態のゲートウェイ装置は、冗長構成をとるゲートウェイ装置において、L4コネクションを確立した通信相手から受信したパケットを複製して、現用系と待機系の両方にパケットを入力し、それぞれのL4スタックで処理してL4コネクションの冗長化を実現できる。また、L4コネクションを確立したまま柔軟な冗長化装置の運用が可能となる。
【産業上の利用可能性】
【0086】
本発明は、移動体通信のゲートウェイ装置に限らず、様々な通信システムにおいてL4コネクション端点となる通信制御装置の冗長化に適用することができる。
【符号の説明】
【0087】
400 ゲートウェイ装置
410−1 CPUブレード1
420 スイッチブレード
500−1 ヘッダ処理部
501−1 VNIC
502−1 L4スタック
503−1 アプリケーション
510−1 パラメータ格納テーブル
511−1 転送先テーブル
1910 L4パラメータ通知メッセージ
【特許請求の範囲】
【請求項1】
独立して動作する複数のパケット処理装置と前記複数のパケット処理装置を接続するスイッチ装置を備え、前記複数のパケット処理装置のうち1台が現用系であり、前記現用系とは異なる1台が待機系となるように冗長構成をとり、前記現用系が通信相手に対してレイヤ4コネクションの端点となるゲートウェイ装置であって、
前記通信相手から受信した前記レイヤ4コネクションのパケットが前記現用系もしくは前記待機系に入力されると、前記現用系もしくは前記待機系は前記レイヤ4コネクションに関して記憶しているパラメータを用いて前記パケットのヘッダを書き換えて、レイヤ4スタックに前記パケットを渡すことを特徴とするゲートウェイ装置。
【請求項2】
請求項1に記載のゲートウェイ装置において、前記レイヤ4コネクションの確立時に前記通信相手と交換するパラメータと、前記レイヤ4コネクションの確立後のパケット通信において値が更新されるパラメータを、前記現用系もしくは前記待機系において記憶することを特徴とするゲートウェイ装置。
【請求項3】
請求項2に記載のゲートウェイ装置において、前記現用系もしくは前記待機系は前記通信相手から受信した前記レイヤ4コネクションのパケットを受け取ると、それぞれ前記待機系もしくは前記現用系に前記パケットを転送することを特徴とするゲートウェイ装置。
【請求項4】
請求項2に記載のゲートウェイ装置において、前記現用系はレイヤ4スタックから前記通信相手に送信する前記レイヤ4コネクションのパケットを受け取ると、前記現用系は前記レイヤ4コネクションに関して記憶しているパラメータを用いて前記パケットのヘッダを書き換えてパケット網に送信する、もしくは前記パケットを複製して前記待機系に転送する、もしくは前記2つの動作を両方とも行うことを特徴とするゲートウェイ装置。
【請求項5】
請求項4に記載のゲートウェイ装置において、前記待機系は前記現用系から転送された前記通信相手に送信する前記レイヤ4コネクションのパケットを受け取ると、待機系内アプリケーションに前記パケットを通知することを特徴とする、ゲートウェイ装置。
【請求項6】
請求項4に記載のゲートウェイ装置において、前記待機系はレイヤ4スタックから前記通信相手に送信する前記レイヤ4コネクションのパケットを受け取ると、前記現用系が前記パケットをパケット網に送信している場合には前記待機系は前記パケットを破棄し、前記現用系が前記パケットをパケット網に送信していない場合には前記待機系は前記パケットをパケット網に送信することを特徴とするゲートウェイ装置。
【請求項7】
請求項1に記載のゲートウェイ装置において、前記現用系(第1の現用系)と前記待機系(第1の待機系)とは異なるパケット処理装置を第2の現用系もしくは第2の待機系として追加する場合に、前記第1の現用系もしくは前記第1の待機系は前記第2の現用系もしくは前記第2の待機系に対して前記レイヤ4コネクションに関して記憶しているパラメータを通知し、前記第2の現用系もしくは前記第2の待機系から前記通知に対する応答を受け取ると前記レイヤ4コネクションのパケットの転送先を前記第2の現用系もしくは前記第2の待機系に切り替えることを特徴とするゲートウェイ装置。
【請求項8】
請求項7に記載のゲートウェイ装置において、前記第2の現用系もしくは前記第2の待機系は前記第1の現用系もしくは前記前記第1の待機系から前記レイヤ4コネクションのパラメータ通知を受け取ると、前記第2の現用系もしくは前記第2の待機系内のレイヤ4スタックに対して、通知された前記パラメータを用いて新規レイヤ4コネクションを擬似的に確立する挙動をさせ、前記新規レイヤ4コネクションのパラメータを記憶することを特徴とするゲートウェイ装置。
【請求項9】
請求項7に記載のゲートウェイ装置において、前記第1の現用系もしくは前記第1の待機系は前記レイヤ4コネクションの転送先を切り替えた後に、前記第1の現用系もしくは前記第1の待機系内のレイヤ4スタックに対して、前記レイヤ4コネクションを擬似的に切断する挙動をさせることを特徴とするゲートウェイ装置。
【請求項1】
独立して動作する複数のパケット処理装置と前記複数のパケット処理装置を接続するスイッチ装置を備え、前記複数のパケット処理装置のうち1台が現用系であり、前記現用系とは異なる1台が待機系となるように冗長構成をとり、前記現用系が通信相手に対してレイヤ4コネクションの端点となるゲートウェイ装置であって、
前記通信相手から受信した前記レイヤ4コネクションのパケットが前記現用系もしくは前記待機系に入力されると、前記現用系もしくは前記待機系は前記レイヤ4コネクションに関して記憶しているパラメータを用いて前記パケットのヘッダを書き換えて、レイヤ4スタックに前記パケットを渡すことを特徴とするゲートウェイ装置。
【請求項2】
請求項1に記載のゲートウェイ装置において、前記レイヤ4コネクションの確立時に前記通信相手と交換するパラメータと、前記レイヤ4コネクションの確立後のパケット通信において値が更新されるパラメータを、前記現用系もしくは前記待機系において記憶することを特徴とするゲートウェイ装置。
【請求項3】
請求項2に記載のゲートウェイ装置において、前記現用系もしくは前記待機系は前記通信相手から受信した前記レイヤ4コネクションのパケットを受け取ると、それぞれ前記待機系もしくは前記現用系に前記パケットを転送することを特徴とするゲートウェイ装置。
【請求項4】
請求項2に記載のゲートウェイ装置において、前記現用系はレイヤ4スタックから前記通信相手に送信する前記レイヤ4コネクションのパケットを受け取ると、前記現用系は前記レイヤ4コネクションに関して記憶しているパラメータを用いて前記パケットのヘッダを書き換えてパケット網に送信する、もしくは前記パケットを複製して前記待機系に転送する、もしくは前記2つの動作を両方とも行うことを特徴とするゲートウェイ装置。
【請求項5】
請求項4に記載のゲートウェイ装置において、前記待機系は前記現用系から転送された前記通信相手に送信する前記レイヤ4コネクションのパケットを受け取ると、待機系内アプリケーションに前記パケットを通知することを特徴とする、ゲートウェイ装置。
【請求項6】
請求項4に記載のゲートウェイ装置において、前記待機系はレイヤ4スタックから前記通信相手に送信する前記レイヤ4コネクションのパケットを受け取ると、前記現用系が前記パケットをパケット網に送信している場合には前記待機系は前記パケットを破棄し、前記現用系が前記パケットをパケット網に送信していない場合には前記待機系は前記パケットをパケット網に送信することを特徴とするゲートウェイ装置。
【請求項7】
請求項1に記載のゲートウェイ装置において、前記現用系(第1の現用系)と前記待機系(第1の待機系)とは異なるパケット処理装置を第2の現用系もしくは第2の待機系として追加する場合に、前記第1の現用系もしくは前記第1の待機系は前記第2の現用系もしくは前記第2の待機系に対して前記レイヤ4コネクションに関して記憶しているパラメータを通知し、前記第2の現用系もしくは前記第2の待機系から前記通知に対する応答を受け取ると前記レイヤ4コネクションのパケットの転送先を前記第2の現用系もしくは前記第2の待機系に切り替えることを特徴とするゲートウェイ装置。
【請求項8】
請求項7に記載のゲートウェイ装置において、前記第2の現用系もしくは前記第2の待機系は前記第1の現用系もしくは前記前記第1の待機系から前記レイヤ4コネクションのパラメータ通知を受け取ると、前記第2の現用系もしくは前記第2の待機系内のレイヤ4スタックに対して、通知された前記パラメータを用いて新規レイヤ4コネクションを擬似的に確立する挙動をさせ、前記新規レイヤ4コネクションのパラメータを記憶することを特徴とするゲートウェイ装置。
【請求項9】
請求項7に記載のゲートウェイ装置において、前記第1の現用系もしくは前記第1の待機系は前記レイヤ4コネクションの転送先を切り替えた後に、前記第1の現用系もしくは前記第1の待機系内のレイヤ4スタックに対して、前記レイヤ4コネクションを擬似的に切断する挙動をさせることを特徴とするゲートウェイ装置。
【図1】
【図2A】
【図2B】
【図3】
【図4】
【図5】
【図6】
【図7A】
【図7B】
【図8】
【図9A】
【図9B】
【図10A】
【図10B】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19A】
【図19B】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図2A】
【図2B】
【図3】
【図4】
【図5】
【図6】
【図7A】
【図7B】
【図8】
【図9A】
【図9B】
【図10A】
【図10B】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19A】
【図19B】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【公開番号】特開2011−239309(P2011−239309A)
【公開日】平成23年11月24日(2011.11.24)
【国際特許分類】
【出願番号】特願2010−110728(P2010−110728)
【出願日】平成22年5月13日(2010.5.13)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.イーサネット
【出願人】(000005108)株式会社日立製作所 (27,607)
【Fターム(参考)】
【公開日】平成23年11月24日(2011.11.24)
【国際特許分類】
【出願日】平成22年5月13日(2010.5.13)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.イーサネット
【出願人】(000005108)株式会社日立製作所 (27,607)
【Fターム(参考)】
[ Back to top ]