(57)【特許請求の範囲】
【請求項１】
検証対象ネットワーク内の各スイッチにおけるパケットの転送規則および前記検証対象ネットワークの物理網トポロジ情報を取得する検証対象ネットワーク情報取得手段と、
前記転送規則に基づいて、前記スイッチの有するポートから出力されるパケットパターンから該スイッチの対応するポートに入力されるパケットパターンを逆算するバックトレース関数を生成するバックトレース関数生成手段と、
前記物理網トポロジ情報および前記転送規則に基づいて、前記検証対象ネットワークに外部からのパケットが流入するスイッチのポート（流入ポート）から外部へのパケットが流出するスイッチのポート（流出ポート）までをつなぐポートの列を表す物理リンクパスを取得する物理リンクパス取得手段と、
前記物理リンクパス上の途中ポートから前記流出ポートに到達するパケットの該途中ポートにおけるパケットパターンを記憶するパケットパターンキャッシュを利用しながら、前記流出ポートから前記流入ポートに向けて前記バックトレース関数を順次適用することにより、前記流出ポートに到達するパケットの前記流入ポートでのパケットパターンを算出するバックトレース関数適用手段と、
前記バックトレース関数適用手段による処理結果を出力する検証結果出力手段と、
を備えた網検証装置。
【請求項２】
前記バックトレース関数適用手段は、前記スイッチにおける入力ポートを表す情報を入力として、該スイッチにおいて該入力ポートに対応する出力ポートから前記流出ポートに到達するパケットの該出力ポートでのパケットパターンに対して前記バックトレース関数を適用することにより、該入力ポートでのパケットパターンを表す情報を出力するパケットパターン算出処理を実行する際に、該出力ポートから前記流出ポートに到達するパケットの該出力ポートでのパケットパターンが前記パケットパターンキャッシュに記憶されていれば該パケットパターンを再利用し、記憶されていなければ該パケットパターンを求めるために該出力ポートに対向する次のスイッチにおける入力ポートを入力として前記パケットパターン算出処理を再帰的に実行して得られるパケットパターンを前記パケットパターンキャッシュに記憶させることを特徴とする請求項１に記載の網検証装置。
【請求項３】
前記転送規則が、入力ポート、前記入力ポートに入力されるパケットパターンが適合する条件（マッチングパターン）、前記条件に適合した場合の該パケットパターンの処理内容（アクション）、および、処理後のパケットパターンを出力する出力ポートをそれぞれ表す情報を含むとき、
前記バックトレース関数生成手段は、出力ポートのパケットパターンを入力として、前記マッチングパターンおよび前記アクションに基づいて前記入力ポートに入力されるパケットパターンを出力するよう前記バックトレース関数を生成することを特徴とする請求項１または請求項２に記載の網検証装置。
【請求項４】
検証対象ネットワーク内の各スイッチにおけるパケットの転送規則および前記検証対象ネットワークの物理網トポロジ情報を取得し、
前記転送規則に基づいて、前記スイッチの有するポートから出力されるパケットパターンから該スイッチの対応するポートに入力されるパケットパターンを逆算するバックトレース関数を生成し、
前記物理網トポロジ情報および前記転送規則に基づいて、前記検証対象ネットワークに外部からのパケットが流入するスイッチのポート（流入ポート）から外部へのパケットが流出するスイッチのポート（流出ポート）までをつなぐポートの列を表す物理リンクパスを取得し、
前記物理リンクパス上の途中ポートから前記流出ポートに到達するパケットの該途中ポートにおけるパケットパターンを記憶するパケットパターンキャッシュを利用しながら、前記流出ポートから前記流入ポートに向けて前記バックトレース関数を順次適用することにより、前記流出ポートに到達するパケットの前記流入ポートでのパケットパターンを算出し、
前記流出ポートに到達するパケットの前記流入ポートでのパケットパターンを出力する、網検証方法。
【請求項５】
検証対象ネットワーク内の各スイッチにおけるパケットの転送規則および前記検証対象ネットワークの物理網トポロジ情報を取得する検証対象ネットワーク情報取得ステップと、
前記転送規則に基づいて、前記スイッチの有するポートから出力されるパケットパターンから該スイッチの対応するポートに入力されるパケットパターンを逆算するバックトレース関数を生成するバックトレース関数生成ステップと、
前記物理網トポロジ情報および前記転送規則に基づいて、前記検証対象ネットワークに外部からのパケットが流入するスイッチのポート（流入ポート）から外部へのパケットが流出するスイッチのポート（流出ポート）までをつなぐポートの列を表す物理リンクパスを取得する物理リンクパス取得ステップと、
前記物理リンクパス上の途中ポートから前記流出ポートに到達するパケットの該途中ポートにおけるパケットパターンを記憶するパケットパターンキャッシュを利用しながら、前記流出ポートから前記流入ポートに向けて前記バックトレース関数を順次適用することにより、前記流出ポートに到達するパケットの前記流入ポートでのパケットパターンを算出するバックトレース関数適用ステップと、
前記バックトレース関数適用ステップでの処理結果を出力する検証結果出力ステップと、
をコンピュータ装置に実行させるコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークの仕様および構成を検証する技術に関する。
【背景技術】
【０００２】
ネットワークの仕様および構成を検証する技術が知られている。このような技術の一例として、例えば、非特許文献１には、ＨＳＡ（Header Space Analysis）と呼ばれる手法が記載されている。このＨＳＡでは、パケットヘッダがＬビットのビット列とみなされる。また、各パケットがＬ次元空間Πの或る点とみなされる。そして、パケットがその空間Π上の或る点から別の点に転送されるとみなされる。また、スイッチ装置ごとに、パケット転送ルールを示す転送関数φ: (Π×P) → Power(Π×E)が作成される。ここで、Ｘ×Ｙは、ＸとＹの直積集合を表す。また、Power(Ｘ)は、Ｘの冪集合を表す。【０００３】
ここで、Pは、ネットワーク内の物理スイッチポートの集合を表す。以降、物理スイッチポートを、単にポートとも記載する。なお、ネットワーク内において、ポートは一意に識別されるものとする。【０００４】
また、Eは、ネットワーク内のフローエントリの集合である。フローエントリは、入力ポート、マッチングパターン、アクションおよび出力ポートを表す情報で構成される。また、フローエントリは、各スイッチ装置に保持されている。スイッチ装置は、入力ポートからのパケットのヘッダがマッチングパターンにマッチすると、アクションが定義されていればアクションに基づきヘッダの書換えを行い、出力ポートへとパケットを転送する。以降、パケットヘッダのパターンを、パケットパターンとも記載する。【０００５】
転送関数φ(π，p)={(π’，e)}は、あるポートpにパケットパターンπのパケットが入力されたときに、フローエントリe にマッチし、パケットヘッダがπ’になることを示す。転送関数φの入力は、入力されたパケットのパケットパターンおよび入力ポートの組である。一つのパケットに対して、複数のパケットをコピーして転送するフローエントリがあるため、転送関数φの出力は、出力されたパケットのパケットパターンおよびマッチしたフローエントリの組の集合となる。【０００６】
ＨＳＡでは、転送関数φと、物理スイッチ間のポート接続関係を表す接続関数σ: P→Pとの組を推移的に適用することで、パケットの転送経路が求められる。そして、パケットの転送経路に従って、転送関数φを推移的に適用することで、終端スイッチポートでパケットのパケットパターンが求められる。さらに、ＨＳＡは、求めた終端スイッチポートでのパケットパターンから開始端スイッチポートにかけて経路を逆順にたどり、転送関数の逆関数φe-1:Π→Πを順次適用する。これにより、ＨＳＡは、どのようなパケットパターンのヘッダを有するパケットが開始端スイッチポートから終端スイッチポートまで到達するかを求めることができる。ただし、eは、転送関数を適用したときに適用されたフローエントリである。すなわち、転送関数がφ(π，p)={(π’， e)}であった場合、φe-1(π’)=π’’は、再度逆向きにフローエントリを適用することで、入力パケットパターンをπからπ’’に絞り込むことを示す。【０００７】
以下では、ネットワーク全体をみて外部ネットワークと接続されるポートを端点スイッチポートまたは端点と呼ぶ。また、端点に入力される入力パケットを流入パケットと呼び、端点から出力される出力パケットを流出パケットと呼ぶ。また、流入パケットが入力される端点を流入ポートとも呼び、流出パケットが出力される端点を流出ポートとも呼ぶ。また、流入パケットのパケットパターンを流入パケットパターンとも呼び、流出パケットのパケットパターンを流出パケットパターンとも呼ぶ。【０００８】
任意の流入ポートおよび流出ポートの組において、その流入パケットパターンを計算することにより、網管理者は、可達性および隔離性を検証することができる。ここでは、可達性とは、想定したパケットパターンが流入ポートから流出ポートに到達可能であることをいう。また、隔離性とは、想定外のパケットパターンが流入ポートから流出ポートに到着できないことをいう。
【先行技術文献】
【非特許文献】
【０００９】
【非特許文献１】Peyman Kazemian、George Varghese、Nick McKeown著、「Header Space Analysis: Static Checking For Networks」、NSDI’12 Proceedings of the 9th USENIX conference on Networked Systems Design and Implementation、2012年、pp.9-22
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、非特許文献１に記載された関連技術では、網の規模が大きくなると、網の端点のすべての組に対して流入パケットパターンを求めるために処理時間を要するという課題がある。【００１１】
その理由は、網内にある端点スイッチポートのすべての組み合わせについての経路について転送関数を推移的に適用する必要があるためである。網の規模を例えば網内のスイッチ台数とした場合、網の端点の数および網の直径は、網の規模に比例すると近似される。ＨＳＡの場合、まず、開始端点から終端点まで転送関数を適用し（順送り処理）、その後、終端点から開始端点まで経路をさかのぼるように転送逆関数を適用する（逆送り処理）。このとき、転送逆関数の適用回数は、端点の組み合わせ（すなわち網の規模の二乗）に網の直径（網の規模に比例）を掛け合わせた規模に比例するので、網の規模の三乗に比例する。【００１２】
本発明は、上述の課題を解決するためになされたもので、網に対する流入パケットパターンを計算する処理時間をより短くする技術を提供することを目的とする。
【課題を解決するための手段】
【００１３】
上記目的を達成するために、本発明の網検証装置は、検証対象ネットワーク内の各スイッチにおけるパケットの転送規則および前記検証対象ネットワークの物理網トポロジ情報を取得する検証対象ネットワーク情報取得手段と、前記転送規則に基づいて、前記スイッチの有するポートから出力されるパケットパターンから該スイッチの対応するポートに入力されるパケットパターンを逆算するバックトレース関数を生成するバックトレース関数生成手段と、前記物理網トポロジ情報および前記転送規則に基づいて、前記検証対象ネットワークに外部からのパケットが流入するスイッチのポート（流入ポート）から外部へのパケットが流出するスイッチのポート（流出ポート）までをつなぐポートの列を表す物理リンクパスを取得する物理リンクパス取得手段と、前記物理リンクパス上の途中ポートから前記流出ポートに到達するパケットの該途中ポートにおけるパケットパターンを記憶するパケットパターンキャッシュを利用しながら、前記流出ポートから前記流入ポートに向けて前記バックトレース関数を順次適用することにより、前記流出ポートに到達するパケットの前記流入ポートでのパケットパターンを算出するバックトレース関数適用手段と、前記バックトレース関数適用手段による処理結果を出力する検証結果出力手段と、を備える。【００１４】
また、本発明の網検証方法は、検証対象ネットワーク内の各スイッチにおけるパケットの転送規則および前記検証対象ネットワークの物理網トポロジ情報を取得し、前記転送規則に基づいて、前記スイッチの有するポートから出力されるパケットパターンから該スイッチの対応するポートに入力されるパケットパターンを逆算するバックトレース関数を生成し、前記物理網トポロジ情報および前記転送規則に基づいて、前記検証対象ネットワークに外部からのパケットが流入するスイッチのポート（流入ポート）から外部へのパケットが流出するスイッチのポート（流出ポート）までをつなぐポートの列を表す物理リンクパスを取得し、前記物理リンクパス上の途中ポートから前記流出ポートに到達するパケットの該途中ポートにおけるパケットパターンを記憶するパケットパターンキャッシュを利用しながら、前記流出ポートから前記流入ポートに向けて前記バックトレース関数を順次適用することにより、前記流出ポートに到達するパケットの前記流入ポートでのパケットパターンを算出し、前記流出ポートに到達するパケットの前記流入ポートでのパケットパターンを出力する。【００１５】
また、本発明のコンピュータ・プログラムは、検証対象ネットワーク内の各スイッチにおけるパケットの転送規則および前記検証対象ネットワークの物理網トポロジ情報を取得する検証対象ネットワーク情報取得ステップと、前記転送規則に基づいて、前記スイッチの有するポートから出力されるパケットパターンから該スイッチの対応するポートに入力されるパケットパターンを逆算するバックトレース関数を生成するバックトレース関数生成ステップと、前記物理網トポロジ情報および前記転送規則に基づいて、前記検証対象ネットワークに外部からのパケットが流入するスイッチのポート（流入ポート）から外部へのパケットが流出するスイッチのポート（流出ポート）までをつなぐポートの列を表す物理リンクパスを取得する物理リンクパス取得ステップと、前記物理リンクパス上の途中ポートから前記流出ポートに到達するパケットの該途中ポートにおけるパケットパターンを記憶するパケットパターンキャッシュを利用しながら、前記流出ポートから前記流入ポートに向けて前記バックトレース関数を順次適用することにより、前記流出ポートに到達するパケットの前記流入ポートでのパケットパターンを算出するバックトレース関数適用ステップと、前記バックトレース関数適用ステップでの処理結果を出力する検証結果出力ステップと、をコンピュータ装置に実行させる。
【発明の効果】
【００１６】
本発明は、網に対する流入パケットパターンを計算する処理時間をより短くする技術を提供することができる。
【図面の簡単な説明】
【００１７】
【図１】本発明の第１の実施の形態としての網検証装置の機能ブロック図である。
【図２】本発明の第１の実施の形態としての網検証装置のハードウェア構成図である。
【図３】本発明の第１の実施の形態としての網検証装置の動作を説明するフローチャートである。
【図４】本発明の第２の実施の形態としての網検証装置の機能ブロック図である。
【図５】本発明の第２の実施の形態としての網検証装置の動作の概略を説明するフローチャートである。
【図６】本発明の第２の実施の形態としての網検証装置が再帰的に実行するパケットパターン算出処理の詳細を説明するフローチャートである。
【図７】本発明の第２の実施の形態における検証対象ネットワークの一例を示す図である。
【図８】本発明の第２の実施の形態におけるフローエントリの一例を示す図である。
【図９】本発明の第２の実施の形態におけるパケットパターンキャッシュに格納される情報の一例を示す図である。
【図１０】本発明の第２の実施の形態において物理リンクパスの流入パケットパターンを求める処理を説明する模式図である。
【図１１】本発明の第２の実施の形態において他の物理リンクパスの流入パケットパターンを求める処理を説明する模式図である。
【図１２】関連技術において物理リンクパスの流入パケットパターンを求める処理を説明する模式図である。
【図１３】本発明の第２の実施の形態および関連技術の検証時間を比較するグラフである。
【図１４】本発明の第２の実施の形態の効果を説明するための模式図である。
【図１５】関連技術を説明するための模式図である。
【発明を実施するための形態】
【００１８】
以下、本発明の実施の形態について、図面を参照して詳細に説明する。
【００１９】
（第１の実施の形態）
本発明の第１の実施の形態としての網検証装置１の機能ブロック構成を図１に示す。図１において、網検証装置１は、検証対象ネットワーク情報取得部１１と、バックトレース関数生成部１２と、物理リンクパス取得部１３と、バックトレース関数適用部１４と、検証結果出力部１５とを含む。
【００２０】
また、網検証装置１は、検証対象ネットワーク９００と通信可能に接続されている。検証対象ネットワーク９００は、１つ以上のスイッチ装置を含む。以下、スイッチ装置を、単にスイッチとも記載する。各スイッチは、１つ以上の転送規則を有している。転送規則は、自装置の任意のポートに入力されたパケットに応じて該パケットに対する処理やその出力ポート等を定めた規則である。網検証装置１は、このような検証対象ネットワーク９００を検証対象とする。
【００２１】
ここで、網検証装置１のハードウェア構成の一例を図２に示す。図２において、網検証装置１は、ＣＰＵ（Central Processing Unit）１００１と、ＲＡＭ（Random Access Memory）１００２と、ＲＯＭ（Read Only Memory）１００３と、ハードディスク等の記憶装置１００４と、ネットワークインタフェース１００５と、表示装置１００６とによって構成される。この場合、検証対象ネットワーク情報取得部１１は、次のように構成される。すなわち、この機能ブロックは、ネットワークインタフェース１００５と、ＲＯＭ１００３および記憶装置１００４に記憶されたコンピュータ・プログラムおよび各種データをＲＡＭ１００２に読み込んで実行するＣＰＵ１００１とによって構成される。また、バックトレース関数生成部１２、物理リンクパス取得部１３およびバックトレース関数適用部１４は、次のように構成される。すなわち、これらの機能ブロックは、ＲＯＭ１００３および記憶装置１００４に記憶されたコンピュータ・プログラムおよび各種データをＲＡＭ１００２に読み込んで実行するＣＰＵ１００１によって構成される。また、検証結果出力部１５は、表示装置１００６と、ＲＯＭ１００３および記憶装置１００４に記憶されたコンピュータ・プログラムおよび各種データをＲＡＭ１００２に読み込んで実行するＣＰＵ１００１とによって構成される。なお、網検証装置１およびその各機能ブロックのハードウェア構成は、上述の構成に限定されない。
【００２２】
検証対象ネットワーク情報取得部１１は、検証対象ネットワーク９００内の各スイッチにおけるパケットの転送規則および検証対象ネットワーク９００の物理網トポロジ情報を取得する。例えば、検証対象ネットワーク情報取得部１１は、ネットワークインタフェース１００５を介して検証対象ネットワーク９００にアクセスすることにより、その物理網トポロジ情報を取得可能である。また、検証対象ネットワーク情報取得部１１は、ネットワークインタフェース１００５を介して検証対象ネットワーク９００内の各スイッチにアクセスすることにより、その転送規則を取得可能である。
【００２３】
バックトレース関数生成部１２は、スイッチの転送規則に基づいて、バックトレース関数を生成する。バックトレース関数は、そのスイッチが有するポートから出力されるパケットパターンを基に該スイッチの対応するポートに入力されるパケットパターンを逆算する関数である。ここで、パケットパターンとは、パケットが有するヘッダのパターンをいう。また、パケットが出力されるポートを、以降、出力ポートとも記載する。また、出力ポートから出力されるパケットのパケットパターンを、単に出力ポートでのパケットパターンとも記載する。また、パケットが入力されるポートを、以降、入力ポートとも記載する。また、入力ポートに入力されるパケットのパケットパターンを、単に入力ポートでのパケットパターンとも記載する。
【００２４】
物理リンクパス取得部１３は、物理網トポロジ情報および転送規則に基づいて、検証対象ネットワーク９００の流入ポートから流出ポートまでをつなぐポートの列を表す物理リンクパスを取得する。ここで、流入ポートは、検証対象ネットワーク９００に外部からのパケットが流入するスイッチのポートである。流出ポートは、検証対象ネットワーク９００から外部へのパケットが流出するスイッチのポートである。物理リンクパス取得部１３は、取得した物理リンクパスのリストを、ＲＡＭ１００２または記憶装置１００４に記憶させてもよい。
【００２５】
バックトレース関数適用部１４は、パケットパターンキャッシュを利用しながら、物理リンクパスの流出ポートから流入ポートに向けてバックトレース関数を順次適用することにより、流出ポートに到達するパケットの流入ポートでのパケットパターンを算出する。ここで、パケットパターンキャッシュは、物理リンクパス上の途中ポートから流出ポートに到達するパケットの、その途中ポートにおけるパケットパターンを記憶する格納部である。例えば、パケットパターンキャッシュは、記憶装置１００４またはＲＡＭ１００２により構成可能である。
【００２６】
このとき、バックトレース関数適用部１４は、物理リンクパスの流出ポートから流出するパケットパターンとして所定の値を設定してもよい。なお、所定の値とは、想定される全てのパケットパターンを表す値であってもよい。例えば、バックトレース関数適用部１４は、所定の値を設定したパケットパターンに対して、流出ポートを有するスイッチにおいて流出ポートからパケットを出力し得る転送規則に基づくバックトレース関数を適用する。これにより、バックトレース関数適用部１４は、流出ポートを有するスイッチにおける入力ポートでのパケットパターンを逆算することができる。算出されたパケットパターンは、その物理リンクパスにおいてその入力ポートに接続される１つ前のスイッチの出力ポートから出力されるパケットパターンでもある。そこで、バックトレース関数適用部１４は、算出したパケットパターンを、前述の１つ前のスイッチの出力ポートから流出ポートに到達するパケットの該出力ポートでのパケットパターンとして、パケットパターンキャッシュに記憶させてもよい。そして、バックトレース関数適用部１４は、１つ前のスイッチの出力ポートでのパケットパターンに対して、１つ前のスイッチにおいてその出力ポートからパケットを出力し得る転送規則に基づくバックトレース関数を適用する。さらに、バックトレース関数適用部１４は、バックトレース関数の適用によって算出されたパケットパターンを、パケットパターンキャッシュに記憶させることを、流出ポートから流入ポートにかけてのスイッチ毎に繰り返す。これにより、バックトレース関数適用部１４は、ある物理リンクパスの流入ポートでのパケットパターンを算出可能である。
【００２７】
また、その算出において、物理リンクパスの途中ポートについて流出ポートに到達する算出済みのパケットパターンが、パケットパターンキャッシュに記憶されている場合、バックトレース関数適用部１４は、次のように動作する。すなわち、バックトレース関数適用部１４は、その算出済みのパケットパターンを、物理リンクパスの流入パケットパターンを求める際に、再利用する。この場合、バックトレース関数適用部１４は、流出ポートからの逆算を省略し、途中ポートについて算出済みのパケットパターンを用いて、途中ポートから流入ポートに向けてバックトレース関数を順次適用すればよい。また、この場合も、バックトレース関数適用部１４は、バックトレース関数を順次適用する処理過程で、パケットパターンキャッシュに記憶されていない途中ポートのパケットパターンキャッシュを算出した場合は、パケットパターンキャッシュに記憶させればよい。
【００２８】
検証結果出力部１５は、バックトレース関数適用部１４による処理結果を出力する。具体的には、例えば、検証結果出力部１５は、流入ポートでのパケットパターンと、流出ポートとの組み合わせを表す情報を出力してもよい。なお、バックトレース関数適用部１４は、表示装置１００６等の出力装置に処理結果を出力してもよい。また、検証結果出力部１５は、記憶装置１００４に処理結果をファイル等として出力してもよい。また、検証結果出力部１５は、ネットワークインタフェース１００５を介して接続された他の装置（図示せず）に対して、処理結果を出力してもよい。
【００２９】
以上のように構成された網検証装置１の動作について、図３を参照して説明する。
【００３０】
図３において、まず、検証対象ネットワーク情報取得部１１は、検証対象ネットワーク９００の物理網トポロジ情報および各スイッチの転送規則を取得する（ステップＡ１）。
【００３１】
次に、バックトレース関数生成部１２は、ステップＡ１で取得された各スイッチの転送規則に基づいて、バックトレース関数を生成する（ステップＡ２）。前述したように、バックトレース関数は、各スイッチの有するポートから出力されるパケットパターンから、該スイッチの対応するポートに入力されるパケットパターンを逆算する関数である。
【００３２】
次に、物理リンクパス取得部１３は、ステップＡ１で取得された物理網トポロジ情報および転送規則に基づいて、検証対象ネットワーク９００の流入ポートから流出ポートまでをつなぐポートの列を表す物理リンクパスを取得する（ステップＡ３）。
【００３３】
次に、バックトレース関数適用部１４は、各物理リンクパスについて、パケットパターンキャッシュを利用しながら、流出ポートから流入ポートに向けてバックトレース関数を順次適用する。これにより、バックトレース関数適用部１４は、流出ポートに到達するパケットの流入ポートでのパケットパターンを算出する。
【００３４】
具体的には、バックトレース関数適用部１４は、物理リンクパス上の途中ポートからのパケットパターンがパケットパターンキャッシュに記憶されていない場合は（ステップＡ４でＮｏ）、次のように動作する。この場合、バックトレース関数適用部１４は、流出ポートから流入ポートに向けて、スイッチの出力ポートからのパケットパターンに対して、対応する転送規則に基づくバックトレース関数を適用する処理を繰り返す。すなわち、バックトレース関数適用部１４は、そのスイッチの入力ポートでのパケットパターンを逆算する処理を流入ポートに向けて繰り返す。なお、このとき、バックトレース関数適用部１４は、流出ポートのパケットパターンとして、前述のように所定の値を適用してもよい。また、このとき、バックトレース関数適用部１４は、バックトレース関数を順次適用する過程で算出した各パケットパターンを、パケットパターンキャッシュに記憶しておく（ステップＡ５）。詳細には、バックトレース関数の適用過程で算出された各パケットパターンは、そのパケットパターンが出力されるポートについて流出ポートに到達するパケットパターンとして、パケットパターンキャッシュに記憶される。
【００３５】
また、バックトレース関数適用部１４は、物理リンクパス上の途中ポートからのパケットパターンがパケットパターンキャッシュに記憶されている場合は（ステップＡ４でＹｅｓ）、次のように動作する。この場合、バックトレース関数適用部１４は、途中ポートから流入ポートに向けて、スイッチの出力ポートからのパケットパターンに対して、対応する転送規則に基づくバックトレース関数を適用する処理を繰り返す。すなわち、バックトレース関数適用部１４は、そのスイッチの入力ポートでのパケットパターンを逆算する処理を流入ポートにかけて繰り返す。また、このときも、バックトレース関数適用部１４は、バックトレース関数を順次適用する過程で算出した各パケットパターンを、パケットパターンキャッシュに記憶しておく（ステップＡ６）。この場合も、バックトレース関数の適用過程で算出された各パケットパターンは、そのパケットパターンが出力されるポートについて流出ポートに到達するパケットパターンとして、パケットパターンキャッシュに記憶される。
【００３６】
ステップＡ５またはＡ６の処理を各物理リンクパスについて完了すると、検証結果出力部１５は、バックトレース関数適用部１４による処理結果を出力する（ステップＡ７）。具体的には、前述のように、検証結果出力部１５は、流入ポートでのパケットパターンと、流出ポートとの組み合わせを表す情報を出力してもよい。
【００３７】
以上で、網検証装置１は、動作を終了する。
【００３８】
次に、本発明の第１の実施の形態の効果について述べる。
【００３９】
本発明の第１の実施の形態としての網検証装置は、網に対する流入パケットパターンを計算する処理時間をより短くすることができる。
【００４０】
その理由について説明する。本実施の形態では、検証対象ネットワーク情報取得部が、検証対象ネットワークの物理網トポロジ情報および各スイッチの転送規則を取得する。そして、バックトレース関数生成部が、転送規則に基づいて、スイッチの有するポートから出力されるパケットパターンから該スイッチの対応するポートに入力されるパケットパターンを逆算するバックトレース関数を生成するからである。また、物理リンクパス取得部が、物理網トポロジ情報および転送規則に基づいて、検証対象ネットワークにおける流入ポートから流出ポートまでの物理リンクパスを取得する。そして、バックトレース関数適用部が、パケットパターンキャッシュを利用しながら、流出ポートから流入ポートに向けてバックトレース関数を順次適用する。このとき、バックトレース関数適用部は、バックトレース関数の適用過程で算出した各パケットパターンを、そのパケットパターンが出力される途中ポートから流出ポートに到達するパケットパターンとして、パケットパターンキャッシュに記憶する。これにより、バックトレース関数適用部が、流出ポートに到達するパケットの流入ポートでのパケットパターンを算出するからである。
【００４１】
このように、本実施の形態は、物理リンクパスの流入パケットパターンを算出する際に、その物理リンクパスの途中ポートからのパケットパターンがパケットパターンキャッシュに記憶されていれば、算出済みのパケットパターンを利用する。つまり、本実施の形態は、流出ポートから該途中ポートまでのバックトレース関数の適用を省略することができる。その結果、本実施の形態は、一回計算したバックトレース関数の計算結果を再利用することで、網内におけるバックトレース関数の計算を省力化することができる。
【００４２】
（第２の実施の形態）
次に、本発明の第２の実施の形態について図面を参照して詳細に説明する。なお、本実施の形態の説明において参照する各図面において、本発明の第１の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して本実施の形態における詳細な説明を省略する。
【００４３】
まず、本発明の第２の実施の形態としての網検証装置２の構成を図４に示す。図４において、網検証装置２は、本発明の第１の実施の形態としての網検証装置１に対して、バックトレース関数生成部１２に替えてバックトレース関数生成部２２を備える点が異なる。また、網検証装置２は、本発明の第１の実施の形態としての網検証装置１に対して、物理リンクパス取得部１３に替えて物理リンクパス取得部２３を備える点も異なる。また、網検証装置２は、本発明の第１の実施の形態としての網検証装置１に対して、バックトレース関数適用部１４に替えてバックトレース関数適用部２４を備える点も異なる。ここで、網検証装置２およびその各機能ブロックは、図２を参照して説明した本発明の第１の実施の形態と同一のハードウェア要素によって構成可能である。ただし、網検証装置２およびその各機能ブロックのハードウェア構成は、上述の構成に限定されない。
【００４４】
また、本実施の形態では、検証対象ネットワーク情報取得部１１によって、転送規則として、入力ポート、マッチングパターン、アクションおよび出力ポートをそれぞれ表す情報を含むフローテーブルが、各スイッチから取得されるものとする。ここで、マッチングパターンは、入力ポートに入力されるパケットパターンが適合する条件を表す。また、アクションは、マッチングパターンに適合した場合の該パケットパターンの処理内容を表す。また、出力ポートは、アクションに基づく処理内容が施されたパケットの出力先のポートを表す。
【００４５】
バックトレース関数生成部２２は、バックトレース関数を生成する。ここでは、バックトレース関数は、スイッチの出力ポートのパケットパターンを入力として、該当するフローエントリのマッチングパターンおよびアクションに基づいて入力ポートでのパケットパターンを出力する関数である。また、バックトレース関数生成部２２は、後述のバックトレース関数適用部２４による処理過程で動作するよう構成される。
【００４６】
物理リンクパス取得部２３は、本発明の第１の実施の形態における物理リンクパス取得部１３と同様に、物理網トポロジ情報および転送規則に基づいて、物理リンクパスを取得する。ただし、物理リンクパス取得部２３は、その機能の一部が、後述のバックトレース関数適用部２４による処理過程で動作するよう構成される。
【００４７】
バックトレース関数適用部２４は、パケットパターン算出処理を再帰的に実行する。具体的には、パケットパターン算出処理において、バックトレース関数適用部２４は、スイッチにおける入力ポートを表す情報を入力とする。そして、バックトレース関数適用部２４は、該スイッチにおいて該入力ポートに対応する出力ポートから流出ポートに到達するパケットの該出力ポートでのパケットパターンに対して、バックトレース関数を適用する。これにより、バックトレース関数適用部２４は、該入力ポートでのパケットパターンを表す情報を算出し、出力する。
【００４８】
また、バックトレース関数適用部２４は、パケットパターン算出処理を実行する際に、入力ポートに対応する出力ポートでのパケットパターンがパケットパターンキャッシュに記憶されていれば、該パケットパターンを再利用する。すなわち、この場合、バックトレース関数適用部２４は、パケットパターンキャッシュに記憶されているパケットパターンに対して、バックトレース関数を適用し、出力する。また、バックトレース関数適用部２４は、入力ポートに対応する出力ポートでのパケットパターンがパケットパターンキャッシュに記憶されていなければ、次の処理を行うよう構成される。すなわち、この場合、バックトレース関数適用部２４は、その出力ポートに対向する次のスイッチにおける入力ポートを表す情報を入力として、パケットパターン算出処理を再帰的に実行する。そして、バックトレース関数適用部２４は、再帰的に実行したパケットパターン算出処理から得られたパケットパターンを、出力ポートでのパケットパターンとして、パケットパターンキャッシュに記憶させる。また、バックトレース関数適用部２４は、再帰的に実行したパケットパターン算出処理から得られたパケットパターンに対して、バックトレース関数を適用し、出力する。
【００４９】
また、バックトレース関数適用部２４は、流出ポートから出力されるパケットパターンとして、所定の値を設定する。所定の値とは、例えば、パケットヘッダを構成する各属性の値がその値域全体をとりうることを表すパケットパターンであってもよい。
【００５０】
また、バックトレース関数適用部２４は、パケットパターン算出処理内で、バックトレース関数生成部２２を用いてバックトレース関数を生成してもよい。
【００５１】
また、バックトレース関数適用部２４は、パケットパターン算出処理内で、物理リンクパス取得部２３を用いて物理リンクパスを探索しながら、パケットパターン算出処理を再帰的に実行してもよい。
【００５２】
また、バックトレース関数適用部２４は、パケットパターン算出処理の出力として、入力ポートのパケットパターンと、探索した物理リンクパスの流出ポートとの組の集合を出力してもよい。また、この場合、バックトレース関数適用部２４は、入力ポートのパケットパターンと流出ポートとの組を、入力ポートの１つ手前のスイッチの出力ポートに対応付けて、パケットパターンキャッシュに記憶させればよい。
【００５３】
以上のように構成された網検証装置２の動作について、図５〜図６を参照して詳細に説明する。
【００５４】
まず、網検証装置２の動作の概略を図５に示す。
【００５５】
図５において、まず、検証対象ネットワーク情報取得部１１は、本発明の第１の実施の形態と同様にステップＡ１を実行し、検証対象ネットワーク９００から物理網トポロジ情報および転送規則を得る。ただし、ここでは、転送規則として、上述のフローテーブルが取得される。
【００５６】
次に、物理リンクパス取得部２３は、物理網トポロジ情報に基づいて、検証対象ネットワーク９００において、物理リンクパスの先頭のポート（流入ポート）となり得るポートｐの集合を取得する（ステップＢ２）。
【００５７】
次に、バックトレース関数適用部２４は、流入ポートｐ毎に、ステップＢ３〜Ｂ４の処理を繰り返す。
【００５８】
ここでは、まず、バックトレース関数適用部２４は、流入ポートｐを入力としてパケットパターン算出処理を呼び出すことにより、流入ポートｐにおけるパケットパターンπと、そのときの流出ポートpgとの組の集合を得る（ステップＢ３）。以降、流入ポートｐにおけるパケットパターンπと、そのときの流出ポートpgとの組を、π＠pg、または、(π, pg)とも記載する。
【００５９】
次に、検証結果出力部１５は、検証結果として、流入ポートｐにおけるパケットパターンπおよび流出ポートpgの組の集合を表す情報を出力する（ステップＢ４）。
【００６０】
ステップＢ３〜Ｂ４の処理を、各流入ポートについて完了すると、網検証装置２は、動作を終了する。
【００６１】
次に、ステップＢ３におけるパケットパターン算出処理の詳細を図６に示す。ここで、前述のように、パケットパターン算出処理の入力は、入力ポートｐである。出力は、流出ポートpgと、ポートｐから流出ポートpgに到達するパケットのポートｐでのパケットパターンπとの組 (π, pg)の集合δである。
【００６２】
ここでは、まず、バックトレース関数適用部２４は、戻り値用の作業変数δに空集合を代入する（ステップＣ１）。
【００６３】
次に、バックトレース関数適用部２４は、物理リンクパス取得部２３を用いて、ポートｐを入力ポートとするフローエントリの集合Eを得る（ステップＣ２）。
【００６４】
次に、バックトレース関数適用部２４は、Eの要素であるフローエントリ e∈Eごとに、以下のステップＣ３からＣ１３までの処理を繰り返し実行する。
【００６５】
すなわち、ここでは、まず、バックトレース関数適用部２４は、バックトレース関数生成部２２を用いて、フローエントリeに基づくバックトレース関数ζeを生成する（ステップＣ３）。バックトレース関数ζeの詳細については後述する。
【００６６】
次に、バックトレース関数適用部２４は、物理リンクパス取得部２３を用いて、フローエントリeの出力ポートp'を得る（ステップＣ４）。
【００６７】
次に、バックトレース関数適用部２４は、出力ポートp'に関して、それに対応するパケットパターンおよび流出ポートの組(π’、pg)が、パケットパターンキャッシュに存在するか否かを確認し、あれば取得する（ステップＣ５）。
【００６８】
ここで、パケットパターンキャッシュ内に該当するデータがない場合、バックトレース関数適用部２４は、前述の出力ポートp'が終端スイッチポート（流出ポート）か否かを調べる（ステップＣ６）。
【００６９】
ここで、出力ポートp'が終端スイッチポートである場合、バックトレース関数適用部２４は、出力ポートp'からのパケットパターンとして、全属性の値がTであるパケットパターンπTを設定する（ステップＣ７）。
【００７０】
次に、バックトレース関数適用部２４は、出力ポートp'に対応付けて、パケットパターンπTおよび流出ポートp'の組を、パケットパターンキャッシュに記憶させる（ステップＣ８）。
【００７１】
次に、バックトレース関数適用部２４は、出力ポートp'からのパケットパターンπTに対してバックトレース関数ζeを適用することにより、入力ポートｐのパケットパターンζe(πT)を得る。そして、バックトレース関数適用部２４は、ζe(πT)および流出ポートp’の組を、戻り値δに追加する（ステップＣ９）。
【００７２】
そして、バックトレース関数適用部２４は、次のフローエントリeについて、ステップＣ３からの処理を繰り返す。
【００７３】
一方、ステップＣ６において、出力ポートp'が終端スイッチポート（流出ポート）でない場合、バックトレース関数適用部２４は、物理リンクパス取得部２３を用いて、出力ポートp'に対して物理リンクの対向であるポートp''を求める（ステップＣ１０）。
【００７４】
次に、バックトレース関数適用部２４は、ポートp''を入力としてパケットパターン算出処理を呼び出す。これにより、バックトレース関数適用部２４は、ポートp''を入力ポートとした場合の、流出ポートpgおよびp''に流入するパケットパターンπ'の組 (π', pg)の集合を得る（ステップＣ１１）。
【００７５】
次に、バックトレース関数適用部２４は、出力ポートp'をキーとして、ステップＣ１１で得られた(π',pg)の集合を、パケットパターンキャッシュに記憶させる（ステップＣ１２）。
【００７６】
次に、バックトレース関数適用部２４は、出力ポートp'からのパケットパターンπ'に対してバックトレース関数ζeを適用することにより、入力ポートpのパケットパターンζe(π')を得る。そして、バックトレース関数適用部２４は、ζe(π')および流出ポートpgの組を、戻り値δに追加する（ステップＣ１３）。
【００７７】
そして、バックトレース関数適用部２４は、次のフローエントリeについて、ステップＣ３からの処理を繰り返す。
【００７８】
また、ステップＣ５において、パケットパターンキャッシュ内に該当するデータがある場合、バックトレース関数適用部２４は、パケットパターンキャッシュ内の該当するデータ(π',pg)を用いて、ステップＣ１３の処理を実行する。
【００７９】
そして、バックトレース関数適用部２４は、次のフローエントリeについて、ステップＣ３からの処理を繰り返す。
【００８０】
ステップＣ２で得られたフローエントリの集合Eに属する各フローエントリeについてステップＣ３〜Ｃ１３の処理を完了すると、バックトレース関数適用部２４は、値δを返して、このパケットパターン算出処理を呼び出した処理に戻る。
【００８１】
以上で、パケットパターン算出処理の詳細な説明を終了する。
【００８２】
なお、ステップＣ３において生成されるバックトレース関数ζeについて説明する。バックトレース関数適用部２４は、フローエントリeに基づいて、例えば、以下のように定義されるバックトレース関数ζeを生成してもよい。
【００８３】
前述のように、フローエントリeは、入力ポート、マッチングパターン、アクション、出力ポートをそれぞれ表す４つの情報を含んで構成されている。
【００８４】
ここで、マッチングパターンは、属性値Am_1, ・・・, Am_nで構成されるとする。また、アクションは、属性値Aa_1, ・・・, Aa_nで構成されるとする。なお、マッチングパターンの属性値 Am_iは、値すなわち点集合{v}、その値域の全集合T、IPサブネットなどの値域の部分集合r、空集合⊥、または、属性値A'm_iから属性値A''m_iを引いた差集合 (A'm_i − A''m_i)を取り得る。アクションの属性値Aa_iは、値v、または、その値域の全集合Tをとる。
【００８５】
また、パケットパターンπは、属性値Aπ_1, ・・・, Aπ_nで構成されるとする。パケットパターンの属性値Aπ_iは、値v、その値域の全集合T、IPサブネットなどの値域の部分集合r、空集合⊥、属性値A'm_iから属性値A''m_iを引いた差集合(A'm_i−A''m_i)、または、属性値A'm_iと属性値A''m_iの和集合(A'm_i∪A''m_i)をとる。
【００８６】
このとき、フローエントリeに基づくバックトレース関数ζeは、次式（１）のように定義される。
ζe((Aπ_1, ・・・, Aπ_n)) := (μ(Am_1, α(Aa_1, Aπ_1)), ・・・, μ(Am_n, α(Aa_n, Aπ_n)))・・・（１）
ここで、式（１）における関数α: (アクションの属性値)×(パケットヘッダの属性値のパターン)→(パケットパターン)は、以下の表１の通り定義される。
【００８７】
また、式（１）における関数μ：(マッチングルールの属性値)×(パケットヘッダの属性値のパターン)→(パケットパターン)は、表２の通り定義される。
【００８８】
【表１】
0006520946.tif 000002
【００８９】
【表２】
0006520946.tif 000003
【００９０】
このようなバックトレース関数の定義により、流入ポートから流出ポートへのフォワードトレース経路とは独立して、流出ポートからのバックトレース経路のみに依存して、各出力ポートでのパケットパターンが定まる。その結果、パケットパターンのキャッシュデータの再利用が可能となっている。
【００９１】
以上で、ステップＣ３で生成されるバックトレース関数の定義の一例についての説明を終了する。
【００９２】
次に、具体例を用いて本発明の第２の実施の形態の動作を説明する。
【００９３】
図７に、具体例で用いる検証対象ネットワーク９０１を示す。検証対象ネットワーク９０１は、３台のスイッチsw4、sw5、sw6で構成されている。また、sw4は、ポートp1,p2,p4を有し、sw5は、ポートp1,p2,p3を有し、sw6は、ポートp1,p2,p3を有する。以下、スイッチswiのポートpiを、swi_piとも記載する。検証対象ネットワーク９０１において、端点となるポートは、sw5_p2、sw5_p3、sw6_p2、sw6_p3、sw4_p4である。また、ポートsw4_p4は、検証対象ネットワーク９０１外のスイッチsw2に接続されている。また、ポートsw5_p2、sw5_p3、sw6_p2、sw6_p3は、それぞれ、検証対象ネットワーク９０１外のレイヤ２スイッチ（L2SW）に接続されている。なお、各レイヤ２スイッチは、各ポートに図示のＶＬＡＮ ＩＤ（Virtual Local Area Network ID）が設定されている。また、各レイヤ２スイッチは、図示のＭＡＣアドレス（Media Access Control address）およびＩＰアドレス（Internet Protocol address）を有する装置に接続されている。なお、図７において、mac=miは、その装置のＭＡＣアドレスがmiであることを表し、IP=aiは、その装置に設定されたＩＰアドレスがaiであることを表している。また、スイッチsw4のポートp1のＭＡＣアドレスはm9であり、スイッチsw4のポートp2のＭＡＣアドレスはm10である。
【００９４】
また、この検証対象ネットワーク９０１でのフローエントリの一部は、図８のように定義されているとする。図８において、各行は、スイッチsw4〜sw6が有するフローエントリを表す。また、→の左側は、入力ポートおよびマッチングパターンを表し、右側は、アクションおよび出力ポートを表している。例えば、スイッチsw6の１行目のフローエントリは、sw6のポートp1から入力されたパケットの宛先MACアドレス (mac_da)が m8 で、VLAN IDを表すvlan属性が3ならば、sw6のポートp3にパケットを転送することを示す。また、スイッチsw4の１行目のフローエントリは、sw4のポートp1から入力されたパケットの宛先IPアドレス (ip_da)が a8ならば、宛先MACアドレスをm8に書換え、sw4のポートp2にパケットを転送することを示す。
【００９５】
このような検証対象ネットワーク９０１において、ここでは、バックトレース関数適用部２４は、まず、sw5_p2を流入ポートとする検証を行うとする。そこで、バックトレース関数適用部２４は、sw5_p2を入力としてパケットパターン算出処理を実行する（ステップＢ３）。なお、以降、swi_piを入力とするパケットパターン算出処理を、パケットパターン算出処理（swi_pi）とも記載する。
【００９６】
このとき、パケットパターンキャッシュには、sw5_p2を入力ポートとするフローエントリの出力ポートsw5_p1についてパケットパターンが記憶されていないとする（ステップＣ５でＮｏ）。また、出力ポートsw5_p1は終端点ポートではない（ステップＣ６でＮｏ）。そこで、バックトレース関数適用部２４は、パケットパターン算出処理（sw5_p2）中で、出力ポートsw5_p1に対向するsw4_p1を入力としてパケットパターン算出処理（sw4_p1）を再帰的に呼び出す（ステップＣ１１）。
【００９７】
このとき、パケットパターンキャッシュには、sw4_p1を入力ポートとするフローエントリの出力ポートsw4_p2についてパケットパターンが記憶されていないとする（ステップＣ５でＮｏ）。また、出力ポートsw4_p2は終端点ポートではない（ステップＣ６でＮｏ）。そこで、バックトレース関数適用部２４は、パケットパターン算出処理（sw4_p1）中で、sw4_p2に対向するsw6_p1を入力としてパケットパターン算出処理（sw6_p1）を再帰的に呼び出す（ステップＣ１１）。
【００９８】
ここで、バックトレース関数適用部２４は、パケットパターン算出処理（sw6_p1）中で、そのフローエントリeの１つに関してその出力ポートp'としてsw6_p3を得る（ステップＣ４）。ここで、sw6_p3についてのパケットパターンはパケットパターンキャッシュに記憶されていないが（ステップＣ５でＮｏ）、sw6_p3は、終端点ポート（流出ポート）である（ステップＣ６でＹｅｓ）。そこで、バックトレース関数適用部２４は、パケットパターンπTと流出ポートsw6_p3の組πT@sw6_p3を、sw6_p3に対応付けてパケットパターンキャッシュに記憶させる（ステップＣ７〜Ｃ８）。
【００９９】
ここでは、パケットパターンが、mac_da, vlan,およびip_daの３つの属性を持つと仮定し、πT =(mac_da=T, vlan=T, ip_da=T)と記載する。なお、本来パケットパターンはさらに多種の属性を持つことがあるが、ここでは簡単のため、これら３つの属性を有するものと仮定している。前述のように、Tは、属性がとり得る値域の全集合である。この場合、パケットパターンキャッシュには、図９に示すデータＡが記憶されたことになる。
【０１００】
そして、バックトレース関数適用部２４は、πT@sw6_p3に対して、このときのフローエントリeに関するバックトレース関数ζeを適用し、ζe(πT)@sw6_p3を求める。この計算結果は以下の通りとする。
{(mac_da=m8, vlan=3, ip_da=T)@sw6_p3, 
(mac_da=m7, vlan=2, ip_da=T)@sw6_p3}
そして、バックトレース関数適用部２４は、上記の計算結果を、パケットパターン算出処理（sw6_p1）の戻り値δに追加する（ステップＣ９）。
【０１０１】
次に、バックトレース関数適用部２４は、パケットパターン算出処理（sw6_p1）中で、次のフローエントリeに関してその出力ポートp'としてsw6_p2を得る（ステップＣ４）。ここで、sw6_p2についてのパケットパターンはパケットパターンキャッシュに記憶されていないが（ステップＣ５でＮｏ）、sw6_p2は、終端点ポート（流出ポート）である（ステップＣ６でＹｅｓ）。そこで、バックトレース関数適用部２４は、πT@sw6_p2を、sw6_p2に対応付けてパケットパターンキャッシュに記憶させる（ステップＣ７〜Ｃ８）。これにより、パケットパターンキャッシュには、図９に示すデータＢが記憶されたことになる。
【０１０２】
そして、バックトレース関数適用部２４は、πT@sw6_p2に対して、このときのフローエントリeに関するバックトレース関数ζeを適用し、ζe(πT)@sw6_p2を求める。この計算結果は以下の通りとする。
{(mac_da=m6, vlan=3, ip_da=T)@sw6_p2,
(mac_da=m5, vlan=2, ip_da=T)@sw6_p2}
そして、バックトレース関数適用部２４は、上記の計算結果を、パケットパターン算出処理（sw6_p1）の戻り値δに追加する（ステップＣ９）。
【０１０３】
パケットパターン算出処理（sw6_p1）において、sw6_p1を入力ポートとする他のフローエントリがないものとする。したがって、パケットパターン算出処理（sw6_p1）の戻り値δは、以下の通りとなる。
{(mac_da=m8, vlan=3, ip_da=T)@sw6_p3, 
(mac_da=m7, vlan=2, ip_da=T)@sw6_p3,
(mac_da=m6, vlan=3, ip_da=T)@sw6_p2,
(mac_da=m5, vlan=2, ip_da=T)@sw6_p2}
ここで、パケットパターン算出処理（sw6_p1）の戻り値は、パケットパターン算出処理（sw4_p1）の処理におけるステップＣ１１の結果である。そこで、バックトレース関数適用部２４は、上述の戻り値δを、sw4_p2 をキーとして、パケットキャッシュパターンに記憶させる（ステップＣ１２）。これにより、パケットパターンキャッシュには、図９に示すデータＣが記憶されたことになる。
【０１０４】
次に、バックトレース関数適用部２４は、パケットパターン算出処理（sw6_p1）の戻り値に対して、このときのフローエントリeに関するバックトレース関数ζeを適用する。この計算結果は以下の通りとする。
{(mac_da=T, vlan=3, ip_da=a8)@sw6_p3，
(mac_da=T, vlan=2, ip_da=a7)@sw6_p3， 
(mac_da=T, vlan=3, ip_da=a6)@sw6_p2，
(mac_da=T, vlan=2, ip_da=a5)}@sw6_p2}
そして、バックトレース関数適用部２４は、この値を、パケットパターン算出処理（sw4_p1）の戻り値δに加える（ステップＣ１３）。
【０１０５】
パケットパターン算出処理（sw4_p1）において、sw4_p1を入力ポートとする他のフローエントリがないとする。したがって、上記のδの値が、パケットパターン算出処理（sw4_p1）の戻り値となる。
【０１０６】
ここで、パケットパターン算出処理（sw4_p1）の戻り値は、パケットパターン算出処理（sw5_p2）の処理におけるステップＣ１１の結果である。そこで、バックトレース関数適用部２４は、上述の戻り値δを、sw5_p1 をキーとして、パケットキャッシュパターンに記憶させる（ステップＣ１２）。ここで、パケットパターンキャッシュには、図９に示すデータＤが記憶されたことになる。
【０１０７】
次に、バックトレース関数適用部２４は、パケットパターン算出処理（sw4_p1）の戻り値に対して、このときのフローエントリeに関するバックトレース関数ζeを適用する。この計算結果は以下の通りとする。
{{(mac_da=m9, vlan=3, ip_da=a8)@sw6_p3，
(mac_da=m9, vlan=2, ip_da=a7)@sw6_p3，
(mac_da=m9, vlan=3, ip_da=a6)@sw6_p2，
(mac_da=m9, vlan=2, ip_da=a5)@sw6_p2}
そして、バックトレース関数適用部２４は、この値を、パケットパターン算出処理（sw5_p2）の戻り値δに加える（ステップＣ１３）。
【０１０８】
パケットパターン算出処理（sw5_p2）において、sw5_p2を入力ポートとする他のフローエントリがないとする。したがって、上記のδの値が、パケットパターン算出処理（sw5_p2）の戻り値となる。
【０１０９】
このようにして、バックトレース関数適用部２４は、流入ポートsw5_p2での流入パケットパターンおよび流出ポートの組を求めることができた。
【０１１０】
次に、検証結果表示部２５は、上記流入ポートsw5_p2での流入パケットパターンおよび流出ポートの組に基づいて、以下のように検証結果（１）〜（３）を出力する。
検証結果（１）
流入ポートsw5_p2に、条件Ａを満たすパケットが流入した場合、必ずsw6_p3からパケットが流出する。
ここで、条件Ａとは、
宛先MACアドレス(mac_da)がm9、かつ、VLAN ID(vlan)が3、かつ、IPアドレス(ip_da)がa8、
または、
宛先MACアドレス(mac_da)がm9、かつ、VLAN ID(vlan)が2、かつ、IPアドレス(ip_da) がa7、という条件である。
検証結果（２）
流入ポートsw5_p2に、条件Ｂを満たすパケットが流入した場合、必ずsw6_p2からパケットが流出する。
ここで、条件Ｂとは、
宛先MACアドレス(mac_da)がm9、かつ、VLAN ID(vlan)が3、かつ、IPアドレス(ip_da)がa6、
または、
宛先MACアドレス(mac_da)がm9かつ、VLAN ID(vlan)が2、かつ、IPアドレス(ip_da)がa5、という条件である。
検証結果（３）
条件Ａを満たさないsw5_p2からの流入パケットは、sw6_p3に到着しない。また、条件Ｂを満たさないsw5_p2からの流入パケットは、sw6_p2 には到着しない。
【０１１１】
次に、同様にして、バックトレース関数適用部２４は、sw5_p3を流入ポートとする検証を行うとする。ここでは、まず、バックトレース関数適用部２４は、sw5_p3を入力としてパケットパターン算出処理（sw5_p3）を実行する。このとき、sw5_p3を入力ポートとするフローエントリの出力ポートはsw5_p1である（ステップＣ４）。ここで、パケットパターンキャッシュには、図９に示したように、出力ポートsw5_p1をキーとするパケットパターン（データＤ）が記憶されている（ステップＣ５でＹｅｓ）。
【０１１２】
そこで、バックトレース関数適用部２４は、出力ポートsw5_p1をキーとするパケットパターンをパケットパターンキャッシュから取得し、これに対して、このときのフローエントリeに関するバックトレース関数ζeを適用する。これにより、流入ポートsw5_p3での流入パケットパターンおよび流出ポートの組が算出される。
【０１１３】
このようにして、バックトレース関数適用部２４は、流入ポートsw5_p3での流入パケットパターンおよび流出ポートの組を、sw5_p1をキーとするパケットパターンキャッシュを再利用することにより求めることができた。パケットパターンキャッシュを再利用したことにより、バックトレース関数適用部２４は、sw4_p1およびsw6_p1をそれぞれ入力とするパケットパターン算出処理を再帰的に実行することなく、sw5_p3での流入パケットパターンが求めることができる。これにより、バックトレース関数適用部２４は、高速な検証を可能としている。
【０１１４】
このことを、図１０および図１１を用いて説明する。図１０に示すように、網検証装置２は、sw5_p2での流入パケットパターンを求めるため、実線の矢印に沿った順でパケットパターン算出処理を再帰的に実行した。また、その過程で、網検証装置２は、流出ポートから流入ポートに向けて、各出力ポートでのパケットパターンＡ、Ｂ、Ｃ、Ｄを順次パケットパターンキャッシュに登録した。また、図１１に示すように、網検証装置２は、sw5_p3での流入パケットパターンを求めるため、破線の矢印が示すパケットパターン算出処理を実行した。その処理中で、網検証装置２は、パケットパターンＤを再利用することにより、パケットパターン算出処理を再帰的に実行することなく、sw5_p3での流入パケットパターンが求めることができた。
【０１１５】
一方、非特許文献１に記載された関連技術を用いる場合、前述のとおり、途中計算を再利用できない。このことを、図１２を用いて説明する。図１２において、非特許文献１に記載された関連技術は、実線の矢印に示すように、ポートsw5_p2からの全経路を探索した上で、流出ポートからの逆算を行うことにより、ポートsw5_p2での流入パケットパターンを求める。このとき、開始点が違えば流出ポートでのパケットパターンが異なり、逆算される途中ポートでのパケットパターンも異なるため、開始点の異なる経路間では、途中ポートでのパケットパターンを再利用することができない。そのため、この関連技術は、ポートsw5_p2での流入パケットパターンを求めた後にsw5_p3での流入パケットパターンを求める場合であっても、破線の矢印に示すように、ポートsw5_p3からの全経路を探索した上で、流出ポートからの逆算を行う必要がある。したがって、非特許文献１に記載された関連技術では、本実施の形態に比べて検証時間が延びることになる。
【０１１６】
ここで、非特許文献１に記載された技術を実装した場合の検証時間と、本実施の形態を実装した場合の検証時間とを実機評価した結果を図１３に示す。図１３において、横軸は、検証対象ネットワーク９０１内のスイッチ群が有するフローエントリ数の合計を表す。また、縦軸は、検証に要する時間を表す。図１３によれば、約40,000フローエントリで、非特許文献１に記載された関連技術では、検証に8,000秒近く要しているが、本実施の形態では、検証に要する時間は200秒程度であり、大幅に検証時間を短縮している。
【０１１７】
以上で、本発明の第２の実施の形態の動作の具体的な説明を終了する。
【０１１８】
次に、本発明の第２の実施の形態の効果について述べる。
【０１１９】
本発明の第２の実施の形態としての網検証装置は、網に対する流入パケットパターンを計算する処理時間をさらに短くすることができる。
【０１２０】
その理由は、バックトレース関数適用部が、スイッチの出力ポートでのパケットパターンに対してバックトレース関数を適用することにより、入力ポートでのパケットパターンを出力するパケットパターン算出処理を再帰的に実行するからである。また、この際に、バックトレース関数適用部が、該出力ポートでのパケットパターンがパケットパターンキャッシュに記憶されていれば該パケットパターンを再利用するからである。また、該出力ポートでのパケットパターンがパケットパターンキャッシュに記憶されていなければ、該パケットパターンを求めるために該出力ポートに対向する次のスイッチにおける入力ポートを入力としてパケットパターン算出処理を再帰的に実行するからである。そして、この場合、バックトレース関数適用部が、再帰的に実行したパケットパターン算出処理により得られるパケットパターンをパケットパターンキャッシュに記憶させた上で、得られたパケットパターンに対してバックトレース関数を適用するからである。また、転送規則が、入力ポート、マッチングパターン、アクション、および、出力ポートをそれぞれ表す情報を含むとき、バックトレース関数生成部が、次のように動作するからである。すなわち、バックトレース関数生成部は、出力ポートのパケットパターンを入力として、マッチングパターンおよびアクションに基づいて入力ポートに入力されるパケットパターンを出力するよう、バックトレース関数を生成するからである。
【０１２１】
これにより、本実施の形態は、パケットパターンキャッシュに、物理リンクパス上の出力ポートごとに、パケットパターンおよびそのときの流出ポートの組という途中計算結果を記録することになる。ある物理リンクパス p1, ・・・, pnを例に説明する。ここで、pi（i=1〜n）は、物理リンクパス上の各スイッチswiの出力ポートを表すものとする。また、各スイッチswiは、この物理リンクパスに適用するフローエントリeiを有しているものとする。このとき、出力ポートpiにおけるバックトレース関数によるパケットパターンの計算結果は、その出力ポートpiから流出ポートpnまでの経路で適用されたフローエントリの列ei, ・・・, en のみに依存して、ζei・  ・・・  ・ζen(πT)と表される。
【０１２２】
そのため、本実施の形態は、どの流入ポートから計算を始めても、その途中ポートpiでのパケットパターンがパケットパターンキャッシュにあれば、その値を再利用できる。このように、本実施の形態は、ある流入ポートからのパケットパターンおよび流出ポートの組の算出時に途中ポートについて算出したパケットパターンおよび流出ポートの組を、他の流入ポートからのパケットパターンおよび流出ポートの組の算出時に再利用できる。その結果、本実施の形態は、同一のポートについて、パケットパターンおよび流出ポートの組の計算を１度ずつ計算すればよいことになる。
【０１２３】
一方、非特許文献１に記載された関連技術を用いて求める場合について説明する。この関連技術は、まず、流入ポートでのパケットパターンをπTとして、流出ポートでのパケットパターン(φen・  ・・・φei・・・  ・φe1) (πT)を算出する。ただし、φeiは、フローエントリeiに基づく転送関数を表す。そして、この関連技術は、流出ポートのパケットパターンに転送逆関数を適用し、途中の出力ポートpiでのパケットパターン(φ-1ei・  ・・・  ・φ-1en)・(φen・  ・・・φei・・・  ・φe1) (πT)を求める。このように、この関連技術では、途中の出力ポートpiでのパケットパターンが、流入ポートp1から出力ポートpiまでの計算結果に影響されることがわかる。したがって、流入ポートが違う経路の場合には、キャッシュを再利用することができない。
【０１２４】
次に、上述した本実施の形態の効果を、図１４および図１５に示す模式的な検証対象ネットワークを用いて説明する。
【０１２５】
まず、図１４を用いて、本実施の形態の流入パケットパターンを求める処理について模式的に説明する。図１４では、検証対象ネットワークは、５つのスイッチsw1、sw2、sw3、sw4、sw5によって構成される。また、この検証対象ネットワークには、２つの物理リンクパスがある。1つ目の物理リンクパスは、sw1のポートp1を流入ポートとして、sw2、sw4を経て、sw5のポートp0を流出ポートとする経路である。また、この経路で適用されるsw1、sw2、sw4、sw5でのフローエントリは、それぞれe1、e2、e4、e5であり、これらに基づくバックトレース関数が、ζe1、ζe2、ζe4、ζe5であるとする。また、２つ目の物理リンクパスは、sw3のポートp3を流入ポートとして、sw4を経て、sw5のポートp0を流出ポートとする経路である。また、この経路で適用されるsw3、sw4、sw5でのフローエントリは、それぞれe3、e4'、e5であり、これらに基づくバックトレース関数が、ζe3、ζe4'、ζe5であるとする。
【０１２６】
このとき、本実施の形態は、まず1つ目の物理リンクパスの流入ポートp1の流入パケットパターンを求めるとする。この場合、途中のsw1、sw2、sw4の各出力ポートについてのパケットパターンがパケットパターンキャッシュにまだ記憶されていない。そこで、本実施の形態は、sw5の流出ポートp0からのパケットパターンキャッシュをπTとしてsw5の入力ポートでのパケットパターンπ5=ζe5 (πT)を求め、sw4の出力ポートに対応付けてパケットパターンキャッシュに記憶させる。同様にして、本実施の形態は、この物理リンクパス上でのsw4の入力ポートでのパケットパターンπ4=ζe4 (π5)を求め、sw2の出力ポートに対応付けてパケットパターンキャッシュに記憶させる。同様にして、本実施の形態は、sw2の入力ポートでのパケットパターンπ2=ζe2 (π4)を求め、この物理リンクパス上でのsw1の出力ポートに対応付けてパケットパターンキャッシュに記憶させる。そして、本実施の形態は、sw1の入力ポート、すなわち流入ポートp1でのパケットパターンπ1=ζe1 (π2)を求めることができる。なお、図１４において、「スライスS1＠（π1，p1）」は、スライス（すなわち、仮想網）S1に属するパケットパターンπ1のパケットを検証対象ネットワークのポートp1に流入させることを表している。つまり、そのような流入パケットパターンπ1が求められたことを表している。また、図１４におけるの実線の矢印は、本実施の形態が、１つ目の物理リンクパスの流入ポートp1での流入パケットパターンを求める際のバックトレース関数の処理順序を示している。
【０１２７】
また、図１４において、本実施の形態は、次に、２つ目の物理リンクパスの流入ポートp3での流入パケットパターンを求めるとする。この場合、パケットパターンキャッシュには、この物理リンクパスの途中ポートであるsw4の出力ポートについてのパケットパターンπ5=ζe5 (πT)が記憶されている。そこで、本実施の形態は、パケットパターンキャッシュからπ5=ζe5 (πT)を取得して再利用する。そして、本実施の形態は、この物理リンクパス上でのsw4の入力ポートでのパケットパターンπ'4=ζe4' (π5)を求め、sw3の出力ポートに対応付けてパケットパターンキャッシュに記憶させる。そして、本実施の形態は、sw3の入力ポート、すなわち流入ポートp3でのパケットパターンπ3=ζe3 (π'4)を求めることができる。なお、図１４において、「スライスS2＠（π3，p3）」は、スライスＳ2に属するパケットパターンπ3のパケットを検証対象ネットワークのポートp3に流入させることを表している。つまり、そのような流入パケットパターンπ3が求められたことを表している。また、図１４における破線の矢印は、本実施の形態が、２つ目の物理リンクパスの流入ポートp3での流入パケットパターンを求める際のバックトレース関数の処理順序を示している。
【０１２８】
次に、比較のため、図１４に示した検証対象ネットワークにおける流入ポートでのパケットパターンを、非特許文献１に記載された関連技術を用いて求める処理について、図１５を用いて模式的に説明する。図１５において、「スライスS1@p1」は、流入ポートp1に、スライスS1に属するパケットパターンを流すことを表す。この場合、関連技術は、まず、１つ目の物理リンクパスの流入ポートp0でのパケットパターンをπTとして、sw1の出力ポートでのパケットパターン(π2, e1)=φ(πT,p1)を求める。なお、(π2, e1)=φ(πT,p1)は、ポートp1に入力されたパケットパターンπTに転送関数φを適用した結果が、フローエントリe1に基づくパケットパターンπ２であることを示している。同様にして、順次、転送関数φを適用していき、この関連技術は、１つ目の物理リンクパスの流出ポートp0でのパケットパターン(πterm, e5)= φ(π5, p5=e4.opor)を求める。なお、pi=ej.oporは、フローエントリejで定められた出力ポートに対向するポートがpiであることを表している。そして、この関連技術は、求めた流出パケットパターンπtermに対して転送逆関数を適用し、sw5の入力ポートでのパケットパターンπ''5=φ-1e5(πterm)を求める。そして、関連技術は、順次転送逆関数を適用し、流入ポートp1での流入パケットパターンπ'1=φ-1e1(π'2)を求めることができる。なお、図１５において、(1)〜(9)は、１つ目の物理リンクパスの流入パケットパターンを算出する際の転送関数および転送逆関数の適用順序を示している。
【０１２９】
また、次に、この関連技術が、２つ目の物理リンクパスの流入パケットパターンを求めることについて考える。図１５において、「スライスS2@p3」は、流入ポートp3に、スライスS2に属するパケットパターンを流すことを表す。この場合、まず、この関連技術は、流入ポートp3でのパケットパターンをπTとして、順次転送関数φを適用していき、この物理リンクパスの流出ポートp0でのパケットパターン(π'term, e5)=φ(π7, p5=e4'.opor)を求める。そして、この関連技術は、求めた流出パケットパターンπ'termに対して転送逆関数を適用していく。このとき、sw5の入力ポートでのパケットパターンは、π'' '5=φ-1e5(π'term)となり、１つ目の物理リンクパスについて転送逆関数で求めたsw5の入力ポートでのパケットパターンπ''5=φ-1e5(πterm)とは異なる。このように、この関連技術では、転送逆関数を適用する際に、他の物理リンクパスで同一の途中ポートについてパケットパターンを算出していても、その値を再利用することができない。なお、図１５において、(a)〜(g)は、２つ目の物理リンクパスの流入パケットパターンを算出する際の転送関数および転送逆関数の適用順序を示している。
【０１３０】
以上、図１４および図１５を用いて説明したように、本実施の形態は、非特許文献１に記載された関連技術と比較して、網に対する流入パケットパターンを計算する処理時間を大幅に短くすることができる。
【０１３１】
なお、本発明の第２実施の形態において、バックトレース関数適用部が、バックトレース関数の適用を再帰的に実行する処理手順を中心に説明した。このような処理手順に限らず、本発明のバックトレース関数適用部は、物理リンクパスの流出ポートから流入ポートに向けてバックトレース関数を適用する際に、その他の処理手順を用いてもよい。その他の処理手順は、途中ポートについて算出済みのパケットパターンキャッシュがあればそれを再利用してその途中ポートから流入ポートに向けてバックトレース関数を適用するための手順であればよい。
【０１３２】
また、本発明の第２の実施の形態において、パケットパターンキャッシュに記憶される情報の形式の一例を図面に示して説明した。この他、パケットパターンキャッシュに記憶される情報は、途中ポートでのパケットパターンおよびそのパケットパターンがその途中ポートから到達する流出ポートを表すものであれば、他の形式で表されていてもよい。
【０１３３】
また、上述した本発明の各実施の形態において、網検証装置は、検証対象ネットワークと接続されていなくてもよく、その物理網トポロジ情報および転送規則を、記憶装置や入力装置等から取得できればよい。
【０１３４】
また、上述した本発明の各実施の形態において、網検証装置の各機能ブロックが、記憶装置またはＲＯＭに記憶されたコンピュータ・プログラムを実行するＣＰＵによって実現される例を中心に説明した。これに限らず、各機能ブロックの一部、全部、または、それらの組み合わせが専用のハードウェアにより実現されていてもよい。
【０１３５】
また、上述した本発明の各実施の形態において、網検証装置の機能ブロックは、複数の装置に分散されて実現されてもよい。
【０１３６】
また、上述した本発明の各実施の形態において、各フローチャートを参照して説明した網検証装置の動作を、本発明のコンピュータ・プログラムとしてコンピュータ装置の記憶装置（記憶媒体）に格納しておいてもよい。そして、係るコンピュータ・プログラムを当該コンピュータ装置のＣＰＵが読み出して実行するようにしてもよい。そして、このような場合において、本発明は、係るコンピュータ・プログラムのコードあるいは記憶媒体によって構成される。
【０１３７】
以上、上述した実施形態を模範的な例として本発明を説明した。しかしながら、本発明は、上述した実施形態には限定されない。即ち、本発明は、本発明のスコープ内において、当業者が理解し得る様々な態様を適用することができる。
【０１３８】
この出願は、２０１４年７月２３日に出願された日本出願特願２０１４−１５００７７を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【符号の説明】
【０１３９】
１、２    網検証装置
１１    検証対象ネットワーク情報取得部
１２、２２    バックトレース関数生成部
１３、２３    物理リンクパス取得部
１４、２４    バックトレース関数適用部
１５    検証結果出力部
９００、９０１    検証対象ネットワーク
１００１    ＣＰＵ
１００２    ＲＡＭ
１００３    ＲＯＭ
１００４    記憶装置
１００５    ネットワークインタフェース
１００６    表示装置
【図１】
0006520946.tif 000004
【図２】
0006520946.tif 000005
【図３】
0006520946.tif 000006
【図４】
0006520946.tif 000007
【図５】
0006520946.tif 000008
【図６】
0006520946.tif 000009
【図７】
0006520946.tif 000010
【図８】
0006520946.tif 000011
【図９】
0006520946.tif 000012
【図１０】
0006520946.tif 000013
【図１１】
0006520946.tif 000014
【図１２】
0006520946.tif 000015
【図１３】
0006520946.tif 000016
【図１４】
0006520946.tif 000017
【図１５】
0006520946.tif 000018