(57)【特許請求の範囲】
【請求項１】
フロー毎に、該フローを識別するマッチ条件と、該マッチ条件にマッチしたパケットの統計情報と、該マッチ条件にマッチしたパケットの処理内容を表すインストラクションと、該フローに割り当てられたフロークッキー情報と、を記述したフローエントリが設定されるフローテーブルを備えたスイッチと、
フロー毎に、該フローを識別するマッチ条件と、該フローに割り当てられたフロークッキー情報と、該フローに課金を行う際の課金レートと、を記述した課金エントリが設定される課金テーブルを備えたコントローラと、を含み、
前記フロークッキー情報は、複数のフローに同じフロークッキー情報が割り当て可能であり、
前記スイッチは、前記フローテーブルのいずれかのフローエントリのマッチ条件にマッチするパケットを受信した場合、該フローエントリのインストラクションに従って、前記受信したパケットの処理を行うと共に、該フローエントリの統計情報を更新し、
前記コントローラは、特定のフロークッキー情報が割り当てられたフロー全体に対する課金額を計算する場合、前記スイッチから、前記特定のフロークッキー情報が割り当てられたフロー毎の統計情報を取得すると共に、前記課金テーブルから、前記特定のフロークッキー情報が割り当てられたフロー毎の課金レートを取得し、取得したフロー毎の統計値及び課金レートを基に前記課金額を計算する、通信装置。
【請求項２】
前記コントローラは、前記特定のフロークッキー情報が割り当てられたフロー毎に、該フローの統計情報で示される統計値と該フローの課金レートとを乗算し、各フローの乗算結果を加算することで前記課金額を計算する、請求項１に記載の通信装置。
【請求項３】
前記課金テーブルには、所定のフローの課金エントリが事前に設定されており、
前記コントローラは、前記課金テーブルに課金エントリが設定されたフローのフローエントリを前記フローテーブルに設定する場合、該フローエントリには、該課金エントリと同じフロークッキー情報を記述する、請求項１又は２に記載の通信装置。
【請求項４】
前記コントローラは、前記スイッチに新規のフローが発生した場合に、該フローのフローエントリとして、前記マッチ条件、前記処理内容、及び前記フロークッキー情報を記述したフローエントリを、前記フローテーブルに設定する、請求項３に記載の通信装置。
【請求項５】
前記コントローラは、前記フローテーブルに新規のフローのフローエントリを設定した場合、該フローに割り当てられたフロークッキー情報を前記特定のフロークッキー情報とする、請求項４に記載の通信装置。
【請求項６】
前記コントローラは、前記フローテーブルに新規のフローのフローエントリを設定した後に、タイマを起動し、該タイマが満了した後に、前記課金額を計算する、請求項５に記載の通信装置。
【請求項７】
前記コントローラは、前記所定のフローのフローエントリとして、前記マッチ条件、前記処理内容、及び前記フロークッキー情報を記述したフローエントリを、前記フローテーブルに事前に設定する、請求項３に記載の通信装置。
【請求項８】
前記コントローラは、前記スイッチに対し、前記特定のフロークッキー情報を指定し、前記スイッチから、指定した前記特定のフロークッキー情報が割り当てられたフロー毎の統計情報を取得する、請求項１から７のいずれか１項に記載の通信装置。
【請求項９】
前記コントローラは、前記スイッチから、全フローのフロー毎の統計情報を取得し、取得した統計情報の中から、前記特定のフロークッキー情報が割り当てられたフロー毎の統計情報を抽出する、請求項１から７のいずれか１項に記載の通信装置。
【請求項１０】
前記コントローラは、
前記フロークッキー情報と同じビット数のビット列である所定のビットマスクを用意し、
前記フロークッキー情報をビット列ごとに前記所定のビットマスクと論理積演算をした場合に、該演算結果が該所定のビットマスクと同じビット列になるフロークッキー情報も前記特定のフロークッキー情報とする、請求項１から９のいずれか１項に記載の通信装置。
【請求項１１】
スイッチに、フロー毎に、該フローを識別するマッチ条件と、該マッチ条件にマッチしたパケットの統計情報と、該パケットの処理内容と、該フローに割り当てられたフロークッキー情報と、を記述したフローエントリが設定されるフローテーブルを設け、
コントローラに、フロー毎に、該フローを識別するマッチ条件と、該フローに割り当てられたフロークッキー情報と、該フローに課金を行う際の課金レートと、を記述した課金エントリが設定される課金テーブルを設け、
前記フロークッキー情報は、複数のフローに同じフロークッキー情報が割り当て可能であり、
前記スイッチが、前記フローテーブルのいずれかのフローエントリのマッチ条件にマッチするパケットを受信した場合、該フローエントリの処理内容に従って、前記受信したパケットの処理を行うと共に、該フローエントリの統計情報を更新し、
前記コントローラが、特定のフロークッキー情報が割り当てられたフロー全体に対する課金額を計算する場合、前記スイッチから、前記特定のフロークッキー情報が割り当てられたフロー毎の統計情報を取得すると共に、前記課金テーブルから、前記特定のフロークッキー情報が割り当てられたフロー毎の課金レートを取得し、取得したフロー毎の統計値及び課金レートを基に前記課金額を計算する、通信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信装置、通信方法に関し、特に、フローに対して課金を行う通信装置、通信方法に関する。
【背景技術】
【０００２】
近年、集中制御型のネットワークアーキテクチャが提案されている。集中制御型のネットワークアーキテクチャの例として、オープンフロー（OpenFlow）と呼ばれる技術がある（例えば、特許文献１，２、非特許文献１，２）。オープンフローは、オープンフローコントローラ（OpenFlow Controller）と、オープンフロースイッチ（OpenFlow Switch）と、で実現される。
【０００３】
オープンフローコントローラは、オープンフロースイッチのフローテーブルに対し、フロー毎の処理内容を記述したフローエントリを設定する。オープンフロースイッチは、パケットを受信すると、そのパケットに対応するフローのフローエントリに従い、受信したパケットの処理を行う。なお、受信したパケットに対応するフローのフローエントが設定されていない場合は、そのフローエントリをオープンフローコントローラが設定する。
【０００４】
また、フローに対して課金を行う技術も提案されている（例えば、特許文献３）。特許文献３に記載の技術は、フロー毎に、パケット数やバイト数をカウントし、パケット数の総和やバイト数の総和を基に課金情報を生成する。さらに特許文献３に記載の技術は、複数のフローを１つのフローグループとし、フローグループ毎に、パケット数やバイト数をカウントし、パケット数の総和やバイト数の総和を基に課金情報を生成することも行う。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】国際公開第２０１２／０９８７８６号
【特許文献２】国際公開第２０１２／１３３０６０号
【特許文献３】特開２００２−３７４２５１号公報
【非特許文献】
【０００６】
【非特許文献１】“OpenFlow Switch Specification”、Version 1.1.0 Implemented （Wire Protocol 0x02）、2011年2月28日
【非特許文献２】“OpenFlow Switch Specification”、Version 1.3.4（Protocol version 0x04）、2014年3月27日
【発明の概要】
【発明が解決しようとする課題】
【０００７】
オープンフローにおいて、フローに対する課金を行う場合、上述した特許文献３に記載の技術を適用することも考えられる。特許文献３に記載の技術によれば、フロー毎又はフローグループ毎に、パケット数の総和やバイト数の総和を基に課金情報を生成する。そのため、フロー毎又はフローグループ毎に課金を行うことができる。
【０００８】
しかし、特許文献３に記載の技術は、フローグループ毎に課金を行う場合、同じフローグループに属するフローについては、パケット数やバイト数をまとめてカウントしており、フロー毎に、パケット数やバイト数をカウントしてはいないと考えられる。そのため、同じフローグループに属するフロー毎に、課金レートを変えたい場合に、これに対応することができないという問題がある。
【０００９】
そこで本発明の目的の１つは、上述した課題を解決し、複数のフロー毎に課金レートが設定されている場合にも、複数のフロー全体に対して、フロー毎の課金レートで課金を行うことができる通信装置、通信方法を提供することにある。
【課題を解決するための手段】
【００１０】
一態様において、通信装置は、フロー毎に、該フローを識別するマッチ条件と、該マッチ条件にマッチしたパケットの統計情報と、該マッチ条件にマッチしたパケットの処理内容を表すインストラクションと、該フローに割り当てられたフロークッキー情報と、を記述したフローエントリが設定されるフローテーブルを備えたスイッチと、フロー毎に、該フローを識別するマッチ条件と、該フローに割り当てられたフロークッキー情報と、該フローに課金を行う際の課金レートと、を記述した課金エントリが設定される課金テーブルを備えたコントローラと、を含む。ここで、前記フロークッキー情報は、複数のフローに同じフロークッキー情報が割り当て可能である。前記スイッチは、前記フローテーブルのいずれかのフローエントリのマッチ条件にマッチするパケットを受信した場合、該フローエントリのインストラクションに従って、前記受信したパケットの処理を行うと共に、該フローエントリの統計情報を更新する。前記コントローラは、特定のフロークッキー情報が割り当てられたフロー全体に対する課金額を計算する場合、前記スイッチから、前記特定のフロークッキー情報が割り当てられたフロー毎の統計情報を取得すると共に、前記課金テーブルから、前記特定のフロークッキー情報が割り当てられたフロー毎の課金レートを取得し、取得したフロー毎の統計値及び課金レートを基に前記課金額を計算する。
【００１１】
一態様において、通信方法は、スイッチに、フロー毎に、該フローを識別するマッチ条件と、該マッチ条件にマッチしたパケットの統計情報と、該パケットの処理内容と、該フローに割り当てられたフロークッキー情報と、を記述したフローエントリが設定されるフローテーブルを設け、コントローラに、フロー毎に、該フローを識別するマッチ条件と、該フローに割り当てられたフロークッキー情報と、該フローに課金を行う際の課金レートと、を記述した課金エントリが設定される課金テーブルを設ける。ここで、前記フロークッキー情報は、複数のフローに同じフロークッキー情報が割り当て可能である。前記スイッチが、前記フローテーブルのいずれかのフローエントリのマッチ条件にマッチするパケットを受信した場合、該フローエントリの処理内容に従って、前記受信したパケットの処理を行うと共に、該フローエントリの統計情報を更新する。前記コントローラが、特定のフロークッキー情報が割り当てられたフロー全体に対する課金額を計算する場合、前記スイッチから、前記特定のフロークッキー情報が割り当てられたフロー毎の統計情報を取得すると共に、前記課金テーブルから、前記特定のフロークッキー情報が割り当てられたフロー毎の課金レートを取得し、取得したフロー毎の統計値及び課金レートを基に前記課金額を計算する。
【発明の効果】
【００１２】
上述した態様によれば、複数のフロー毎に課金レートが設定されている場合にも、複数のフロー全体に対して、フロー毎の課金レートで課金を行うことができるという効果が得られる。
【図面の簡単な説明】
【００１３】
【図１】実施形態１の通信装置の構成例を示す図である。
【図２】非特許文献１に記載されたフローエントリの例を示す図である。
【図３】非特許文献２に記載されたフローエントリの例を示す図である。
【図４】実施形態１，２で使用するマッチ条件の例を示す図である。
【図５】実施形態１，２で使用する課金テーブルの例を示す図である。
【図６】実施形態２のゲートウェイ装置の構成例を示す図である。
【図７】実施形態２のゲートウェイ装置の周辺構成例を示す図である。
【図８】実施形態２のゲートウェイ装置の動作例を示すシーケンス図である。
【発明を実施するための形態】
【００１４】
以下、図面を参照して本発明の実施形態について説明する。
（１）実施形態１
図１に、本実施形態の通信装置１０の構成例を示す。図１に示される通信装置１０は、スイッチ１１と、コントローラ１２と、を備えている。また、スイッチ１１は、フローテーブル１１１を備え、コントローラ１２は、課金テーブル１２１を備えている。なお、スイッチ１１は、オープンフロースイッチで実現可能であり、コントローラ１２は、オープンフローコントローラで実現可能である。
【００１５】
フローテーブル１１１は、フロー毎のフローエントリを複数設定可能なテーブルである。図２に、非特許文献１に記載されたフローエントリの例を示す。図２に示されるフローエントリは、以下のフィールドを含んでいる。
・Match Fields
・Counters
・Instructions
【００１６】
また、図３に、非特許文献２に記載されたフローエントリの例を示す。図３に示されるフローエントリは、以下のフィールドを含んでいる。
・Match Fields
・Priority
・Counters
・Instructions
・Timeouts
・Cookie
・Flags
【００１７】
本実施形態においては、フローテーブル１１１のフローエントリには、“Match Fields”に相当するマッチ条件と、“Counters”に相当する統計情報と、“Instructions”に相当するインストラクションと、“Cookie”に相当するフロークッキー情報と、が少なくとも記述されるとする。マッチ条件は、フローを識別する条件であり、パケットのヘッダ情報と照合される。図４に、本実施形態で使用するマッチ条件の例を示す。図４に示されるマッチ条件は、非特許文献２に示されるマッチ条件の中から幾つかのマッチ条件を抜粋したものに相当し、以下のフィールドを含んでいる。
・Ingress Port
・Ether source
・Ether dst
・Ether type
・VLAN id
・VLAN priority
・IP src
・IP dst
・IP proto
・IP ToS bits
・TCP/UDP src port
・TCP/UDP dst port
【００１８】
統計情報は、マッチ条件にマッチしたパケットの統計値（パケット量（byte）、パケット数等）を表す情報である。統計情報は、マッチ条件にマッチしたパケットを受信した場合に更新される。インストラクションは、マッチ条件にマッチしたパケットの処理内容（転送、破棄等）を表す情報である。
【００１９】
フロークッキー情報は、フローに割り当てられたクッキーを表す情報である。なお、図２に示される非特許文献１に記載のフローエントリには、cookieが示されてないが、実際にはフローに括りついたcookieがメッセージ構造体には存在している。また、非特許文献１のA.3.4 Modify State Messagesの章においては、struct ofp_flow_modにてcookieが指定可能なことが記載されている。また、非特許文献１のA.3.6 Read State Messagesの章においては、struct ofp_stats_request に含まれるbodyに設定されるstruct ofp_flow_stats_requestの中でcookieを指定可能なことが記載されている。
【００２０】
課金テーブル１２１は、フロー毎の課金エントリを複数設定可能なテーブルである。なお、課金テーブル１２１には、将来的に発生すると予想されるフロー等を含む所定のフローの課金エントリが事前に設定されている。図５に、本実施形態で使用する課金テーブル１２１の例を示す。本実施形態においては、課金テーブル１２１の課金エントリには、マッチ条件と、フロークッキー情報と、課金レートと、が少なくとも記述されるとする。マッチ条件は、フローを識別する条件であり、パケットのヘッダ情報と照合される。なお、課金テーブル１２１のマッチ条件は、フローテーブル１１１のマッチ条件に相当する。フロークッキー情報は、フローに割り当てられたクッキーを表す情報である。課金レートは、フローに課金を行う際の課金レートである。なお、図５においては、フローテーブル１１１の統計情報がパケット量（byte）である場合の課金レートが示されている。また、図５においては、“＊”は、値が任意であるanyを意味している。
【００２１】
ここで、フローテーブル１１１及び課金テーブル１２１に記述されるフロークッキー情報は、複数のフローに同じフロークッキー情報が割り当て可能である。例えば、複数のフロー全体に対して課金を行う場合には、これら複数のフローに同じフロークッキー情報を割り当てることができる。例えば、図５においては、送信元ＩＰアドレス（IP src）が“192.168.2.1”で、宛先ＩＰアドレス（IP dst）が“192.168.4.1”であるフロー（以下、フロー＃１と適宜称す）と、送信元ＩＰアドレスが“192.168.2.1”で、宛先ＩＰアドレスが“192.168.5.1”であるフロー（以下、フロー＃２と適宜称す）と、が存在する。これらフロー＃１，＃２には、同じフロークッキー情報（Cookie）“0000 0000 0000 0002”が割り当てられている。
【００２２】
スイッチ１１は、フローテーブル１１１のいずれかのフローエントリのマッチ条件にマッチするパケットを受信した場合、そのフローエントリのインストラクションに従って、受信したパケットの処理を行うと共に、そのフローエントリの統計情報を更新する。
【００２３】
コントローラ１２は、特定のフロークッキー情報が割り当てられたフロー全体に対する課金額を計算する場合、スイッチ１１から、特定のフロークッキー情報が割り当てられたフロー毎の統計情報を取得すると共に、課金テーブル１２１から、その特定のフロークッキー情報が割り当てられたフロー毎の課金レートを取得する。そして、コントローラ１２は、その特定のフロークッキー情報が割り当てられたフロー毎の統計情報及び課金レートを基に課金額を計算する。
【００２４】
上述したように本実施形態においては、フローテーブル１１１及び課金テーブル１２１に記述されるフロークッキー情報は、複数のフローに同じフロークッキー情報が割り当て可能である。コントローラ１２は、特定のフロークッキー情報が割り当てられたフロー全体に対する課金額を計算する場合、スイッチ１１から、特定のフロークッキー情報が割り当てられたフロー毎の統計情報を取得すると共に、課金テーブル１２１から、その特定のフロークッキー情報が割り当てられたフロー毎の課金レートを取得する。そして、コントローラ１２は、特定のフロークッキー情報が割り当てられたフロー毎の統計情報及び課金レートを基に課金額を計算する。したがって、特定のフロークッキー情報が割り当てられた複数のフローについては、これら複数のフロー毎の統計情報及び課金レートを基に、これら複数のフロー全体に対する課金額を計算することができる。これにより、複数のフロー毎に課金レートが設定されている場合にも、複数のフロー全体に対して、フロー毎の課金レートで課金を行うことができる。
【００２５】
（２）実施形態２
本実施形態は、実施形態１の通信装置１０をゲートウェイ装置に適用したものである。図６に、本実施形態のゲートウェイ装置２０の構成例を示す。図２に示されるゲートウェイ装置２０は、イーサネット（登録商標）、Ｗｉ−Ｆｉ（Wireless Fidelity。登録商標）、セルラーのネットワークを相互に接続するものである。ゲートウェイ装置２０は、スイッチ２１と、コントローラ２２と、通信Ｉ／Ｆ（Interface）２３−１〜２３−４と、を備えている。ここで、通信Ｉ／Ｆ２３−１，２３−２はイーサネット（登録商標）のネットワークに対応し、通信Ｉ／Ｆ２３−３はＷｉ−Ｆｉ（登録商標）のネットワークに対応し、通信Ｉ／Ｆ２３−４はセルラーのネットワークに対応している。また、スイッチ２１は、フローテーブル２１１を備え、コントローラ２２は、課金テーブル２２１を備えている。なお、スイッチ２１は、オープンフロースイッチで実現可能であり、コントローラ２２は、オープンフローコントローラで実現可能である。図７に、本実施形態のゲートウェイ装置２０の周辺構成例を示す。ゲートウェイ装置２０は、周辺の端末３０−１〜３０−４と接続されている。なお、図７において、各構成要素の名称の下の数字はＩＰアドレスを表している。また、端末３０−１〜３０−４は、ゲートウェイ装置２０内の通信Ｉ／Ｆ２３−１〜２３−４とそれぞれ接続されるとする。
【００２６】
フローテーブル２１１及び課金テーブル２２１は、実施形態１のフローテーブル１１１及び課金テーブル１２１とそれぞれ同様である。また、フローテーブル２１１及び課金テーブル２２１に記述されるフロークッキー情報は、実施形態１と同様に、複数のフローに同じフロークッキー情報が割り当て可能である。
【００２７】
スイッチ２１は、端末３０−１〜３０−４からパケットを受信すると、フローテーブル２１１から、受信したパケットにマッチ条件がマッチするフローエントリを検索する。スイッチ２１は、フローエントリが検索された場合は、そのフローエントリの統計情報を更新すると共に、そのフローエントリのインストラクションに従って、受信したパケットの処理を行う。一方、スイッチ２１は、フローエントリが検索されない場合は、受信したパケットをコントローラ２２に転送する。
【００２８】
コントローラ２２は、スイッチ２１からパケットを受信すると、課金テーブル２２１から、受信したパケットにマッチ条件がマッチする課金エントリを検索する。コントローラ２２は、課金エントリが検索された場合は、そのパケットのインストラクションを決定し、マッチ条件、決定したインストラクション、及び、その課金エントリと同じフロークッキー情報を記述した新規のフローエントリを生成し、生成したフローエントリをスイッチ２１のフローテーブル２１１に設定する。このように、コントローラ２２は、フローテーブル２１１にフローエントリを設定する場合、マッチ条件、インストラクション、及びフロークッキー情報を記述したフローエントリを設定し、フローエントリの統計情報は、スイッチ２１が構成する。なお、コントローラ２２は、スイッチ２１から受信したパケットにマッチ条件がマッチする課金エントリが検索されない場合は、受信したパケットのインストラクションとして“破棄”を記述した新規のフローエントリを生成し、フローテーブル２１１に設定するが、このフローエントリにはフロークッキー情報は記述しない。
【００２９】
コントローラ２２は、特定のフロークッキー情報が割り当てられたフロー全体に対する課金額を計算する場合、スイッチ２１から、特定のフロークッキー情報が割り当てられたフロー毎の統計情報を取得すると共に、課金テーブル２２１から、その特定のフロークッキー情報が割り当てられたフロー毎の課金レートを取得する。そして、コントローラ２２は、その特定のフロークッキー情報が割り当てられたフロー毎に、そのフローの統計情報で示される統計値とそのフローの課金レートとを乗算し、各フローの乗算結果を加算して課金額を計算する。
【００３０】
以下、本実施形態のゲートウェイ装置２０において、スイッチ２１が、フローテーブル２１１にマッチ条件がマッチしないパケットを受信した場合の動作について、図８を参照して説明する。ここでは、フローテーブル２１１の統計情報がパケット量（byte）であり、課金テーブル２２１の状態が図５の状態であるものとする。
【００３１】
まず、スイッチ２１は、端末３０−１から、端末３０−３宛のパケットを受信すると（ステップＡ１）、そのパケットのヘッダ情報を参照し、フローテーブル２１１から、そのパケットにマッチ条件がマッチするフローエントリを検索する。しかし、ここでは、フローエントリが検索されないものとする。そのため、スイッチ２１は、端末３０−１から受信したパケットの処理内容を問い合わせるためのOFPT_PACKET_INメッセージに、そのパケットを格納し、そのOFPT_PACKET_INメッセージをコントローラ２２に送信する（ステップＡ２）。
【００３２】
コントローラ２２は、スイッチ２１からOFPT_PACKET_INメッセージを受信すると、そのOFPT_PACKET_INメッセージに格納されたパケットのヘッダ情報を参照する。そして、コントローラ２２は、課金テーブル２２１から、そのパケットにマッチ条件がマッチする課金エントリを検索する。ここでは、課金テーブル２２１には、送信元ＩＰアドレスが端末３０−１の“192.168.2.1”で、宛先ＩＰアドレスが端末３０−３の“192.168.4.1”であるフロー＃１の課金エントリが存在する。そのため、コントローラ２２は、パケットのインストラクションを端末３０−３への転送に決定する。そして、コントローラ２２は、フロー＃１のマッチ条件、決定したインストラクション、及びフロー＃１の課金エントリと同じフロークッキー情報“0000 0000 0000 0002”を記述したフロー＃１のフローエントリを設定するための情報を、OFPT_PACKET_INメッセージに対するOFPT_FLOW_MODメッセージに格納する。そして、コントローラ２２は、そのOFPT_FLOW_MODメッセージをスイッチ２１に送信する（ステップＡ３）。
【００３３】
スイッチ２１は、コントローラ２２からOFPT_FLOW_MODメッセージを受信すると、フローテーブル２１１に新規のフロー＃１のフローエントリを設定する。これにより、このフローエントリには、フロークッキー情報“0000 0000 0000 0002”が記述されることになる。また、フローテーブル２１１には、フロー＃１を構成するパケットにマッチ条件がマッチするフローエントリが存在することになったため、スイッチ２１は、端末３０−１から受信したパケットを端末３０−３に転送する（ステップＡ４）。そのため、スイッチ２１は、以降に、端末３０−１から、端末３０−３宛のパケットを受信した場合は、コントローラ２２にOFPT_PACKET_INメッセージを送信することなく、そのパケットを端末３０−３に転送し（ステップＡ５）、統計情報のパケット量を計上していく。また、ここでは、端末３０−１から受信した、端末３０−４宛のパケット（フロー＃２を構成するパケット）にマッチ条件がマッチするフローエントリが、フローテーブル２１１に存在するものとする。そのため、スイッチ２１は、端末３０−１から、端末３０−４宛のパケットを受信した場合も、コントローラ２２にOFPT_PACKET_INメッセージを送信することなく、そのパケットを端末３０−４に転送し（ステップＡ６）、統計情報のパケット量を計上していく。
【００３４】
その一方、コントローラ２２は、フローテーブル２１１にフロー＃１のフローエントリを設定した後、フロー＃１と同じフロークッキー情報“0000 0000 0000 0002”が割り当てられたフロー全体に対する課金額を計算する時間になると、不図示のタイマを起動する（ステップＡ７）。そして、コントローラ２２は、タイマが満了すると（ステップＡ８）、フロークッキー情報“0000 0000 0000 0002”を指定し、そのフロークッキー情報が設定されたフロー毎の統計情報を要求するOFPT_STATS_REQUEST(OFPST_FLOW)メッセージをスイッチ２１に送信する（ステップＡ９）。
【００３５】
スイッチ２１は、コントローラ２２からOFPT_STATS_REQUEST(OFPST_FLOW)メッセージを受信すると、フローテーブル２１１から、そのOFPT_STATS_REQUEST(OFPST_FLOW)メッセージで指定されたフロークッキー情報“0000 0000 0000 0002”が割り当てられたフロー毎の統計情報を取得する。ここでは、フロー＃１、＃２毎の統計情報を取得する。そして、スイッチ２１は、OFPT_STATS_REQUEST(OFPST_FLOW)メッセージに対するOFPT_STATS_REPLYメッセージにフロー＃１、＃２毎の統計情報を格納し、そのOFPT_STATS_REPLYメッセージをコントローラ２２に送信する（ステップＡ１０）。
【００３６】
コントローラ２２は、スイッチ２１からOFPT_STATS_REPLYメッセージを受信すると、そのOFPT_STATS_REPLYメッセージからフロー＃１、＃２毎の統計情報を取り出す。そして、コントローラ２２は、課金テーブル２２１から、フロークッキー情報“0000 0000 0000 0002”が割り当てられたフロー＃１、＃２毎の課金レートを取得する。ここでは、フロー＃１の課金レートは“\0.002”で、フロー＃２の課金レートは“\0.003”である。そのため、コントローラ２２は、まず、フロー＃１について、フロー＃１の統計情報として示されるパケット量と課金レート“\0.002”とを乗算する。続いて、コントローラ２２は、フロー＃２について、フロー＃２の統計情報として示されるパケット量と課金レート“\0.003”とを乗算する。そして、コントローラ１２は、２つのフロー＃１、＃２についての乗算結果を加算して、２つのフロー＃１、＃２全体に対する課金額を計算する。
【００３７】
上述したように本実施形態においては、フローテーブル２１１及び課金テーブル２２１に記述されるフロークッキー情報は、複数のフローに同じフロークッキー情報が割り当て可能である。コントローラ２２は、特定のフロークッキー情報が割り当てられたフロー全体に対する課金額を計算する場合、スイッチ２１から、特定のフロークッキー情報が割り当てられたフロー毎の統計情報を取得すると共に、課金テーブル２２１から、その特定のフロークッキー情報が割り当てられたフロー毎の課金レートを取得する。そして、コントローラ１２は、特定のフロークッキー情報が割り当てられたフロー毎に、そのフローの統計情報で示される統計値とそのフローの課金レートとを乗算し、各フローの乗算結果を加算して課金額を計算する。したがって、特定のフロークッキー情報が割り当てられた複数のフローについては、これら複数のフロー毎の統計情報及び課金レートを基に、これら複数のフロー全体に対する課金額を計算することができる。これにより、複数のフロー毎に課金レートが設定されている場合にも、複数のフロー全体に対して、フロー毎の課金レートで課金を行うことができる。
【００３８】
なお、本発明は上記実施形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。
例えば、上記実施形態においては、コントローラは、スイッチに新規のフローが発生し、スイッチからOFPT_PACKET_INメッセージを受信したことを契機に、そのフローのフローエントリをOFPT_FLOW_MODメッセージでフローテーブルに設定している。しかし、コントローラは、課金テーブルに課金エントリが設定されている所定のフローのフローエントリを事前にフローテーブルに設定しても良い。
【００３９】
また、上記実施形態においては、コントローラは、OFPT_FLOW_MODメッセージでフローのフローエントリをフローテーブルに設定した後にタイマを起動している。しかし、コントローラは、それより前の所定のタイミングでタイマを事前に起動しても良い。所定のタイミングとは、OFPT_PACKET_INメッセージを受信した時点でも良いし、その前でも良い。この場合、課金額を計算するフロークッキー情報は、新規に発生したフローに割り当てられたフロークッキー情報には限定されない。
【００４０】
また、上記実施形態においては、コントローラは、タイマが満了した後に、スイッチにOFPT_STATS_REQUESTメッセージを送信して、スイッチから統計情報を取得している。しかし、コントローラは、タイマを用いず、所望のタイミングで統計情報を取得しても良い。
【００４１】
また、上記実施形態においては、コントローラは、OFPT_STATS_REQUEST(OFPST_FLOW)メッセージでフロークッキー情報を指定し、指定したフロークッキー情報が割り当てられたフローの統計情報のみを取得している。しかし、非特許文献１においては、OFPT_STATS_REQUEST(OFPST_FLOW)メッセージは、フロークッキー情報を指定できないメッセージ構造となっている。そのため、コントローラは、OFPT_STATS_REQUEST(OFPST_FLOW)メッセージでフロークッキー情報を指定せず、OFPT_STATS_REPLYメッセージで全フローのフロー毎の統計情報を取得しても良い。また、この場合、コントローラは、全フローの統計情報をフィルタリングして、特定のフロークッキー情報が割り当てられたフロー毎の統計情報を抽出して課金額を計算しても良い。
【００４２】
また、上記実施形態においては、コントローラは、フロークッキー情報を指定し、指定したフロークッキー情報が割り当てられたフローの統計情報を取得している。しかし、コントローラは、所定のビットマスクを用意し、フロークッキー情報を指定するだけでなく、所定のビットマスクを指定しても良い。所定のビットマスクは、フロークッキー情報と同じビット数のビット列とする。この場合、スイッチは、フロークッキー情報をビット列ごとに所定のビットマスクと論理積演算する。スイッチは、コントローラから指定されたフロークッキー情報だけでなく、上記の論理積演算の演算結果が所定のビットマスクと同じビット列になるフロークッキー情報も、特定のフロークッキー情報とする。そして、スイッチは、特定のフロークッキー情報が割り当てられているフローを全て抽出し、抽出したフロー毎の統計情報をコントローラに返す。この場合、コントローラから指定されたフロークッキー情報が異なっていても、ビットマスクで指定したビットが設定されたフローの統計情報も取得することができる。
【００４３】
また、上記実施形態においては、フローエントリの統計情報をパケット量（byte）としているが、パケット数としても良い。
【００４４】
また、上記実施形態においては、フローをＩＰアドレスで識別し、ＩＰアドレスで識別されるユーザ単位で課金が可能な例を挙げているが、フローテーブルのマッチ条件の記述により、様々な単位で課金を行うことが可能である。以下に例を挙げる。
【００４５】
例えば、単一のデバイスを複数のユーザで使用している状況で、ユーザ単位で課金を行う場合を考える。この場合、複数のユーザが同じＩＰアドレスを使用してパケットを送信するため、ＩＰアドレスではユーザを識別することができない。そこで、この場合は、ユーザ毎に宛先ポート(TCP/UDP dst port)を分けることで、フローを識別することが可能になる。
【００４６】
また、複数のデバイスをグループ分けして、グループ単位で課金を行う場合を考える。この場合、グループ毎に使用するＶＬＡＮ（Virtual Local Area Network）識別子（VLAN id）を分けることで、フローを識別することが可能になる。
【００４７】
また、サービス単位で課金を行う場合を考える。例えば、端末３０−３がサーバ機能を備え、端末３０−３から端末３０−１にサービスを提供することが考えられる。この場合、サービス毎に宛先ＩＰアドレス（IP dst）を分けるか、または、宛先ポート（TCP/UDP dst port）を分けることで、フローを識別することが可能になる。
【００４８】
また、端末が接続してきた通信Ｉ／Ｆに応じて課金を行う場合を考える。この場合、受信ポート（Ingress Port）を参照することで、フローを識別することが可能になる。
【００４９】
また、上記実施形態においては、通信装置にコントローラ及びスイッチの両方を設けているが、コントローラ及びスイッチは、別々の装置に設けても良い。
【００５０】
また、通信装置における処理は、ＣＰＵ（Central Processing Unit）にコンピュータプログラムを実行させることにより実現されても良い。プログラムは、様々なタイプの非一時的なコンピュータ可読媒体（non-transitory computer readable medium）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（tangible storage medium）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えば、フレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば、光磁気ディスク）、ＣＤ−ＲＯＭ（Compact Disk-Read Only Memory）、ＣＤ−Ｒ（CD-Recordable）、ＣＤ−Ｒ／Ｗ（CD-ReWritable）、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Programmable ROM）、ＥＰＲＯＭ（Erasable PROM）、フラッシュＲＯＭ、ＲＡＭ（random access memory））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（transitory computer readable medium）によってコンピュータに供給されても良い。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバなどの有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【符号の説明】
【００５１】
１０  通信装置
１１  スイッチ
１１１  フローテーブル
１２  コントローラ
１２１  課金テーブル
２０  ゲートウェイ装置
２１  スイッチ
２１１  フローテーブル
２２  コントローラ
２２１  課金テーブル
２３−１〜２３−４  通信Ｉ／Ｆ
３０−１〜３０−４  端末
【図１】
0006477084.tif 000002
【図２】
0006477084.tif 000003
【図３】
0006477084.tif 000004
【図４】
0006477084.tif 000005
【図５】
0006477084.tif 000006
【図６】
0006477084.tif 000007
【図７】
0006477084.tif 000008
【図８】
0006477084.tif 000009