以下、本発明の実施形態について図面を参照して説明する。
(第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は、受信したパケットの転送を行うが、具体的には、パケット転送ルールに基づき、受信したパケットに対して任意の処理を行う。パケット転送ルールは、パケットを受信した際のパケット転送部200の動作を定める情報であり、転送制御部300によって設定される。
パケット転送ルールは、フローを識別可能な情報であるフロー情報と、フロー情報に適合するフローのパケットに対して実行する処理の内容を定める情報であるアクション情報とを含む。パケット転送ルールは、少なくとも、フロー情報と、アクション情報とを含むが、更に他の情報を含んでいてもよい。
フロー情報は、例えば、送信元MACアドレス、送信先MACアドレス、Ethernet(登録商標)フレームタイプ、送信元IPアドレス、送信先IPアドレス、送信元ポート番号、送信先ポート番号、どの通信インタフェースからパケットを受信したのかを定める情報である受信ポート番号等を含むが、フロー情報は、これらに限定されず、更に他の情報を含んでいてもよい。アクション情報の内容として、例えば、パケットを任意の通信インタフェースに送信する、パケットを通信スタックに送信する、パケットに含まれる任意のアドレスや識別子を任意の値に書き換える、パケットを廃棄する等が挙げられるが、アクション情報の内容は、これらに限定されない。
通信インタフェースは、任意のネットワークに接続して通信を可能にする機能を提供するインタフェースを指す。本発明の実施形態において、通信インタフェースの種類は、特に限定されず、Ethernet(登録商標)等の有線インタフェース、無線LAN等の無線インタフェース、又は任意の方法により生成される仮想インタフェースであってよい。仮想インタフェースの例として、例えば、トンネルインタフェース、複数の通信インタフェースを仮想的に束ねる方法であるリンクアグリゲーションによって生成される論理インタフェース等が挙げられる。また、通信インタフェースの数も特に限定されず、1つ以上であれば良い。更に、複数の通信インタフェース101は、全て同じ種類の通信インタフェースでもよく、異なる種類の通信インタフェースが混在していてもよい。
なお、本発明の実施形態における通信装置100が備える複数の通信インタフェース101は、1つ以上、かつ任意の種類の通信インタフェースから成る。便宜上、本発明の実施形態においては、複数の通信インタフェース101を介して接続するネットワークは、各々が異なるネットワークであるとして説明するが、複数の通信インタフェース101のうちの1つ以上の通信インタフェースが同一のネットワークに接続する構成であってもよい。
図2は、本発明の実施形態におけるパケット転送部の構成例を示すブロック図である。パケット転送部200は、パケット転送ルール記憶部201と、パケット転送ルール管理部202と、フロー識別部203と、アクション実行部204とを備える。
本発明の実施形態における複数の通信インタフェース101は、パケット転送部200に接続される。具体的には、パケット転送部200のポートとして、複数の通信インタフェース101の各通信インタフェースが、パケット転送部200に登録される。この構成によって、パケット転送部200は、複数の通信インタフェース101の各通信インタフェースを介してパケット転送を行うことができる。
パケット転送ルール記憶部201は、パケット転送ルールを記憶する。フロー毎に異なるパケット転送ルールが設定されるため、パケット転送ルール記憶部201には1つ以上のパケット転送ルールが記憶される。パケット転送ルール記憶部201に記憶されるパケット転送ルールの集合をパケット転送ルールテーブルと記す。
パケット転送ルール管理部202は、パケット転送ルールを管理する。転送制御部300は、パケット転送部200にパケット転送ルールを設定する際、パケット転送ルールと共に設定指示を送信する。設定指示は、具体的には、パケット転送ルールの追加、変更、及び削除のいずれを行うのかを定める情報である。パケット転送ルール管理部202は、転送制御部300から受信したパケット転送ルールを、設定指示に応じてパケット転送ルール記憶部201に記憶させる。
パケット転送ルールは、フロー情報及びアクション情報の他に、パケット転送ルールの有効期間を定める情報であるタイマ値を含む。パケット転送ルール管理部202は、各々のパケット転送ルールに指定されたタイマ値を時間経過と共に減少させる。そして、タイマ値が0になったパケット転送ルールを、パケット転送ルール記憶部201から削除する。パケット転送ルールに含まれるフロー情報に適合するフローのパケットを受信した際には、パケット転送ルール管理部202は、そのパケット転送ルールのタイマ値を初期値にリセットする。
フロー識別部203は、パケットを受信した際、受信したパケットに含まれる任意のアドレスや識別子からフロー情報を生成する。生成したフロー情報に基づき、受信したパケットのフローに適合するフロー情報を含むパケット転送ルールが、パケット転送ルール記憶部201に記憶されているパケット転送ルールテーブル上に存在するか検索する。
アクション実行部204は、パケット転送ルールに含まれるアクション情報の内容に基づき、受信したパケットに対して任意の処理を実行する。
次に、パケット転送部200の動作について説明する。図3は、パケット転送部がパケットを受信した際の処理の例を示すフローチャートである。パケット転送部200が、複数の通信インタフェース101のうちのいずれかの通信インタフェースからパケットを受信すると(ステップ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の実施形態における通信に係る要素に着目したより詳細な通信装置の構成例を示すブロック図である。第1の実施形態における通信装置100は、複数の通信インタフェース101及び仮想インタフェース102を備える。複数の通信インタフェース101及び仮想インタフェース102は、通信装置100の通信スタック103、及びパケット転送部200に接続される。仮想インタフェース102は、複数の通信インタフェース101を介して接続するネットワークのうちのいずれにも接続しない通信インタフェースである。換言すれば、仮想インタフェース102は、通信装置100内部に存在する仮想ネットワークに接続するための通信インタフェースである。
本発明の実施形態における複数の通信インタフェース101及び仮想インタフェース102は、通信スタック103に接続される。具体的には、複数の通信インタフェース101の各通信インタフェース、及び仮想インタフェース102を介して接続するネットワーク上の通信装置にパケットを送信するための経路情報、すなわち、出力インタフェースが各々の通信インタフェースである経路情報が経路表上に設定される。そのような経路情報が設定された経路表に基づき、通信スタック103が行う経路制御によって各々の通信インタフェースを介してパケットを送信することができる。
図4に示すような構成により、パケット転送部200は、通信装置100上で動作する通信プログラム105、又は他の通信装置から送信されたパケットを、複数の通信インタフェース101及び仮想インタフェース102のうちのいずれかの通信インタフェースから受信できる。
なお、本発明の実施形態における通信装置100上で動作する通信プログラム105は、IP通信を行う任意のプログラムを指す。通信プログラムの種類、通信に使用するプロトコル、通信の内容等は、特に限定されない。また、その数も特に限定されず、1つ以上の通信プログラムが動作してもよい。
パケット転送部200と転送制御部300とは、任意の方法によって接続される。例えば、UNIX(登録商標)ドメインソケット通信、TCP(Transmission Control Protocol)通信又はSSL(Secure Socket Layer)通信によって接続される。
転送制御部300は、図5に示すように、使用インタフェース情報記憶部301と、使用インタフェース情報管理部302と、アドレス情報記憶部303と、アドレス情報管理部304と、経路表管理部305と、パケット転送ルール生成部306と、パケット転送部管理部307とを備える。
使用インタフェース情報は、フロー毎に複数の通信インタフェース101のうちのどの通信インタフェースを使用して通信を行うのかを定める情報であって、フローを識別可能な情報であるフロー情報と、複数の通信インタフェース101のうちのいずれかを一意に特定可能な情報とを含む。使用インタフェース情報は、少なくとも、フロー情報と、複数の通信インタフェース101のうちのいずれかを一意に特定可能な情報とを含むが、更に他の情報を含んでいてもよい。
使用インタフェース情報に含まれるフロー情報は、それに含まれる情報の値に、ワイルドカードを含んでいてもよい。複数の通信インタフェース101のうちのいずれかを一意に特定可能な情報は、例えば、インタフェース名、ポート番号等である。
使用インタフェース情報記憶部301は、使用インタフェース情報を記憶する。フロー毎に異なる使用インタフェース情報が設定されるため、使用インタフェース情報記憶部301には1つ以上の使用インタフェース情報が記憶される。
使用インタフェース情報管理部302は、使用インタフェース情報を管理すると共に、任意のタイミングで使用インタフェース情報を設定可能にする機能を、ユーザ又は任意のプログラムに対して提供する。ユーザ又は任意のプログラムは、使用インタフェース情報管理部302に使用インタフェース情報を設定する際、使用インタフェース情報と共に設定指示を与える。設定指示は、具体的には、使用インタフェース情報の追加、変更、及び削除のいずれを行うのかを定める情報である。使用インタフェース情報管理部302は、ユーザ又は任意のプログラムから与えられた使用インタフェース情報を、設定指示に応じて使用インタフェース情報301に記憶させる。
使用インタフェース情報管理部302がユーザ又は任意のプログラムに対して提供する使用インタフェース情報を設定可能にする機能は、例えば、設定を行うためのグラフィカルユーザインタフェース、任意のプログラムから利用可能な任意のAPI(Application Programming Interface)等である。
アドレス情報記憶部303は、複数の通信インタフェース101及び仮想インタフェース102がパケットの送受信を行うために必要な情報であるアドレス情報を記憶する。アドレス情報は、通信インタフェース毎に設定されるため、アドレス情報記憶部303には1つ以上のアドレス情報が記憶される。
アドレス情報は、例えば、MACアドレス、IPアドレス、サブネットマスク、通信インタフェースを介して接続するネットワーク上のデフォルトゲートウェイのMACアドレス及びIPアドレス、パケット転送部200に接続する通信インタフェースを識別するためにパケット転送部200が割り当てるポート番号等を含むが、アドレス情報は、これらに限定されず、更に他の情報を含んでいてもよい。なお、アドレス情報は、任意の方法によって通信インタフェース毎に設定される。アドレス情報を設定する任意の方法は、例えば、ユーザ又は任意のプログラムによる固定設定、DHCP(Dynamic Host Configuration Protocol)、IPCP(Internet Protocol Control Protocol)等である。
仮想インタフェース102には、複数の通信インタフェース101の各通信インタフェースと同様にアドレス情報が設定されるが、そのアドレス情報は、任意の値から成る仮想のアドレス情報である。具体的には、仮想インタフェース102のアドレス情報は、少なくとも、仮想MACアドレスと、仮想IPアドレスと、仮想インタフェース102を介して接続する通信装置100内部の仮想ネットワーク上のデフォルトゲートウェイである仮想デフォルトゲートウェイのMACアドレス及びIPアドレスとを含む。
アドレス情報管理部304は、複数の通信インタフェース101の各通信インタフェース、及び仮想インタフェース102に設定されるアドレス情報を取得し、アドレス情報記憶部303に記憶させる。また、アドレス情報管理部304は、DHCPのリース期間切れや通信装置の移動に伴うハンドオーバーの発生等によってアドレス情報の変更が発生した際、アドレス情報の変更が発生した通信インタフェースのアドレス情報を改めて取得し、アドレス情報記憶部303に記憶させる。
経路表管理部305は、アドレス情報記憶部305に記憶されるアドレス情報に含まれる複数の通信インタフェース101の通信インタフェース毎に設定されるデフォルトゲートウェイ、及び仮想インタフェース102に設定される仮想デフォルトゲートウェイのうち、仮想デフォルトゲートウェイに関する経路情報のみを、通信スタック103が持つ経路表104に設定する。
図6は、第1の実施形態における経路表の構成例である。経路表104は、経路表管理部305によって図6のように設定される。複数の通信インタフェース101を介して接続する各ネットワークへの経路に関する経路情報として、送信先ネットワークが複数の通信インタフェース101を介して接続する各ネットワークであり、出力インタフェースが各通信インタフェースである経路情報が設定される。また、仮想インタフェース102を介して接続する仮想ネットワークへの経路に関する経路情報として、送信先ネットワークが仮想ネットワークであり、出力インタフェースが仮想インタフェースである経路情報が設定される。デフォルトゲートウェイに関する経路情報は、ネクストホップが仮想インタフェースに設定される仮想デフォルトゲートウェイである経路情報のみが設定される。
なお、経路表104に設定するデフォルトゲートウェイに関する経路情報について、仮想インタフェース102に設定される仮想デフォルトゲートウェイに関する経路情報だけでなく、更に複数の通信インタフェース101の通信インタフェース毎に設定されるデフォルトゲートウェイに関する経路情報を設定してもよい。ただし、経路表上に複数のデフォルトゲートウェイに関する経路情報が存在する場合、どの経路情報を使用して経路制御を行えばよいか分からず通信不能に陥る、意図と異なるデフォルトゲートウェイに関する経路情報を使用して経路制御が行われるといった問題が生じるため、複数の通信インタフェース101の通信インタフェース毎に設定されるデフォルトゲートウェイ及び仮想インタフェースに設定される仮想デフォルトゲートウェイに関する経路情報のうち、仮想デフォルトゲートウェイに関する経路情報を優位に設定する。
複数の通信インタフェース101の各通信インタフェースに設定されるデフォルトゲートウェイ、及び仮想インタフェース102に設定される仮想デフォルトゲートウェイのうち、仮想デフォルトゲートウェイに関する経路情報のみを経路表104に設定することで、通信プログラム105が、通信装置100が複数の通信インタフェース101を介して直接接続するネットワーク以外のネットワーク上の通信装置との通信を行う場合、通信スタック103が行う経路制御によって、通信プログラム105から送信されたパケットは、仮想デフォルトゲートウェイに送信されるようになる。具体的には、通信スタック103において経路制御が行われた後、パケット転送部200が通信プログラム105から送信されたパケットを仮想インタフェース102から受信する時点では、パケットの送信元MACアドレスは、仮想インタフェース102に設定される仮想MACアドレスになり、パケットの送信先MACアドレスは、仮想デフォルトゲートウェイのMACアドレスになり、パケットの送信元IPアドレスは、仮想インタフェース102に設定される仮想IPアドレスになり、パケットの送信先IPアドレスは、送信先の通信装置のIPアドレスになる。
一方、通信プログラム105が、複数の通信インタフェース101を介して接続するネットワーク上の通信装置との通信を行う場合、通信スタック103が行う経路制御によって、通信プログラム105から送信されるパケットは、送信先の通信装置が存在するネットワークに接続する通信インタフェースを介して送信先の通信装置に直接送信されるようになる。具体的には、通信スタック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が直接接続するネットワーク以外のネットワーク上の通信装置が送信したパケットを受信する場合、通信スタック103が仮想インタフェース102を介してパケットを受信できるようにするための対応が必要である。
そこで、特定した送信元IPアドレスから求めたネットワークアドレスと、パケットを受信した通信インタフェースに設定されるIPアドレスから求めたネットワークアドレスとが等しくない場合、パケット転送ルール生成部306は、新規フロー検出通知に含まれるフロー情報と、アクション情報とを含むパケット転送ルールを生成する。このアクション情報は、送信先MACアドレスを仮想インタフェース102に設定される仮想MACアドレスに書き換えるアクション、送信先IPアドレスを仮想インタフェース102に設定される仮想IPアドレスに書き換えるアクション(ステップS203)、及び受信したパケットを仮想インタフェース102に送信するアクション(ステップS204)から成る。
このようなパケット転送ルールに基づくパケット転送により、パケット転送部200が受信したパケットを、通信スタック103が仮想インタフェース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が受信したパケットを、通信スタック103がパケットを受信した通信インタフェースを介して受信できるようになる。
特定した送信元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が受信した送信先MACアドレスが仮想デフォルトゲートウェイのMACアドレスである仮想デフォルトゲートウェイに送信するパケットを、通信に使用する通信インタフェースに送信しても、通信に利用するネットワーク上に仮想デフォルトゲートウェイが存在しないため、通信装置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は、仮想デフォルトゲートウェイを介してパケットを送信する。また、パケット転送ルール生成部306は、通信スタックによって仮想デフォルトゲートウェイに送信されたパケットを、通信に使用する通信インタフェースを介して接続するネットワーク上のデフォルトゲートウェイに送信するためのパケット転送ルールを生成する。従って、仮想デフォルトゲートウェイのMACアドレスだけでなく、複数の通信インタフェース101の通信インタフェース毎に設定される各々のデフォルトゲートウェイの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アドレスを含むアドレス解決応答パケットを受信した際、具体的には、パケット転送部200が各々のデフォルトゲートウェイのMACアドレスを含むアドレス解決応答パケットを受信したことによる新規フロー検出通知を、転送制御部300が受信した際、その新規フロー検出通知に含まれるフロー情報に基づき、各々のデフォルトゲートウェイのMACアドレスを取得し、取得した各々のデフォルトゲートウェイのMACアドレスを、アドレス情報管理部304を通じてアドレス情報記憶部303に記憶する。
各々のデフォルトゲートウェイのMACアドレスを含むアドレス解決応答パケットを受信した際、パケット転送部200から新規フロー検出通知が送信されるようにするため、各々のデフォルトゲートウェイのMACアドレスを含むアドレス解決応答パケットのフローに対するパケット転送ルールは、パケット転送部200に設定しない。なお、各々のデフォルトゲートウェイから送信されるアドレス解決応答パケットのフローに対する新規フロー検出通知には、アドレス解決応答パケットそのものが含まれているものとする。
そして、全てのデフォルトゲートウェイからアドレス解決応答パケットを受信し、全てのデフォルトゲートウェイのMACアドレスが得られた時点で、予め転送制御部300に設定する任意の値から成る仮想MACアドレスである仮想デフォルトゲートウェイのMACアドレスを含むアドレス解決応答パケットを生成し、生成したパケットを仮想インタフェース102に送信する。
上記のような処理を行うことで、通信スタック103がパケットを送信するために必要な仮想デフォルトゲートウェイのMACアドレス、及びパケット転送ルール生成部306がパケット転送ルールを生成するために必要な通信に使用する通信インタフェースに設定されるデフォルトゲートウェイのMACアドレスを得ることができる。
なお、仮想デフォルトゲートウェイのMACアドレスについて、通信スタック103が持つアドレス解決テーブルに、仮想デフォルトゲートウェイのIPアドレスに対応するMACアドレスとして仮想MACアドレスを予め登録することで、通信スタック103が仮想デフォルトゲートウェイのMACアドレスを得られるようにしてもよい。更に、複数の通信インタフェース101の通信インタフェース毎に設定される各々のデフォルトゲートウェイのMACアドレスを任意の方法によって得た上で、アドレス解決テーブルに各々のデフォルトゲートウェイのIPアドレスに対応する各々のデフォルトゲートウェイのMACアドレスを予め登録しておき、アドレス情報管理部304がアドレス解決テーブルを参照することによって得た各々のデフォルトゲートウェイのMACアドレスをアドレス情報記憶部303に記憶させることで、パケット転送ルール生成部306がパケット転送ルールを生成するために必要なデフォルトゲートウェイのMACアドレスを得られるようにしてもよい。ただし、その場合、通信インタフェースのアドレス情報に変化が発生した際、アドレス解決テーブルの内容も変更しなければならない。
また、上記のアドレス解決処理において、仮想デフォルトゲートウェイに対するアドレス解決要求パケットを受信した時点で、仮想デフォルトゲートウェイのMACアドレスである仮想MACアドレス含むアドレス解決応答パケットを生成し、生成したパケットを仮想インタフェース102に送信してもよい。ただし、その場合、各々のデフォルトゲートウェイから送信されたアドレス解決応答パケットを受信し、各々のデフォルトゲートウェイのIPアドレスに対応する各々のデフォルトゲートウェイのMACアドレスが得られるまで、通信を行うことができない。
パケット転送部管理部307は、パケット転送部200の動作を制御するための任意のプロトコルによってパケット転送部200を管理する。パケット転送ルール生成部306がパケット転送ルールを生成した際、パケット転送部管理部307は、生成したパケット転送ルールを設定指示と共に、パケット転送部200に送信する。
パケット転送ルール生成部306のパケット転送ルール生成処理において、受信したパケットのフローに適合するフロー情報を含む使用インタフェース情報が、使用インタフェース情報記憶部301に存在しない場合もあり得る。その場合、複数の通信インタフェース101のうちのいずれかを、デフォルトの通信インタフェースに予め設定しておき、その通信インタフェースを通信に使用する通信インタフェースとして、パケット転送ルールを生成してもよい。また、パケットを廃棄する等の、任意のアクションを含むデフォルトのアクション情報を予め設定しておき、新規フロー検出通知に含まれるフロー情報、及びデフォルトのアクション情報に基づき、パケット転送ルールを生成してもよい。
また、受信したパケットのフローに適合するフロー情報を含む使用インタフェース情報に含まれる複数の通信インタフェース101のうちのいずれかを一意に特定可能な情報に、存在しない通信インタフェースの情報が設定されていた場合、パケットを廃棄する等の、任意のアクションを含む、そのような使用インタフェース情報に対するデフォルトのアクション情報を予め設定しておき、新規フロー検出通知に含まれるフロー情報、及びデフォルトのアクション情報に基づき、パケット転送ルールを生成してもよい。
更に、複数の通信インタフェース101の各通信インタフェースのアドレス情報に、デフォルトゲートウェイの情報、具体的には、デフォルトゲートウェイのIPアドレスが含まれない場合もあり得る。アドレス情報にデフォルトゲートウェイの情報が含まれない通信インタフェースを使用する場合、通信装置100が直接接続するネットワーク以外のネットワーク上の通信装置との通信を行うことはできない。その場合、使用インタフェース情報管理部302において、アドレス情報にデフォルトゲートウェイの情報が含まれない通信インタフェースを使用することを定める使用インタフェース情報を設定できないようにする対応を行ってもよい。また、パケットを廃棄する等の、任意のアクションを含む、そのような使用インタフェース情報に対するデフォルトのアクション情報を予め設定しておき、デフォルトのアクション情報に基づき、パケット転送ルールを生成してもよい。
ユーザ又は任意のプログラムにより、使用インタフェース情報管理部302を通じて使用インタフェース情報記憶部301に記憶される使用インタフェース情報が変更された際、変更された使用インタフェース情報に基づき生成されたパケット転送ルールも変更する必要がある。
使用インタフェース情報が変更された際、転送制御部300は、変更された使用インタフェース情報に含まれるフロー情報に適合する全てのパケット転送ルールを、パケット転送部200のパケット転送ルール記憶部201に記憶されているパケット転送ルールテーブルからパケット転送部管理部307を通じて取得し、取得した各々のパケット転送ルールの内容を、変更された使用インタフェース情報に基づく内容に変更し、変更した各々のパケット転送ルールを、変更を行う設定指示と共に、パケット転送部管理部307を通じてパケット転送部200に送信することで、パケット転送ルールを変更する。若しくは、変更された使用インタフェース情報に含まれるフロー情報に適合する全てのパケット転送ルールを、パケット転送部管理部307を通じて削除し、改めてパケット転送ルールを生成するように促す対応を行ってもよい。
本実施形態では、通信装置100上で動作する任意の通信プログラム105が、通信装置100が直接接続するネットワーク以外のネットワーク上の通信装置との通信を行う場合、通信プログラム105が送信したパケットが、通信スタック103が行う経路制御によって仮想デフォルトゲートウェイに送信され、更に、パケット転送部200によって使用インタフェース情報管理部302を通じて設定される使用インタフェース情報によって特定される通信に使用する通信インタフェースを介して接続されるネットワーク上のデフォルトゲートウェイに転送される。優位に設定した通信インタフェース以外の通信インタフェースを介して接続するネットワークを利用する場合、通信装置が直接接続するネットワーク以外のネットワーク上の通信装置との通信を行うことができない特許文献1記載の方法とは異なり、複数の通信インタフェース101を介して接続するネットワークのうちいずれのネットワークを利用する場合でも、通信装置100が直接接続するネットワーク以外のネットワーク上の通信装置との通信を行うことが可能である。
また、通信プログラム105が通信に使用する通信インタフェースを選択可能にするために、通信プログラム105を変更するといった特別な対応を必要としない。ネットワーク側からは、通信装置100は通常のIP通信の仕組みで通信を行っているように見えるため、特定の機構や対向の通信装置を用意するといったネットワーク側における特別な対応を必要としない。また、特定の通信装置の任意のアドレスの情報を予め登録しておくといった対応も必要とせずに、通信を行うことができる。
更に、通信プログラム105からは、通信に使用する通信インタフェースによらず、仮想インタフェース102、並びに仮想デフォルトゲートウェイを介して通信が行われるように見えるため、使用インタフェース情報に含まれる通信に使用する通信インタフェースが変更された場合、DHCPのリース期間切れや通信装置の移動に伴うハンドオーバーの発生等によって通信インタフェースのアドレス情報に変化が発生した場合等において、通信プログラム105にそれを意識させることなしに通信を行うことができる。
フロー単位のネットワーク制御方式を利用したこと、及び使用インタフェース情報を通じてフロー毎に通信に使用する通信インタフェースを指定可能にしたことにより、ユーザ又は任意のプログラムが、任意の要求や条件に基づき、フロー毎に通信に利用するネットワークを選択することができる。すなわち、異なる通信の特性を持つ通信プログラムが送受信するトラフィックは、いくつかのフローの集合であると捉えられるので、フロー単位というより細かい粒度で、通信装置上で動作する通信プログラムが通信に利用するネットワークを任意に選択することが可能であると言える。
例えば、ユーザが、通信量の小さい電子メールを送受信する通信プログラムのトラフィック、具体的には、送信先ポート番号が25番(SMTP、Simple Mail Transfer Protocol)又は110番(POP3、Post Office Protocol version 3)のフローに対しては、3Gネットワークを利用することを定める使用インタフェース情報を設定し、Web上の映像ストリーミングのようなトラフィック量の大きい通信を行う通信プログラムのトラフィック、具体的には、送信先ポート番号が80番(HTTP、HyperText Transfer Protocol)のフローに対しては、無線LANネットワークを使用することを定める使用インタフェース情報を設定することで、本発明の実施形態により、各々の通信プログラムのトラフィックは、3G並びに無線LANのネットワークを利用して通信が行われるようになる。
例えば、ユーザが、任意のネットワーク上の通信装置との通信を許可しない場合、具体的には、送信元IPアドレス又は送信先IPアドレスが通信を許可しない通信装置のIPアドレスであるフローに対しては、存在しない通信インタフェースを使用することを定める使用インタフェース情報を設定することで、本発明の実施形態により、通信を許可しない通信装置との間で送受信されるパケットを廃棄することができる。
例えば、複数の通信インタフェース101の各通信インタフェースが通信可能か否かを監視する通信装置100上で動作するプログラムが、各通信インタフェースの状態に基づき、動的に使用インタフェース情報を設定することで、任意の通信プログラムのフローが通信に利用するネットワークを動的に変更することができる。無線LANネットワークが切断され、通信不可になった場合、無線LANネットワークを利用することを定める使用インタフェース情報から、3Gネットワークを利用することを定める使用インタフェース情報に変更することで、本発明の実施形態により、任意の通信プログラムのフローが、3Gネットワークを利用して通信を行うようになる。
例えば、複数の通信インタフェース101に含まれる無線インタフェースの受信電界強度を監視する通信装置100上で動作するプログラムが、各無線インタフェースの受信電界強度に基づき、予め設定した任意の閾値よりも受信電界強度が大きい無線インタフェースを、通信に使用する通信インタフェースとして選択し、その無線インタフェースを使用することを定める使用インタフェース情報を設定することで、本発明の実施形態により、任意の通信プログラムのフローが、最も通信品質が良いと思われる無線インタフェースを利用して通信を行うようになる。
例えば、複数の通信インタフェース101の各通信インタフェースのパケット送受信数を監視する通信装置100上で動作するプログラムが、各通信インタフェースのパケット送受信数、及び予め設定した任意のパケット送受信数の上限に基づき、任意の通信プログラムのフローが通信に使用する通信インタフェースのパケット送受信数が上限に達した際、他の通信インタフェース、若しくは存在しない通信インタフェースを使用することを定める使用インタフェース情報を設定することで、本発明の実施形態により、パケット送受信数が上限に達した通信インタフェースを使用する任意の通信プログラムのフローに対し、他の通信インタフェースを使用して通信を行うようにすること、若しくはパケットを廃棄するようにするといった対応を行うことができる。
(第2の実施形態)
図8は、第2の実施形態における通信に係る要素に着目したより詳細な通信装置の構成例を示すブロック図である。第1の実施形態における通信装置の構成要素と同様の構成要素については、同一の符号を付し、詳細な説明を省略する。第2の実施形態における通信装置100のパケット転送部200は、通信装置100内部にブリッジ等の構造を構成する。第2の実施形態においては、パケット転送部200がブリッジを構成する場合を例として説明する。
パケット転送部200がブリッジを構成する場合、通信スタック103は、パケット転送部200が構成するブリッジに接続する仮想インタフェース102、具体的には、ブリッジのローカルポートを端点としてパケットの送受信を行う必要がある。そのため、第1の実施形態のように、複数の通信インタフェース101の各通信インタフェースが通信スタック103に接続され、通信スタック103が複数の通信インタフェース101を介してパケットの送受信を行うことはできない。従って、第1の実施形態において説明したパケット転送部200及び転送制御部300によるパケット転送の方法を、第2の実施形態における通信装置100にそのまま適用しても、複数の通信インタフェース101を介して接続するネットワークを利用して通信を行うことができない。
そこで、第2の実施形態においては、仮想インタフェース102を端点として、通信スタック103が仮想インタフェース102を介してパケットの送受信を行うことを可能にするための仮想インタフェース102のIPアドレスの設定、及び通信スタック103が持つ経路表104の設定を行い、それらの設定に基づくパケット転送部200及び転送制御部300によるパケット転送を行うことで、通信装置の通信スタックがいずれかの通信インタフェースを端点として通信を行う必要がある場合においても、通信装置が備える複数の通信インタフェースを介して接続するネットワークを利用して通信を行うことを可能にする。
第2の実施形態における通信装置100は、第1の実施形態と同様に、複数の通信インタフェース101及び仮想インタフェース102を備えるが、通信装置100の通信スタック103には、仮想インタフェース102のみが接続される。パケット転送部200には、複数の通信インタフェース101及び仮想インタフェース102が接続される。
図8に示す構成により、パケット転送部200は、通信装置100上で動作する通信プログラム105から送信されたパケットを、仮想インタフェースから受信できる。また、他の通信装置から送信されたパケットを、複数の通信インタフェース101のうちのいずれかの通信インタフェースから受信できる。
第2の実施形態におけるパケット転送部200及び転送制御部300によるパケット転送を行う前の時点では、仮想インタフェース102には、第1の実施形態と同様に、任意の値から成る仮想のアドレス情報が設定される。仮想インタフェース102のアドレス情報は、少なくとも、仮想MACアドレスと、仮想IPアドレスと、仮想デフォルトゲートウェイのMACアドレス及びIPアドレスとを含む。
第2の実施形態におけるアドレス情報管理部304は、パケット転送部200に接続する複数の通信インタフェース101の各通信インタフェースのアドレス情報、及び仮想インタフェース102のアドレス情報を取得し、アドレス情報記憶部303に記憶させる。更に、取得した複数の通信インタフェース101の各通信インタフェースのアドレス情報に含まれる各通信インタフェースのIPアドレスを、仮想インタフェース102に設定する。すなわち、第2の実施形態における仮想インタフェース102には、1つ以上のIPアドレス、具体的には、仮想IPアドレス、及び複数の通信インタフェース101の各通信インタフェースに設定されるIPアドレスが設定される。
第2の実施形態における経路表管理部305は、アドレス情報記憶部305に記憶されるアドレス情報に含まれる複数の通信インタフェース101の通信インタフェース毎に設定されるデフォルトゲートウェイ、及び仮想インタフェース102に設定される仮想デフォルトゲートウェイのうち、仮想デフォルトゲートウェイに関する経路情報のみを、通信スタック103が持つ経路表104に設定する。更に、経路表管理部305は、出力インタフェースが複数の通信インタフェース101の各通信インタフェースである複数の通信インタフェース101を介して接続する各ネットワークへの経路に関する経路情報を、経路表104から削除し、それらの経路情報の代わりに、出力インタフェースが仮想インタフェースである複数の通信インタフェース101を介して接続する各ネットワークへの経路に関する経路情報を、経路表104に設定する。
図9は、第2の実施形態における経路表の構成例である。第2の実施形態における経路表管理部305によって経路表104は、図9のように設定される。複数の通信インタフェース101を介して接続する各ネットワークへの経路に関する経路情報として、第1の実施形態とは異なり、送信先ネットワークが複数の通信インタフェース101を介して接続する各ネットワークであり、出力インタフェースが仮想インタフェースである経路情報が設定される。また、仮想インタフェース102を介して接続する仮想ネットワークへの経路に関する経路情報として、送信先ネットワークが仮想ネットワークであり、出力インタフェースが仮想インタフェースである経路情報が設定される。更に、デフォルトゲートウェイに関する経路情報として、ネクストホップが仮想インタフェースに設定される仮想デフォルトゲートウェイである経路情報のみが設定される。
なお、経路表104に設定するデフォルトゲートウェイに関する経路情報について、仮想インタフェース102に設定される仮想デフォルトゲートウェイに関する経路情報だけでなく、更に複数の通信インタフェース101の通信インタフェース毎に設定されるデフォルトゲートウェイに関する経路情報を設定してもよい。ただし、その場合、仮想デフォルトゲートウェイに関する経路情報を優位に設定する。
また、経路表104に設定する複数の通信インタフェース101を介して接続する各ネットワークへの経路に関する経路情報について、出力インタフェースが仮想インタフェースである複数の通信インタフェース101を介して接続する各ネットワークへの経路に関する経路情報だけでなく、更に出力インタフェースが複数の通信インタフェース101の各通信インタフェースである複数の通信インタフェース101を介して接続する各ネットワークへの経路に関する経路情報を設定してもよい。ただし、その場合、出力インタフェースが仮想インタフェースである複数の通信インタフェース101を介して接続する各ネットワークへの経路に関する経路情報を優位に設定する。
上記のような仮想インタフェース102のIPアドレスの設定、及び経路表104の設定を行うことで、通信スタック103が行う経路制御によって通信プログラム105から送信されたパケットが仮想インタフェース102を介して送信されるようになる。具体的には、通信装置100が直接接続するネットワーク以外のネットワーク上の通信装置との通信を行う場合だけでなく、複数の通信インタフェース101を介して接続するネットワーク上の通信装置との通信を行う場合においても、仮想インタフェース102を介してパケットが送信されるようになる。
通信プログラム105が、通信装置100が直接接続するネットワーク以外のネットワーク上の通信装置との通信を行う場合、通信スタック103において経路制御が行われた後、パケット転送部200が通信プログラム105から送信されたパケットを仮想インタフェース102から受信する時点では、パケットの送信元MACアドレスは、仮想インタフェース102に設定される仮想MACアドレスに、パケットの送信先MACアドレスは、仮想デフォルトゲートウェイのMACアドレスに、パケットの送信元IPアドレスは、仮想インタフェース102に設定される仮想IPアドレスに、パケットの送信先IPアドレスは、送信先の通信装置のIPアドレスになる。
一方、通信プログラム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が直接接続するネットワーク以外のネットワーク上の通信装置が送信したパケットを受信する場合、通信スタック103が仮想インタフェース102を介してパケットを受信できるようにするための対応が必要である。
そこで、特定した送信元IPアドレスから求めたネットワークアドレスが、仮想インタフェース102に設定される複数の通信インタフェース101の各通信インタフェースのIPアドレスから求めたネットワークアドレスのいずれとも等しくない場合、パケット転送ルール生成部306は、新規フロー検出通知に含まれるフロー情報と、アクション情報とを含むパケット転送ルールを生成する。このアクション情報は、送信先IPアドレスを仮想インタフェース102に設定される仮想IPアドレスに書き換えるアクション(ステップS303)、送信先MACアドレスを仮想インタフェース102に設定される仮想MACアドレスに書き換えるアクション(ステップS304)、及び受信したパケットを仮想インタフェース102に送信するアクション(ステップS305)から成る。
このようなパケット転送ルールに基づくパケット転送により、パケット転送部200が受信したパケットを、通信スタック103が仮想インタフェース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においては、複数の通信インタフェース101を介して接続するネットワーク上の通信装置との通信を行う場合においても、仮想インタフェース102を介してパケットが送信される。従って、複数の通信インタフェース101を介して接続するネットワーク上の通信装置が送信したパケットを受信する場合においても、通信スタック103が仮想インタフェース102を介してパケットを受信できるようにするための対応が必要である。
そこで、パケット転送ルール生成部306は、新規フロー検出通知に含まれるフロー情報と、送信先MACアドレスを仮想インタフェース102に設定される仮想MACアドレスに書き換えるアクション(ステップS304)、及び受信したパケットを仮想インタフェース102に送信するアクション(ステップS305)から成るアクション情報とを含むパケット転送ルールを生成する。
このようなパケット転送ルールに基づくパケット転送により、パケット転送部200が受信したパケットを、通信スタック103が仮想インタフェース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の実施形態においては、複数の通信インタフェース101が通信スタック103に接続され、通信スタック103が複数の通信インタフェース101を使用してパケットの送受信を行うことが可能である。そのため、複数の通信インタフェース101を介して接続するネットワーク上の通信装置との通信を行う場合、通信スタック103が行う経路制御によって送信先の通信装置が存在するネットワークに接続する通信インタフェースを介してパケットが送信されるため、パケット転送部200は、パケットを受信した通信インタフェース、すなわち、通信に使用する通信インタフェースを、フロー情報に含まれる受信ポート番号によって特定することができた。しかし、第2の実施形態においては、通信スタック103が行う経路制御によって仮想インタフェース102を介してパケットが送信されるため、フロー情報に含まれる受信ポート番号によって通信に使用する通信インタフェースを特定することはできない。従って、複数の通信インタフェース101を介して接続するネットワーク上の通信装置との通信を行う場合においても、通信に使用する通信インタフェースを特定する必要がある。
第2の実施形態においては、複数の通信インタフェース101の各通信インタフェースのIPアドレスを仮想インタフェース102に設定したこと、及び出力インタフェースが仮想インタフェースである複数の通信インタフェース101を介して接続する各ネットワークへの経路に関する経路情報を経路表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アドレスを得ることだけでなく、他の通信装置から送信されるアドレス解決要求に対応することもできない。
そこで、第2の実施形態における転送制御部300は、第2の実施形態における通信装置100においてアドレス解決を可能にするための処理を行う。図11は、第2の実施形態における転送制御部のアドレス解決処理の例を示すフローチャートである。
パケット転送部200がアドレス解決パケットを受信した際、パケット転送部200は、アドレス解決パケットのフローに対する新規フロー検出通知を転送制御部300に送信する(ステップS401)。第2の実施形態における転送制御部300のアドレス解決処理においては、アドレス解決パケットを受信した際、パケット転送部200から新規フロー検出通知が送信されるようにするため、アドレス解決パケットのフローに対するパケット転送ルールは、パケット転送部200に設定しない。なお、アドレス解決パケットのフローに対する新規フロー検出通知には、アドレス解決パケットそのものが含まれているものとする。
転送制御部300は、アドレス解決パケットのフローに対する新規フロー検出通知を受信した際、複数の通信インタフェース101の各通信インタフェースのアドレス情報、及び仮想インタフェース102のアドレス情報を、アドレス情報管理部304を通じて取得する(ステップS402)。そして、アドレス解決パケットの内容を参照し、受信したアドレス解決パケットが、アドレス解決要求パケットなのか、アドレス解決応答パケットなのか判定する(ステップS403)。
受信したアドレス解決パケットが、アドレス解決要求パケットである場合(ステップS403における「要求」)、アドレス解決要求パケットに含まれる要求先IPアドレスを参照し、要求先IPアドレスと、複数の通信インタフェース101のうちのいずれかの通信インタフェースのIPアドレスとが等しいか否かに基づき、受信したアドレス解決要求パケットが、通信装置100に対するアドレス解決要求パケットなのか否か、具体的には、複数の通信インタフェース101の各通信インタフェースに対するアドレス解決要求パケットなのか否か判定する(ステップS404)。
複数の通信インタフェース101の各通信インタフェースに対するアドレス解決要求パケットである場合(ステップS404におけるYes)、アドレス解決要求パケットを送信した要求元の通信装置に対するアドレス解決応答パケットとして、アドレス解決要求パケットを受信した通信インタフェースのMACアドレスを含むアドレス解決応答パケットを生成する。その理由は、受信したアドレス解決要求パケットを仮想インタフェース102に転送し、通信スタック103のアドレス解決処理によりアドレス解決応答パケットを生成する場合、アドレス解決要求パケットを受信した通信インタフェースのMACアドレスではなく、仮想インタフェース102に設定される仮想MACアドレスがアドレス解決応答パケットに含まれてしまうためである。
転送制御部300は、要求元の通信装置に対するアドレス解決応答パケットを生成し(ステップS405)、生成したパケットを、アドレス解決要求パケットを受信した通信インタフェースに送信する指示と共に、パケット転送部200に送信する。パケット転送部200は、その指示に従い、生成したパケットを送信する(ステップS406)。
要求元の通信装置に対するアドレス解決応答パケットとして、アドレス解決要求パケットを受信した通信インタフェースのMACアドレスを含むアドレス解決応答パケットを生成し、パケットを受信した通信インタフェースから要求元の通信装置に送信することで、他の通信装置からのアドレス解決要求に対応することができる。
また、上記のような処理を行うことで、他の通信装置から送信されたアドレス解決要求パケットが仮想インタフェース102に転送されることがないため、通信スタック103のアドレス解決処理によって仮想インタフェース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が仮想デフォルトゲートウェイに対するアドレス解決要求パケットを受信した際、複数の通信インタフェース101の各々の通信インタフェースから通信インタフェース毎に設定される各々のデフォルトゲートウェイに対するアドレス解決要求を送信することで、各々のデフォルトゲートウェイから通信装置100に、各々のデフォルトゲートウェイのMACアドレスを含むアドレス解決応答パケットが送信される。
受信したアドレス解決要求パケットが、仮想デフォルトゲートウェイに対するアドレス解決要求パケットでない場合(ステップS407におけるNo)、受信したアドレス解決要求パケットは、仮想インタフェース102を介して通信スタック103が複数の通信インタフェース101のうちのいずれかの通信インタフェースを介して接続するネットワーク上の通信装置に送信したアドレス解決要求パケットであるため、そのアドレス解決要求パケットが要求先の通信装置に送信されるようにするための対応が必要である。
第2の実施形態においては、複数の通信インタフェース101の各通信インタフェースのIPアドレスを仮想インタフェース102に設定したこと、及び出力インタフェースが仮想インタフェースである複数の通信インタフェース101を介して接続する各ネットワークへの経路に関する経路情報を経路表104に設定したことにより、仮想インタフェース102を介して通信スタック103が送信するアドレス解決要求パケットに含まれる要求元IPアドレスは、MACアドレスを得ようとする通信装置が存在するネットワークに接続する複数の通信インタフェース101のうちのいずれかの通信インタフェースのIPアドレスになる。従って、要求元IPアドレスに基づき、通信に使用する通信インタフェースを特定することができる。
受信したアドレス解決要求パケットが、仮想デフォルトゲートウェイに対するアドレス解決要求パケットでない場合、転送制御部300は、アドレス解決要求パケットに含まれる要求元IPアドレスと、設定されるIPアドレスとが等しい複数の通信インタフェース101のうちのいずれかの通信インタフェースを、通信に使用する通信インタフェースとして特定する(ステップS410)。
特定した通信に使用する通信インタフェースに基づき、受信したアドレス解決要求パケットに含まれる送信元MACアドレス及び要求元MACアドレスを、通信に使用する通信インタフェースのMACアドレスに書き換え(ステップS411)、送信元MACアドレス及び要求元MACアドレスを書き換えたアドレス解決要求パケットを、通信に使用する通信インタフェースに送信する指示と共に、パケット転送部200に送信する。パケット転送部200は、その指示に従い、送信元MACアドレス及び要求元MACアドレスを書き換えたアドレス解決要求パケットを送信する(ステップS412)。
要求元IPアドレスに基づき、通信に使用する通信インタフェースを特定し、送信元MACアドレス及び要求元MACアドレスを通信に使用する通信インタフェースのMACアドレスに書き換え、通信に使用する通信インタフェースから送信することで、アドレス解決要求パケットは、複数の通信インタフェース101のうちのいずれかの通信インタフェースを介して接続するネットワーク上の要求先の通信装置に送信されるようになる。
受信したアドレス解決パケットが、アドレス解決応答パケットである場合(ステップS403における「応答」)、アドレス解決応答パケットに含まれる応答先IPアドレスを参照し、応答先IPアドレスと、複数の通信インタフェース101のうちのいずれかの通信インタフェースのIPアドレスとが等しいか否かに基づき、受信したアドレス解決応答パケットが、通信装置100に対するアドレス解決応答パケットなのか否か、具体的には、複数の通信インタフェース101の各通信インタフェースに対するアドレス解決応答パケットなのか否か判定する(ステップS413)。
受信したアドレス解決応答パケットが、複数の通信インタフェース101の各通信インタフェースに対するアドレス解決応答パケットでない場合(ステップS413におけるNo)、アドレス解決応答パケットを受信した通信インタフェースが仮想インタフェース102以外である場合、通信装置100に対するアドレス解決応答パケットでないと判断できるので、受信したパケットを廃棄する(S414)。
他の通信装置からアドレス解決要求パケットを受信した際、パケットを受信した通信インタフェースのMACアドレスを含むアドレス解決応答パケットを生成し、要求元の通信装置に送信することにより、他の通信装置から送信されたアドレス解決要求パケットが仮想インタフェース102に転送されることはないため、仮想インタフェース102から他の通信装置に対するアドレス解決応答パケットが送信されることはない。従って、仮想インタフェース102から送信されるアドレス解決応答パケットについては、考慮しなくてもよい。
受信したアドレス解決応答パケットが、複数の通信インタフェース101の各通信インタフェースに対するアドレス解決応答パケットである場合(ステップS413におけるYes)、アドレス解決応答パケットに含まれる応答元IPアドレスと、通信インタフェース毎に設定される各々のデフォルトゲートウェイのIPアドレスとが等しいか否かに基づき、受信したアドレス解決応答パケットが、複数の通信インタフェース101のうちのいずれかの通信インタフェースに設定されるデフォルトゲートウェイが送信したアドレス解決応答パケットなのか否か判定する(ステップS415)。
受信したアドレス解決応答パケットが、複数の通信インタフェース101のうちのいずれかの通信インタフェースに設定されるデフォルトゲートウェイが送信したアドレス解決応答パケットである場合(ステップS415におけるYes)、第1の実施形態と同様に、アドレス解決応答パケットを送信したデフォルトゲートウェイのMACアドレスの記憶、及び仮想デフォルトゲートウェイに関するアドレス解決応答を行う。
複数の通信インタフェース101のうちのいずれかの通信インタフェースに設定されるデフォルトゲートウェイが送信したアドレス解決応答パケットに含まれる応答元MACアドレスにより、アドレス解決応答パケットを送信したデフォルトゲートウェイのMACアドレスを得ることができる。得られたデフォルトゲートウェイのMACアドレスは、アドレス情報管理部304を通じて記憶する(ステップS416)。そして、全てのデフォルトゲートウェイのMACアドレスが得られたか否か判定し(ステップS417)、全て得られた時点で(ステップS417におけるYes)、転送制御部300は、仮想デフォルトゲートウェイの仮想MACアドレスを含むアドレス解決応答パケットを生成し(ステップS418)、生成したパケットを、仮想インタフェース102から送信する指示と共に、パケット転送部200に送信する(ステップS419)。パケット転送部200は、その指示に従い、仮想デフォルトゲートウェイの仮想MACアドレスを含むアドレス解決応答パケットを送信する。
全てのデフォルトゲートウェイのMACアドレスが得られた時点で、仮想デフォルトゲートウェイのMACアドレスを含むアドレス解決応答パケットを生成し、仮想インタフェース102に送信することで、通信スタック103がパケットを送信するために必要な仮想デフォルトゲートウェイのMACアドレス、及びパケット転送ルール生成部306がパケット転送ルールを生成するために必要な通信に使用する通信インタフェースに設定されるデフォルトゲートウェイのMACアドレスを得ることができる。
受信したアドレス解決応答パケットが、複数の通信インタフェース101のうちのいずれかの通信インタフェースに設定されるデフォルトゲートウェイが送信したアドレス解決応答パケットでない場合(ステップS415におけるNo)、仮想インタフェース102を介して通信スタック103が送信したアドレス解決要求パケットに対する応答として、要求先の通信装置から送信されたアドレス解決応答パケットであると判断できる。そのアドレス解決応答パケットに含まれる応答先IPアドレスは、要求先の送信装置にアドレス解決要求パケットを送信した際に使用した複数の通信インタフェース101のうちのいずれかの通信インタフェースのIPアドレスになる。通信スタック103は、仮想インタフェース102を介してアドレス解決要求パケットを送信するため、通信スタック103が仮想インタフェース102を介して要求先の通信装置が送信したアドレス解決応答パケットを受信できるようにするための対応が必要である。
その場合、転送制御部300は、受信したアドレス解決応答パケットに含まれる送信先MACアドレス及び応答先MACアドレスを、仮想インタフェース102の仮想MACアドレスに書き換え(ステップS420)、送信先MACアドレス及び応答先MACアドレスを書き換えたアドレス解決応答パケットを、仮想インタフェース102に送信する指示と共に、パケット転送部200に送信する。パケット転送部200は、その指示に従い、送信先MACアドレス及び応答先MACアドレスを書き換えたアドレス解決応答パケットを送信する(ステップS421)。
受信したアドレス解決応答パケットに含まれる送信先MACアドレス及び応答先MACアドレスを仮想インタフェース102の仮想MACアドレスに書き換え、仮想インタフェース102に送信することで、通信スタック103は、仮想インタフェース102を介して、複数の通信インタフェース101を介して接続するネットワーク上の通信装置のMACアドレスを得ることができる。
(第3の実施形態)
第1、第2の実施形態においては、ユーザ又は任意のプログラムが使用インタフェース情報管理部302を通じて使用インタフェース情報記憶部301に、フロー毎に複数の通信インタフェース101のうちどの通信インタフェースを使用して通信を行うのかを定める情報である使用インタフェース情報を設定するが、同一のフローに対して、各々が異なる通信インタフェースを使用して通信を行うことを定める、複数の使用インタフェース情報を設定してもよい。
図12は、第3の実施形態における使用インタフェース情報記憶部302に記憶される使用インタフェース情報の構成例である。使用インタフェース情報記憶部302には、同一のフローに対する複数の使用インタフェース情報が記憶される。なお、第3の実施形態において、ユーザ又は任意のプログラムは、フロー毎に、そのフローに対する1つ以上の使用インタフェース情報を設定することができる。
第3の実施形態における使用インタフェース情報記憶部302に記憶される同一のフローに対する複数の使用インタフェース情報のうちの各々の使用インタフェース情報は、同一のフロー情報と、各々が異なる複数の通信インタフェース101のうちのいずれかの通信インタフェースを特定する複数の通信インタフェース101のうちのいずれかを一意に特定可能な情報とを含む。その場合、フロー情報のみによってパケット転送ルールの生成において使用する使用インタフェース情報、すなわち、通信に使用する通信インタフェースを特定することはできない。
そこで、使用インタフェース情報を特定するための指標として、いくつかの任意の情報を使用インタフェース情報に含める。図12の構成例においては、使用インタフェース情報は、使用インタフェース情報を特定するための指標として、使用インタフェース情報の優先度と、通信インタフェースを使用して通信を行うことが可能か否かを定める情報である通信可否と、無線インタフェースの受信電界強度の閾値と、通信インタフェースのパケット送受信数の上限とを含む。
第3の実施形態におけるパケット転送部200及び転送制御部300によるパケット転送において、第1、第2の実施形態と同様に、パケット転送部200が任意のパケットを受信したことによる新規フロー検出通知を、転送制御部300が受信した際、第3の実施形態におけるパケット転送ルール生成部306は、受信したパケットのフローに対するパケット転送ルールを生成する。なお、受信したパケットは、通信プログラム105が、通信装置100が直接接続するネットワーク以外のネットワーク上の通信装置に送信したパケットである。
パケット転送ルール生成部306は、新規フロー検出通知に含まれるフロー情報に基づき、受信したパケットのフローに適合するフロー情報を含む使用インタフェース情報を、使用インタフェース情報管理部302を通じて取得する。取得した受信したパケットのフローに適合するフロー情報を含む使用インタフェース情報が1つのみである場合、第1、第2の実施形態と同様に、取得した使用インタフェース情報に含まれる複数の通信インタフェース101のうちのいずれかを一意に特定可能な情報に基づき、通信に使用する通信インタフェースを特定する。一方、取得した受信したパケットのフローに適合するフロー情報を含む使用インタフェース情報が複数である場合、取得した各々の使用インタフェース情報に含まれる使用インタフェース情報を特定するための指標に基づき、パケット転送ルールの生成に使用する使用インタフェース情報を特定する。
例えば、取得した複数の受信したパケットのフローに適合するフロー情報を含む使用インタフェース情報のうち、通信可否が可である通信インタフェースのうち優先度の値が最も小さい使用インタフェース情報を、パケット転送ルールの生成において使用する使用インタフェース情報として特定する。
例えば、パケット転送ルール生成部306が複数の通信インタフェース101に含まれる無線インタフェース毎の受信電界強度の値を参照し、取得した複数の受信したパケットのフローに適合するフロー情報を含む使用インタフェース情報のうち、各々の無線インタフェースの受信電界強度の値が、各々の無線インタフェースを使用することを定める使用インタフェース情報に含まれる閾値より大きい使用インタフェース情報を、パケット転送ルールの生成において使用する使用インタフェース情報として特定する。
また、パケット転送ルール生成部306が複数の通信インタフェース101の各通信インタフェースのパケット送受信数を参照し、パケット送受信数が使用インタフェース情報に含まれる上限に達した通信インタフェースを使用することを定める使用インタフェース情報は、パケット転送ルールの生成において使用しないといった対応を行ってもよい。
そして、特定した使用インタフェース情報に含まれる複数の通信インタフェース101のうちのいずれかを一意に特定可能な情報に基づき、通信に使用する通信インタフェースを特定し、新規フロー検出通知に含まれるフロー情報と、特定した通信に使用する通信インタフェースのアドレス情報とに基づき、受信したパケットのフローに対するパケット転送ルールを生成する。
同一のフローに対して、各々が異なる通信インタフェースを使用して通信を行うことを定める、複数の使用インタフェース情報が設定される場合において、使用インタフェース情報を特定するための指標に基づき、パケット転送ルールの生成において使用する使用インタフェース情報を特定することで、通信装置が複数の通信インタフェースを介して接続するネットワークのうち任意の要求や条件に適したネットワークを利用して通信を行うことができるようになる。
(第4の実施形態)
第1、第2の実施形態における通信装置100は、フロー単位のネットワーク制御方式を利用する通信装置であって、受信したパケットの転送を行うパケット転送部200と、パケット転送部200の動作を制御する転送制御部300とを備え、パケット転送部200と転送制御部300とは、任意の方法によって接続される。パケット転送部200及び転送制御部300は、第1、第2の実施形態において説明したパケット転送を行うが、エラーの発生によって転送制御部300の動作が停止した等の理由により、パケット転送部200と転送制御部300との接続が切れた場合、パケット転送を行うことができなくなり、通信不能に陥るという課題がある。
パケット転送部によっては、転送制御部との接続が切れた際、フロー単位のネットワーク制御方式に関する機能を停止させ、通信装置の通信スタックが行う経路制御によって通信を行うことが可能である。しかし、第1、第2の実施形態においては、パケット転送部200及び転送制御部300によるパケット転送によって通信を可能にするための経路情報を経路表104に設定しているため、通信装置100の通信スタック103が経路表104を使用して経路制御を行っても、通信を行うことができない。
第1の実施形態においては、経路表104上のデフォルトゲートウェイに関する経路情報として、ネクストホップが仮想デフォルトゲートウェイである経路情報のみが設定されるため、通信装置100が直接接続するネットワーク以外のネットワーク上の通信装置との通信を行うことができない。第2の実施形態においては、第1の実施形態と同様に、経路表104上のデフォルトゲートウェイに関する経路情報として、ネクストホップが仮想デフォルトゲートウェイである経路情報のみが設定される。また、経路表104上の複数の通信インタフェース101を介して接続する各ネットワークへの経路に関する経路情報として、送信先ネットワークが複数の通信インタフェース101を介して接続する各ネットワークであり、出力インタフェースが仮想インタフェース102である経路情報が設定される。そのため、通信装置100が直接接続するネットワーク以外のネットワーク上の通信装置だけでなく、複数の通信インタフェース101を介して接続する各ネットワーク上にある通信装置との通信も行うことができない。
そこで、第4の実施形態においては、通信装置100の通信スタック103が複数の経路表を持ち、パケット転送部200と転送制御部300との接続が切れた際、通信スタック103が行う経路制御に使用する経路表を切り替えることにより、通信不能に陥ることを回避する。
図13は、第4の実施形態における通信装置の構成例を示すブロック図である。第1、第2の実施形態における通信装置の構成要素と同様の構成要素については、同一の符号を付し、詳細な説明を省略する。第4の実施形態における通信スタック103は、パケット転送部200及び転送制御部300によるパケット転送によって通信を可能にするために使用する経路表104と、パケット転送が行えない場合に使用する経路表106を持つ。また、第4の実施形態における通信装置100は、パケット転送部200と転送制御部300との接続を監視する接続監視部400を備える。
更に、図14に示すように、通信スタック103は、アドレス情報記憶部107と、アドレス情報管理部108と、経路表管理部109とを備える。
パケット転送部200及び転送制御部300によるパケット転送によって通信を可能にするために使用する経路表104は、転送制御部300のアドレス情報記憶部303及び、アドレス情報管理部304、経路表管理部305により、第1の実施形態における図6、又は第2の実施形態における図9に示すような構成に設定される。一方、パケット転送が行えない場合に使用する経路表106は、第4の実施形態における通信スタック103のアドレス情報記憶部107及び、アドレス情報管理部108、経路表管理部109により、図15に示すような構成に設定される。
アドレス情報管理部108は、アドレス情報管理部304と同様に、複数の通信インタフェース101の各通信インタフェースのアドレス情報を取得し、アドレス情報記憶部107に記憶させる。また、アドレス情報管理部108は、DHCPのリース期間切れや通信装置の移動に伴うハンドオーバーの発生等によってアドレス情報の変更が発生した際、アドレス情報の変更が発生した通信インタフェースのアドレス情報を改めて取得し、アドレス情報記憶部107に記憶させる。
経路表管理部109は、アドレス情報記憶部107に記憶されたアドレス情報に基づき、パケット転送部200及び転送制御部300によるパケット転送が行えない場合に使用する経路表106の設定を行う。経路表106上の複数の通信インタフェース101を介して接続する各ネットワークへの経路に関する経路情報として、送信先ネットワークが複数の通信インタフェース101を介して接続する各ネットワークであり、出力インタフェースが各通信インタフェースである経路情報を設定する。また、経路表106上のデフォルトゲートウェイに関する経路情報として、ネクストホップが複数の通信インタフェース101の通信インタフェース毎に設定されるデフォルトゲートウェイのうちのいずれかのデフォルトゲートウェイに関する経路情報のみを設定する。
なお、経路表106に設定するデフォルトゲートウェイに関する経路情報について、複数の通信インタフェース101の通信インタフェース毎に設定される各々のデフォルトゲートウェイに関する経路情報を設定してもよい。ただし、その場合、ネクストホップが複数の通信インタフェース101の通信インタフェース毎に設定されるデフォルトゲートウェイのうちのいずれかのデフォルトゲートウェイに関する経路情報のうちのいずれかを優位に設定する。
経路表106に設定するデフォルトゲートウェイに関する経路情報は、任意の方法によって決定される。例えば、予め複数の通信インタフェース101のうちいずれか1つをデフォルトの通信インタフェースに設定し、ネクストホップがデフォルトの通信インタフェースに設定されるデフォルトゲートウェイである経路情報を設定する。
接続監視部400は、パケット転送部200と転送制御部300との接続を監視し、その接続状態に基づき、通信スタック103に対し、経路制御に使用する経路表を切り替える設定を行う。
パケット転送部200と転送制御部300とが接続されている場合、接続監視部400は、経路表104を使用して経路制御を行うように通信スタック103の設定を行う。その場合、通信装置100の構成は、第1の実施形態における図4、又は第2の実施形態における図8に示す構成と同様の構成になる。通信スタック103が経路表104を使用して経路制御を行うことで、パケット転送部200及び転送制御部300によるパケット転送によって通信を行うことが可能になる。
接続監視部400は、パケット転送部200と転送制御部300との接続が切れたことを検知すると、経路表106を使用して経路制御を行うように通信スタック103の設定を行う。パケット転送部200と転送制御部300との接続が切れた際、通信スタック103の経路制御に使用する経路表を、経路表104から経路表106に切り替えることで、パケット転送部200及び転送制御部300によるパケット転送が行えない場合においても、通信スタック103の経路制御によって通信を行うこと可能になる。
パケット転送部200と転送制御部300との接続が切れ、パケット転送部200及び転送制御部300によるパケット転送が行えない場合、通信装置100の構成は、図16に示す構成になる。
なお、経路表106を使用して通信スタック103が経路制御を行うことで、通信を行うことは可能であるが、パケット転送部200及び転送制御部300によるパケット転送が行えないため、複数の通信インタフェース101を介して接続するネットワークのうちのいずれを利用した場合においても通信装置100が直接接続するネットワーク以外のネットワーク上の通信装置との通信を行うこと、及びフロー毎に通信に利用するネットワークを選択することはできない。すなわち、その場合においては、通常のIP通信の仕組みによる通信と同等である。
また、接続監視部400は、パケット転送部200と転送制御部300との接続が切れ、通信スタック103の経路制御に使用する経路表を、経路表104から経路表106に切り替えた後、パケット転送部200と転送制御部300とが接続されたことを検知した際、パケット転送部200及び転送制御部300によるパケット転送によって通信が可能になるように、通信スタック103が経路制御に使用する経路表を、経路表106から経路表104に切り替えても良い。
また、第4の実施形態おいては、通信スタック103は、パケット転送部200及び転送制御部300によるパケット転送によって通信を可能にするために使用する経路表104と、パケット転送が行えない場合に使用する経路表106との、2つの経路表を持つと説明したが、通信スタック103が持つ経路表の数は、特に限定されず、1つ以上であればよい。1つの経路表上に、複数の通信インタフェース101を介して接続する各ネットワークへの経路に関する経路情報、及びデフォルトゲートウェイに関する経路情報を複数設定し、パケット転送部200と転送制御部300との接続状態に基づき、そのうちの適切な経路情報を優位に設定し、通信スタック103が行う経路制御に使用する経路情報を切り替えてもよい。
例えば、複数の通信インタフェース101を介して接続する各ネットワークへの経路に関する経路情報として、送信先ネットワークが複数の通信インタフェース101を介して接続する各ネットワークであり、出力インタフェースが各通信インタフェースである経路情報、及び送信先ネットワークが複数の通信インタフェース101を介して接続する各ネットワークであり、出力インタフェースが仮想インタフェースである経路情報を経路表104設定する。また、デフォルトゲートウェイに関する経路情報として、ネクストホップが複数の通信インタフェース101の通信インタフェース毎に設定されるデフォルトゲートウェイのうちのいずれかのデフォルトゲートウェイである経路情報、及びネクストホップが仮想インタフェースである経路情報を経路表104に設定する。
パケット転送部200と転送制御部300とが接続されている場合、複数の通信インタフェース101を介して接続する各ネットワークへの経路に関する経路情報として、送信先ネットワークが複数の通信インタフェース101を介して接続する各ネットワークであり、出力インタフェースが仮想インタフェースである経路情報を優位に設定し、デフォルトゲートウェイに関する経路情報として、ネクストホップが仮想インタフェースである経路情報を優位に設定することで、パケット転送部200及び転送制御部300によるパケット転送によって通信を行うことができる。
一方、パケット転送部200と転送制御部300との接続が切れている場合、複数の通信インタフェース101を介して接続する各ネットワークへの経路に関する経路情報として、送信先ネットワークが複数の通信インタフェース101を介して接続する各ネットワークであり、出力インタフェースが各通信インタフェースである経路情報を優位に設定し、デフォルトゲートウェイに関する経路情報として、ネクストホップが複数の通信インタフェース101の通信インタフェース毎に設定されるデフォルトゲートウェイのうちのいずれかのデフォルトゲートウェイである経路情報を優位に設定することで、パケット転送が行えない場合においても、通信スタック103が行う経路制御によって通信を行うことができる。
以上、本発明の実施の形態を例示により説明したが、本発明はこれに限定されるものではなく、請求項に記載された範囲において、目的に応じて変更、変形することが可能である。