以下、図面を参照しながら、本発明の実施形態について説明する。
(第1実施形態)
第1実施形態に係る無線通信装置は、無線ネットワークにおいて、1つまたは複数のノードに対する肯定応答(誤りなくメッセージを受信出来たときに返す応答。以下、ACK情報と記述する)をブルームフィルタでまとめて表現して送信することにより、ACK情報の送信を効率よく行うことができる。無線ネットワークは、例えば、マルチホップ型である。以下、本実施形態について詳細に説明する。
図1は、本実施形態に係る通信装置である無線通信装置を含むマルチホップ無線ネットワークを示す。本実施形態に係るネットワークでは、無線でメッセージを送受信する無線通信装置110A乃至110Hと、無線により無線通信装置110A乃至110Hからデータを集約するコンセントレータ120を備えている。無線通信装置110A乃至110Hを特に区別しない場合、個々の無線通信装置を無線通信装置110と記述する。無線通信装置110A乃至110Hを、ノードA〜Hと呼ぶ場合もある。図中の点線は、ノード間で直接通信することが可能であることを示す。直接通信することは、2つのノードのうち一方が無線通信で送信したメッセージを他方のノードが他のノードを介さずに受信することを言う。
無線通信装置110およびコンセントレータ120は、マルチホップ無線ネットワークのノードを構成している。無線通信装置110を通してデータはバケツリレーのようにしてコンセントレータ120に転送される。例えば、ノードDはコンセントレータ120と通信できないが、ノードGまたはノードHとは通信可能である。このため、ノードDが送信したメッセージに含まれるデータをノードGまたはノードHが中継すれば、ノードDのデータをコンセントレータ120に届けることができる。各無線通信装置110が送信するメッセージは、無線通信装置110自身で生成されたデータ、他の無線通信装置110から受信したデータ、または無線通信装置110自身の状態を表すデータを含んでもよい。このように、データは、マルチホップによりコンセントレータ120へと集約される。無線通信装置110自身で生成されるデータは、一例として、ノードに搭載されるセンサで検出されるデータ、またはネットワークデータ(後述)などがある。無線通信装置110は、具体的には、所謂エンドデバイスノード、末端装置、ルータノード、または中継装置などと呼ばれる装置である。コンセントレータ120は、コーディネータ、集約装置、ゲートウェイ、サーバなどと呼ばれる装置である。
図2は、図1の無線ネットワークに設定した伝送経路の例を示す。ノードを結合する太線は、各ノードからコンセントレータまでの伝送経路を示し、細線はバックアップとなり得る経路を示す。あるノードが、同時に複数の伝送経路を用いて、複数のノードに対してメッセージを送信する形態も可能である。この場合、太線のリンクに加えて、細線のリンクも使用して、メッセージを伝送する。
本ネットワークの通信方式の一例として、TDMA(Time Division Multiple Access:時分割通信方式)方式がある。TDMA方式では、時間フレームがスロットと呼ばれる小さなブロックに分割され、各無線通信装置110は1つの時間フレームに少なくとも1つの受信用スロットと送信用スロットが割り当てられている。受信用スロットにおいては、無線通信装置110は、他の無線通信装置からメッセージを受信することができる。送信用スロットにおいては、無線通信装置110は、他の無線通信装置へメッセージを送信することができる。無線通信装置110は、スロット毎にアクティブ状態とスリープ状態を切り替え可能であってもよい。またTDMA方式では、予め定められたタイミングで通信が実行されるため、通信の定時性や伝送遅延が保証しやすく、これらの特性が重要となるシステムに対しては後述のCSMA/CA方式よりもTDMA方式の方が好ましい場合がある。
スロットの割り当ては、管理装置またはコンセントレータが行う。スロットの割り当ては、管理装置ではなく、ノード間の協調動作によって決めてもよい。
ノードは、自ノードの送信用スロットが到来するまでは、他のノードから受信したメッセージに含まれるデータを内部に蓄積しておく。自ノードのスロットが到来すると、例えば、蓄積しておいたデータと自ノードで生成したデータとを含むメッセージを送信する。またメッセージを受信した各ノードはACK情報を生成し、当該ACK情報を含むメッセージを送信する。本実施形態では、複数のノードに対するACK情報をまとめて含むブルームフィルタを送信することで、複数のノードに対する送達確認応答を効率的に行う。
TDMA方式のネットワークでは、使用周波数が1つの場合、例えばノード毎に異なる送信スロットを割り当てる。ただし、複数のノードが同一のスロットで送信を行っても互いに電波干渉を起こす可能性がない場合には、複数のノードが1スロットに割り当てられていてもよい。
本実施形態の一例におけるノードは、有線で電源を供給されてもよいし、電池、環境発電、または無線電力伝送などにより電源を供給されてもよい。
ランクについて説明する。
ランクとは、無線通信装置110からコンセントレータ120までの通信経路の品質を示す値である。一例として、コンセントレータ120のランクを、最小の値(例えば0)に設定し、コンセントレータ120との通信品質が低くなるほど、値が大きくなるように各ノードのランクを設定する。一例として、各ノードは自ノードのランクが、最小または最大となるように、中継先のノード(以下、中継ノード)を選択することによって、データをコンセントレータへと伝送していくことができる。コンセントレータのランクを最小の値として定義しても、最大の値として定義しても、本発明が適用できることは言うまでも無い。
ランクの第1設定方法として、図3に示すように、コンセントレータ120までのホップ数をランクとする方法がある。
また、ランクの第2設定方法として、図4に示すように、各ノードおよびコンセントレータ間の無線通信のRSSI(受信信号強度、Received Signal Strength IndicationまたはReceived Signal Strength Indicator)に基づいて設定する方法がある。コンセントレータと直接通信可能なノードは、コンセントレータとの通信におけるRSSIをランクとする。コンセントレータと直接通信できないノードは、当該ノードと中継ノードとの間のRSSIと、中継ノードとコンセントレータ間のRSSIの絶対値の和に基づいてランクが設定される。当該ノードからコンセントレータまでの経路が複数ある場合には、一の経路に基づいてランクが設定される。
ランクの第3の設定方法として、ノードiのランクRiは、中継ノードjのランクRjに、ノードiとノードj間のRSSIの絶対値と係数kとの和を減算することにより算出するものである。このことを式で表現すると、以下の通りである。
Ri=Rj−RSSIij+k
ランクRjから係数kとRSSIijの積を減算した結果をランクRiとしてもよい。
例えば、k=−50とおくと、ノードH、ノードGおよびノードDのランクは、それぞれ10、40、30となる。
ランクの第4の算出方法は、図5に示すように送信ノードからコンセントレータまでの伝送成功率をランクとするものである。2つのノード間での無線通信において、送信ノードが何回同じ内容の送信を行えば受信ノードにデータが届くのかの期待値(EXT、Expected Transmission Count)に基づいてランクを設定することができる。
ランクの第5の設定方法は、通信成功率の実測値、またはS/N比(信号雑音比SNR:Signal Noise Ratio)を使用してランクを算出するものである。
さらにランクは、複数の値の組み合わせであってもかまわない。例えば、ランクは、ホップ数と、受信電力から求められるエラーレートと、システム稼働開始時から現時点までのノード間通信成功率との3つの値の組み合わせであってもよい。自ノードをコンセントレータ120までの転送経路に含んでいるノードである子孫ノードの数など、中継データの集中の度合いを示す数値をランク算出のパラメータとすることもできる。
なお、ランクは、ハードコーディングまたは手動設定で決定するものでも良いし、ノードの実際の配置または無線伝搬等のパラメータの変動に応じて、自動的に設定し更新するものであっても良い。
図6は、無線通信装置110の構成の一例を示す。無線通信装置110は、ビットマップ生成部212を含む送信メッセージ生成部210を備える。無線通信装置110は、さらに、ノードデータベース200と、送信メッセージ生成部210と、受信メッセージ解析部220と、情報記憶部230と、センサ情報取得部240と、無線通信部250と、制御部259とを備えることができる。送信メッセージ生成部は、さらにペイロード生成部214を含んでもよい。
ノードデータベース200は、自ノードが属するネットワーク内の各ノードに関する情報を記憶している。例えば各ノードの識別子であるノードID(Identifier)を記憶している。またネットワーク内のノード間の関係に関する情報、例えば自ノードの親ノードおよび子ノードの情報も、ノードデータベース200に記録されている。親ノードは、自ノードと通信可能なノードであって、自ノードから送信するデータの宛先であり、転送経路上の1つ上位のノードである。子ノードは、自ノードと通信可能なノードであって、自ノードを宛先としてデータを送信するノードであり、転送経路上の一つ下位のノードである。ノードデータベース200は、自ノード、親ノードおよび子ノードに割り当てられたスロットの番号等を記憶していてもよい。ノードIDは、ノードを固有に識別できる値であれば、ハードウェアまたはファームウェアの製造時やネットワーク始動時にハードコーディングされるものであっても、ネットワーク運転中に動的に決まるものであってもよい。ノードIDの一例として、MACアドレスまたはIPアドレス等のアドレスを用いてもよいし、ネットワークに参加する各ノードに、ネットワークの管理装置(図示せず)またはコンセントレータ120が固有に割り当てる値でもよい。各ノードは、複数のIDを持っていてもよい。また、ノードデータベース200には、各ノードに関するネットワークデータも記憶されている。ネットワークデータとは、ノードの状態など、各種のネットワーク品質に関する情報のデータことである。代表的なネットワークデータはランクやノード間のRSSIであるが、その他に直接通信できるノードである近隣ノードのID一覧、各ノードの電池残量や増減の傾向、環境発電デバイスの有無や発電量、パケットエラーレート、累積エラー回数などを含んでもよい。
センサ情報取得部240は、センサを用いて、センサデータを取得する。センサがセンサ情報取得部240に含まれていてもよい。センサデータとして、例えば、温度、湿度、加速度、赤外線(人感センサ)、照度、色、重さ、ゆがみ量、音などのデータがある。この場合、無線通信装置100は、例えば中継専用のノードであったり、アクチュエータなどの制御対象を備えたノードであったりする。無線通信装置110は、センサとアクチュエータの双方を備えたノードであってもよい。
無線通信部250は、他のノード(他の無線通信装置110)との間でメッセージを送受信する。無線通信部250は、メッセージ送信部252と、メッセージ受信部254とを備える。メッセージ送信部252は、送信メッセージ生成部210が生成したメッセージを、アンテナを介して送信する。メッセージ受信部254は、当該アンテナを介して、メッセージを受信し、受信したメッセージを受信メッセージ解析部220へ送る。
送信メッセージ生成部210は、ビットマップ生成部212と、ペイロード生成部214とを用いて、送信用のメッセージを生成する。
ビットマップ生成部212は、一期間にメッセージ受信部254で受信に成功したメッセージの送信元に対するACK情報を表すブルームフィルタである、ビットマップ(ビット列)を生成する。ブルームフィルタは、複数の送信元に対するACK情報を表してもよい。より詳細には、例えば、当該送信元であるノードの識別子に基づき関数(ハッシュ関数等)を計算して得た値に対応するビットを、予め与えられたビットマップにおいて設定することにより、ビットマップを生成する。例えば、ビットは、1または0であり、本実施形態では1とする。一期間は、例えば前回の送信用スロットの直後から、次回の送信用スロットの直前までの期間である。ACK情報を表すブルームフィルタは、ACKブルームフィルタと呼ぶ。ブルームフィルタの生成方法およびハッシュ関数の詳細は後述する。
ペイロード生成部214は、送信するデータを取得し、当該データを用いて、メッセージのボディフィールド(ペイロードフィールド)に格納するデータ(ペイロードデータ)を生成する。
送信メッセージ生成部210は、ビットマップ生成部212により生成したブルームフィルタが所定のフィールドに設定されたメッセージを生成する。メッセージには、例えば、ペイロード生成部214により生成されたペイロードデータ、宛先ID、ペイロード長などがさらに設定されていてもよい。送信するメッセージによってメッセージのフォーマットも異なってよい。
図7(A)〜図7(D)は、本実施形態に係るメッセージのフォーマット例を示す。
図7(A)に示すように、メッセージフォーマットは、ACKブルームフィルタフィールドを含む。ACKブルームフィルタフィールドには、ACKブルームフィルタ(ビットマップ)が格納される。メッセージフォーマットは、さらに宛先ID0フィールドを含んでもよい。宛先IDフィールドには宛先IDが格納される。メッセージフォーマットは、さらに他のフィールドを含んでもよい。
図7(B)に示すように、メッセージフォーマットは、ペイロード長フィールドとペイロードフィールドとをさらに含んでもよい。ペイロード長フィールドには、例えばバイト単位で表されたペイロードフィールドの長さを表す情報が格納される。ペイロードフィールドは、宛先ノードに送信するデータが格納される。
図7(C)に示すように、メッセージフォーマットは、複数の宛先IDフィールドを含んでもよい。複数の宛先ノードIDフィールドそれぞれに宛先ノードIDを格納することにより、複数の宛先ノードにデータを送信することができる。
図7(D)に示すように、メッセージフォーマットは、送信元IDフィールドをさらに含んでもよい。送信元IDフィールドには、自ノード(メッセージを送信するノード)のIDが格納される。
ACK情報を送信不要の場合は、図7(B)〜図7(D)においてACKブルームフィルタフィールドを省略したフォーマットを用いればよい。
さらに、特定のフィールドに定められたデータ以外の値を設定して、定められたデータを送信しなくてもよい。受信側のノードでは、特定のフィールドにあるデータを無視してもよい。
なお、図7(A)〜図7(D)のフォーマットのフィールドの一部が削除されたり、別のフィールドが追加されたりしてもよい。また、フィールドの順番は、任意に変更されてもよい。
図7(A)〜図7(D)のフォーマットは、一例として、MAC層もしくはこれより上位層のアプリケーションのメッセージの場合を想定する。例えば宛先ID0フィールドまたは宛先ID1フィールドがMAC層のヘッダ内の受信先アドレスフィールドに対応してもよい。あるいは、宛先ID0フィールドまたは宛先ID1フィールドが、IPパケットのヘッダ内の宛先アドレスフィールドに対応してもよい。
受信メッセージ解析部220は、ビットマップ検証部224を備えメッセージ受信部254が受け取ったメッセージの解析処理を行う。受信メッセージ解析部220は、さらに送信元ID解析部222を備えてもよい。
送信元ID解析部222は、メッセージに送信元IDフィールドが含まれる場合、当該送信元IDフィールドを解析して、メッセージを送信したノードを特定する。または、送信用スロットとノードとの関係を取得している場合、送信元ID解析部222は、メッセージを受信したスロットの番号から送信元となるノードを把握してもよい。または、ペイロードフィールド等他のフィールドにノードIDが含まれる場合に、当該ノードIDから送信元のノードを特定してもよい。
ビットマップ検証部224は、ACKブルームフィルタフィールド(ビットマップフィールド)からブルームフィルタを取得する。ビットマップ検証部224は、自ノードのIDに基づき関数(ハッシュ関数等)を計算する。取得したACKブルームフィルタにおける、当該関数の計算値に対応する一または複数のビットを特定し、特定したビットを検証する。より具体的に、例えば検証結果が陽性の場合(例えば、すべてのビットが第1値(例えば1)に一致する場合)、自ノードがブルームフィルタで指定され、自ノード宛のACK情報が送信されたと判断する。これは、親ノードが自ノードの送信したメッセージの受信に成功されたことを意味する。一方、例えば、検証結果が陰性の場合(例えば、当該ビットのうち少なくとも1つビットが第2値(=0)の場合)、自ノードが指定されておらず、自ノード宛にACK情報が送信されていないと判断する。これは、親ノードが自ノードの送信したメッセージの受信に成功しなかったことを意味する。受信に成功しなかった場合として、メッセージ自体が親ノードに届かなかった場合や、親ノードにメッセージは届いたがパケットの検査でエラーが検出された場合などがある。
情報記憶部230は、各種情報を記憶する。例えば情報記憶部230は、センサ情報取得部240で検出したセンサデータを記憶する。センサデータは、検出された時刻またはスロットの番号等に関連づけて管理してもよい。また、情報記憶部230は、他のノードから受信したメッセージまたはメッセージに含まれる一部のフィールドの値(ペイロードフィールドのデータ等)を記憶する。当該メッセージまたはデータは、メッセージが受信されたスロットの番号に関連づけて管理されてもよい。また、他のノードに送信したメッセージまたはメッセージに含まれる一部のフィールドの値(ペイロードフィールドのデータ等)を記憶してもよい。当該メッセージまたはデータは、メッセージを送信したスロットの番号に関連づけて管理してもよい。
センサ情報取得部240は、ペイロード生成部214にセンサデータを送信してもよい。
制御部259は、無線通信装置110の各部の動作の制御を行う。例えば、制御部259は、管理装置と通信して、自装置に割り当てられたスロット、子ノードおよび親ノードに割り当てられたスロットの番号等を取得し、自装置の送受信を管理する。制御部259は、自ノードに割り当てられた送信用スロットで、メッセージを送信するよう制御する。また、制御部259は、1つまたは複数のハッシュ関数を管理する。本実施形態においては、ハッシュ関数は、制御部259内のバッファに記憶されている。ハッシュ関数は情報記憶部230に記憶され、ビットマップ生成部212が情報記憶部230からハッシュ関数を取得してもよい。ビットマップ生成部212は、ファームウェアにハードコーティングされたハッシュ関数を取得してもよいし、ネットワークパラメータなどから動的にハッシュ関数を生成してもよい。
ハッシュ関数は、ネットワーク内の全ノードおよびコンセントレータにおいて予め共有されている。
無線通信装置能を備えたコンピュータや、無線通信装置110と同一機種のハードウェアはコンセントレータ120として用いられることができる。集約されたデータは、コンセントレータ120において保存されてもよいし、さらに上位のサーバやクラウドシステム、インターネットへと転送されてもよい。コンセントレータ120は、1つのネットワークに1台であってもよいし、複数台存在していてもよい。
図8は、ノードのハードウェア構成の一例を示すブロック図である。無線通信装置は、プロセッサ351、メモリ352、ストレージ353、ネットワークインタフェース354を備え、これらがバス356を介して接続されている。ノードは、さらにセンサ355を備えてもよい。
プロセッサ351が、ストレージ353からプログラムを読み出して、メモリ352に展開して、実行することで、受信メッセージ解析部220と、送信メッセージ生成部210と、センサ情報取得部240と、制御部259との機能が実現される。プロセッサ351は、センサ355によって測定されたセンサデータを受信する。プロセッサ351は、センサ355のセンシングタイミングを制御してもよい。センサ355の個数は1つでも、複数でもよい。
メモリ352は、プロセッサ351が実行する命令、およびプロセッサ351が利用する各種データ等を一時的に記憶する。メモリ352、SRAM、DRAM等の揮発性メモリでも、NAND、MRAM等の不揮発性メモリでもよい。ストレージ353は、プログラムやデータ等を永続的に記憶する記憶装置であり、例えば、HDDまたはSSD等である。メモリ352、ストレージ353、またはこれらの両方で、情報記憶部230、ノードデータベース200、および制御部259内のバッファが構成される。プロセッサ351により取得されたセンサデータは、メモリ352、ストレージ353またはこれらの両方に格納される。また他のノードから受信したメッセージまたはそこに含まれるデータも、メモリ352,ストレージ353またはこれらの両方に格納される。
ネットワークインタフェース354は、無線または有線の通信を行うためのインタフェースであり、無線通信部250に対応する。ネットワークインタフェース354は、一例として、MAC層等のデータリンク層および物理層のヘッダ処理、変調および復調等を行うベースバンド集積回路、AD変換回路、DA変換回路、およびアナログ処理等を行うRF集積回路を備えていてもよい。アナログ処理は、ベースバンドおよび無線周波数間の周波数変換、帯域制御、増幅処理等を含む。ネットワークインタフェース354に、CPU等のプロセッサを配置してもよい。TCP/IP等を用いる場合、TCP/IP等の処理を当該ネットワークインタフェース354上のCPUで行ってもよいし、バス356に接続されたプロセッサ351で行ってもよい。ここではネットワークインタフェースを1つのみ示しているが、無線ネットワークインタフェースと有線ネットワークインタフェースなど、複数のネットワークインタフェースが搭載されていてもよい。ネットワークインタフェース354は、プロセッサ351により制御され、他のノードから受信したメッセージ、他のノードに送信するメッセージが、プロセッサ351との間でやりとりされても良い。ネットワークインタフェース354が、DMA(ダイレクト・メモリ・アクセス)でメモリ352に直接、アクセスしてもよい。
センサ355はセンサデータ取得部240に対応し、センサデータを取得する。
ノードのハードウェア構成は、要求されるノードの機能に応じて、適宜、変形することができる。
本実施形態は、ブルームフィルタを用いて一度のメッセージ送信で、複数のノードにACK情報を同時に通知することができる。以下、ハッシュ関数およびブルームフィルタについて説明する。
ハッシュ関数とは、一般には、あるデータが与えられた場合にそのデータを代表する数値を得る操作、または、その様な数値を得るための関数として定義される。
本実施形態で用いるハッシュ関数は、ある入力に対して出力がランダムであることが好ましい。ハッシュ関数の引数(入力値)が同じであれば、ハッシュ関数の出力値も同じである。このようなハッシュ関数として、md5またはSHA−1などが知られている。例えば整数を引数とし、「引数を16で割った余りを求める」関数を4 bit出力のハッシュ関数としてもよい。図9に、5bit入力/4bit出力のハッシュ関数例を模式的に示す。この関数は0から31までの整数入力値xを、0から15までの整数出力値yにランダムにマッピングする関数の例である。例えば入力がx=(0,1,2,3)であった場合、出力はy= (13,1,6,8)となる。
以下、ブルームフィルタについて説明する。ブルームフィルタとは、ある任意のデータdがデータ集合Xに含まれるかどうかを、ハッシュ関数の応用により確率的に検査するためのフィルタである。
データ集合Xに基づき生成されたブルームフィルタBF−Xに対して、定められた手続きを行うことで、あるデータdがデータ集合Xに含まれるか否かを検証することができる。手続きの結果、positive(陽性)またはnegative(陰性)という2通りの結果が得られる。
陰性の結果が得られた場合は、データ集合Xにデータdが含まれている可能性は無い。一方、陽性の結果が得られた場合は、データ集合Xにデータdが含まれる可能性がある。データ集合Xにデータdが含まれていないにも拘わらず陽性の結果が得られる場合を、偽陽性と呼ぶ。
以下、ブルームフィルタの生成方法を述べる。
ブルームフィルタの生成には、以下のパラメータを用いる。
m:ブルームフィルタを構成するビット列長(フィルタの長さ)
k:ブルームフィルタに用いる独立したハッシュ関数の個数
ブルームフィルタの生成手順例は、以下の通りである。
手順1:長さmのビットマップ(ビット列)Fを用意し、全て0にセットする。
手順2:値域が[1,m](1以上m以下)となる、k個の独立したハッシュ関数Hi()(ただしi=0・・・k−1)を用意する。()の中には関数の引数(入力パラメータ)が入る。
手順3:入力データ集合Xの各要素xiに対して、次の処理を行う。
(a) p=0 とする
(b) もしp>k−1ならば終了
(c) 手順2で用意したハッシュ関数Hp()を用い、idx=Hp(xi)を計算
(d) ビット列Fのidxビット目を1にする(既に1が立っていた場合は、ビット値をそのまま1に維持する)
(e) pに1を加える
(f) (b)へ戻る
このように、入力データ集合Xの各要素xiについて、k個のハッシュ関数からk個のハッシュ値idxを求め、ビット列Fにおけるidxビット目をすべて1とする(すでに1が立っている場合はそのまま1とする)ことで、ブルームフィルタを生成する。本実施形態では、入力データ集合Xは、ACK情報を送信すべきノードのIDの集合であり、要素xiは、個々のノードのIDである。
次に、入力データ集合Xにデータdが含まれるか否かの検証は以下の手順で行う。
手順1:p=0とする。
手順2:もしp>k−1ならば陽性を返す。
手順3:検証したいデータdについて、idx=Hp(d)を計算。
手順4:ビット列Fのidxビット目を調べ、0ならば、陰性を返す。
手順5:pに1を加える。
手順6:手順2に戻る。
k個のハッシュ関数にそれぞれデータdを入力すると、各々のハッシュ関数の出力idxに対応するビットが全て1であれば陽性が返され、少なくともいずれかのビットが0であれば陰性を返される。
ここで、偽陽性が発生する場合、すなわち、データ集合Xにデータdが含まれないにも拘わらず検証結果が陽性となる場合は、各々のハッシュ関数の出力idxに対応するビットがたまたま全て1であった場合である。例えばデータAおよびデータBからなるデータ集合Yから生成されたブルームフィルタBF−Yがあるとする。このブルームフィルタBF−Yにおける1のビット位置、すなわちデータAに基づく1のビット位置とデータBに基づく1のビット位置とのORをとった位置が、データCに基づく1のビット位置を包含する場合がある。このような場合に、データ集合にデータCが含まれないにもかかわらず、ブルームフィルタBF−Yを用いてデータdの検証を行うと、陽性が返される。すなわち、偽陽性が発生する。
以下において、複数のハッシュ関数の計算値の列を、ハッシュ値列と表現する場合がある。
また、以下の説明において、“要素(IDまたはACK情報等)をブルームフィルタに追加するまたは反映させる”などと表現する場合がある。これは、要素(ID等)から複数のハッシュ関数を計算し、複数のハッシュ関数の計算値に対応するビットを1にすることを意味する。また、複数の要素(ID等)に基づきブルームフィルタを生成すると表現する場合、これは、各要素から複数のハッシュ関数を計算し、複数のハッシュ関数の計算値に対応するビットを1にすることにより、ブルームフィルタを生成すことを意味する。
また、要素(IDまたはACK情報等)がブルームフィルタに含まれる、または含まれない、と表現する場合がある。前者は、要素から複数のハッシュ関数を計算し、複数のハッシュ関数の計算値に対応するビットのすべてがブルームフィルタにおいて1になっていることを意味する。後者は、要素から複数のハッシュ関数を計算し、複数のハッシュ関数の計算値に対応するビットの少なくとも1つが、ブルームフィルタにおいて1でない(0である)ことを意味する。
ここで、ネットワークに参加できるノードの最大数が256台であるようなネットワークを考える。このネットワークで使用するメッセージに含まれるACK情報を示すためのブルームフィルタのビット長mを64bit、すなわち8[Byte]とし、ACK情報の返送先となる宛先ノードの個数nが多くとも7個程度とするようなネットワーク環境を想定する。
一般に、mビットのフィルタ(ビットマップ)に対してn個の要素を追加する際の最適なハッシュ関数の数kは、k=(m/n)・ln2として求められる。この式にm=64、n=7を代入すると、k=6.33となり、6個程度のハッシュ関数を使用するのが最適である。“/”は除算、“ln”は対数を表す。
本実施形態においては、6種類のハッシュ関数Hi(x)を用いる。i=[0,5]、x=[0,63]とする。例えば、ノードIDが9であるノードの場合、ハッシュ値列(H0(9)、H1(9)、H2(9)、H3(9)、H4(9)、H5(9))は、(39,43,36,22,32,55)のようになる。一例として、H0(x)の入出力の例を図10に示す。
図11は、ノードの動作を説明するためのマルチホップ無線ネットワークの例を示す。各ノードに付せられている番号は、ノードのIDである。以下の説明で、ノードXとは、IDがXのノードのことである。図11では、コンセントレータ120を除き、10台のノードが存在する。コンセントレータ120は、ノード49およびノード78と通信可能である。ノード49およびノード78は、ノード5の親ノードであり、ノード5は、ノード9、16、95、124、169、218、241の親ノードである。
ノード5の動作について説明する。ノード5は、全ての通信が正常に行われている場合には、ノード9、16、95、124、169、218、241の7台の子ノードからセンサデータを含むメッセージをそれぞれ受信する。ノード5は、親ノードであるノード49、78の少なくとも一方を宛先IDフィールドに設定し、する。7台の子ノードのIDに基づき生成したブルームフィルタ(ACKブルームフィルタ)を該当するACKブルームフィルタフィールドに設定し、これらの子ノードから受信したデータをペイロードフィールドに設定したメッセージを生成し、当該メッセージを送信する。この場合、7台の子ノードは、当該親ノード宛のメッセージを受信するように構成されているか、所定のタイミング(TDMAで定めたられたスロットのタイミング)で受信するメッセージは、ノード5から受信すべきメッセージであると見なしてもよい。これにより、親ノードへのデータ送信と、複数の子ノードへのACK情報の送信(ブルームフィルタの送信)とを一度にできるため、送信回数を減らすことができる。よって、ノード5の消費電力を削減できる。
ノード5は、ノード9からのメッセージの受信に成功したとする。この場合、例えば、次の送信機会(例えばノード5の次の送信スロット)においてノード9に対しACK情報を返すために、9を引数として、6個のハッシュ関数を計算し、ハッシュ値列(39,43,36,22,32,55)を得る。予め全ビットが0に設定されているm=64bitのビットマップ(ACKブルームフィルタ)の、39番目、43番目、・・・、55番目のビットを1にする。これによりノード9のIDをACKブルームフィルタに追加する。
ノード5が、引き続き、ノード218からのデータの受信に成功した場合には、218を引数として、上述の6個のハッシュ関数を計算して、ハッシュ値列(32,33,27,8,8,22)得る。そして、上述のノード9のIDが追加されたACKブルームフィルタにおいて、当該ハッシュ値列に対応するビットを1にする。これによりノード218のIDを、当該ACKブルームフィルタに追加する。
この時点で、ACKブルームフィルタは、(8,22,27,32,33,34,39,43,55)の9ビットが1であり、他のビットが0であるビット列となる。
ノード5は、ノード9、218以外のノードからデータを正常に受信しなかったとする。例えばノード95は、ノード5に対してメッセージを送信したものの、何かしらの原因でノード5がこれを受信できなかったものとする。この場合、ノード5は、ノード95のIDを、ACKブルームフィルタに追加しない。
図12(A)に、ノード9、218のハッシュ値列の例を示す。また、ノード9、218のIDを追加したACKブルームフィルタの例を図12(B)に示す。ハッシュ値列は、例えば全64ビット長を有する。一番左が0番目のビット、一番右が63番目のビットである。8,22,27,32,33,34,39,43,55番目のビットが1になっており、これら以外のビットは0になっている。
ノード5が、ノード9、218以外からの子ノードからデータを受信できなかったため、次の送信機会で、ノード9、218のIDのみが追加されたACKブルームフィルタを含むメッセージを送信する。
ノード9、218、95等は、ノード5が送信したメッセージを受信することが可能である。各々のノードは、自ノードIDが、当該メッセージのACKブルームフィルタフィールドに設定されているACKブルームフィルタに含まれるか否かを検証する。例えば、ノード9は、自ノードのIDに基づくハッシュ値列(39,43,36,22,32,55)に対応するビットがACKブルームフィルタにおいて1に一致するかを検証する。本例では1に一致するため、ノード9は、自ノードのIDがACKブルームフィルタに含まれている、自ノード宛にACK情報が送信されたと判断し、これにより、自ノードが送信したメッセージが、ノード5に正常に伝送されたことを認識する。ノード218についても同様である。
一方、ノード95は、自ノードのIDに基づくハッシュ値列に対応するビットの少なくとも1つが1でない(0である)と決定し、自ノードのIDがACKブルームフィルタに含まれていない、すなわち自ノード宛にACK情報が送信されていないと判断する。なお、ノード95のハッシュ値列は、(19,5,24,42,23,45)であるとする。これにより、自ノードが送信したメッセージがノード5に正しく伝送されなかったことを認識する。この場合、ノード95は、ノード5に対して、送信に失敗したデータを含むメッセージを再送信するなど、予め定めた処理を行う。
上記の例では、ノード9のハッシュ値列(39,43,36,22,32,55)と、ノード218のハッシュ値列(32,33,27,8,8,22)とでは、32と22が重複している。また、ノード218のハッシュ値列の中で、値8が重複している。このようにハッシュ値の衝突が存在する。この結果、12個のハッシュ値に対して、0から1へと変換されたビットの個数は9個となっている。しかし、1つのIDに対して6個生成されるハッシュ値の全てが重複しているわけではないため、ノード9、218、95は、それぞれ自ノードのデータがノード5に伝送されているか否かを正しく認識することが可能である。
図13は、1つ以上の子ノードからデータを受信し、ACK情報を追加したブルームフィルタを返す親ノードの動作のフローチャートである。
親ノードは、子ノードからの受信用のスロットにおいて、子ノードからのメッセージの受信を待機する(ステップS10)。親ノードは、どの子ノードからどのスロットでメッセージを受信する可能性があるかを事前に把握している。把握する方法は、親ノードおよび子ノード間の通信でもよいし、コンセントレータ120または管理装置が各ノードに通知することでもよい。あるいは、ここで述べた以外の方法でもよい。
親ノードは、当該スロットで子ノードからのメッセージを受信した場合(S11のTRUE)、より詳細には当該メッセージを運ぶプロトコルの誤り検査で誤りが検出されずに当該メッセージの受信に成功した場合、当該メッセージまたはそこに含まれるデータを記憶する。記憶先は、例えば制御部259が備える内部バッファでもよいし、情報記憶部230でもよいし、その他のバッファでもよい。親ノードは、予め定めたタイミング(例えば自ノードのスロットで送信するための送信処理を開始するためのタイミング)に達したかを判断し(S12)、達していない場合は(S12のFALSE)、ステップS10に戻る。また、親ノードは、当該スロットで子ノードからのメッセージを受信しなかった場合(ステップS11のFALSE)も、ステップS10に戻る。メッセージを受信しなかった場合とは、メッセージそのものを受信できなかった場合、およびプロトコルの誤り検査で誤りが検出された場合のいずれも含む。
予め定めたタイミングに達した場合(S12のTRUE)、親ノードは、データの受信に成功した子ノードのIDに基づき、ビットマップであるブルームフィルタ(ACKブルームフィルタ)を生成する(S13)。ACKブルームフィルタをACKブルームフィルタフィールドに格納したメッセージを送信する(S14)。これにより一度のメッセージ送信で、複数の子ノードにACK情報を送信できる。
以下、ブルームフィルタの誤検出率(偽陽性の発生確率)を低減させることについて説明する。ブルームフィルタの生成は、ハッシュ値を利用しているため、複数のID間でハッシュ値の一部が衝突する可能性がある。しかしながら、ビット長mが十分に大きく、要素数nとビット長mとに対してハッシュ関数の数kが適切に選択されている場合には、上記のノード9、218のように、正しい検証結果を得ることができる可能性が高い。ハッシュ関数のランダム性が高いほど、この可能性がさらに高まる。
(k、m、n)=(6,64,7)の場合、誤検出率(偽陽性の発生確率)は、1.24%程であり、システム要件によっては十分に低い誤検出率で、これは許容できる値となる。kおよびmの値を固定し、n=7以外のn=1,2,3,4,5,6に対しては、誤検出率は、0.00,0.00,0.02,0.09,0.27,0.63[%]となる。よって、1台の親ノードに対して、多くの子ノードが集中しないようなネットワーク制御、例えば、nの期待値を5以下に低減するなどの処理をすることにより、誤検出率は、n=7の場合に比べて、さらに低減する。
また、一定の処理を行うことにより、誤検出率を下げることも可能である。例えば、ハッシュ関数の引数として、IDに加えて、通信先に対する指示または通知等を表すパラメータ(シード値)を用いることにより、ハッシュ値が一致する確率を減らすことが可能である。例えばIDとパラメータ(シード値)とに基づく演算値(IDとパラメータの加算値など)を、引数とする。パラメータとして、時間依存要素を用いてもよい。時間依存要素とは、例えば、スロット、時間フレーム、または、複数の時間フレームからなるスーパーフレームが進むたびにインクリメントされるシーケンスナンバや、メッセージ送信ごとに更新されるシーケンスナンバ、時刻情報等がある。このような要素を用いることにより、ハッシュ関数の引数が計算毎に変動することとなるため、複数のノード間または同一ノードでの、ハッシュ値の衝突確率を抑制できる。誤検出率を下げる別の方法として、シーケンスナンバに応じて、使用するハッシュ関数を使い分けてもよい。複数のノード間で共有していない情報(例えば現在時刻)を用いる場合は、メッセージに当該情報を含めるなどして、宛先のノードに当該情報を通知すればよい。
なお、mが極端に小さい値、例えば4である場合、2つのハッシュ値が衝突する可能性は高くなり、n=2、k=1の条件下では25%の確率で誤検出が起こる。例として、ノード9のハッシュ値(3ビット)が1で、ノード169のハッシュ値(3ビット)も1であり、ノード9がノード5へのデータ送信に成功し、ノード169はノード5へのデータ送信に失敗したような状況を想定する。この場合、ノード169は、ノード5から受信するACKブルームフィルタの1番目のビットが1となっていることから、自ノードのデータ送信が成功したものと誤認識してしまう。この場合、本来は再送が必要であるようなデータが、再送不要と判断されてしまい、ネットワークからデータが欠落してしまう。したがって、m、n、kを適切に選択したり、時間依存要素を利用したりすることで、誤検出率を下げることが望ましい。
以上のように本実施形態によれば、ACK情報の送信対象となる1つまたは複数の子ノードのIDをACKブルームフィルタに追加し、当該ACKブルームフィルタを含むメッセージを送信することで、効率良くACK情報を通知できる。また、親ノードへデータ送信するメッセージに当該ACKブルームフィルタを含めてもよく、この場合、一度のメッセージ送信で、親ノードへのデータ送信と、ACK情報の送信とを同時にでき、より多くの情報を効率よく伝送することが可能である。よって、メッセージの送受信に係る電力を削減でき、かつ、信頼性の高い伝送を担保できる。
なお、子ノード数(要素数)nの期待値や最大値、およびハッシュ関数の個数kの最適値は、無線センサネットワークの適用先によって様々であり、さらに時間変化する可能性もある。そこで、誤検出率を極小化するためには、適切なkの値を選択する必要がある。そこで、一定またな任意の時間間隔で、適切なkの値を選択して、kを更新してもよい。例えば、kの値を数回〜数十回の送信周期ごとに更新する機構や、kの最適値が大きく変化した場合に、kの更新値を再配布するような機構を実装し、ブルームフィルタの情報効率を最適に保ちつつ、動的なネットワークの状態変化に柔軟に対応することも可能である。なお、kが最適に設定されていない場合でも、最適値から大きく外れていない限りは、誤検出率が大きく劣化することは少ない。そのため、この例のようなタイミングでkの値を更新しても問題はない。kの値を通知するメッセージのフォーマットは、上述したメッセージフォーマット(図7(A)〜図7(D)参照)とは別に定義すればよい。図7(A)〜図7(D)等のフォーマットにkの値を設定するフィールドに追加すると、ACK情報の伝達のためのバイト長が長くなることに繋がり、また情報密度の観点からも効率が悪い場合が多い。よって、ACK情報の送信頻度に比べて十分低ければ、これとは別のフォーマットを用いてkの値を送信することが、効率的である。このように、kを適宜ネットワークの状態に応じて変化させることも本実施形態の適用例として挙げられる。各ノードでは、kの値に応じて、使用すべき複数のハッシュ関数が対応づけて定義されており、通知されたkの値に応じて、使用する複数のハッシュ関数を特定できる。
また、多種類のハッシュ関数を使用することによって、より多数種の情報を埋め込んだブルームフィルタを生成してもよい。一例としては、ACK情報にバリエーションを持たせることが可能である。上述のACK情報は、単にデータ受信の成功可否を示すものであったが、ここではACK−AとACK−Bの2種類のACK情報を定義する。
ACK−Aは、無線通信で正常に(受信エラーなく)データを受信できたものの、データのバッファあふれやその他内部エラーによって、データが正しくバッファに格納できなかったことを示すものとする。ACK−Bは、正常にデータを受信でき、かつ、データも正しくバッファに格納できたことを示すものとする。受信に成功したノードは、ACK−AおよびACK−Bのいずれかを選択して、選択したACK情報をブルームフィルタにマッピングする。ブルームフィルタを受信したノードは、ブルームフィルタにACK−Aが含まれる場合、無線通信そのものは成功しているため、リンクの無線品質等の問題は無いものの、データは再送する必要があると判断できる。ACK−AおよびACK−Bのいずれも受信できなかった場合は、データの再送が必要なことはもちろんのこと、無線リンク品質の劣化の可能性があると判断できる。そのため、ACK−AおよびACK−Bのいずれも受信できなかったことを、ネットワークの再構成(親ノードの変更、または伝送経路の変更)を判断するための材料とすることができる。
選択したACK情報をブルームフィルタにマッピングする方法として、ACK−A用のハッシュ関数群と、それとは異なるACK−B用のハッシュ関数群とそれぞれ用意してもよい。また、別の方法として、ACK−Aを表現する場合はIDに対して任意の整数値、例えば1000を加算した数値をハッシュ関数の引数とし、ACK−Bを表現する場合にはIDをそのままハッシュ関数の引数としてもよい。これによって同じハッシュ関数を用いて、ACK−AとACK−Bとを表現することができる。ただし、この場合、加算する数値が1などの小さい値である場合には、ノード9のACK−Aとノード10のACK−Bが同じ引数となってしまい、結果として同一のハッシュ値を生成することになってしまう。このため、ハッシュ関数の引数が一致しないように、加算値を決めることが必要である。
なお、ACK−AとACK−Bを区別せずにACK情報を伝送する場合、ACK情報の解釈をどのように行うかに関しては、任意に定めればよい。例えば、当該ACK情報を、ACK−Aのように無線通信の物理層やデータリンク層に係るACKと解釈しても、ACK−Bのようにネットワーク層からアプリケーション層に係るACKと解釈してもよい。本実施形態は、そのいずれの形態も可能である。
また、本実施形態において、ハッシュ値の衝突を低減するため、事前に、あるいは、システムの運用中に、どのノードの組み合わせでハッシュ値の衝突が発生するかを演算により判定し、この判定結果を利用してハッシュ値の衝突を抑制するようなハッシュ関数および引数のパラメータを決定してもよい。決定した情報を、通信を行うノード間や、ネットワーク全体で共有することで、ハッシュ値の衝突を抑制することが可能となる。
例えば、図2に示したネットワークにおいて、ハッシュ関数群XおよびYが存在し、各ノードで使用するハッシュ関数群をXまたはYから選択できるものとする。コンセントレータ120においてハッシュ衝突の検証がなされ、ハッシュ関数群Xを使用する場合にはノードFとノードDのハッシュ値が衝突し、ハッシュ関数群Yを使用する場合には衝突が発生しないことが分かったとする。この場合、コンセントレータ120は少なくともノードD、F、H間のノード通信においては、ハッシュ関数Yを使用すること通知することにより、これら3つのノード間においてはハッシュ値の衝突が発生しないこととなる。
さらに別のハッシュ関数群Zが存在し、かつ、Zを用いた場合にノードE、Fのハッシュ値が衝突するとする。このような場合においても、ノードE、F双方と通信するノードが存在しないことをコンセントレータ120が把握した場合には、ハッシュ関数群Zの使用を決定することも可能である。実際には、ビット長mを小さく抑えつつ、ネットワーク全域においてハッシュ値が衝突しないようなハッシュ関数群を導くことは困難であるため、ネットワーク全体のレベルでの衝突は容認しつつ、上記のように、局所的なレベルにおけるハッシュ値の衝突を回避するように、ハッシュ関数群を導出すればよい。
なお、ノードE、Fとのハッシュ値が衝突しないことの判定は、ネットワーク管理者が手動で入力する方法、ノードの物理的な配置図から推測する方法、判定を実行するまでのシステム運転履歴から推測する方法などが挙げられるが、これらのいずれの方法またはその他の手法であっても構わない。また、ハッシュ値の衝突を検証する演算も、コンセントレータ120またはコンセントレータ120と通信することが可能な他のコンピュータで為されてもよいし、各々の無線通信装置で為されるものであってもよいし、コンセントレータと通信できる関係にないコンピュータによるものであっても、机上計算によるものであっても構わない。
(第2実施形態)
第1実施形態では、1つまたは複数のノードに対するACK情報を、ブルームフィルタで表現したが、本実施形態においては、1つまたは複数のノードに対する否定応答(NACK情報)をブルームフィルタで表現する。NACK情報は、データを受信できることが期待されているような状況において実際にはデータを受信できなかった場合に返す応答である。データを正常に受信できた場合にACK情報を返す方式(ACK方式)とするのか、データを正常に受信できなかった場合にNACK情報を返す方式(NACK方式)とするのかはシステムで事前に決められている。本実施形態ではNACK方式を用いるシステムを想定する。以下、前述した実施形態と異なる部分を中心に説明し、重複する説明は省略する。
図14(A)〜図14(D)は、本実施形態に係るメッセージフォーマットの例を示す。図14(A)のメッセージフォーマットは、ビットマップアドレスフィールドであるNACKブルームフィルタフィールドを備える。メッセージフォーマットは、さらに宛先ID0フィールドを含んでもよい。NACKブルームフィルタフィールドは、データ受信の否定応答を通知するNACKブルームフィルタを格納するフィールドである。NACKブルームフィルタフィールドは、本実施形態に係るビットマップを格納する第1フィールドの一例である。図14(B)〜図14(D)のフォーマットも、ACKブルームフィルタフィールドが、NACKブルームフィルタフィールドに置き換わった以外は、図7(B)〜図7(D)と同じである。NACK情報を送信不要の場合は、図14(B)〜図14(D)においてNACKブルームフィルタフィールドを省略したフォーマットを用いればよい。
NACK方式を用いる場合、まず、各ノードは、どのノードからデータを受信すべきであるかという情報を取得しておく必要がある。そのため、ノードの制御部259は、予めノード間で接続状態を確立する手順、または、それに相当するメッセージ交換を行い、相手ノード(子ノード)のリストを作成して、保持しておく。
ノードの受信メッセージ解析部220は、リスト内に登録されている子ノードのうち、メッセージを受信できなかった子ノードのすべてのIDを特定する。
ノードの送信メッセージ生成部210は、特定されたIDを反映させたNACKブルームフィルタを生成する。このNACKブルームフィルタをNACKブルームフィルタフィールドに設定し、メッセージ送信部252を介して送信する。
相手ノード(子ノード)のリストの作成方法は、どのような方法でもよい。一例として、ネットワーク構築時にノードの親子関係を確定させ、親ノードが、複数の子ノードのIDと、その台数とを把握する方法がある。親子関係は、例えば2つのノード間で、TCP(Transmission Control Protocol)のスリーウェイハンドシェイクのような手順を用いて確立させてもよい。無線通信においては、ノードの位置や障害物の位置の移動、天候や温度、湿度等によって無線伝播性能は時々刻々と変化していくことが多いため、ネットワークの構成は、ある程度自律的に変化できるように設定されていることが一般的である。そのため、ネットワークの構成の変化に応じて、親子関係も追随して変化可能な仕組みにしてもよい。リストを作成する別の方法として、ネットワークに参加する全てのノードのIDを取得できる場合においては、ノードの全てのIDを、リストに登録しても構わない。リストが確定した後は、例えば1周期(時間フレーム)等ごとに、親ノードはリストの中からデータ受信できなかったノードのIDを特定して、NACKブルームフィルタに反映させる。
図11を用いて、第2実施形態の無線通信装置の具体的な動作の一例を説明する。第1実施形態と同様に、NACKブルームフィルタのビット数m=64、子ノードの数n=7、ハッシュ関数の個数k=6とする。ノード5は、7台の子ノードからのメッセージの受信を待機する。
ノード5は、ノード9、218からメッセージを受信できたが、これら以外のノード16、95、124、169、241からは、何かしらの原因でメッセージを受信できなかったとする。この場合、ノード5は、ノード16、95、124、169、241のIDを追加したNACKブルームフィルタを生成する。この結果、例えば(3,5,11,19,23,24,34,35,38,42,44,45,49,54,55,59,62)のビットが1になったNACKブルームフィルタが得られる。
ノード5は、このNACKブルームフィルタを、メッセージのNACKブルームフィルタフィールド(図14参照)へ格納し、メッセージの送信を行う。ノード5が送信したメッセージを受信した7台の子ノードは、メッセージに含まれるNACKブルームフィルタを解析することによって、各々送信したメッセージがノード5で正常に受信されたかを検証する。
例えば、ノード9は、ノード5からのメッセージを受信した際に、自ノードのIDを元に生成されるハッシュ値列(39,43,36,22,32,55)に対応するビット群が1になっているか否かを検証する。39、43、36、22、32に対応するビット群が1でない(0である)ため、ノード9は、自ノードに対してNACK情報は送信されていない、すなわち、自ノードが送信したメッセージは、ノード5で正しく伝送できたと判断する。
ノード95も、自ノードのハッシュ値列(19,5,2,42,23,45)に対応するビット群が1になっているか否かを検証する。このハッシュ値列に対応するビット群が1であることから、ノード95は、自ノードが送信したメッセージがノード5で正しく受信できなかった(受信に失敗した)と判断する。この場合、ノード95は、再送のデータを含むメッセージを送信してもよい。再送の具体的な動作は、後述する第6実施形態で述べる。あるいは、ノード95の制御部259は、ノード5との接続を解除し、現親ノードと異なるノードを親ノードとして設定してもよい。
親子ノード間で一定回数以上連続して通信に失敗した場合に、当該親子ノード間の接続を解除してもよい。所定回数連続で失敗して、親ノード5が一方的に接続を解除したが、ノード169は親ノード5との接続が維持されていると認識している場合、ノード169は、送信に失敗しているにも拘わらず、ノード5から受信したメッセージにおけるNACKブルームフィルタに自ノードのIDが含まれていないため、送信に成功したと誤認して当該メッセージを削除してしまう可能性がある。
次の方法によると、この問題の発生を阻止することができる。
一例として、親ノードは、3回連続で通信が途絶した場合に接続を解除し、子ノードは、3回連続で通信途絶またはNACK情報の受信の少なくとも一方が生じた場合に、接続を解除する。図15(A)および図15(B)は、接続の解除のシーケンス例を示す。○印は、メッセージの受信が正常に行われた(受信に成功した)ことを意味する。
親ノード5側における×印は、子ノード169からのメッセージが受信できなかった(受信に失敗した)ことを意味する。子ノード169側における×印は、親ノード5からのメッセージの受信がなかった(受信に失敗した)か、受信はあったもののNACKブルームフィルタに自ノードのIDが含まれていなかったことを意味する。
子ノード169から親ノード5への矢印付の実線は、子ノード169から親ノード5へのメッセージの送信を意味する。親ノード5から子ノード169への矢印付きの長い方の破線は、NACKブルームフィルタに自ノードのIDが含まれていた場合を示し、短い方の破線は、メッセージの受信に失敗した場合を示す。このような失敗が3回繰り返されたところで、親ノード5は、子ノード169との接続を解除(A4)する。その後、子ノード169は、自らのIDがNACKブルームフィルタに含まれていることを確認(A5)すると、親ノード5との接続を解除(A6)する。この場合、子ノード5は、再送すべきデータを破棄することなく、新たに設定された親ノードへと向けて送信するか、または、次の通信の機会まで待って送信する。
一方、図15(B)の例によれば、子ノード169が先に親ノード5との通信を切断(A19)し、次に、親ノード5が子ノード169との通信を切断(A20)する。このように、子ノード側からの切断を先行させることにより、送信に失敗したメッセージまたはそこに含まれるデータを、子ノードが破棄してしまうことを防止する。
このように、同じ回数だけ通信に失敗した時点で、親ノードおよび子ノード双方が接続を解除するようにする。この結果、子ノード側から先に接続を切断する。または、親ノードが先に切断したとしても、子ノードが送信に成功していないと判断したままの状態で、子ノードは、次の再送タイミング前に接続を解除する。これにより、子ノードが再送すべきデータを破棄することを防止できる。
また、別の方法として、例えば、ノードの制御部259は、直近の一定回数(例えば10回)の通信の成功率が閾値(例えば60%)を下回った場合に、接続を解除することとしてもよい。この場合においても、親ノードが一方的に子ノードとの接続を解除しないようにする。これにより、上記と同様、子ノードが再送すべきデータを破棄することを防止する。
本実施形態でも、ハッシュ値の衝突、すなわちNACK情報の誤検出が発生し得る。例えばノード5がノード169から送信されたメッセージを正常に受信し、他の子ノードから送信されたメッセージの受信に失敗した場合に、他の子ノードのハッシュ値列の和集合が、ノード169のハッシュ値列を包含する可能性がある。このとき、親ノード5からNACKブルームフィルタを受信した子ノード169は、偽陽性により、ノード5へのデータ送信に失敗したと認識する。しかし、このような誤検出が起こった場合も、再度同じデータを含むメッセージをノード5へ送信するようにノード169を設定することにより、ノードおよびネットワークの信頼性を高めることができる。
なお、ハッシュ関数の引数として、IDのみで、かつ、ハッシュ関数の更新が無い場合、数時間フレーム連続して誤検出が続く可能性が高くなる。そのため、IDに加えてNACK情報の送信先を特定するためのシーケンスナンバ等のパラメータ(シード値)を用いて引数を定義してもよい。または、シーケンスナンバに基づいて、使用するハッシュ関数を変更するなどの機構を採用してもよい。
無線ネットワークにおいて、ネットワーク構築は、通信が比較的安定しているノードを親ノードまたは子ノードと設定するのが好ましい。
このような通信が比較的安定しているような状況においては、NACKブルームフィルタに反映させられる要素数(子ノードの数)nを小さくできる。この結果、同じビット列長(ビットマップ長)mに対しては、第1実施形態のACKブルームフィルタに比べて、誤検出率を低くすることも可能である。よって、第1実施形態と同等の誤検出率を達成する場合、NACKブルームフィルタのビット列長mを短くすることも可能となる。これによりメッセージ長を低減することも可能となる。
例えば、第1実施形態で例示したケース同様に、ビットマップ長m=64、かつ子ノード数は概ね7台以下程度となるようなネットワークを想定する。要素数n、即ちNACK情報の送信先ノードの数は、2台または3台程度と見積もる。このとき、n={2,3}に対するkの値は、k=(m/n)・ln2より、k={22.18,14.79}〜={22,15}となる。“〜=”は、ニアリーイコールである。このようなnとkの組み合わせに対して、誤検出の確率はいずれも0.01%以下となり、極めて低い値となる。仮にn=2を想定して求められたk=22を採用している場合で、実際にはn=6台もの子ノードにNACK情報を送らなければならない状況でも、誤検出率は1.3%程度となり、依然として十分に小さい値と考えることができる。これは、システム要件次第で十分に無視できる程度の確率である。このように誤検出率が十分に低い場合、ビット列長m=48など、より短い値に設定して、伝送効率をより高めることも可能である。
以上のように、本実施形態によれば、効率良くNACK情報を通知できる。特に、親ノードへ送信するメッセージに当該NACKブルームフィルタを含める場合には、さらに効率よくデータを送信することが可能である。よって、無線通信装置およびネットワークの電力を削減することができる。
(第3実施形態)
第1実施形態および第2実施形態においては、1つまたは複数のノードへのACK情報およびNACK情報をブルームフィルタで表現したが、本実施形態においては、1つまたは複数のノードの宛先情報をブルームフィルタで表現する。以下、第1実施形態および第2実施形態と異なる部分を中心に説明する。
図16は、本実施形態に係るマルチホップ無線ネットワークの一例を示す。コンセントレータ120が、ノード23、49、78、81と接続を確立している。ノード5は、これらのノード23、49、78、81の子ノードである。ノード9は、ノード5の子ノードである。このようなネットワーク構成の場合、ノード5は、コンセントレータ120と通信するために、ノード23、49、78、81の少なくともいずれかを経由する必要がある。ノード5は、ノード23、49、78、81から複数の親ノードを選択する。親ノード選択するために、第1実施形態で説明したランクを指標として用いてもよい。例えばランクの値が最小のノードから優先的に複数の親ノードを選択してもよい。
図17は、本実施形態に係るメッセージフォーマットの一例である。このフォーマットは、宛先ブルームフィルタフィールドと、ペイロードフィールドとを含む。フォーマットは、さらにペイロード長フィールドを含んでもよい。宛先ブルームフィルタフィールドには、複数の宛先ノード(親ノードまたは子ノード)のIDを追加したブルームフィルタ(宛先ブルームフィルタ)を格納する。宛先ブルームフィルタのフィールド長は6[Byte]である。宛先ノード群とは、メッセージの送信先となる親ノードの集合、子ノードの集合、または親ノードと子ノードの集合である。宛先ブルームフィルタフィールドは、本実施形態に係るビットマップを格納する第1フィールドの一例である。ペイロード長およびペイロードは、第1実施形態と同様である。図17に示したフォーマットは一例に過ぎず、図7および図14と同様に、種々のバリエーションが可能である。
本実施形態に係る通信動作について説明する。図18は、ノード9、23、49、78、81のそれぞれのIDに基づき、4つのハッシュ関数H0、H1、H2、H3から計算されたハッシュ値列の例を示している。ハッシュ関数の引数は、IDの他、フレーム番号などの情報を追加で用いて定義してもよいし、フレーム番号などの情報に応じて、使用するハッシュ関数を変更してもよい。
ノード5が、自らの親ノードとして、ノード49およびノード78を選択したとする。ノード5は、メッセージを生成する際、ノード49とノード78のIDをブルームフィルタ(宛先ブルームフィルタ)に追加する。ノード49、78のハッシュ値列の和集合である(2,6,13,20,22,38,53)に対応するビットを1にする。その後、ノード5は、宛先ブルームフィルタフィールドに宛先ブルームフィルタを設定したメッセージを送信する。なお、メッセージにおけるペイロード長フィールドおよびペイロードフィールドには、それぞれ必要な値およびデータを設定する。
ノード5の上位近隣ノードであるノード23、49、78、81は、ノード5から送信されたメッセージを受信する。ノード23、49、78、81の受信メッセージ解析部220は、宛先ブルームフィルタフィールドに含まれている宛先ブルームフィルタに、自ノードのノードIDが含まれているかを検証する。すなわち、宛先ブルームフィルタにおいて、自ノードのノードIDに基づき算出されるハッシュ値列に対応するビット群が1になっているかを検証する。ビット群がすべて1のとき、自ノードのノードIDが含まれている、すなわち当該メッセージは自ノード宛であると判断する。自ノードのノードIDが含まれていると判断した場合、当該メッセージのペイロードを、コンセントレータ120へと送信する。
一方でノード23、81は、宛先ブルームフィルタの検証結果から、自ノードのIDが宛先ブルームフィルタに含まれていない、すなわち、当該メッセージは自ノード宛ではないと判断する。ノード23、81の受信メッセージ解析部220または制御部259は、受信したメッセージを破棄してもよいし、ネットワーク再構築時に活かしたりデバッグに活かしたりするために、当該メッセージの一部または全部を保存しておいてもよい。
また、ノード5の制御部259は、ノード49、78それぞれとの間の無線リンク品質を調べ、それらのいずれも基準を満たさない(良好ではない)場合には、ノード81を3つめの親ノードとして追加してもよい。
さらに、本実施形態においては、宛先ブルームフィルタに、親ノードに加え、子ノード(図16の例ではノード9)のIDを追加してもよい。なお、ハッシュ関数の計算に関しては、親ノードと子ノードとで同様に計算してもよい。または、親ノードは、IDをハッシュ関数の引数として用い、子ノードは、ID値に一定の値(例えば1000)を足した数値をハッシュ関数の引数として用いてもよい。このような親および子の種別に応じたハッシュ関数の引数の制御は、制御部259で行えばよい。
ノード間通信は無線で行われるため、ノード5から送信した無線信号は、親ノード49、78だけではなく、子ノード9にも到達する可能性が高い。このように親ノードのみならず、子ノード9を宛先ブルームフィルタで指定することにより、一度の送信において、より多くの情報を伝達できる。
例えば、ノード5から親ノード49、78へデータ(センサデータ等)を送信するとともに、同じメッセージ内において、子ノード9へデータ(ランク更新情報)を送信する。この場合、ペイロードフィールドに、センサデータとランク更新情報の2種類のサブメッセージを入れる。各サブメッセージのヘッダに宛先情報を追加してもよい。すなわち、センサデータを含むサブメッセージのヘッダに、親ノード49、78の宛先情報を、ランク更新情報を含むサブメッセージヘッダには、子ノード9の宛先情報を含める。宛先情報は、ノードIDなどのノードの識別子でもよいし、宛先ブルームフィルタによって表現してもよい。
なお、サブメッセージの内容から、当該サブメッセージが下位近隣ノードに伝達されるべきか、上位近隣ノード(その中でも特に親ノード)に伝達されるべきかが判断可能である場合もある。この場合、サブメッセージのヘッダに宛先情報を含めなくてもよい。例えばサブメッセージに含まれる当該種別に基づき、各ノードが当該サブメッセージの伝達されるべき方向を判断してもよい。あるいは、情報の種別に応じてペイロード長が固定であるならば、そのサブメッセージのペイロード中の位置から、自ノードが受信するべきサブメッセージを判断することも可能である。当然ながら、ここで述べた以外の方法で判断することも可能である。このような判断は、受信メッセージ解析部220または制御部259で行うようにすればよい。
以上のように、本実施形態によれば、複数のノードの宛先情報をブルームフィルタで表現することによって、効率的な通信が可能となる。
本実施形態の第1変形例として、親ノードが頻繁には変更されないことを前提として、送信するメッセージから宛先ブルームフィルタを省略してもよい。特定の条件が成立した場合にのみ、当該メッセージに宛先ブルームフィルタを入れるようにする。特定の条件が成立する例としては、親ノードの変更があったとき、または一定期間ごとのネットワークヘルスチェックの時刻になったときなどがある。これにより、間欠的に宛先ブルームフィルタが送信されることになる。第1変形例で使用するメッセージフォーマットの例を、図19(A)に示す。
図19(A)のメッセージフォーマットは、ペイロード種別フィールドと、ペイロード長フィールドと、ペイロードフィールドとを備える。宛先ブルームフィルタを送信する場合、ペイロードフィールドに宛先ブルームフィルタを設定するのではなく、図19(B)に示す宛先ブルームフィルタのみを含むメッセージ(親ノードの情報更新メッセージ)を送信してもよい。宛先ブルームフィルタ以外の情報をさらにペイロードフィールドに追加することで、複数種類の情報を併せて送信してもよい。
本実施形態の第2変形例として、メッセージが経由すべきルート(中継ルート)に存在するノードのIDを、ブルームフィルタ(宛先ブルームフィルタ)によって表現する。当該宛先ブルームフィルタを、当該メッセージの宛先ブルームフィルタフィールドに格納する。図20は、本実施形態に係るマルチホップ無線ネットワークの他の例を示す。なお、コンセントレータ120は、ネットワーク構成を把握しているものとする。
コンセントレータ120が、ノード9に対して動作停止命令などのメッセージを送信する場合について説明する。この場合、コンセントレータ120は、例えば図17のメッセージフォーマットを用いて、ID49、78、5、9を追加した宛先ブルームフィルタを設定したメッセージを送信する。ノード49、78は自ノードのIDが宛先ブルームフィルタに含まれている(検証結果が陽性)と判断し、さらに下位近傍ノード5へ当該メッセージに含まれるペイロードデータ(動作停止命令)を転送する。転送の際、ノード49、78はそれぞれ、ノード5、9のIDを追加した宛先ブルームフィルタを生成して宛先ブルームフィルタフィールドに設定する。あるいは、ノード49、78は、受信したメッセージに含まれる宛先ブルームフィルタをそのまま使ってもよい。
上記のように、コンセントレータ120からノード9への中継ルートを確定させておくことで、中継に関係の無いノードで消費電力が増大することを防止できる。メッセージ内でルート情報を指定することによって、意図していないノードによる転送を防止し、消費電力増大を抑制することが可能となる。
なお、宛先ブルームフィルタにおいて、仮にハッシュ値の衝突による誤検出(偽陽性)が起こったとしても、誤検出に起因するメッセージの消失は、回避可能である。
本実施形態の第3変形例として、接続確立要求を送信したい相手ノードのIDをブルームフィルタ(宛先ブルームフィルタ)に追加することも可能である。図16を用いて、具体例を説明する。ノード5は電源が入れられてからしばらく経過した状態であるとする。ノード5は、ID49とID78を、宛先ブルームフィルタに追加した接続確立要求メッセージを送信する。ノード49、78は、検証結果が陽性のため、ノード5と接続確立のための処理を行う。ノード23、81は、検証結果が陰性のため、例えばメッセージを破棄する。
なお、本第3変形例においてハッシュ値の衝突が発生した場合を考える。例えばノード5はノード81と接続する意図が無いにも拘わらず、ノード81がノード5からの接続要求を受けたと誤検出する場合を考える。この場合、ノード5は、ノード81との接続確立手順を進めずに、途中で停止してもよい。あるいは、ノード5は、いったんノード81との接続を確立し、後に当該接続を解除する手続を行ってもよい。なお、本第3変形例においても、誤検出(偽陽性)に起因して、伝送(再送)すべきデータが消失する問題は生じない。
(第4実施形態)
第1実施形態〜第3実施形態においては、ACK情報、NACK情報および宛先情報のいずれか1種類の情報をブルームフィルタで表現したが、本実施形態においては、少なくとも2種類の情報を1つのブルームフィルタでまとめて表現する。以下、第1実施形態〜第3実施形態と異なる部分を中心に説明する。
図21は、本実施形態におけるマルチホップ無線ネットワークの一例を示す。このネットワークは、256台のノードを収容でき、各ノードには、0〜255の範囲内の値のノードIDが割り当てられているものとする。このようなネットワークにおいて、ノード5は、子ノード9、218からデータを受信済みであり、親ノード49、78に当該データを伝送(中継)しようとしている。本実施形態では、このような場合に、1回のメッセージ送信で、親ノード49、78には当該データを伝送(中継)し、子ノード73、169、241にはNACK情報を送信する。
具体的には、ノード5は、データの宛先ノードに関しては、そのノードIDをハッシュ関数の引数として用い、NACK情報の宛先ノードに関しては、そのノードIDに256を足した数値を、ハッシュ関数の引数として用いる。
NACK情報を送信する代わりに、ACK情報を送信するように、上記の構成を変形してもよい。
なお、上述の例では、1つのノードは1つの情報(NACK情報、ACK情報またはデータ)に対する宛先として指定されたが、1つのノードが複数種類の情報の宛先として指定される構成も可能である。さらに、親ノードからメッセージを受信する場合においては、親ノードにACK情報またはNACK情報を送信する場合もあり得る。このときも、上述した方法で、宛先ブルームフィルタに親ノード宛のACK情報またはNACK情報を含めることができる。また、ACK情報とNACK情報の両方を宛先ブルームフィルタに追加してもよい。上述した例では、データの宛先と、NACK情報(またはACK情報)の宛先とで、引数の算出式(定義)が異なったが、引数の算出式を同じにする形態も可能である。 また、上述した例では、NACK情報(またはACK情報)の宛先に対して、256をノードIDに加算した数値を、ハッシュ関数の引数として用いたが、加算する値は256に限られない。1つのブルームフィルタで、複数種類の情報(ACK情報、NACK情報、およびペイロード)の宛先の全部または一部を同時に表現することで、さらに効率的な通信が可能となる。
(第5実施形態)
本実施形態においては、各ノードが、受信したメッセージに含まれるブルームフィルタへ自ノードのIDに基づく関数の計算結果を追加し、追加後のブルームフィルタを設定したメッセージを親ノードに転送する。経路上の各々のノードがこれを繰り返すことにより、最終的にメッセージを受信したコンセントレータは、そこに含まれるブルームフィルタを解析することで、当該メッセージがどのような経路(すなわちどのノード)を辿って、コンセントレータに到達したのかを把握できる。
図22は、本実施形態に係るメッセージフォーマットの一例を示す。このメッセージフォーマットは、1[Byte]の宛先IDフィールドと、8[Byte]の途中経路ブルームフィルタフィールドと、N×M[Byte]のペイロードメッセージ配列フィールド(以下、配列フィールド)とを備える。メッセージフォーマットは、さらに1[Byte]の送信元IDフィールドと、2[Byte]のペイロードメッセージ数フィールドと、を含んでもよい。配列フィールドは、N[Byte]のM個の配列要素を格納可能である。途中経路ブルームフィルタフィールドは、あるノードからコンセントレータ120までの経路上のノードIDを反映したブルームフィルタ(途中経路ブルームフィルタ)を収納するためのフィールドである。
本実施形態に係る無線通信装置110の動作を、説明する。図20で、ノード5はノード9からメッセージを受信し、メッセージの宛先が自ノードであることを確認したのちに、メッセージに含まれる途中経路ブルームフィルタに、自ノードID(=5)に基づく関数の計算結果を追加する。次に、ノード49は、ノード5とノード222からメッセージを受信し、ノード5、9、49、222の4つのノードのIDが設定された途中経路ブルームフィルタを生成する。ノード49は、当該ブルームフィルタを途中経路ブルームフィルタフィールドに格納する。ノード49は、このようにして生成したメッセージをコンセントレータ120へ送信する。
コンセントレータ120は、途中経路ブルームフィルタを検証し、当該メッセージの送信元であるノード49の子孫ノードとして、ノード5、9、222が存在することを認識する。
コンセントレータ120は、ノード49の子孫ノードに対するメッセージをノード49のみを通して効率よく送信することができるので、ノード49以外のノードが当該メッセージを処理することを防止し、省電力化を図ることが可能となる。各ノードは、受信したメッセージのペイロードメッセージ数をインクリメントして更新した後に、他のノードに送信することができる。各ノードは、生成したデータをペイロードメッセージ配列に追加して他のノードへ送信することができる。なお、図22のフォーマット例においては、送信元IDフィールドを設けてあるため、ノード9(図20参照)は、途中経路ブルームフィルタに自ノードのIDを追加せずに、メッセージを送信してもよい。受信側のノード5では、当該メッセージの送信元IDフィールドからノード9のID(=9)を取得して、途中経路ブルームフィルタに追加すればよい。このようにすることにより、途中経路ブルームフィルタに追加される要素数が1つ減る。これにより、ハッシュ値列が衝突する確率を減らすことが可能となる。
図23(A)は、本実施形態におけるメッセージフォーマットの別の例を示す。図23(A)のメッセージは、宛先ID0フィールドと、宛先ID1フィールドと、送信元IDフィールドと、ペイロードメッセージ数フィールドと、N×16[Byte]のペイロードメッセージ配列フィールド(以下、配列フィールド)とを備えている。図23(B)は、図23(A)の配列フィールドのフォーマット例を示す。配列フィールドは、8[Byte]の途中経路ブルームフィルタフィールドと、2[Byte]のセンシングノードIDフィールドと、2[Byte]の温度センサ値フィールドと、4[Byte]のセンシング時刻フィールドとを備えている。図23のフォーマットは一例であり、図7または図14等に示したように、種々のバリエーションが可能である。
図23(B)において、センシングノードIDフィールドは、自ノードのIDを格納するフィールドである。また、温度センサ値フィールドは、自ノードの温度センサで検出した値(温度センサ値)を格納するフィールドであり、センシング時刻フィールドは、その検出時刻を格納するフィールドである。途中経路ブルームフィルタフィールドは図22と同じである。なお、図23(B)における、温度センサ値とセンシング時刻のフィールドは、一例としてあげたものに過ぎない。これらのフィールドの少なくとも一方を、他のフィールドと置き換えたり、他のフィールドを追加したりしてもよい。
図23(A)のメッセージフォーマットを用いた場合の動作について、図20を参照して説明する。ノード9は、宛先ID0フィールドに親ノードIDである5を格納し、送信元IDフィールドには、自ノードのIDである9を格納する。宛先ID1フィールドは、宛先(親ノード)が2以上ある場合に、2つ目の送信先を格納するフィールドである。図20においてはノード9の宛先(親ノード)は、一つしかないため、この宛先ID1フィールドには、無効である値、例えば、0を格納する(この場合、IDが0のノードは、ネットワーク内に存在しないものとする)。そして、図23(B)のフォーマットに従って、ペイロードデータを生成する。より詳細には、ビットを全て0に設定した途中経路ブルームフィルタを途中経路ブルームフィルタフィールドに格納し、センシングノードIDフィールドに自ノードIDである9を格納し、温度センサ値フィールドとセンシング時刻フィールドにはそれぞれ、温度センサから検出した温度値とその検出時刻とを格納する。ノード9は、生成したペイロードデータを、図23(A)の配列フィールドの0番目の配列要素に格納する。このようにして生成したメッセージを送信する。
ノード9からメッセージを受信したノード5は、受信したメッセージの宛先ID0フィールドを49に、宛先ID1フィールドを78に、送信元IDフィールドを5に設定し、さらに、ペイロードメッセージ数フィールドに2を設定する。また、ノード5は、図23(B)のフォーマットに従ってペイロードデータを生成し、生成したペイロードデータを、配列フィールドの1番目の配列要素に格納する(0番目の配列要素にはノード5が追加したペイロードデータが入っている)。ノード5は、受信したメッセージにおける配列フィールドの配列要素のすべて(ここでは配列フィールドには0番目の配列要素のみ存在する)に対して、そこに含まれる途中経路ブルームフィルタに、自ノードのIDを追加する。本例では0番目の配列要素に含まれる途中経路ブルームフィルタに自ノードのID(=5)を追加する。ノード5は、このようにして生成したメッセージを送信する。
ノード5からメッセージを受信したノード49は、ノード5と同様の処理によりメッセージを生成して、メッセージをコンセントレータ120へ送信する。ただし、ノード49は、ノード222からもメッセージを受信するため、ノード49は、ノード5とノード222の2つのノードから受信した2つのメッセージの合成処理を行う。例えば、ノード222から受信したメッセージの配列フィールド内の全配列要素を取り出して、ノード49から受信したメッセージの配列フィールドに追加する。あるいは、逆に、ノード49から受信したメッセージの配列フィールド内の全配列要素を取り出して、ノード5から受信したメッセージの配列フィールドに追加する。各配列要素内の途中経路ブルームフィルタには自ノードのIDを追加する。また、ノード49は、自ノードで生成したペイロードデータも、配列フィールドに配列要素として追加する。このように処理した結果、ノード49が送信するメッセージに含まれるペイロード数は4となり、配列フィールドには4つの配列要素が含まれる。
ノード49からメッセージを受信したコンセントレータ120は、配列フィールドの各配列要素の途中経路ブルームフィルタを解析することにより、4つのペイロードデータがそれぞれどのようなノードを経由して伝送されてきたかを把握できる。例えばノード9を調べたい場合、センシングノードIDフィールドが9のペイロードを特定し、当該ペイロード内の途中経路ブルームフィルタを解析することで、ノード9のペイロードが、ノード5と49を経由して、伝送されてきたことが分かる。同様に、ノード5が生成したペイロードデータおよびノード222が生成したペイロードデータは、ノード49を経由してコンセントレータ120に伝送されていることが分かる。また、ノード49が生成したペイロードデータは、他のノードを経由せずにコンセントレータ120まで到達したことが分かる。これらの情報をもとに、コンセントレータ120は、ノード49より下位のネットワーク構造を表す情報を生成してもよい。
ハッシュ関数の引数は、ノードIDに限定されず、例えば、ノードIDに加えホップ数等のパラメータを用いて求まる数値を引数としてもよい。図20のネットワーク例において、コンセントレータ120はホップ数0、ノード49はホップ数1、ノード5はホップ数2、ノード9はホップ数3である。そこで、ホップ数に1000を乗じた値(ホップ数×1000)をノードIDに加算した数値を、引数としてもよい。すなわち、ノード9、5、49を辿って、コンセントレータ120に伝送されたメッセージには、{3009,2005,1049}が追加された途中経路ブルームフィルタが格納されている。このようにすることで、検証に要する演算量は増加するものの、コンセントレータ120および中継ノードは、子孫ノードIDの一覧に加えて、各ノードのホップ数までを認識することが可能となる。すなわち、経路途中ブルームフィルタにホップ数の情報を含めることができる。
ここで、本実施形態でも、他の実施形態と同様に、ハッシュ値の衝突に起因する誤認が発生する可能性があり得る。
例えば、図20のノード78とその子孫ノードのIDが追加されたブルームフィルタにおいて、ノード222のIDに基づくハッシュ値列に対応するビットがすべて1になっている場合を考える。つまり、ノード78とその子孫ノードのハッシュ値列の和集合が、ノード222のハッシュ値列を完全に含んでいる。この場合、コンセントレータ120は、ノード222がノード49の子孫ノードなのか、ノード78の子孫ノードなのかを区別できない。特に、ノード78が多くの子孫ノードを有している場合、ノード78からコンセントレータ120へと伝送されてくるメッセージに含まれるブルームフィルタは、比較的多数のビットが1になっている可能性が高く、ハッシュ値の衝突の可能性も高くなる。
図24は、ノード78に子孫ノードが多数存在するネットワークの例を示す。ノード97、165、231のハッシュ値列の和集合が、ノード222のハッシュ値列を完全に含んでおり、一方でノード97、165、231のうちいずれか2つのハッシュ値列の和集合は、ノード222のハッシュ値列を完全には含んでいない場合について説明する。なお、ブルームフィルタを生成するためのハッシュ関数の引数はノードIDのみであるとする。
このようなハッシュ値の衝突が発生している場合に、コンセントレータ120がノード222に対してメッセージ(例えば制御指令メッセージ)を送信する場合、コンセントレータ120は、ノード49とノード78の両方にメッセージを送信する。これによって、ノード222にメッセージが確実に届くようにすることができる。また、前述した実施形態と同様に、ハッシュ関数の引数として、ノードIDのみを用いる場合のほか、ノードIDと、パラメータ(シード値)とから引数を定義することも可能である。パラメータとして、フレーム番号などの時間依存要素を用いてもよい。これにより、例えば,ノード97、165、231のハッシュ値列の和集合が常にノード222のハッシュ値列を完全に含み続ける可能性を低減させることができる。ノード78は、過去の数時間フレームにわたって、受信した途中経路ブルームフィルタを保管しておく。ノード78の制御部259は、これらの途中経路ブルームフィルタを比較して、自ノードの子孫ノードに存在しないノードを検出してもよい。本例の場合、ノード78は、自ノードの子孫ノードに、ノード222が存在しないとの判断に至る可能性が高いものと考えられる。
ただし、このような判断は、最近受信して保管している途中経路ブルームフィルタのみからでは困難である。そこで、ネットワークの他の部分から収集したブルームフィルタ、ネットワーク管理者の手動操作によって与えられた情報、ノードにハードコーディングされた情報によって、現在保管している途中経路ブルームフィルタから得られる情報を補正してもよい。
例えば、上述した例のように、ノード222が、ノード49とノード78のどちらの子孫ノードであるのかが判断できない場合、コンセントレータ120は、GUI(Graphical User Interface)を通して、ネットワーク管理者にその旨を通知してもよい。GUIを通じてノード222に関するハッシュ値衝突の発生を認識したネットワーク管理者は、ノードの配置図を参照することで、ノード222が実際にはノード49の子孫ノードであること、または、その可能性が高いことをコンセントレータ120へと入力する。コンセントレータ120は、この情報を元に、ノード222がノード78の子孫ノードではないとの補正を行ってもよい。これにより、コンセントレータ120は、ノード222の位置を、より正確に特定できる。
また、ネットワーク管理者は、ネットワークセットアップ時に予め無線通信装置の地理情報を、コンセントレータ120へと入力しておいてもよい。地理情報の例として、地理的な配置図と、可能であれば無線伝播障害物の位置とその影響度の推定値等の情報がある。コンセントレータ120は、これらの地理情報を用いて、途中経路ブルームフィルタのみからでは判断できないネットワーク上の構成を正しく把握し、ノード位置をより正確に特定できる。
ノード台数が多い場合、ネットワーク管理者が全てのノード間の関係を手作業でシステムに入力するのは困難である。さらに、無線ネットワークの場合、個々のノードおよびコンセントレータが、実測した無線伝播パラメータに基づいて、自動的にネットワーク情報の構成および変更を行うのが困難である場合が多い。しかし、上述のように目的のノードがどの経路に存在するのかが不明な状況でのみ、GUIでその補正を行う程度であれば比較的容易に対応できる可能性が高いため、十分に実用的なシステムとして構成することも可能である。
以上のように、本実施形態によれば、ブルームフィルタを用いることにより、効率よく通信を行うことができる。また、ノードは、メッセージに含まれる経路途中ブルームフィルタを解析することで、メッセージが辿ったノードを特定できる。このような機構は、コンセントレータまたはネットワーク管理者が、ネットワーク構造の全容を把握するのに役立つ。また、通信トラフィックが集中するノードを特定することができる。コンセントレータから発信される制御指令メッセージを適切なノードまで伝搬させるための、ルーティングテーブルの構築に役立てることもできる。
(第6実施形態)
図25は、本実施形態に係る無線通信装置110の構成を示すブロック図である。この無線通信装置110は、図6の無線通信装置110と比較すると、制御部259が再送要否判断部260を備えている点において異なる。再送要否判断部260は、親ノードから受信したメッセージに含まれるACK情報またはNACK情報(ACKブルームフィルタまたはNACKブルームフィルタ)から、データを再送信するか否かの判断を行う。制御部259は、送信するメッセージまたはデータを一時的に保持しておくバッファを備えている。以下、これまで述べた実施形態と異なる部分を中心に説明する。
送信メッセージ生成部210は、自ノードに割り当てられたスロット(送信スロット)で送信するメッセージに含まれるデータを、スロット番号に関連づけて、制御部259内のバッファに格納しておく。またはメッセージ全体をスロット番号に関連づけて記憶してもよい。
ビットマップ検証部224は、親ノードから受信したメッセージのACKブルームフィルタフィールドからブルームフィルタ(ACKブルームフィルタ)を取り出す。そして、当該ACKブルームフィルタに基づき、自ノードIDを検証して、自ノードのIDがACKブルームフィルタに含まれているか判断する。自ノードIDがACKブルームフィルタに含まれている場合(検証結果が陽性の場合)は、自ノード宛にACK情報が返送されたと判断し、それ以外の場合は、自ノード宛にACK情報が返送されていないと判断する。
または、ビットマップ検証部224は、親ノードから受信したメッセージのNACKブルームフィルタフィールドからブルームフィルタ(NACKブルームフィルタ)を取り出す。そして、当該NACKブルームフィルタに基づき、自ノードIDを検証して、自ノードのIDがNACKブルームフィルタに含まれているか判断する。自ノードIDがNACKブルームフィルタに含まれている場合(検証結果が陽性の場合)は、自ノード宛にNACK情報が返送されたと判断し、それ以外の場合は、自ノード宛にNACK情報が返送されていないと判断する。
自ノード宛にACK情報が返送されていないと判断した場合、または、自ノード宛にNACK情報が返送されたと判断した場合は、再送要否判断部260は、自ノードが送信したメッセージが親ノードにおいて正常に受信されなかったと判断し、メッセージの再送信が必要であると決定する。また、親ノードから、ACKブルームフィルタまたはNACKブルームフィルタを含むメッセージを受信できなかった場合も、メッセージの再送信が必要であると判断する。
再送信が必要であると判断した場合、再送要否判断部260は、再送信の指示を、送信メッセージ生成部210へ送る。送信メッセージ生成部210は、制御部259内のバッファから、上記送信スロットで送信したデータとスロット番号とをペイロードフィールドに設定したメッセージを生成し、メッセージ送信部252を介して、親ノードへ送信する。一方、再送信が不要であると判断した場合には、再送要否判断部260は、制御部259内のバッファから、上記送信スロットで送信したデータ等を破棄する。この際、当該データ等を情報記憶部230に移動させてもよい。再送されたメッセージを受信したノードの受信メッセージ解析部220または制御部259は、ネットワーク全体で共有しているスロット番号と、再送データに関連づけられたスロット番号とを比較することで、受信したメッセージに含まれるデータが、再送データか否かを判断できる。
なお、上述した例では、再送データとともにスロット番号を、再送信するメッセージに含めたが、これは必須ではない。例えばメッセージに再送フラグフィールドを設け、当該フィールドに再送フラグを設定することで、再送であることを示してもよい。または、再送回数を表すフィールドを設け、当該フィールドに再送回数を設定してもよい。
また、ノードは、再送データおよびスロット番号を、自ノードのセンサデータとともに同じメッセージで送信してもよい。これにより省電力性を維持しつつ、再送を実現できる。
ノードの省電力性が求められるLLNsのようなネットワークにおいては、ノードの送信機会を限定することにより、省電力化を達成しているため、再送のために送信機会を増えることは、適切ではない。一方、再送は、MAC(Media Access Control)レイヤ等のデータリンク層での再送や、TCP等のトランスポート層での再送、アプリケーション層での再送など様々に存在する。マルチキャストベースまたはブロードキャストベースの通信方式の場合には、データリンク層での再送は行わないことが一般的である。この背景には、マルチキャストベースまたはブロードキャストベースの通信方式では、各ノードへのACK情報またはNACK情報の送信ができないことが原因の一つとしてあげられる。これに対して、本実施形態およびこれまで述べた実施形態においては、ブルームフィルタの形態で、複数ノードに同時にACK情報またはNACK情報を通知が可能であることから、データリンク層での再送も可能である。ただし、データリンク層での再送を実現するためには、そのためのスロットを新たに設ける必要がある。このため、無線資源(スロット等)の効率的な使用の観点から、トランスポート層およびアプリケーション層での再送の方が適していると言える。
また、再送回数などを制限することで、データの再送による送信帯域の逼迫を回避してもよい。例えば、受信側のノードは、再送のデータのスロット番号と、各ノードおよびネットワーク全体で管理しているスロット番号とを比較する。両者の差がしきい値以上の場合には、再送のデータを破棄する。これにより、再送データのより自ノードよりもランクが低いノードである上位ノードへの転送を停止して、再送データによる送信帯域の逼迫を回避できる。
送信メッセージ生成部210またはペイロード生成部214は、これまで他のノードから受信して転送(送信)したデータを、そのデータを識別するための情報と関連づけて、情報記憶部230に格納する。送信メッセージ生成部210またはペイロード生成部214は、子ノードから受信したデータが、既に転送(送信)されたデータか否かを、情報記憶部230に記憶されている情報に基づき確認する。受信したデータが、すでに送信されたデータである場合には、すなわち当該データが情報記憶部230に格納されている場合は、当該データを送信しないようにしてもよい。これにより、不要なデータの中継を防止し、送信帯域の逼迫を回避できる。
例えば、子ノードが自ノードのセンサデータを含むメッセージを送信し、親ノードは、当該メッセージを正常に受信したとする。しかしながら、子ノードが、親ノードからACK情報(自ノードのIDを含むACKブルームフィルタ)を受信できなかった場合、子ノードはセンサデータを再送する。この場合、親ノードは、再送されたデータを再度中継すると、不要なデータが上位ノードへと伝送される。そこで、親ノードは、すでに送信されたデータかを判断し、送信されたデータの場合には、より上位のノードへ転送しないことで、送信帯域の逼迫を回避する。
図26は、本実施形態に係る子ノードが親ノードにメッセージを送信後に行う動作のフローチャートである。ここでは親ノードがメッセージにACKブルームフィルタが含まれている場合を述べる。NACKブルームフィルタの場合も同様の動作が可能である。
子ノードは、親ノードへメッセージを送信した後、親ノードから受信用のスロットにおいて、メッセージの受信を待機する(ステップS100)。子ノードは、メッセージを受信した場合に、このメッセージが親ノードからのものか否かを判断する(ステップS101)。
受信したメッセージが親ノードから送信されたメッセージである場合(ステップS101のTRUE)、子ノードは、ビットマップ検証部224で、ACKブルームフィルタに基づき、自ノード宛にACK情報が送られているかを検証する(ステップS102)。一例として、ハッシュ関数の引数がノードのIDの場合、ACKブルームフィルタに自ノードのIDが含まれていれば、自ノード宛にACK情報が送信されていると判断する(ステップS102)。
自ノード宛にACK情報が送信されている場合(ステップS103のTRUE)、子ノードは、ACK情報の対象となったデータ(1回目に送信したデータまたは再送データ)を、スロット番号等に関連づけて、情報記憶部230に保存する(ステップS104)。
一方で、受信したメッセージが親ノードから送信されたメッセージでは無かった場合または受信用のスロットでメッセージを受信しなかった場合(ステップS101のFALSE)、または、自ノード宛にACK情報が送信されていなかった場合(ステップS103のFALSE)、子ノードは、ACK情報が返されなかった送信データを、スロット番号等に関連づけて、再送要否判断部260内のバッファへ格納する(ステップS105)。バッファへ格納されたデータ等は、再送に用いられる。なお、ステップS100の前の段階では、子ノードが親ノードに送信したデータおよびスロット番号等は、送信メッセージ生成部210のバッファ、制御部259のバッファ、または情報記憶部230等に一時的に保持しておき、ステップS105の実行時に、当該再送要否判断部260内のバッファに移せば良い。
図27(A)は、本実施形態に係る親ノードの動作のフローチャートである。
親ノードは、子ノードからの受信用のスロットにおいて、子ノードからのメッセージの受信を待機する(ステップS200)。
親ノードは、当該受信用のスロットで子ノードからのメッセージを受信した場合(ステップS201のTRUE)、当該メッセージのペイロードフィールドに含まれているデータ(ペイロード)と同じデータが、情報記憶部230に保存されているかを確認する(ステップS202)。この際、ペイロードフィールドに複数のノードのデータが含まれているときは、ノードごとに確認を行う。一方、親ノードは、当該スロットで子ノードからのメッセージを受信しなかった場合(ステップS201のFALSE)、本フローの処理を終了する。再び子ノードからの受信を待機する状況となった場合に、再び受信待機を行う(S200)。
図27(B)は、図27(A)のステップS202の詳細な動作フローを示す。親ノードは、子ノードから受信したメッセージのペイロードフィールドから各ノードのデータを抽出し、抽出したすべてのデータに対して処理を実行したかを判断する(S210)。すべてのデータに対して処理が実行された場合(ステップS210のTRUE)、本フローの動作を終了する。まだ抽出したデータのうち、まだ処理していないデータが存在するときは、処理するデータを1つ特定し、特定したデータと同じデータが、情報記憶部230に保存されているか否かを確認する(ステップS211)。当該データが情報記憶部230に保存されている場合は(ステップS211のTRUE)、当該データを上位ノード(すなわち自ノードの親ノード)へ送信する必要はないと判断する。そして、ステップS210に戻る。一方、当該データが情報記憶部230に保存されていない場合(ステップS202のFALSE)、当該データを上位ノードへ中継するため、制御部259のバッファ等へ格納し、ステップS210の処理へ戻る。
このように一度も上位ノードへ送信したことのないデータについては、中継用のデータとして制御部259のバッファへと保存する。一方、以前に送信済みのデータについては、当該バッファには保存しないことで、上位ノードへの送信を回避する。なお、親ノードがデータを上位ノードへ送信するときは、当該上位ノードから見て当該親ノードは、上位ノードの子ノードとなる。このとき、当該親ノードは、図26のフローに従って子ノードとしての動作を行う。
以上のように本実施形態によれば、親ノードから送信されるブルームフィルタ(ACKブルームフィルタまたはNACKブルームフィルタ)に、自ノード宛のACK情報またはNACK情報が含まれるかを解析し、ACK情報が含まれない、またはNACK情報が含まれる場合に、データを再送する。これにより親ノードに確実にデータを届けることができる。再送の際、当該再送のデータを新規のデータと同じメッセージに含めることで、多くの情報を効率よく伝送することが可能である。さらに、親ノードが子ノードから受信したデータを常に上位ノードへと送信するのではなく、既に送信したデータ(すなわち上位ノードへ送信済みであるにもかかわらず、子ノードから再送により受信したデータ)については送信しないようにする。これにより、無線帯域を逼迫することを抑制することが可能となる。
(その他の実施形態)
上述した全ての実施形態の説明において、その通信は、一例として電波によりなされるものであるとしたが、通信の媒体は、電波に限定されない。例えば、広義の電波としての光、また、音波を媒体とすることも可能である。その場合、無線通信部等の構成を媒体に応じて適宜変形すればよい。
また上述した実施形態では、無線センサネットワークを例として説明したが、無線LAN、Wi−Fi(登録商標)、Bluetooth(登録商標)、ZigBee(登録商標)、IEEE802.15.4、LPWAN(Low−Power Wide Area Network)に分類されるNB−IoT(Naroow−Band Internet of Things)、LoRaWANなどの無線通信技術を用いて構築される、その他の種類の無線ネットワークでもよい。また無線ネットワークではなく、有線ネットワークでもよいし、無線ネットワークと有線ネットワークのハイブリッドでもよい。有線通信は一般に無線通信よりも伝送の確実性が高く、また無線通信に比べて伝送距離に応じた信号の減衰が小さいため、無線通信では伝送の信頼性が担保しづらい場合やノード間の距離が離れすぎている場合には、無線通信ネットワーク内で有線通信を併用することは有効である。有線通信は一般に無線通信と比べると伝送成功率が高いため、伝送成功率の近似値として1を用いて、前述の第4のランクの算出方法に用いても良い。
また、無線センサネットワーク等のネットワークにおいて、コンセントレータとは別に、パケットをスニッフしてデータを記録・保管するバックアップノードが存在してもよい。また、各ノードで計測されたデータを、ネットワークに組み込まれたアクチュエータまたは表示装置またはこれらの両方によって、現実世界へとフィードバックされてもよい。また、各ノードの計測データを組み合わせて、人間の動線解析、災害予知、橋や道路、トンネルなどインフラ設備の老朽化の分析、天気予報などに使用することができる。また、無線通信装置から送信するメッセージには、センサデータ以外のデータ、例えば故障・健全性に関する情報や、近隣ノードとのリンク品質情報などの情報も含めることができる。またコンセントレータまたは上位システムから無線通信装置へとデータを送信することもでき、最適経路情報、時分割スロット割当情報、センシング周期指令などを送信してもよい。
また、上述した実施形態では、無線通信の方式として、TDMA(Time Division Multiple Access)方式を用いたが、CSMA(Carrier Sense Multiple Access)方式、CSMA/CA(Collision Avoidance)方式、TSCH(Time Slotted Channel Hopping)方式、FTDMA(Frequency−Time Division Multiple Access)方式など、様々な方式が可能である。
なお、無線通信装置(ノード)の近隣に、本発明の実施形態と異なる他のシステムが存在し、そのシステムの電波が、本発明の実施形態の無線通信装置(ノード)と干渉することもあり得る。このため、個々のスロットの中で、CSMA/CA (Collision Avoidance )等の方式を組み合わせて使用してもよい。また、リアルタイム性を実現するためにTDMA方式のプロトコルを採用する場合があるが、そのような場合においても、本発明の実施形態を適用することが可能である。
また、TDMAを更に発展させた方式として、TSCH(Time Slotted Channel Hopping)という方式もある。TSCHでは各ノードが送受信に用いる無線チャネルを変更しながら通信を行う。これにより、ネットワーク全体のスループットを向上させるとともに、一部の特定のチャネルで発生する、周辺の他の無線システムからの電波干渉の影響を最小限に抑えることができる。よって、電波妨害、または電波傍受の影響を受けにくくすることができる。TSCHでは1つのタイムスロットにおいて、複数のチャネルを使用することができる。このため、複数の送信ノード・受信ノードペアが、並列で通信を実施することができる。TSCHやTSCHを利用した無線通信規格である6TiSCH(IPv6 over TSCH)では、1つのタイムスロットと1つの周波数との組み合わせを、セルあるいはリンクと呼ぶ。TSCH、6TiSCHネットワークを用いる場合は、上述した実施形態の説明の記述において、適宜タイムスロットをセルやリンクと読み替えることで、同様の実施が可能である。TSCHや6TiSCH、またそれらを応用した無線通信規格に準拠した無線通信システムに対して本発明を適用できることは言うまでもない。
上述した実施形態で想定している無線ネットワークの形態の1つは、ノードの動作に省電力性が求められるLLNsである。このようなネットワークにおいては、各ノードの稼働時間および通信期間は最小限に抑えられ、プロセッサ、回路、無線モジュールのスリープ時間を長めに確保している場合がある。本実施形態に係る無線通信装置でも、このようにしてスリープのタイミングを図るように制御してもよい。スリープの制御は、いかようなアルゴリズムを用いてもよい。
無線ネットワークの形態においては、周波数ホッピングを使用して通信帯域の増加を図っているシステムも多く、上述した実施形態においても周波数ホッピングを使用することも可能である。スリープを採用しているネットワークにおいては、送信ノードおよび受信ノードの双方ともがスリープを解除している必要がある。そして、周波数ホッピングを採用している場合に、送信ノードおよび受信ノードが、同じ無線チャネルで動作しているときに、通信を正しく行うことが可能となる。
また、上述した実施形態における動作は、FPGA(Field Programmable Gate Array)やASIC(Application Specific Integrated Circuit)等のハードウェアや装置により直接実行されるものであってもよい。または、ソフトウェア(プログラム)を、ハードウェアである無線通信装置110に備えられるコンピュータに実行させることで、情報処理が行われるようにしてもよい。
さらに、上記のような通信形態においては、暗号化通信と組み合わせることも可能である。例えば、ブルームフィルタフィールド(ビットマップフィールド)以外のフィールドを暗号化することにより、ペイロードやその他の重要なデータを隠蔽して通信する。別の例としては、宛先ノードIDとは別に、共有鍵をネットワーク内のノードにおいて共有しておくことにより、共有鍵方式の暗号化通信を行うことも可能である。
なお、上述した実施形態では、ビットマップとしてブルームフィルタを用いたが、与えられたデータを、確定的な射影関係に基づき所定長のビットマップへ射影するアルゴリズムであれば、他のアルゴリズムでも良い。例えばデータの射影は、ビットマップの全体を用いずに、たとえばビットマップの下位X個のビットのみを、確定的な射影関係に基づき射影するアルゴリズムでもよい。また、ブルームフィルタを拡張したカウンティングフィルタを用いてもよい。
カウンティングフィルタは、それぞれ数ビットの領域からなる複数のカウンタを備える。ブルームフィルタでは、個々のハッシュ値に対してそれぞれ1ビットが対応づけられたが、カウンティングフィルタでは、個々のハッシュ値がそれぞれカウンタに対応づけられる。カウンティングフィルタの構成例を図28に示す。64個のカウンタを含み、一番左の縦列が0番目のカウンタ、一番右側の縦列が63番目のカウンタである。1つのカウンタが4ビットを備える。
要素の追加、例えば、ACKカウンティングフィルタにIDを追加する場合には、ノードIDのハッシュ値列に対応するカウンタをインクリメントする。例えば図28の0番目のカウンタは、「0111」であるが、インクリメント後の値は、1を加算して、「1110」となる。すなわち、0番目のビットを0(第2値)、1番目、2番目、3番目のビットを1(第1値)に設定する。一方、要素を削除する場合には、ノードIDのハッシュ値列に対応するカウンタをデクリメントする。例えば、0番目のカウンタは、「0111」であるが、デクリメント後の値は、1を減算して、「0110」となる。
このような実装とすることにより、ブルームフィルタの持つ偽陽性を抑制することが可能となり、また、要素の削除も可能となる。また、ハッシュ値の衝突が発生した場合にも、カウンタの値を調べることで、その衝突の回数を知ることも可能となる。
なお、このインクリメントおよびデクリメントの処理は、ビットマップ生成部212やビットマップ検証部224により行ってもよいし、専用の処理部を設けることとしてもよい。カウンティングフィルタにおいて、カウンタは、オーバーフローが発生しないように十分大きくしなければならないが、もし、オーバーフローした場合には、要素の追加や削除の際にオーバーフローしたカウンタ自体の値を変更しないようにすることも可能である。
本実施形態で用いられる用語は、広く解釈されるべきである。例えば用語“プロセッサ”は、汎用目的プロセッサ、中央処理装置(CPU)、マイクロプロセッサ、デジタル信号プロセッサ(DSP)、コントローラ、マイクロコントローラ、状態マシンなどを包含してもよい。状況によって、“プロセッサ”は、特定用途向け集積回路、フィールドプログラマブルゲートアレイ(FPGA)、プログラム可能論理回路 (PLD)などを指してもよい。“プロセッサ”は、複数のマイクロプロセッサのような処理装置の組み合わせ、DSPおよびマイクロプロセッサの組み合わせ、DSPコアと協働する1つ以上のマイクロプロセッサを指してもよい。
別の例として、用語“メモリ”は、電子情報を格納可能な任意の電子部品を包含してもよい。“メモリ”は、ランダムアクセスメモリ(RAM)、読み出し専用メモリ(ROM)、プログラム可能読み出し専用メモリ(PROM)、消去可能プログラム可能読み出し専用メモリ(EPROM)、電気的消去可能PROM(EEPROM)、不揮発性ランダムアクセスメモリ(NVRAM)、フラッシュメモリ、磁気または光学データストレージを指してもよく、これらはプロセッサによって読み出し可能である。プロセッサがメモリに対して情報を読み出しまたは書き込みまたはこれらの両方を行うならば、メモリはプロセッサと電気的に通信すると言うことができる。メモリは、プロセッサに統合されてもよく、この場合も、メモリは、プロセッサと電気的に通信していると言うことができる。
また、用語“ストレージ”は、磁気技術、光学技術、または不揮発性メモリを利用して、永久的にデータを記憶できるに任意の装置を包含してもよい。例えば、ストレージは、HDD、光学ディスク、SSD等でもよい。
なお、本発明は上記各実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記各実施形態に開示されている複数の構成要素を適宜組み合わせることによって種々の発明を形成できる。また例えば、各実施形態に示される全構成要素からいくつかの構成要素を削除した構成も考えられる。さらに、異なる実施形態に記載した構成要素を適宜組み合わせてもよい。