JP5435147B2 - 通信装置および方法 - Google Patents

通信装置および方法 Download PDF

Info

Publication number
JP5435147B2
JP5435147B2 JP2012546598A JP2012546598A JP5435147B2 JP 5435147 B2 JP5435147 B2 JP 5435147B2 JP 2012546598 A JP2012546598 A JP 2012546598A JP 2012546598 A JP2012546598 A JP 2012546598A JP 5435147 B2 JP5435147 B2 JP 5435147B2
Authority
JP
Japan
Prior art keywords
communication device
node
packet
transmission
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2012546598A
Other languages
English (en)
Other versions
JPWO2012073316A1 (ja
Inventor
潤 伊吹
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Application granted granted Critical
Publication of JP5435147B2 publication Critical patent/JP5435147B2/ja
Publication of JPWO2012073316A1 publication Critical patent/JPWO2012073316A1/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/11Identifying congestion
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/08Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters
    • H04L43/0876Network utilisation, e.g. volume of load or congestion level
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/16Threshold monitoring
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/12Avoiding congestion; Recovering from congestion
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/12Avoiding congestion; Recovering from congestion
    • H04L47/127Avoiding congestion; Recovering from congestion by using congestion prediction

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Environmental & Geological Engineering (AREA)
  • Mobile Radio Communication Systems (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Description

本発明は、ネットワーク通信技術に関する。
複数の通信装置を含むネットワークにおいては、通信負荷の集中は好ましくない。しかしながら、状況によっては、ある通信装置に通信負荷が集中してしまうことがある。そこで、例えば、通信ネットワークシステムにおけるノードの状態とリンクの状態とに基づいて、ネットワークリソースを最適に利用することができるようにする技術を提供することを目的とする、以下のような通信ネットワークシステムが提案されている。
すなわち、当該通信ネットワークシステムは、複数の装置が備えるネットワークリソースの状況を管理する手段と、ネットワークリソースの適応制御が必要か否かを判定する手段を有する。また、当該通信ネットワークシステムは、ネットワークリソースの適応制御が必要であると判定された場合には、装置が備える機能および処理対象の配置または装置間のパスの構成を計画する手段を有する。さらに、当該通信ネットワークシステムは、計画に応じて、装置が備える機能および処理対象の再配置または装置間のパスの再構成を行う手段を有する。
特開2004−241845号公報
例えば、ネットワーク構成によっては、多くの通信装置から送信されたデータが、ある特定の通信装置を経由することがある。したがって、当該特定の通信装置に通信負荷が集中することが起こり得る。また、自らが起点となって多くのデータを送信する通信装置においては、当然、通信負荷は高い。
そして、通信負荷が集中する特定の通信装置がボトルネックとなって、例えば、伝送遅延の拡大、タイムアウトによるデータ再送の増加、あるいはその他の様々な問題が生じ得る。よって、ボトルネックを予測して予防すること、または、ボトルネックを検出してボトルネックの解消のための対策をとることは、ネットワークの運用にとって有益である。
他方、ボトルネックの予測または検出のためにネットワークに過剰な負荷をかけることは、好ましくない。
例えば、特定の管理装置が、ボトルネックの予測または検出のために用いる情報をネットワーク内の各通信装置から収集する中央管理的なネットワークシステムは、情報の収集のためのトラヒック自体がネットワークに大きな負荷をかけるおそれがある。よって、過剰な負荷を避けるために、ネットワーク内の各通信装置が自律的にボトルネックを予測または検出することができるような技術が望まれる。
そこで本発明は、ネットワーク内の通信装置による自律的なボトルネックの予測または検出を可能にすることを目的とする。
一態様による通信装置は、複数の通信装置を含むネットワークにおける第1の通信装置である。
前記第1の通信装置は、第2の通信装置にデータを送る際に選択可能な、前記第1の通信装置に隣接する第3の通信装置を記憶した経路情報記憶部を有する。また、前記第1の通信装置は、前記第1の通信装置に隣接する第4の通信装置から、該第4の通信装置が所定期間に前記第1の通信装置を介して送信する前記第2の通信装置宛の第1の送信データ量の通知を受信する受信部を有する。
そして、前記第1の通信装置は、前記第1の送信データ量を含む、前記第1の通信装置から前記所定期間に送信する前記第2の通信装置宛の第2の送信データ量を前記第3の通信装置に通知する送信量通知部を有する。また、前記第1の通信装置は、前記第2の送信データ量が所定の基準を超えているかを判定する判定部も有する。
さらに、前記第1の通信装置は、前記第2の送信データ量が前記所定の基準を超えていると前記判定部が判定した場合に、前記第1の通信装置が前記ネットワークにおけるボトルネックであることを、予め定められた第5の通信装置に通知する送信ボトルネック通知部も有する。
上記のとおり、第1の通信装置の経路情報記憶部は、第2の通信装置にデータを送る際に選択可能な第3の通信装置を記憶しており、第1の通信装置の送信量通知部は、第2の送信データ量を他ならぬ第3の通信装置に通知する。したがって、ネットワーク内の各ノードに相当する各通信装置が、上記第1の通信装置のように構成されていれば、第2の通信装置に至るデータ送信経路に沿って、次々に送信データ量が通知されて累積される。そして、累積された送信データ量に応じて、第2の通信装置に至るデータ送信経路上の各通信装置の判定部が、判定を行う。
また、上記の第1の通信装置に関する説明から明らかなように、第1と第2の送信データ量の通知は、将来予測される送信データ量に関する通知に限定されるわけでもなく、現在の実際の送信データ量に関する通知に限定されるわけでもない。よって、上記の第1の通信装置は、ボトルネックを予測することもできるし、ボトルネックを検出することもできる。
したがって、ネットワーク内の各ノードが上記第1の通信装置のように構成されていれば、各通信装置が自律的に、当該通信装置自身が第2の通信装置に至るデータ送信経路上のボトルネックであるか否かに関して、予測または検出を行うことができる。
第1実施形態の通信装置のブロック構成図である。 通信装置の第1のハードウェア構成図である。 通信装置の第2のハードウェア構成図である。 ネットワークの第1の例を示す図である。 第2実施形態の通信装置のブロック構成図である。 第3実施形態におけるデータパケットの送受信に関するタイミングチャートである。 第3実施形態の通信装置のブロック構成図である。 第3実施形態のリンクテーブルの例を示す図である。 第3実施形態のルーティングテーブルの例を示す図である。 第3実施形態で使われるパケットの例を示す図である。 いくつかの実施形態で共通のパケット受信処理のフローチャートである。 第3実施形態におけるデータパケット受信処理のフローチャートである。 第3実施形態における受信トラヒック設定処理のフローチャートである。 第3実施形態におけるボトルネック検出処理のフローチャートである。 第3実施形態におけるデータパケット送信処理のフローチャートである。 第4実施形態におけるハローパケットの送受信に関するタイミングチャートである。 第4実施形態の通信装置のブロック構成図である。 第4実施形態のリンクテーブルの例を示す図である。 第4実施形態で使われるパケットの例を示す図である。 第4実施形態におけるハローパケット受信処理のフローチャートである。 第4実施形態におけるハローパケット送信処理のフローチャートである。 第5実施形態におけるボトルネック検出処理のフローチャートである。 第6実施形態におけるリンクテーブルの例を示す図である。 第6実施形態におけるハローパケット受信処理のフローチャートである。 第6実施形態におけるボトルネック検出処理のフローチャートである。 ネットワークの第2の例を示す図である。
以下、各種実施形態について、図面を参照しながら詳細に説明する。下記の各種実施形態は、いずれもアドホックネットワークにおけるボトルネックの予測または検出に好適である。そこで、以下ではまずアドホックネットワークにおけるボトルネックに関して簡単な説明を行い、その後、第1〜11実施形態および各種変形例について順に説明する。
さて、アドホックネットワークの特長の1つは、データ送信経路などに関する事前の設計や設定がほとんど不要な点である。一方、アドホックネットワークの実際の運用においては、ノードの配置その他の様々な要因から、ネットワーク内にボトルネックが生じることがある。
なお、従来想定され、利用されていた小規模なアドホックネットワークでは、あまりボトルネックの発生は問題にならなかった。しかし、近年のアドホックネットワークの利用拡大にともなって、従来は想定されていなかった大規模なアドホックネットワークも使われるようになってきた。
また、定常的に比較的多くのトラヒックを流すような、従来はあまり想定されていなかった用途にも、アドホックネットワークが使われるようになりつつある。例えば、アドホックネットワークの新たな用途の1つは、定期的にセンサの出力を送信する多数のノードを含む、大規模センサネットワークである。
そして、以上のようなアドホックネットワークの利用拡大にともない、ボトルネックの発生が新たな問題として顕在化しつつある。下記各種実施形態は、新たな問題への対策を提供するものである。
ネットワーク内にボトルネックがあると、例えば、ボトルネックのノードにおけるバッファオーバフローによりデータが消失するかもしれない。あるいは、タイムアウトが頻発し、その結果として、データの再送や送信経路の切り換えなども頻発し、ネットワークにおけるデータの伝送遅延も増大するかもしれない。
しかし、「事前の設計や設定がほとんど不要であり、ネットワーク全体を集中管理するノードも不要である」というアドホックネットワークの性質を考慮すると、ボトルネックの予測または検出を特定の1つの管理装置が行うことは、好ましいとは言えない。なぜなら、ボトルネックの予測または検出のために、特定の1つの管理装置がネットワーク内の各ノードから情報を改めて収集することになるからである。つまり、情報収集のためのトラヒックが、ネットワークに過剰な負荷をかけるおそれがある。
そこで、ボトルネックの予測または検出のためにネットワークに新たに生じる負荷を小さく抑えつつ、ボトルネックの予測または検出を可能とすることが望まれる。
ところで、ある特定のノードがボトルネックとなる要因としては、特定のノードに流入するトラヒックが多いこと、あるいは特定のノードから流出するトラヒックが多いことが挙げられる。つまり、実際のデータ送信経路に沿って流れるトラヒックの多さがボトルネックの要因である。
ここで、アドホックネットワーク内の各ノードは、実際にデータを送信する際に用いる経路に関して、経路の全体を認識している必要はないが、少なくとも当該ノード自身に隣接する次ホップのノードは認識している。このことから、発明者は次のような考察を得た。すなわち、各ノードが、当該ノード自身が認識している次ホップに関する情報を用いることで、ネットワークに過剰な負荷をかけることなく、各ノードによる自律的なボトルネックの予測または検出が可能となる。
以下では、各ノードによる自律的なボトルネックの予測または検出を可能とする各種実施形態について説明する。また、以下の各種実施形態におけるネットワークは任意のネットワークでよいが、以下の各種実施形態はアドホックネットワークに好適である。
図1は、第1実施形態の通信装置のブロック構成図である。図1の通信装置100は、複数の通信装置を含むネットワークで使われる。ネットワークは、例えば、アドホックネットワークである。
以下、図1〜4に関する説明においては、便宜上、ネットワーク内の以下のような通信装置をそれぞれ「第1の通信装置」〜「第6の通信装置」という。
便宜上、通信装置100自体を「第1の通信装置」という。
また、便宜上、ネットワーク内でのデータの最終的な送信先である、特定の通信装置を「第2の通信装置」という。第2の通信装置は、例えば、上記ネットワークと他のネットワークとの間のゲートウェイであってもよい。
さらに、通信装置100が第2の通信装置にデータを送る際に直接の宛先として選択可能な、通信装置100に隣接する通信装置を、便宜上、「第3の通信装置」という。
なお、「通信装置100に隣接する通信装置」とは、通信装置100との間のホップ数が1の通信装置のことである。通信装置100には1つまたは複数の通信装置が隣接していてよい。
そして、通信装置100に隣接する1つまたは複数の通信装置のうち、通信装置100が第2の通信装置にデータを送る際に直接の送信先として選択可能な通信装置は、1つのこともあるし、複数のこともある。第3の通信装置は、選択可能な1つまたは複数の通信装置の中の1つである。
例えば、第3の通信装置は、選択可能な1つまたは複数の通信装置のうち、所定の規則にしたがって動的に変更される評価値が最も高い評価を示す通信装置であってもよい。また、第2の通信装置が通信装置100に隣接している場合は、第3の通信装置は第2の通信装置と同じでもよい。
また、通信装置100に隣接する通信装置が選択可能であるか否かは、例えば、通信装置100が採用するルーティングアルゴリズムによる。あるルーティングアルゴリズムによれば、通信装置100に隣接するすべての通信装置が、通信装置100が第2の通信装置にデータを送る際に直接の送信先として選択可能である。別のルーティングアルゴリズムによれば、通信装置100に隣接する通信装置のうち、評価値がベストM(1≦M)に入るものだけが、通信装置100が第2の通信装置にデータを送る際に直接の送信先として選択可能である。
さらに、第2の通信装置宛のデータを、通信装置100を介して送信する、通信装置100に隣接する通信装置を、便宜上、「第4の通信装置」という。第4の通信装置が1つだけ存在する場合もあるし、複数の第4の通信装置が存在する場合もある。
さらに、通信装置100自身が後述のようにして「通信装置100は、ネットワーク内で通信負荷の集中するボトルネックである」と判定した場合に、通信装置100が判定結果を通知する先の予め決められた通信装置を、便宜上、「第5の通信装置」という。
なお、ネットワーク内の特定の1つの通信装置が、第5の通信装置として予め決められていてもよい。例えば、第5の通信装置と第2の通信装置が同じでもよい。あるいは、複数の通信装置が、複数の第5の通信装置として予め決められていてもよい。例えば、ネットワーク内の通信装置100以外のすべての通信装置が、複数の第5の通信装置として予め決められていてもよい。
また、通信装置100が第2の通信装置にデータを送る際に、直接の送信先として選択可能な、通信装置100に隣接する通信装置のうち、第3の通信装置以外のものを、便宜上、「第6の通信装置」という。第3の通信装置に関して述べたとおり、選択可能な通信装置は1つのこともあるし、複数のこともある。
なお、「第4の通信装置が第6の通信装置でもある」という状況もある。なぜなら、第4の通信装置は、第1の通信装置に隣接しているので、潜在的には、第1の通信装置が第2の通信装置宛のデータを送る際に直接の送信先として選択可能だからである。
さて、図1の通信装置100は、以上のような第1〜第6の通信装置を含むネットワークにおける第1の通信装置である。そして、図1に示すように、通信装置100は、通知受信部101、送信量通知部102、ボトルネック判定部103、送信ボトルネック通知部104、および経路情報記憶部105を有する。
通知受信部101は、第4の通信装置から、第4の通信装置が通信装置100を介して所定期間に送信する第2の通信装置宛の第1の送信データ量の通知を受信する。送信量通知部102は、第1の送信データ量を含む、通信装置100から所定期間に送信する第2の通信装置宛の第2の送信データ量を、第3の通信装置に通知する。
例えば、「所定期間」が1時間であり、第4の通信装置が2つあるとする。そして、第4の通信装置のうちの1つは、中継するデータと当該第4の通信装置自身が生成するデータとを合わせて、1時間あたり3000KB(キロバイト)のデータを、通信装置100を介して第2の通信装置宛に送信するものとする。また、もう1つの第4の通信装置は、中継するデータと当該第4の通信装置自身が生成するデータとを合わせて、1時間あたり2400KBのデータを、通信装置100を介して第2の通信装置宛に送信するものとする。
すると、通信装置100の通知受信部101は、2つの第4の通信装置から、それぞれの第1の送信データ量の通知として、「1時間あたり3000KB」という通知と「1時間あたり2400KB」という通知を受信する。また、通信装置100自身が、第2の通信装置宛のデータを1時間あたり200KB生成して送信するとする。すると、第2の送信データ量は、5600(=3000+2400+200)KBである。
送信量通知部102は、上記のようにして、通知受信部101が受信した第1の送信データ量の通知に基づいて、第2の送信データ量を計算してもよい。そして、送信量通知部102は、計算した第2の送信データ量をボトルネック判定部103に出力してもよい。
すると、ボトルネック判定部103は、第2の送信データ量が所定の基準を超えているかを判定する。所定の基準は、実施形態に応じて様々であってよい。例えば、ボトルネック判定部103は、単純に、第2の送信データ量と所定の閾値を比較してもよい。そして、第2の送信データ量が所定の閾値を超えていれば、ボトルネック判定部103は、「第2の送信データ量が所定の基準を超えている」と判定してもよい。所定の基準の他の具体例については後述する。
そして、「第2の送信データ量が所定の基準を超えている」とボトルネック判定部103が判定した場合、送信ボトルネック通知部104は、「通信装置100はネットワークにおけるボトルネックである」ということを、第5の通信装置に通知する。第5の通信装置への通知は、換言すれば、「通信装置100の通信負荷が過剰である」という警告である。
よって、送信ボトルネック通知部104から第5の通信装置への通知にしたがって、過剰な負荷を軽減するための対策がとられることが望ましい。
例えば、第5の通信装置は、ディスプレイを有し、送信ボトルネック通知部104からの通知の内容をディスプレイに表示してもよい。そして、例えばネットワーク管理者などがディスプレイを見て、何らかの対策をとってもよい。
例えば、ネットワーク管理者は、「通信装置100はネットワークにおけるボトルネックである」という通知に基づいて、通信装置100の近傍に新たな1つまたは複数の通信装置を配置することで、通信装置100への通信の集中の緩和を図ってもよい。あるいは、ネットワーク管理者は、第2の通信装置に宛てて送信するために所定期間あたりに生成するデータの量を減らすように、ネットワーク内の一部または全部の通信装置の設定を変更してもよい。
もちろん、第5の通信装置は、送信ボトルネック通知部104からの通知を契機に、自動的に、ネットワーク内の一部または全部の通信装置に対して、設定変更を命じてもよい。つまり、第2の通信装置に宛てて送信するために所定期間あたりに生成するデータの量を減らすように、第5の通信装置は、自動的に、一部または全部の通信装置に命令を送信してもよい。
以上のような送信規制は、例えば、「優先度(換言すれば、緊急度または重要度)の低い特定のタイプのデータのみ送信を控える」などの規則にしたがって行われてもよい。すると、送信規制下においても、優先度の高いデータは、確実に送信される。
あるいは、上記のようにネットワーク内における通信装置100以外のすべての通信装置が第5の通信装置であってもよい。この場合、各第5の通信装置は、当該第5の通信装置自身が第2の通信装置に宛てて送信するために所定期間あたりに生成するデータの量を、送信ボトルネック通知部104からの通知を契機に減らしてもよい。
なお、通知受信部101が通知を受ける第1の送信データ量と、送信量通知部102が通知を出す第2の送信データ量は、今後の運用において送信される予定のデータの量であってもよいし、実際に送信されたデータの量であってもよい。
第1と第2の送信データ量が、予定されるデータの量を示す場合、第5の通信装置への通知は、今後の運用において予測されるボトルネックについての警告である。逆に、第1と第2の送信データ量が、実際に送信されるデータの量を示す場合、第5の通信装置への通知は、実際にボトルネックを検出したことを示す警告である。
ところで、経路情報記憶部105は、通信装置100が第2の通信装置宛のデータを送る際に、直接の宛先として選択可能な通信装置として、第3の通信装置を記憶する。よって、送信量通知部102は、経路情報記憶部105を参照することにより、第2の送信データ量の通知の送信先である第3の通信装置を認識することができる。
経路情報記憶部105は、さらに、通信装置100が第5の通信装置宛のデータを送る際に直接の宛先として選択可能な通信装置を記憶してもよい。すると、特定の1つの通信装置が第5の通信装置として予め決められている場合、送信ボトルネック通知部104は、経路情報記憶部105を参照することで、警告を第5の通信装置に最終的に通知する際の直接の送信先を決められる。
あるいは、ネットワーク内の通信装置100以外のすべての通信装置が複数の第5の通信装置として予め決められている場合は、送信ボトルネック通知部104は警告を単にブロードキャストすればよい。よって、この場合、送信ボトルネック通知部104は、経路情報記憶部105を参照する必要はない。
経路情報記憶部105は、具体的には、第3の通信装置を識別するための識別情報を含む情報を記憶する。経路情報記憶部105が記憶する情報の内容と形式は実施形態に応じて様々である。そして、実施形態によっては、ボトルネック判定部103は、第2の送信データ量が所定の基準を超えているか否かの判断を行うときに、経路情報記憶部105が記憶する情報を参照してもよい。
例えば、経路情報記憶部105は、第3の通信装置と通信装置100との間の通信品質の第1の評価値をさらに記憶していてもよい。この場合、ボトルネック判定部103は、第2の送信データ量と第1の評価値を使った所定の計算を行い、計算結果として得られる第1の値を第1の閾値と比較してもよい。そして、ボトルネック判定部103は、第1の値が第1の閾値より大きい場合に、「第2の送信データ量は所定の基準を超えている」と判定してもよい。
以下では説明の便宜上、通信品質を示す第1の評価値は、値が小さいほど高い品質を示すように定義されるものとする。しかし、もちろん実施形態によっては、第1の評価値は、値が大きいほど高い品質を示すように定義されてもよい。
第1の値は、第2の送信データ量が多いほど大きくなるように、かつ、第1の評価値が高い品質を示すほど(つまり第1の評価値が小さいほど)小さくなるように、定義されている。例えば、第1の値は、第2の送信データ量と第1の評価値の積でもよい。
より具体的には、第1の評価値は、以下に例示する様々な指標のうちの1つまたは複数に基づいて定義される値であってよい。例えば、第1の評価値は、無線ネットワークにおいては、受信電力またはリトライ回数に基づく値でもよい。また、ネットワークが無線か有線かに関わらず、第1の評価値は、パケットエラー率、パケットロス率、スループット、または、ネットワーク内の各通信装置から定期的に送信されることになっている制御パケットの受信間隔の揺れに基づく値でもよい。
例えば、第1の評価値は、受信電力(換言すれば電界強度)が大きいほど、小さくなる(高い品質を示す)ように定義されていてもよい。逆に、第1の評価値は、コリジョンの発生によってリトライ回数が増えるほど、大きくなる(低い品質を示す)ように定義されていてもよい。
また、通信装置100が受信したパケットが、チェックサムや巡回冗長検査(Cyclic Redundancy Check)などの誤り検出符号を含む場合、通信装置100は、受信したパケットがエラーを含む率を認識することができる。そこで、第1の評価値は、パケットエラー率が高いほど、大きくなる(低い品質を示す)ように定義されていてもよい。
なお、本明細書においては、特定のプロトコルにしたがって通信装置間で送受信されるPDU(Protocol Data Unit)を「パケット」という。ただし、「パケット」という用語は、上記「特定のプロトコル」を限定することを意図したものでもなく、上記「特定のプロトコル」がどのレイヤのプロトコルであるかを限定することを意図したものでもない。
また、通信装置100は、第3の通信装置にパケットを送信した後に、所定時間以内に第3の通信装置からACK(acknowledgment)信号を受信することができなければ、パケットが消失したと見なしてもよい。
あるいは、通信装置100は、第3の通信装置にパケットを送信した後に、所定時間以内にACK信号を受信することができなければ、パケットの送信を再度試みてもよい。そして、通信装置100は、必要に応じて所定回数までのリトライを行い、所定回数のリトライを行ってもなおACK信号を受信することができなければ、パケットが消失したと見なしてもよい。
いずれにしろ、通信装置100は、パケットロス率を認識することができる。そこで、第1の評価値は、パケットロス率が高いほど、大きくなる(低い品質を示す)ように定義されていてもよい。
また、通信装置100は、第3の通信装置との間のスループットを計測してもよい。そして、第1の評価値は、スループットが大きいほど、小さくなる(高い品質を示す)ように定義されていてもよい。正確なスループットの計測は必ずしも容易ではないが、例えば、通信装置100は、テストパケットを用いて、スループットの近似値を得てもよい。
さらに、ネットワーク内の各通信装置が、ある種の制御パケットを定期的に送信するように設定される実施形態では、第1の評価値は、制御パケットの受信間隔の揺れが大きいほど、大きくなる(低い品質を示す)ように定義されていてもよい。例えば、アドホックネットワークでは、各通信装置は、隣接する通信装置に存在を通知するために、「ハローパケット」などと呼ばれる制御パケットを定期的に送信することがある。
この場合、通信装置100と第3の通信装置の間のリンクの通信品質が非常に良ければ、定期的に第3の通信装置から送信されるハローパケットは、すべて正常に通信装置100で受信される。したがって、ハローパケットの受信間隔の揺れはほとんどゼロである。
逆に、通信装置100と第3の通信装置の間のリンクの通信品質が悪ければ、定期的に第3の通信装置から送信されるハローパケットのうちいくつかは、通信装置100で受信されない。その結果、通信装置100でのハローパケットの受信間隔は均等でなくなり、受信間隔の揺れが拡大する。
したがって、第1の評価値は、ハローパケットの受信間隔の揺れが大きいほど、大きくなる(低い品質を示す)ように定義されていてもよい。受信間隔の揺れは、例えば、受信間隔の分散または標準偏差によって表すことができる。
以上のように、第1の評価値の具体的な定義は実施形態に応じて様々である。しかし、第1の評価値の具体的な定義がどうであれ、経路情報記憶部105が第1の評価値をさらに記憶している場合、ボトルネック判定部103は、第2の送信データ量と第1の評価値とを基に計算した第1の値と第1の閾値を比較することができる。
そして、ボトルネック判定部103は、第1の値が第1の閾値より大きい場合に、「第2の送信データ量は所定の基準を超えている」と判定することができる。第2の送信データ量が同じであっても、第1の評価値が異なれば、通信装置100が過負荷に陥るか否かは異なる。よって、単に第2の送信データ量だけに基づく判定よりも、上記のように第1の評価値を考慮に入れた判定の方が好ましい。
また、経路情報記憶部105は、第3の通信装置と通信装置100との間の通信品質の第1の評価値だけでなく、1つまたは複数の第6の通信装置の各々と通信装置100との間の通信品質の第2の評価値をさらに記憶していてもよい。
この場合、ボトルネック判定部103は、第2の送信データ量と第1の評価値と第2の評価値を使った所定の計算を行い、計算結果として得られる第2の値を第2の閾値と比較してもよい。そして、ボトルネック判定部103は、第2の値が第2の閾値より大きい場合に、「第2の送信データ量は所定の基準を超えている」と判定してもよい。
第2の評価値も、第1の評価値と同様の指標に基づいて定義される。換言すれば、第1と第2の評価値は、1つまたは複数の同じ指標に基づいて、第3と第6の通信装置に対してそれぞれ定義される評価値である。
第2の値は、第2の送信データ量が多いほど大きくなるように定義されている。また、第2の値は、第1の評価値が高い品質を示すほど(つまり第1の評価値が小さいほど)小さくなるように、かつ、第2の評価値が高い品質を示すほど(つまり第2の評価値が小さいほど)小さくなるようにも、定義されている。
第2の値を得るための上記の所定の計算の典型例の1つは、第1の評価値の逆数と、1つまたは複数の第6の通信装置各々に対応する各第2の評価値の逆数との和によって、第2の送信データ量を割る計算である。
つまり、通信装置100が第2の通信装置宛のデータを送る際に直接の宛先として選択可能な通信装置の数を重み付けして数えた結果により、第2の送信データ量を割った値が、第2の値である。重みとしては、上記の例のように、評価値の逆数が利用可能である。
なお、通信装置100が第2の通信装置宛のデータを送る際に直接の宛先として選択可能な通信装置の数は、換言すれば、通信装置100が潜在的に選択可能な送信経路の数である。よって、上記のように通信装置の数を重み付けして数えた結果のことを、以下では「重み付け送信経路数」ともいう。
品質の良いリンクで通信装置100と結ばれた通信装置ほど、対応する評価値が小さいので、重みの値(例えば、評価値の逆数)は大きい。よって、品質の良いリンクで通信装置100と結ばれた通信装置が多いほど、重み付け送信経路数は大きい。逆に、品質の悪いリンクで通信装置100と結ばれた通信装置が多いほど、重み付け送信経路数は小さい。また、そもそも通信装置100と結ばれた通信装置の数自体が少なければ、当然ながら重み付け送信経路数は小さい。
そして、上記の例では、第2の値は、第2の送信データ量を重み付け送信経路数で割ることにより得られるので、重み付け送信経路数が大きいほど、第2の値は小さい。つまり、品質の良いリンクで通信装置100と結ばれた通信装置が多いほど、第2の値は小さい。
換言すれば、第2の値が第2の閾値を超えた場合は、品質の良いリンクで通信装置100と結ばれた通信装置が不足しており、通信装置100はボトルネックになり得る。そこで、ボトルネック判定部103は、上記のとおり、第2の値が第2の閾値より大きい場合に、「第2の送信データ量は所定の基準を超えている」と判定してもよい。
このように第2の評価値をも利用することの利点は、ネットワークの状況の動的な変化に応じて、通信装置100が、第2の通信装置宛のデータを経由させる隣接通信装置を切り換える場合に、通信装置100が過負荷に陥る危険性を見積もれる点である。
つまり、ネットワークの状況の変化によっては、通信装置100が、第2の通信装置宛のデータを、第3の通信装置ではなく、第6の通信装置のうちの1つを介して送信するように、動作を切り換えるかもしれない。ここで、もし、1つまたは複数の第6の通信装置のうちのいずれもが、通信装置100との間のリンクの通信品質が悪ければ、通信装置100は、動作の切り換えを契機として過負荷に陥る危険性が高い。つまり、通信装置100は、ネットワークの状況の動的な変化に対する頑健性が低い。
他方、実際にネットワークの状況が変化する前に、頑健性の低さを予め検出することが可能であれば、例えば、通信装置100の近くに新たな通信装置を追加したり、通信装置100の位置を移動させたり、といった何らかの対策をとることができる。その結果、実際にネットワークの状況が変化した際に通信装置100が過負荷に陥ることを予防することも可能である。
なお、ボトルネック判定部103は、例えば、第2の送信データ量と所定の閾値の比較結果と、第1の値と第1の閾値の比較結果と、第2の値と第2の閾値の比較結果とを組み合わせて、最終的な判定を行ってもよい。
また、通知受信部101が第4の通信装置から受信する第1の送信データ量の通知は、独立したパケットとして送られてもよい。しかし、ネットワークの負荷軽減という観点からは、第4の通信装置から第1の通信装置を介して第2の通信装置宛に送られ、かつ第1の送信データ量の計量の対象である第1のデータが、第1の送信データ量の通知を含むことが好ましい。
第1のデータは、具体的にはデータパケットであってもよい。第1のデータが第1の送信データ量の通知を含む場合、送信量通知部102は、第1のデータを第3の通信装置に転送するときに、第1のデータの中に第2の送信データ量の通知を含めることにより、第2の送信データ量を第3の通信装置に通知する。
あるいは、ネットワークの負荷軽減という観点からは、第4の通信装置がブロードキャストする第2のデータが、通信装置100を識別する情報とともに第1の送信データ量の通知を含むことも好ましい。第2のデータが第1の送信データ量の通知を含む場合、送信量通知部102は、次のようにして第2の送信データ量を第3の通信装置に通知する。
つまり、送信量通知部102は、第3のデータをブロードキャストするときに、第3のデータの中に第2の送信データ量の通知を、第3の通信装置を識別する情報とともに含めることにより、第2の送信データ量を第3の通信装置に通知する。なお、第2と第3のデータは、具体的にはハローパケットであってもよい。
上記のようにデータパケットまたはハローパケットに送信データ量の通知が含まれる場合、ボトルネックの予測または検出のためにネットワーク上に新たに加わる負荷は、わずかである。すなわち、新たに別のパケットが送信されることもなく、単にデータパケットまたはハローパケットのペイロード長が、送信データ量の通知のぶんだけ長くなるだけである。
ところで、図1に示した通信装置100は、例えば図2または図3に示すハードウェアにより実現されてもよい。例えば、通信装置100を含むネットワークが無線ネットワークである場合、図1の通信装置100は、具体的には図2の通信装置200により実現されてもよい。また、通信装置100を含むネットワークが有線ネットワークである場合、図1の通信装置100は、具体的には図3の通信装置300により実現されてもよい。
図2の通信装置200は、MPU(MicroProcessing Unit)201と、タイマIC(Integrated Circuit)202と、DRAM(Dynamic Random Access Memory)203と、フラッシュメモリ204を有する。通信装置200は、フラッシュメモリ204の代わりに他の不揮発性メモリを有していてもよい。
MPU201は、フラッシュメモリ204に記憶されたプログラムをDRAM203にロードし、DRAM203をワークエリアとして使いながらプログラムを実行する。タイマIC202は、特定の処理をMPU201が定期的に行うことができるようにするために、適宜のタイミングで割り込み信号を出力する。
通信装置200はさらに、無線通信モジュールを有する。無線通信モジュールとしては、例えば、図2に例示したような、802.15.4 PHY/MACチップ205や802.11b PHY/MACチップ206などが利用可能である。なお、本明細書において「PHY/MACチップ」とは、物理層とMAC(Media Access Control)副層の処理を行うハードウェア回路のことである。
802.15.4 PHY/MACチップ205は、IEEE(Institute of Electrical and Electronics Engineers)802.15.4規格にしたがった無線通信機能を提供する。また、802.11b PHY/MACチップ206は、IEEE 802.11b規格にしたがった無線通信機能を提供する。通信装置200は、802.15.4 PHY/MACチップ205と802.11b PHY/MACチップ206の双方を有してもよいし、一方のみを有していてもよい。あるいは、通信装置200は、他の無線通信規格にしたがった別のPHY/MACチップを有していてもよい。
さらに、通信装置200は、センサ207を有していてもよい。センサ207は、画像センサ、温度センサ、湿度センサ、あるいは圧力センサなど、任意のセンサでよい。
そして、タイマIC202はIC/PIO(Inter-Integrated Circuit or Parallel Input/Output)バス208を介してMPU201と接続されている。また、DRAM203、フラッシュメモリ204、802.15.4 PHY/MACチップ205、802.11b PHY/MACチップ206、およびセンサ207は、PCI(Peripheral Component Interconnect)バス209を介してMPU201と接続されている。
例えば、通信装置200は、通常の通信をIEEE802.15.4規格にしたがって行い、図1に関して説明した、送信ボトルネック通知部104から第5の通信装置への通知のみをIEEE 802.11b規格にしたがって行ってもよい。つまり、通信装置200は、通常は、低消費電力が特長のIEEE 802.15.4規格にしたがって、通信を行ってもよい。そして、通信装置200は、緊急の警告を通知する際だけ、IEEE 802.15.4規格と比べて1ホップでの通信距離がより長いIEEE 802.11b規格にしたがって、通信を行ってもよい。
なお、ここで上記「通常の通信」の例は、センサ207が出力するデータをペイロードに含むデータパケットの送受信である。上記「通常の通信」の別の例は、ハローパケットやACKパケットなどの制御パケットの送受信である。
また、上記のとおり、図1の通知受信部101が第4の通信装置から受信する第1の送信データ量の通知は、専用の制御パケットにより実現されてもよいが、通常の通信で使われるパケットに付加されることが好ましい。なぜなら、通常の通信で使われるパケットに第1の送信データ量の通知が付加される場合、新たな専用の制御パケットの送信にともなう種々のオーバヘッドが生じないので、第1の送信データ量の通知のために生じるトラヒックの増大を最低限に抑えられるからである。
同様に、図1の送信量通知部102が第3の通信装置に送信する第2の送信データ量の通知も、通常の通信で使われるパケットに付加されることが好ましい。よって、以下では、第1と第2の送信データ量の通知が、通常の通信で使われるパケットに付加される場合について説明する。
この場合、図1の通知受信部101は、図2の802.15.4 PHY/MACチップ205により実現される。802.15.4 PHY/MACチップ205は受信したパケットをDRAM203に出力し、パケットの受信をMPU201に通知する。
第1の送信データ量の通知を含むパケットを第4の通信装置が送信した場合、送信量通知部102の一部として動作するMPU201は、受信されたパケットの中から、第1の送信データ量の通知を抽出する。また、MPU201は、第1の送信データ量を第4の通信装置と関連付けて、DRAM203に記憶する。
そして、MPU201は、DRAM203を参照して、1つまたは複数の第4の通信装置から通知されたそれぞれの第1の送信データ量と、通信装置200自身が所定期間に生成して第2の通信装置宛に送信するデータの量を足す。以上のようにして、MPU201は、加算により第2の送信データ量を求める。なお、通信装置200自身が生成して第2の通信装置宛に送信するデータの具体例は、例えば、センサ207が出力するデータをペイロードに含むデータパケットである。
そして、MPU201は、データパケットまたはハローパケットなどの、通常の通信で使われるパケットを第3の通信装置に送信する(またはブロードキャストする)ときに、当該パケットに第2の送信データ量の通知を付加する。すると、第2の送信データ量の通知を含むパケットが、送信量通知部102の一部としての802.15.4 PHY/MACチップ205を介して第3の通信装置に送信される。
また、MPU201は、図1のボトルネック判定部103としても動作する。つまり、MPU201は、上記のようにして計算した第2の送信データ量が所定の基準を超えているか否かを判定する。所定の基準の具体例は、図1に関して説明したとおりである。
そして、MPU201は、送信ボトルネック通知部104の一部としても動作する。すなわち、第2の送信データ量が所定の基準を超えている場合、MPU201は、「通信装置200はネットワークにおけるボトルネックである」と判定する。そして、MPU201は、判定結果を第5の通信装置に通知するためのパケットを生成する。送信ボトルネック通知部104の一部としての802.11b PHY/MACチップ206は、MPU201により生成されたパケットを送信する。
もちろん、実施形態によっては、送信ボトルネック通知部104から第5の通信装置への通知も、通常の通信と同じ通信規格にしたがって行われてもよい。例えば、802.15.4 PHY/MACチップ205が、通知受信部101の一部として動作し、かつ送信量通知部102の一部としても動作し、かつ送信ボトルネック通知部104の一部としても動作する実施形態も、可能である。
なお、図1の経路情報記憶部105は、DRAM203またはフラッシュメモリ204により実現される。以上のように、通信装置100を含むネットワークが無線ネットワークである場合、図1の通信装置100は、具体的には図2の通信装置200により実現されてもよい。
他方、通信装置100を含むネットワークが有線ネットワークである場合、図1の通信装置100は、具体的には図3の通信装置300により実現されてもよい。
図3の通信装置300は、4つの物理ポート301a〜301dと、対応する物理ポート301a〜301dにそれぞれ接続された4つのPHYチップ302a〜302dを有する。もちろん、物理ポート301a〜301dの数は、図3に例示した4以外の任意の数でもよい。
通信装置300はさらに、4つのPHYチップ302a〜302dとそれぞれMII(Media Independent Interface)を介して接続されたFPGA(Field Programmable Gate Array)303を有する。FPGA303は、タイマ304を含む。タイマ304は、定期的な処理の実行を実現するための割り込み信号を出力する。
また、通信装置300は、FPGA303に接続された、FPGA303から参照可能なメモリ305を有する。メモリ305は、例えば、CAM(Content Addressable Memory)と、SRAM(Static Random Access Memory)と、SDRAM(Synchronous Dynamic Random Access Memory)を含んでもよい。
例えば、SRAMは、FPGA303の動作を定義するLUT(Look-Up Table)を記憶してもよい。また、CAMの検索結果としてSRAMのアドレスが得られるように、メモリ305が構成されていてもよい。
そして、通信装置300は、FPGA303に接続されたMPU306と、MPU306に接続された、MPU306から参照可能なメモリ307を含む。メモリ307は、例えば、ワークエリア用のDRAMと、プログラムを記憶するための不揮発性メモリ(例えばフラッシュメモリ)を含んでもよい。
また、通信装置300は、MPU306に接続されたセンサ308をさらに含んでもよい。センサ308は、図2のセンサ207と同様に、任意のセンサでよい。
ところで、有線ネットワークにおいて互いに隣接する通信装置同士は、直接ケーブルで接続されている。例えば、図1に関して説明した第1の通信装置である通信装置100が図3の通信装置300により実現される場合、通信装置300には4つの物理ポート301a〜301dがあるので、通信装置300に隣接する通信装置は最大で4つまでである。
以下では説明の便宜上、物理ポート301aには第3の通信装置が接続されており、物理ポート301bには第4の通信装置が接続されているものとする。また、物理ポート301cには第6の通信装置が接続されており、物理ポート301dにはもう1つの第6の通信装置が接続されているものとする。
すると、第4の通信装置から第1の送信データ量の通知を受信する図1の通知受信部101は、具体的には、物理ポート301bとPHYチップ302bにより実現される。PHYチップ302bは、第4の通信装置から受信したパケットをFPGA303に出力する。
なお、通信装置300が実行する各種処理のうち、どの処理をFPGA303が実行し、どの処理をMPU306が実行するかは、実施形態に応じて任意である。例えば、データパケットのルーティングをFPGA303がLUTにしたがって行い、ルーティング以外の処理をMPU306が行ってもよい。
例えば、有線ネットワークには、「隣接する通信装置の数の上限が物理ポートの数により決まっている」という特徴がある。また、有線リンクにおいては、無線リンクのような品質の変動は無視することができる。つまり、無線リンクの状態は連続値で表されることが望ましいが、有線リンクの状態は「接続されているか、切断されているか」という2値で表しても何ら問題はない。
したがって、有線ネットワーク(より具体的には有線アドホックネットワーク)におけるルーティングは、FPGA303のような組み合わせ論理回路により実現するのに適している。よって、ルーティングをFPGA303が行い、パケットの内容に応じたより複雑な処理は、MPU306が行ってもよい。
以下では説明の便宜上、FPGA303がルーティングを行い、他の処理はMPU306が行うものとする。また、通信装置300が受信したパケットは、メモリ305またはメモリ307に一時的にバッファリングされる。
よって、第4の通信装置からの第1の送信データ量の通知を含むパケットが物理ポート301bで受信されると、送信量通知部102の一部として動作するMPU306は、パケットの中から、第1の送信データ量の通知を抽出する。また、MPU306は、第1の送信データ量を第4の通信装置と関連付けて、メモリ307に記憶する。
そして、MPU306は、メモリ307を参照して、1つまたは複数の第4の通信装置から通知されたそれぞれの第1の送信データ量と、通信装置300自身が所定期間に生成して第2の通信装置宛に送信するデータの量を足す。以上のようにして、MPU306は、加算により第2の送信データ量を求める。
なお、上記仮定では、第4の通信装置は、物理ポート301bに接続された1つの通信装置のみである。また、通信装置300自身が生成して第2の通信装置宛に送信するデータの具体例は、例えば、センサ308が出力するデータをペイロードに含むデータパケットである。
MPU306は、通常の通信で使われるパケットを第3の通信装置に送信するときに、当該パケットに第2の送信データ量の通知を付加する。すると、第2の送信データ量の通知を含むパケットが、送信量通知部102の一部としてのPHYチップ302aと物理ポート301aを介して、第3の通信装置に送信される。
また、MPU306は、図1のボトルネック判定部103としても動作する。つまり、MPU306は、上記のようにして計算した第2の送信データ量が所定の基準を超えているか否かを判定する。所定の基準の具体例は、図1に関して説明したとおりである。
そして、MPU306は、送信ボトルネック通知部104の一部としても動作する。すなわち、第2の送信データ量が所定の基準を超えている場合、MPU306は、「通信装置300はネットワークにおけるボトルネックである」と判定する。そして、MPU306は、判定結果を第5の通信装置に通知するためのパケットを生成する。
生成されたパケットは、物理ポート301a〜301dの一部または全部から送信される。図1に関して説明したように、送信ボトルネック通知部104が判定結果を通知する第5の通信装置は、1つでもよいし複数あってもよい。
例えば、送信ボトルネック通知部104は、ブロードキャストによって複数の第5の通信装置に判定結果を通知してもよい。この場合、送信ボトルネック通知部104は、物理ポート301a〜301dとPHYチップ302a〜302dとFPGA303とMPU306により実現される。
あるいは、送信ボトルネック通知部104は、特定の1つの第5の通信装置に判定結果を通知してもよい。この場合、送信ボトルネック通知部104は、MPU306だけではなく、第5の通信装置宛のパケットのルーティング先を決定するFPGA303を含む。また、送信ボトルネック通知部104は、FPGA303により決定された直接の送信先と接続されている、いずれか1つの物理ポートと、当該物理ポートと接続されているPHYチップをさらに含む。
なお、上記のようにFPGA303がパケットのルーティングを行う(すなわち、パケットの最終的な送信先から直接の送信先を決定する)場合、図1の経路情報記憶部105は、FPGA303が参照するメモリ305により実現されてもよい。
ところで、以上の図1〜3に関する説明では、第1〜6の通信装置を含むネットワークについて言及した。以下では、第1〜6の通信装置の関係についての理解を助けるため、ネットワークの具体例を参照して、より詳しい説明を行う。
図4は、ネットワークの第1の例を示す図である。図4のネットワーク400は、ノードA〜IとゲートウェイGW1を含む。ネットワーク400は、無線アドホックネットワークでもよいし、有線アドホックネットワークでもよい。
ネットワーク400におけるデータの最終的な送信先である第2の通信装置は、図4の例では、ゲートウェイGW1である。また、図4の例では、送信ボトルネック通知部104が判定結果を通知する第5の通信装置も、ゲートウェイGW1であるとする。第1実施形態では、ゲートウェイGW1以外のノードA〜Hは、いずれも、図1の通信装置100と同様に構成された通信装置である。
図4において破線の両向き矢印または実線の片向き矢印で結ばれているノード同士は、互いに隣接しており、互いに1ホップで通信可能である。また、実線の片向き矢印は、宛先がゲートウェイGW1のパケットの送信のときに実際に選択される経路を示す。
例えば、ノードDを例に矢印の意味を説明すれば以下のとおりである。
ノードAからノードDに向かう実線の矢印は、「ノードAは、ゲートウェイGW1宛のパケットを送信する際に、直接の送信先としてノードDを選択する」ということを示す。つまり、第1の通信装置としてノードAに注目した場合、ノードDは第3の通信装置である。逆に、第1の通信装置としてノードDに注目した場合、ノードAは第4の通信装置であり、ルーティングアルゴリズムによっては第6の通信装置でもある。
また、ノードDからノードEに向かう実線の矢印は、「ノードDは、ゲートウェイGW1宛のパケットを送信する際に、直接の送信先としてノードEを選択する」ということを示す。つまり、第1の通信装置としてノードDに注目した場合、ノードEは第3の通信装置である。逆に、第1の通信装置としてノードEに注目した場合、ノードDは第4の通信装置であり、ルーティングアルゴリズムによっては第6の通信装置でもある。
そして、ノードBとノードDを結ぶ破線の矢印は、以下の3つのことを示す。すなわち、第1に、ノードBとノードDは、物理的には1ホップでパケットを送受信することが可能である。第2に、ノードBがゲートウェイGW1宛のパケットを送信するときに、ノードBが直接の送信先として選択するノードは、ノードDではない。第3に、ノードDがゲートウェイGW1宛のパケットを送信するときに、ノードDが直接の送信先として選択するノードは、ノードBではない。
つまり、第1の通信装置としてノードBに注目した場合、ノードDは第6の通信装置かもしれないが、第3の通信装置ではないし、第4の通信装置でもない。逆に、第1の通信装置としてノードDに注目した場合、ノードBは第6の通信装置かもしれないが、第3の通信装置ではないし、第4の通信装置でもない。
以上説明した矢印の意味によれば、図4のネットワーク400は、以下のように構成されている。
ノードAは、ノードBおよびDと隣接しているが、ゲートウェイGW1宛のパケットの送信のときにはノードDを送信先として選択する。ノードBは、ノードA、C、DおよびEと隣接しているが、ゲートウェイGW1宛のパケットの送信のときにはノードEを送信先として選択する。ノードCは、ノードBおよびEと隣接しているが、ゲートウェイGW1宛のパケットの送信のときにはノードEを送信先として選択する。
また、ノードDは、ノードA、BおよびEと隣接しているが、ゲートウェイGW1宛のパケットの送信のときにはノードEを送信先として選択する。ノードEは、ノードB、C、DおよびFと隣接しているだが、ゲートウェイGW1宛のパケットの送信のときにはノードFを送信先として選択する。ノードFは、ノードE、G、HおよびIと隣接しているが、ゲートウェイGW1宛のパケットの送信のときにはノードHを送信先として選択する。
そして、ノードGは、ノードFおよびHならびにゲートウェイGW1と隣接している。また、ノードHは、ノードF、GおよびIならびにゲートウェイGW1と隣接している。さらに、ノードIは、ノードFおよびHならびにゲートウェイGW1と隣接している。これらのノードG、HおよびIは、ゲートウェイGW1宛のパケットの送信のときにはゲートウェイGW1自体を送信先として選択する。
以上の説明から明らかなように、第1の通信装置としてノードA、B、C、GまたはIに注目した場合、第4の通信装置は存在しない。なぜなら、ノードA、B、C、GまたはIに向かう実線矢印はないからである。
このように、第4の通信装置が存在しない場合、第1の通信装置としての図1の通信装置100において、通知受信部101は、第1の送信データ量の通知を受信しない。この場合、送信量通知部102は、第1の送信データ量をゼロと見なす。したがって、送信量通知部102は、通信装置100自身が所定期間に生成する第2の通信装置宛のデータの量を、第2の送信データ量として第3の通信装置に通知する。
また、ノードEに向かう実線の矢印は3本あるので、第1の通信装置としてノードEに注目した場合には、第4の通信装置が3つある(すなわち3つのノードB、CおよびDが、第4の通信装置である)。一方、第1の通信装置としてノードDに注目した場合には、上記のように、第4の通信装置に相当するノードは、1つのノードAのみである。このように、第4の通信装置の数は、0、1、または複数である。
そして、ゲートウェイGW1へ向かう実線矢印の出発点であるノードGに第1の通信装置として注目すると、ゲートウェイGW1は第2の通信装置でもあり、かつ第3の通信装置でもある。このように、第2の通信装置と第3の通信装置が同じ場合もある。
さて、以上説明したネットワーク400において、ノードA〜Iがそれぞれ図1の通信装置100のように構成されているものとする。この場合に、具体的にはどのようにしてボトルネックが予測または検出されるか、以下に数値の例を挙げて説明する。
簡単のため、ノードA〜Iの各々が所定期間に生成してゲートウェイGW1宛に送信するデータの量を「1」とする。また、説明の便宜上、ボトルネック判定部103は、送信量通知部102から出力される第2の送信データ量が所定の閾値「5」を超えたときに「第2の送信データ量が所定の基準を超えている」と判定するものとする。
なお、所定期間の長さと、送信データ量の単位は実施形態に応じて任意である。例えば、単位量が100KBで、所定期間が5分間ならば、「1」という値は「100KB/5分間」の意味であり、「5」という値は「500KB/5分間」の意味である。
また、送信データ量は、データパケットのペイロード長に基づいて計量されてもよい。あるいは、データパケットが固定長の場合は、送信データ量は、データパケットの個数(換言すれば送信回数)に基づいて計量されてもよい。例えば、所定期間が30分の場合、「1」という値が「1回/30分」を意味してもよい。
上記のとおり、第1の通信装置としてノードAに注目した場合、第4の通信装置は存在しない。よって、ノードAの送信量通知部102は、「1」という送信データ量をノードDに通知する。
同様に、ノードBの送信量通知部102は、「1」という送信データ量をノードEに通知する。また、ノードCの送信量通知部102も、同様に「1」という送信データ量をノードEに通知する。なお、1≦5なので、ノードA、B、Cのいずれにおいても、ボトルネック判定部103は、「第2の送信データ量は所定の基準を超えていない」と判定する。
ノードDの通知受信部101は、ノードAから「1」という送信データ量の通知を受信する。すると、ノードDの送信量通知部102は、ノードD自身が生成してゲートウェイGW1宛に送信するデータの量である「1」と、通知された送信データ量「1」を足し、和として得られた送信データ量「2」をノードEに通知する。なお、2≦5なので、ノードDのボトルネック判定部103も、「第2の送信データ量は所定の基準を超えていない」と判定する。
ノードEの通知受信部101は、ノードBからは「1」という送信データ量の通知を受信し、ノードCからは「1」という送信データ量の通知を受信し、ノードDからは「2」という送信データ量の通知を受信する。すると、ノードEの送信量通知部102は、ノードE自身が生成してゲートウェイGW1宛に送信するデータの量である「1」と、通知された「1」、「1」および「2」という送信データ量を足す。そして、ノードEの送信量通知部102は、和として得られた送信データ量「5」をノードFに通知する。なお、5≦5なので、ノードEのボトルネック判定部103も、「第2の送信データ量は所定の基準を超えていない」と判定する。
ノードFの通知受信部101は、ノードEから「5」という送信データ量の通知を受信する。すると、ノードFの送信量通知部102は、ノードF自身が生成してゲートウェイGW1宛に送信するデータの量である「1」と、通知された送信データ量「5」を足し、和として得られた送信データ量「6」をノードHに通知する。
なお、6>5なので、ノードFのボトルネック判定部103は、「第2の送信データ量は所定の基準を超えている」と判定する。したがって、ノードFの送信ボトルネック通知部104は、「ノードFはネットワーク400におけるボトルネックである」と判定し、判定結果をゲートウェイGW1に通知する。
また、上記のとおり、第1の通信装置としてノードGに注目した場合、第4の通信装置は存在しない。よって、ノードGの送信量通知部102は、「1」という送信データ量をゲートウェイGW1に通知する。
ノードHの通知受信部101は、ノードFから「6」という送信データ量の通知を受信する。すると、ノードHの送信量通知部102は、ノードH自身が生成してゲートウェイGW1宛に送信するデータの量である「1」と、通知された送信データ量「6」を足し、和として得られた送信データ量「7」をゲートウェイGW1に通知する。
なお、7>5なので、ノードHのボトルネック判定部103は、「第2の送信データ量は所定の基準を超えている」と判定する。したがって、ノードHの送信ボトルネック通知部104は、「ノードHはネットワーク400におけるボトルネックである」と判定し、判定結果をゲートウェイGW1に通知する。
また、上記のとおり、第1の通信装置としてノードIに注目した場合、第4の通信装置は存在しない。よって、ノードIの送信量通知部102は、「1」という送信データ量をゲートウェイGW1に通知する。
ゲートウェイGW1は、以上のようにして、ノードG、HおよびIからそれぞれ、「1」、「7」および「1」という送信データ量の通知を受信する。また、ゲートウェイGW1は、ノードFとHからそれぞれ、「ノードFがボトルネックである」という通知と「ノードHがボトルネックである」という通知を受信する。
なお、ノードFとHからゲートウェイGW1へのボトルネックの通知は、例えば、通常のデータパケットと同様にネットワーク400内を実線矢印に沿ってルーティングされることにより、ゲートウェイGW1まで送信されてもよい。
また、ゲートウェイGW1は、ボトルネックの通知を受けたら、通知された内容をディスプレイに表示してもよい。あるいは、ゲートウェイGW1は、例えばネットワーク管理者宛に電子メールでボトルネックの通知を送信してもよい。すると、ディスプレイを見るか電子メールを受信するかしたネットワーク管理者は、例えば、新たなノードを設置するなどの適宜の対策をとることができる。
以上、図1〜4を参照して説明した第1実施形態によれば、ネットワークにおけるボトルネックの予測または検出が可能となるので、非常に有益である。また、第1の送信データ量の通知と第2の送信データ量の通知を、通常の通信で用いるパケットに含めることにより、余計なトラヒックの増加を招かずに、ネットワーク400内の各ノードが自律的にボトルネックを予測または検出することが可能となる。
ところで、上記の第1実施形態では、ボトルネック判定部103は、通信装置100が受信するデータの量を示す第1の送信データ量と、通信装置100自身が生成する第2の通信装置宛のデータの量とを合計した第2の送信データ量に基づく判断を行う。しかしながら、実施形態によっては、第2の通信装置宛のデータを自ら生成することのない通信装置(すなわち中継専用の通信装置)もあり得る。また、ある通信装置が、もしも隣接する他の通信装置からのデータ受信だけで過負荷に陥るならば、さらに第2の通信装置宛のデータを自ら生成して送信したら、過負荷状態が悪化するのは明らかである。
そこで、図5に示す第2実施形態においては、通信装置は、自らが生成するデータの量には関係なく、隣接する他の通信装置からのデータ受信の量に基づいて、通信装置自身がネットワーク内のボトルネックか否かを判断する。
図5は、第2実施形態の通信装置のブロック構成図である。図5の通信装置500は、複数の通信装置を含むネットワークで使われる。ネットワークは、例えば、有線または無線のアドホックネットワークであり、より具体的には、図4のネットワーク400でもよい。以下、図5に関する説明においては、便宜上、ネットワーク内の以下の通信装置をそれぞれ「第1の通信装置」〜「第4の通信装置」という。なお、図5の説明における第1〜第4の通信装置は、図1〜4の説明における第1〜第4の通信装置とは異なるので注意されたい。
便宜上、通信装置500自体を「第1の通信装置」という。
また、便宜上、通信装置500に隣接する1つ以上の通信装置をそれぞれ「第2の通信装置」という。
そして、便宜上、ネットワーク内でのデータの最終的な送信先である、特定の通信装置を「第3の通信装置」という。第3の通信装置は、例えばゲートウェイGW1でもよい。
また、「通信装置500は、ネットワーク内で通信負荷の集中するボトルネックである」と通信装置500自身が判定した場合に、通信装置500が判定結果を通知する先の予め決められた通信装置を、便宜上、「第4の通信装置」という。
なお、ネットワーク内の特定の1つの通信装置が、第4の通信装置として予め決められていてもよい。例えば、第4の通信装置と第3の通信装置が同じでもよい。あるいは、複数の通信装置が、複数の第4の通信装置として予め決められていてもよい。例えば、ネットワーク内の通信装置500以外のすべての通信装置が、複数の第4の通信装置として予め決められていてもよい。
さて、図5の通信装置500は、以上のような第1〜第4の通信装置を含むネットワークにおける第1の通信装置である。そして、図5に示すように、通信装置500は、通知受信部501、ボトルネック判定部502、および受信ボトルネック通知部503を有する。
通知受信部501は、通信装置500に隣接する1つ以上の第2の通信装置の各々から、各第2の通信装置が所定期間に送信する第3の通信装置宛のデータの第1の送信データ量の通知を受信する。
なお、通知受信部501の動作は図1の通知受信部101と類似であり、所定期間の長さは任意でよい。また、第1実施形態と同様に、トラヒック抑制の観点からは、第1の送信データ量は、専用の制御パケットを用いて通知されるよりも、通常の通信で使われるパケットに付加される形で通知される方が好ましい。
ボトルネック判定部502は、1つ以上の第2の通信装置の各々から通知されたそれぞれの第1の送信データ量を集約した第2の送信データ量を計算する。さらに、ボトルネック判定部502は、計算した第2の送信データ量が所定の基準を超えているかを判定する。
なお、ボトルネック判定部502が行う集約は、例えば、単純な加算でもよい。また、ボトルネック判定部502は、計算した第2の送信データ量を所定の閾値と比較し、第2の送信データ量が所定の閾値を超えていれば「第2の送信データ量は所定の基準を超えている」と判定してもよい。
そして、「第2の送信データ量が所定の基準を超えている」とボトルネック判定部502が判定した場合に、受信ボトルネック通知部503は、「通信装置500はネットワークにおけるボトルネックである」ということを第4の通信装置に通知する。第4の通信装置への通知は、換言すれば、「通信装置500が受信するデータの量は過剰であり、データの受信だけで通信装置500は過負荷に陥ってしまう」という警告である。
よって、受信ボトルネック通知部503から第4の通信装置への通知にしたがって、過剰な負荷を軽減するための対策がとられることが望ましい。なお、対策の例については、第1実施形態に関して説明したので、説明を省略する。
また、以上説明した通信装置500は、例えば図2または図3に示すハードウェアにより実現されてもよい。
例えば、通信装置500を含むネットワークが無線ネットワークである場合、通信装置500は、図2の通信装置200により実現されてもよい。すなわち、通知受信部501は、802.15.4 PHY/MACチップ205により実現されてもよく、ボトルネック判定部502は、MPU201とDRAM203により実現されてもよい。
そして、受信ボトルネック通知部503は、MPU201と802.11b PHY/MACチップ206により実現されてもよいし、MPU201と802.15.4 PHY/MACチップ205により実現されてもよい。また、通信装置500が中継専用の場合、センサ207は省略可能である。
あるいは、通信装置500を含むネットワークが有線ネットワークである場合、通信装置500は、図3の通信装置300により実現されてもよい。説明の便宜上、例えば、2つの第2の通信装置があり、2つの第2の通信装置はそれぞれ物理ポート301aと301bに接続されているものとする。すると、通知受信部501は、具体的には、物理ポート301a〜301bとPHYチップ302a〜302bにより実現される。
また、図3に関する上記の説明と同様に、FPGA303がルーティングを行い、他の処理はMPU306が行うものとする。すると、ボトルネック判定部502は、MPU306とメモリ307により実現される。
MPU306は、受信ボトルネック通知部503の一部としても動作する。すなわち、第2の送信データ量が所定の基準を超えている場合、MPU306は、「通信装置300はネットワークにおけるボトルネックである」と判定する。そして、MPU306は、判定結果を第4の通信装置に通知するためのパケットを生成する。
生成されたパケットは、物理ポート301a〜301dの一部または全部から送信される。上記のとおり、第2実施形態における第4の通信装置は、1つでもよいし複数あってもよい。
例えば、受信ボトルネック通知部503がブロードキャストによって複数の第4の通信装置に判定結果を通知してもよい。この場合、受信ボトルネック通知部503は、物理ポート301a〜301dとPHYチップ302a〜302dとFPGA303とMPU306により実現される。
あるいは、受信ボトルネック通知部503は、特定の1つの第4の通信装置に判定結果を通知してもよい。この場合、受信ボトルネック通知部503は、MPU306だけではなく、第4の通信装置宛のパケットのルーティング先を決定するFPGA303を含む。また、受信ボトルネック通知部503は、FPGA303により決定された直接の送信先と接続されている、いずれか1つの物理ポートと、当該物理ポートと接続されているPHYチップをさらに含む。
例えば、図4のネットワーク400において、第1実施形態とは異なり、ノードHが中継専用の通信装置であるとする。そして、ノードA〜GおよびIは第1実施形態の通信装置100であり、ノードHが第2実施形態の通信装置500であるとする。また、ボトルネック判定部502は、集約により得た第2の送信データ量が所定の閾値「5」を超えたときに「第2の送信データ量が所定の基準を超えている」と判定するものとする。
第1実施形態に関して説明したように、ノードFの送信量通知部102は、「6」という送信データ量をノードHに通知する。よって、ノードHの通知受信部501は、ノードFから「6」という送信データ量の通知を受信する。
図4のネットワーク400においては、第2実施形態の第1の通信装置としてノードHに注目すると、第2の通信装置に相当するのはノードFのみである。よって、ノードHのボトルネック判定部502は、単に、ノードFから通知された「6」という送信データ量そのものを、集約された第2の送信データ量として認識する。そして、6>5なので、ノードHのボトルネック判定部502は、「第2の送信データ量は所定の基準を超えている」と判定し、判定結果を第4の通信装置としてのゲートウェイGW1に通知する。
なお、以上説明した第2実施形態の通信装置500は、以下のように変形されてもよい。すなわち、通信装置500は、不図示の送信量通知部をさらに有してもよい。そして、不図示の送信量通知部は、ボトルネック判定部502が集約して得た第2の送信データ量を、第3の通信装置宛のデータを通信装置500が送信する際に直接の送信先として選択可能な、通信装置500に隣接する通信装置に、通知してもよい。不図示の送信量通知部を有するように変形された通信装置500は、例えば、中継専用の通信装置に好適である。
なお、上記の不図示の送信量通知部は、例えば、図2の802.15.4 PHY/MACチップ205により実現されてもよい。または、上記の不図示の送信量通知部は、図3の物理ポート301a〜301dとPHYチップ302a〜302dの一部または全部により実現されてもよい。
ところで、第1〜第2実施形態に関して説明したとおり、送信データ量は、通常の通信で使われるパケットに埋め込まれる形で通知されることが好ましい。そこで、以下ではより具体的に、送信データ量がデータパケットに埋め込まれる第3実施形態について、図6〜15を参照して説明し、送信データ量がハローパケットに埋め込まれる第4実施形態について、図16〜21を参照して説明する。
その後、第3または第4実施形態を変形した第5〜第11実施形態について説明する。なお、以下の説明においては、ネットワークの具体例として図4のネットワーク400を参照する。また、ネットワーク400は有線アドホックネットワークでもよいが、以下では説明の便宜上、ネットワーク400が無線アドホックネットワークである場合について主に説明する。
図6は、第3実施形態におけるデータパケットの送受信に関するタイミングチャートである。図6のタイミングチャートは、図4のノードA〜Iの各々が、図7とともに後述する第3実施形態の通信装置600である場合の、データパケットの送受信を表す。
なお、第3実施形態では、ネットワーク400内でのデータパケットの最終的な送信先は、具体的には、ゲートウェイGW1であるとする。また、ノードA〜Iの各々がボトルネックに関する判定結果を通知する先も、ゲートウェイGW1であるとする。
さて、ノードA〜Iは、それぞれ適宜のタイミングでデータパケットを送信する。図6では、各データパケットは、3文字の参照符号で識別される。1文字目はデータパケットを示す「D」である。2文字目は、個々のデータパケットを識別するための数字である。
また、データパケットは、マルチホップ送信の対象であり、第3実施形態では、ホップごとにデータパケットの一部のフィールドの値が書き換えられる。そこで、ホップごとの変化を識別するため、各データパケットの参照符号の3文字目には、各ホップでの直接の送信元のノードの参照符号である英文字が使われている。
また、詳しくは図10とともに後述するが、第3実施形態ではデータパケットが「送信トラヒック」というフィールドを含む。第1実施形態に関して説明した第1と第2の送信データ量に相当する値が、第3実施形態においては、いずれも、送信トラヒックとして設定される。そして、送信トラヒックの値が、ホップごとに書き換えられる。
図6では、個々の矢印により、個々のデータパケットの1ホップの送信を示している。そして、各矢印に重ねて描かれた矩形内の数値が、当該矢印が表すデータパケット中の送信トラヒックの値である。
なお、以下では説明の便宜上、図4に関する説明と同様に、ノードA〜Iの各々が所定期間に生成してゲートウェイGW1宛に送信するデータの量の期待値を「1」とする。また、ボトルネックの判定用の閾値を「5」とする。
なお、ノードが、所定の量のデータを所定期間に生成してゲートウェイGW1宛に送信するように、実際に設定されており、かつ設定にしたがって動作する場合は、上記「期待値」は、設定された所定の量のことである。よって、この場合、実際のボトルネックの検出が可能である。
また、上記「期待値」は、予定または予測される値でもよい。例えば、「設定値を変更したら新たにボトルネックが生じるおそれがないかを、実際に設定値を変更する前に調査する」といった目的で、設定変更後に予定される値が「期待値」として使われてもよい。この場合、ボトルネックの予測が可能である。
ノードA〜Iは、例えば予め決められたスケジュールにしたがって、センサから出力されたデータをペイロードとして含むデータパケットを生成して送信してもよい。あるいは、ノードA〜Iは、センサの出力の変化等に応じて、事前には決められていない可変のタイミングで、データパケットを生成して送信してもよい。すなわち、ネットワーク400内の各ノードA〜Iがデータパケットを送信するタイミングは任意である。
また、ここで、「ネットワーク400内のすべてのノードA〜Iが少なくとも1回ずつゲートウェイGW1宛にデータパケットを送信し、それらのデータパケットがゲートウェイGW1に届くのにかかる時間」のことを、便宜上「1ラウンド」ということにする。以下に説明する図6の例から理解されるように、各ノードA〜Iがどのような順序でデータパケットを送信しようとも、ネットワーク400内におけるすべてのボトルネックが予測または検出されるまでにかかる時間は、最大でも1ラウンドである。
さて、図6には、一例として、以下のような場合が例示されている。
まず、ノードFがデータパケットD1Fを送信する。データパケットD1Fに設定される送信トラヒックの値は「1」である。なぜなら、データパケットD1Fの送信の前には、ノードFは他のノードからいかなるデータパケットも受信していないからである。そのため、データパケットD1Fには、ノードFが所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」が、送信トラヒックとして設定される。
また、データパケットD1Fのネットワーク400内での最終的な宛先は、ゲートウェイGW1である。しかし、図4で実線矢印により示すとおり、ノードFがゲートウェイGW1に送信するパケットは、直接的にはノードFに隣接するノードHに送信され、ノードHにより中継されて、ゲートウェイGW1に到達する。
以下では、ネットワーク400内でのパケットの最終的な送信先をGD(Global Destination)といい、ネットワーク400内でのパケットの最初の送信元をGS(Global Source)という。また、1ホップの送信に着目したときの、直接的な送信先をLD(Local Destination)といい、直接的な送信元をLS(Local Source)という。
例えば、ノードFがゲートウェイGW1宛に送信するパケットに関しては、GDはゲートウェイGW1であり、GSはノードFである。GDとGSは、パケットがネットワーク400内をマルチホップ送信される間も変化しない。
他方、LDとLSはホップごとに変化する。つまり、GDがゲートウェイGW1のパケットがノードFから送信される時点では、LDはノードHであり、LSはノードFであるが、パケットがノードHにより中継される時点では、LDはゲートウェイGW1であり、LSはノードHである。したがって、上記のデータパケットD1Fに関しては、GDはゲートウェイGW1であり、GSはノードFであり、LDはノードHであり、LSはノードFである。
さて、ノードHは、ノードFからデータパケットD1Fを受信すると、LDとLSと送信トラヒックを書き換えたデータパケットD1Hを送信する。データパケットD1HのLDとLSは、それぞれ、ゲートウェイGW1とノードHである。
また、図6の例では、ノードHは、データパケットD1Fを受信するよりも前には、他のノードからいかなるデータパケットも受信していない。よって、データパケットD1Hの送信トラヒックには、データパケットD1Fに設定されていた「1」という値と、ノードHが所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」の和である「2」が設定される。そして、ノードHが送信したデータパケットD1Hは、ゲートウェイGW1に受信される。
さて、図6の例では、続いて、ノードHがゲートウェイGW1宛の新たなデータパケットD2Hを生成して送信する。図4においてノードHからゲートウェイGW1への実線矢印があるので、データパケットD2Hは、1ホップでゲートウェイGW1に届く。
また、データパケットD2Hの送信の前に、ノードHは、既にノードFからデータパケットD1Fを受信している。よって、データパケットD1Hと同様にデータパケットD2Hにおいても、送信トラヒックとして「2」という値が設定される。そして、データパケットD2Hは、ゲートウェイGW1に受信される。
また、図6の例では、続いて、ノードDがゲートウェイGW1宛の新たなデータパケットD3Dを生成して送信する。図4の実線矢印が示すように、ノードDがゲートウェイGW1に宛てて送信するデータパケットは、ノードE、FおよびHを経由してゲートウェイGW1に届く。
ここで、図6によれば、データパケットD3Dの送信の前には、ノードDは、他のノードからいかなるデータパケットも受信していない。よって、データパケットD3Dには、送信トラヒックとして、ノードDが所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」が設定される。
ノードDから送信されたデータパケットD3Dは、隣接するノードEで受信される。ノードEは、データパケットD3Dを受信すると、LDとLSと送信トラヒックを書き換えたデータパケットD3Eを送信する。データパケットD3EのLDとLSは、それぞれ、ノードFとノードEである。
また、図6の例では、ノードEは、データパケットD3Dを受信するよりも前には、他のノードからいかなるデータパケットも受信していない。よって、データパケットD3Eの送信トラヒックには、データパケットD3Dに設定されていた「1」という値と、ノードEが所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」の和である「2」が設定される。そして、ノードEが送信したデータパケットD3Eは、ノードFに受信される。
ノードFは、データパケットD3Eを受信すると、LDとLSと送信トラヒックを書き換えたデータパケットD3Fを送信する。データパケットD3FのLDとLSは、それぞれ、ノードHとノードFである。
また、図6によれば、ノードFは、データパケットD3Eを受信するよりも前には、他のノードからいかなるデータパケットも受信していない。よって、データパケットD3Fの送信トラヒックには、データパケットD3Eに設定されていた「2」という値と、ノードFが所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」の和である「3」が設定される。そして、ノードFが送信したデータパケットD3Fは、ノードHに受信される。
ノードHは、データパケットD3Fを受信すると、LDとLSと送信トラヒックを書き換えたデータパケットD3Hを送信する。データパケットD3HのLDとLSは、それぞれ、ゲートウェイGW1とノードHである。
また、ノードHは、データパケットD3Fの受信よりも前に、既にデータパケットD1Fを受信している。しかし、以前受信したデータパケットD1FのLSは、今回受信したデータパケットD3FのLSと等しいので、ノードHは、データパケットD1Fに設定されていた送信トラヒックの値は無視する。
その結果、データパケットD3Hの送信トラヒックには、データパケットD3Fに設定されていた「3」という値と、ノードHが所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」の和である「4」が設定される。そして、ノードHが送信したデータパケットD3Hは、ゲートウェイGW1に受信される。
図6の例では、続いて、ノードAがゲートウェイGW1宛の新たなデータパケットD4Aを生成して送信する。図4の実線矢印が示すように、ノードAがゲートウェイGW1に宛てて送信するデータパケットは、ノードD、E、FおよびHを経由してゲートウェイGW1に届く。
ここで、図6によれば、データパケットD4Aの送信の前には、ノードAは、他のノードからいかなるデータパケットも受信していない。よって、データパケットD4Aには、送信トラヒックとして、ノードAが所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」が設定される。
ノードAから送信されたデータパケットD4Aは、隣接するノードDで受信される。ノードDは、データパケットD4Aを受信すると、LDとLSと送信トラヒックを書き換えたデータパケットD4Dを送信する。データパケットD4DのLDとLSは、それぞれ、ノードEとノードDである。
また、図6の例では、ノードDは、データパケットD4Aを受信するよりも前には、他のノードからいかなるデータパケットも受信していない。よって、データパケットD4Dの送信トラヒックには、データパケットD4Aに設定されていた「1」という値と、ノードDが所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」の和である「2」が設定される。そして、ノードDが送信したデータパケットD4Dは、ノードEに受信される。
ノードEは、データパケットD4Dを受信すると、LDとLSと送信トラヒックを書き換えたデータパケットD4Eを送信する。データパケットD4EのLDとLSは、それぞれ、ノードFとノードEである。
また、ノードEは、データパケットD4Dの受信よりも前に、既にデータパケットD3Dを受信している。しかし、以前受信したデータパケットD3DのLSは、今回受信したデータパケットD4DのLSと等しいので、ノードEは、データパケットD3Dに設定されていた送信トラヒックの値は無視する。
その結果、データパケットD4Eの送信トラヒックには、データパケットD4Dに設定されていた「2」という値と、ノードEが所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」の和である「3」が設定される。そして、ノードEが送信したデータパケットD4Eは、ノードFに受信される。
ノードFは、データパケットD4Eを受信すると、LDとLSと送信トラヒックを書き換えたデータパケットD4Fを送信する。データパケットD4FのLDとLSは、それぞれ、ノードHとノードFである。
また、ノードFは、データパケットD4Eの受信よりも前に、既にデータパケットD3Eを受信している。しかし、以前受信したデータパケットD3EのLSは、今回受信したデータパケットD4EのLSと等しいので、ノードFは、データパケットD3Eに設定されていた送信トラヒックの値は無視する。
その結果、データパケットD4Fの送信トラヒックには、データパケットD4Eに設定されていた「3」という値と、ノードFが所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」の和である「4」が設定される。そして、ノードFが送信したデータパケットD4Fは、ノードHに受信される。
ノードHは、データパケットD4Fを受信すると、LDとLSと送信トラヒックを書き換えたデータパケットD4Hを送信する。データパケットD4HのLDとLSは、それぞれ、ゲートウェイGW1とノードHである。
また、ノードHは、データパケットD4Fの受信よりも前に、既にデータパケットD1FとD3Fを受信している。しかし、以前受信したデータパケットD1FとD3FのLSは、いずれも、今回受信したデータパケットD4FのLSと等しいので、ノードHは、データパケットD1FとD3Fに設定されていた送信トラヒックの値は無視する。
その結果、データパケットD4Hの送信トラヒックには、データパケットD4Fに設定されていた「4」という値と、ノードHが所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」の和である「5」が設定される。そして、ノードHが送信したデータパケットD4Hは、ゲートウェイGW1に受信される。
図6の例では、続いて、ノードCがゲートウェイGW1宛の新たなデータパケットD5Cを生成して送信する。図4の実線矢印が示すように、ノードCがゲートウェイGW1に宛てて送信するデータパケットは、ノードE、FおよびHを経由してゲートウェイGW1に届く。
ここで、図6によれば、データパケットD5Cの送信の前には、ノードCは、他のノードからいかなるデータパケットも受信していない。よって、データパケットD5Cには、送信トラヒックとして、ノードCが所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」が設定される。
ノードCから送信されたデータパケットD5Cは、隣接するノードEで受信される。ノードEは、データパケットD5Cを受信すると、LDとLSと送信トラヒックを書き換えたデータパケットD5Eを送信する。データパケットD5EのLDとLSは、それぞれ、ノードFとノードEである。
また、ノードEは、データパケットD5Cの受信よりも前に、既にデータパケットD3DとD4Dを受信している。ここで、データパケットD3DとD4Dは、どちらもLSがノードDであるが、データパケットD5CのLSはノードCである。
よって、ノードEは、LSが互いに等しい2つのデータパケットD3DとD4Dのうちで古い方のデータパケットD3Dに設定されていた送信トラヒックの値は無視するが、新しい方のデータパケットD4Dに設定されていた送信トラヒックの値は考慮に入れる。また、ノードEは、LSがノードDとは異なるデータパケットD5Cに設定されていた送信トラヒックの値も、考慮に入れる。
よって、データパケットD5Eの送信トラヒックには、データパケットD4DとD5Cにそれぞれ設定されていた「2」と「1」という値と、ノードEが所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」の和である「4」が設定される。そして、ノードEが送信したデータパケットD5Eは、ノードFに受信される。
ノードFは、データパケットD5Eを受信すると、LDとLSと送信トラヒックを書き換えたデータパケットD5Fを送信する。データパケットD5FのLDとLSは、それぞれ、ノードHとノードFである。
また、ノードFは、データパケットD5Eの受信よりも前に、既にデータパケットD3EとD4Eを受信している。しかし、以前受信したデータパケットD3EとD4EのLSは、いずれも、今回受信したデータパケットD5EのLSと等しいので、ノードFは、データパケットD3EとD4Eに設定されていた送信トラヒックの値は無視する。
その結果、データパケットD5Fの送信トラヒックには、データパケットD5Eに設定されていた「4」という値と、ノードFが所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」の和である「5」が設定される。そして、ノードFが送信したデータパケットD5Fは、ノードHに受信される。
ノードHは、データパケットD5Fを受信すると、LDとLSと送信トラヒックを書き換えたデータパケットD5Hを送信する。データパケットD5HのLDとLSは、それぞれ、ゲートウェイGW1とノードHである。
また、ノードHは、データパケットD5Fの受信よりも前に、既にデータパケットD1FとD3FとD4Fを受信している。しかし、以前受信したデータパケットD1FとD3FとD4FのLSは、いずれも、今回受信したデータパケットD5FのLSと等しいので、ノードHは、データパケットD1FとD3FとD4Fに設定されていた送信トラヒックの値は無視する。
その結果、データパケットD5Hの送信トラヒックには、データパケットD5Fに設定されていた「5」という値と、ノードHが所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」の和である「6」が設定される。そして、ノードHが送信したデータパケットD5Hは、ゲートウェイGW1に受信される。
また、上記の仮定より、ボトルネックの判定のための閾値は「5」であり、6>5である。よって、ノードHは、データパケットD5Fの受信を契機として、「ノードHはネットワーク400内のボトルネックである」と判定し、判定結果をゲートウェイGW1に通知する。
以下では説明の便宜上、ボトルネックの判定結果の通知のことを「ボトルネック通知」ともいう。なお、図6では、ボトルネック通知の図示は省略されている。
ボトルネック通知は、例えば、通常のデータパケットと同様にしてネットワーク400内をルーティングされてゲートウェイGW1に送信されてもよい。あるいは、ボトルネック通知は、通常のデータパケットとは異なる方法でゲートウェイGW1に送信されてもよい。
例えば、多重チャネルの通信システムでは、ボトルネック通知は、通常のデータパケット用に使われる無線周波数チャネルとは異なる無線周波数チャネルを介して送信されてもよい。ボトルネック通知は警報の一種なので、ボトルネック通知専用の無線周波数チャネルを用いることで、通常のデータパケットの通信とのコリジョンを避けて、確実に、ボトルネック通知を宛先のゲートウェイGW1まで送信することが可能となる。ボトルネック通知専用の無線周波数チャネルが利用される場合でも、ボトルネック通知は、データパケットと同様にネットワーク内をルーティングされてよい。
あるいは、ボトルネック通知は、通常のデータパケットの通信で使われる通信規格とは異なる通信規格にしたがって送信されてもよい。例えば、通常のデータパケットは、低消費電力が特長のIEEE 802.15.4規格にしたがって送信されてもよい。一方で、ボトルネック通信は、IEEE 802.15.4規格と比べると消費電力が高いが通信可能な距離はやや長めのIEEE 802.11b規格にしたがって送信されてもよい。
すると、通常の運用では低消費電力という利点を享受することが可能である。一方で、ボトルネックが予測または検出された場合には、高出力で確実に、そして少ないホップ数で素早く、ゲートウェイGW1がボトルネックを認識することが可能である。
なお、以上のように2つの異なる通信規格が用いられる場合、ボトルネック通知がルーティングされる経路は、一般には、データパケットがルーティングされる経路とは異なる。よって、各ノードは、2つの規格それぞれについて経路情報を管理する。
さて、以上のようにしてデータパケットD5Fの受信を契機にして、ノードHが、データパケットD5Hおよびボトルネック通知を送信した後、図6の例では、続いて、ノードBがゲートウェイGW1宛の新たなデータパケットD6Bを生成して送信する。図4の実線矢印が示すように、ノードBがゲートウェイGW1に宛てて送信するデータパケットは、ノードE、FおよびHを経由してゲートウェイGW1に届く。
ここで、図6によれば、データパケットD5Bの送信の前には、ノードBは、他のノードからいかなるデータパケットも受信していない。よって、データパケットD5Bには、送信トラヒックとして、ノードBが所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」が設定される。
ノードBから送信されたデータパケットD6Bは、隣接するノードEで受信される。ノードEは、データパケットD6Bを受信すると、LDとLSと送信トラヒックを書き換えたデータパケットD6Eを送信する。データパケットD6EのLDとLSは、それぞれ、ノードFとノードEである。
また、ノードEは、データパケットD6Bの受信よりも前に、既にデータパケットD3DとD4DとD5Cを受信している。ここで、データパケットD3DとD4Dは、どちらもLSがノードDである。また、データパケットD5CのLSはノードCであり、データパケットD6BのLSはノードBである。
よって、ノードEは、LSが互いに等しい2つのデータパケットD3DとD4Dのうちで古い方のデータパケットD3Dに設定されていた送信トラヒックの値は無視するが、新しい方のデータパケットD4Dに設定されていた送信トラヒックの値は考慮に入れる。また、ノードEは、LSがノードDとは異なるデータパケットD5Cに設定されていた送信トラヒックの値も、考慮に入れる。さらに、ノードEは、LSがノードDともノードCとも異なるデータパケットD6Bに設定されていた送信トラヒックの値も、考慮に入れる。
よって、データパケットD6Eの送信トラヒックには、「5」が設定される。「5」という値は、データパケットD4DとD5CとD6Bにそれぞれ設定されていた「2」と「1」と「1」という値と、ノードEが所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」の和である。そして、ノードEが送信したデータパケットD6Eは、ノードFに受信される。
ノードFは、データパケットD6Eを受信すると、LDとLSと送信トラヒックを書き換えたデータパケットD6Fを送信する。データパケットD6FのLDとLSは、それぞれ、ノードHとノードFである。
また、ノードFは、データパケットD6Eの受信よりも前に、既にデータパケットD3EとD4EとD5Eを受信している。しかし、以前受信したデータパケットD3EとD4EとD5EのLSは、いずれも、今回受信したデータパケットD6EのLSと等しいので、ノードFは、データパケットD3EとD4EとD5Eに設定されていた送信トラヒックの値は無視する。
その結果、データパケットD6Fの送信トラヒックには、データパケットD6Eに設定されていた「5」という値と、ノードFが所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」の和である「6」が設定される。そして、ノードFが送信したデータパケットD6Fは、ノードHに受信される。
また、上記の仮定より、ボトルネックの判定のための閾値は「5」であり、6>5である。よって、ノードFは、データパケットD6Eの受信を契機として、「ノードFはネットワーク400内のボトルネックである」と判定し、ボトルネック通知をゲートウェイGW1宛に送信する。
そして、ノードHは、データパケットD6Fを受信すると、LDとLSと送信トラヒックを書き換えたデータパケットD6Hを送信する。データパケットD6HのLDとLSは、それぞれ、ゲートウェイGW1とノードHである。
また、ノードHは、データパケットD6Fの受信よりも前に、既にデータパケットD1FとD3FとD4FとD5Fを受信している。しかし、以前受信したデータパケットD1FとD3FとD4FとD5FのLSは、いずれも、今回受信したデータパケットD6FのLSと等しいので、ノードHは、データパケットD1FとD3FとD4FとD5Fに設定されていた送信トラヒックの値は無視する。
その結果、データパケットD6Hの送信トラヒックには、データパケットD6Fに設定されていた「6」という値と、ノードHが所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」の和である「7」が設定される。そして、ノードHが送信したデータパケットD6Hは、ゲートウェイGW1に受信される。
また、上記の仮定より、ボトルネックの判定のための閾値は「5」であり、7>5である。よって、ノードHは、データパケットD6Hの受信を契機として、再度ボトルネック通知をゲートウェイGW1に送信する。
続いて、図6の例では、ノードIがゲートウェイGW1宛の新たなデータパケットD7Iを生成して送信する。図4においてノードIからゲートウェイGW1への実線矢印があるので、データパケットD7Iは、1ホップでゲートウェイGW1に届く。
また、図6によれば、データパケットD7Iの送信の前には、ノードIは、他のノードからいかなるデータパケットも受信していない。よって、データパケットD7Iには、送信トラヒックとして、ノードIが所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」が設定される。そして、ノードIが送信したデータパケットD7Iは、ゲートウェイGW1に受信される。
続いて、図6の例では、ノードEがゲートウェイGW1宛の新たなデータパケットD8Eを生成して送信する。図4の実線矢印が示すように、ノードEがゲートウェイGW1に宛てて送信するデータパケットは、ノードFとHを経由してゲートウェイGW1に届く。
ここで、図6によれば、データデータパケットD8Eの送信の前に、ノードEは、既にデータパケットD3DとD4DとD5CとD6Bを受信している。ここで、データパケットD3DとD4Dは、どちらもLSがノードDである。また、データパケットD5CのLSはノードCであり、データパケットD6BのLSはノードBである。
よって、ノードEは、データパケットD6Eと同様に、データパケットD8Eにおいても、送信トラヒックとして「5」を設定する。そして、ノードEが送信したデータパケットD8Eは、ノードFに受信される。
ノードEから送信されたデータパケットD8Eは、隣接するノードFで受信される。ノードFは、データパケットD8Eを受信すると、LDとLSと送信トラヒックを書き換えたデータパケットD8Fを送信する。データパケットD8FのLDとLSは、それぞれ、ノードHとノードFである。
また、ノードFは、データパケットD8Eの受信よりも前に、既にデータパケットD3EとD4EとD5EとD6Eを受信している。しかし、以前受信したデータパケットD3EとD4EとD5EとD6EのLSは、いずれも、今回受信したデータパケットD8EのLSと等しいので、ノードFは、データパケットD3EとD4EとD5EとD6Eに設定されていた送信トラヒックの値は無視する。
その結果、データパケットD8Fの送信トラヒックには、データパケットD8Eに設定されていた「5」という値と、ノードFが所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」の和である「6」が設定される。さらに、ノードFは、データパケットD6Eを受信したときと同様に、データパケットD8Eの受信を契機として、再度ボトルネック通知をゲートウェイGW1宛に送信する。
そして、ノードFが送信したデータパケットD8Fは、ノードHに受信される。ノードHは、データパケットD8Fを受信すると、LDとLSと送信トラヒックを書き換えたデータパケットD8Hを送信する。データパケットD8HのLDとLSは、それぞれ、ゲートウェイGW1とノードHである。
また、ノードHは、データパケットD8Fの受信よりも前に、既にデータパケットD1FとD3FとD4FとD5FとD6Fを受信している。しかし、以前受信したデータパケットD1FとD3FとD4FとD5FとD6FのLSは、いずれも、今回受信したデータパケットD8FのLSと等しい。よって、ノードHは、データパケットD1FとD3FとD4FとD5FとD6Fに設定されていた送信トラヒックの値は無視する。
その結果、データパケットD8Hの送信トラヒックには、データパケットD8Fに設定されていた「6」という値と、ノードHが所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」の和である「7」が設定される。そして、ノードHが送信したデータパケットD8Hは、ゲートウェイGW1に受信される。
さらに、ノードHは、データパケットD6Fを受信したときと同様に、データパケットD8Fの受信を契機として、再度ボトルネック通知をゲートウェイGW1宛に送信する。
続いて、図6の例では、ノードGがゲートウェイGW1宛の新たなデータパケットD9Gを生成して送信する。図4においてノードGからゲートウェイGW1への実線矢印があるので、データパケットD9Gは、1ホップでゲートウェイGW1に届く。
また、図6によれば、データパケットD9Gの送信の前には、ノードGは、他のノードからいかなるデータパケットも受信していない。よって、データパケットD9Gには、送信トラヒックとして、ノードGが所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」が設定される。そして、ノードGが送信したデータパケットD9Gは、ゲートウェイGW1に受信される。
以上のように、図6には1ラウンドのタイミングチャートが例示されている。そして、図6の例からも明らかなように、1ラウンドの終了までには、ノードFとHからボトルネック通知が送信される。第3実施形態では、データパケットに送信トラヒックが埋め込まれているので、データパケットが実際にルーティングされる経路に沿って送信トラヒックの値も累積される。よって、ボトルネックになるノードがネットワーク内に存在する場合には、経路の安定後、遅くとも1ラウンド以内には、ボトルネック通知が確実に送信されることになる。
さて、以上、図6を参照して説明した各ノードの動作が、より具体的にはどのようにして実現されるのかについて、以下では図7〜15を参照してさらに詳しく説明する。
図7は、第3実施形態の通信装置のブロック構成図である。第3実施形態では、ノードA〜Iの各々が、図7の通信装置600のように構成される。
図7の通信装置600は、図1の通知受信部101、送信量通知部102、ボトルネック判定部103、送信ボトルネック通知部104とそれぞれ類似の、通知受信部601、送信量通知部602、ボトルネック判定部603、ボトルネック通知部604を有する。また、通信装置600は、図1の経路情報記憶部105と類似の経路情報記憶部605を有する。
さらに、通信装置600は、受信したパケットのタイプを判定するタイプ判定部606と、データパケットを一時的に格納するバッファ部607を有する。また、通信装置600は、データパケットの送受信に関する処理を行うデータパケット処理部608を有し、データパケット処理部608は、上記の通知受信部601と送信量通知部602を含む。データパケット処理部608はさらに、データパケットのペイロードに関する処理を行う上位層処理部609と、データパケットのGDに応じてLDを決定する(すなわちデータパケットをルーティングする経路を決定する)ルーティング制御部610も含む。
また、経路情報記憶部605は、通信装置600に隣接する他の通信装置に関する情報を記憶するリンクテーブル611を含む。経路情報記憶部605は、さらに、データパケットのLDを決定するための情報を記憶するルーティングテーブル612も含む。リンクテーブル611とルーティングテーブル612それぞれの具体例については、図8と9とともに後述する。
そして、通信装置600は、通信装置600自身が所定期間に生成してゲートウェイGW1宛に送信するデータパケットの量の期待値を記憶する送信量記憶部613を有する。例えば、図6の例では、送信量記憶部613は「1」という値を記憶する。
また、通信装置600は、ハローパケットの送受信に関する処理を行うハローパケット処理部614を有する。ハローパケット処理部614は、具体的には、受信したハローパケットに基づいてリンクテーブル611を更新するリンク管理部615と、ハローパケットを定期的に送信する存在通知部616を有する。
なお、ゲートウェイGW1は、必ずしも通信装置600のように構成されている必要はない。しかし、以下では説明の簡単化のため、第3実施形態ではゲートウェイGW1がボトルネック通知部604以外の図7の各構成要素を有するものとする。
ところで、通信装置600が無線ネットワークで使われる装置の場合、通信装置600は、例えば図2の通信装置200により実現されてもよい。例えば、802.15.4 PHY/MACチップ205がパケットを受信すると、パケットは、バッファ部607としてのDRAM203に格納されてもよい。そして、MPU201がタイプ判定部606としてパケットのタイプを判定してもよい。
あるいは、802.15.4 PHY/MACチップ205は、MPU201の代わりにタイプ判定部606としてパケットのタイプの判定を行うように構成されていてもよい。その場合、802.15.4 PHY/MACチップ205は、受信したパケットが制御パケットであればパケット全体をMPU201に出力してもよい。逆に、受信したパケットがデータパケットであれば、802.15.4 PHY/MACチップ205は、パケットのヘッダだけをMPU201に出力し、ヘッダを含むパケットの全体をバッファ部607としてのDRAM203に格納してもよい。
MPU201はさらに、データパケット処理部608として各種の処理を行ってもよい。データパケット処理部608のうち上位層処理部609を実現するために、さらにセンサ207が使われてもよい。また、データパケット処理部608内の送信量通知部602は、MPU201と802.15.4 PHY/MACチップ205により実現されてもよい。
経路情報記憶部605と送信量記憶部613は、DRAM203により実現されてもよいし、フラッシュメモリ204により実現されてもよい。
また、ボトルネック判定部603もMPU201によって実現することができる。ボトルネック通知部604は、MPU201と802.15.4 PHY/MACチップ205により実現されてもよいが、MPU201と802.11b PHY/MACチップ206により実現されてもよい。
そして、リンク管理部615もMPU201によって実現することができる。存在通知部616は、MPU201とタイマIC202と802.15.4 PHY/MACチップ205により実現することができる。
以上とは逆に、通信装置600が有線ネットワークで使われる装置の場合、通信装置600は、例えば図3の通信装置300により実現されてもよい。例えば、物理ポート301a〜301dのいずれかがパケットを受信すると、パケットは、対応するPHYチップ(つまりPHYチップ302a〜302dのいずれか)を介して、バッファ部607としての、メモリ305またはメモリ307に出力されてもよい。
タイプ判定部606は、FPGA303により実現されてもよいし、MPU306により実現されてもよい。例えば、FPGA303がタイプを判定し、受信されたパケットがデータパケットの場合のみパケットをMPU306が処理し、受信されたパケットが制御パケットの場合は、パケットをFPGA303が処理してもよい。
また、MPU306は、データパケット処理部608として各種の処理を行ってもよい。データパケット処理部608のうち上位層処理部609を実現するために、さらにセンサ308が使われてもよい。また、データパケット処理部608内の送信量通知部602は、MPU306と、FPGA303と、PHYチップ302a〜302dと、物理ポート301a〜301dにより、実現されてもよい。
経路情報記憶部605はメモリ305により実現されてもよい。また、送信量記憶部613はメモリ307により実現されてもよい。
そして、ボトルネック判定部603もMPU306により実現することができる。ボトルネック通知部604は、MPU306と、FPGA303と、PHYチップ302a〜302dと、物理ポート301a〜301dにより実現されてもよい。
また、リンク管理部615はFPGA303により実現することができる。存在通知部616は、タイマ304を含むFPGA303とPHYチップ302a〜302dと物理ポート301a〜301dにより実現することができる。
さて、図8は、第3実施形態のリンクテーブル611の例を示す図である。図8には、リンクテーブル611の具体例が4つ示されている。以下ではまず、リンクテーブル611の形式について説明し、その後、4つの具体的なリンクテーブル611それぞれの内容について説明する。
リンクテーブル611の各エントリは、通信装置600に隣接する各通信装置に対応する。なお、通信装置600に隣接する通信装置は、ゲートウェイGW1のこともある。そして、図8に示すように、リンクテーブル611内の各エントリは、「リンク名」、「受信トラヒック」、「ハローパケット受信時刻」および「トラヒック認識時刻」というフィールドを含む。
リンク名は、通信装置600に隣接する他の通信装置との間の個々のリンクを識別するための情報である。換言すれば、リンク名は、通信装置600に隣接する個々の通信装置を識別するための情報である。
例えば、ネットワーク内の各通信装置に、ネットワーク内で一意なノードID(identification)が割り当てられている場合、隣接する通信装置のノードIDがリンク名として利用可能である。また、リンク名は、隣接する通信装置のアドレス(例えばMACアドレスなど)でもよい。図示の便宜上、図8では、図4での各ノードの参照符号をリンク名として示している。
受信トラヒックは、リンク名で識別される隣接通信装置から通信装置600が受信したデータパケットの送信トラヒックフィールドに設定されていた値を示す。
例えば、通信装置600がノードHである場合、通信装置600がノードFから受信したデータパケットD1Fには、「1」という値が設定されている。そして、この「1」という値は、通信装置600にとっての隣接通信装置であるノードFから、「1」という値で示される量のデータを通信装置600が受信することを示す。よって、通信装置600がノードHである場合、通信装置600がデータパケットD1Fを受信した時点におけるリンクテーブル611は、ノードFを識別するリンク名と対応づけて、「1」という値を受信トラヒックとして記憶する。
また、ハローパケット受信時刻は、リンク名で識別される隣接通信装置から通信装置600がハローパケットを受信した最新時刻を示す。ハローパケット受信時刻は、ネットワークの動的な変化に応じて変化し得る隣接通信装置を通信装置600が正しく認識することができるようにするために、利用される。
つまり、リンク管理部615は、例えばタイマIC202またはタイマ304から定期的に出力される割り込み信号にしたがって、定期的にエージング処理を行う。具体的には、リンク管理部615は、現在時刻とハローパケット受信時刻との差が所定の閾値よりも大きいエントリ(すなわち古い状態のまま更新されていないエントリ)をリンクテーブル611から削除する。上記閾値は、ハローパケットの送信間隔に基づいて決められることが好ましい。
なお、ネットワークの動的な変化の原因としては、例えば、ノードの追加、ノードの削除、ノードの移動、遮蔽物の出現、遮蔽物の消失、遮蔽物の移動、電波干渉源の出現、電波干渉源の消失、電波干渉源の移動、などがあり得る。
トラヒック認識時刻は、通信装置600が、リンク名で識別される隣接通信装置からデータパケットを受信し、データパケット内に設定された送信トラヒックの値を認識した時刻を示す。古すぎるデータパケットに埋め込まれた送信トラヒックの値を使ってボトルネックの予測または検出が行われると、予測または検出が不正確になる。そこで、そのような不正確な予測または検出を防止するために、トラヒック認識時刻が利用される。
つまり、リンク管理部615は、例えばタイマIC202またはタイマ304から定期的に出力される割り込み信号にしたがって、定期的に受信トラヒックに関する初期化を行う。具体的には、リンク管理部615は、現在時刻とトラヒック認識時刻との差が所定の閾値よりも大きいエントリにおける受信トラヒックの値を、「0」に初期化する。例えば各ノードが所定の間隔で定期的にデータパケットを送信する場合、上記閾値は、データパケットの送信間隔に基づいて決められることが好ましい。
さて、以上説明した4つのフィールドを含むリンクテーブル611の具体例として、図8には、(A1)〜(A4)の4つの例が示されている。
(A1)データパケットD4AをノードDが受信した直後の、ノードDのリンクテーブル611D−1。
(A2)データパケットD4DをノードEが受信した直後の、ノードEのリンクテーブル611E−1。
(A3)データパケットD5CをノードEが受信した直後の、ノードEのリンクテーブル611E−2。
(A4)データパケットD6BをノードEが受信した直後の、ノードEのリンクテーブル611E−3。
以下、図4と6も参照しながら、これらの4つのリンクテーブル611D−1および611E−1〜611E−3の内容を説明する。なお、図6ではハローパケットの送受信が省略されているが、ネットワーク400内のノードA〜IとゲートウェイGW1は、隣接する装置に自分の存在を通知するために、定期的にハローパケットを送信する。
ここでは説明の簡単化のために、ノードDは、データパケットD4Aを受信した時点で既に、隣接するノードA、BおよびEの各々からハローパケットを受信しているものとする。よって、リンクテーブル611D−1には、ノードA、BおよびEにそれぞれ対応する3つのエントリがある。
アドホックネットワークのルーティングアルゴリズムには様々なものがあるが、一般には、各ノードがまずハローパケットを用いて隣接ノードを認識し、その後、データパケットの送信経路が構築される。図6のタイミングチャートは、具体的には、例えば、送信経路が一旦構築されて安定した段階における1ラウンドを示す。よって、上記の「ノードDは、データパケットD4Aを受信した時点で既に、隣接するノードA、BおよびEの各々からハローパケットを受信している」という仮定は、現実的な仮定である。
さて、図8の例では、ノードDがノードA、BおよびEからそれぞれハローパケットを受信した最新時刻は、ハローパケット受信時刻として記憶されているとおり、それぞれPAD1、PBD1およびPED1である。そして、これら3つの時刻は、ノードDがデータパケットD4Aを受信した時刻QAD1よりも前である。
ノードAからデータパケットD4Aを受信したノードDは、データパケットD4Aに送信トラヒックとして設定されている「1」という値を、リンクテーブル611D−1においてノードAに対応する1つ目のエントリの受信トラヒックフィールドに設定する。また、ノードDは、ノードDがデータパケットD4Aを受信した時刻QAD1を、1つ目のエントリのトラヒック認識時刻フィールドに設定する。
なお、データパケットD4Aを受信した時刻QAD1までに、ノードDは、ノードBからもノードEからも、いかなるデータパケットも受信してはいない。または、時刻QAD1以前の経路が不安定な過渡的状況において、ノードBまたはEからノードDがデータパケットを受信したことがあるかもしれないが、時刻QAD1の時点では既に、上記の初期化処理によって、古い受信トラヒックの値は初期化されているとする。
よって、ノードBとEに対応する2つ目と3つ目のエントリにおける受信トラヒックの値は「0」である。また、2つ目と3つ目のエントリのトラヒック認識時刻は無効である。
さて、データパケットD4Aの受信を契機として、ノードDにおけるリンクテーブル611は、図8のリンクテーブル611D−1のとおりとなる。また、データパケットD4Aの受信を契機として、ノードDは、データパケットD4Dを送信する。すると、ノードEはデータパケットD4Dを受信する。
ここでは説明の簡単化のために、ノードEは、データパケットD4Dを受信した時点で既に、隣接するノードB、C、DおよびFの各々からハローパケットを受信しているものとする。よって、リンクテーブル611E−1には、ノードB、C、DおよびFにそれぞれ対応する4つのエントリがある。
図8の例では、ノードEがノードB、C、DおよびFからそれぞれハローパケットを受信した最新時刻は、ハローパケット受信時刻として記憶されているとおり、それぞれPBE1、PCE1、PDE1およびPFE1である。そして、これら4つの時刻は、ノードEがデータパケットD4Dを受信した時刻QDE1よりも前である。
そして、ノードDからデータパケットD4Dを受信したノードEは、データパケットD4Dに送信トラヒックとして設定されている「2」という値を、リンクテーブル611E−1においてノードDに対応する3つ目のエントリの受信トラヒックフィールドに設定する。また、ノードEは、ノードEがデータパケットD4Dを受信した時刻QDE1を、3つ目のエントリのトラヒック認識時刻フィールドに設定する。
なお、データパケットD4Dを受信した時刻QDE1までに、ノードEは、ノードBからもノードCからもノードFからも、いかなるデータパケットも受信してはいない。あるいは、経路が不安定な過渡的状況においてノードB、CまたはFからノードEがデータパケットを受信したことがあったとしても、時刻QDE1までには、古い受信トラヒックの値は既に初期化されているとする。
よって、ノードBとCとFに対応する1つ目と2つ目と4つ目のエントリにおける受信トラヒックの値は「0」である。また、1つ目と2つ目と4つ目のエントリのトラヒック認識時刻は無効な初期値のままである。
ところで、データパケットD4Dの受信後しばらく経つと、図6に示すとおり、ノードEは、ノードCからデータパケットD5Cを受信する。なお、ノードEは、データパケットD4Dの受信からデータパケットD5Cの受信までの間にも、ノードB、C、DおよびFの各々からハローパケットを受信することがある。
図8の例では、ノードEがノードB、C、DおよびFからそれぞれハローパケットを受信した最新時刻は、ハローパケット受信時刻として記憶されているとおり、それぞれPBE2、PCE2、PDE2およびPFE2である。そして、これら4つの時刻は、正確には、ノードEがデータパケットD5Cを受信した時刻QCE2から見た最新時刻なので、当然、時刻QCE2よりも前である。
そして、ノードCからデータパケットD5Cを受信したノードEは、データパケットD5Cに送信トラヒックとして設定されている「1」という値を、リンクテーブル611E−2においてノードCに対応する2つ目のエントリの受信トラヒックフィールドに設定する。また、ノードEは、ノードEがデータパケットD5Cを受信した時刻QCE2を、2つ目のエントリのトラヒック認識時刻フィールドに設定する。なお、他のエントリの受信トラヒックの値は変化しない。
したがって、データパケットD5Cを受信したノードEは、リンクテーブル611E−2の全エントリそれぞれの受信トラヒックの値と、ノードE自身が送信量記憶部613に保持する値との和を計算し、「4」という結果を得る。そして、ノードEは、計算した「4」という値をデータパケットD5Eに送信トラヒックとして設定する。
さて、データパケットD5Cの受信後しばらく経つと、図6に示すとおり、ノードEは、ノードBからデータパケットD6Bを受信する。なお、ノードEは、データパケットD5Cの受信からデータパケットD6Bの受信までの間にも、ノードB、C、DおよびFの各々からハローパケットを受信することがある。
図8の例では、ノードEがノードB、C、DおよびFからそれぞれハローパケットを受信した最新時刻は、ハローパケット受信時刻として記憶されているとおり、それぞれPBE3、PCE3、PDE3およびPFE3である。そして、これら4つの時刻は、正確には、ノードEがデータパケットD6Bを受信した時刻QBE3から見た最新時刻なので、当然、時刻QBE3よりも前である。
そして、ノードBからデータパケットD6Bを受信したノードEは、データパケットD6Bに送信トラヒックとして設定されている「1」という値を、リンクテーブル611E−3においてノードBに対応する1つ目のエントリの受信トラヒックフィールドに設定する。また、ノードEは、ノードEがデータパケットD6Bを受信した時刻QBE3を、1つ目のエントリのトラヒック認識時刻フィールドに設定する。なお、他のエントリの受信トラヒックの値は変化しない。
したがって、データパケットD6Bを受信したノードEは、リンクテーブル611E−3の全エントリそれぞれの受信トラヒックの値と、ノードE自身が送信量記憶部613に保持する値との和を計算し、「5」という結果を得る。そして、ノードEは、計算した「5」という値をデータパケットD6Eに送信トラヒックとして設定する。
図9は、第3実施形態のルーティングテーブル612の例を示す図である。ルーティングテーブル612に格納される情報は、ルーティング制御部610がGDからLDを決めることを可能にする情報であれば、どのような形式であってもよい。図9には、一例として、第3実施形態においてノードDが保持するルーティングテーブル612Dが図示されている。
ルーティングテーブル612Dの各エントリは、GDとなり得る各ノードに対応する。図9では、ゲートウェイGW1とノードBにそれぞれ対応する2つのエントリが例示されている。しかし、実施形態によっては、「ネットワーク内の特定の1つのノード(例えばゲートウェイGW1)以外がGDに指定されることがない」という方針にしたがってネットワークが運用されることもある。
ルーティングテーブル612Dの各エントリは、「GD」、「第1候補LD」の「ノードID」および「評価値」、「第2候補LD」の「ノードID」および「評価値」、ならびに「第3候補LD」の「ノードID」および「評価値」というフィールドを含む。つまり、各エントリは、当該エントリに対応するGDに対して選択可能なLDの候補を、最大で3つまで記憶することができる。また、LDの各候補は、ノードIDにより識別され、評価値によってLDとしての好ましさが評価される。
もちろん、実施形態によっては、ルーティングテーブル612は、GDとなり得る1つのノードに対応して、3つより多くの候補、または3つより少ない候補についての情報を記憶する形式でもよい。また、GDとなり得る1つのノードに対応するLDの候補の数は、任意に可変であってもよい。
ルーティングテーブル612の内容は、より詳しくは下記のとおりである。
すなわち、1つ目のエントリは、GDがゲートウェイGW1である場合に対応する。1つ目のエントリには、GDがゲートウェイGW1のときにノードDがLDとして選択可能なノードの候補として、ノードEとBの2つが登録されている。そして、ノードEのLDとしての好ましさは「0.1」という評価値によって表されており、ノードBのLDとしての好ましさは「0.5」という評価値によって表されている。
なお、以下では説明の便宜上、評価値は0以上1以下であり、「0」が最高の評価であり、「1」が最低の評価であるものとする。したがって、ルーティングテーブル612Dを有するノードDにとっては、GDがゲートウェイGW1のときのLDとしては、「0.5」という評価値のノードBよりは、「0.1」という評価値のノードEの方が、LDとしては好ましい。
そのため、ノードDは、ルーティングテーブル612Dにしたがって、GDがゲートウェイGW1のデータパケットを送信する際には、選択可能なLDの2つの候補の中から、より好ましいノードEをLD(つまり直接の送信先)として選択する。図4におけるノードDからノードEへの実線矢印は、以上のようなルーティングテーブル612Dの評価値にしたがった選択の結果を示す。
なお、ルーティングテーブル612では、最大で3つのLDの候補は、評価値によってソートされ、ソート結果に応じて、第1候補LDから順に登録されている。ルーティング制御部610は、評価値を変更する場合は、再度LDの候補をソートする。
また、図9の例では、ルーティングテーブル612Dが2つ目のエントリも有する。2つ目のエントリは、GDがノードBである場合に対応する。2つ目のエントリには、GDがノードBのときにノードDがLDとして選択可能なノードの候補として、ノードBとAとEの3つが登録されている。そして、ノードBのLDとしての好ましさは「0.0」という評価値によって表されており、ノードAのLDとしての好ましさは「0.2」という評価値によって表されており、ノードEのLDとしての好ましさは「0.7」という評価値によって表されている。
続いて、図10を参照して、第3実施形態で使われるパケットの例について説明する。第3実施形態で使われるパケット700は、アドホックヘッダ701を含み、タイプに応じてさらに適宜のペイロードを含む。ペイロードはオプショナルなので、タイプによっては、パケット700はペイロードを含まなくてもよい。また、パケット700は、誤り検出符号を含むトレイラをさらに含んでいてもよい。
アドホックヘッダ701は、具体的には、「LD」、「LS」、「ID」および「タイプ」という4つのフィールドを含む。フィールドの順序や長さは実施形態に応じて適宜変更されてよい。
アドホックヘッダ701において、LDフィールドとLSフィールドには、それぞれ、パケット700のLDとLSのノードを識別する情報が格納される。ノードを識別する情報は、例えば、ネットワーク内で一意のノードIDでもよいし、MACアドレスなどのアドレスでもよい。図示の便宜上、図10では、ノードを識別する情報として、図4での各ノードの参照符号を用いている。
アドホックヘッダ701において、IDフィールドには、パケット700を生成したノードが割り当てるIDが格納される。図示の便宜上、図10では4桁のシーケンス番号がIDとして例示されているが、もちろん、IDの桁数や形式は、実施形態に応じて任意である。
また、アドホックヘッダ701において、タイプフィールドには、パケット700のタイプを識別するための値が設定される。第3実施形態では、少なくとも、データパケット、ハローパケットおよびACKパケットという3種類のパケットが使われる。図10には、パケット700の具体例として、データパケット710、ハローパケット720およびACKパケット730が図示されている。図示の便宜上、図10では上記の3つのタイプを識別する値がそれぞれ「Data」、「Hello」および「ACK」と示されている。
もちろん、実施形態によっては他のタイプのパケットがさらに使われてもよい。逆に、有線ネットワークの場合には、ほぼ100%確実にパケット送信が成功するので、ACKパケット730は使われなくてもよい。また、タイプを識別する値の形式は実施形態に応じて任意であり、例えば数値によってタイプが識別されてもよい。
さて、データパケット710は、パケット700におけるペイロードとして、「GD」、「GS」、「長さ」、「送信トラヒック」および「ペイロード」という5つのフィールドを含む。
GDフィールドとGSフィールドには、それぞれ、データパケット710のGDとGSのノードを識別する情報が格納される。長さフィールドは、ペイロードフィールドの長さを示す。送信トラヒックフィールドは、図6に関して説明したとおりである。ペイロードフィールドには、データパケット710を定義するプロトコルよりも上位のレイヤで使われる任意のデータ(例えば、センサ207またはセンサ308から出力されたデータなど)が格納される。
データパケット710の具体例として、図10には、図6のデータパケットD4Dが例示されている。図6に示すとおり、データパケットD4Dは、ノードAが生成してゲートウェイGW1に宛てて送信したデータパケットD4Aの一部を、ノードDが書き換えたものであり、ノードDからノードEへ送信される。
よって、データパケットD4Dにおいて、LDはノードEであり、LSはノードDである。また、図10によれば、ノードAがデータパケットD4Aを生成したときにデータパケットD4Aに割り当てた「1234」というIDが、そのままデータパケットD4DにもIDとして設定される。そして、データパケットD4Dのタイプの値は、データパケットを示す「Data」である。
また、データパケットD4Dにおいて、GDはゲートウェイGW1であり、GSはノードAである。そして、図10の例では、ペイロードフィールドの長さは「200」である。また、図6にも示したように、データパケットD4Dにおける送信トラヒックフィールドの値は「2」である。
なお、長さフィールドと送信トラヒックフィールドの単位は異なっていてよい。例えば長さフィールドの単位が「バイト」で、送信トラヒックフィールドの単位が「キロバイト/5分間」でもよい。
ところで、第3実施形態のハローパケット720は、ペイロードを持たない。また、ハローパケット720は、1ホップの範囲内でブロードキャストされ、マルチホップ送信の対象外である。
例えば、ハローパケット720は、具体例にはハローパケット721のような内容を持つ。ハローパケット721は、ある時点でノードDから送信される。
上記のとおりハローパケット721はブロードキャストされる。よって、ハローパケット721のLDには、1ホップの範囲内でのブロードキャストを示すブロードキャストアドレス(図10では「BC」と表記)が設定される。
また、ハローパケット721はノードDから送信されるので、ハローパケット721のLSはノードDである。そして、ハローパケット721のIDには、ノードDが割り当てた「0987」という値が設定されている。また、ハローパケット721のタイプの値は、ハローパケットを示す「Hello」である。
図10にはさらに、ACKパケット730も示されている。ACKパケット730は、データパケット710に対する肯定応答(acknowledgment)である。ACKパケット730は、パケット700におけるペイロードとして、具体的には「GS」フィールドを含む。
データパケット710のIDの値は、データパケット710のGSのノードが割り当てるので、異なるノードが偶然同じIDを異なるデータパケット710に割り当てる場合がある。よって、マルチホップ送信されても変化しないデータパケット710の同一性(identity)は、正確には、データパケット710のGSとIDの値の組み合わせによって識別される。
よって、ACKパケット730は、どのデータパケット710に対する肯定応答なのかを示すため、IDだけでなく、GSフィールドを含む。
例えば、ノードDから受信したデータパケットD4Dに対応してノードEが送信するACKパケット731のGSとIDの値は、データパケットD4DにおけるGSとIDの値に等しい。また、ACKパケット731のLDは、データパケットD4DのLSに等しく、ノードDである。そして、ACKパケット731のLSは、データパケットD4DのLDに等しく、ノードEである。
さて、以下では、いくつかのフローチャートを参照して、図7の通信装置600の動作を説明する。以下に説明するように動作する通信装置600を図4のノードA〜Iとして用いることにより、図6を参照して説明したような、ボトルネックの検出または予測が可能となる。
図11は、いくつかの実施形態で共通のパケット受信処理のフローチャートである。以下では説明の便宜上、第3実施形態の通信装置600が図11の処理を行う場合を具体例として挙げるが、例えば図17とともに後述する第4実施形態の通信装置800も、図11と類似の処理を行う。
ステップS101で通信装置600は、パケット700を受信するまで待機する。そして、パケット700が受信されると、処理はステップS102に移行する。
ステップS102でタイプ判定部606は、受信されたパケット700のアドホックヘッダ701のタイプの値から、パケット700のタイプを判定する。
タイプ判定部606は、「受信されたパケット700はハローパケット720である」と判定した場合、ハローパケット720をハローパケット処理部614内のリンク管理部615に出力する。そして、処理はステップS103に移行する。
また、タイプ判定部606は、「受信されたパケット700はデータパケット710である」と判定した場合、データパケット710の受信を、通知受信部601とルーティング制御部610に通知する。そして、処理はステップS104に移行する。
あるいは、タイプ判定部606は、「受信されたパケット700はACKパケット730である」と判定した場合、ACKパケット730をルーティング制御部610に出力する。そして、処理はステップS106に移行する。
ステップS103でリンク管理部615は、ハローパケット受信処理を行う。ハローパケット受信処理の内容は、第3実施形態と第4実施形態で異なる。第3実施形態では、リンク管理部615は、ステップS103で具体的には以下のような処理を行う。
リンク管理部615は、まず、受信されたハローパケット720のLSと同じ値をリンク名として持つエントリをリンクテーブル611において検索する。そして、検索の結果エントリが見つかった場合、リンク管理部615は、見つかったエントリにおけるハローパケット受信時刻として、現在時刻を設定する。
逆に、エントリが見つからなかった場合、リンク管理部615は、リンクテーブル611に新規エントリを追加する。そして、リンク管理部615は、新規エントリにおけるリンク名として、受信されたハローパケット720のLSの値を設定する。また、リンク管理部615は、新規エントリにおける受信トラヒックの値を「0」に初期化する。さらに、リンク管理部615は、新規エントリにおけるハローパケット受信時刻として、現在時刻を設定し、新規エントリにおけるトラヒック認識時刻を無効な値に初期化する。
以上のようなハローパケット受信処理が終わると、通信装置600は再びステップS101でパケット700の受信を待つ。
また、ステップS104では、受信されたデータパケット710がバッファ部607に格納される。
そして、次のステップS105では、通信装置600がデータパケット受信処理を実行する。データパケット受信処理の内容は、第3実施形態と第4実施形態で異なる。第3実施形態では、通信装置600は、具体的には図12の処理を実行する。そして、データパケット受信処理が終わると、通信装置600は再びステップS101でパケット700の受信を待つ。
また、ステップS106でルーティング制御部610は、受信されたACKパケット730のLDの値が自ノードID(すなわち通信装置600自身のノードID)であるか否かを判断する。
受信されたACKパケット730のLDの値が、通信装置600自身のノードIDと異なる場合とは、通信装置600以外の他の通信装置が以前に送信したデータパケット710に対するACKパケット730が、通信装置600でも偶然受信可能だった場合である。この場合、ACKパケット730は無視して構わないので、処理はステップS101に戻る。
逆に、受信されたACKパケット730のLDの値が、通信装置600自身のノードIDである場合は、通信装置600が以前に送信したデータパケット710に対するACKパケット730が今回受信された場合である。よって、この場合、処理はステップS107に移行する。
ステップS107でデータパケット処理部608内のルーティング制御部610は、受信されたACKパケット730に対応する送信済みのデータパケット710を特定する。第3実施形態の通信装置600は、リトライに備えて送信済みのデータパケット710をバッファ部607に保持する。そこで、ステップS107でルーティング制御部610は、バッファ部607を検索して、受信されたACKパケット730のGSとIDに等しいGSとIDを有する送信済みのデータパケット710を特定する。
そして、次のステップS108でルーティング制御部610は、ステップS107で特定したデータパケット710をバッファ部607から削除する。
さらに、次のステップS109でルーティング制御部610は、ステップS107で特定したデータパケット710の転送または送信に関するプロセス(あるいはスレッド)を再開させる。詳しくは後述するが、他の通信装置から受信したデータパケット710を転送するプロセスと、上位層処理部609が生成した新たなデータパケット710を送信するプロセスは、いずれも、ACKパケット730の受信を待つステップを含む。そして、ACKパケット730の受信を待つ間、プロセスはスリープする。
よって、ステップS109でルーティング制御部610は、スリープさせていたプロセスを、ACKパケット730の受信を契機としてレジュームさせる。レジュームしたプロセスは、図11の処理とは並行して実行される。一方で、図11の処理は、ステップS101に戻る。
さて、図12は、第3実施形態において図11のステップS105で行われるデータパケット受信処理のフローチャートである。
ステップS201でルーティング制御部610は、通信装置600が受信したデータパケット710のLDの値が、自ノードID(すなわち通信装置600自身のノードID)であるか否かを判断する。そして、データパケット710のLDの値が、通信装置600自身のノードIDと異なれば、処理はステップS202に移行する。逆に、データパケット710のLDの値が、通信装置600自身のノードIDと同じであれば、処理はステップS202に移行する。
ステップS202でルーティング制御部610は、受信されたデータパケット710をバッファ部607から削除する。そして、データパケット受信処理は終了する。
例えば、図6の例で、ノードFが送信したデータパケットD1FのLDはノードHである。しかし、ノードFには、ノードHだけではなくノードE、GおよびIも隣接している。よって、ノードE、GおよびIにおいても、データパケットD1Fが受信可能なことがある。その場合、ノードE、GおよびIのルーティング制御部610は、ステップS202で、データパケットD1Fをバッファ部607から削除する。
他方、ステップS203でルーティング制御部610は、受信されたデータパケット710に対応する新たなACKパケット730を生成して送信する。なお、ACKパケット730の送信機能は、例えば802.15.4 PHY/MACチップ205により実現されてもよい。
例えば、図10のデータパケットD4DをノードEが受信した場合に、ノードEのルーティング制御部610は、ステップS203でACKパケット731を生成して送信する。
また、次のステップS204では、通知受信部601が、図13に詳細を示す受信トラヒック設定処理を行い、リンクテーブル611を更新する。例えば、ノードEの通知受信部601は、時刻QCE2に行うステップS204の処理によって、リンクテーブル611を、図8のリンクテーブル611E−1の状態からリンクテーブル611E−2の状態に更新する。
続いて、ステップS205では、図14に詳細を示すボトルネック検出処理が実行される。その結果、必要に応じてボトルネック通知が送信される。例えば、ノードHがデータパケットD5Fを受信した場合に、ステップS205でボトルネック通知が送信される。
その後、ステップS206でルーティング制御部610は、受信されたデータパケット710のGDの値が自ノードID(すなわち通信装置600自身のノードID)であるか否かを判断する。そして、データパケット710のGDの値が通信装置600自身のノードIDであれば、処理はステップS207に移行する。逆に、データパケット710のGDの値が通信装置600自身のノードIDと異なれば、処理はステップS208に移行する。
ステップS207では、上位層処理部609が、受信されたデータパケット710のペイロードを適宜処理する。ペイロードの処理が終わると、上位層処理部609は、データパケット710をバッファ部607から削除する。そして、図12のデータパケット受信処理も終了する。
例えば、上述のとおり、第3実施形態ではゲートウェイGW1もボトルネック通知部604以外は通信装置600と同様の構成要素を有する。ゲートウェイGW1の上位層処理部609は、GDとしてゲートウェイGW1が指定されたデータパケットのペイロードをステップS207で適宜処理する。
他方、ステップS208以降の処理は、データパケット710のGDの値が通信装置600自身のノードIDではない場合に実行される。具体的には、まず、ステップS208でルーティング制御部610が、転送の試行をやめる条件が成立するか否かを判定する。
ルーティング制御部610がしたがうルーティングアルゴリズムは、実施形態に応じて様々であってよい。よって、ルーティングアルゴリズムに応じて、上記の転送の試行をやめる条件も、様々であってよい。転送の試行をやめる条件の詳細は、ステップS210〜S215とも関連するので、後述する。
転送の試行をやめる条件が成立する場合、処理はステップS209に移行する。逆に、転送の試行をやめる条件が成立していない場合、処理はステップS210に移行する。
ステップS209でルーティング制御部610は、今回通信装置600が受信したデータパケット710をバッファ部607から削除する。そして、データパケット受信処理は終了する。つまり、「通信装置600が、他の通信装置がGDとして指定されているデータパケット710を受信したが、適切な転送先の隣接ノードを見つけ出してデータパケット710を転送することはできなかった」という場合、データパケット710が破棄される。
他方、ステップS210では、転送の試行をやめる条件が成立していない。よって、ルーティング制御部610は、転送の試行のため、まず、データパケット710の転送先として指定するLDを決める。そして、ルーティング制御部610は、決めたLDを送信量通知部602に通知する。
具体的には、ルーティング制御部610は、ルーティングテーブル612において、受信されたデータパケット710のGDの値と等しいGDの値を持つエントリを検索する。そして、ルーティング制御部610は、検索の結果見つかったエントリを参照し、当該エントリに含まれるLDの候補のうちの1つを選択する。LDの候補の選択の仕方は、ルーティング制御部610がしたがうルーティングアルゴリズムによって様々であってよく、詳細については後述する。
そして、次のステップS211で送信量通知部602は、ステップS205と同様の方法で送信トラヒックを再度計算する。または、送信量通知部602は、ステップS205で計算した結果を記憶しておき、記憶した結果を、ステップS211で送信トラヒックとして用いてもよい。
続いて、ステップS212で送信量通知部602は、ステップS211で得た送信トラヒック含むデータパケット710を、ルーティング制御部610が決めたLD宛に送信する。そして、送信量通知部602等を含むデータパケット処理部608は、ACKパケット730の受信を待つ。すなわち、データパケット処理部608は、「ACKタイムアウト時間」として予め決められた所定の時間が経過するか、または、送信したデータパケット710に対応するACKパケット730が受信されるまで、図12のプロセスをスリープさせる。なお、ACKタイムアウト時間の経過は、例えば、タイマIC202またはタイマ304により検出可能である。
例えば、通信装置600がノードEであり、図6と10に示すデータパケットD4Dの受信を契機として図12のデータパケット受信処理が実行される場合を例にステップS212の詳細を説明すれば、以下のとおりである。
図6のとおり、ステップS210で決められたLDはノードFである。また、図6と、図8のリンクテーブル611E−1から明らかなように、ステップS211で得られる送信トラヒックの値は「3」である。
よって、ステップS212で送信量通知部602は、バッファ部607に格納されている図10のデータパケットD4Dにおいて、LD、LSおよび送信トラヒックの値を、それぞれ、ノードFのノードID、ノードE自身のノードIDおよび「3」に書き換える。そして、送信量通知部602は、以上の書き換えによって得られたデータパケットD4Eを送信する。送信後、データパケット処理部608は、データパケットD4Eに対するACKパケット730の受信を待つ。
ステップS212の次のステップS213は、一旦スリープした図12のプロセスが、ACKタイムアウト時間の経過またはACKパケット730の受信によりレジュームすると、実行される。ステップS213においてルーティング制御部610は、ACKタイムアウト時間が経過する前にACKパケット730が受信されたのか否かを判定する。
ACKタイムアウト時間が経過する前にACKパケット730が受信された場合(つまり、ACKパケット730の受信を契機にプロセスがレジュームした場合)、ステップS212でのデータパケット710の転送が成功したので、処理はステップS214に移行する。
逆に、ACKタイムアウト時間が経過するまでにACKパケット730が受信されなかった場合(つまり、ACKタイムアウト時間の経過を契機にプロセスがレジュームした場合)、ステップS212でのデータパケット710の転送は失敗したので、処理はステップS215に移行する。
ステップS214でルーティング制御部610は、データパケット710の転送の成功を反映させるために、必要に応じてルーティングテーブル612を更新する。そして、データパケット受信処理が終了する。
例えば、ステップS214でルーティング制御部610は、ステップS210で参照したルーティングテーブル612のエントリにおいて、ステップS210で選択したLDの評価値を小さくしてもよい(つまり評価を上げてもよい)。評価値をどの程度小さくするかは、実施形態に応じて任意である。
ステップS215でルーティング制御部610は、データパケット710の転送の失敗を反映させるために、必要に応じてルーティングテーブル612を更新する。そして、処理はステップS208に戻る。その結果、通信装置600がデータパケット710の転送に成功するか、または、「適切な転送先が見つからない」と判明するまで、転送の試行が繰り返される。
例えば、ステップS215でルーティング制御部610は、ステップS210で参照したルーティングテーブル612のエントリにおいて、ステップS210で選択したLDの評価値を大きくしてもよい(つまり評価を下げてもよい)。評価値をどの程度大きくするかは、実施形態に応じて任意である。
ところで、詳細の説明を省略したステップS208とS210は、ステップS215とも関連する。そこで、ステップS208、S210およびS215の関連について、以下に例を示す。
上記のとおり、転送の試行をやめる条件が成立するまで、1回または複数回、転送の試行が行われる。例えば、あるルーティングアルゴリズムによれば、ルーティング制御部610は、1回目のステップS210においては、最も評価の高い(すなわち最も評価値の小さい)LDの候補を選択してもよい。
そして、ACKタイムアウト時間の経過前にACKパケット730が受信されなかった場合、ステップS215でルーティング制御部610は評価値を更新する。すると、2回目以降のステップS210においては、ルーティング制御部610は、単純に最も評価の高いLDの候補を選択してもよいし、あるいは、以前の繰り返しにおけるステップS210で未選択のものの中で最も評価の高いLDの候補を選択してもよい。
また、例えば、評価値の範囲が0以上1以下と決められており、1が最も低い評価を示すものとする。この場合、ルーティング制御部610は、ステップS208において、例えば以下の条件(B1)と(B2)の少なくとも一方が成立する場合に、転送の試行をやめる条件が成立している、と判定してもよい。
(B1)1未満の評価値を持つLDの候補が存在しない。
(B2)1未満の評価値を持つLDの候補のすべてが、既に以前の繰り返しにおけるステップS210で選択済みである。
また、図12では説明を省略したが、ある種のルーティングアルゴリズムは、ネットワーク内のノードが、実際のデータパケット710の送信時に試行錯誤を行って自律分散的に適切な経路を発見することができるようにするための仕組みを提供する。具体的には、一旦送信量通知部602が送信したデータパケット710が、ネットワーク内をループして通信装置600に戻ってきたときに、ルーティング制御部610は、ループを検出してもよい。
例えば、初期状態において、図4の各ノードは、GDとしてゲートウェイGW1が指定されたデータパケット710について、LDとしてどの隣接ノードを選択するのが適切なのか、ということを認識していない。よって、例えば、以下のような状況も起こり得る。
ノードDが、GDとしてゲートウェイGW1を指定したデータパケット710を送信したとする。その際、ノードDは、偶然、ノードEをLDとして選択したとする。すると、ノードEは、データパケット710を受信する。ここで、ノードEは、偶然、LDとしてノードBを選択したとする。すると、データパケット710は、例えば、ノードBとCを経由して、ノードEに戻ってくることがある。
以上のような状況において、ノードEは、データパケット710のGSとIDの組み合わせから、「以前ノードBに送信したデータパケット710がループしてノードCから戻ってきた」と認識することができる。つまり、ノードEは、転送済みの各データパケット710について、GSとIDを記憶しておくことにより、ループを検出することができる。以上のようなループ検出の結果に基づいて、ノードEは、ノードBがLDとして不適切なことを学習し、ノードBの評価値を最大値(つまり最悪の評価)に変更してもよい。
また、ノードEは、以上のようにしてループを検出すると、次に、別のLDの候補を転送先として選ぼうとする。その際に、ノードEは、ステップS210での選択における優先度が最下位の候補として、最初にデータパケット710を送信してきたLS(つまりノードD)を、ルーティングテーブル612に記録されているか否かによらず、考慮に入れる。
ここで、便宜上、あるGSとIDの組み合わせで識別されるデータパケット710が最初に受信されたときのLSを「オリジナルLS」という。上記の例では、ノードEにとってのオリジナルLSは、ノードDである。
ノードEは、転送済みの各データパケット710について、GSとIDだけでなくオリジナルLSもあわせて記憶することにより、上記のようにノードDの優先度が最下位であることを認識することができる。つまり、オリジナルLSは、たとえステップS210でLDとして選ばれることがあるとしても、最後の繰り返しのときにしか選ばれない。
例えば、ノードEは、上記のループ検出の結果からノードBがLDとして不適切であることを学習する。そして、ノードEは、オリジナルLSであるノードD以外の隣接ノード(つまりノードCとF)の中から、次のLDの候補を選択する。例えば、ノードEは、次にステップS210でノードFをLDとして選択してもよい。
その結果、データパケット710の転送が成功すれば、ノードEは、ノードFがLDとして適切であるということを学習する。具体的には、ノードEのルーティング制御部610は、学習結果をルーティングテーブル612の評価値に反映する。
なお、オリジナルLSに関する上記の議論を踏まえると、ステップS208でルーティング制御部610は、「((C1)または(C2))かつ((C3)または(C4))」という条件を「転送の試行をやめる条件」として用いてもよい。
(C1)ルーティングテーブル612において、オリジナルLSとは異なり、かつ1未満の評価値を持つLDの候補が存在しない。
(C2)ルーティングテーブル612において、オリジナルLSとは異なり、かつ1未満の評価値を持つLDの候補のすべてが、既に以前の繰り返しにおけるステップS210で選択済みである。
(C3)最後のLDの候補として、オリジナルLSも、前回の繰り返しのステップS210で選択済みである。
(C4)データパケット710のGSが通信装置600自身である(すなわちオリジナルLSが定義されない)。
以上、図12を参照して説明したように、第3実施形態では、通常のデータパケット710の受信を契機とする、転送等の一連の処理の中に、ボトルネックの予測または検出のための処理が組み入れられている。また、ボトルネックの予測または検出に使われる情報も、専用の制御パケットではなく、通常のデータパケット710の中に含まれる。よって、ボトルネックの予測または検出のためにネットワークに生じる負荷は小さい。
さて、図13は、第3実施形態において図12のステップS204で行われる受信トラヒック設定処理のフローチャートである。
ステップS301で通知受信部601は、受信されたデータパケット710から、送信トラヒックの値を抽出する。
そして、次のステップS302で通知受信部601は、リンクテーブル611において、リンク名が、受信されたデータパケット710のLSと等しいエントリを検索する。例えば、図10のデータパケットD4Dを受信したノードEの通知受信部601は、リンク名がノードDのエントリを検索する。
続いて、ステップS303で通知受信部601は、ステップS302の検索の結果、エントリが見つかったか否かを判定する。エントリが見つかった場合、処理はステップS304に移行する。逆に、エントリが見つからなかった場合、処理はステップS306に移行する。なお、通常はエントリが見つかる。エントリが見つからないのは、通信装置600が、新たな隣接ノードから、ハローパケット720を受信する前にデータパケット710を受信するような、例外的な場合である。
ステップS304で通知受信部601は、ステップS301で抽出した値を、ステップS302の検索の結果見つかったエントリの受信トラヒックとして設定する。そして、次のステップS305で通知受信部601は、ステップS302の検索の結果見つかったエントリのトラヒック認識時刻として、現在時刻を設定する。すると、受信トラヒック設定処理も終了する。なお、ステップS304とS305の順序は逆でもよい。
例えば、図10のデータパケットD4Dを受信したノードEの通知受信部601は、リンクテーブル611内のリンク名がノードDのエントリにおいて、受信トラヒックに「2」を設定し、トラヒック認識時刻に現在時刻QDE1を設定する。その結果、ノードEのリンクテーブル611は、図8のリンクテーブル611E−1のとおりとなる。
他方、ステップS306で通知受信部601は、リンクテーブル611に新規エントリを追加する。
そして、次のステップS307で通知受信部601は、受信したデータパケット710のLSの値を、ステップS306で追加した新規エントリのリンク名として設定する。また、次のステップS308で通知受信部601は、ステップS301で抽出した値を、ステップS306で追加した新規エントリの受信トラヒックとして設定する。
さらに、次のステップS309で通知受信部601は、ステップS306で追加した新規エントリのトラヒック認識時刻として、現在時刻を設定する。すると、受信トラヒック設定処理も終了する。なお、ステップS307〜S309の順序は任意に入れ替え可能である。
さて、図14は、第3実施形態において図12のステップS205で行われるボトルネック検出処理のフローチャートである。
ステップS401で送信量通知部602は、送信トラヒックの量を示す変数OutboundTrafficに、送信量記憶部613に記憶されている値を代入する。
そして、次のステップS402で送信量通知部602は、リンクテーブル611の1つ目のエントリに注目する。続いて、処理はステップS403に移行する。
ステップS403で送信量通知部602は、変数OutboundTrafficの値と、リンクテーブル611において注目しているエントリの受信トラヒックの値との和を計算し、計算結果を変数OutboundTrafficに代入する。
そして、次のステップS404で送信量通知部602は、リンクテーブル611のすべてのエントリに注目し終えたか否かを判断する。送信量通知部602がまだ注目していないエントリが残っていれば、処理はステップS405に移行する。逆に、送信量通知部602がすべてのエントリに既に注目済みならば、処理はステップS406に移行する。
ステップS405で送信量通知部602は、リンクテーブル611の次のエントリに注目する。そして、処理はステップS403に戻る。
他方、ステップS406で送信量通知部602は、変数OutboundTrafficの値をボトルネック判定部603に通知する。すると、ボトルネック判定部603は、通知された値を、所定の閾値Toutと比較する。
変数OutboundTrafficの値が閾値Toutよりも大きいとき、ボトルネック判定部603は「通信装置600はボトルネックである」と判定し、判定結果をボトルネック通知部604に通知する。そして、処理はステップS407に移行する。
逆に、変数OutboundTrafficの値が閾値Tout以下のとき、ボトルネック判定部603は「通信装置600はボトルネックではない」と判定する。そして、ボトルネック検出処理は終了する。
ステップS407では、ボトルネック判定部603から通知を受けたボトルネック通知部604が、警報(すなわちボトルネック通知)を送信する。
上述したように、ボトルネック通知は、通常のデータパケット710と同じプロトコルにしたがって送信されてもよいし、別のプロトコルにしたがって送信されてもよい。また、ボトルネック通知は、特定の1つの宛先(例えばゲートウェイGW1)をGDとするマルチホップ送信の対象であってもよいし、ネットワーク400全体にフラッディングされてもよい。
例えば、送信量通知部602と存在通知部616はIEEE 802.15.4規格にしたがって、それぞれデータパケット710とハローパケット720を送信してもよい。他方で、ボトルネック通知部604は、IEEE 802.11b規格にしたがってボトルネック通知を送信してもよい。
その場合、リンクテーブル611とルーティングテーブル612では、IEEE 802.15.4規格で通信可能な範囲にあるノード同士が隣接ノードとして管理される。他方で、ボトルネック通知部604は、IEEE 802.11b規格で通信可能な範囲にあるノード同士を隣接ノードとして管理する不図示のテーブルを有してもよい。
また、ボトルネック通知が特定の1つの宛先に送信される場合、ボトルネック通知は、例えば、図10のアドホックヘッダ701に加えて、GDとGSのフィールドを有する形式のパケット700であってもよい。この場合、ボトルネック通知部604は、ボトルネック通知の宛先(例えばゲートウェイGW1)のノードIDをGDとして設定し、通信装置600自身のノードIDをGSとして設定する。また、ネットワーク内の各ノード(つまり通信装置600)は、ボトルネック通知を、通常のデータパケット710と類似の方法でルーティングする。
あるいは、ネットワークの用途によっては、送信規制の要否を各ノードが自律的に判断するためにボトルネック通知が使われてもよい。そのために、ボトルネック通知はネットワーク全体にブロードキャストされ、フラッディングされてもよい。
例えば、ボトルネック通知用のパケットのタイプが次のように定義されていてもよい。ボトルネック通知は、例えば、図10のアドホックヘッダ701に加えて、GDとGSのフィールドを有する。そして、GDとLDがブロードキャスト用の特殊な値に設定され、GSがボトルネックのノードを示す。
すると、ボトルネック通知用のパケットを受信した通信装置600では、タイプ判定部606が「受信されたパケットは、ボトルネック通知用のパケットである」と判定した場合、以下のような処理を行う。
すなわち、通信装置600は、ボトルネック通知用のパケットを受信すると、パケットのIDとGSのペアを一定の時間、記憶し続ける。そして、通信装置600は、記憶しているIDとGSのペアの中に、受信したパケットのIDとGSのペアと同じIDとGSのペアがあるか否かを判定する。
受信したパケットのIDとGSのペアと同じIDとGSのペアが見つかった場合、通信装置600は、「過去に受信したことのあるボトルネック通知用のパケットと同じパケットを再度受信した」と判定し、受信したパケットを破棄する。逆に、受信したパケットのIDとGSのペアと同じIDとGSのペアが見つからなかった場合、通信装置600は、受信したボトルネック通知用のパケットのLSのみを書き換えて、ボトルネック通知用のパケットをブロードキャストする。
以上のような処理により、ボトルネック通知用のパケットはネットワーク全体にブロードキャストされる。よって、ネットワーク内の各ノード(つまり通信装置600)は、パケットのGSのノードにおいてボトルネックが検出されたことを認識することができる。通信装置600は、上記認識に基づいて、例えば、「通信装置600自身が生成して送信するデータの量を減らす」などの措置をとってもよい。
ところで、以上図11〜14を参照して説明した処理は、何らかのタイプのパケット700の受信を契機として通信装置600が行う処理である。しかし、通信装置600は、パケット700の受信とは独立したいくつかの処理も行う。
例えば、通信装置600の存在通知部616は、定期的にハローパケット720を送信する。例えば、タイマIC202またはタイマ304から、所定の間隔で定期的に出力される割り込み信号を契機として、存在通知部616は、ハローパケット720を生成し、送信する。
また、通信装置600は、定期的または不定期に、GSとしてデータパケット710を送信する。具体的には、通信装置600は図15の処理を行う。図15は、第3実施形態におけるデータパケット送信処理のフローチャートである。例えば、ノードFは、図15の処理により、図6のデータパケットD1Fを生成して送信する。
まず、ステップS501で、上位層処理部609は、GDの値とペイロードを取得する。
GDの値は、固定的に、ネットワーク内の特定のノード(例えばゲートウェイGW1)のノードIDに決められていてもよい。あるいは、上位層処理部609がGDの値を動的に決めてもよい。
また、ペイロードの内容は任意である。上位層処理部609は、例えば、センサ207またはセンサ308からの出力をペイロードとして取得してもよい。
次に、ステップS502で上位層処理部609は、ペイロードの長さを求める。
そして、ステップS503で上位層処理部609は、新たなデータパケット710用にバッファ部607の領域を割り当てる。上位層処理部609は、ステップS502で求めた長さに基づいて、割り当てる領域の大きさを決めることができる。そして、上位層処理部609は、割り当てた領域にペイロードを出力する。
続いて、ステップS504で上位層処理部609は、データパケット710の長さフィールドとGDフィールドに、それぞれ、ステップS502とS501で得た値を設定する。
また、次のステップS505で上位層処理部609は、データパケット710のGSフィールドとLSフィールドに、自ノードID(つまり通信装置600自身のノードID)を設定する。
さらに、ステップS506で上位層処理部609は、新たなIDを生成する。そして、上位層処理部609は、データパケット710のIDフィールドに、生成した新たなIDの値を設定する。
そして、ステップS507で上位層処理部609は、データパケットを示す値(図10の例では「Data」)をデータパケット710のタイプとして設定する。
また、ステップS508で上位層処理部609は、ルーティング制御部610にデータパケット710の送信を依頼する。すると、ルーティング制御部610は送信量通知部602に送信トラヒックの計算を依頼し、送信量通知部602は、図14のステップS401〜S405と同様にして、送信トラヒックを計算する。そして、送信量通知部602は、計算した値を、データパケット710の送信トラヒックとして設定する。
以上のステップS503〜S508により、バッファ部607上には、LD以外のフィールドが適宜設定された新たなデータパケット710が完成する。なお、ステップS504〜S508の実行順は適宜入れ替えられてもよい。
さて、ステップS508に続いて、ステップS509では、ルーティング制御部610が、送信の試行をやめる条件が成立するか否かを判定する。そして、送信の試行をやめる条件が成立する場合、処理はステップS510に移行する。逆に、送信の試行をやめる条件が成立していない場合、処理はステップS512に移行する。なお、送信の試行をやめる条件の詳細については後述する。
ステップS510では、送信の試行をやめる条件が成立している。よって、ルーティング制御部610は、データパケット710をバッファ部607から削除する。
そして、次のステップS511でルーティング制御部610は、上位層処理部609に対して送信失敗を報告する。すると、上位層処理部609は適宜のエラー処理を行う。そして、データパケット送信処理も終了する。
他方、ステップS512では、送信の試行をやめる条件が成立していない。よって、ルーティング制御部610は、送信の試行のため、まず、データパケット710の送信先として指定するLDを決める。そして、ルーティング制御部610は、決めたLDの値をバッファ部607のデータパケット710に設定する。
例えば、ルーティング制御部610は、ルーティングテーブル612において、データパケット710に設定されたGDの値と同じGDの値を持つエントリを検索する。そして、ルーティング制御部610は、検索の結果見つかったエントリを参照し、当該エントリに含まれるLDの候補のうちの1つを選択する。LDの候補の選択の仕方は、ルーティング制御部610がしたがうルーティングアルゴリズムによって様々であってよく、詳細については後述する。
そして、次のステップS513で送信量通知部602は、送信トラヒックを含むデータパケット710を、ステップS512でルーティング制御部610が決めたLD宛に送信する。そして、送信量通知部602等を含むデータパケット処理部608は、ACKパケット730の受信を待つ。すなわち、データパケット処理部608は、ACKタイムアウト時間が経過するか、または、送信したデータパケット710に対応するACKパケット730が受信されるまで、図15のプロセスをスリープさせる。
ステップS513の次のステップS514は、一旦スリープした図15のプロセスが、ACKタイムアウト時間の経過またはACKパケット730の受信によりレジュームすると、実行される。ステップS514においてルーティング制御部610は、ACKタイムアウト時間が経過する前にACKパケット730が受信されたのか否かを判定する。
ACKタイムアウト時間が経過する前にACKパケット730が受信された場合(つまり、ACKパケット730の受信を契機にプロセスがレジュームした場合)、ステップS513でのデータパケット710の送信が成功したので、処理はステップS515に移行する。
逆に、ACKタイムアウト時間が経過するまでにACKパケット730が受信されなかった場合(つまり、ACKタイムアウト時間の経過を契機にプロセスがレジュームした場合)、ステップS513でのデータパケット710の送信は失敗したので、処理はステップS516に移行する。
ステップS515でルーティング制御部610は、データパケット710の送信の成功を反映させるために、必要に応じてーティングテーブル612を更新する。そして、データパケット送信処理が終了する。例えば、図12のステップS214と同様に、ルーティング制御部610は、ステップS512で選択したLDの評価値を小さくしてもよい(つまり評価を上げてもよい)。
他方、ステップS516でルーティング制御部610は、データパケット710の送信の失敗を反映させるために、必要に応じてルーティングテーブル612を更新する。そして、処理はステップS509に戻る。例えば、図12のステップS215と同様に、ルーティング制御部610は、ステップS512で選択したLDの評価値を大きくしてもよい(つまり評価を下げてもよい)。
ところで、以上説明したとおり、送信の試行をやめる条件が成立するまで、1回または複数回、送信の試行が行われる。例えば、あるルーティングアルゴリズムによれば、ルーティング制御部610は、1回目のステップS512においては、最も評価の高い(すなわち最も評価値の小さい)LDの候補を選択してもよい。
そして、ACKタイムアウト時間の経過前にACKパケット730が受信されなかった場合、ステップS516でルーティング制御部610は評価値を更新する。すると、2回目以降のステップS512においては、ルーティング制御部610は、単純に最も評価の高いLDの候補を選択してもよいし、あるいは、以前の繰り返しにおけるステップS512で未選択のものの中で最も評価の高いLDの候補を選択してもよい。
また、例えば、評価値の範囲が0以上1以下と決められており、1が最も低い評価を示すものとする。この場合、ルーティング制御部610は、ステップS509において、下記の(D1)または(D2)が成立する場合に、送信の試行をやめる条件が成立している、と判定してもよい。
(D1)データパケット710に設定されたGDの値と同じGDの値を有するルーティングテーブル612のエントリにおいて、1未満の評価値を持つLDの候補が存在しない。
(D2)上記(D1)のエントリにおいて、1未満の評価値を持つLDの候補のすべてが、既に以前の繰り返しにおけるステップS512で選択済みである。
また、図12に関して説明したのと同様のループ検出が行われてもよい。つまり、通信装置600は、ステップS506で生成したIDを、通信装置600自身のノードID(つまりGSを示すノードID)と対応づけて記憶し、記憶したIDとGSの値をループ検出用に用いてもよい。
続いて、以上説明した第3実施形態とは異なり、送信トラヒックがハローパケットに埋め込まれる第4実施形態について、図16〜21を参照して説明する。
図16は、第4実施形態におけるハローパケットの送受信に関するタイミングチャートである。図16のタイミングチャートは、図4のノードA〜Iの各々が、図17とともに後述する第4実施形態の通信装置800である場合の、ハローパケットの送受信を表す。
なお、ゲートウェイGW1は、必ずしもノードA〜Iと同様に構成されている必要はないが、少なくともハローパケットの送信に関しては、ゲートウェイGW1もノードA〜Iと同様の動作を行う。また、以下では説明の簡単化のため、ノードA〜IおよびゲートウェイGW1が、いずれも同じ間隔ΔHで定期的にハローパケットを送信するものとする。
図16では、各ハローパケットは、3文字または4文字の参照符号で識別される。1文字目はハローパケットを示す「H」である。最後の文字は、同じノードから送信される複数のハローパケットを区別するための数字である。真ん中の1文字または2文字は、ハローパケットを送信するノードを示す。
また、ネットワーク400内でのデータパケットの最終的な送信先は、第3実施形態と同様に、ゲートウェイGW1であるとする。さらに、ノードA〜Iの各々がボトルネックに関する判定結果を通知する先も、ゲートウェイGW1であるとする。
そして、詳しくは図19とともに後述するが、第4実施形態では、データパケットではなくハローパケットが「送信トラヒック」フィールドを含む。さらに、ハローパケットは、「当該ハローパケットの送信元のノードが、GDとしてゲートウェイGW1が指定されたデータパケットを送信するときに、どの隣接ノードをLDとして選択するか」を示す「選択LD」というフィールドも含む。
そして、ハローパケットは、1ホップの範囲内でブロードキャストされる。図16では、同じ1点から出る複数本の矢印により、ハローパケットのブロードキャストを示している。また、矢印に重ねて描かれた矩形内の数値が、当該矢印の表すハローパケット中の送信トラヒックの値である。
なお、以下では説明の便宜上、図4に関する説明と同様に、ノードA〜Iの各々が所定期間に生成してゲートウェイGW1宛に送信するデータの量の期待値を「1」とする。また、ボトルネックの判定用の閾値を「5」とする。「期待値」の意味については第3実施形態と同様である。
さらに、図16に関する以下の説明では、「既に図4に実線矢印で示す経路が構築されている」と仮定する。この仮定が意味するのは、「経路が構築されて安定する前に送受信されるハローパケットに含まれる送信トラヒックの値に基づくボトルネックの予測または検出の結果は、構築中の過渡的な経路を反映した暫定的な結果に過ぎない」ということである。つまり、この仮定について補足説明をすれば、以下のとおりである。
アドホックネットワークにおいては、一般には、複数のノードがそれぞれハローパケットを送信することで自らの存在を通知し、その結果として、各ノードは隣接する他のノードの存在を認識する。そして、データパケットがルーティングされる経路は、経路構築アルゴリズムにもよるが、隣接ノードの認識の後に構築されることが多い。
もちろん、ハローパケットは、経路の構築後も引き続いて繰り返し送信される。なぜなら、ノード同士の隣接関係は変化し得るからである。そして、経路もずっと固定されるわけではなく、ノード同士の隣接関係の変化に応じて、適宜再構築され得る。
このように、経路が安定する前(つまり経路の構築中)にも、経路が安定した後にも、ハローパケットは繰り返し送信される。そして、経路が安定する前に送信されるハローパケットにも送信トラヒックが含まれていてよい。
しかし、経路が安定する前に送受信されるハローパケットに含まれる送信トラヒックの値に基づくボトルネックの予測または検出の結果は、構築中の過渡的な経路を反映した暫定的な結果に過ぎない。第4実施形態では、経路が構築され安定した後、さらにある程度の回数のハローパケットの送信が行われると、安定した経路を反映した、適切な、ボトルネックの予測または検出の結果が得られる。
よって、図16に関する以下の説明では、上記のとおり「既に図4に実線矢印で示す経路が構築されている」と仮定する。そして、この仮定のもとで、「経路の構築後に、上記のようにある程度の回数のハローパケットの送信が行われると、ボトルネックの予測または検出の、適切な結果が得られる」ということを説明する。
なお、経路が安定するまでに送信されたハローパケットに含まれる送信トラヒックの影響が、経路の構築後に打ち消されるまでには、何回か余計にハローパケットの送信が必要になる場合がある。よって、上記影響の打ち消しにかかる時間の短縮を図るため、各ノードは、経路が安定したと見なせるようになるまでは、ハローパケットに送信トラヒックとして「0」を設定してもよい。
例えば、各ノードは、最初に電源が入れられてから、ゲートウェイGW1宛のデータパケットの送信時にLDとして選択したノードの履歴を監視してもよい。経路が安定するまでは、各ノードが試行錯誤的にLDを選択するので、ループが発生することもあるし、LDとして選択される隣接ノードがデータパケットの送信のたびに変わることもあり得る。しかし、経路が安定すれば、同じ隣接ノードが連続してLDとして選択されるようになる。
よって、各ノードは、例えば、最初に電源が入れられてから、同じGDに対して初めて所定の回数連続して同じ隣接ノードをLDとして選択したら、「経路が安定した」と見なしてもよい。そして、各ノードは、経路が安定したと見なせるようになるまでは、ハローパケットに送信トラヒックとして「0」を設定してもよい。
以下では説明の簡略化のため、経路が安定するまでに送信されるハローパケットには「0」という送信トラヒックが設定されているものと仮定する。そして、この仮定にしたがって、以下では、経路が安定するまでに送信されるハローパケットに含まれる送信トラヒックの影響の打ち消しについては説明を省略する。
さて、図16には、一例として、経路が安定した後の、下記のような処理シーケンスが例示されている。
まず、ノードAがハローパケットHA1を送信する。ハローパケットHA1に設定される送信トラヒックの値は「1」である。なぜなら、ハローパケットHA1の送信の前には、ノードAは、「0」以外の送信トラヒックが設定されたいかなるハローパケットも、他のノードから受信してはいないからである。そのため、ハローパケットHA1には、ノードAが所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」が、送信トラヒックとして設定される。
また、図4の実線矢印に示すように、ノードAは、GDとしてゲートウェイGW1が指定されたデータパケットを送信するときに、LDとしてノードDを選択する。よって、ハローパケットHA1には、選択LDとしてノードDが指定される。
ここで、図4に示すように、ノードAにはノードBとDが隣接する。よって、ハローパケットHA1はノードBとDにおいて受信される。
ノードBは、ハローパケットHA1に指定された選択LDではないので、ハローパケットHA1の送信トラヒックの値を無視する。他方、ノードDは、選択LDなので、ハローパケットHA1のLSであるノードAと対応づけて、ハローパケットHA1に設定された送信トラヒックの「1」という値を記憶する。
さて、図16の例では、偶然にもハローパケットHA1の送信とほぼ同時に、ゲートウェイGW1が、ハローパケットHGW1を送信する。ハローパケットHGW1において、送信トラヒックの値は「0」であり、選択LDの値は、ノードIDとしては無効な特殊な値である。なぜなら、ゲートウェイGW1自身は、他のノードにデータパケットを送信しないからである。
また、図4に示すように、ゲートウェイGW1にはノードG、HおよびIが隣接する。よって、ハローパケットHGW1はノードG、HおよびIにおいて受信される。ところが、ノードG、HおよびIのいずれも、選択LDではないので、ハローパケットHGW1の送信トラヒックの値を無視する。
そして、図16の例では、次にノードDがハローパケットHD1を送信する。ハローパケットHD1に設定される送信トラヒックの値は「2」である。なぜなら、ノードDは既にハローパケットHA1を受信しており、ノードAと対応づけて「1」という値を記憶しているからである。よって、ノードDは、ノードAと対応づけて記憶している「1」という値と、ノードD自身が所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」との和である「2」を、ハローパケットHD1に送信トラヒックとして設定する。
また、図4の実線矢印に示すように、ノードDは、GDとしてゲートウェイGW1が指定されたデータパケットを送信するときに、LDとしてノードEを選択する。よって、ハローパケットHD1には、選択LDとしてノードEが指定される。
ここで、図4に示すように、ノードDにはノードA、BおよびEが隣接する。よって、ハローパケットHD1はノードA、BおよびEにおいて受信される。
しかし、ノードAとBは、いずれも、ハローパケットHD1に指定された選択LDではないので、ハローパケットHD1の送信トラヒックの値を無視する。他方、ノードEは、選択LDなので、ハローパケットHD1のLSであるノードDと対応づけて、ハローパケットHD1に設定された送信トラヒックの「2」という値を記憶する。
さらに、図16の例では、偶然にもハローパケットHD1とほぼ同時に、ノードGがハローパケットHG1を送信する。ハローパケットHG1に設定される送信トラヒックの値は「1」である。なぜなら、ハローパケットHG1の送信の前には、ノードGは、「0」以外の送信トラヒックが設定されたいかなるハローパケットも、他のノードから受信してはいないからである。そのため、ハローパケットHG1には、ノードGが所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」が、送信トラヒックとして設定される。
また、図4の実線矢印に示すように、ノードGは、GDとしてゲートウェイGW1が指定されたデータパケットを送信するときに、LDとしてゲートウェイGW1を選択する。よって、ハローパケットHG1には、選択LDとしてゲートウェイGW1が指定される。
ここで、図4に示すように、ノードGには、ノードFおよびH、ならびにゲートウェイGW1が隣接する。よって、ハローパケットHG1は、ノードFおよびH、ならびにゲートウェイGW1において受信される。ところが、ノードFとHは、選択LDではないので、ハローパケットHG1の送信トラヒックの値を無視する。また、第4実施形態では、ゲートウェイGW1は「ゲートウェイGW1自身がボトルネックか否か」を判定しないので、ゲートウェイGW1も送信トラヒックの値を無視する。
そして、図16の例では、次にノードBがハローパケットHB1を送信する。ハローパケットHB1に設定される送信トラヒックの値は「1」である。なぜなら、ノードBは、既にハローパケットHD1を受信してはいるが、上記のとおりハローパケットHD1の送信トラヒックの値は考慮に入れないからである。したがって、ハローパケットHB1には、ノードBが所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」が、送信トラヒックとして設定される。
また、図4の実線矢印に示すように、ノードBは、GDとしてゲートウェイGW1が指定されたデータパケットを送信するときに、LDとしてノードEを選択する。よって、ハローパケットHB1には、選択LDとしてノードEが指定される。
ここで、図4に示すようにノードBにはノードA、C、DおよびEが隣接する。よって、ハローパケットHB1はノードA、C、DおよびEにおいて受信される。
しかし、ノードA、CおよびDは、いずれも、ハローパケットHB1に指定された選択LDではないので、ハローパケットHB1の送信トラヒックの値を無視する。他方、ノードEは、選択LDなので、ハローパケットHB1のLSであるノードBと対応づけて、ハローパケットHB1に設定された送信トラヒックの「1」という値を記憶する。
また、図16の例では、続いて、ノードHがハローパケットHH1を送信する。ハローパケットHH1に設定される送信トラヒックの値は「1」である。なぜなら、ノードHは、既にハローパケットHGW1とHG1を受信してはいるが、上記のとおり、ハローパケットHGW1とHG1の送信トラヒックの値は考慮に入れないからである。したがって、ハローパケットHH1には、ノードHが所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」が、送信トラヒックとして設定される。
また、図4の実線矢印に示すように、ノードHは、GDとしてゲートウェイGW1が指定されたデータパケットを送信するときに、LDとしてゲートウェイGW1を選択する。よって、ハローパケットHH1には、選択LDとしてゲートウェイGW1が指定される。
ここで、図4に示すように、ノードHには、ノードF、GおよびI、ならびにゲートウェイGW1が隣接する。よって、ハローパケットHH1は、ノードF、GおよびI、ならびにゲートウェイGW1において受信される。ところが、ノードF、GおよびIは、選択LDではないので、ハローパケットHH1の送信トラヒックの値を無視する。また、ゲートウェイGW1は、ハローパケットHG1と同様に、ハローパケットHH1の送信トラヒックの値も無視する。
続いて、図16の例では、ノードEがハローパケットHE1を送信する。ハローパケットHE1に設定される送信トラヒックの値は「4」である。なぜなら、ノードEは既にハローパケットHD1とHB1を受信しており、ノードDおよびBとそれぞれ対応づけて、「2」および「1」という値を記憶しているからである。よって、ノードEは、記憶している「2」および「1」という値と、ノードE自身が所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」との和である「4」を、ハローパケットHE1に送信トラヒックとして設定する。
また、図4の実線矢印に示すように、ノードEは、GDとしてゲートウェイGW1が指定されたデータパケットを送信するときに、LDとしてノードFを選択する。よって、ハローパケットHE1には、選択LDとしてノードFが指定される。
ここで、図4に示すように、ノードEには、ノードB、C、DおよびFが隣接する。よって、ハローパケットHE1は、ノードB、C、DおよびFにおいて受信される。
しかし、ノードB、CおよびDは、いずれも、ハローパケットHE1に指定された選択LDではないので、ハローパケットHE1の送信トラヒックの値を無視する。他方、ノードFは、選択LDなので、ハローパケットHE1のLSであるノードEと対応づけて、ハローパケットHE1に設定された送信トラヒックの「4」という値を記憶する。
そして、図16の例では、次にノードIがハローパケットHI1を送信する。ハローパケットHI1に設定される送信トラヒックの値は「1」である。なぜなら、ノードIは、既にハローパケットHGW1とHH1を受信してはいるが、上記のとおり、ハローパケットHGW1とHH1の送信トラヒックの値は考慮に入れないからである。したがって、ハローパケットHI1には、ノードIが所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」が、送信トラヒックとして設定される。
また、図4の実線矢印に示すように、ノードIは、GDとしてゲートウェイGW1が指定されたデータパケットを送信するときに、LDとしてゲートウェイGW1を選択する。よって、ハローパケットHI1には、選択LDとしてゲートウェイGW1が指定される。
ここで、図4に示すように、ノードIには、ノードFおよびH、ならびにゲートウェイGW1が隣接する。よって、ハローパケットHI1は、ノードFおよびH、ならびにゲートウェイGW1において受信される。ところが、ノードFとHは、選択LDではないので、ハローパケットHI1の送信トラヒックの値を無視する。また、ゲートウェイGW1は、ハローパケットHG1やHH1と同様に、ハローパケットHI1の送信トラヒックの値も無視する。
続いて、図16の例では、ノードCがハローパケットHC1を送信する。ハローパケットHC1に設定される送信トラヒックの値は「1」である。なぜなら、ノードCは既にハローパケットHB1とHE1を受信してはいるが、上記のとおり、ハローパケットHB1とHE1の送信トラヒックの値は考慮に入れないからである。したがって、ハローパケットHC1には、ノードCが所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」が、送信トラヒックとして設定される。
また、図4の実線矢印に示すように、ノードCは、GDとしてゲートウェイGW1が指定されたデータパケットを送信するときに、LDとしてノードEを選択する。よって、ハローパケットHC1には、選択LDとしてノードEが指定される。
ここで、図4に示すように、ノードCには、ノードBとEが隣接する。よって、ハローパケットHC1は、ノードBとEにおいて受信される。ノードBは、ハローパケットHC1に指定された選択LDではないので、ハローパケットHC1の送信トラヒックの値を無視する。他方、ノードEは、選択LDなので、ハローパケットHC1のLSであるノードCと対応づけて、ハローパケットHC1に設定された送信トラヒックの「1」という値を記憶する。
続いて、図16の例では、ノードFがハローパケットHF1を送信する。ハローパケットHF1に設定される送信トラヒックの値は「5」である。なぜなら、第1に、ノードFは、既に受信したハローパケットのうち、ハローパケットHG1とHH1とHI1の送信トラヒックの値は上記のとおり考慮に入れないからである。そして、第2に、ノードFは、既に受信したハローパケットHE1の送信トラヒックの「4」という値を、ノードEと対応づけて記憶しているからである。よって、ノードFは、記憶している「4」という値と、ノードF自身が所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」との和である「5」を、ハローパケットHF1に送信トラヒックとして設定する。
また、図4の実線矢印に示すように、ノードFは、GDとしてゲートウェイGW1が指定されたデータパケットを送信するときに、LDとしてノードHを選択する。よって、ハローパケットHF1には、選択LDとしてノードHが指定される。
ここで、図4に示すように、ノードFには、ノードE、G、HおよびIが隣接する。よって、ハローパケットHF1は、ノードE、G、HおよびIにおいて受信される。
しかし、ノードE、GおよびIは、いずれも、ハローパケットHF1に指定された選択LDではないので、ハローパケットHF1の送信トラヒックの値を無視する。
他方、ノードHは、選択LDなので、ハローパケットHF1のLSであるノードFと対応づけて、ハローパケットHF1に設定された送信トラヒックの「5」という値を記憶する。さらに、ノードHが所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」と上記の「5」という値の和は、閾値の「5」を超える。よって、ノードHは「ノードHはネットワーク400におけるボトルネックである」と判定し、ボトルネック通知を送信する。
そして、図16の例では、ハローパケットHA1の送信から間隔ΔHをおいて、ノードAがハローパケットHA2を送信する。また、ハローパケットHGW1の送信から間隔ΔHをおいて、ゲートウェイGW1がハローパケットHGW2を送信する。さらに、ハローパケットHD1の送信から間隔ΔHをおいて、ノードDがハローパケットHD2を送信する。
また、ハローパケットHG1の送信から間隔ΔHをおいて、ノードGがハローパケットHG2を送信する。そして、ハローパケットHB1の送信から間隔ΔHをおいて、ノードBがハローパケットHB2を送信する。
以上のハローパケットHA2、HGW2、HD2、HG2およびHB2には、それぞれ、ハローパケットHA1、HGW1、HD1、HG2およびHB1と同じ値の送信トラヒックが設定されている。よって、ハローパケットHA2、HGW2、HD2、HG2およびHB2の送信が引き起こす結果は、ハローパケットHA1、HGW1、HD1、HG2およびHB1が送信されたときと同じである。
その後、ノードHが、ハローパケットHH1の送信から間隔ΔHをおいて、ハローパケットHH2を送信する。ノードHは、ハローパケットHH1を送信した時点では、まだハローパケットHF1を受信していなかった。そのため、ハローパケットHH1の送信トラヒックの値は上記のとおり「1」である。
しかし、ハローパケットHH2を送信する時点では、ノードHは既にハローパケットHF1を受信しており、ハローパケットHF1の送信トラヒックの「5」という値をノードFと対応づけて記憶している。よって、ハローパケットHH2の送信トラヒックの値は、ハローパケットHH1とは異なり、記憶している「5」という値と、ノードHが所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」との和の、「6」である。
ただし、ハローパケットHH1の場合と同様に、ハローパケットHH2の送信トラヒックの値は、ノードF、GおよびI、ならびにゲートウェイGW1に無視される。よって、ハローパケットHH2の受信を契機としてボトルネック通知が送信されることはない。
その後、ノードEが、ハローパケットHE1の送信から間隔ΔHをおいて、ハローパケットHE2を送信する。ノードEは、ハローパケットHE1を送信した時点では、まだハローパケットHC1を受信していなかった。そのため、ハローパケットHE1の送信トラヒックの値は上記のとおり「4」である。
しかし、ハローパケットHE2を送信する時点では、ノードEは既にハローパケットHC1を受信しており、ハローパケットHC1の送信トラヒックの「1」という値をノードCと対応づけて記憶している。また、もちろんノードEは、ハローパケットHD2の受信を契機として、ハローパケットHD2の送信トラヒックの「2」という値をノードDと対応づけて記憶している。さらに、ノードEは、ハローパケットHB2の受信を契機として、ハローパケットHB2の送信トラヒックの「1」という値をノードBと対応づけて記憶してもいる。
よって、ハローパケットHE2の送信トラヒックの値は、ハローパケットHE1とは異なり、記憶している上記の「1」と「2」と「1」という値と、ノードEが所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」との和の、「5」である。
そして、ハローパケットHE2は、ノードB、C、DおよびFで受信される。ノードB、CおよびDは、ハローパケットHE2に指定された選択LDではないので、ハローパケットHE2の送信トラヒックの値を無視する。
しかし、ノードFは、選択LDなので、ハローパケットHE2のLSであるノードEと対応づけて、ハローパケットHE2に設定された送信トラヒックの「5」という値を記憶する。つまり、ノードFは、今までノードEと対応づけて記憶していた「4」という値を「5」に更新する。
また、ノードFが所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」と上記の「5」という値の和は、閾値の「5」を超える。よって、ノードFは「ノードFはネットワーク400におけるボトルネックである」と判定し、ボトルネック通知を送信する。
その後、ノードIが、ハローパケットHI1の送信から間隔ΔHをおいて、ハローパケットHI2を送信する。また、ノードCが、ハローパケットHC1の送信から間隔ΔHをおいて、ハローパケットHC2を送信する。
ハローパケットHI2およびHC2には、それぞれ、ハローパケットHI1およびHC1と同じ値の送信トラヒックが設定されている。よって、ハローパケットHI2およびHC2の送信が引き起こす結果は、ハローパケットHI1およびHC1が送信されたときと同じである。
その後、ノードFが、ハローパケットHF1の送信から間隔ΔHをおいて、ハローパケットHF2を送信する。ノードFは、上記のとおり、ハローパケットHE2の受信を契機として、ノードEと対応づけて記憶していた値を更新している。したがって、その更新に応じて、ハローパケットHF2に設定される送信トラヒックの値も、ハローパケットHE1に設定されていた値とは異なるものとなる。すなわち、更新後の「5」という値と、ノードFが所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」との和である「6」が、ハローパケットHF2の送信トラヒックとして設定される。
そして、ハローパケットHF2は、ノードE、G、HおよびIにおいて受信される。ノードE、GおよびIは、ハローパケットHF2に指定された選択LDではないので、ハローパケットHF2の送信トラヒックの値を無視する。
しかし、ノードHは、選択LDなので、ハローパケットHF2のLSであるノードFと対応づけて、ハローパケットHF2に設定された送信トラヒックの「6」という値を記憶する。つまり、ノードHは、今までノードFと対応づけて記憶していた「5」という値を「6」に更新する。
また、ノードHが所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」と上記の「6」という値の和は、閾値の「5」を超える。よって、ノードHは「ノードHはネットワーク400におけるボトルネックである」と判定し、ボトルネック通知を送信する。
その後、ハローパケットHA2の送信から間隔ΔHをおいて、ノードAがハローパケットHA3を送信する。また、ハローパケットHGW2の送信から間隔ΔHをおいて、ゲートウェイGW1がハローパケットHGW3を送信する。さらに、ハローパケットHD2の送信から間隔ΔHをおいて、ノードDがハローパケットHD3を送信する。
また、ハローパケットHG2の送信から間隔ΔHをおいて、ノードGがハローパケットHG3を送信する。そして、ハローパケットHB2の送信から間隔ΔHをおいて、ノードBがハローパケットHB3を送信する。
以上のハローパケットHA3、HGW3、HD3、HG3およびHB3には、それぞれ、ハローパケットHA2、HGW2、HD2、HG2およびHB2と同じ値の送信トラヒックが設定されている。よって、ハローパケットHA3、HGW3、HD3、HG3およびHB3の送信が引き起こす結果は、ハローパケットHA2、HGW2、HD2、HG2およびHB2が送信されたときと同じである。
その後、ノードHが、ハローパケットHH2の送信から間隔ΔHをおいて、ハローパケットHH3を送信する。ノードHは、上記のとおり、ハローパケットHF2の受信を契機として、ノードFと対応づけて記憶していた値を更新している。したがって、その更新に応じて、ハローパケットHH3に設定される送信トラヒックの値も、ハローパケットHH2に設定されていた値とは異なるものとなる。すなわち、更新後の「6」という値と、ノードHが所定期間にゲートウェイGW1宛に送信するデータ量の期待値である「1」との和である「7」が、ハローパケットHH3の送信トラヒックとして設定される。
ただし、ハローパケットHH1およびHH2の場合と同様に、ハローパケットHH3の送信トラヒックの値は、ノードF、GおよびI、ならびにゲートウェイGW1に無視される。よって、ハローパケットHH3の受信を契機としてボトルネック通知が送信されることはない。
以下同様に、ネットワーク400内のノードA〜IおよびゲートウェイGW1は、それぞれ間隔ΔHでハローパケットの送信を繰り返す。しかし、図16に示すように、送信トラヒックの値は、ハローパケットHH3の送信の時点で収束する。
以上のように、ネットワーク400内の各ノードがハローパケットを送信する順序によっては、経路が安定してから各ノードが1回ずつハローパケットを送信するだけでは、まだボトルネックの予測または検出は不完全である。しかし、何回かハローパケットの送信が繰り返されるうちに、送信トラヒックの値は収束し、ボトルネックが漏れなく予測または検出されるようになる。
ボトルネックが漏れなく予測または検出されるまでにかかる最大時間は、具体的には、次のように定式化することができる。
図4のようなネットワークトポロジにおいて、GDを根ノードと見なすことにする。また、データパケットの送信に使われるリンク(つまり図4の実線矢印)で接続された互いに隣接する2つのノードのうち、LSたるノードを子ノードと見なすことにし、LDたるノードを親ノードと見なすことにする。
すると、葉ノードが送信するハローパケットの送信トラヒックの値は、常に「既に収束している」と見なしてよい。また、葉ノードではない或るノードが送信するハローパケットの送信トラヒックの値を「既に収束している」と見なしてよいのは、当該或るノードがすべての子ノードから「既に収束している」と見なせる送信トラヒックを含むハローパケットを受信した後である。
そして、送信トラヒックの値が「既に収束している」か否かについて、以上のように定義した場合に、経路が安定してから、根ノードが、根ノードのすべての子ノードから、それぞれ「既に収束している」と見なしてよいハローパケットを受信するまでにかかる時間が、上記最大時間である。
上記定義によれば、ノードA、B、C、GおよびIは、葉ノードである。これらの葉ノードから送信されるハローパケットの送信トラヒックの値は、「既に収束している」と見なせるし、図16に示すように、経路が安定した後は変化しない。
また、上記定義によれば、例えば、葉ノードではないノードEが、子ノードのノードCからハローパケットHC1を受信する前に送信するハローパケットHE1の送信トラヒックは、まだ「収束している」と見なせない。しかし、ハローパケットHE2の送信トラヒックの値は、「既に収束している」と見なせる。
同様に、ハローパケットHF1、HH1およびHH2の送信トラヒックの値は、まだ「収束している」と見なせない。しかし、ハローパケットHF2とHH3の送信トラヒックの値は、「既に収束している」と見なせる。
よって、図16の例では、「ボトルネックが漏れなく予測または検出されるまでにかかる最大時間」とは、「経路が安定してから、ゲートウェイGW1がハローパケットHH3を受信するまでにかかる時間」のことである。
なお、ネットワーク400内のノードA〜Iは、ランダムな順序でハローパケットを送信する可能性がある。また、上記の説明から明らかなとおり、上記最大時間は、データパケットが送信される経路のトポロジに依存する。そのため、上記最大時間を事前に正しく認識することは困難である。
そこで、上記最大時間の近似値として、例えば、ハローパケットの送信間隔ΔHと、ネットワーク400内におけるゲートウェイGW1までの最大ホップ数(またはその近似値として見積もられる値)との積が、参照されてもよい。例えば、ゲートウェイGW1は、最大時間待っても警告を受信しなければ、「ボトルネックのノードはない」と判断してもよい。
さて、以上、図16を参照して説明した各ノードの動作が、より具体的にはどのようにして実現されるのかについて、以下では図17〜21を参照してさらに詳しく説明する。
図17は、第4実施形態の通信装置のブロック構成図である。第4実施形態では、ノードA〜Iの各々が、図17の通信装置800のように構成される。
図17の通信装置800は、図1の通知受信部101、送信量通知部102、ボトルネック判定部103、送信ボトルネック通知部104とそれぞれ類似の、通知受信部801、送信量通知部802、ボトルネック判定部803、ボトルネック通知部804を有する。また、通信装置800は、図1の経路情報記憶部105と類似の経路情報記憶部805を有する。
さらに、通信装置800は、受信したパケットのタイプを判定するタイプ判定部806と、データパケットを一時的に格納するバッファ部807を有する。また、通信装置800は、データパケットの送受信に関する処理を行うデータパケット処理部808を有する。データパケット処理部808は、データパケットのペイロードに関する処理を行う上位層処理部809と、データパケットのGDに応じてLDを決定する(すなわちデータパケットをルーティングする経路を決定する)ルーティング制御部810を有する。
また、経路情報記憶部805は、通信装置800に隣接する他の通信装置に関する情報を記憶するリンクテーブル811を含む。経路情報記憶部805は、さらに、データパケットのLDを決定するための情報を記憶するルーティングテーブル812も含む。
なお、リンクテーブル811の具体例については図18とともに後述する。また、ルーティングテーブル812は、図9のルーティングテーブル612Dと同様の形式なので、詳細についての説明は割愛する。
さらに、通信装置800は、通信装置800自身が所定期間に生成してゲートウェイGW1宛に送信するデータパケットの量の期待値を記憶する送信量記憶部813を有する。例えば、図16の例では、送信量記憶部813は「1」という値を記憶する。
そして、通信装置800は、ハローパケットの送受信に関する処理を行うハローパケット処理部814を有する。ハローパケット処理部814は、上記の通知受信部801を含む。ハローパケット処理部814はさらに、受信したハローパケットに基づいてリンクテーブル811を更新するリンク管理部815と、ハローパケットを定期的に送信する存在通知部816を含む。なお、上記の送信量通知部802は、存在通知部816に含まれる。
ところで、通信装置800が無線ネットワークで使われる装置の場合、通信装置800は、例えば図2の通信装置200により実現されてもよい。例えば、802.15.4 PHY/MACチップ205がパケットを受信すると、パケットは、バッファ部807としてのDRAM203に格納されてもよい。そして、MPU201がタイプ判定部806としてパケットのタイプを判定してもよい。
あるいは、802.15.4 PHY/MACチップ205は、MPU201の代わりにタイプ判定部806としてパケットのタイプの判定を行うように構成されていてもよい。その場合、802.15.4 PHY/MACチップ205は、受信したパケットが制御パケットであればパケット全体をMPU201に出力してもよい。逆に、受信したパケットがデータパケットであれば、802.15.4 PHY/MACチップ205は、パケットのヘッダだけをMPU201に出力し、ヘッダを含むパケットの全体をバッファ部807としてのDRAM203に格納してもよい。
MPU201はさらに、データパケット処理部808として各種の処理を行ってもよい。データパケット処理部808のうち上位層処理部809を実現するために、さらにセンサ207が使われてもよい。また、データパケット処理部808がデータパケットを送信する機能は、MPU201と802.15.4 PHY/MACチップ205により実現されてもよい。
経路情報記憶部805と送信量記憶部813は、DRAM203により実現されてもよいし、フラッシュメモリ204により実現されてもよい。
また、ボトルネック判定部803もMPU201によって実現することができる。ボトルネック通知部804は、MPU201と802.15.4 PHY/MACチップ205により実現されてもよいが、MPU201と802.11b PHY/MACチップ206により実現されてもよい。
そして、ハローパケット処理部814もMPU201によって実現することができる。なお、ハローパケット処理部814内の存在通知部816は、MPU201だけでなくさらにタイマIC202と802.15.4 PHY/MACチップ205を用いることで、実現することができる。
以上とは逆に、通信装置800が有線ネットワークで使われる装置の場合、通信装置800は、例えば図3の通信装置300により実現されてもよい。例えば、物理ポート301a〜301dのいずれかがパケットを受信すると、パケットは、対応するPHYチップ(つまりPHYチップ302a〜302dのいずれか)を介して、バッファ部807としての、メモリ305またはメモリ307に出力されてもよい。
タイプ判定部806は、FPGA303により実現されてもよいし、MPU306により実現されてもよい。例えば、FPGA303がタイプを判定し、受信されたパケットがデータパケットの場合のみパケットをMPU306が処理し、受信されたパケットが制御パケットの場合は、パケットをFPGA303が処理してもよい。
また、MPU306は、データパケット処理部808として各種の処理を行ってもよい。データパケット処理部808のうち上位層処理部809を実現するために、さらにセンサ308が使われてもよい。また、データパケット処理部808がデータパケットを送信する機能は、FPGA303とPHYチップ302a〜302dと物理ポート301a〜301dにより実現されてもよい。
経路情報記憶部805はメモリ305により実現されてもよい。また、送信量記憶部813はメモリ307により実現されてもよい。
そして、ボトルネック判定部803もMPU306により実現することができる。ボトルネック通知部804は、MPU306と、FPGA303と、PHYチップ302a〜302dと、物理ポート301a〜301dにより実現されてもよい。
また、ハローパケット処理部814もFPGA303によって実現することができる。なお、存在通知部816を実現するために、FPGA303内のタイマ304が使われてもよい。また、存在通知部816は、FPGA303だけでなく、PHYチップ302a〜302dと物理ポート301a〜301dを用いることによって、実現することができる。
さて、図18は、第4実施形態のリンクテーブルの例を示す図である。図18には、リンクテーブル811の具体例が4つ示されている。図18に示すように、リンクテーブル811内の各エントリは、「リンク名」、「受信トラヒック」および「ハローパケット受信時刻」というフィールドを含む。つまり、リンクテーブル811の形式は、第3実施形態のリンクテーブル611のトラヒック認識時刻を省略した形式である。
第3実施形態とは異なり、第4実施形態では、ハローパケットに送信トラヒックの値が埋め込まれているので、ハローパケット受信時刻とトラヒック認識時刻が等しい。そのため、第4実施形態のリンクテーブル811は、ハローパケット受信時刻とトラヒック認識時刻を別々に記憶する必要がない。したがって、リンクテーブル811には、「トラヒック認識時刻」というフィールドはない。
さて、以上説明した3つのフィールドを含むリンクテーブル811の具体例として、図18には、次の(E1)〜(E4)の4つの例が示されている。
(E1)ハローパケットHD1をノードEが受信した直後の、ノードEのリンクテーブル811E−1。
(E2)ハローパケットHB1をノードEが受信した直後の、ノードEのリンクテーブル811E−2。
(E3)ハローパケットHC1をノードEが受信した直後の、ノードEのリンクテーブル811E−3。
(E4)ハローパケットHF1をノードEが受信した直後の、ノードEのリンクテーブル811E−4。
以下、図16も参照しながら、これら4つのリンクテーブル811E−1〜811E−4の内容を説明する。
なお、図16に関しては、上記のとおり、経路が安定するまでに送信されるハローパケットには「0」という送信トラヒックが設定されている、と仮定した。実際には、経路が安定する前に送信されたハローパケットを通信装置800が受信すると、受信を契機としてリンクテーブル811にエントリが追加されることがある。しかし、図18では説明の便宜上、経路が安定する前のハローパケットの受信を契機として追加されたエントリの図示は、省略されている。
さて、図16に示すように、ノードEは、ノードDから、選択LDとしてノードEが設定されたハローパケットHD1を受信する。すると、ノードEは、ハローパケットHD1のLSであるノードDがリンク名として指定されたリンクテーブル811のエントリにおいて、ハローパケットHD1の送信トラヒックの「2」という値を、受信トラヒックフィールドに設定する。また、ノードEは、当該エントリにおいて、ハローパケットHD1を受信した時刻TDE1を、ハローパケット受信時刻フィールドに設定する。
その後、ノードEは、図16に示すように、選択LDとしてノードEが設定されたハローパケットHB1を受信する。すると、ノードEは、ハローパケットHB1のLSであるノードBがリンク名として指定されたリンクテーブル811のエントリにおいて、ハローパケットHB1の送信トラヒックの「1」という値を、受信トラヒックフィールドに設定する。また、ノードEは、当該エントリにおいて、ハローパケットHB1を受信した時刻TBE2を、ハローパケット受信時刻フィールドに設定する。
その後、ノードEは、図16に示すように、選択LDとしてノードEが設定されたハローパケットHC1を受信する。すると、ノードEは、ハローパケットHC1のLSであるノードCがリンク名として指定されたリンクテーブル811のエントリにおいて、ハローパケットHC1の送信トラヒックの「1」という値を、受信トラヒックフィールドに設定する。また、ノードEは、当該エントリにおいて、ハローパケットHC1を受信した時刻TCE3を、ハローパケット受信時刻フィールドに設定する。
その後、ノードEは、図16に示すように、選択LDとしてノードEではなくノードHが設定されたハローパケットHF1を受信する。この場合、ノードEは、ハローパケットHF1の送信トラヒックの値を無視する。つまり、ノードEは、ハローパケットHF1のLSであるノードFがリンク名として指定されたリンクテーブル811のエントリにおける受信トラヒックフィールドの値を「0」に設定する。また、ノードEは、当該エントリにおいて、ハローパケットHF1を受信した時刻TFE4を、ハローパケット受信時刻フィールドに設定する。
以上のようにして、図18に示したように、ノードEのリンクテーブル811は、ハローパケットの受信のたびに書き換えられてゆく。
続いて、図19を参照して、第4実施形態で使われるパケットの例について説明する。第4実施形態でも、パケット700の一般形とACKパケット730の形式は、図10の第3実施形態と同様である。
しかし、第4実施形態のデータパケット740は、第3実施形態のデータパケット710とは異なり、送信トラヒックフィールドを含まない。データパケット741はデータパケット740の具体例である。
例えば、データパケット741のLDとLSは、それぞれ、ノードEとDを示す。また、データパケット741において、IDは「3456」という値であり、タイプとしてはデータパケットを示す「Data」が設定されている。そして、データパケット741のGDとGSは、それぞれ、ゲートウェイGW1とノードAを示す。また、データパケット741のペイロードには任意のデータが格納されていてよく、図19の例ではペイロードの長さが250なので、長さフィールドには「250」という値が設定される。
また、第4実施形態のハローパケット750は、第3実施形態のハローパケット720とは異なり、「選択LD」と「送信トラヒック」という2つのフィールドをペイロードとして有する。
なお、送信トラヒックフィールドを含む点において第4実施形態のハローパケット750と第3実施形態のデータパケット710は共通するが、選択LDフィールドを含むのはハローパケット750のみである。
第3実施形態のデータパケット710においては、アドホックヘッダ701内のLDフィールド自体が、データパケット710が送信されるときのLD(つまり選択LD)を示す。よって、データパケット710においては、選択LDを示すためのさらに別のフィールドは不要である。したがって、データパケット710は選択LDフィールドを含まない。
他方、ハローパケット750のアドホックヘッダ701内のLDフィールドは、データパケット740が送信されるときのLDを示すものではない。したがって、実際にデータパケットが送信される経路に沿っての送信トラヒックの積算を可能とするために、ハローパケット750は、ハローパケット750のアドホックヘッダ701内のLDフィールドとは別に、選択LDフィールドを含む。そして、ハローパケット750は、選択LDフィールドによって、データパケット740が送信されるときのLDを示す。
具体的には、例えば、図16のハローパケットHE2では、図19に示すとおり、LDには、1ボップの範囲内でのブロードキャストを示す特殊な値が指定され、LSにはノードEが指定される。また、ハローパケットHE2において、IDには「8765」という値が設定され、タイプにはハローパケットを示す「Hello」という値が設定される。
そして、ハローパケットHE2において、選択LDとしては、ハローパケットHE2を送信するノードEがゲートウェイGW1宛のデータパケット740を送信するときにLDとして選択するノードFが指定されている。また、図16に示すように、ハローパケットHE2の送信トラヒックの値は「5」である。
なお、実施形態によっては、GDとして指定され得るノードがネットワーク内に複数存在していてもよく、その場合、ハローパケット760のような形式のハローパケットが使われてもよい。ハローパケット760に関しては、第11実施形態とともに後述する。
さて、以下では、いくつかのフローチャートを参照して、図17の通信装置800の動作を説明する。以下に説明するように動作する通信装置800を図4のノードA〜Iとして用いることにより、図16を参照して説明したような、ボトルネックの検出または予測が可能となる。なお、ゲートウェイGW1は、少なくとも存在通知部816を有するが、もちろん、存在通知部816以外の通信装置800内の構成要素をさらに有していてもよい。
さて、通信装置800は、第3実施形態の通信装置600と同様に、図11の処理を行う。ただし、いくつかの点で、第3実施形態と第4実施形態では図11の処理の詳細が異なる。第3実施形態との主な違いのみを簡単に説明すれば、以下のとおりである。
ステップS102において、タイプ判定部806は、「受信されたパケット700はハローパケット750である」と判定した場合、ハローパケット750をハローパケット処理部814内の通知受信部801とリンク管理部815に出力する。また、タイプ判定部806は、「受信されたパケット700はデータパケット740である」と判定した場合、データパケット740の受信をルーティング制御部810に通知する。
また、ステップS103のハローパケット受信処理は、第4実施形態では、図20に示す処理である。
そして、ステップS105のデータパケット受信処理は、第4実施形態では、具体的には、図12の処理の一部を省略した処理である。すなわち、第4実施形態では、ステップS204とS205とS211が省略される。また、第4実施形態では、ステップS212において、送信トラヒックを含まないデータパケット740をデータパケット処理部808が送信する。
さて、図20は、第4実施形態において図11のステップS103で行われるハローパケット受信処理のフローチャートである。
ステップS601でリンク管理部815は、受信されたハローパケット750のLSと同じ値をリンク名として持つエントリをリンクテーブル811において検索する。
そして、ステップS602でリンク管理部815は、検索の結果としてエントリが見つかったか否かを判定する。
エントリが見つかった場合とは、既知の隣接ノードからのハローパケット750を通信装置800が受信した場合である。この場合、処理はステップS603に移行する。
逆に、エントリが見つからなかった場合とは、未知の新たな隣接ノードからのハローパケット750を通信装置800が受信した場合である。この場合、処理はステップS604に移行する。
そして、ステップS603でリンク管理部815は、見つかったエントリにおけるハローパケット受信時刻として、現在時刻を設定する。また、リンク管理部815は、見つかったエントリを、「注目エントリ」として通知受信部801に通知する。そして、処理はステップS608に移行する。
他方、ステップS604でリンク管理部815は、リンクテーブル811に新規エントリを追加する。
そして、次のステップS605でリンク管理部815は、新規エントリにおけるリンク名として、受信されたハローパケット750のLSの値を設定する。
さらに、次のステップS606でリンク管理部815は、新規エントリにおける受信トラヒックの値を、「0」に初期化する。
また、次のステップS607でリンク管理部815は、新規エントリにおけるハローパケット受信時刻として、現在時刻を設定する。さらに、リンク管理部815は、ステップS804で追加した新規エントリを、「注目エントリ」として通知受信部801に通知する。
なお、ステップS605〜S607の実行順序は適宜入れ替えられてもよい。ステップS605〜S607の実行後、処理はステップS608に移行する。
さて、ステップS608では、通知受信部801が、受信されたハローパケット750に設定されている選択LDの値が自ノードID(つまり通信装置800自身のノードID)と等しいか否かを判定する。そして、選択LDの値が通信装置800自身のノードIDと等しければ、処理はステップS609に移行する。他方、選択LDの値が通信装置800自身のノードIDと異なれば、処理はステップS612に移行する。
ステップS609で通知受信部801は、受信されたハローパケット750から、送信トラヒックの値を抽出する。例えば、図19のハローパケットHE2を受信したノードFの通知受信部801は、「5」という値を抽出する。
そして、次のステップS610で通知受信部801は、ステップS609で抽出した値を、リンク管理部815から通知された注目エントリにおける受信トラヒックとして設定する。
続いて、ステップS611では、図14と同様のボトルネック検出処理が行われる。なお、第4実施形態では、送信量通知部802とボトルネック判定部803とボトルネック通知部804がボトルネック検出処理を行う。ボトルネック検出処理が終了すると、ハローパケット受信処理も終了する。
他方、ステップS612では、通知受信部801が、注目エントリにおける受信トラヒックの値を「0」に初期化する。例えば、ノードの追加または削除などによりネットワークトポロジが変化した場合などに、変化に追従して経路の一部が変化することもある。よって、経路が変化した場合に、変化に追従した適切なトラヒックの計算を可能とするために、通知受信部801は、ステップS612において注目エントリにおける受信トラヒックの値を「0」に初期化する。初期化が終了すると、ハローパケット受信処理も終了する。
ところで、通信装置800は、上記のようにパケット700の受信を契機とする処理以外のいくつかの処理も行う。
例えば、通信装置800のデータパケット処理部808は、定期的または不定期に、GSとしてデータパケット740を送信する。具体的には、データパケット処理部808は図15と類似の処理を行う。ただし、第4実施形態では、図15のステップS508は省略され、ステップS513では送信トラヒックを含まないデータパケット740が送信される。
また、通信装置800の存在通知部816は、図21の処理を行う。図21は、第4実施形態におけるハローパケット送信処理のフローチャートである。
ステップS701で存在通知部816は、現在時刻がハローパケット750の送信予定時刻になるまで待機する。そして、ハローパケット750の送信予定時刻になると、処理はステップS702に移行する。
例えば、ハローパケット750は定期的に送信されることが好ましい。よって、例えばタイマIC202またはタイマ304が、所定の間隔で定期的に割り込み信号を出力してもよい。割り込み信号が出力されると、存在通知部816は「現在時刻がハローパケット750の送信予定時刻である」と認識する。
そして、ステップS702で送信量通知部802は、送信するハローパケット750に設定する送信トラヒックの値を計算する。具体的には、送信量通知部802は、図20のステップS611のボトルネック検出処理(詳細は図14)におけるステップS401〜S405と同様にして、送信トラヒックの値を計算する。
また、ステップS703で送信量通知部802は、ルーティングテーブル812を参照する。第4実施形態では、ネットワーク400内でGDとして指定され得るのは、ゲートウェイGW1のみなので、送信量通知部802は、ルーティングテーブル812において、GDの値がゲートウェイGW1を示すエントリを検索する。そして、送信量通知部802は、検索の結果見つかったエントリにおいて、最も評価の高い(つまり最も評価値の小さい)LDの候補を認識する。
例えば、ルーティングテーブル812は、図9のルーティングテーブル612Dと同様の形式でもよい。その場合、GDとしてのゲートウェイGW1に対応して、最大で3つのノードが、選択可能なLDの候補としてルーティングテーブル812に登録されている。
そこで、送信量通知部802は、選択可能なLDの候補の中から、最も評価の高い候補を認識する。なぜなら、GDとしてゲートウェイGW1が指定されたデータパケット740の送信において、ルーティング制御部810が最優先でLDとして選択するのは、最も評価の高い候補だからである。
続いて、ステップS704において送信量通知部802は、ステップS702で計算した送信トラヒックと、ステップS703で認識したLD(つまり選択LD)とを設定したハローパケット750を生成する。
なお、送信量通知部802は、ハローパケット750のアドホックヘッダ701において、LDにはブロードキャストを示す特定の値を設定し、LSには通信装置800自身のノードIDを設定する。また、送信量通知部802は、新たなIDを生成してハローパケット750のIDとして設定し、タイプとして「Hello」を設定する。
そして、ステップS705で送信量通知部802は、ステップS704で生成したハローパケット750を送信する。すると、処理はステップS701に戻る。
以上説明した第4実施形態によれば、定期的に送信されるハローパケット750を利用して、ネットワーク400内の各ノードA〜Iが、自律的にボトルネックの検出または予測を行うことができる。つまり、ボトルネックの予測または検出のために専用の制御パケットを導入する必要がないので、ボトルネックの予測または検出のためにネットワークに生じる負荷は小さい。
続いて、図14とは異なる基準にしたがってボトルネックの予測または検出が行われる第5実施形態について説明する。第5実施形態では、図7の通信装置600が、送信量通知部602とボトルネック判定部603の代わりに図5のボトルネック判定部502を含み、ボトルネック通知部604の代わりに受信ボトルネック通知部503を含む。そして、第5実施形態では、送信トラヒックの量ではなく受信トラヒックの量に基づいて、ボトルネックの予測または検出が行われる。
図22は、第5実施形態におけるボトルネック検出処理のフローチャートである。なお、ボトルネック検出処理以外の点では、第5実施形態は第3実施形態と同様なので、詳しい説明は割愛する。
ステップS801でボトルネック判定部502は、受信トラヒックの量を示す変数InboundTrafficを「0」に初期化する。
そして、次のステップS802でボトルネック判定部502は、リンクテーブル611の1つ目のエントリに注目する。続いて、処理はステップ803に移行する。
ステップS803でボトルネック判定部502は、変数InboundTrafficの値と、リンクテーブル611において注目しているエントリの受信トラヒックの値との和を計算し、計算結果を変数InboundTrafficに代入する。
そして、次のステップS804でボトルネック判定部502は、リンクテーブル611のすべてのエントリに注目し終えたか否かを判断する。ボトルネック判定部502がまだ注目していないエントリが残っていれば、処理はステップS805に移行する。逆に、ボトルネック判定部502がすべてのエントリに既に注目済みならば、処理はステップS806に移行する。
ステップS805でボトルネック判定部502は、リンクテーブル611の次のエントリに注目する。そして、処理はステップS803に戻る。
他方、ステップS806でボトルネック判定部502は、変数InboundTrafficの値を、所定の閾値Tinと比較する。
変数InboundTrafficの値が閾値Tinよりも大きいとき、ボトルネック判定部502は「通信装置600はボトルネックである」と判定し、判定結果を受信ボトルネック通知部503に通知する。そして、処理はステップS807に移行する。
逆に、変数InboundTrafficの値が閾値Tin以下のとき、ボトルネック判定部502は「通信装置600はボトルネックではない」と判定する。そして、ボトルネック検出処理は終了する。
ステップS807では、ボトルネック判定部502から通知を受けた受信ボトルネック通知部503が、警報(すなわちボトルネック通知)を送信する。ステップS807の詳細は、図14のステップS407と同様なので、説明を割愛する。
続いて、図14とも図22とも異なる基準にしたがってボトルネックの予測または検出が行われる第6実施形態について、図23〜25を参照して、第3実施形態との違いを主体に説明する。具体的には、第6実施形態では、第1実施形態に関して説明した「重み付け送信経路数」に基づく判定が行われる。
なお、重み付け送信経路数の計算において用いられる重みは、リンクの品質を反映する値でさえあれば、どのような重みでもよい。また、リンクの品質を測る基準は実施形態に応じて様々である。
一例として、第6実施形態では、ハローパケット720の受信間隔の揺れが、リンクの品質を測る基準として使われる。そのため、第6実施形態では、リンクテーブルの形式が第3実施形態とは異なり、図11のステップS103で行われるハローパケット受信処理の詳細が第3実施形態とは異なる。
さて、図23は、第6実施形態におけるリンクテーブルの例を示す図である。具体的には、図23のリンクテーブル611Hは、図6のタイミングチャートにおいてデータパケットD6Fを受信した時点よりも後の、ノードHにおけるリンクテーブル611である。
第3実施形態の図8のリンクテーブル611D−1および611E−1〜611E−3と比べると、図23のリンクテーブル611Hには、「品質」および「最新受信時刻のインデックス」という新たなフィールドが追加されている。また、リンクテーブル611Hには、ハローパケット受信時刻のフィールドが、1つではなく複数(具体的にはN個)ある。
品質フィールドは、リンク名で識別される隣接ノードとの間のリンクの品質を示す。そして、品質の値は、N個のハローパケット受信時刻から求められる(N−1)個の受信間隔の揺れに基づいて計算される。
また、N個のハローパケット受信時刻は、0から(N−1)までのインデックスと対応づけられて、リングバッファと同様の形式で記憶される。最新受信時刻のインデックスは、リングバッファにおけるポインタの役割を果たす。
例えば、N=20であり最新受信時刻のインデックスの値が「2」であるとする。すると、記憶されている20個のハローパケット受信時刻のうちで最新の時刻は、「2」というインデックスと対応づけられた時刻である。そして、2番目に新しい時刻は「1」というインデックスと対応づけられた時刻であり、3番目に新しい時刻は「0」というインデックスと対応づけられた時刻であり、4番目に新しい時刻は「19」というインデックスと対応づけられた時刻である。また、最も古い時刻は、「3」というインデックスと対応づけられた時刻である。
なお、以上説明したような形式のリンクテーブル611Hにおけるエントリとして、図23は具体的には次の2つのエントリが例示されている。
1つ目のエントリでは、リンク名がノードFを示し、受信トラヒックの値は、データパケットD6FやD8Fに送信トラヒックとして設定されている「6」という値である。また、品質の値は「10」である。そして、各インデックスj(0≦j≦N−1)には、ハローパケット受信時刻PFH,jが対応づけられており、最新受信時刻のインデックスの値は「2」である。また、トラヒック認識時刻はQFHである。
2つ目のエントリでは、リンク名がノードGを示す。また、ノードHは、ノードGからLDとして指定されないので、受信トラヒックの値は「0」である。そして、品質の値は「20」である。また、各インデックスj(0≦j≦N−1)には、ハローパケット受信時刻PGH,jが対応づけられており、最新受信時刻のインデックスの値は「4」である。さらに、トラヒック認識時刻はQGHである。
さて、図24は、第6実施形態におけるハローパケット受信処理のフローチャートである。ハローパケット受信処理は、図11のステップS103で行われる。以下では説明の便宜上、第6実施形態における通信装置600の例として、図23のリンクテーブル611Hを持つノードHに注目して、図24の処理について説明する。
ステップS901でリンク管理部615は、受信されたハローパケット720のLSと同じ値をリンク名として持つエントリをリンクテーブル611Hにおいて検索する。
そして、ステップS902でリンク管理部615は、検索の結果としてエントリが見つかったか否かを判定する。
エントリが見つかった場合とは、既知の隣接ノードからのハローパケット720を通信装置600(例えばノードH)が受信した場合である。この場合、処理はステップS903に移行する。
逆に、エントリが見つからなかった場合とは、未知の新たな隣接ノードからのハローパケット720を通信装置600が受信した場合である。この場合、処理はステップS905に移行する。
そして、ステップS903でリンク管理部615は、見つかったエントリにおける最新受信時刻のインデックスの値を変数idxに代入する。
さらに次のステップS904でリンク管理部615は、変数idxの値に1を足した値をNで割った剰余を計算し、計算結果を変数idxに代入する。そして、処理はステップS909に移行する。
例えば、受信されたハローパケット720のLSがノードFを示す場合、図23によれば、リンク名がノードFを示す1番目のエントリにおける最新受信時刻のインデックスの値は2である。したがって、ステップS904では、3(=2+1)をNで割った剰余が計算される。
他方、ステップS905でリンク管理部615は、リンクテーブル611Hに新規エントリを追加する。また、初期状態における新規エントリの各フィールドの値は、ヌル(null)などの無効な値である。
続くステップS906でリンク管理部615は、新規エントリにおけるリンク名として、受信されたハローパケット720のLSの値を設定する。
さらに、次のステップS907でリンク管理部615は、新規エントリにおける受信トラヒックの値を、「0」に初期化する。
また、次のステップS908でリンク管理部615は変数idxに初期値として「0」を代入する。そして、処理はステップS909に移行する。
さて、以下では説明の便宜上、ステップS901の検索の結果として見つかったか、またはステップS905で追加されたエントリのことを、「注目エントリ」という。ステップS909でリンク管理部615は、注目エントリにおいて、最新受信時刻のインデックスとして、変数idxの値を設定する。また、リンク管理部615は注目エントリにおいて、idx番目のハローパケット受信時刻のフィールドに、現在時刻を設定する。
そして、次のステップS910でリンク管理部615は、注目エントリにおけるハローパケット受信時刻から、品質を計算する。
例えば、説明の便宜上、N=20とし、受信されたハローパケット720のLSがノードFを示すものとして、ステップS910での計算について説明する。ステップS910における計算は、具体的には、以下の3つの場合があり得る。
第1の場合は、最新受信時刻のインデックスの値が0であり、かつ、1から(N−1)までの各インデックスに対応づけられたハローパケット受信時刻がまだ無効な値のままという場合である。換言すれば、第1の場合とは、ノードHがまだノードFから1回しかハローパケット720を受信していない場合のことであり、すなわち、ステップS905で新規エントリが追加された場合である。
よって、第1場合では、ハローパケット720の受信間隔は定義されない。したがって、リンク管理部615は、予め決められた定数値を、ステップS910で品質の値として得る。定数値は、例えば、予備実験の結果などに基づいて平均的に期待される品質の値でもよい。
第2の場合は、0から(N−1)までのインデックスに対応づけられたハローパケット受信時刻の中に、無効な値がない場合である。換言すれば、第2の場合とは、ノードHが既にノードFからN個以上のハローパケット720を受信した場合のことである。第2の場合、注目エントリに記録されたN個のハローパケット受信時刻から、(N−1)個の受信間隔が定義される。
説明の便宜上、N個のハローパケット受信時刻のうち最も古い時刻を「t」と表記し、最も新しい時刻を「tN−1」と表記することにする。例えば、最新受信時刻のインデックスが2の場合、「3」というインデックスに対応づけられたハローパケット受信時刻が時刻tであり、「2」というインデックスに対応づけられたハローパケット受信時刻が時刻tN−1である。
すると、(N−1)個の受信間隔の平均μは式(1)のとおりであり、(N−1)個の受信間隔の標準偏差σは式(2)のとおりである。
Figure 0005435147
Figure 0005435147
リンク管理部615は、式(2)の標準偏差σ自体を、品質の値として得てもよい。あるいは、リンク管理部615は、標準偏差σの関数として表される値を、品質の値として得てもよい。つまり、第6実施形態では、品質の値が小さいほど、品質は良い。
例えば、後述の図25のステップS1005において、品質の値は除数として利用される。そこで、品質の値がゼロになるのを防ぐため、リンク管理部615は、所定の小さな定数値αを標準偏差σに足した結果(σ+α)を、品質の値としてステップS910で得てもよい。あるいは、リンク管理部615は、所定の定数値αとβを用いて計算した値(βσ+α)など、標準偏差σの関数として表される適宜の値を、品質の値として得てもよい。
また、実施形態によっては、存在通知部616は、ハローパケット720のようなペイロードのない形式ではなく、ペイロードを持つハローパケットを送信してもよい。具体的には、存在通知部616は、リンク管理部615により計算された上記の標準偏差σの値(または品質の値)を、リンク名と対応づけてハローパケットのペイロードに格納してもよい。
そして、リンク管理部615は、受信されたハローパケットのペイロードにおいて通信装置600自身のノードIDと対応づけられている値を、上記のようにしてリンク管理部615自身が計算した標準偏差σとともに用いて、品質の値を計算してもよい。すると、あるリンクを介して互いに隣接する2つの通信装置600が、同じリンクについて、双方向の品質を考慮に入れた同じ値を得ることも可能となる。
さて、ステップS910の計算に関する第3の場合とは、0から(N−1)までのインデックスに対応づけられたハローパケット受信時刻の中に無効な値があり、かつ、有効な値が2つ以上ある場合である。換言すれば、第3の場合とは、ノードHが既にノードFから受信したハローパケット720の個数が、2以上N未満の場合である。
第3の場合、少なくとも1つ以上の受信間隔が定義される。よって、リンク管理部615は、定義可能なすべての受信間隔を用いて、第2の場合と類似の計算により、ステップS910で品質の値を計算する。
最後に、ステップS911で通知受信部601は、注目エントリの品質として、ステップS910で計算した値を設定する。
さて、図25は、第6実施形態におけるボトルネック検出処理のフローチャートである。ボトルネック検出処理は、図11のステップS105に当たる図12のデータパケット受信処理の中のステップS205で行われる。
ステップS1001で送信量通知部602は、重み付き送信経路数(換言すれば、通信装置600の潜在的な送信容量)を示す変数Potentialの値を「0」に初期化する。
そして、次のステップS1002で送信量通知部602は、ルーティングテーブル612において、GDとしてゲートウェイGW1が指定されたエントリに注目する。
さらに、次のステップS1003で送信量通知部602は、注目エントリ内の1つ目のLDの候補に注目する。そして、処理はステップS1004に移行する。
ステップS1004で送信量通知部602は、注目したLDの候補と等しいリンク名を持つ、リンクテーブル611H内のエントリから、品質の値を読み出す。
そして、ステップS1005で送信量通知部602は、ステップS1004で読み出した品質の値の逆数を変数Potentialの値に足し、得られた和を新たに変数Potentialに代入する。
さらに、次のステップS1006で送信量通知部602は、ルーティングテーブル612の注目エントリ内のすべてのLDの候補に注目し終えたか否かを判断する。
例えば、ルーティングテーブル612が、図9のルーティングテーブル612Dのように最大で3つまでLDの候補を登録可能な形式とする。この場合、「注目エントリ内のすべてのLDの候補」とは、第1〜第3候補のうち、ノードIDとして有効な値が指定されているすべての候補のことである。
そして、送信量通知部602がまだ注目していないLDの候補がルーティングテーブル612の注目エントリ内に残っている場合、処理はステップS1007に移行する。逆に、送信量通知部602がルーティングテーブル612の注目エントリ内のすべてのLDの候補に注目し終えた場合、処理はステップS1008に移行する。処理がステップS1008に移行する時点における変数Potentialの値が、重み付き送信経路数を示す。
ステップS1007で送信量通知部602は、ルーティングテーブル612の注目エントリ内の次のLDの候補に注目する。そして、処理はステップS1004に戻る。
他方、ステップS1008で送信量通知部602は、送信トラヒックの量を示す変数OutboundTrafficに、送信量記憶部613に記憶されている値を代入する。
また、次のステップS1009で送信量通知部602は、リンクテーブル611Hの1つ目のエントリに注目する。続いて、処理はステップS1010に移行する。
ステップS1010で送信量通知部602は、変数OutboundTrafficの値と、リンクテーブル611Hにおいて注目しているエントリの受信トラヒックの値との和を計算し、計算結果を変数OutboundTrafficに代入する。
そして、次のステップS1011で送信量通知部602は、リンクテーブル611Hのすべてのエントリに注目し終えたか否かを判断する。送信量通知部602がまだ注目していないエントリが残っていれば、処理はステップS1012に移行する。逆に、送信量通知部602がすべてのエントリに既に注目済みならば、処理はステップS1013に移行する。
ステップS1012で送信量通知部602は、リンクテーブル611Hの次のエントリに注目する。そして、処理はステップS1010に戻る。
他方、ステップS1013で送信量通知部602は、変数OutboundTrafficの値を変数Potentialの値で割り、得られた商をボトルネック判定部603に通知する。すると、ボトルネック判定部603は、通知された値を、所定の閾値Tpotと比較する。
上記の商の値が閾値Tpotよりも大きいとき、ボトルネック判定部603は「通信装置600はボトルネックである」と判定し、判定結果をボトルネック通知部604に通知する。そして、処理はステップS1014に移行する。
逆に、上記の商の値が閾値Tpot以下のとき、ボトルネック判定部603は「通信装置600はボトルネックではない」と判定する。そして、ボトルネック検出処理は終了する。
ステップS1014では、ボトルネック判定部603から通知を受けたボトルネック通知部604が、警報(すなわちボトルネック通知)を送信する。ステップS1014における送信の詳細は実施形態に応じて様々でよい。ステップS1014の詳細は図14のステップS407と同様なので、説明を割愛する。
以上説明した第6実施形態によれば、ボトルネックの予測または検出が、潜在的に送信可能な容量と送信トラヒックとに基づいて行われる。よって、第6実施形態では、潜在的に生じ得るネットワークトポロジの変化に応じて通信装置600がボトルネックになってしまうリスクの評価が可能である。以下に、第6実施形態における具体的な計算の例を説明する。
例えば、図4のネットワーク400において、ノードA〜Iの各々が所定期間に生成してゲートウェイGW1宛に送信するデータの量の期待値を「1」とする。すると、図4のように経路が構築されている場合、ノードA〜Iの各々で変数OutboundTrafficの値として計算される送信トラヒックは、以下のとおりである。
ノードAの送信トラヒックは「1」である。また、ノードBの送信トラヒックは「1」である。ノードCの送信トラヒックも「1」である。
そして、ノードAから送信されるデータパケット710を中継するノードDの送信トラヒックは「2」である。また、ノードB、CおよびDから送信されるデータパケット710を中継するノードEの送信トラヒックは「5」である。
そして、ノードEから送信されるデータパケット710を中継するノードFの送信トラヒックは、「6」である。他方、ノードGの送信トラヒックは「1」である。
また、ノードFから送信されるデータパケット710を中継するノードHの送信トラヒックは、「7」である。他方、ノードIの送信トラヒックは「1」である。
なお、以下では説明の簡単化のため、あるリンクを介して互いに隣接する2つの通信装置600が、同じリンクについての品質の値として、同じ値を計算するものとする。そして、例えば、各リンクの品質の値が以下のとおりであるとする。
ノードAとBの間のリンク、およびノードBとCの間のリンクの品質を「40」とする。また、ノードAとDの間のリンク、ノードBとDの間のリンク、ノードBとEの間のリンク、およびノードCとEの間のリンクの品質を「30」とする。そして、ノードDとEの間のリンクの品質を「20」とし、ノードEとFの間のリンクの品質を「10」とする。
また、ノードFとHの間のリンク、およびノードHとゲートウェイGW1の間のリンクの品質を「10」とする。そして、ノードFとGの間のリンク、ノードFとIの間のリンク、ノードGとHの間のリンク、ノードGとゲートウェイGW1の間のリンク、ノードHとIの間のリンク、およびノードIとゲートウェイGW1の間のリンクの品質を「20」とする。
また、図25における上記閾値Tpot(すなわち重み付き送信経路数当たりの送信トラヒックの上限値)を「40」とする。すると、例えば以下のようにして、ノードEでボトルネックが検出され、他のノードではボトルネックが検出されない。
例えば、ノードAは、LDの第1候補としてノードDを記憶するだけでなく、LDの第2候補としてノードBを記憶しているとする。すると、ノードAにおける重み付き送信経路数は、約0.06(=1/30+1/40)である。
したがって、ステップS1013では、「1」という送信トラヒックを重み付け送信経路数で割った約17という値が得られる。得られた値は閾値Tpot以下なので、ノードAからはボトルネック通知は送信されない。
また、ノードBは、LDの第1候補としてノードEを記憶するだけでなく、LDの第2候補と第3候補としてそれぞれノードCとDを記憶しているとする。すると、ノードBにおける重み付き送信経路数は、約0.09(=1/30+1/40+1/30)である。
したがって、ステップS1013では、「1」という送信トラヒックを重み付け送信経路数で割った約11という値が得られる。得られた値は閾値Tpot以下なので、ノードBからはボトルネック通知は送信されない。
そして、ノードCは、LDの第1候補としてノードEを記憶するだけでなく、LDの第2候補としてノードBを記憶しているとする。すると、ノードCにおける重み付き送信経路数は、約0.06(=1/30+1/40)である。
したがって、ステップS1013では、「1」という送信トラヒックを重み付け送信経路数で割った約17という値が得られる。得られた値は閾値Tpot以下なので、ノードCからはボトルネック通知は送信されない。
また、ノードDは、LDの第1候補としてノードEを記憶するだけでなく、LDの第2候補としてノードBを記憶しているとする。すると、ノードDにおける重み付き送信経路数は、約0.08(=1/20+1/30)である。
したがって、ステップS1013では、「2」という送信トラヒックを重み付け送信経路数で割った24という値が得られる。得られた値は閾値Tpot以下なので、ノードDからはボトルネック通知は送信されない。
また、ノードEは、LDの第1候補としてノードFを記憶するが、第2候補と第3候補を記憶していないとする。すると、ノードEにおける重み付き送信経路数は、0.1(=1/10)である。
したがって、ステップS1013では、「5」という送信トラヒックを重み付け送信経路数で割った50という値が得られる。得られた値は閾値Tpotより大きいので、ノードEからはボトルネック通知が送信される。
また、ノードFは、LDの第1候補としてノードHを記憶するだけでなく、LDの第2候補と第3候補としてそれぞれノードGとIを記憶しているとする。すると、ノードFにおける重み付き送信経路数は、0.2(=1/10+1/20+1/20)である。
したがって、ステップS1013では、「6」という送信トラヒックを重み付け送信経路数で割った30という値が得られる。得られた値は閾値Tpot以下なので、ノードFからはボトルネック通知は送信されない。
そして、ノードGは、LDの第1候補としてゲートウェイGW1を記憶するだけでなく、LDの第2候補としてノードHを記憶しているとする。すると、ノードGにおける重み付き送信経路数は、0.1(=1/20+1/20)である。
したがって、ステップS1013では、「1」という送信トラヒックを重み付け送信経路数で割った10という値が得られる。得られた値は閾値Tpot以下なので、ノードGからはボトルネック通知は送信されない。
また、ノードHは、LDの第1候補としてゲートウェイGW1を記憶するだけでなく、LDの第2候補と第3候補としてそれぞれノードGとIを記憶しているとする。すると、ノードHにおける重み付き送信経路数は、0.2(=1/10+1/20+1/20)である。
したがって、ステップS1013では、「7」という送信トラヒックを重み付け送信経路数で割った35という値が得られる。得られた値は閾値Tpot以下なので、ノードHからはボトルネック通知は送信されない。
また、ノードIは、LDの第1候補としてゲートウェイGW1を記憶するだけでなく、LDの第2候補としてノードHを記憶しているとする。すると、ノードIにおける重み付き送信経路数は、0.1(=1/20+1/20)である。
したがって、ステップS1013では、「1」という送信トラヒックを重み付け送信経路数で割った10という値が得られる。得られた値は閾値Tpot以下なので、ノードIからはボトルネック通知は送信されない。
さて、続いて第7実施形態について説明する。第1〜6実施形態では、ボトルネックの検出または予測には単一の条件が使われるが、複数の条件の組み合わせがボトルネックの検出または予測に使われてもよい。例えば、下記(F1)〜(F8)の条件を2つ以上任意に組み合わせた条件が利用可能である。
(F1)第2、5実施形態で使われる「単位時間あたりの受信トラヒックの量が閾値を超えている」という条件。例えば、「各LSからの受信トラヒックの総和InboundTrafficが閾値Tinを超えている」という条件。
(F2)第1、3、4実施形態で使われる「単位時間あたりの送信トラヒックの量が閾値を超えている」という条件。例えば、「各LSからの受信トラヒックの総和に、送信量記憶部613または813が記憶する値を足した値OuntboundTrafficが閾値Toutを超えている」という条件。
(F3)第6実施形態で使われる「単位時間あたりの送信トラヒックの量を重み付き送信経路数で割った値が閾値を超えている」という条件。つまり、「OuntboundTraffic/Potential>Tpot」という条件。
(F4)「単位時間あたりに通信装置が受信するデータパケットの数が閾値を超えている」という条件。無線通信か有線通信かを問わず、パケット通信では、ヘッダ処理のオーバヘッドが生じる。また、無線通信では、CSMA/CA(Carrier Sense Multiple Access/Collision Avoidance)による待ち時間(例えばキャリアセンスの時間やバックオフ時間など)のオーバヘッドが比較的大きい。よって、無線通信では特に、データパケットの量(換言すればデータパケットの長さ)だけでなく、データパケットの数も、負荷を計測するための有益な指標の1つである。よって、この(F4)や下記(F5)のような条件がボトルネックの検出または予測に使われてもよい。
(F5)「単位時間あたりに通信装置が送信しようとするデータパケットの数が閾値を超えている」という条件。つまり、「通信装置が実際に送信に成功したデータパケットの数と、通信装置が送信を試みたものの(コリジョンなどの何らかの原因で)送信に失敗したデータパケットの数との和が、閾値を超えている」という条件。
(F6)「各LSについて、当該LSからの単位時間あたりの受信トラヒックの量と、当該LSとの間のリンクの品質とを基に計算した値を、すべてのLSについて足した総和が、閾値を超えている」という条件。例えば、「各LSからの受信トラヒックの量を当該LSとの間のリンクの品質の逆数で割った値を、全LSについて足して得られる総和が、閾値を超えている」という条件。
(F7)「単位時間あたりの送信トラヒックの量と、LDとの間のリンクの品質とを基に計算した値が、閾値を超えている」という条件。例えば、「変数OutboundTrafficの値を、LDとの間のリンクの品質の逆数で割った値が、所定の閾値を超えている」という条件。条件(F7)は、LDの複数の候補にすべて注目して変数Potentialの値を計算する代わりに、最高の評価の1つのLDの候補だけに注目して変数Potentialの値を計算するように第6実施形態を変形した場合の、条件(F3)に相当する。
(F8)「単位時間あたりに通信装置が受信するデータパケットの数から、単位時間あたりに通信装置が送信するデータパケットの数を引いて得られる値が、閾値を超えている」という条件。リンクの状態によっては、通信装置がデータパケットを受信した後、転送に成功するまでに時間がかかることがある。その結果、バッファ部607または807の使用量が、増える一方で、減っていかないことがある。すると、いずれバッファオーバフローが起きるかもしれない。つまり、この条件(F8)が成立する通信装置はボトルネックになる蓋然性が高い。
ボトルネックの予測または検出には、条件(F1)〜(F8)の一部または全部を任意に組み合わせた様々な条件が利用可能である。例えば、「条件(F2)または(F3)が成立する」、「条件(F1)〜(F8)のうち少なくとも1つが成立する」、「((F1)または(F4))かつ((F2)または(F5))が成立する」などの条件が利用可能である。
さらに、条件(F1)〜(F8)のいずれに関しても、1つの閾値との比較による判定の代わりに、2つ以上の閾値を利用する判定が行われてもよい。例えば、条件(F2)を例に説明すると、ボトルネック判定部603または803は、送信トラヒックの値が以下の(G1)〜(G3)のいずれの範囲に含まれるかを判定してもよい。
(G1)第1の閾値以下
(G2)第1の閾値より大きく、かつ、第2の閾値以下
(G3)第2の閾値より大きい
そして、ボトルネック判定部603または803は、送信トラヒックの値が範囲(G1)に含まれれば「問題なし」と判定してもよい。この場合、ボトルネック通知部604または804はボトルネック通知を送信しない。
また、ボトルネック判定部603または803は、送信トラヒックの値が範囲(G2)に含まれれば「要注意」と判定してもよい。この場合、ボトルネック通知部604または804は、「通信装置600または800は、ボトルネックになるおそれがあるので、通信装置600または800の監視を行うことが望ましい」ということを表す特定の情報を含むボトルネック通知を送信する。上記特定の情報は、例えば、「警戒レベル=1」のように、単なる数値で表されてもよい。
また、ボトルネック判定部603または803は、送信トラヒックの値が範囲(G3)に含まれれば「ボトルネック」と判定してもよい。この場合、ボトルネック通知部604または804は、「通信装置600または800は、ボトルネックである」ということを表す特定の情報を含むボトルネック通知を送信する。上記特定の情報は、例えば、「警戒レベル=2」のように、単なる数値で表されてもよい。
また、ボトルネック判定部603または803は、以上のように1つの条件に関して複数の閾値を用いる場合、過去の判定の履歴から、判定結果の傾向を判断し、判定結果の変化をさらに考慮してもよい。例えば、ボトルネック判定部603または803は、「通信装置600または800の負荷は、徐々に悪化する傾向にある」と判定した場合に、ボトルネック通知部604または804にボトルネック通知の送信を依頼してもよい。
あるいは、ボトルネック判定部603または803は、「送信トラヒックの値が範囲(G2)に含まれる」という判定結果を1回得ただけの段階では、まだボトルネック通知部604または804にボトルネック通知の送信を依頼しなくてもよい。そして、「送信トラヒックの値が範囲(G2)に含まれる」という判定結果が所定の回数以上連続したら、ボトルネック判定部603または803は、ボトルネック通知部604または804にボトルネック通知の送信を依頼してもよい。
続いて、第8実施形態について説明する。第8実施形態では、ボトルネック検出処理が恒常的に行われるのではなく、特定の場合にのみ行われる。
例えば、第3実施形態の通信装置600は、データパケット710を受信するたびに、ボトルネック検出処理を行い、第4実施形態の通信装置800は、ハローパケット750を受信するたびにボトルネック検出処理を行う。このように、上記の各実施形態では、恒常的にボトルネック検出処理が行われる。しかしながら、ネットワーク上のトラヒックの量が安定しており、かつ経路も安定しているならば、恒常的なボトルネック検出処理は、必ずしも必要ではない。
そこで、第8実施形態では、ボトルネック検出処理を行うことによる各ノードの処理負荷を軽減するため、ボトルネック検出処理は、恒常的には行われない。具体的には、各ノードは、通常は、ボトルネック検出処理およびボトルネック検出処理に関連する他の処理を省略する「通常モード」で動作する。そして、各ノードは、特定の条件が成立する場合にのみ、ボトルネック検出処理およびボトルネック検出処理に関連する他の処理を行う「検出モード」で動作する。
通常モードでは、例えば、図12のステップS205または図20のステップS611に相当するボトルネック検出処理が省略される。さらに、通常モードでは、例えば以下の(H1)〜(H4)のような、ボトルネック検出処理に関連する他の処理も省略される。
(H1)図12のステップS204とS211
(H2)図15のステップS508における送信トラヒックの計算
(H3)図20のステップS608〜S610とS612
(H4)図21のステップS702とS703
また、データパケットに送信トラヒックを埋め込む実施形態においては、通常モードで送信されるデータパケットでは、送信トラヒックフィールドが省略されてもよい。あるいは、「−1」などの特定の定数が送信トラヒックフィールドに設定されてもよい。
そして、ハローパケットに送信トラヒックを埋め込む実施形態においては、通常モードで送信されるハローパケットでは、送信トラヒックフィールドと選択LDフィールドが省略されてもよい。あるいは、特定の定数が両フィールドに設定されてもよい。
また、第8実施形態において、通常モードと検出モードの切り替えの契機は、予め決められたスケジュールであってもよいし、ネットワーク全体にフラッディングされる特定の制御パケットであってもよい。
例えば、図4のネットワーク400内のノードA〜Iの各々には、「毎日、3時から3時15分の間だけ、検出モードで動作し、他の時間は通常モードで動作する」などのスケジュールが設定されていてもよい。そして、ノードA〜Iの各々は、スケジュールにしたがって動作モードを切り換えてもよい。
あるいは、通常モードから検出モードへの切り換えを命令する「検出開始命令パケット」と、検出モードから通常モードへの切り換えを命令する「検出終了命令パケット」のような、特定の制御パケットが使われてもよい。
例えば、ノードA〜Iの各々は、ゲートウェイGW1から送信されてネットワーク400全体にブロードキャストされフラッディングされる検出開始命令パケットを受信するまでは、通常モードで動作する。そして、ノードA〜Iの各々は、検出開始命令パケットを受信すると、検出モードで動作する。そして、ノードA〜Iの各々は、ゲートウェイGW1から送信されてネットワーク400全体にブロードキャストされフラッディングされる検出終了命令パケットを受信すると、動作モードを通常モードに戻す。
続いて、第9実施形態について説明する。
検出または予測されたボトルネックを警告するためのボトルネック通知の宛先は、第1実施形態では1つまたは複数の「第5の通信装置」であり、第2実施形態では1つまたは複数の「第4の通信装置」である。また、ボトルネック通知の宛先の具体例の1つとして、図4のネットワーク400内のゲートウェイGW1を例示し、他の具体例として、ネットワーク400内の全ノードを例示した。
以上のように、ボトルネック通知の宛先は、実施形態に応じて、1つの装置でもよいし、複数の装置でもよい。また、ボトルネック通知の宛先が1つの装置である場合に、宛先の装置は、ゲートウェイGW1のようなデータパケットのGDと同じであってもよいし、データパケットのGDとは別の装置でもよい。
例えば、第9実施形態では、ボトルネック通知の宛先は、予め決められた特定の1つの管理サーバである。しかし、管理サーバは、ゲートウェイGW1とは異なる装置である。
例えば、図4のネットワーク400が、さらに管理サーバを含むとする。管理サーバは、ゲートウェイGW1を介してのみ他のノードA〜Iと接続されていてもよい。この場合、ボトルネック通知は、データパケットと同じ経路をたどってゲートウェイGW1に送信され、ゲートウェイGW1によって管理サーバへと中継されてもよい。
あるいは、管理サーバは、例えば、ノードD、EおよびFと隣接するがゲートウェイGW1とは隣接しない位置に設置されていてもよい。もちろん、管理サーバは、他の場所にあってもよい。
また、ネットワーク400内に2つ以上の管理サーバがあってもよい。例えば、ノードA〜Eは、ボトルネック通知を送信する場合に第1の管理サーバを宛先として指定してもよく、他のノードF〜Iは、ボトルネック通知を送信する場合に第2の管理サーバを宛先として指定してもよい。
続いて、第10実施形態について説明する。第10実施形態では、ボトルネック通知がデータパケットのサブタイプとして定義される。
上記のように、ボトルネック通知の送信は、実施形態に応じて様々な方法で実現されてよい。例えば、データパケットやハローパケットの送信に使われるのとは別の周波数チャネルがボトルネック通知の送信に使われてもよい。また、データパケットとハローパケットはIEEE 802.15.4規格にしたがって送信され、ボトルネック通知はIEEE 802.11b規格にしたがって送信されるなど、ボトルネック通知のみ通常とは異なる通信プロトコルにしたがって送信されてもよい。
しかし、もちろん、ボトルネック通知は、データパケットやハローパケットと同じ周波数チャネルで、同じ通信プロトコルにしたがって送信されてもよい。そこで、第10実施形態では、データパケットのサブタイプとして、通常のデータパケットを示す第1のサブタイプと、ボトルネック通知を示す第2のサブタイプが定義される。
そして、ボトルネック通知は、ネットワーク内の所定の宛先(例えばゲートウェイGW1)をGDとして指定した、第2のサブタイプのデータパケットとして、ネットワーク内をマルチホップ送信される。以上の第10実施形態によれば、各ノードは、例えば802.15.4 PHY/MACチップ205と802.11b PHY/MACチップ206の双方を備える必要がないので、安価に製造することが可能である。
続いて、第11実施形態について説明する。第11実施形態では、データパケットのGDとして指定され得るゲートウェイが、ネットワーク内に複数存在する。ゲートウェイが複数ある場合も、上記各種実施形態と同様に、送信トラヒックフィールドはデータパケットに埋め込まれてもよく、ハローパケットに埋め込まれてもよい。
しかし、ゲートウェイが複数ある場合に、もし、送信トラヒックフィールドがハローパケットに含まれるならば、図19のハローパケット750ではなく図19のハローパケット760が使われる。そこで以下では第11実施形態について、図26と19を参照して説明する。
図26は、ネットワークの第2の例を示す図である。図26のネットワーク410は、ノードA〜Kと、ゲートウェイGW2と、ゲートウェイGW3を含む。
図26において2つのノードを結ぶ細い実線は、2つのノードが隣接することを示す。また、図26における太い矢印は、データパケットの送信経路を示す。
そして、ノードA〜Kの各々には、ゲートウェイGW2またはGW3が、データパケットを送信するときのGDとして設定されている。具体的には、ノードA〜EはデータパケットをゲートウェイGW2宛に送信し、ノードF〜KはデータパケットをゲートウェイGW3宛に送信する。
また、ノードAは、ノードBとDに隣接しており、ノードBは、ノードA、C、DおよびEに隣接しており、ノードCは、ノードBとEに隣接している。そして、ノードDは、ノードA、BおよびEならびにゲートウェイGW2に隣接している。また、ノードEは、ノードB、C、D、FおよびJならびにゲートウェイGW2に隣接している。
そして、ノードFは、ノードE、HおよびIに隣接しており、ノードGは、ノードH、JおよびKに隣接している。また、ノードHは、ノードF、GおよびIに隣接しており、ノードIは、ノードFとHに隣接している。そして、ノードJは、ノードEおよびGならびにゲートウェイGW3に隣接しており、ノードKは、ノードGとゲートウェイGW3に隣接している。
そして、図26の矢印に示すごとく、ノードAは、GDがゲートウェイGW2のデータパケットを送信する際、LDとしてノードDを選択する。また、ノードBとCは、GDがゲートウェイGW2のデータパケットを送信する際、LDとしてノードEを選択する。ノードDとEは、GDがゲートウェイGW2のデータパケットを送信する際、LDとしてゲートウェイGW2自体を選択する。
また、ノードEは、GDがゲートウェイGW2のデータパケットだけでなく、GDがゲートウェイGW3のデータパケットも送信する。そして、ノードEは、GDがゲートウェイGW3のデータパケットを送信する際、LDとしてノードJを選択する。
そして、ノードFは、GDがゲートウェイGW3のデータパケットを送信する際、LDとしてノードEを選択し、ノードGは、GDがゲートウェイGW3のデータパケットを送信する際、LDとしてノードKを選択する。また、ノードHは、GDがゲートウェイGW3のデータパケットを送信する際、LDとしてノードGを選択し、ノードIは、GDがゲートウェイGW3のデータパケットを送信する際、LDとしてノードFを選択する。そして、ノードJとKは、GDがゲートウェイGW3のデータパケットを送信する際、LDとしてゲートウェイGW3自体を選択する。
以上のようなネットワーク410内のノードA〜Kの各々は、例えば第3実施形態の通信装置600のように構成されていてもよい。この場合、第3実施形態のデータパケット710の形式は変更の必要がない。
あるいは、ノードA〜Kの各々は、第4実施形態の通信装置800と類似の構成を有してもよい。この場合、第4実施形態のハローパケット750の代わりに、第11実施形態では、図19のハローパケット760が使われ、各ノードの動作は、ハローパケットの形式の変更に合わせて適宜変更される。
具体的には、図19のハローパケット760は、アドホックヘッダ701と、M個の送信トラヒック情報761−1〜761−Mを含む。ここで、Mは、ネットワーク内でデータパケットのGDとなり得るゲートウェイの数であり、図26の例ではM=2である。各送信トラヒック情報761−j(1≦j≦M)は、GDと選択LDと送信トラヒックという3つのフィールドを含む。
例えば、ハローパケット760の具体例として、図26のノードEが送信するハローパケット762が図19には図示されている。なおここで、図26において、ノードA〜Kの各々が、単位時間あたりにそれぞれ生成するデータパケットの量を「1」とする。すると、ノードA〜Kの各々が単位時間あたりに送信するデータパケットの量は、矢印の本数に相当する。
さて、ハローパケット762の送信トラヒック情報761−1では、GDとしてゲートウェイGW3が指定され、選択LDとしてノードJが指定され、送信トラヒックの値は「3」である。つまり、ハローパケット762の送信トラヒック情報761−1は、下記(I1)と(I2)を表す。
(I1)ノードEが単位時間あたりに送信する、GDとしてゲートウェイGW3が指定されたデータパケットの量は、「3」である。
(I2)GDとしてゲートウェイGW3が指定されたデータパケットを送信する際、ノードEは、LDとしてノードJを選択する。
なお、(I1)は、図26において、ノードEを始点または中継点としてゲートウェイGW3を終点とする矢印が3本あることに対応する。そして、(I2)は、図26において、これらの3本の矢印がノードJを経由することに対応する。
また、ハローパケット762の送信トラヒック情報761−2では、GDとしてゲートウェイGW2が指定され、選択LDとしてゲートウェイGW2が指定され、送信トラヒックの値は「2」である。つまり、つまり、ハローパケット762の送信トラヒック情報761−2は、下記(J1)と(J2)を表す。
(J1)ノードEが単位時間あたりに送信する、GDとしてゲートウェイGW2が指定されたデータパケットの量は、「2」である。
(J2)GDとしてゲートウェイGW2が指定されたデータパケットを送信する際、ノードEは、LDとしてゲートウェイGW2を選択する。
なお、(J1)は、図26において、ノードEを中継点としてゲートウェイGW2を終点とする矢印が2本あること(そして、ノードEを始点としてゲートウェイGW2を終点とする矢印はないこと)に対応する。また、(J2)は、図26において、これらの2本の矢印が他のノードを経由せずにノードEから直接ゲートウェイGW2に向かっていることに対応する。
そして、以上のようなハローパケット760の形式に合わせて、第11実施形態では、リンクテーブル811の形式と、送信量記憶部813の記憶内容と、図20のステップS608以降の処理と、図21の処理も変更される。具体的には以下のとおりである。
図18では、リンクテーブル811の各エントリが、1つのリンク名に対応して1つの受信トラヒックの値のみを記憶する。それに対して、第11実施形態では、リンクテーブル811の各エントリは、受信トラヒックとGDのペアをM個含む。
また、第11実施形態では、M個のゲートウェイそれぞれをGDとして指定するデータパケットを通信装置800が単位時間あたりに生成する量を、送信量記憶部813が記憶する。例えば、図26のノードEにおける送信量記憶部813は、ゲートウェイGW2と対応づけて「0」という値を記憶するとともに、ゲートウェイGW3と対応づけて「1」という値を記憶する。
また、第11実施形態では、図20のステップS608以降の各ステップは、受信されたハローパケット760の送信トラヒック情報761−1〜761−Mの各々に対して(すなわち、M個のゲートウェイの各々に対して)行われる。
例えば、ハローパケット762をノードEから受信したノードDは、次のように動作する。
送信トラヒック情報761−1の選択LDも、送信トラヒック情報761−2の選択LDも、ノードDとは異なる。よって、ノードDは、リンクテーブル811においてリンク名としてノードEが指定されたエントリにおいて、ゲートウェイGW2とGW3にそれぞれ対応づけられている受信トラヒックの値を、どちらも「0」に設定する。
また、ハローパケット762をノードEから受信したノードJは、次のように動作する。
送信トラヒック情報761−1の選択LDは、ノードJ自身を示す。よって、ノードJは、リンクテーブル811においてリンク名としてノードEが指定されたエントリにおいて、ゲートウェイGW3と対応づけられている受信トラヒックを、送信トラヒック情報761−1における送信トラヒックの「3」という値に上書きする。
他方、送信トラヒック情報761−2の選択LDは、ノードJとは異なる。よって、ノードJは、リンクテーブル811においてリンク名としてノードEが指定されたエントリにおいて、ゲートウェイGW2と対応づけられている受信トラヒックを「0」に設定する。
なお、図20のステップS611のボトルネック検出処理は、具体的には、例えば図14と類似の処理である。しかし、第11実施形態では、図14の処理がM個のゲートウェイそれぞれに対して行われる。
また、第11実施形態では、図21のステップS702とS703がM個のゲートウェイそれぞれに対して行われ、ステップS704では、ハローパケット750ではなくハローパケット760が生成される。
ところで、本発明は上記実施形態に限られるものではない。例えば、上記第1〜11実施形態は、様々な観点で異なる実施形態の例であるが、複数の実施形態を適宜組み合わせることもできる。例えば、第4実施形態のようにハローパケット750に送信トラヒックを埋め込む実施形態において、ボトルネック検出処理の詳細を、第5または第6実施形態のように変形することもできる。
また、上記の説明においてもいくつかの変形について説明したが、さらに例えば下記の観点からの様々な変形も可能である。上記の各種実施形態およびその変形、ならびに下記の変形は、相互に矛盾しない限り、任意に組み合わせることが可能である。
送信トラヒックは、図10に示すようにデータパケットのみに埋め込まれてもよいし、図19に示すようにハローパケットのみに埋め込まれてもよい。しかし、データパケットとハローパケットの双方に送信トラヒックが埋め込まれてもよい。
また、アドホックネットワークのルーティングアルゴリズムには、例えば、プロアクティブ(proactive)型、リアクティブ(reactive)型、ハイブリッド型などの様々なものがあるが、実施形態に応じて、ルーティングアルゴリズムは、どのタイプでもよい。
より正確には、データパケットなどのマルチホップ送信の対象となるパケットに関するルーティングアルゴリズムは、すべてのボトルネックの予測または検出にかかる時間程度の短いタイムスパンで経路を擬似的に静的と見なせさえすれば、任意である。つまり、頻繁に(例えばデータパケットの送信のたびに)経路が切り換わるようなルーティングアルゴリズムでなければ、ルーティングアルゴリズムは任意である。
換言すれば、たとえ経路が変動するとしても、変動が緩やかに進行するタイプのルーティングアルゴリズムが使われる場合、一旦経路が構築された後は、比較的短いタイムスパンに注目すると、擬似的には、経路は、静的で安定している、と見なせる。なお、「比較的短いタイムスパン」とは、具体的には、図6や16とともに説明したような、すべてのボトルネックの予測または検出にかかる時間と同程度の時間のことである。よって、変動が緩やかに進行するタイプの任意のルーティングアルゴリズムが利用可能である。
例えば、制御パケットを用いた経路構築フェーズで先に経路を構築してから、データ送信フェーズで実際にデータパケットを送信するように設計されたルーティングアルゴリズムも利用可能である。逆に、経路構築フェーズとデータ送信フェーズを分けずに、実際にデータパケットを送信しながらネットワーク内のノードが自律的に適切な経路を見出すように設計されたルーティングアルゴリズムも利用可能である。
また、上記実施形態におけるいくつかの処理は、閾値との比較を含む。閾値との比較は、実施形態により「比較対象の数値が、閾値を超えるか否か」を判断する処理でもよいし、「比較対象の数値が、閾値以上か否か」を判断する処理でもよい。また、上記の説明では様々な用途の閾値を例示したが、各閾値の具体的な値は、実施形態に応じて適宜任意に決められてよい。
また、ルーティングテーブルにおける評価値や、リンクテーブルにおける品質などに関して、上記の例では、評価または品質が高いほど値が小さい。しかしもちろん実施形態によっては、評価または品質が高いほど値が大きいように、評価値または品質の値が定義されてもよく、定義に合わせて各ノードの動作が適宜変更されてもよい。
また、図6や16の例では、ノードA〜Iそれぞれの送信量記憶部613または813に記憶される値は、いずれも「1」である。しかし、もちろん、実施形態によっては、ノードごとに送信量記憶部613または813に記憶される値が異なっていてもよい。
また、パケットの形式は実施形態に応じて任意であり、フィールドの順序やサイズは様々であってよい。そして、上記に例示した以外のフィールドを、さらにパケットが含んでいてもよい。
例えば、各ノードは、リンク品質の評価値をハローパケットに含めてもよい。すると、互いに隣接するノードは、ハローパケットの交換をとおして、リンクの双方向の品質を認識することができる。
例えば、ノードHは、ノードFからのハローパケットの受信間隔の揺れに基づいて計算した評価値を、ノードFのノードIDと対応づけてハローパケットに含めてもよい。すると、ノードHからのハローパケットを受信したノードFは、ノードFとHの間のリンクの、ノードFからノードHへ向かう方向についての評価値を認識することが可能となる。ノードFは、重み付き送信経路数の計算において、以上のようにして認識した評価値をさらに利用してもよい。
また、実施形態によっては、例えばボトルネック通知がデータパケットのサブタイプであってもよい。その場合、図2の通信装置200は802.11b PHY/MACチップ206を持たなくてもよい。
リンクテーブルやルーティングテーブルのデータ形式も、実施形態に応じて適宜変更されてよい。例えば、テーブル以外にも、有限FIFO(First In First Out)、線形リストなどの任意のデータ構造が利用可能である。
さらに、図8と18ではリンクテーブルが受信トラヒックのフィールドを有するが、受信トラヒックは、隣接ノードと対応づけられて記憶されさえすればよい。例えば、各通信装置は、リンクテーブルとは別の記憶領域に、受信トラヒックと隣接ノードを対応づけて記憶してもよい。
また、図25の例では、重み付き送信経路数の計算において、ルーティングテーブル612内のすべてのLDの候補が使われる。しかし、実施形態によっては、LDの候補の一部のみが、重み付き送信経路数の計算に使われてもよい。
例えば、ルーティングテーブルは、評価値がベスト5までの隣接ノードをLDの候補として記憶してもよいが、重み付き送信経路数の計算においては、評価値がベスト3以内のLDの候補のみが使われてもよい。あるいは、最良の評価値との差が所定範囲内に収まるような評価値を持つLDの候補のみが、重み付き送信経路数の計算に使われてもよい。
たとえ経路の切り換えが生じたとしても、最初に代替経路として選択されるのは2番目に評価の良いLDの候補である。そして、より下位のLDの候補まで(例えば第5候補まで)代替経路として次々に試されるような状況は、しばしば生じるというわけではない。
よって、潜在的な送信容量(あるいはネットワークトポロジの変動に対する頑健性)の指標としての重み付き送信経路数の計算においては、代替経路として実際に選ばれる見込みの高い、評価値が相対的に上位のLDの候補さえ考慮に入れられれば十分である。したがって、実施形態によっては、重み付き送信経路数の計算において、必ずしもルーティングテーブル内のすべてのLDの候補が使われる必要はない。
また、上記の説明で言及した数値等の具体的な値や具体的な変数名は、説明の便宜上例示したに過ぎない。
そして、図2と3に例示した以外のハードウェアにより通信装置が実現されてもよいことは無論である。通信装置の各機能は、ASIC(Application Specific Integrated Circuit)などの専用ハードウェア回路、FPGAなどのリコンフィギュラブル回路、汎用のMPU、またはそれらの任意の組み合わせにより、実現可能である。
以上、変形例も含めて様々な実施形態について説明したが、いずれの実施形態も、アドホックネットワークの利用拡大にともなって顕在化しつつある新たな問題(すなわちボトルネックの発生)への対策を立てるうえで、非常に有益である。
例えば、新たなアドホックネットワークを構築するには、まず、複数のノードが物理的に配置される。ノードの配置は、例えば、人手により行われてもよい。そして、アドホックネットワークの運用開始の前の試験段階において、アドホックネットワーク全体の動作が検証され、必要に応じた調整が行われる。
具体的には、例えば、試験段階では、ゲートウェイがすべてのノードからのデータパケットを受信することができるか否かが監視される。監視の結果から、各ノードから送信されるデータパケットの中継が問題なく行われるか否かが判断される。
例えば、ある特定の一部のノードからのデータパケットをゲートウェイが受信することができない場合、必要に応じて、ノードの位置の調整、中継用のノードの追加、ノードのアンテナの向きの調整などが行われてもよい。しかし、アドホックネットワークの規模が大きければ、ある特定の一部のノードからのデータパケットがゲートウェイに受信されない場合に、その理由を解明することは難しい。
例えば、理由の1つとしては、「ある2つのノードの間が(例えば物理的に離れすぎているなどの理由から)物理的に通信不能であり、迂回経路も存在しない」ということも考えられる。他方、別の理由として、「いずれかのノードがボトルネックになっている」ということも考えられる。理由に応じて、具体的な対策も異なり得る。
そして、上記の各種実施形態によれば、ボトルネックのノードを速やかに発見することが可能となるので、早期にボトルネックの解消のための対策をとることも可能となる。また、ボトルネックが検出されることにより、ボトルネックの発生とそれ以外の理由との判別も自ずと可能となる。
また、アドホックネットワークの運用開始後に、例えば、「各ノードが単位時間あたりに生成して送信するデータパケットの量を増やす」といった、運用条件の変更が計画されるかもしれない。例えば、各ノードへのセンサの追加や、データパケットの送信間隔の短縮が計画されるかもしれず、そのような計画は、単位時間あたりに生成されるデータパケットの量の増加を意味する。
以上のような計画が立てられた場合にも、上記の各種実施形態によれば、「計画が実行されたとしたら、現状のネットワークが負荷に耐えられるか否か」というシミュレーションを容易に行うことができる。つまり、上記各種実施形態によれば、例えば送信量記憶部613または813に記憶されている値を変更するだけで、現在運用中のアドホックネットワーク上のデータパケットの送信を妨げることなく、ボトルネックを予測することができる。
したがって、上記の各種実施形態によれば、計画を実行に移す前に、予測される問題を把握し、問題を未然に防ぐための対策(例えばノードの追加や計画の見直しなど)をとることが可能となる。
また、試験段階にしろ、新たな計画が立てられた場合にしろ、上記の各種実施形態によれば、観測用のダミーパケットなどを実際アドホックネットワーク上に流す必要はない。したがって、上記の各種実施形態によれば、ボトルネックの予測または検出するために、通常のデータパケットの送信が圧迫されることもないし、通常のデータパケットの送信を一時的に止める必要もない。
よって、上記の各種実施形態によれば、少ない工数でボトルネックの予測または検出が可能である。また、ボトルネックの予測が行われる場合はさらに、「運用中のアドホックネットワークシステムの運用停止を招くことなく予測が可能である」という優れた効果も得られる。

Claims (6)

  1. 複数の通信装置を含むネットワークにおける第1の通信装置であって、
    第2の通信装置にデータを送る際に選択可能な、前記第1の通信装置に隣接する第3の通信装置を記憶した経路情報記憶部と、
    前記第1の通信装置に隣接する第4の通信装置から、該第4の通信装置が所定期間に前記第1の通信装置を介して送信する前記第2の通信装置宛の第1の送信データ量の通知を受信する受信部と、
    前記第1の送信データ量を含む、前記第1の通信装置から前記所定期間に送信する前記第2の通信装置宛の第2の送信データ量を前記第3の通信装置に通知する送信量通知部と、
    前記第2の送信データ量が所定の基準を超えているかを判定する判定部と、
    前記第2の送信データ量が前記所定の基準を超えていると前記判定部が判定した場合に、前記第1の通信装置が前記ネットワークにおけるボトルネックであることを、予め定められた第5の通信装置に通知する送信ボトルネック通知部と、
    を備える第1の通信装置。
  2. 前記経路情報記憶部は、前記第3の通信装置と前記第1の通信装置との間の通信品質の第1の評価値をさらに記憶し、
    前記判定部は、前記第2の送信データ量と前記第1の評価値とを基に計算した第1の値が第1の閾値より大きい場合に、前記第2の送信データ量が前記所定の基準を超えている、と判定する
    ことを特徴とする請求項1記載の第1の通信装置。
  3. 前記経路情報記憶部は、前記第2の通信装置にデータを送る際に選択可能な、前記第1の通信装置に隣接する第6の通信装置および該第6の通信装置と前記第1の通信装置との間の通信品質の第2の評価値をさらに記憶し、
    前記判定部は、前記第2の送信データ量、前記第1の評価値および第2の評価値を基に計算した第2の値が、第2の閾値より大きい場合に、前記第2の送信データ量が前記所定の基準を超えている、と判定する
    ことを特徴とする請求項2記載の第1の通信装置。
  4. 複数の通信装置を含むネットワークにおける第1の通信装置であって、
    前記第1の通信装置に隣接する1つ以上の第2の通信装置の各々から、各第2の通信装置が所定期間に送信する第3の通信装置宛のデータの第1の送信データ量の通知を受信する受信部と、
    前記1つ以上の第2の通信装置の各々から通知された前記第1の送信データ量を集約した第2の送信データ量が所定の基準を超えているかを判定する判定部と、
    前記第2の送信データ量が前記所定の基準を超えていると前記判定部が判定した場合に、前記第1の通信装置が前記ネットワークにおけるボトルネックであることを、予め定められた第4の通信装置に通知する受信ボトルネック通知部と、
    を備える第1の通信装置。
  5. 複数の通信装置を含むネットワークにおける第1の通信装置が実行する方法であって、
    第2の通信装置にデータを送る際に選択可能な、前記第1の通信装置に隣接する第3の通信装置を記憶した経路情報記憶部を参照して、前記第3の通信装置を認識し、
    前記第1の通信装置に隣接する第4の通信装置から、該第4の通信装置が前記第1の通信装置を介して所定期間に送信する前記第2の通信装置宛の第1の送信データ量の通知を受信し、
    前記第1の送信データ量を含む、前記第1の通信装置から前記所定期間に送信する前記第2の通信装置宛の第2の送信データ量を前記第3の通信装置に通知し、
    前記第2の送信データ量が所定の基準を超えているかを判定し、
    前記第2の送信データ量が前記所定の基準を超えていると判定した場合に、前記第1の通信装置が前記ネットワークにおけるボトルネックであることを、予め定められた第5の通信装置に通知する、
    ことを特徴とする方法。
  6. 複数の通信装置を含むネットワークにおける第1の通信装置が実行する方法であって、
    前記第1の通信装置に隣接する1つ以上の第2の通信装置の各々から、各第2の通信装置が所定期間に送信する第3の通信装置宛のデータの第1の送信データ量の通知を受信し、
    前記1つ以上の第2の通信装置の各々から通知された前記第1の送信データ量を集約した第2の送信データ量が所定の基準を超えているかを判定し、
    前記第2の送信データ量が前記所定の基準を超えていると判定した場合に、前記第1の通信装置が前記ネットワークにおけるボトルネックであることを、予め定められた第4の通信装置に通知する、
    ことを特徴とする方法。
JP2012546598A 2010-11-29 2010-11-29 通信装置および方法 Expired - Fee Related JP5435147B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2010/071299 WO2012073316A1 (ja) 2010-11-29 2010-11-29 通信装置および方法

Publications (2)

Publication Number Publication Date
JP5435147B2 true JP5435147B2 (ja) 2014-03-05
JPWO2012073316A1 JPWO2012073316A1 (ja) 2014-05-19

Family

ID=46171304

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012546598A Expired - Fee Related JP5435147B2 (ja) 2010-11-29 2010-11-29 通信装置および方法

Country Status (3)

Country Link
US (1) US20130279339A1 (ja)
JP (1) JP5435147B2 (ja)
WO (1) WO2012073316A1 (ja)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120155471A1 (en) * 2010-12-15 2012-06-21 Electronics And Telecommunications Research Institute Method and apparatus for routing
CN105684504A (zh) * 2013-10-28 2016-06-15 日本电气株式会社 通信系统、无线基站、业务负载均衡方法和存储有程序的存储介质
JP2015207918A (ja) * 2014-04-21 2015-11-19 富士通株式会社 設定装置、ネットワークシステム、及び設定プログラム
US10754866B2 (en) * 2015-04-30 2020-08-25 Hitachi, Ltd. Management device and management method
JP6523922B2 (ja) * 2015-10-30 2019-06-05 Kddi株式会社 基地局装置、制御方法およびプログラム
JP6479704B2 (ja) * 2016-03-29 2019-03-06 古河電気工業株式会社 ネットワークシステム、通信装置、および、通信方法
JP6414262B2 (ja) * 2017-03-24 2018-10-31 沖電気工業株式会社 無線中継装置、無線通信装置及び無線通信システム
JP2020145647A (ja) * 2019-03-08 2020-09-10 キヤノン株式会社 システム、クライアント端末、制御方法、および、プログラム

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100493234B1 (ko) * 2002-11-25 2005-06-02 한국전자통신연구원 노드 시스템, 이를 이용한 이중링 통신 시스템 및 그 통신방법
US20040213395A1 (en) * 2003-02-03 2004-10-28 Kenji Ishii Apparatus and a method for optimizing network resources employed in data communication
GB0323245D0 (en) * 2003-10-03 2003-11-05 Fujitsu Ltd Soft handover techniques
JP4218499B2 (ja) * 2003-11-07 2009-02-04 富士電機システムズ株式会社 無線端末装置、及びプログラム
KR100560748B1 (ko) * 2003-11-11 2006-03-13 삼성전자주식회사 알피알 공평 메카니즘을 이용한 대역폭 할당 방법
JP4689630B2 (ja) * 2007-01-31 2011-05-25 株式会社エヌ・ティ・ティ・ドコモ 通信端末及び通信制御方法
JP5041948B2 (ja) * 2007-09-28 2012-10-03 京セラ株式会社 無線端末及び無線通信方法

Also Published As

Publication number Publication date
JPWO2012073316A1 (ja) 2014-05-19
WO2012073316A1 (ja) 2012-06-07
US20130279339A1 (en) 2013-10-24

Similar Documents

Publication Publication Date Title
JP5435147B2 (ja) 通信装置および方法
KR101001556B1 (ko) 무선 센서 네트워크의 노드의 패킷 전송 장치 및 방법
KR100900307B1 (ko) 무선통신장치, 통신 경로 제어장치, 통신 경로 제어방법 및통신시스템
JP4571235B2 (ja) 経路制御装置、経路異常予測装置、方法、およびプログラム
JP5464266B2 (ja) 通信システムおよびネットワーク管理方法
CN109219942B (zh) 控制消息模式的方法及装置
JP6036841B2 (ja) 通信制御方法、ネットワークシステム、および通信装置
JPWO2013088498A1 (ja) 送信制御方法、ノードおよび送信制御プログラム
JP5897699B2 (ja) 端末、経路生成方法および経路生成プログラム
WO2016046869A1 (ja) 通信品質計測方法、及び通信システム
JP4796014B2 (ja) 通信制御支援装置及び通信制御支援方法並びにプログラム
US10257763B2 (en) Routing protocol for advanced metering infrastructure system
JP5058020B2 (ja) 通信システム
US9191846B2 (en) Monitoring method of multi-hop wireless network
CN105814850A (zh) 路由数据包的方法、节点和通信系统
JP6617713B2 (ja) 通信装置、通信方法、及びプログラム
US20160254979A1 (en) Communication system, common service control apparatus, data transmission method, and non-transitory computer readable medium
JP5378268B2 (ja) 無線基地局、無線通信システム、無線基地局のトラヒックレベル決定方法
JP6259622B2 (ja) 通信装置、無線ネットワークシステム、無線ネットワーク制御方法、及び、無線ネットワーク制御プログラム
JP6206105B2 (ja) 通信システム、通信方法および通信プログラム
WO2014080564A1 (ja) ネットワークシステム
JP2018019442A (ja) 通信装置、データ送信方法、及び、データ送信プログラム
JP6254824B2 (ja) 通信装置、データ送信方法、及び、データ送信プログラム
JP4311325B2 (ja) ネットワークシステムおよびノードおよび利己的なノードの検出方法
JP3804348B2 (ja) 無線通信ネットワークシステム

Legal Events

Date Code Title Description
TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20131112

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131125

R150 Certificate of patent or registration of utility model

Ref document number: 5435147

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees