以下、本発明の実施形態について図面を参照して説明する。
(実施形態1)
図1は、本発明の実施形態における通信装置の構成例を示すブロック図である。本発明の実施形態における通信装置100は、フロー単位のネットワーク制御方式を利用する通信装置であって、複数の通信インタフェース101と、受信したパケットの転送を行うパケット転送部200と、パケット転送部の動作を制御する転送制御部300とを備える。
「フロー」とは、任意のアドレスや識別子の組み合せによって識別できるトラフィックの一連のパケットの流れを指し、フロー単位のネットワーク制御方式を利用することで、より粒度の細かい柔軟なネットワーク制御を実現できる。フロー単位のネットワーク制御方式は、例えば、OpenFlowである。受信したパケットを転送するフロースイッチと、フロースイッチの動作を制御するフローコントローラとを備えるOpenFlowによる通信装置の例は、「Nick McKeown、他7名、“OpenFlow: Enabling Innovation in Campus Networks”、2008年3月14日、インターネット<http://www.openflow.org/documents/openflow−wp−latest.pdf>」、または、「“OpenFlow Switch Specification Version 1.0.0”、2009年12月31日、インターネット<http://www.openflow.org/documents/openflow−spec−v1.0.0.pdf>」等に記載されている。
パケット転送部200は、例えば、OpenFlowにおけるフロースイッチである。また、転送制御部300は、例えば、OpenFlowにおけるフローコントローラである。
パケット転送部200は、受信したパケットの転送を行うが、具体的には、転送制御部300が設定するパケットを受信したときのパケット転送部の動作を定める情報であるパケット転送ルールに従って、受信したパケットに対して任意の処理を行う。
パケット転送ルールは、フローを識別可能な情報であるフロー情報と、フロー情報に適合するフローのパケットに対して実行する処理の内容を定める情報であるアクション情報とを含む。パケット転送ルールは、少なくとも、フロー情報と、アクション情報とを含むが、更に他の情報を含んでいても良い。
フロー情報は、例えば、送信元MACアドレス、送信先MACアドレス、Ethernet(登録商標)フレームタイプ、送信元IPアドレス、送信先IPアドレス、送信元ポート番号、送信先ポート番号、どの通信インタフェースからパケットを受信したのかを定める情報である受信ポート番号等を含むが、フロー情報は、これらに限定されない。更に他の情報を含んでいても良い。アクション情報の内容として、例えば、パケットを特定の通信インタフェースに送信する、パケットを通信スタックに送信する、パケットに含まれる任意のアドレスや識別子を任意の値に書き換える、パケットを廃棄する等が挙げられるが、アクション情報の内容は、これらに限定されない。
通信インタフェースは、任意のネットワークに接続して通信を可能にする機能を提供するインタフェースを指す。本発明の実施形態において、通信インタフェースの種類は、特に限定されない。Ethernet(登録商標)等の有線インタフェース、無線LAN等の無線インタフェース、又は任意の方法により生成される仮想インタフェースであって良い。仮想インタフェースの例として、例えば、トンネルインタフェースや、複数の通信インタフェースを仮想的に束ねるリンクアグリゲーションにより生成される論理インタフェース等が挙げられる。また、通信インタフェースの数も、特に限定されず、1つ以上であれば良い。更に、複数の通信インタフェース101について、全て同じ種類の通信インタフェースでも、異なる種類の通信インタフェースが混在していても良い。
図2は、本発明の実施形態におけるパケット転送部の構成例を示すブロック図である。パケット転送部200は、パケット転送ルール記憶部201と、パケット転送ルール管理部202と、フロー識別部203と、アクション実行部204とを備える。
パケット転送ルール記憶部201は、パケット転送ルールを記憶する。フロー毎に異なるパケット転送ルールが設定されるため、パケット転送ルール記憶部201には1つ以上のパケット転送ルールが記憶される。パケット転送ルール記憶部201に記憶されるパケット転送ルールの集合を「パケット転送ルールテーブル」と記す。
パケット転送ルール管理部202は、パケット転送ルールを管理する。転送制御部300は、パケット転送部200にパケット転送ルールを設定するとき、パケット転送ルールと共に設定指示を送信する。設定指示は、具体的には、パケット転送ルールの追加、変更又は削除を行うのかを定める情報である。パケット転送ルール管理部202は、転送制御部300から受信したパケット転送ルールを、設定指示に応じてパケット転送ルール記憶部201に記憶させる。
パケット転送ルールは、フロー情報及びアクション情報の他に、パケット転送ルールの有効期間を定める情報であるタイマ値を含む。パケット転送ルール管理部202は、各パケット転送ルールで指定されているタイマ値を時間経過と共に減少させる。そして、タイマ値が0になったならば、そのタイマ値を含むパケット転送ルールを、パケット転送ルール記憶部201から削除する。パケット転送ルールに含まれるフロー情報に適合するフローのパケットを受信したときには、パケット転送ルール管理部202は、タイマ値を初期値にリセットする。
フロー識別部203は、パケットを受信したとき、受信したパケットに含まれる任意のアドレスや識別子からフロー情報を生成する。生成したフロー情報に基づき、受信したパケットのフローに適合するフロー情報を含むパケット転送ルールが、パケット転送ルール記憶部201に記憶されているパケット転送ルールテーブル上に存在するか検索する。
アクション実行部204は、パケット転送ルールに含まれるアクション情報の内容に基づき、受信したパケットに対して任意の処理を実行する。
パケット転送部200の動作について説明する。図3は、パケット転送部がパケットを受信したときの処理の例を示すフローチャートである。パケット転送部200がパケットを受信すると(ステップS101)、フロー識別部203は、受信したパケットからフロー情報を生成し(ステップS102)、生成したフロー情報に基づき、受信したパケットのフローに適合するフロー情報を含むパケット転送ルールが、パケット転送ルール記憶部201に記憶されているパケット転送ルールテーブル上に存在するか否か判定する(ステップS103)。
受信したパケットのフローに適合するフロー情報を含むパケット転送ルールが存在しない場合(ステップS103におけるNo)、フロー識別部203は、フロー識別部203が生成したフロー情報を含む新規フロー検出通知を転送制御部300に送信し(ステップS104)、受信したパケットのフローに対するパケット転送ルールの生成を要求する。なお、フロー識別部203は、受信したパケットそのものを新規フロー検出通知に含めても良い。転送制御部300は、新規フロー検出通知を受信したとき、パケット転送ルールを生成し、設定指示と共にパケット転送部200に送信する。
パケット転送ルール管理部202は、転送制御部300から送信されたパケット転送ルール及び設定指示を受信すると、その指示に応じて、受信したパケット転送ルールを、パケット転送ルール記憶部201に記憶させる(ステップS105)。
受信したパケットのフローに適合するフロー情報を含むパケット転送ルールが存在する場合(ステップS103におけるYes)、パケット転送ルール管理部202は、受信したパケットのフローに適合するフロー情報を含むパケット転送ルールのタイマ値を、初期値にリセットする(ステップS106)。
上記のような処理を行うことで、受信したパケットのフローに適合するパケット転送ルールが得られる。アクション実行部204は、受信したパケットのフローに適合するパケット転送ルールに含まれるアクション情報に従って、受信したパケットに対して任意の処理を実行する(ステップS107)。
図4は、第1の実施形態における通信に係る要素に着目したより詳細な通信装置の構成例を示すブロック図である。パケット転送部200は、複数の通信インタフェース101及び仮想インタフェース102に接続し、パケットの転送を行う。通信装置100は、複数の通信インタフェース101を介して任意のネットワークと接続される。一方、仮想インタフェース102は、複数の通信インタフェース101を介して接続されるネットワークのうちのいずれにも接続しない通信インタフェースである。換言すれば、通信装置100内部に存在する仮想ネットワークに接続するための通信インタフェースであると言える。
図4に示すような構成により、パケット転送部200は、他の通信装置、又は通信装置100上で動作する任意の通信プログラム105から送信されるパケットを、複数の通信インタフェース101及び仮想インタフェース102のうちのいずれかの通信インタフェースで受信する。
パケット転送部200と転送制御部300は、任意の方法により接続される。例えば、UNIX(登録商標)ドメインソケット通信、TCP(Transmission Control Protocol)通信又はSSL(Secure Socket Layer)通信により接続される。
転送制御部300は、図5に示すように、使用インタフェース情報記憶部301と、使用インタフェース情報管理部302と、アドレス情報記憶部303と、アドレス情報管理部304と、経路表管理部305と、パケット転送ルール生成部306と、パケット転送部管理部307とを備える。
使用インタフェース情報は、フロー毎にどの通信インタフェースを使用して通信を行うのかを定める情報であって、フローを識別可能な情報であるフロー情報と、複数の通信インタフェース101のうちのいずれかを一意に特定可能な情報とを含む。使用インタフェース情報は、少なくとも、フロー情報と、複数の通信インタフェース101のうちのいずれかを一意に特定可能な情報とを含むが、更に他の情報を含んでいても良い。
使用インタフェース情報に含まれるフロー情報は、それに含まれる情報の値に、ワイルドカードを含んでいても良い。複数の通信インタフェース101のうちのいずれかを一意に特定可能な情報は、例えば、インタフェース名、ポート番号等である。
使用インタフェース情報記憶部301は、使用インタフェース情報を記憶する。フロー毎に異なる使用インタフェース情報が設定されるため、使用インタフェース情報記憶部301には1つ以上の使用インタフェース情報が記憶される。
使用インタフェース情報管理部302は、使用インタフェース情報を管理すると共に、任意のタイミングで使用インタフェース情報を設定可能にする機能を、ユーザ又は任意のプログラムに対して提供する。ユーザ又は任意のプログラムは、使用インタフェース情報管理部302に使用インタフェース情報を設定するとき、使用インタフェース情報と共に設定指示を与える。設定指示は、具体的には、使用インタフェース情報の追加、変更又は削除を行うのかを定める情報である。使用インタフェース情報管理部302は、ユーザ又は任意のプログラムから与えられた使用インタフェース情報を、設定指示に応じて使用インタフェース情報301に記憶させる。
使用インタフェース情報管理部302がユーザ又は任意のプログラムに対して提供する使用インタフェース情報を設定可能にする機能は、例えば、設定を行うためのグラフィカルユーザインタフェース、任意のプログラムから利用可能な任意のAPI(Application Programming Interface)等である。
アドレス情報記憶部303は、複数の通信インタフェース101及び仮想インタフェース102が、パケットの送受信を行うために必要な情報であるアドレス情報を記憶する。通信インタフェース毎に異なるアドレス情報が設定されるため、アドレス情報記憶部303には1つ以上のアドレス情報が記憶される。
アドレス情報は、例えば、MACアドレス、IPアドレス、サブネットマスク、通信装置が通信インタフェースを介して接続するネットワーク上のデフォルトゲートウェイのMACアドレス及びIPアドレス、ポート番号等を含むが、アドレス情報は、これらに限定されない。更に他の情報を含んでいても良い。なお、アドレス情報は、任意の方法により各通信インタフェースに設定される。アドレス情報を設定する任意の方法は、例えば、ユーザ又は任意のプログラムによる固定設定、DHCP(Dynamic Host Configuration Protocol)、IPCP(Internet Protocol Control Protocol)等である。
仮想インタフェース102には、複数の通信インタフェース101の各通信インタフェースと同様に、アドレス情報が設定されるが、そのアドレス情報は、任意の値から成る仮想のアドレス情報である。具体的には、仮想インタフェース102のアドレス情報は、少なくとも、仮想MACアドレスと、仮想IPアドレスと、仮想インタフェース102を介して接続する通信装置100内部の仮想ネットワーク上のデフォルトゲートウェイである仮想デフォルトゲートウェイのIPアドレスとを含む。
アドレス情報管理部304は、複数の通信インタフェース101の各通信インタフェース、及び仮想インタフェース102に設定されるアドレス情報を取得し、アドレス情報記憶部303に記憶させる。また、アドレス情報管理部304は、リース期間切れや通信装置の移動に伴うハンドオーバーの発生等の理由によるアドレス情報の変更が発生したとき、アドレス情報の変更が発生した通信インタフェースのアドレス情報を改めて取得し、アドレス情報記憶部303に記憶させる。
経路表管理部305は、アドレス情報記憶部305に記憶されるアドレス情報に含まれる、複数の通信インタフェース101の各通信インタフェースに設定されるデフォルトゲートウェイ、及び仮想インタフェース102に設定される仮想デフォルトゲートウェイのうち、仮想デフォルトゲートウェイのみを、通信装置100の通信スタック103が持つ経路表104に設定する。
図6は、第1の実施形態における経路表の構成例である。経路表管理部305により、経路表104は、図6のように設定される。複数の通信インタフェース101を介して接続する各ネットワークには、各通信インタフェースを介して通信を行う経路情報が設定される。また、デフォルトゲートウェイに関する経路情報は、仮想デフォルトゲートウェイの経路情報のみが設定される。
各通信インタフェースに設定されるデフォルトゲートウェイ及び仮想デフォルトゲートウェイのうち、仮想デフォルトゲートウェイのみを経路表104に設定することで、通信プログラム105が、通信装置100が直接接続するネットワーク以外のネットワーク上にある通信装置と通信を行う場合、通信プログラム105から送信されるパケットに対しては、仮想デフォルトゲートウェイを使用して送信するように、通信スタック103上で経路制御が行われるようになる。具体的には、通信スタック103上で経路制御が行われた後、パケット転送部200が通信プログラム105から送信されたパケットを仮想インタフェース102から受信する時点では、パケットの送信元MACアドレスは、仮想インタフェース102に設定される仮想MACアドレスに、パケットの送信先MACアドレスは、仮想デフォルトゲートウェイのMACアドレスに、パケットの送信元IPアドレスは、仮想インタフェース102に設定される仮想IPアドレスに、パケットの送信先IPアドレスは、送信先の通信装置のIPアドレスになる。
一方、通信プログラム105が、複数の通信インタフェース101を介して接続するネットワーク上にある通信装置と通信を行う場合、通信プログラム105から送信されるパケットに対して、送信先の通信装置が存在するネットワークに接続する通信インタフェースから送信するように、通信スタック103上で経路制御が行われる。具体的には、通信スタック103上で経路制御が行われた後、パケット転送部200が通信プログラム105から送信されたパケットを送信先の通信装置が存在するネットワークに接続する通信インタフェースから受信する時点では、パケットの送信元MACアドレスは、その通信インタフェースに設定されるMACアドレスに、パケットの送信先MACアドレスは、送信先の通信装置のMACアドレスに、パケットの送信元IPアドレスは、その通信インタフェースに設定されるIPアドレスに、パケットの送信先IPアドレスは、送信先の通信装置のIPアドレスになる。
パケット転送ルール生成部306は、パケット転送部200のフロー識別部203から送信された新規フロー検出通知を受信したとき、すなわち、パケット転送部200からパケット転送ルールの生成を要求されたとき、新規フロー検出通知に含まれるフロー情報、パケット転送ルール記憶部301に記憶される使用インタフェース情報、及びアドレス情報記憶部303に記憶されるアドレス情報に基づき、パケット転送ルールを生成する。
パケット転送ルール生成部306におけるパケット転送ルールの生成方法について説明する。図7は、第1の実施形態における転送制御部がパケット転送ルールを生成する処理の例を示すフローチャートである。
パケット転送ルール生成部306は、新規フロー検出通知を受信したとき、新規フロー検出通知に含まれるフロー情報を参照し、フロー情報に含まれる受信ポート番号に基づき、パケットを受信した通信インタフェースを特定する。そして、パケットを受信した通信インタフェースのアドレス情報、及び仮想インタフェース102のアドレス情報を、アドレス情報管理部304を通じて取得する(ステップS201)。なお、パケットを受信した通信インタフェースは、複数の通信インタフェース101及び仮想インタフェース102のうちのいずれかの通信インタフェースである。
次に、パケット転送ルール生成部306は、新規フロー検出通知に含まれるフロー情報を参照し、受信したパケットの送信元IPアドレスを特定する。そして、パケットを受信した通信インタフェースのアドレス情報に含まれるサブネットマスクに基づき、特定した送信元IPアドレスから求めたネットワークアドレスと、パケットを受信した通信インタフェースに設定されるIPアドレスから求めたネットワークアドレスとが等しいか否か判定する(ステップS202)。すなわち、受信したパケットの送信元IPアドレスに基づき、そのパケットが、パケットを受信した通信インタフェースを介して接続するネットワーク上にある通信装置から送信されたパケットか否かを判定する。
特定した送信元IPアドレスから求めたネットワークアドレスと、パケットを受信した通信インタフェースに設定されるIPアドレスから求めたネットワークアドレスとが等しくない場合(ステップS202におけるNo)、パケットを受信した通信インタフェースを介して接続するネットワーク上にある通信装置ではなく、通信装置100が直接接続するネットワーク以外のネットワーク上にある通信装置から送信されたパケットであると判断できる。
通信装置100が直接接続するネットワーク以外のネットワーク上にある通信装置と通信を行う場合、仮想インタフェース102に設定される仮想デフォルトゲートウェイのみが経路表104に設定されるため、通信スタック103の経路制御により、仮想インタフェース102からパケットが送信される。ゆえに、通信装置100が直接接続するネットワーク以外のネットワーク上にある通信装置からパケットを受信する場合は、仮想インタフェース102でパケットが受信されるようにする対応が必要である。
そこで、特定した送信元IPアドレスから求めたネットワークアドレスと、パケットを受信した通信インタフェースに設定されるIPアドレスから求めたネットワークアドレスとが等しくない場合、パケット転送ルール生成部306は、新規フロー検出通知に含まれるフロー情報と、送信先MACアドレスを仮想インタフェース102に設定される仮想MACアドレスに、送信先IPアドレスを仮想インタフェース102に設定される仮想IPアドレスに書き換えるアクション(ステップS203)、及び受信したパケットを仮想インタフェース102に送信するアクション(ステップS204)から成るアクション情報とを含むパケット転送ルールを生成する。
そのようなパケット転送ルールに基づくパケット転送により、パケット転送部200が受信したパケットは、仮想インタフェース102で受信されるようになる。
特定した送信元IPアドレスから求めたネットワークアドレスと、パケットを受信した通信インタフェースに設定されるIPアドレスから求めたネットワークアドレスとが等しい場合(ステップS202におけるYes)、特定した送信元IPアドレスが、パケットを受信した通信インタフェースに設定されるIPアドレスと等しいか否か判定する(ステップS205)。
特定した送信元IPアドレスが、パケットを受信した通信インタフェースに設定されるIPアドレスと等しくない場合(ステップS205におけるNo)、パケットを受信した通信インタフェースを介して接続するネットワーク上にある通信装置から送信されたパケットであると判断できる。一方、特定した送信元IPアドレスが、パケットを受信した通信インタフェースに設定されるIPアドレスと等しい場合(ステップS205におけるYes)、通信プログラム105が送信したパケットであると判断できる。
特定した送信元IPアドレスが、パケットを受信した通信インタフェースに設定されるIPアドレスと等しくない場合(ステップS205におけるNo)、パケット転送ルール生成部306は、新規フロー検出通知に含まれるフロー情報と、受信したパケットを通信スタック103に送信するアクション(ステップS206)から成るアクション情報とを含むパケット転送ルールを生成する。
そのようなパケット転送ルールに基づくパケット転送により、パケット転送部200が受信したパケットは、そのままパケットを受信した通信インタフェースで受信されるようになる。
特定した送信元IPアドレスが、パケットを受信した通信インタフェースに設定されるIPアドレスと等しい場合(ステップS205におけるYes)、新規フロー検出通知に含まれるフロー情報に基づき、受信したパケットの送信先MACアドレスを特定する。そして、特定した送信元MACアドレスと、仮想インタフェース102に設定される仮想デフォルトゲートウェイのMACアドレスとが等しいか否か判定する(ステップS207)。
特定した送信元MACアドレスと、仮想デフォルトゲートウェイのMACアドレスとが等しい場合(ステップS207におけるYes)、通信プログラム105が、通信装置100が直接接続するネットワーク以外のネットワーク上にある通信装置に仮想デフォルトゲートウェイを使用して送信するパケットであると判断できる。一方、特定した送信元MACアドレスと、仮想デフォルトゲートウェイのMACアドレスとが等しくない場合(ステップS207におけるNo)、通信プログラム105が、パケットを受信した通信インタフェースを介して接続するネットワーク上にある通信装置に送信するパケットであると判断できる。
特定した送信元MACアドレスと、仮想デフォルトゲートウェイのMACアドレスとが等しい場合(ステップS207におけるYes)、パケット転送ルール生成部306は、新規フロー検出通知に含まれるフロー情報に基づき、受信したパケットのフローに適合するフロー情報を含む使用インタフェース情報を、使用インタフェース情報管理部302を通じて取得する。そして、取得した使用インタフェース情報に含まれる複数の通信インタフェース101のうちのいずれかを一意に特定可能な情報に基づき、通信に使用する通信インタフェースを特定する(ステップS208)。なお、通信に使用する通信インタフェースは、複数の通信インタフェース101のうちのいずれかの通信インタフェースである。
加えて、特定した通信に使用する通信インタフェースのアドレス情報を、アドレス情報管理部304を通じて取得する(ステップS209)。
仮想デフォルトゲートウェイは、仮想インタフェース102を介して接続される通信装置100内部の仮想ネットワーク上のデフォルトゲートウェイである。しかしながら、経路表管理部305により設定される経路表104上にのみ存在する仮想的な存在であるため、パケット転送部200が受信したパケットを、通信に使用する通信インタフェースに送信するだけでは、通信装置100が直接接続するネットワーク以外のネットワーク上にある通信装置にパケットは送信されない。
通信に使用する通信インタフェースから通信装置100が直接接続するネットワーク以外のネットワーク上にある通信装置にパケットが送信されるようにするためには、通信に使用する通信インタフェースを介して接続するネットワーク上のデフォルトゲートウェイにパケットを送信する必要がある。
従って、仮想デフォルトゲートウェイが送信先であるパケットを、通信に使用する通信インタフェースを介して接続するネットワーク上のデフォルトゲートウェイに転送することで、通信装置100が直接接続するネットワーク以外のネットワーク上にある通信装置にパケットを送信することが可能になると言える。
そこで、特定した送信元MACアドレスと、仮想デフォルトゲートウェイのMACアドレスとが等しい場合、パケット転送ルール生成部306は、新規フロー検出通知に含まれるフロー情報と、送信元MACアドレスを通信に使用する通信インタフェースに設定されたMACアドレスに、送信元IPアドレスを通信に使用する通信インタフェースに設定されたIPアドレスに書き換えるアクション(ステップS210)、送信先MACアドレスを通信に使用する通信インタフェースに設定されるデフォルトゲートウェイのMACアドレスに書き換えるアクション(ステップS211)、及び受信したパケットを通信に使用する通信インタフェースに送信するアクション(ステップS212)から成るアクション情報とを含むパケット転送ルールを生成する。
そのようなパケット転送ルールに基づくパケット転送により、パケット転送部200が受信したパケットは、通信に使用する通信インタフェースを介して接続するネットワーク上のデフォルトゲートウェイに送信されるようになる。
特定した送信元MACアドレスと、仮想デフォルトゲートウェイのMACアドレスとが等しくない場合(ステップS207におけるNo)、受信したパケットの送信元MACアドレスは、パケットを受信した通信インタフェースに設定されるMACアドレスに、パケットの送信元IPアドレスは、パケットを受信した通信インタフェースに設定されるIPアドレスに、受信したパケットの送信先MACアドレスは、パケットを受信した通信インタフェースを介して接続するネットワーク上にある送信先の通信装置のMACアドレスに、パケットの送信先IPアドレスは、パケットを受信した通信インタフェースを介して接続するネットワーク上にある送信先の通信装置のIPアドレスになるため、そのままパケットを受信した通信インタフェースから送信してやれば良い。
従って、パケット転送ルール生成部306は、新規フロー検出通知に含まれるフロー情報と、受信したパケットを、パケットを受信した通信インタフェースに送信するアクション(ステップS213)から成るアクション情報とを含むパケット転送ルールを生成する。
そのようなパケット転送ルールに基づくパケット転送により、パケット転送部200が受信したパケットは、そのままパケットを受信した通信インタフェースから送信先の通信装置に送信されるようになる。
パケットの送信に先んじて、通信スタック103は、送信先の通信装置のIPアドレスに基づき、送信先のMACアドレスを得るためのアドレス解決を行う。通信装置100が複数の通信インタフェース101を介して接続するネットワーク上にある通信装置と通信を行う場合、各通信インタフェース上で通常のアドレス解決方法に従って、送信先のMACアドレスを得れば良い。一方、通信装置100が直接接続するネットワーク以外のネットワークにある通信装置と通信を行う場合、通信スタック103がパケットを送信するためには、仮想デフォルトゲートウェイのMACアドレスが、パケット転送ルール生成部306がパケット転送ルールを生成するためには、通信に使用する通信インタフェースに設定されるデフォルトゲートウェイのMACアドレスが必要である。
アドレス解決処理においては、2種類のアドレス解決パケットを送受信する。2種類のアドレス解決パケットは、MACアドレスを得ようとする通信装置に対して、MACアドレスを送信するよう要求するためのアドレス解決要求パケット、及び要求を行った通信装置に対して、要求に応じてMACアドレスを含む応答を送信するためのアドレス解決応答パケットである。アドレス解決要求パケットは、例えば、ARP(Address Resolution Protocol)リクエストパケットである。アドレス解決応答パケットは、例えば、ARPリプライパケットである。
アドレス解決要求パケットは、少なくとも、送信元MACアドレス、送信先MACアドレス、要求元の通信装置、具体的には、アドレス解決要求パケットを送信する通信装置のMACアドレス及びIPアドレスである要求元MACアドレス及び要求元IPアドレス、要求先の通信装置、具体的には、MACアドレスを得ようとする通信装置のMACアドレス及びIPアドレスである要求先MACアドレス及び要求先IPアドレスを含む。なお、アドレス解決要求を行う時点では、送信先MACアドレス及び要求先MACアドレスは、不明であるため、それらのMACアドレスの値は、任意のMACアドレスの値になる。例えば、送信先MACアドレスはブロードキャストアドレスに、要求先MACアドレスは空の値になる。
アドレス解決応答パケットは、少なくとも、送信元MACアドレス、送信先MACアドレス、応答元の通信装置、具体的には、アドレス解決応答パケットを送信する通信装置のMACアドレス及びIPアドレスである応答元MACアドレス及び応答元IPアドレス、応答先の通信装置、具体的には、アドレス解決応答パケットを送信すべきアドレス解決要求パケットを送信した通信装置のMACアドレス及びIPアドレスである応答先MACアドレス及び応答先IPアドレスを含む。なお、アドレス解決要求により得ようとする通信装置のMACアドレスは、アドレス解決応答パケットに含まれる応答元のMACアドレスである。
仮想デフォルトゲートウェイは、経路表104上にのみ存在する仮想的な存在であるため、仮想デフォルトゲートウェイに対するアドレス解決要求パケットを送信しても、仮想デフォルトゲートウェイのMACアドレスを含むアドレス解決応答パケットは得られない。また、通信に使用する通信インタフェースに設定されるデフォルトゲートウェイは、経路表104上に存在しないため、通信スタック103が通信に使用する通信インタフェースに設定されるデフォルトゲートウェイに対してアドレス解決要求パケットを送信することはない。そのため、転送制御部300は、仮想デフォルトゲートウェイのMACアドレス、及び通信に使用する通信インタフェースに設定されるデフォルトゲートウェイのMACアドレスを得るための処理を行う。
仮想デフォルトゲートウェイのMACアドレス、及び通信に使用する通信インタフェースに設定されるデフォルトゲートウェイのMACアドレスを得るための処理について説明する。通信スタック103が送信する仮想デフォルトゲートウェイに対するアドレス解決要求パケットを、パケット転送部200が受信したとき、具体的には、仮想デフォルトゲートウェイに対するアドレス解決要求パケットを受信したことによるパケット転送部200からの新規フロー検出通知を、転送制御部300が受信したとき、転送制御部300は、アドレス情報管理部304を通じて複数の通信インタフェース101の各通信インタフェースのアドレス情報を取得し、各通信インタフェースに設定されるデフォルトゲートウェイのIPアドレスを得る。そして、各デフォルトゲートウェイに対するアドレス解決要求パケットを生成し、生成したパケットを各通信インタフェースから送信する指示と共に、パケット転送部200に送信する。パケット転送部200は、その指示に従い、各デフォルトゲートウェイに対するアドレス解決要求パケットを送信する。
なお、仮想デフォルトゲートウェイに対するアドレス解決要求パケットを受信したときに、パケット転送部200から新規フロー検出通知が送信されるようにするため、仮想デフォルトゲートウェイに対するアドレス解決要求パケットのフローに対するパケット転送ルールは、パケット転送部200に設定しない。
パケット転送部200から各デフォルトゲートウェイに対するアドレス解決要求パケットを送信することで、各デフォルトゲートウェイから、各デフォルトゲートウェイのMACアドレスを含むアドレス解決応答パケットが、通信装置100に対して送信される。パケット転送部200が、各デフォルトゲートウェイのMACアドレスを含むアドレス解決応答パケットを受信したとき、具体的には、各デフォルトゲートウェイのMACアドレスを含むアドレス解決応答パケットを受信したことによるパケット転送部200からの新規フロー検出通知を、転送制御部300が受信したとき、その新規フロー検出通知に含まれるフロー情報に基づき、各デフォルトゲートウェイのMACアドレスを取得し、取得した各デフォルトゲートウェイのMACアドレスを、アドレス情報管理部304を通じてアドレス情報記憶部303に記憶する。
各デフォルトゲートウェイのMACアドレスを含むアドレス解決応答パケットを受信したときにパケット転送部200から新規フロー検出通知が送信されるようにするため、各デフォルトゲートウェイのMACアドレスを含むアドレス解決応答パケットのフローに対するパケット転送ルールは、パケット転送部200に設定しない。
そして、全てのデフォルトゲートウェイからアドレス解決応答パケットを受信し、全てのデフォルトゲートウェイのMACアドレスが取得できた時点で、予め転送制御部300に設定する任意の値から成る仮想MACアドレスである仮想デフォルトゲートウェイのMACアドレスを含むアドレス解決応答パケットを生成し、生成したパケットを仮想インタフェース102から送信する。
上記のような処理を行うことで、通信スタック103がパケットを送信するために必要な仮想デフォルトゲートウェイのMACアドレス、及びパケット転送ルール生成部306がパケット転送ルールを生成するために必要な通信に使用する通信インタフェースに設定されるデフォルトゲートウェイのMACアドレスを得ることができる。
パケット転送部管理部307は、パケット転送部200の動作を制御するための任意のプロトコルによりパケット転送部200を管理する。パケット転送ルール生成部306がパケット転送ルールを生成したとき、パケット転送部管理部307は、生成したパケット転送ルールを設定指示と共に、パケット転送部200に送信する。
パケット転送ルール生成部306のパケット転送ルール生成処理において、受信したパケットのフローに適合するフロー情報を含む使用インタフェース情報が、使用インタフェース情報記憶部301に存在しない場合もあり得る。その場合、予め複数の通信インタフェース101のうちのいずれかを、デフォルトの通信インタフェースに設定し、通信に使用する通信インタフェースとしてそのデフォルトの通信インタフェースを用いて、パケット転送ルールを生成しても良い。また、パケットを廃棄する等の、任意の内容のアクションを含むデフォルトのアクション情報を予め設定しておき、新規フロー検出通知に含まれるフロー情報、及びそのデフォルトのアクション情報に基づき、パケット転送ルールを生成しても良い。
また、受信したパケットのフローに適合するフロー情報を含む使用インタフェース情報に含まれる複数の通信インタフェース101のうちのいずれかを一意に特定可能な情報に、存在しない通信インタフェースの情報が設定されていた場合、パケットを廃棄する等の、そのような使用インタフェース情報に対するデフォルトのアクション情報を予め設定しておき、新規フロー検出通知に含まれるフロー情報、及びそのデフォルトのアクション情報に基づき、パケット転送ルールを生成しても良い。
更に、複数の通信インタフェース101の各通信インタフェースのアドレス情報に、デフォルトゲートウェイの情報が含まれない場合もあり得る。アドレス情報にデフォルトゲートウェイの情報が含まれない通信インタフェースを使用する場合、通信装置100が直接接続するネットワーク以外のネットワーク上にある通信装置と通信を行うことはできない。そのような場合、使用インタフェース情報管理部302において、アドレス情報にデフォルトゲートウェイの情報が含まれない通信インタフェースを使用することを定める使用インタフェース情報を、設定できないようにする対応を行っても良い。また、そのような使用インタフェース情報に対するパケットを廃棄する等の、任意の内容のアクションを含むデフォルトのアクション情報を予め設定しておき、そのアクション情報に基づき、パケット転送ルールを生成しても良い。
ユーザ又は任意のプログラムにより、使用インタフェース情報管理部302を通じて使用インタフェース情報記憶部301に記憶される使用インタフェース情報が変更されたとき、変更された使用インタフェース情報に基づき生成されたパケット転送ルールも変更する必要がある。
使用インタフェース情報が変更されたとき、転送制御部300は、変更された使用インタフェース情報に含まれるフロー情報に適合する全てのパケット転送ルールを、パケット転送部200のパケット転送ルール記憶部201に記憶されているパケット転送ルールテーブルからパケット転送部管理部307を通じて取得し、取得した各パケット転送ルールの内容を、変更された使用インタフェース情報に基づく内容に変更し、変更した各パケット転送ルールを、変更を行う設定指示と共に、パケット転送部管理部307を通じてパケット転送部200に送信することで、パケット転送ルールを変更する。若しくは、変更された使用インタフェース情報に含まれるフロー情報に適合する全てのパケット転送ルールを、パケット転送部管理部307を通じて削除し、改めてパケット転送ルールを生成するように促す対応を行っても良い。
本実施の形態では、仮想デフォルトゲートウェイのみを、通信装置100の通信スタック103が持つ経路表104に設定することで、通信スタック103が行う経路制御において、経路表上に複数のデフォルトゲートウェイが存在することにより、どのデフォルトゲートウェイを使用して通信を行えば良いか分からず、通信不能に陥ってしまうことを回避できる。
通信装置100が直接接続するネットワーク以外のネットワーク上にある通信装置と通信を行う場合、通信スタック103が行う経路制御により、通信装置100上で動作する任意の通信プログラム105から仮想デフォルトゲートウェイに送信されるパケットを、使用インタフェース情報管理部302を通じて設定される使用インタフェース情報により特定される通信に使用する通信インタフェースを介して接続されるネットワーク上のデフォルトゲートウェイに転送する。優位に設定した通信インタフェース以外の通信インタフェースを使用する場合、通信装置が直接接続するネットワーク以外のネットワーク上にある通信装置と通信することができない特許文献1記載の方法とは異なり、複数の通信インタフェース101のうちどの通信インタフェースを使用する場合でも、通信装置100が直接接続するネットワーク以外のネットワーク上にある通信装置と通信することが可能である。ゆえに、複数の通信インタフェース101を介して接続するネットワークを同時に利用して通信を行うことを実現できる。
また、通信プログラム105に対して、pingコマンドのような通信に使用する通信インタフェースを指定可能にする機能を実装する等の、特別な対応を必要としない。ネットワーク側からは、通信装置100は、通常のIP通信の仕組みに従って通信を行っているように見えるため、特定の機構や対向の通信装置を用意する等の、ネットワーク側の特別な対応を必要としない。かつ、特定の通信装置の任意のアドレスの情報を、予め登録しておく等の対応も必要なく、通信装置100は、自律的に通信を行うことができる。
更に、通信プログラム105からは、通信に使用する通信インタフェースによらず、仮想インタフェース102を介し、仮想デフォルトゲートウェイを使用して通信が行われるように見えるため、通信に使用する通信インタフェースが変更された場合や、リース期間切れや通信装置の移動に伴うハンドオーバーの発生等の理由により通信インタフェースのアドレス情報に変化が発生した場合に、通信プログラム105側にそれを意識させることなしに通信を行うことができる。
フロー単位のネットワーク制御方式を利用したこと、及びフロー毎にどの通信インタフェースを使用して通信を行うのかを定める使用インタフェース情報を、ユーザ又は任意のプログラムから任意に設定可能にしたことにより、ユーザ又は任意のプログラムは、任意の要求や条件に基づき、フロー毎に通信に利用するネットワークを選択することができる。すなわち、異なる特性を持つトラフィックを送受信する通信プログラムであるアプリケーションは、いくつかのフローの集合と捉えられるので、フロー単位というより細かい粒度で、通信装置上で動作するアプリケーションがどのネットワークを利用して通信を行うのかについて任意に選択することを実現でき、通信装置の利便性の向上が期待できる。
例えば、ユーザが、通信量の小さい電子メールを送受信するアプリケーションのトラフィック、具体的には、送信先ポート番号が25番(SMTP、Simple Mail Transfer Protocol)又は110番(POP3、Post Office Protocol version 3)のフローに対しては、3Gを使用することを定める使用インタフェース情報を設定し、Web上で映像のストリーミング通信のような通信量の大きい通信を行うアプリケーションのトラフィック、具体的には、送信先ポート番号が80番(HTTP、HyperText Transfer Protocol)のフローに対しては、無線LAN3Gを使用することを定める使用インタフェース情報を設定することで、本発明の実施形態により、それぞれのトラフィックは、3G並びに無線LANを利用して通信が行われるようになる。
例えば、ユーザが、任意のネットワーク上にある通信装置との通信を許可しない場合、具体的には、送信元IPアドレス又は送信先IPアドレスが通信を許可しない通信装置のIPアドレスのフローに対しては、存在しない通信インタフェースを使用することを定める使用インタフェース情報を設定することで、本発明の実施形態により、通信を許可しない通信装置との間で送受信されるパケットを廃棄することができる。
例えば、複数の通信インタフェース101の各通信インタフェースが通信可能か否か監視する通信装置100上で動作するアプリケーションが、各通信インタフェースの状態に基づき、動的に使用インタフェース情報を設定することで、任意のフローの通信に利用するネットワークを動的に変更できる。無線LANネットワークが切断され、通信不可になった場合は、無線LANを使用することを定める使用インタフェース情報から、3Gを使用することを定める使用インタフェース情報に変更することで、本発明の実施形態により、任意のフローの通信は、3Gを利用して通信を行うようになる。
例えば、複数の通信インタフェース101に含まれる無線インタフェースの受信電界強度を監視する通信装置100上で動作するアプリケーションが、各無線インタフェースの受信電界強度に基づき、任意に設定した閾値より受信電界強度が大きい無線インタフェースを、通信に使用する通信インタフェースとして選択し、その無線インタフェースを使用することを定める使用インタフェース情報を設定することで、本発明の実施形態により、任意のフローの通信は、最も状態の良い無線インタフェースを利用して通信を行うようになる。
例えば、複数の通信インタフェース101の各通信インタフェースのパケット送受信数を監視する通信装置100上で動作するアプリケーションが、各通信インタフェースのパケット送受信数、及びユーザが予め設定したパケット送受信数の上限に基づき、任意のフローの通信に使用している通信インタフェースのパケット送受信数が上限に達したとき、他の通信インタフェース、若しくは存在しない通信インタフェースを使用することを定める使用インタフェース情報を設定することで、本発明の実施形態により、パケット送受信数が上限に達した通信インタフェースを使用する任意のフローに対して、他の通信インタフェースを使用して通信を行うようにする、若しくはパケットを廃棄するようにする等の対応を行うことができる。
(実施形態2)
図8は、第2の実施形態における通信に係る要素に着目したより詳細な通信装置の構成例を示すブロック図である。第1の実施形態における通信装置の構成要素と同様の構成要素については、同一の符号を付し、詳細な説明を省略する。第2の実施形態における通信装置100のパケット転送部200は、通信装置100内部にブリッジ等の構造を構成する。ここでは、パケット転送部200がブリッジを構成する場合を例として説明する。パケット転送部200がブリッジを構成する場合、通信スタック103は、パケット転送部200が構成するブリッジに接続する仮想インタフェース102、具体的には、ブリッジのローカルポートを端点としてパケットの送受信を行う必要がある。つまり、第1の実施形態のように、通信スタック103は、パケット転送部200に接続する複数の通信インタフェース101を直接使用してパケットの送受信を行うことができない。そのため、第1の実施形態の方法を、第2の実施形態における通信装置にそのまま適用しても、複数の通信インタフェース101を介して接続するネットワークを同時に利用して通信を行うことは実現できない。
そこで、第2の実施形態では、仮想インタフェース102を端点としてパケットの送受信が行われるように、仮想インタフェース102のIPアドレスの設定、及び通信スタック103が持つ経路表104の設定を行い、それらに基づくパケット転送ルールの生成処理を行うことで、フロー毎に通信に利用するネットワークを選択可能な、複数のネットワークを同時に利用した通信を行うことを実現する。
第2の実施形態における仮想インタフェース102には、第1の実施形態と同様に、任意の値から成る仮想のアドレス情報が設定される。仮想インタフェース102のアドレス情報は、少なくとも、仮想MACアドレスと、仮想IPアドレスと、仮想デフォルトゲートウェイのIPアドレスとを含む。
第2の実施形態におけるアドレス情報管理部304は、パケット転送部200に接続する複数の通信インタフェース101の各インタフェースのアドレス情報、及び仮想インタフェース102のアドレス情報を取得し、アドレス情報記憶部303に記憶させる。更に、取得したアドレス情報に含まれる各通信インタフェースのIPアドレスを、仮想インタフェース102に設定する。それにより、第2の実施形態における仮想インタフェース102は、1つ以上のIPアドレス、具体的には、仮想IPアドレス、及び各通信インタフェースのIPアドレスを持つ。
第2の実施形態における経路表管理部305は、仮想インタフェース102に設定される仮想デフォルトゲートウェイのみを、通信スタック103が持つ経路表104に設定する。更に、複数の通信インタフェース101を介して接続する各ネットワークに各通信インタフェースを介して通信を行う経路情報を、経路表104から削除する。そして、それらの代わりに、複数の通信インタフェース101を介して接続する各ネットワークに仮想インタフェース102を介して通信を行う経路情報を、経路表104に設定する。
図9は、第2の実施形態における経路表の構成例である。第2の実施形態における経路表管理部305により、経路表104は、図9のように設定される。複数の通信インタフェース101を介して接続する各ネットワークには、第1の実施形態とは異なり、仮想インタフェース102を介して通信を行う経路情報が設定される。デフォルトゲートウェイに関する経路情報は、第1の実施形態と同様に、仮想デフォルトゲートウェイの経路情報のみが設定される。
上記のような仮想インタフェース102のIPアドレスの設定、及び経路表104の設定を行うことで、通信スタック103において、全てのパケットの送受信を、仮想インタフェース102を介して行うことが可能になる。具体的には、通信装置100が直接接続するネットワーク以外のネットワーク上にある通信装置と通信を行う場合だけでなく、複数の通信インタフェース101を介して接続するネットワーク上にある通信装置と通信を行う場合にも、仮想インタフェース102を端点としてパケットの送受信が行われるようになる。
通信装置100上で動作する任意の通信プログラム105が、通信装置100が直接接続するネットワーク以外のネットワーク上にある通信装置と通信を行う場合、通信スタック103上で経路制御が行われた後、パケット転送部200が通信プログラム105から送信されたパケットを仮想インタフェース102から受信する時点では、パケットの送信元MACアドレスは、仮想インタフェース102に設定される仮想MACアドレスに、パケットの送信先MACアドレスは、仮想デフォルトゲートウェイのMACアドレスに、パケットの送信元IPアドレスは、仮想インタフェース102に設定される仮想IPアドレスに、パケットの送信先IPアドレスは、送信先の通信装置のIPアドレスになる。
一方、通信装置100上で動作する任意の通信プログラム105が、複数の通信インタフェース101を介して接続するネットワーク上にある通信装置と通信を行う場合、通信スタック103上で経路制御が行われた後、パケット転送部200が通信プログラム105から送信されたパケットを仮想インタフェース102から受信する時点では、パケットの送信元MACアドレスは、仮想インタフェース102に設定される仮想MACアドレスに、パケットの送信先MACアドレスは、送信先である通信装置のMACアドレスに、パケットの送信元IPアドレスは、アドレス情報管理部304により仮想インタフェース102に設定される、送信先の通信装置が存在するネットワークに接続する通信インタフェースのIPアドレスに、パケットの送信先IPアドレスは、送信先の通信装置のIPアドレスになる。
第2の実施形態におけるパケット転送ルール生成部306におけるパケット転送ルールの生成方法について説明する。図10は、第2の実施形態における転送制御部がパケット転送ルールを生成する処理の例を示すフローチャートである。
パケット転送ルール生成部306は、新規フロー検出通知を受信したとき、新規フロー検出通知に含まれるフロー情報を参照し、フロー情報に含まれる受信ポート番号に基づき、パケットを受信した通信インタフェースを特定する。そして、パケットを受信した通信インタフェースのアドレス情報、及び仮想インタフェース102のアドレス情報を、アドレス情報管理部304を通じて取得する(ステップS301)。なお、パケットを受信した通信インタフェースは、複数の通信インタフェース101及び仮想インタフェース102のうちのいずれかの通信インタフェースである。
次に、パケット転送ルール生成部306は、新規フロー検出通知に含まれるフロー情報を参照し、受信したパケットの送信元IPアドレスを特定する。パケットを受信した通信インタフェースのアドレス情報に含まれるサブネットマスクに基づき、特定した送信元IPアドレスから求めたネットワークアドレスと、仮想インタフェース102に設定される複数の通信インタフェース101の各通信インタフェースのIPアドレスから求めたネットワークアドレスのうちのいずれかとが等しいか否か判定する(ステップS302)。すなわち、受信したパケットの送信元IPアドレスに基づき、そのパケットが、パケットを受信した通信インタフェースを介して接続するネットワーク上にある通信装置から送信されたパケットか否かを判定する。
特定した送信元IPアドレスから求めたネットワークアドレスと、仮想インタフェース102に設定される、複数の通信インタフェース101の各通信インタフェースのIPアドレスから求めたネットワークアドレスのうちのいずれかとが等しくない場合(ステップS302におけるNo)、パケットを受信した通信インタフェースを介して接続するネットワーク上にある通信装置ではなく、通信装置100が直接接続するネットワーク以外のネットワーク上にある通信装置から送信されたパケットであると判断できる。
通信装置100が直接接続するネットワーク以外のネットワーク上にある通信装置と通信を行う場合、第1の実施形態と同様に、仮想インタフェース102に設定される仮想デフォルトゲートウェイのみが経路表104に設定されるため、通信スタック103の経路制御により、仮想インタフェース102からパケットが送信される。ゆえに、通信装置100が直接接続するネットワーク以外のネットワーク上にある通信装置からパケットを受信する場合は、仮想インタフェース102でパケットが受信されるようにする対応が必要である。
そこで、特定した送信元IPアドレスから求めたネットワークアドレスと、仮想インタフェース102に設定される複数の通信インタフェース101の各通信インタフェースのIPアドレスから求めたネットワークアドレスのうちのいずれかとが等しくない場合、パケット転送ルール生成部306は、新規フロー検出通知に含まれるフロー情報と、送信先IPアドレスを仮想インタフェース102に設定される仮想IPアドレスに書き換えるアクション(ステップS303)、送信先MACアドレスを仮想インタフェース102に設定される仮想MACアドレスに書き換えるアクション(ステップS304)、及び受信したパケットを仮想インタフェース102に送信するアクション(ステップS305)から成るアクション情報とを含むパケット転送ルールを生成する。
そのようなパケット転送ルールに基づくパケット転送により、パケット転送部200が受信したパケットは、仮想インタフェース102で受信されるようになる。
特定した送信元IPアドレスから求めたネットワークアドレスと、仮想インタフェース102に設定される複数の通信インタフェース101の各通信インタフェースのIPアドレスから求めたネットワークアドレスのうちのいずれかとが等しい場合(ステップS302におけるYes)、特定した送信元IPアドレスが、仮想インタフェース102に設定される複数の通信インタフェース101の各通信インタフェースのIPアドレスのうちのいずれかと等しいか否か判定する(ステップS306)。
特定した送信元IPアドレスが、仮想インタフェース102に設定される複数の通信インタフェース101の各通信インタフェースのIPアドレスのうちのいずれかと等しくない場合(ステップS306におけるNo)、パケットを受信した通信インタフェースを介して接続するネットワーク上にある通信装置から送信されたパケットであると判断できる。一方、特定した送信元IPアドレスが、仮想インタフェース102に設定される複数の通信インタフェース101の各通信インタフェースのIPアドレスのうちのいずれかと等しい場合(ステップS306におけるYes)、通信プログラム105が送信したパケットであると判断できる。
特定した送信元IPアドレスが、仮想インタフェース102に設定される複数の通信インタフェース101の各通信インタフェースのIPアドレスのうちのいずれかと等しくない場合(ステップS306におけるNo)、第2の実施形態における通信装置100においては、仮想インタフェース102を端点としてパケットの送受信を行う必要があることから、仮想インタフェース102でパケットが受信されるようにする対応が必要である。
そこで、パケット転送ルール生成部306は、新規フロー検出通知に含まれるフロー情報と、送信先MACアドレスを仮想インタフェース102に設定される仮想MACアドレスに書き換えるアクション(ステップS304)、及び受信したパケットを仮想インタフェース102に送信するアクション(ステップS305)から成るアクション情報とを含むパケット転送ルールを生成する。
そのようなパケット転送ルールに基づくパケット転送により、パケット転送部200が受信したパケットは、仮想インタフェース102で受信されるようになる。
特定した送信元IPアドレスが、仮想インタフェース102に設定される複数の通信インタフェース101の各通信インタフェースのIPアドレスのうちのいずれかと等しい場合(ステップS306におけるYes)、新規フロー検出通知に含まれるフロー情報に基づき、受信したパケットの送信先MACアドレスを特定する。そして、特定した送信元MACアドレスと、仮想インタフェース102に設定される仮想デフォルトゲートウェイのMACアドレスとが等しいか否か判定する(ステップS307)。
特定した送信元MACアドレスと、仮想デフォルトゲートウェイのMACアドレスとが等しい場合(ステップS307におけるYes)、通信プログラム105が、通信装置100が直接接続するネットワーク以外のネットワーク上にある通信装置に、仮想デフォルトゲートウェイを使用して送信するパケットであると判断できる。一方、特定した送信元MACアドレスと、仮想デフォルトゲートウェイのMACアドレスとが等しくない場合(ステップS307におけるNo)、通信プログラム105が、複数の通信インタフェース101のうちのいずれかの通信インタフェースを介して接続するネットワーク上にある通信装置に送信するパケットであると判断できる。
特定した送信元MACアドレスと、仮想デフォルトゲートウェイのMACアドレスとが等しい場合(ステップS307におけるYes)、パケット転送ルール生成部306は、新規フロー検出通知に含まれるフロー情報に基づき、受信したパケットのフローに適合するフロー情報を含む使用インタフェース情報を、使用インタフェース情報管理部302を通じて取得する。そして、取得した使用インタフェース情報に含まれる複数の通信インタフェース101のうちのいずれかを一意に特定可能な情報に基づき、通信に使用する通信インタフェースを特定する(ステップS308)。なお、通信に使用する通信インタフェースは、複数の通信インタフェース101のうちのいずれかの通信インタフェースである。
加えて、特定した通信に使用する通信インタフェースのアドレス情報を、アドレス情報管理部304を通じて取得する(ステップS309)。
そして、仮想デフォルトゲートウェイが送信先であるパケットを、通信に使用する通信インタフェースを介して接続するネットワーク上のデフォルトゲートウェイに転送されるようにするために、パケット転送ルール生成部306は、新規フロー検出通知に含まれるフロー情報と、送信元MACアドレスを通信に使用する通信インタフェースに設定されたMACアドレスに、送信元IPアドレスを通信に使用する通信インタフェースに設定されたIPアドレスに書き換えるアクション(ステップS310)、送信先MACアドレスを通信に使用する通信インタフェースに設定されるデフォルトゲートウェイのMACアドレスに書き換えるアクション(ステップS311)、及び受信したパケットを通信に使用する通信インタフェースに送信するアクション(ステップS312)から成るアクション情報とを含むパケット転送ルールを生成する。
そのようなパケット転送ルールに基づくパケット転送により、パケット転送部200が受信したパケットは、通信に使用する通信インタフェースを介して接続するネットワーク上のデフォルトゲートウェイに送信されるようになる。
特定した送信元MACアドレスと、仮想デフォルトゲートウェイのMACアドレスとが等しくない場合(ステップS307におけるNo)、通信プログラム105が、複数の通信インタフェース101のうちのいずれかの通信インタフェースを介して接続するネットワーク上にある通信装置に送信するパケットであると判断できる。第1の実施形態においては、通信スタック103は、複数の通信インタフェース101を直接使用してパケットの送受信を行うことが可能なため、複数の通信インタフェース101を介して接続するネットワーク上にある通信装置と通信を行う場合、パケットを受信した通信インタフェースから送信先の通信装置にパケットを送信すれば良い。しかし、第2の実施形態のように、仮想インタフェース102を端点としてパケットの送受信を行う場合、通信プログラム105から送信されたパケットは、送信先の通信装置が、通信端末100が直接接続するネットワーク以外のネットワーク上にある通信装置か、複数の通信インタフェース101を介して接続するネットワーク上にある通信装置かによらず、パケット転送部200は、仮想インタフェース102から送信されたパケットを受信する。すなわち、複数の通信インタフェース101を介して接続するネットワーク上にある通信装置と通信を行う場合にも、通信に使用する通信インタフェースを特定する必要がある。
第2の実施形態においては、複数の通信インタフェース101の各通信インタフェースのIPアドレスを、仮想インタフェース102に設定したこと、及び複数の通信インタフェース101を介して接続する各ネットワークには、仮想インタフェース102を介して通信を行う経路情報を経路表104に設定したことにより、通信スタック103上で経路制御が行われた後、パケット転送部200がパケットを受信する時点では、パケットの送信元IPアドレスは、送信先の通信装置が存在するネットワークに接続する通信インタフェースのIPアドレスになる。ゆえに、パケットの送信元IPアドレスに基づき、通信に使用する通信インタフェースを特定することができる。
特定した送信元MACアドレスと、仮想デフォルトゲートウェイのMACアドレスとが等しくない場合、パケット転送ルール生成部306は、複数の通信インタフェース101の各通信インタフェースのアドレス情報を、アドレス情報管理部304を通じて取得する(ステップS313)。
そして、特定した送信元IPアドレスに基づき、特定した送信元IPアドレスと、設定されるIPアドレスとが等しい、複数の通信インタフェース101のうちのいずれかの通信インタフェースを、通信に使用する通信インタフェースとして特定する(ステップS314)。
特定した通信に使用する通信インタフェースに基づき、パケット転送ルール生成部306は、新規フロー検出通知に含まれるフロー情報と、送信元MACアドレスを通信に使用する通信インタフェースに設定されるMACアドレスに書き換えるアクション(ステップS315)、及び受信したパケットを通信に使用する通信インタフェースに送信するアクション(ステップS316)から成るアクション情報とを含むパケット転送ルールを生成する。
そのようなパケット転送ルールに基づくパケット転送により、パケット転送部200が受信したパケットは、送信先の通信装置が存在するネットワークに接続する通信インタフェースから送信先の通信装置に送信されるようになる。
第2の実施形態における通信スタック103は、第1の実施形態と同様に、パケットの送信に先んじて、送信先の通信装置のIPアドレスに基づき、送信先のMACアドレスを得るためのアドレス解決を行う。しかし、第2の実施形態における通信装置100は、第1の実施形態とは異なり、仮想インタフェース102を端点としてパケットの送受信を行うため、複数の通信インタフェース101の各通信インタフェース上で直接アドレス解決を行うことができない。そのため、通常のアドレス解決方法では、送信先のMACアドレスを得ることだけでなく、他の通信装置からの複数の通信インタフェース101の各通信インタフェースに対するアドレス解決要求に対応することもできない。
そこで、第2の実施形態における転送制御部300は、第2の実施形態における通信装置100においてアドレス解決を可能にするための処理を行う。図11は、第2の実施形態における転送制御部のアドレス解決処理の例を示すフローチャートである。
パケット転送部200がアドレス解決パケットを受信したとき、パケット転送部200は、アドレス解決パケットのフローに対する新規フロー検出通知を転送制御部300に送信する(ステップS401)。第2の実施形態における転送制御部のアドレス解決処理においては、アドレス解決パケットを受信したときに、パケット転送部200から新規フロー検出通知が送信されるようにするため、アドレス解決パケットのフローに対するパケット転送ルールは、パケット転送部200に設定しない。なお、アドレス解決パケットのフローに対する新規フロー検出通知には、アドレス解決パケットそのものが含まれているものとする。
転送制御部300は、アドレス解決パケットのフローに対する新規フロー検出通知を受信したとき、複数の通信インタフェース101の各通信インタフェースのアドレス情報、及び仮想インタフェース102のアドレス情報を、アドレス情報管理部304を通じて取得する(ステップS402)。そして、アドレス解決パケットの内容を参照し、受信したアドレス解決パケットが、アドレス解決要求パケットなのか、アドレス解決応答パケットなのか判定する(ステップS403)。
受信したアドレス解決パケットが、アドレス解決要求パケットであった場合(ステップS403における要求)、アドレス解決要求パケットに含まれる要求先IPアドレスを参照し、要求先IPアドレスと、複数の通信インタフェース101のうちのいずれかの通信インタフェースのIPアドレスとが等しいか否かに基づき、受信したアドレス解決要求パケットが、複数の通信インタフェース101の各通信インタフェースに対して要求を行うアドレス解決要求パケットなのか否か判定する(ステップS404)。
複数の通信インタフェース101の各通信インタフェースに対して要求を行うアドレス解決要求パケットであった場合(ステップS404におけるYes)、アドレス解決要求パケットを受信した通信インタフェースのMACアドレスを含むアドレス解決応答パケットを生成する。その理由は、受信したアドレス解決要求パケットを仮想インタフェース102に転送し、通信スタック103のアドレス解決処理によりアドレス解決応答パケットを生成する場合、アドレス解決要求パケットを受信した通信インタフェースのMACアドレスではなく、仮想インタフェース102に設定される仮想MACアドレスがアドレス解決応答パケットに含まれてしまうためである。
転送制御部300は、アドレス解決要求パケットを受信した通信インタフェースのMACアドレスを含むアドレス解決応答パケットを生成し(ステップS405)、パケットを受信した通信インタフェースから生成したパケットを要求元の通信装置に送信する(ステップS406)。
アドレス解決要求パケットを受信した通信インタフェースのMACアドレスを含むアドレス解決応答パケットを生成し、パケットを受信した通信インタフェースから要求元の通信装置に送信することで、他の通信装置からのアドレス解決要求に対応することができる。
また、上記のような処理を行うことで、他の通信装置から送信されたアドレス解決要求パケットが仮想インタフェース102に転送されることはないため、仮想インタフェース102から他の通信装置に対するアドレス解決応答パケットが送信されることはないと言える。
受信したアドレス解決要求パケットが、複数の通信インタフェース101の各通信インタフェースに対して要求を行うアドレス解決要求パケットでない場合(ステップS404におけるNo)、仮想インタフェース102を介して通信スタック103が他の通信装置に送信したアドレス解決要求パケットであると判断できる。なお、アドレス解決要求パケットを受信した通信インタフェースが、仮想インタフェース102以外である場合、通信装置100に関係しないアドレス解決要求パケットであると判断できるので、受信したパケットを廃棄する(図示せず)。
受信したアドレス解決要求パケットが、複数の通信インタフェース101の各通信インタフェースに対して要求を行うアドレス解決要求パケットでない場合、転送制御部300は、アドレス解決要求パケットに含まれる要求先IPアドレスと、仮想デフォルトゲートウェイのMACアドレスとが等しいか否かに基づき、受信したアドレス解決要求パケットが、仮想デフォルトゲートウェイに対して要求を行うアドレス解決要求パケットなのか否か判定する(ステップS407)。
受信したアドレス解決要求パケットが、仮想デフォルトゲートウェイに対して要求を行うアドレス解決要求パケットであった場合(ステップS407におけるYes)、第1の実施形態と同様に、各通信インタフェースに設定されるデフォルトゲートウェイに対するアドレス解決要求を行う。一方、受信したアドレス解決要求パケットが、仮想デフォルトゲートウェイに対して要求を行うアドレス解決要求パケットでない場合(ステップS407におけるNo)、仮想インタフェース102を介して通信スタック103が、複数の通信インタフェース101を介して接続するネットワーク上にある通信装置に送信したアドレス解決要求パケットであると判断できる。
受信したアドレス解決要求パケットが、仮想デフォルトゲートウェイに対して要求を行うアドレス解決要求パケットであった場合(ステップS407におけるYes)、転送制御部300は、各通信インタフェースに設定されるデフォルトゲートウェイに対するアドレス解決要求パケットを生成し(ステップS408)、生成したパケットを各通信インタフェースから送信する指示と共に、パケット転送部200に送信する(ステップS409)。パケット転送部200は、その指示に従い、各デフォルトゲートウェイに対するアドレス解決要求のパケットを送信する。
パケット転送部200から各デフォルトゲートウェイに対するアドレス解決要求を送信することで、各デフォルトゲートウェイから、各デフォルトゲートウェイのMACアドレスを含むアドレス解決応答パケットが送信される。
受信したアドレス解決要求パケットが、仮想デフォルトゲートウェイに対して要求を行うアドレス解決要求パケットでない場合(ステップS407におけるNo)、受信したアドレス解決要求パケットは、仮想インタフェース102を介して通信スタック103が、複数の通信インタフェース101のうちのいずれかの通信インタフェースを介して接続するネットワーク上にある通信装置に送信したアドレス解決要求パケットであるため、アドレス解決要求パケットがその通信装置に送信されるようにする対応が必要である。
第2の実施形態においては、複数の通信インタフェース101の各通信インタフェースのIPアドレスを、仮想インタフェース102に設定したこと、及び複数の通信インタフェース101を介して接続する各ネットワークには、仮想インタフェース102を介して通信を行う経路情報を経路表104に設定したことにより、仮想インタフェース102を介して通信スタック103が送信するアドレス解決要求パケットに含まれる要求元IPアドレスは、MACアドレスを得ようとする通信装置が存在するネットワークに接続する複数の通信インタフェース101のうちのいずれかの通信インタフェースのIPアドレスになる。ゆえに、要求元IPアドレスに基づき、通信に使用する通信インタフェースを特定することができる。
受信したアドレス解決要求パケットが、仮想デフォルトゲートウェイに対して要求を行うアドレス解決要求パケットでない場合、転送制御部300は、アドレス解決要求パケットに含まれる要求元IPアドレスと、設定されるIPアドレスとが等しい、複数の通信インタフェース101のうちのいずれかの通信インタフェースを、通信に使用する通信インタフェースとして特定する(ステップS410)。
特定した通信に使用する通信インタフェースに基づき、受信したアドレス解決要求パケットに含まれる送信元MACアドレス及び要求元MACアドレスを、通信に使用する通信インタフェースのMACアドレスに書き換え(ステップS411)、送信元MACアドレス及び要求元MACアドレスを書き換えたアドレス解決要求パケットを、通信に使用する通信インタフェースから送信する(ステップS412)。
要求元IPアドレスに基づき、通信に使用する通信インタフェースを特定し、送信元MACアドレス及び要求元MACアドレスを通信に使用する通信インタフェースのMACアドレスに書き換え、通信に使用する通信インタフェースから送信することで、アドレス解決要求パケットは、複数の通信インタフェース101のうちのいずれかの通信インタフェースを介して接続するネットワーク上にある通信装置に送信されるようになる。
受信したアドレス解決パケットが、アドレス解決応答パケットであった場合(ステップS403における応答)、アドレス解決応答パケットに含まれる応答先IPアドレスを参照し、応答先IPアドレスと、複数の通信インタフェース101のうちのいずれかの通信インタフェースのIPアドレスとが等しいか否かに基づき、受信したアドレス解決応答パケットが、複数の通信インタフェース101の各通信インタフェースに対する応答であるアドレス解決応答パケットなのか否か判定する(ステップS413)。
受信したアドレス解決応答パケットが、複数の通信インタフェース101の各通信インタフェースに対する応答であるアドレス解決応答パケットでない場合(ステップS413におけるNo)、アドレス解決応答パケットを受信した通信インタフェースが、仮想インタフェース102以外である場合、通信装置100に関係しないアドレス解決要求パケットであると判断できるので、受信したパケットを廃棄する(S414)。
他の通信装置からアドレス解決要求パケットを受信したとき、パケットを受信した通信インタフェースのMACアドレスを含むアドレス解決応答パケットを生成し、要求元の通信装置に送信することにより、他の通信装置から送信されたアドレス解決要求パケットが仮想インタフェース102に転送されることはないため、仮想インタフェース102から他の通信装置に対するアドレス解決応答パケットが送信されることはない。そのため、仮想インタフェース102から送信されるアドレス解決応答パケットについては、考慮しなくても良い。
受信したアドレス解決応答パケットが、複数の通信インタフェース101の各通信インタフェースに対する応答であるアドレス解決応答パケットであった場合(ステップS413におけるYes)、アドレス解決応答パケットに含まれる応答元IPアドレスと、各通信インタフェースに設定されるデフォルトゲートウェイのMACアドレスとが等しいか否かに基づき、受信したアドレス解決応答パケットが、各通信インタフェースに設定されるデフォルトゲートウェイからの応答であるアドレス解決応答パケットなのか否か判定する(ステップS415)。
受信したアドレス解決応答パケットが、各デフォルトゲートウェイからの応答であるアドレス解決応答パケットであった場合(ステップS415におけるYes)、第1の実施形態と同様に、各デフォルトゲートウェイのMACアドレスの記憶、及び仮想デフォルトゲートウェイに関するアドレス解決応答を行う。
各デフォルトゲートウェイからの応答であるアドレス解決応答パケットに含まれる応答元MACアドレスにより、各デフォルトゲートウェイのMACアドレスが取得できる。取得した各デフォルトゲートウェイのMACアドレスは、アドレス情報管理部304を通じて記憶する(ステップS416)。そして、全てのデフォルトゲートウェイのMACアドレスを取得できたか否か判定し(ステップS417)、全て取得できた時点で(ステップS417におけるYes)、転送制御部300は、仮想デフォルトゲートウェイの仮想MACアドレスを含むアドレス解決応答パケットを生成し(ステップS418)、生成したパケットを仮想インタフェース102から送信する指示と共に、パケット転送部200に送信する(ステップS419)。パケット転送部200は、その指示に従い、仮想デフォルトゲートウェイの仮想MACアドレスを含むアドレス解決応答パケットを送信する。
全てのデフォルトゲートウェイのMACアドレスを取得できた時点で、仮想デフォルトゲートウェイの仮想MACアドレスを含むアドレス解決応答パケットを生成し、仮想インタフェース102に送信することで、通信スタック103がパケットを送信するために必要な仮想デフォルトゲートウェイのMACアドレス、及び、パケット転送ルール生成部306がパケット転送ルールを生成するために必要な通信に使用する通信インタフェースに設定されるデフォルトゲートウェイのMACアドレスを得ることができる。
受信したアドレス解決応答パケットが、各デフォルトゲートウェイからの応答であるアドレス解決応答パケットでない場合(ステップS415におけるNo)、仮想インタフェース102を介して通信スタック103が送信し、要求先の送信装置に転送されるアドレス解決要求パケットに対する応答として、要求先の送信装置から送信されたアドレス解決応答パケットであると言える。そのアドレス解決応答パケットに含まれる応答先IPアドレスは、要求先の送信装置にアドレス解決要求パケットを送信する際に使用した複数の通信インタフェース101のうちのいずれかの通信インタフェースのIPアドレスになる。通信スタック103は、仮想インタフェース102を介してアドレス解決要求パケットを送信するため、仮想インタフェース102でアドレス解決応答パケットが受信されるようにする対応が必要である。
その場合、受信したアドレス解決応答パケットに含まれる送信先MACアドレス及び応答先MACアドレスを、仮想インタフェース102のMACアドレスに書き換え(ステップS420)、送信先MACアドレス及び応答先MACアドレスを書き換えたアドレス解決応答パケットを、仮想インタフェース102から送信する(ステップS421)。
受信したアドレス解決応答パケットに含まれる送信先MACアドレス及び応答先MACアドレスを仮想インタフェース102のMACアドレスに書き換え、仮想インタフェース102から送信することで、仮想インタフェース102上で、複数の通信インタフェース101を介して接続するネットワーク上にある送信装置のMACアドレスを得るためのアドレス解決を行うことができる。
(実施形態3)
第1、第2の実施形態においては、ユーザ又は任意のプログラムが、使用インタフェース情報管理部302を通じて使用インタフェース情報記憶部301に、フロー毎の使用インタフェース情報を設定するが、同一のフローに対して、異なる複数の通信インタフェースを使用して通信を行うように、フロー毎に複数の使用インタフェース情報を設定しても良い。
図12は、第3の実施形態における使用インタフェース情報記憶部に記憶される使用インタフェース情報の構成例である。使用インタフェース情報記憶部302上に、同一のフロー情報と、それぞれが異なる通信インタフェースを指す複数の通信インタフェース101のうちのいずれかを一意に特定可能な情報とを含む使用インタフェース情報が複数存在する場合、フロー情報だけでは通信に使用する通信インタフェースを特定することはできない。そこで、通信に使用する通信インタフェースを特定するためのパラメータとして、いくつかの情報を使用インタフェース情報に含める。図12の構成例では、使用インタフェース情報は、通信に使用する通信インタフェースを特定するためのパラメータとして、各使用インタフェース情報の優先度と、通信インタフェースが通信可能な状態にあるか否かを示す通信可否と、受信電界強度の閾値と、送受信するパケット数の上限とを含む。
第3の実施形態における転送制御部300のパケット転送ルール生成部306が行うパケット転送ルール生成処理において、パケット転送ルール生成部306は、フロー情報、及び通信に使用する通信インタフェースを特定するためのパラメータにより、複数の使用インタフェース情報のうち、どの使用インタフェース情報に基づきパケット転送ルールを生成するか選択する。例えば、通信可能な通信インタフェースのうち優先度の値が最も小さい通信インタフェースを使用する、受信電界強度の値が閾値より大きい無線インタフェースを使用する、送受信したパケット数を記憶しておき、パケット数が上限に達した通信インタフェースは使用しない等、いくつかのパラメータの組み合せに従って、使用インタフェース情報を選択することで、任意の要求又は条件に合う通信インタフェースを、動的に選択して通信を行うことができる。
以上、本発明の実施の形態を例示により説明したが、本発明はこれに限定されるものではなく、請求項に記載された範囲において、目的に応じて変更、変形することが可能である。