JP4820464B2 - ノード装置、記憶媒体およびフレーム送信方法 - Google Patents

ノード装置、記憶媒体およびフレーム送信方法 Download PDF

Info

Publication number
JP4820464B2
JP4820464B2 JP2011524537A JP2011524537A JP4820464B2 JP 4820464 B2 JP4820464 B2 JP 4820464B2 JP 2011524537 A JP2011524537 A JP 2011524537A JP 2011524537 A JP2011524537 A JP 2011524537A JP 4820464 B2 JP4820464 B2 JP 4820464B2
Authority
JP
Japan
Prior art keywords
node device
frame
node
data frame
transmission
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
JP2011524537A
Other languages
English (en)
Other versions
JPWO2011013165A1 (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 JP4820464B2 publication Critical patent/JP4820464B2/ja
Publication of JPWO2011013165A1 publication Critical patent/JPWO2011013165A1/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
    • H04L12/00Data switching networks
    • H04L12/28Data switching networks characterised by path configuration, e.g. LAN [Local Area Networks] or WAN [Wide Area Networks]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04WWIRELESS COMMUNICATION NETWORKS
    • H04W40/00Communication routing or communication path finding
    • H04W40/02Communication route or path selection, e.g. power-based or shortest path routing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/02Topology update or discovery
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/36Backward learning
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/54Organization of routing tables
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04WWIRELESS COMMUNICATION NETWORKS
    • H04W40/00Communication routing or communication path finding
    • H04W40/24Connectivity information management, e.g. connectivity discovery or connectivity update

Landscapes

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

Description

本発明は、複数のノードを含むネットワークにおける、経路選択が可能なノード装置に関する。
ネットワーク装置に関しては、これまで非常に多くの研究がなされている。最も普及しているのは、IP(Internet
Protocol)ネットワークを利用したネットワーク装置である。また、複数のプロトコルやネットワークを収容することを目的としたMPLS(Multi Protocol Labeled Switching)は、自動的に経路を作成する機構を持つネットワーク装置に関する技術である。また、アドホックアルゴリズムの代表例としてAODV(Ad-hoc On-Demand Vector)やOLSR(Optimized Link
State Routing)がある。
IPネットワーク装置では、IPアドレスにしたがいパケットをルーティングする。IPアドレスは木構造を持つ。よって、次のような手順により、最終的に目標とする端末へパケットを伝送することができる。すなわち、パケットの宛先IPアドレスの上位オクテットから順に、宛先IPアドレスと前方一致するIPアドレスに対応するIPネットワークを管理するネットワーク装置が検索され、見つかったネットワーク装置へのパケットの伝送するが繰り返される。
ルーティングはIPアドレス体系により決定されている。どのネットワーク装置かどのIPネットワークを管理しているかは、ルーティングテーブルによって規定される。ルーティングテーブルは手動で設定されることも多いが、RIP(Routing Information Protocol)により自動的に更新されることもある。RIPとは、ネットワーク装置が管理するIPネットワークを周囲にブロードキャストし、ネットワーク装置が互いの管理するIPネットワークを確認する方式である。
MPLSでは、ネットワークが、LSR(Label Switch Router)と呼ばれるネットワーク装置間のネットワークである内部ネットワークと、外部ネットワークとに分離される。外部ネットワークからのフレームは、エッジノードと呼ばれる装置(すなわち外部ネットワークと内部ネットワークの両方にまたがるネットワーク装置)によって、内部ネットワークに取り込まれる。
このとき、外部フレームの先頭にはラベルが挿入される。各LSRは、それぞれがラベル転送テーブルを持つ。ラベル転送テーブルは、入力フレームのラベルと出力フレームのラベルおよび宛先を保持する。LSRは、入力されるフレームのラベルを取り出し、該当するラベルをラベル転送テーブルから発見し、出力フレームのラベルに書き換え、該当する宛先に送出する。
以上の処理は、ラベル転送テーブルのLDP(Label Distribution Protocol)によって行われる。LDPは、まずRIPなどによりルーティングテーブルの作成を行い、これにラベルを付加し、隣接ノード間で通知しあうプロトコルである。
AODVは、経路検索にブロードキャストを用いて、他の通信ノード装置がブロードキャストを繰り返し、目的のノード装置への経路を発見する手法である。通信ノード装置は、目標とする経路を発見するために周囲に「Route Request(RREQ)」というフレームを送出する。このフレームには、検索目標の通信ノードIDが明記されている。
周囲の通信ノード装置は、自身を検索していない場合は、新たにRREQフレームを作成して、周囲へのブロードキャストを繰り返し行う。このとき各通信ノード装置は、送り元のメッセージが、隣接するどの通信ノード装置から受信されたものなのかを記録する。RREQメッセージが目的の通信ノード装置に達したとき、その目的の通信ノード装置は、「Route Reply(RREP)」フレームを作成し、送り元のノードに対して、RREQフレームが送られてきた経路をたどるようにしてRREPフレームを送信する。このようにして、双方向の通信経路が作成されている。
OLSR(Optimized Link State Routing)では、通信ノード装置同士が定期的にフレームを交換しあうことで、ネットワーク全体を把握し、目的の通信ノードまでの経路を検出するという方式を採用している。通信ノード装置は、周期的にHELLO(ハロー)フレームを送出し、互いに存在を通知しあう。通信相手となる通信ノード装置の存在が判明したところで、次に効率的にネットワーク全体にフレームを配信するためのフラッディング用のパスが生成される。これをMPR(Multi Point Relay)と呼ぶ。
MPRにより、各通信ノード装置から効率よくフレームをネットワーク全体へブロードキャストすることができる。次にこのMPRを用いて、経路作成メッセージであるTC(Topology Control)フレームをノード装置同士が互いに配信することで、全ノード装置がネットワークトポロジーを知ることができる。
フレームを、目標とする通信ノード装置に送るには、送出元となる通信ノード装置自身が知っているネットワークトポロジーを参照し、送るべき隣接通信ノード装置にフレームを託す。隣接ノード装置も同様に処理を行い、最終的に目標ノード装置にフレームが届けられる。
アドホック無線通信ネットワークに関しては、例えば、次のような技術も開示されている。すなわち、各ノードがハローメッセージとして自ノードの存在を通知する情報と、自ノードまでのルートメトリックとを含んだ情報を放送する。そして、ハローメッセージを受信した他ノードは、受信したルートメトリックにハローメッセージを放送してきたノードと自ノードとの間のルートのためのルートメトリックを追加し、追加後のルートメトリックを使用する。ここでのルートメトリックは、ホップ数、リンク品質等の因子により算出される、送信元と宛先とのコストを表す値である。
特表2006−526937号公報 特開2003−273964号公報 特開2002−271399号公報 特開2006−340165号公報 特開2001−298488号公報 特開2006−33275号公報 特許4173842号公報
岩尾忠重、山田健二、野村浩司、細川武司著「多用途向け有線センサネットワーク:S−wire」雑誌FUJITSU、2006年5月号(VOL.57、NO.3)、285〜290ページ
上記のように、ネットワーク技術に関しては多くの研究がなされているが、ネットワーク内の各ノード装置がネットワークトポロジを認識することを前提とした各種ネットワークシステムには、次のような問題がある。すなわち、ネットワーク環境は動的に変わりうるため、ノード装置が、事前に経路生成フェーズで認識したネットワークトポロジに基づいて、データ送信フェーズでデータを送信しようとしても、必ずしも送信に成功するとは限らない。
そこで本発明は、データが送信される時点でのネットワークトポロジを各ノード装置が認識していなくても、ネットワーク全体としては、各ノード装置による自律分散処理の結果として、適切な経路が選択されてデータが送信される技術を提供することを目的とする。
一態様においてはノード装置が提供される。前記ノード装置は、受信手段と、第1の記憶手段と、第2の記憶手段と、更新手段と、送信手段と、バックトラック手段とを備える。
前記受信手段は、複数の隣接ノード装置のうち任意の1つからフレームを受信する。
前記第1の記憶手段は、送信対象フレームを識別するフレーム識別情報と、前記複数の隣接ノード装置のうちで前記送信対象フレームの送信先である送信先隣接ノード装置を識別する送信先隣接ノード識別情報と、該送信対象フレームを最初に送信してきた隣接ノード装置を識別する起源ノード識別情報とを対応付けて記憶する。
前記第2の記憶手段は、フレームの最終宛先に対応付けて、前記複数の隣接ノード装置それぞれへの送信可能性を表す送信可能性情報を記憶する。
前記更新手段は、前記受信手段が受信した受信フレームを識別する受信フレーム識別情報が、前記第1の記憶手段に前記フレーム識別情報として記憶されている場合に、次のように動作する。すなわち、前記更新手段は、前記受信フレームに指定された最終宛先である受信フレーム宛先に対応付けられて前記第2の記憶手段に記憶されている前記送信可能性情報を、前記第1の記憶手段に前記受信フレーム識別情報と対応付けられて記憶されている前記送信先隣接ノード識別情報により識別される第1の隣接ノード装置への前記送信可能性が送信不能を示すように、更新する。
前記送信手段は、前記受信フレーム宛先に対応付けられて前記第2の記憶手段に記憶されている前記送信可能性情報に基づいて、前記複数の隣接ノード装置の中から、送信可能な第2の隣接ノード装置を選択し、前記第2の隣接ノード装置へ前記受信フレームを送信する。
前記バックトラック手段は、前記第2の記憶手段の送信可能性情報において、前記複数の隣接ノード装置の中に送信可能なものがなく、かつ前記受信フレーム識別情報が前記第1の記憶手段に前記フレーム識別情報として記憶されている場合に、次のように動作する。すなわち、前記バックトラック手段は、前記第1の記憶手段において前記受信フレーム識別情報に対応付けられた前記起源ノード識別情報として記憶される第3の隣接ノード装置へ前記受信フレームを送信する。
上記ノード装置によれば、上記ノード装置が送信したことのあるフレームがネットワークを経由して上記ノード装置自身に受信されると、前回選択した隣接ノード装置とは別の隣接ノード装置が送信先として試される。そして、送信可能な隣接ノード装置がないと、バックトラック手段によって上記第3の隣接ノード装置へと受信フレームが送信されるので、第3の隣接ノード装置に別の新たな経路を試させることができる。
よって、上記ノード装置と同様の複数のノード装置を含むネットワークにおいては、ネットワークトポロジを各ノード装置が認識していなくても、次のような効果が得られる。すなわち、ネットワーク全体としては、各ノード装置による自律分散処理の結果として、適切な経路が選択されてデータが送信される
ネットワーク構成の第1の例を示す図である。 ネットワーク構成の第2の例を示す図である。 第1実施形態におけるノード装置の構成を示す機能ブロック図である。 第1実施形態におけるノード装置のハードウェア構成を示す図である。 1つのノード装置に注目して重みの学習について説明する図である。 図1のネットワーク1において動的かつ自律分散的に経路が選択される様子を説明する図である。 フレームの例を示す図である。 図3のバッファ部109に格納されるデータの例を示す図である。 図3の隣接ノード管理テーブル103の例を示す図である。 図3の重み付けテーブル104の例を示す図である。 図10の重み付けテーブル104−1−N3の変化を説明する図である。 図3のFID管理テーブル105の例を示す図(その1)である。 図3のFID管理テーブル105の例を示す図(その2)である。 フレーム受信処理のフローチャートである。 図14のステップS203におけるハローフレーム受信処理のフローチャートである。 ハローフレーム送信処理のフローチャートである。 隣接ノード管理テーブル103のエージング処理のフローチャートである。 重み付けテーブル104のエージング処理のフローチャートである。 FID管理テーブル105のエージング処理のフローチャートである。 図14のステップS205におけるデータフレーム受信処理のフローチャート(その1)である。 図14のステップS205におけるデータフレーム受信処理のフローチャート(その2)である。 図14のステップS205におけるデータフレーム受信処理のフローチャート(その3)である。 図14のステップS205におけるデータフレーム受信処理のフローチャート(その4)である。 図21のステップS812aにおける重み付けテーブル調整処理のフローチャートである。 図14のステップS206におけるACKフレーム受信処理のフローチャートである。 ACKフレームがタイムアウト時刻までに受信されない場合の処理を示すフローチャートである。 ノード装置100がGSとなってデータフレームを送信する場合の送信処理のフローチャート(その1)である。 ノード装置100がGSとなってデータフレームを送信する場合の送信処理のフローチャート(その2)である。 GSにもなりうるノード装置100が、データフレーム受信処理の一部として図23の処理の代わりに行う処理のフローチャートである。 経路を探索するための探索空間を表す探索木の形式で、図6における経路選択を説明する図である。 ハローフレームの送受信による隣接ノードの認識と図6の経路選択とを示すタイミングチャートである。 第2実施形態が適用される有線ネットワークの例を示す図である。 第2実施形態における隣接ノード管理テーブル103aの例を示す図である。 ループ判定があるがバックトラック動作のない第1比較例について説明する図(その1)である。 ループ判定があるがバックトラック動作のない第1比較例について説明する図(その2)である。 擬似的なバックトラック動作は行うがループ判定を行わない第2比較例について説明する図である。
以下、いくつかの実施形態について、図面を参照しながら詳細に説明する。具体的には、まず図1と図2を参照してネットワーク構成の例を説明し、図3〜31を参照して第1実施形態について説明する。その後、図32〜33を参照して第2実施形態について説明し、その他の実施形態についても説明する。最後に、図34〜36に示す2つの比較例と比べながら、各実施形態に共通の利点について説明する。
図1はネットワーク構成の第1の例を示す図である。図1のネットワーク1は、以下の各実施形態を適用することが可能なアドホックネットワークの一例であり、複数のノード装置を含む。なお、以下では、ネットワークトポロジの観点からの説明においては、「ノード装置」を単に「ノード」ということもある。
ネットワーク1内の各ノード装置には、ネットワーク1内で一意な識別情報(以下、「ノードID(identification)」という)が予め割り当てられている。以下では、参照符号「N」がノードIDを示すものとし、例えば、ノードIDとしてNが割り当てられたノード装置を「ノード装置N」のように参照する。なお、以下では、ノード装置Nにとって自分自身に割り当てられたノードIDであるNを、ノード装置Nの「自ノードID」ともいう(図1では1≦i≦7)。
また、図1ではリンクを実線で表している。具体的には、ネットワーク1のトポロジは次のとおりである。すなわち、ノード装置NとNの間、ノード装置NとNの間、ノード装置NとNの間、ノード装置NとNの間、ノード装置NとNの間、ノード装置NとNの間、ノード装置NとNの間、およびノード装置NとNの間に、各々リンクが存在する。
なお、以下で「リンク」とは、無線リンクでもよく、有線リンクでもよい。ノード装置NとNが、他のノード装置Nによる中継を経ずに直接、無線により情報を通信しあうことができるとき、「ノード装置NとNの間に無線リンクが存在する」という(図1では1≦i,j,k≦7)。また、ノード装置NとNの間が直接ケーブルで接続されており、ノード装置NとNがケーブルを介して情報を通信しあうことができるとき、「ノード装置NとNの間に有線リンクが存在する」という。
また、ノード装置NとNの間に無線または有線のリンクが存在するとき、「ノード装置NとNは互いに隣接している」という。換言すれば、ノード装置Nにとってノード装置Nは隣接ノード装置であり、ノード装置Nにとってノード装置Nは隣接ノード装置である。
なお、図1のネットワーク1には、新たなノード装置が追加されることもありうるし、ノード装置N〜Nのいずれかが撤去されてネットワーク1からは消滅することもありうる。また、リンクは固定的ではなく、動的に変化しうる。
例えば、天候や遮蔽物などの影響で、ノード装置NとNの間に無線リンクが新たに確立されたり、今まで確立されていた無線リンクが消滅したりすることがある。ノード装置が可動式であれば、ノード装置間の距離の変動によってリンクの有無が変化することもある。また、ケーブルの接続替えにより、新たな有線リンクが確立されたり、今まで存在していた有線リンクが消滅したりすることがあり、ケーブルの切断等の障害によって有線リンクが消滅することもある。
以下に説明する各実施形態によれば、このようにノードやリンクが動的に変化する環境においても、データが送信される時点でのネットワーク1の状況に応じて、利用可能で適切な経路が動的に見出されて選択されながら、データの送信が行われる。しかも、動的に変化するネットワーク1全体のトポロジを各ノード装置N〜Nが認識する必要なしに、動的なトポロジの変化に応じた経路選択が自律分散的に実現される。
ところで、詳しくは図7とともに後述するが、以下ではノード装置間で送受信されるPDU(Protocol
Data Unit)を「フレーム」と称する。ネットワーク1内でのデータの送受信はフレームを用いて行われるが、フレームの送信元のノード装置を以下では「GS(Global Source)」といい、フレームの宛先のノード装置を以下では「GD(Global
Destination)」という。
例えば、ノード装置NがGSでノード装置NがGDの場合、ネットワーク1においてノード装置NとNは隣接していないので、他のノード装置によってフレームが中継され、その結果として、フレームはノード装置Nに到達する。例えば、フレームは、ノード装置Nからノード装置Nへ送信され、ノード装置Nからノード装置Nへ送信され、ノード装置Nからノード装置Nへ送信されるかもしれない。以下では経路を、〈N,N,N,N〉のようなタプル(tuple)で表す。
経路〈N,N,N,N〉の例において、例えばノード装置Nからノード装置Nへフレームが送信されるとき、フレームの最終的な宛先は、GDであるノード装置Nだが、フレームの直接的な宛先は、ノード装置Nに隣接するノード装置Nである。以下では、このように互いに隣接する2つのノード装置間でのフレームの送信において、フレームの送信元のノード装置を「LS(Local Source)」といい、フレームの宛先のノード装置を「LD(Local
Destination)」という。例えば、上記のようにフレームがノード装置Nからノード装置NとNを経由してノード装置Nへと中継される場合のLSとLDは次のとおりである。
GSでもあるノード装置Nから、ノード装置Nに隣接するノード装置Nへと、最初にフレームが送信されるとき、LSはノード装置Nであり、LDはノード装置Nである。続いて、ノード装置Nから、ノード装置Nに隣接するノード装置Nへと、フレームが送信されるとき、LSはノード装置Nであり、LDはノード装置Nである。そして、ノード装置Nから、ノード装置Nに隣接しておりGDでもあるノード装置Nへとフレームが送信されるとき、LSはノード装置Nであり、LDはノード装置Nである。
なお、ネットワーク1内の1つまたは複数のノード装置が、ネットワーク1とは別のネットワーク(以下「外部ネットワーク」という)に属する不図示のネットワーク機器と接続されていてもよい。
例えば、データ管理サーバを含む外部ネットワークのゲートウェイ装置に、有線リンクまたは無線リンクによってノード装置Nが接続されていてもよい。そして、ノード装置NがGDとして指定されてネットワーク1内で送信されるデータは、ノード装置Nからゲートウェイ装置を介してデータ管理サーバに送信され、データ管理サーバで管理されてもよい。
続いて、図2を参照して他のネットワークの例について説明する。図2は、ネットワーク構成の第2の例を示す図である。図2のネットワーク2も、以下の各実施形態を適用することが可能なアドホックネットワークの一例であり、複数のノード装置を含む。また、図1のネットワーク1と同様に、ネットワーク2も、不図示の外部ネットワークと接続されていてもよい。
ネットワーク2はノード装置N101〜N120を含む。図2は、ノード装置N101〜N120のうち、1つのノード装置N105に注目して表現した図である。すなわち、太い実線の丸で示したノード装置N105は、直接通信することが可能な、隣接する3つのノード装置N107、N111、およびN112の存在とノードIDさえ認識していればよく、ネットワーク2全体のトポロジを認識する必要はない。ノード装置N105は、ネットワーク2のトポロジどころか、ネットワーク2内に存在するノード装置の個数を認識する必要もないし、ノード装置N105に隣接していないノード装置のノードIDを予め知っている必要もない。
図2では、ノード装置N105が認識する部分を実線で表し、ノード装置N105が認識する必要のない部分を破線で表してある。すなわち、図2では、ノード装置N105から見てホップ数1以内の範囲に存在する以下のものだけが、実線で示してある。
・ノード装置N105自身
・ノード装置N105に隣接する3つのノード装置N107、N111、およびN112
・ノード装置N105を3つの隣接ノード装置N107、N111、およびN112にそれぞれ接続する3本のリンク
以下に説明する各実施形態によれば、ネットワーク内の各ノード装置は、上記のノード装置N105のように、隣接ノード装置さえ認識していればよい。したがって、ネットワークの規模が増大しても「各ノード装置がネットワークトポロジを認識するために制御情報の通信を行い、制御情報の通信のせいでネットワークの負荷が高まり、通信システム全体としての性能が悪化する」といった事態に陥ることはない。
以下では具体的に、図1のネットワーク1や図2のネットワーク2など任意のトポロジを有するネットワークに適用可能な実施形態について説明する。まず、図3〜図31を参照して第1実施形態について説明し、他の実施形態については、第1実施形態との違いを中心に説明する。
第1実施形態に関しては、まず、図3と図4を参照してノード装置の構成を説明し、図5を参照してノード装置の動作の概要を説明する。そして、「各ノード装置が自律分散的に図5のように振る舞うことで、図1のネットワーク1全体ではどのようにして動的な経路選択が実現されるのか」ということについて、図6を参照して概要を説明する。
その後、図7を参照してフレームの例を説明し、図8〜図13を参照して各ノード装置が記憶する各種情報の例を説明し、図14〜図29を参照して各ノード装置が行う処理の
詳細を説明する。そして、図7〜図29の詳細を踏まえて、再度、ネットワーク1全体としての振る舞いについて、図30と図31を参照して説明する。
さて、図3は、第1実施形態におけるノード装置の構成を示す機能ブロック図である。図1または図2の各ノード装置は、具体的には、例えば図3に示されるノード装置100である。
ノード装置100は、フレームを受信する受信部101と、フレームを送信する送信部102を備える。また、ノード装置100は、フレームの送信のために用いる各種情報を格納するため、隣接ノード管理テーブル103、重み付けテーブル104、およびFID(Frame IDentification)管理テーブル105を備える。
ノード装置100はさらに、受信部101が受信したフレームの種類を判別するフレーム分岐処理部106を備える。詳しい形式は図7とともに後述するが、第1実施形態では、「データフレーム」、「ハローフレーム」、および「ACK(ACKnowledgment)フレーム」という少なくとも3種類のフレームが使われる。
ノード装置100は、ACKフレームに関する処理を行うACK処理部107と、ハローフレームの受信に応じて処理を行うリンク管理部108を備える。また、ノード装置100は、データフレームの受信に応じた処理を行うために、バッファ部109とデータフレーム処理部110を備えている。ノード装置100はさらに、上位層処理部111、ハローフレーム生成部112、およびFID生成部113も備えている。
ノード装置100の各部は以下のように動作する。
受信部101がフレームを受信し、受信したフレームをフレーム分岐処理部106に出力する。すると、フレーム分岐処理部106がフレームの種別を判別する。
ハローフレームが受信された場合、フレーム分岐処理部106は、受信されたハローフレームをリンク管理部108に出力する。リンク管理部108は、隣接ノード管理テーブル103を管理しており、さらに、重み付けテーブル104の管理にも関与している。
ここで、ハローフレームは、制御情報を通信するための制御フレームの一種であり、具体的には、ノード装置100が自分自身の存在を他のノード装置に通知するためのフレームである。よって、詳しくは図15とともに後述するとおり、リンク管理部108は、ハローフレームの受信を契機として隣接ノード装置の存在を認識し、認識結果を隣接ノード管理テーブル103に反映させる。すなわち、隣接ノード管理テーブル103は、ノード装置100に隣接する他のノード装置を、ノード装置100が記憶しておくためのテーブルである。
なお、ネットワークの状況は動的に変化しうるので、場合によっては、今まで隣接ノード装置としてリンク管理部108に認識されていた他のノード装置が、隣接ノード装置として認識不能となるかもしれない。よって、詳しくは図17とともに後述するとおり、リンク管理部108は、隣接ノード装置として認識不能となったノード装置に関するエントリを隣接ノード管理テーブル103から削除するためのエージング処理も行う。
また、第1実施形態においてリンク管理部108は、隣接ノード装置の変化にともなって重み付けテーブル104の追加、削除、あるいは更新を行う。
ここで、重み付けテーブル104は、フレームをどの隣接ノード装置に送信するかを決定するための情報をGDごとに管理するためのテーブルである。図3にはM個のGDそれぞれに対応して設けられた重み付けテーブル104−1〜104−Mが示されている。本明細書において「重み付けテーブル104」とは、重み付けテーブル104−1〜104−Mの総称である。また、ノード装置100の運用が開始される時点では、重み付けテーブル104は存在せず、M=0である。
具体的には、重み付けテーブル104は、「最終的にフレームをGDに到達させるためには、ノード装置100自身はどの隣接ノード装置をLDとして選択することができるか」ということをGDごとに管理している。換言すれば、重み付けテーブル104は、フレームのGDごとに、ノード装置100に隣接する1つ以上のノード装置に関して、LDとして選択する際の優先度を、重みとして表して保持している。
別の観点から言えば、ある隣接ノード装置が「LDとして選択可能である」とは、当該隣接ノード装置へのフレームの送信可能性が「送信可能」であることを意味する。また、ある隣接ノード装置が「LDとして選択不能である」とは、当該隣接ノード装置へのフレームの送信可能性が「送信不能」であることを意味し、当該隣接ノード装置の優先度が、「送信不能」に対応する所定の最低優先度であることを意味する。
したがって、ネットワークの状況の変化に応じてノード装置100の隣接ノード装置が変化すると、リンク管理部108は、詳しくは図15および図17とともに後述するとおり、隣接ノード装置の変化に応じて重み付けテーブル104を追加、更新、または削除する。
また、ACKフレームが受信された場合、フレーム分岐処理部106は、受信されたACKフレームをACK処理部107に出力する。ここで、ACKフレームは、制御フレームの一種であり、ノード装置100が送信したデータフレームのLDであるノード装置から、ノード装置100に、データフレームの受信を通知するためのフレームである。
したがって、ACKフレームの受信は、データフレームの送信が成功したことを意味し、所定の時間が経過してもACKフレームが受信されずにタイムアウトとなることは、データフレームの送信に失敗したことを意味する。ACK処理部107は、後述の図25に示すACKフレーム受信のタイムアウト監視を行う。
バッファ部109は、データフレームの送信失敗と再送に備えて、データフレームを格納している。よって、詳しくは図25とともに後述するとおり、ACK処理部107は、ACKフレームの受信を契機としてデータフレームの送信成功を認識すると、不要になったデータフレームをバッファ部109から削除する。また、ACK処理部107はデータフレームの送信の成否をデータフレーム処理部110に通知する。
また、データフレームが受信された場合、フレーム分岐処理部106は、受信されたデータフレームをバッファ部109に格納するとともに、後述の図20〜図23の処理を行うようデータフレーム処理部110に依頼する。
ここで、データフレームは、GSであるノード装置が、GDであるノード装置に伝達しようとするデータを、ペイロードとして含むフレームである。換言すれば、第1実施形態におけるフレームが定義される層よりも上位の層で定義されるプロトコルのPDUが、ペイロードとしてデータフレームに含まれる。上位層処理部111は、ノード装置100がGSまたはGDである場合に、データフレームにペイロードとして含まれる上位層のPDUを処理する。
フレーム分岐処理部106からデータフレームの処理の依頼を受けたデータフレーム処理部110の動作の概要は、以下のとおりである。
データフレーム処理部110は、受信部101が受信したデータフレームに対するACKフレームの送信を送信部102に依頼する。また、データフレーム処理部110は、受信されたデータフレームのGDの値がノード装置100の自ノードIDと等しいか否かを判断する。そして、受信されたデータフレームのGDの値がノード装置100の自ノードIDと異なる場合、データフレーム処理部110は、FID管理テーブル105を参照することにより、今回の受信が下記(A1)と(A2)のどちらに該当するのかを判断する。
(A1)過去にノード装置100がLSとなって送信したデータフレームが、ネットワーク内を中継されているうちにノード装置100に戻ってきて、受信部101で受信された。
(A2)上記(A1)以外の新たなデータフレームが受信部101で受信された。
データフレーム処理部110は、今回の受信が(A2)に該当すると判断すると、重み付けテーブル104を参照して、受信したデータフレームを転送するためにLDとして指定する隣接ノード装置を選択し、データフレームの転送を送信部102に依頼する。
他方、データフレーム処理部110は、今回の受信が(A1)に該当すると判断すると、過去にLDとして選択した隣接ノード装置が、適切なLDではなかったと認識し、認識の結果を重み付けテーブル104に反映させる。そして、データフレーム処理部110は、重み付けテーブル104を参照して、LDとして選択可能な隣接ノード装置が他にまだ残っているか否かを判断する。
データフレーム処理部110は、また、ACK処理部107からのデータフレーム送信成功あるいは送信失敗の通知を受け、該データフレームのLDとして選択した隣接ノード装置が適切か否かの認識をし、その認識結果を重み付けテーブル104に反映させる。
なお、ノード装置100に隣接する、あるノード装置Nが「LDとして選択可能である」とは、直感的には「隣接ノード装置NをLDとして選択してみて、フレームが成功裡にGDまで到達するか否かを試してみる価値がある」という意味である。具体的には、ノード装置Nが「LDとして選択可能である」とは、「下記(B1)でもなく下記(B2)でもない」という意味である。なお、「選択可能」という語の、より詳細な意味については、後述の図5に関する説明と、図22に関する(F1)〜(F2)と(G1)〜(G4)の説明から明らかである。
(B1)ノード装置100が隣接ノード装置Nを過去にLDとして選択した結果、ループ等の何らかの失敗が発生したことがあり、「ノード装置NはLDとして不適切である」と既に判明している。
(B2)今回受信部101が受信したデータフレームを、かつて受信部101が初めて受信したときのLS(以下「Original
Local Source」と称し、「OLS」と略す)が、ノード装置Nであった。
データフレーム処理部110は、もしLDとして選択可能な隣接ノード装置が他にまだ残っていれば、選択可能な隣接ノード装置を選んでLDとして指定し、データフレームの転送を送信部102に依頼する。逆に、LDとして選択可能な隣接ノード装置がもう残っていなければ、データフレーム処理部110は、下記(C1)または(C2)のように動作する。
(C1)今回受信したデータフレームのGSがノード装置100以外である場合、データフレーム処理部110は、OLSへデータフレームを返送するため、OLSをLDとして選択し、データフレームの転送を送信部102に依頼する。この動作は、OLSである隣接ノード装置に「ノード装置100をLDとして選択することは不適切である」と認識させるための動作であり、後述するとおり経路探索におけるバックトラックに相当する。
(C2)今回受信したデータフレームのGSがノード装置100自身である場合、このデータフレームを元々生成したのは上位層処理部111である。よって、データフレーム処理部110は、上位層処理部111に対してデータフレームの送信失敗を通知し、バッファ部109に格納されているデータフレームを破棄する。
なお、以上のようなデータフレーム処理部110の動作を実現するためには、データフレーム処理部110は上記(A1)と(A2)の区別をすることが必要である。そのため第1実施形態では、データフレームを一意に識別することのできるフレーム識別情報が各データフレームに含まれており、フレーム識別情報をFID管理テーブル105が記憶している。
第1実施形態でのフレーム識別情報は、具体的には、データフレームのGSであるノード装置のノードIDと、FIDとの組み合わせである。FIDは、ある1つのノード装置がGSとなって送信する複数のフレームの各々を一意に識別する識別情報であり、例えば所定のビット数のシーケンス番号でもよいし、タイムスタンプでもよい。
つまり、個々のノード装置は独立にFIDを生成するため、異なる複数のノード装置が偶然同じFIDを生成することもありうる。しかし、フレーム識別情報は、FID単独ではなく、データフレームのGSであるノード装置のノードIDと、FIDとの組み合わせである。そして、ノードIDは、上記のとおりネットワーク内でノード装置を一意に識別する情報である。したがって、たとえ異なる複数のノード装置が偶然同じFIDを生成したとしても、異なるノード装置がそれぞれGSとなって送信したフレームは、異なるフレーム識別情報を有するので、区別可能である。
なお、フレーム識別情報は、データフレームが1つ以上のノード装置を経由してネットワーク内を転送されても、データフレームを中継するノード装置によって書き換えられることはなく、したがって変化しない。データフレーム処理部110は、送信部102に送信を依頼したデータフレームのフレーム識別情報をFID管理テーブル105に記録することにより、後にデータフレームがノード装置100自身に戻ってきたとき、上記(A1)に該当すると認識することができる。
なお、ノード装置100は、フレームの受信を契機としないその他の処理も行う。具体的には、ハローフレーム生成部112が、FID生成部113の生成するFIDを利用して定期的にハローフレームを生成し、送信部102に出力する。すると送信部102がハローフレームを送信するので、ノード装置100は、ノード装置100自身の存在を定期的に周囲に通知することができる。
また、上位層処理部111は任意のタイミングで、データフレームにペイロードとして含めて送信する対象のデータをデータフレーム処理部110に出力することができる。すると、データフレーム処理部110は、上位層処理部111の要求に応じてデータフレームを生成し、送信部102にデータフレームの送信を指示する。こうして、ノード装置100は、自らGSとなることができる。
図4は、第1実施形態におけるノード装置のハードウェア構成を示す図である。図3のノード装置100は、例えば図4に示す各種ハードウェアにより実現されてもよい。
図4の例では、ノード装置100は、MPU(MicroProcessing Unit)201、PHY(PHYsical layer)チップ202、およびタイマIC(Integrated
Circuit)203を備える。また、ノード装置100は、DRAM(Dynamic Random access
Memory)204、フラッシュメモリ205、および無線モジュール206を備える。
MPU201とPHYチップ202の間を接続する通信インタフェースは、MII/MDIO(Media
Independent Interface or Management Data Input/Output)207である。MIIとMDIOはいずれも、物理層とMAC副層(Media Access Control sublayer)との間のインタフェースである。また、MPU201とタイマIC203は、IC/PIO(Inter-Integrated Circuit or Parallel Input/Output)バス208を介して接続されている。そして、DRAM204とフラッシュメモリ205と無線モジュール206は、PCI(Peripheral Component Interconnect)バス209を介してMPU201に接続されている。
MPU201は、不揮発性記憶装置の一種であるフラッシュメモリ205に格納されたファームウェアなどのプログラムをDRAM204にロードし、DRAM204をワーキングメモリとして使いながら各種処理を実行する。MPU201は、プログラムを実行することで、図3のフレーム分岐処理部106、ACK処理部107、リンク管理部108、データフレーム処理部110、上位層処理部111、ハローフレーム生成部112、およびFID生成部113として動作することができる。
なお、ファームウェアなどのプログラムは、コンピュータ読み取り可能な記憶媒体に格納されて提供され、ノード装置100にインストールされてもよい。または、プログラムは、ネットワークからPHYチップ202もしくは無線モジュール206を介してダウンロードされ、ノード装置100にインストールされてもよい。
なお、実施形態に応じて、DRAM204やフラッシュメモリ205以外の他の種類の記憶装置が利用されてもよい。例えば、ノード装置100は、CAM(Content Addressable Memory)、SRAM(Static
Random Access Memory)、SDRAM(Synchronous Dynamic Random
Access Memory)などの記憶装置を有してもよい。
図3の隣接ノード管理テーブル103、重み付けテーブル104、FID管理テーブル105、およびバッファ部109は、DRAM204、フラッシュメモリ205、あるいは不図示のその他の記憶装置により実現される。また、フラッシュメモリ205は、プログラムだけでなく、ノード装置100のノードIDなど、ノード装置100に固有の情報も記憶している。
PHYチップ202は、有線接続における物理層の処理を行う回路である。第1実施形態は無線ネットワークに適用されるので、第1実施形態では、ノード装置100はPHYチップ202を備えなくてもよい。しかし、ノード装置100と外部ネットワークとの接続のために、ノード装置100はPHYチップ202を備えていてもよい。
例えば、ノード装置100は、イーサネット(登録商標)規格にしたがった有線LANポートを備え、有線LANポートに接続されたケーブルを介して外部ネットワークのゲートウェイ装置などに接続されていてもよい。
その場合、MPU201は、イーサネットフレームを生成し、MII/MDIO207を介してPHYチップ202に出力することができる。そして、PHYチップ202は、MPU201からの出力(すなわちイーサネットフレームを表す論理信号)を、ケーブルの種類に応じた信号(つまり電気信号または光信号)に変換し、ケーブルに出力する。こうして、ノード装置100はPHYチップ202を用いて外部ネットワークにデータを送信することができる。
また、PHYチップ202は、ケーブルと有線LANポートを介して外部ネットワークから入力される電気信号または光信号を、論理信号に変換し、MII/MDIO207を介してMPU201に出力することもできる。こうして、ノード装置100はPHYチップ202を用いて外部ネットワークからデータを受信することができる。
無線モジュール206は、無線接続における物理層の処理を行うハードウェアである。無線モジュール206は、例えば、アンテナ、ADC(Analog-to-Digital Converter)、DAC(Digital-to-Analog
Converter)、変調器、復調器、符号化器、復号器などを含む。
第1実施形態では、図3の受信部101と送信部102は、図4の無線モジュール206により実現される。つまり、第1実施形態では、ネットワーク内のリンクは無線リンクである。もちろん、後述の第2および第3実施形態のように、有線リンクが存在する実施形態も可能である。
タイマIC203は、設定された時間が経過するまでカウントアップ動作を行い、設定された時間が経過すると割り込み信号を出力する。例えば、タイマIC203は、隣接ノード管理テーブル103、重み付けテーブル104、FID管理テーブル105のエージング処理をそれぞれ所定の間隔で実行するための割り込み信号を出力してもよい。
なお、実施形態に応じて、ノード装置のハードウェア構成は図4とは異なっていてもよく、図4に例示した規格・種類以外のその他のハードウェアをノード装置に利用することもできる。
例えば、図3のフレーム分岐処理部106、ACK処理部107、リンク管理部108、データフレーム処理部110、上位層処理部111、ハローフレーム生成部112、またはFID生成部113は、ハードウェア回路により実現されてもよい。具体的には、MPU201の代わりに、FPGA(Field Programmable Gate Array)などのリコンフィギュラブル回路や、ASIC(Application Specific Integrated Circuit)などにより、これら図3の各部が実現されてもよい。もちろん、MPU201とハードウェア回路の双方により、図3の各部が実現されてもよい。
なお、以下の説明においては、説明の明確化のため、図3および図4の各部の参照符号の後にノードIDを付けた参照符号を用いることがある。例えば、ノード装置Nが有する図3の隣接ノード管理テーブル103を「103−N」という参照符号で参照する場合がある。
続いて、個々のノード装置の動作の概要について図5を参照して説明し、個々のノード装置の動作の結果としてネットワーク全体として実現される経路選択について図6を参照して説明する。
図5は、1つのノード装置に注目して重みの学習について説明する図である。図5には、ネットワーク3内の6つのノード装置が「ノードα」〜「ノードζ」として抜粋されて示されている。図5に示すように、ノードβにはノードα、γ、δ、ε、およびζが隣接しており、図5では下記5本のリンクが実線で示されている。
・ノードβとαの間のリンクLβ,α
・ノードβとγの間のリンクLβ,γ
・ノードβとδの間のリンクLβ,δ
・ノードβとεの間のリンクLβ,ε
・ノードβとζの間のリンクLβ,ζ
また、図5において雲の形で模式的に表現されたネットワーク3aは、ネットワーク3のうちの一部分である。ネットワーク3aは、具体的には、ノードδとζの間を直接的に接続するリンク、または、1つ以上の不図示のノードと2本以上の不図示のリンクを介してノードδとζの間を間接的に接続する経路を含む。
以下では、図5においてノードβに注目し、ノードβにおける重みの学習について説明する。
あるとき、ノードβが、ネットワーク3内の不図示のあるノード(以下、便宜的に「ノードη」という)をGDとするデータフレーム301を、リンクLβ,αを介してノードαから受信する。ノードβは図3の重み付けテーブル104を有しており、このうちノードηに対応する重み付けテーブルを、図5の説明では便宜的に「104−h」という参照符号で参照する。
詳しくは図10および図11とともに後述するが、GDごとに管理される重み付けテーブル104のそれぞれは、隣接ノードと重みの対応付けを記憶している。ノードβにはノードα、γ、δ、ε、およびζが隣接しているので、重み付けテーブル104−hでは、ノードαと重みWα、ノードγと重みWγ、ノードδと重みWδ、ノードεと重みWε、およびノードζと重みWζが、それぞれ対応付けられている。
説明の便宜上、ノードβがノードαからデータフレーム301を受信した時点での重み付けの関係が、式(1)のとおりであったとする。
γ<Wδ<Wε<Wζ (1)
以下、第1実施形態においては説明の便宜上、重みが0以上1以下の値をとり、重みの値が小さいほど当該重みに対応するノードの優先度が高いことを示すものとする。
したがって、式(1)に基づいてノードβは、最も軽い重みWγと対応付けられたノードγの優先度が、隣接ノードγ、δ、ε、およびζの中で最も高いことを認識する。よって、ノードβは、データフレーム301を転送するためのLDとして、隣接ノードγ、δ、ε、およびζの中から、まずノードγを選択し、ノードγにデータフレーム301を送信する。
ここで、ノードβからノードγへの送信が失敗すると、ノードβは、「ノードηをGDとするデータフレームの送信時にノードγをLDとして選択することは不適切である」と学習する。そして、学習の結果として、ノードβは、ノードγの優先度を下げる。すなわち、ノードβは、重みWγの値を大きくする。
送信失敗には何種類かあり、具体的には、ノードβは下記(D1)または(D2)のようにして、「ノードηをGDとするデータフレームの送信時にノードγをLDとして選択することは不適切である」と学習する。
(D1)リンク障害の場合
ノードβがデータフレーム301をノードγに転送した時点で、偶然リンクLβ,γ、あるいは、ノードγに障害が発生していると、ノードβはノードγへの送信が失敗したと認識する。
例えばリンクLβ,γが無線リンクである場合、ノードγからデータフレーム301に対するACKフレームが所定時間内に返信されてこなければ、ノードβはタイムアウトして、「ノードγへのデータフレーム301の送信に失敗した」と判断する。そして、ノードβは、「ノードηをGDとするデータフレームの送信時にノードγをLDとして選択することは不適切である」と学習し、LDとして選択したノードγに対応付けられた重みWγの値を大きくする。
なお、無線リンクはその品質環境が変化しやすいため、リンク障害が再び解消されている可能性がある。そのため、第1実施形態においては、リンク障害時に一挙に重みWγを最大値にするのではなく、所定の値だけ大きくすることにしている。このようにすれば、1回のリンク障害発生だけでそのLDが不適切となることを防ぐことができる。
(D2)ノードγからノードβにデータフレーム301が戻ってくる場合
ノードβは、一旦、ノードγへのデータフレーム301の送信に成功する。例えば、ノードβは、データフレーム301に対するACKフレームをノードγから受け取ることで、ノードγへのデータフレーム301の送信が成功したことを認識する。よって、一旦ノードβは、LDとして選択したノードγに対応付けられた重みWγの値を小さくする。
しかしながら、その後、ノードγからノードηまでデータフレーム301を転送することのできる経路がネットワーク3内で見つからなければ、後述するバックトラック動作により、ノードγはノードβにデータフレーム301を送り返す。例えば、ノードγがノードβにのみ隣接している場合、ノードγはノードηまでデータフレーム301を転送することのできる経路を見つけることができない。また、ノードγがノードβ以外にいくつかのノードに隣接している場合でも、ネットワーク3のトポロジによっては、ノードγからノードηまで到達不能なこともある。
ノードγがバックトラック動作を行うと、ノードβは、ノードβ自身が過去にノードγに送信したデータフレーム301をノードγから受信するので、「ノードγへの送信が失敗した」と認識することができる。認識の結果、ノードβは、「ノードηをGDとするデータフレームの送信時にノードγをLDとして選択することは不適切である」と学習し、LDとして選択したノードγに対応付けられた重みWγの値を大きくする。
第1実施形態では、(D2)のように、ノードβ自身が過去に送信したデータフレーム301を受信することでノードβが送信失敗を認識する場合、ノードβは具体的には重みWγの値を最大値に設定する。
以下では説明の便宜上、図5の例において(D2)のようにしてノードβが送信失敗を認識し、重みWγの値を最大値に設定したとする。その結果、式(2)が成立する。
δ<Wε<Wζ<Wγ (2)
続いてノードβは、GDである不図示のノードηへデータフレーム301を到達させるため、不適切と判明したノードγ以外の隣接ノードをLDとして選択し、データフレーム301の再送信を試みる。具体的には式(2)に基づいて、ノードβは、現時点で最も軽い重みWδと対応付けられたノードδをLDとして選択し、ノードδにデータフレーム301を送信する。
図5の例では、データフレーム301に対するACKフレームをノードβがノードδから受信し、ノードβは送信の成功を認識する。送信の成功を認識すると、ノードβは、LDとして選択したノードδに対応付けられた重みWδの値を小さくする。その結果、やはり式(2)が成立する。
続いて、データフレーム301はネットワーク3aを介してノードδからノードζに到達したとする。そして、ノードζがLDとしてノードβを選択したとする。
すると、ノードβは、ノードβ自身が過去にノードδに送信したデータフレーム301をノードζから受信するので、「ノードδへの送信は、ループの存在により失敗した」と認識することができる。認識の結果、ノードβは、「ノードηをGDとするデータフレームの送信時にノードδをLDとして選択することは不適切である」と学習し、重みWδの値を大きくする。
ここで、ループして戻ってきたデータフレーム301をノードβがノードζから受信する場合も、「ノードβ自身が過去に送信したデータフレーム301を受信することでノードβが送信失敗を認識する」という点では上記(D2)の場合と同様である。したがって、ノードβは、「ノードηをGDとするデータフレームの送信時にノードδをLDとして選択することは不適切である」と学習し、LDとして選択したノードδに対応付けられた重みWδの値を最大値に設定する。その結果、式(3)が成立する。
ε<Wζ<Wγ=Wδ (3)
図5には、ノードζから同一データフレーム301を受信して重み付けを更新した結果の新しい重み付けの関係として、式(3)を示してある。
続いてノードβは、GDである不図示のノードηへデータフレーム301を到達させるため、不適切と判明したノードγおよびδ以外の隣接ノードをLDとして選択し、データフレーム301の再送信を試みる。具体的には式(3)に基づいて、ノードβは、現時点で最も軽い重みWεと対応付けられたノードεをLDとして選択し、ノードεにデータフレーム301を送信する。
図5の例では、データフレーム301に対するACKフレームをノードβがノードεから受信し、ノードβは送信の成功を認識する。送信の成功を認識すると、ノードβは、LDとして選択したノードεに対応付けられた重みWεの値を小さくする。その結果、やはり式(3)が成立する。
ここで仮に、ノードεからバックトラックによってデータフレーム301がノードβへと返信されることがないとする。また、データフレーム301がネットワーク3内をループして、ノードβのいずれかの隣接ノードからノードβに送信され、ノードβで受信されることもないとする。
すると、式(3)から、ノードβは、データフレーム301と同じくノードηをGDとする別のデータフレームを隣接ノードα、γ、δ、ζのいずれかから受け取った場合に、最も軽い重みWεと対応付けられたノードεをLDとして優先して選択するようになる。
図6は、図1のネットワーク1において動的かつ自律分散的に経路が選択される様子を説明する図である。具体的には、図6は、ノード装置NがGSとなって、ノード装置NをGDとして指定したデータフレームを送信する場合の、ネットワーク1内での経路選択の様子を示す。
図6には図1のネットワーク1と、ノード装置NとNの間で発生した障害が示されている。また、図6の12本の太い矢印は、ネットワーク1内で経路が動的に選択されながらデータフレームがGS(すなわちノード装置N)からGD(すなわちノード装置N)まで転送される様子を表す。
なお、以下では、ノード装置Nの重み付けテーブル104−Nのうち、ノード装置Nに対応するものを便宜的に「104−h−N」という参照符号で参照することにする(1≦i≦6)。
また、図6の説明においては、特に断らない限りデータフレームの送信が成功してACKフレームが返信されるものとし、ACKフレームの返信については省略して説明を簡略化する。ACKフレームの返信も含めた一連の処理の流れは、図31とともに後述する。
ステップS101で、GSであるノード装置Nは、唯一ノード装置Nに隣接するノード装置NをLDとして選択し、データフレームをノード装置Nに送信する。
ノード装置Nには、ステップS101で送信されたデータフレームのLSであるノード装置Nのほかに、ノード装置NとNが隣接している。そして、この2つの隣接ノード装置NとNのうちでノード装置Nの方が、重み付けテーブル104−h−Nにおいて、より軽い重みと対応付けられているとする。
すると、ステップS102でノード装置Nは、ステップS101で受信したデータフレームを転送するためのLDとしてノード装置Nを選択し、ノード装置Nにデータフレームを送信する。
ノード装置Nには、ステップS102で送信されたデータフレームのLSであるノード装置Nのほかに、ノード装置NとNが隣接している。そして、この2つの隣接ノード装置NとNのうちでノード装置Nの方が、重み付けテーブル104−h−Nにおいて、より軽い重みと対応付けられているとする。
すると、ステップS103でノード装置Nは、ステップS102で受信したデータフレームを転送するためのLDとしてノード装置Nを選択し、ノード装置Nにデータフレームを送信する。
ノード装置Nには、ステップS103で送信されたデータフレームのLSであるノード装置Nのほかに、ノード装置NとNが隣接している。そして、この2つの隣接ノード装置NとNのうちでノード装置Nの方が、重み付けテーブル104−h−Nにおいて、より軽い重みと対応付けられているとする。
すると、ステップS104でノード装置Nは、ステップS103で受信したデータフレームを転送するためのLDとして、GDでもあるノード装置Nを選択し、ノード装置Nにデータフレームを送信する。
しかし、図6に示すように、ノード装置Nがノード装置Nにデータフレームを送信した時点で、ノード装置NとNの間のリンクには障害が発生しており、したがって送信は失敗する。すなわち、ノード装置Nは、所定時間待機してもノード装置NからACKフレームが返信されてこないため、タイムアウトし、送信失敗を認識する。
なお、ステップS104におけるノード装置Nは、図5でノードγへのデータフレームの送信に上記(D1)のようにして失敗したノードβに相当する。よって、ノード装置Nは、送信失敗に応じて重み付けテーブル104−h−Nを更新する(具体的には、ステップS104の送信でのLDであるノード装置Nに対応付けられた重みの値を大きくする)。
そして、ステップS105でノード装置Nは、ステップS103で受信したデータフレームを転送するためのLDとして、まだ試していない他の隣接ノード装置Nを選択し、ノード装置Nにデータフレームを送信する。
ノード装置Nには、ステップS105で送信されたデータフレームのLSであるノード装置Nのほかには、ノード装置Nのみが隣接している。
そこで、ステップS106でノード装置Nは、ステップS105で受信したデータフレームを転送するためのLDとしてノード装置Nを選択し、ノード装置Nにデータフレームを送信する。
すると、ステップS106でノード装置Nは、「ノード装置N自身がステップS103で送信したのと同じデータフレームを受信した」と認識する。つまり、ステップS106におけるノード装置Nは、図5においてループしてきたデータフレームをノードζから受信したノードβに相当する。よって、ノード装置Nは、図5と同様にして重み付けテーブル104−h−Nを更新する(具体的には、ステップS103の送信のLDであるノード装置Nに対応付けられた重みの値を最大値に設定する)。
そして、ステップS107でノード装置Nは、OLS(すなわち、ステップS102で最初に当該データフレームをノード装置Nが受信したときのLSであるノード装置N)以外の隣接ノード装置の中から、まだLDとして試していないものを探す。ここで、OLS以外の隣接ノード装置はノード装置NとNであり、ノード装置NはステップS103で選択済みである。
よって、ステップS107でノード装置Nは、未選択のノード装置NをLDとして選択し、ノード装置Nにデータフレームを送信する。つまり、ステップS107におけるノード装置Nは、図5においてノードεをLDとして選択しなおしてノードεにデータフレームを送信するノードβに相当する。
すると、ステップS107でノード装置Nは、「ノード装置N自身がステップS106で送信したのと同じデータフレームを受信した」と認識する。つまり、ステップS107におけるノード装置Nは、図5においてノードγへのデータフレームの送信に(D2)のようにして失敗したノードβに相当する。よって、ノード装置Nは、図5と同様にして重み付けテーブル104−h−Nを更新する(具体的には、ステップS106の送信のLDであるノード装置N3に対応付けられた重みの値を最大値に設定する)。
そして、ノード装置Nにとって、OLS(すなわちステップS105で最初に当該データフレームをノード装置Nが受信したときのLSであるノード装置N)以外で隣接しているノード装置は、既に送信失敗と判明したノード装置Nのみである。したがって、もはやLDとして選択可能な隣接ノード装置がない。
よってステップS108でノード装置Nは、OLSであるノード装置Nにデータフレームを送り返す。ステップS108はバックトラック動作であり、バックトラック動作によってノード装置Nは、「ノード装置NをGDとするデータフレームの送信においては、ノード装置N自身から先の経路は袋小路(dead end)になっている」ということをノード装置Nに知らせることができる。
すると、ステップS108でノード装置Nは、「ノード装置N自身がステップS105で送信したのと同じデータフレームを受信した」と認識する。つまり、ステップS108におけるノード装置Nは、図5においてノードγへのデータフレームの送信に(D2)のようにして失敗したノードβに相当する。よって、ノード装置Nは、図5と同様にして重み付けテーブル104−h−Nを更新する(具体的には、ステップS105の送信のLDであるノード装置Nに対応付けられた重みの値を最大値に設定する)。
しかし、図5のノードβには、ノードγへのデータフレームの送信に失敗しても、まだLDとして選択可能なノードδ等が残っていたが、図6のステップS108のノード装置Nにとっては、LDとして選択可能な隣接ノード装置が残っていない。すなわち、OLS以外の2つの隣接ノード装置NとNは、ステップS104とS105でそれぞれLDとして選択済みであり、両者とも送信失敗という結果になることが既に判明している。
したがって、ステップS109でノード装置N4は、OLSであるノード装置Nにデータフレームを送り返す。ステップS109もバックトラック動作であり、ノード装置Nはノード装置Nに「ノード装置NをGDとするデータフレームの送信においては、ノード装置N自身から先の経路は袋小路になっている」ということを知らせることができる。
すると、ステップS109でノード装置Nは、「ノード装置N自身がステップS107で送信したのと同じデータフレームを受信した」と認識する。つまり、ステップS109におけるノード装置Nは、図5においてループしてきたデータフレームをノードζから受信したノードβに相当する。よって、ノード装置Nは、図5と同様にして重み付けテーブル104−h−Nを更新する(具体的には、ステップS107の送信のLDであるノード装置Nに対応付けられた重みの値を最大値に設定する)。
しかし、図5のノードβには、ノードδへのデータフレームの送信が失敗すると判明しても、まだLDとして選択可能なノードεが残っていたが、図6のステップS109のノード装置Nにとっては、LDとして選択可能な隣接ノード装置が残っていない。すなわち、OLS以外の2つの隣接ノード装置NとNは、ステップS103とS107でそれぞれLDとして選択済みであり、両者とも送信失敗という結果になることが既に判明している。
したがって、ステップS110でノード装置N3は、OLSであるノード装置Nにデータフレームを送り返す。ステップS110もバックトラック動作であり、ノード装置Nはノード装置Nに「ノード装置NをGDとするデータフレームの送信においては、ノード装置N自身から先の経路は袋小路になっている」ということを知らせることができる。
すると、ステップS110でノード装置Nは、「ノード装置N自身がステップS102で送信したのと同じデータフレームを受信した」と認識する。つまり、ステップS110におけるノード装置Nは、図5でノードγへのデータフレームの送信に(D2)のようにして失敗したノードβに相当する。よって、ノード装置Nは、図5と同様にして重み付けテーブル104−h−Nを更新する(具体的には、ステップS102の送信のLDであるノード装置Nに対応付けられた重みの値を最大値に設定する)。
そして、ステップS111でノード装置Nは、データフレームを転送するためのLDとして、まだ試していない他の隣接ノード装置Nを選択し、ノード装置Nにデータフレームを送信する。
ノード装置Nには、ステップS111で送信されたデータフレームのLSであるノード装置Nのほかには、GDでもあるノード装置Nのみが隣接している。
そこで、ステップS112でノード装置Nは、ステップS111で受信したデータフレームを転送するためのLDとしてノード装置Nを選択し、ノード装置Nにデータフレームを送信する。
以上のようにして、ネットワーク1内に障害が発生しても、各ノード装置が自律分散的に振る舞うことで、データフレームは成功裡にGDまで到達する。
また、データフレームの転送において、局所的に不適切なノード装置がLDとして選択されても、最終的にはネットワーク全体としては、GSからGDに至る経路が選択される。なぜなら、各ノード装置がLDとして選択可能なノード装置を次々と選択し、選択可能なノード装置がなくなればバックトラック動作をするからである。
具体的には、図6の例では、ステップS102でノード装置Nがノード装置NをLDとして選択したことは、結果的には不適切であるとステップS110で判明する。しかし、ステップS103〜S110の動作により、ネットワーク1全体としては、最終的にはGSからGDに至る経路〈N,N,N,N〉の選択に成功する。
こうして選択された経路は学習され、次回以降のデータフレームの転送の効率化に寄与する。学習による効率化について具体的に説明すれば次のとおりである。
ステップS110でのデータフレームの受信の結果、ノード装置Nは重み付けテーブル104−h−Nの学習を行い、ノード装置Nに対応付けられた重みを最大値に設定している。したがって、ノード装置Nは、ノード装置NをGDとする新たなデータフレームを隣接ノード装置Nから受信すると、最初からノード装置NをLDとして選択する。つまり、ネットワーク1全体としては、自律分散的な学習の結果、バックトラックを含む試行錯誤なしに、データフレームを効率的に経路〈N,N,N,N〉によりGDまで送信することが可能となる。
さらに、第1実施形態によれば、不適切なLDの選択の影響または局所的な障害の影響は、ネットワーク1全体には及ばず、局所的に限定される。すなわち、第1実施形態によれば、例えばノード装置NとNの間のリンクに障害が発生しても、代替経路を問い合わせるための制御フレームがネットワーク1全体の全ノード装置へとフラッディングされたりはしない。よって、第1実施形態によれば、障害やループが局所的に発生しても、ネットワーク1全体にブロードキャストストームを引き起こすといった事態には陥らない。
また、図6の例においてノード装置Nは、ノード装置NとNの間のリンクの障害や、ループ〈N,N,N,N〉については全く認識することがないのは明らかである。このことは、不適切なLDの選択や局所的な障害の影響が、局所的に限定され、ネットワーク1全体には及ばないということを意味している。
問題の影響が局所的に限定されるということは、局所的な問題がネットワーク1全体にポジティブにフィードバックされて発散することがないということであり、ネットワーク1が系として安定しているということである。問題が局所的に限定されることの別の例を挙げれば、例えば以下のとおりである。
例えば、仮にネットワーク1においてノード装置NとNの間にもリンクが存在し、重み付けテーブル104−h−Nにおいてノード装置Nよりもノード装置Nの方が軽い重みに対応づけられているとする。すると、ステップS105の直後にノード装置Nがノード装置NをLDとして選択してデータフレームをノード装置Nに送信する。その結果、ステップS108〜S112の送信は行われず、ノード装置Nだけでなくノード装置NとNも、障害の発生を全く認識しない。このように、リンクの障害やループの発生などの問題は、問題が生じた場所に応じて最小限の局所的な範囲にしか影響を及ぼさない。
続いて、以上説明したノード装置100の構成および動作、ならびにネットワーク1全体で実現される自律分散協調動作について、更に詳細に説明してゆく。
図7は、フレームの例を示す図である。
第1実施形態におけるデータフレームは、図7のデータフレーム302のように、LD、LS、GD、GS、FID、タイプ、長さの各フィールドを含むヘッダと、ペイロードとを含む。例えば図5のデータフレーム301も、データフレーム302と同様の形式である。
データフレーム302のLDフィールド、LSフィールド、GDフィールド、およびGSフィールドには、データフレーム302のLD、LS、GD、およびGSである各ノード装置のノードIDがそれぞれ指定される。また、データフレーム302のFIDフィールドには、データフレーム302のGSであるノード装置が生成してデータフレーム302に割り当てたFIDが指定される。
データフレーム302のタイプフィールドには、「データフレーム」というタイプを示す所定の定数が指定される。また、データフレーム302の長さフィールドには、ペイロードの長さが指定される。データフレーム302のペイロードは、データフレーム302が定義されるプロトコルよりも上位の層のプロトコルのPDUである。
例えば、MAC副層を仮想的にさらに2つの副層に分割することを想定する。第1実施形態のフレームは、この仮想的な2つの副層のうちの下の方の副層で定義されてもよく、すなわち、MAC副層で定義される他のプロトコル(例えばイーサネットなど)のPDUをペイロードに含んでもよい。換言すれば、第1実施形態のフレームは、第2層で定義されるイーサネットフレームをカプセル化するフレームであってもよい。この場合、上位層処理部111はイーサネットフレームを処理する処理部であるから、公知のMACチップを用いて実現することもできる。
以下では説明の便宜上、データフレーム302のペイロードは、MAC層プロトコルのフレーム(具体的には例えばイーサネットフレーム)であるものとする。
しかし、もちろん実施形態によっては、データフレーム302のペイロードは、ネットワーク層(第3層)以上で定義されるプロトコルのPDUであってもよいし、特定の通信プロトコルとは無関係な生のデータであってもよい。例えば、データフレーム302のペイロードがIP(Internet Protocol)データグラムであってもよい。この場合、上位層処理部111はIPデータグラムを処理する処理部である。
データフレーム302の形式は以上説明したとおりであるが、具体的な値を使ってより詳しく例示すれば、データフレーム303および304のごとくである。
データフレーム303は、図6のステップS102でノード装置Nがノード装置Nに送信するデータフレームである。データフレーム303の具体的な内容は以下のとおりである。
・LDフィールドには、ステップS102の送信においてLDとして選択されたノード装置NのノードID(すなわちN)が指定されている。
・LSフィールドには、ステップS102の送信におけるLSであるノード装置NのノードID(すなわちN)が指定されている。
・GDフィールドには、GSであるノード装置NがステップS101の送信のときに指定したノード装置NのノードID(すなわちN)が指定されている。
・GSフィールドには、GSであるノード装置NのノードID(すなわちN)が指定されている。
・FIDフィールドには、GSであるノード装置Nが生成したFID(以下Fとする)が指定されている。
・タイプフィールドには、「データフレーム」というタイプを示す所定の定数Dが指定されている。例えば、タイプは2ビットによって表すこともでき、D=(00)でもよい。
・長さフィールドには、データフレーム302のペイロードの長さPが指定される。なお、長さは例えばバイト単位で表されてもよいし、その他の単位で表されてもよい。
・ペイロードとして、MAC層プロトコルのフレーム(例えばイーサネットフレーム)が含まれる。
また、データフレーム303を受信したノード装置Nが図6のステップS103でノード装置Nに送信するのが、図7のデータフレーム304である。データフレーム304の具体的な内容は以下のとおりである。
・LDフィールドには、ステップS103の送信においてLDとして選択されたノード装置NのノードID(すなわちN)が指定されている。つまり、転送にあたって、ノード装置NはLDフィールドを書き換える。
・LSフィールドには、ステップS103の送信におけるLSであるノード装置NのノードID(すなわちN)が指定されている。つまり、転送にあたって、ノード装置NはLSフィールドを書き換え、自ノードIDを設定する。
・GD、GS、FID、タイプ、長さの各フィールドと、ペイロードの内容は、ノード装置Nが受信したデータフレーム303と同じである。
また、第1実施形態におけるハローフレームは、図7のハローフレーム311のように、LD、LS、GD、GS、FID、タイプの各フィールドを含むヘッダを有するが、ペイロードを持たない。ハローフレーム311の具体例はハローフレーム312であり、ハローフレーム312は後述の図31のステップS1203でノード装置Nにより送信されるものである。
ハローフレーム311のLDフィールドには、ハローフレーム311を送信するノード装置に隣接するすべてのノード装置へのブロードキャストを表す特殊な値が指定される。なおここでの「ブロードキャスト」は「隣接するすべてのノード装置へのブロードキャスト」であり、「ネットワーク1全体へのフラッディング」ではないので注意されたい。
以下、説明の便宜上、第1実施形態においてはノードIDが3バイトで表されるものとし、「0x」は16進数を表すものとする。また、0x000000と0xFFFFFFは予約されており、通常のノードIDとしては使われないものとする。
第1実施形態におけるすべてのハローフレームでは、ハローフレーム312と同様、LDフィールドに、当該ハローフレームを送信するノード装置に隣接するすべてのノード装置へのブロードキャストを表す特殊な値として、0xFFFFFFが指定されている。
ハローフレーム311のLSフィールドには、ハローフレーム311を送信するノード装置自身のノードIDが指定される。よって、ノード装置Nが送信するハローフレーム312のLSフィールドには、ノード装置NのノードIDであるNが指定される。
また、第1実施形態におけるすべてのハローフレームでは、GDフィールドに、ヌル(null)を表す特殊な値0x000000が指定される。なぜなら、ハローフレームは隣接ノード装置が利用するだけであり、転送されないからである。
ハローフレーム311のGSフィールドには、LSフィールドと同じく、ハローフレーム311を送信するノード装置自身のノードIDが指定される。よって、ハローフレーム312のGSフィールドには、ノード装置NのノードIDであるNが指定される。
ハローフレーム311のFIDフィールドには、ハローフレーム311を送信するノード装置が生成してハローフレーム311に割り当てたFIDが指定される。同様に、ハローフレーム312のFIDフィールドには、ハローフレーム312を送信するノード装置Nが生成してハローフレーム312に割り当てたFID(以下Fとする)が指定される。
ハローフレーム311のタイプフィールドには、「ハローフレーム」というタイプを示す所定の定数が指定される。具体的には、「ハローフレーム」というタイプは、ハローフレーム312に例示するように所定の定数Hにより表され、例えばH=(10)でもよい。
また、第1実施形態におけるACKフレームは、図7のACKフレーム321のように、LD、LS、GD、GS、FID、タイプの各フィールドを含むヘッダを有するが、ペイロードを持たない。ACKフレーム321の具体例はACKフレーム322である。また、ACKフレーム322は、図6のステップS102でノード装置Nがノード装置Nにデータフレーム303を送信したとき、ノード装置Nがノード装置Nに返信するACKフレームである。後述の図31では、このノード装置Nからノード装置NへのACKフレーム322の返信をステップS102aとして表している。
ACKフレーム321のLDフィールドには、ACKフレーム321の送信の契機となったデータフレームを送信した隣接ノード装置のノードIDが指定される。よって、例えばACKフレーム322のLDフィールドには、ACKフレーム322をノード装置Nが送信する契機となったデータフレーム303を送信した、ノード装置Nの隣接ノード装置NのノードIDであるNが指定される。
ACKフレーム321のLSフィールドには、ACKフレーム321を送信するノード装置自身のノードIDが指定される。よって、ノード装置Nが送信するACKフレーム322のLSフィールドには、ノード装置NのノードIDであるNが指定される。
また、ハローフレームと同様にACKフレームも転送されないので、第1実施形態におけるすべてのACKフレームでは、GDフィールドに、ヌルを表す特殊な値0x000000が指定される。
ACKフレーム321のGSフィールドとFIDフィールドには、ACKフレーム321の送信の契機となったデータフレームのGSフィールドとFIDフィールドの値がコピーされる。上記のように、GSフィールドとFIDフィールドの値の組み合わせにより、データフレームがネットワーク内で一意に識別される。よって、ACKフレーム321を送信するノード装置が、受信したデータフレームから値をコピーすることで、ACKフレーム321がどのデータフレームに対するものなのかを、ACKフレーム321を受信したノード装置において識別することが可能となる。
よって、例えばデータフレーム303の受信を契機として送信されるACKフレーム322では、GSフィールドとFIDフィールドの値は、データフレーム303と同じく、それぞれNとFである。
ACKフレーム321のタイプフィールドには、「ACKフレーム」というタイプを示す所定の定数が指定される。具体的には、「ACKフレーム」というタイプは、ACKフレーム322に例示するように所定の定数Aにより表され、例えばA=(11)でもよい。
なお、図7に示したフレームの形式は一例にすぎず、実施形態に応じて、フレームに含まれるフィールドの並び順は適宜決めることができ、また、不図示の他のフィールドをフレームが含んでいてもよい。また、フレームがFCS(Frame Check Sequence)などのトレイラをさらに含んでいてもよい。
また、以下では記載の簡単化のため、混乱のおそれがない場合は、例えば「LDフィールド」を単に「LD」と称することもある。他のフィールドについても同様である。
図8は、図3のバッファ部109に格納されるデータの例を示す図である。
バッファ部109は、受信部101が受信した個々のデータフレームにそれぞれ対応する複数のエントリを含む。そして、各エントリは、タイムアウト時刻と受信したデータフレームを含む。
図8は、ノード装置Nのバッファ部109−N内のあるエントリを例示している。具体的には、図6のステップS102において、ノード装置Nからノード装置Nが図7のデータフレーム303を受信すると、バッファ部109−Nには、タイムアウト時刻TI3,jとデータフレーム303とを含むエントリが作成される。バッファ部109におけるエントリの作成の詳細は、図14とともに後述する。また、タイムアウト時刻TI3,jの意味は次のとおりである。
ノード装置Nは、ステップS102で受信したデータフレーム303のヘッダを、ステップS103で図7のデータフレーム304のように書き換える。そしてノード装置Nは、ステップS103でデータフレーム304を送信する。
図8のタイムアウト時刻TI3,jは、ノード装置Nが、データフレーム304を送信した後、データフレーム304に対するACKフレームの受信をいつまで待つのかを示す。つまり、ノード装置Nは、タイムアウト時刻TI3,jまでにデータフレーム304に対するACKフレームをノード装置Nから受信することができなければ、タイムアウトして、ノード装置Nへのデータフレーム304の送信に失敗したと判断する。
なお、詳しくは図22、図26、および図28に示すように、バッファ部109に設定されるタイムアウト時刻は、上書きされることもある。
例えば、図6のステップS104でノード装置Nへのデータフレームの送信に失敗したノード装置Nは、ステップS105において、ノード装置Nから受信したデータフレームに対応するバッファ部109−N内のタイムアウト時刻を更新する。更新後のタイムアウト時刻は、具体的には、ステップS105でノード装置Nに送信したデータフレームへのACKフレームの受信をいつまでノード装置Nが待つかを表す。
図9は、図3の隣接ノード管理テーブル103の例を示す図である。隣接ノード管理テーブル103には、ノードIDフィールドと最終更新時刻フィールドがある。
例えば、図1のネットワーク1では、ノード装置Nにはノード装置N、N、およびNが隣接している。したがって、ノード装置Nの隣接ノード管理テーブル103−Nは、これら3つの隣接ノード装置N、N、およびNにそれぞれ対応する3つのエントリがある。そして、隣接ノード装置N(i=1,3,6)に対応する各エントリにおいて、ノードIDフィールドには隣接ノード装置NのノードIDであるNが格納
されており、最終更新時刻フィールドには、当該エントリが最後に更新された時刻TA2,iが格納されている。
また、図1のネットワーク1では、ノード装置Nにはノード装置N、N、およびNが隣接している。したがって、ノード装置Nの隣接ノード管理テーブル103−Nは、これら3つの隣接ノード装置N、N、およびNにそれぞれ対応する3つのエントリがある。そして、隣接ノード装置N(i=2,4,5)に対応する各エントリにおいて、ノードIDフィールドには隣接ノード装置NのノードIDであるNが格納されており、最終更新時刻フィールドには、当該エントリが最後に更新された時刻TA3,iが格納されている。
図10は、図3の重み付けテーブル104の例を示す図である。図10は、具体例として、図1のノード装置Nの重み付けテーブル104−Nを示している。
図3に示すとおり、「重み付けテーブル104」とは、GDごとに管理される複数の重み付けテーブル104−1〜104−Mの総称である。各重み付けテーブル104−i(1≦i≦M)は、対応するGDを記憶している。
そして、各重み付けテーブル104−i(1≦i≦M)は1つ以上のエントリを有し、各エントリは、最終更新時刻フィールドとLDフィールドと重みフィールドを有する。最終更新時刻フィールドには重みの学習のためにエントリが最後に更新された時刻が格納され、LDフィールドには隣接ノード装置のノードIDが格納され、重みフィールドには当該隣接ノード装置に対応付けられた重みの値が格納される。
図10の例では、1枚目の重み付けテーブル104−1−Nは、ノード装置NがGDとして指定されているデータフレームの送信用のテーブルなので、GDとしてノード装置NのノードIDであるNを記憶している。
また、図1のネットワーク1では、ノード装置Nにはノード装置N、N、およびNが隣接している。したがって、重み付けテーブル104−1−Nは、これら3つの隣接ノード装置N、N、およびNにそれぞれ対応する3つのエントリを有する。重み付けテーブル104−1−Nにおいて隣接ノード装置N(i=2,4,5)に対応する各エントリの内容は、次のとおりである。
・最終更新時刻フィールドには、エントリの最終更新時刻TW3,7,iが格納されている。
・LDフィールドには、隣接ノード装置NのノードIDであるNが格納されている。
・重みフィールドには、隣接ノード装置Nに対応付けられる重みW3,7,iが格納されている。
すなわち、重みW3,7,iは、ノード装置N(つまり重み付けテーブル104−1−Nに対応するGD)をGDとして指定するデータフレームをノード装置Nが送信する場合に参照される、隣接ノード装置Nに対応する重みである。
同様に、図10の例では、2枚目の重み付けテーブル104−2−N3は、ノード装置NがGDとして指定されているデータフレームの送信用のテーブルなので、GDとしてノード装置NのノードIDであるNを記憶している。
そして、図1のネットワーク1では、ノード装置Nにはノード装置N、N、およびNが隣接しているので、重み付けテーブル104−2−Nも、これら3つの隣接ノード装置N、N、およびNにそれぞれ対応する3つのエントリを有する。重み付けテーブル104−1−Nにおいて隣接ノード装置N(i=2,4,5)に対応する各エントリの内容は、次のとおりである。
・最終更新時刻フィールドには、エントリの最終更新時刻TW3,4,iが格納されている。
・LDフィールドには、隣接ノード装置NのノードIDであるNが格納されている。
・重みフィールドには、隣接ノード装置Nに対応付けられる重みW3,4,iが格納されている。
もちろん、重み付けテーブル104−Nには、さらに別のGDと対応づけられた重み付けテーブル104−j−N(j>2)が含まれていてもよい。
なお、次の点は注意すべきである。すなわち、重み付けテーブル104は、同一のGDであれば、たとえFIDとGSの組み合わせが異なるデータフレームを送信したとしても、送信の度に、送信先となったLDの重みが更新される。例えば、あるデータフレームの送信時に、リンク障害のため特定のLDの重みが大きくなっても(優先度が低くなっても)、すぐに別データフレーム(GDとLDは同一)の送信で、リンク障害が解消されていて送信成功となれば、該LDの重みは小さくなる(優先度は高くなる)。逆に、複数の異なるデータフレーム(GDとLDは同一)が立て続けに、リンク障害のため送信失敗となれば、たとえ同一のFIDとGSの組み合わせのデータフレームは1度しか送信を試していなくても、該当のLDの重みが最大値になってしまうこともありうる。
図11は、図10の重み付けテーブル104−1−Nの変化を説明する図である。図11の例では、T<T<T<T<Tである。
例えば、図6のステップS102でノード装置Nからデータフレームを受信した時点では、ノード装置Nの重み付けテーブル104−Nには、ノード装置Nに対応する重み付けテーブル104−1−Nが存在しなかったとする。そして、ステップS102の受信を契機として、以下のような内容の新たな重み付けテーブル104−1−Nが重み付けテーブル104−Nに作成されたとする。
・3つのエントリの最終更新時刻はいずれも時刻Tである。
・3つのエントリにおいて、隣接ノード装置N(i=2,4,5)に対応付けられる重みW3,7,iは、いずれも0.5である。
なお、図6に関しては説明の簡単化のため、「2つの隣接ノード装置NとNのうちでノード装置Nの方が、重み付けテーブル104−h−Nにおいて、より軽い重みと対応付けられているとする」と説明した。つまり、図10と図11はh=1の例であり、図6の説明ではW3,7,4<W3,7,5と仮定している。
しかし、例えば図11に示すように、W3,7,2=W3,7,4=W3,7,5=0.5という場合もありうる。図11の例では、ノード装置NとNが同じ重み0.5に対応付けられているので、ノード装置NはステップS103での送信のLDとしてノード装置NとNのいずれを選ぶこともできるが、仮に、図6の例と同様に、ノード装置NをLDとして選んだとする。
すると、ステップS103でノード装置Nがノード装置Nにデータフレームを送信する。その後、図31においてステップS103aとして示すようにノード装置Nがノード装置NにACKフレームを送信すると、ノード装置Nは、ノード装置Nへのデータフレームの送信が成功したと認識する。
そして、図5の例と同様にして、ノード装置Nは、ノード装置Nに対応付けられた重みW3,7,4の値を小さくする。図11の例では、具体的には、ノード装置NはW3,7,4の値を0.5から0.4に更新する。また、ノード装置Nは、ノード装置Nに対応するエントリの最終更新時刻フィールドに、現在時刻Tを設定する。
その後、図6に示すように、ノード装置NはステップS106で再び同一のデータフレームを受信する。その結果、ノード装置Nは、図6に関して説明したように、重み付けテーブル104−1−Nにおいてノード装置Nと対応付けられている重みW3,7,4の値を、0.4から最大値である1.0に更新する。また、ノード装置Nは、ノード装置Nに対応するエントリの最終更新時刻フィールドに、現在時刻Tを設定する。
続いて、図6のステップS107に示すように、ノード装置Nはノード装置NをLDとして選択してデータフレームを送信する。その後、図31においてステップS107aとして示すようにノード装置Nがノード装置NにACKフレームを送信すると、ノード装置Nは、ノード装置Nへのデータフレームの送信が成功したと認識する。
そして、図5の例と同様にして、ノード装置Nは、ノード装置Nに対応付けられた重みW3,7,5の値を小さくする。図11の例では、具体的には、ノード装置NはW3,7,5の値を0.5から0.4に更新する。また、ノード装置Nは、ノード装置Nに対応するエントリの最終更新時刻フィールドに、現在時刻Tを設定する。
その後、図6に示すように、ノード装置NはステップS109で再び同一のデータフレームを受信する。その結果、図6に関して説明したように、重み付けテーブル104−1−Nにおいてノード装置Nと対応付けられている重みW3,7,5の値を、0.4から最大値である1.0に更新する。また、ノード装置Nは、ノード装置Nに対応するエントリの最終更新時刻フィールドに、現在時刻Tを設定する。
以上のように、重み付けテーブル104−1−Nは、ACKフレームの受信を契機として、あるいは、送信済みのデータフレームと同一のデータフレームの受信を契機として、更新される。
図12と図13は、図3のFID管理テーブル105の例を示す図である。図12と図13に示すように、FID管理テーブル105には、FID、GS、LD、OLS、最終更新時刻の各フィールドがある。
FID管理テーブル105におけるFIDフィールドとGSフィールドは、データフレームを一意に識別するためのフィールドであり、受信したデータフレームのFIDフィールドとGSフィールドから値がそれぞれコピーされる。
FID管理テーブル105のLDフィールドには、FIDフィールドとGSフィールドの値により識別されるデータフレームを送信するために、最後にLDとして選択した隣接ノード装置のノードIDが格納される。
また、FID管理テーブル105のOLSフィールドには、FIDフィールドとGSフィールドの値により識別されるデータフレームを最初に受信したときに当該データフレームのLSフィールドに指定されていた隣接ノード装置のノードIDが格納される。OLSフィールドは、データフレームの転送のためにLDを選択するにあたって、LDの候補の中からOLSを除くためにも利用され、バックトラック動作のときのLDを決定するため
にも利用される。
そして、FID管理テーブル105の最終更新時刻フィールドには、エントリが最後に更新された時刻が格納される。
さて、図12と図13は、図6のステップS101〜S112での各ノード装置のFID管理テーブル105を具体例として示している。以下、ステップS101〜S112がそれぞれ実行される時刻をTF101〜TF112と表す。
ステップS101でノード装置Nがノード装置Nにデータフレームを送信するとき、ノード装置NはFID管理テーブル105−Nに新たなエントリEを作成する。
そして、ノード装置Nは、エントリEのFIDフィールドとGSフィールドに、送信したデータフレームのFIDとGSの値を設定する。
ここで、データフレームのGSとFIDの値は、前述のとおり、データフレームがネットワーク1内を転送されても書き換えられない。したがって、図6でネットワーク1内をステップS101〜S112で送信されるデータフレームのFIDとGSの値は、図7のデータフレーム303および304と同じく、それぞれFとNである。よって、ステップS101でノード装置Nは、エントリEのFIDフィールドとGSフィールドに、それぞれFとNという値を設定する。
なお、以下の各ステップS102〜S112で他のノード装置がそれぞれのFID管理テーブル105のエントリのFIDフィールドとGSフィールドに設定する値も、同じくFとNである。よって、以下ではFIDフィールドとGSフィールドに関する説明を省略する。
また、ステップS101でノード装置Nは、LDとして選択したノード装置NのノードIDであるNを、エントリEのLDフィールドに設定する。
ところで、GSとFIDの値の組により一意に識別される、ある特定のデータフレームに関して、OLSとは、当該特定のデータフレームを最初に受信したときの当該特定のデータフレームのLSに指定されたノードIDで識別される隣接ノード装置のことである。
しかしこのようにOLSを定義すると、例えばノード装置NがGSとなってデータフレームを送信する場合に、ノード装置N自身にとっては、送信したデータフレームに関してOLSが未定義となってしまう。そこで、以下ではOLSの定義を拡張する。具体的には、「ノード装置N自身がGSとなってデータフレームを送信する場合には、当該データフレームに関するノード装置N自身にとってのOLSとは、ノード装置N自身である」と定義する。
換言すれば、OLSとは、ノード装置N自身が直接認識しているネットワークの範囲内において、ノード装置Nにとってデータフレームの起源として認識されるノード装置である。なおここで、「ノード装置N自身が直接認識しているネットワークの範囲」とは、ノード装置Nから見てホップ数1以下の範囲であり、具体的にはノード装置N自身と、ノード装置Nの隣接ノード装置のみが含まれる。例えば、図2の例では、ノード装置N105自身が直接認識しているネットワークの範囲のみが実線で示されている。
以上の拡張されたOLSの定義より、ステップS101でノード装置NがエントリEのOLSフィールドに設定する値は、ノード装置N自身のノードID(すなわちN)である。ノード装置Nは、もし今後GSの値がNでFIDの値がFのデータフレームを受信することがあれば、以上のようにして作成したエントリEに基づいて、「かつてノード装置N自身が送信したデータフレームを受信した」と認識することができる
また、ステップS101でノード装置Nは、現在時刻TF101をエントリEの最終更新時刻フィールドに設定する。なお、以下の各ステップS102〜S112で他のノード装置がそれぞれのFID管理テーブル105のエントリの最終更新時刻フィールドに設定する値は、同様に、各ステップS102〜S112が実行される時刻TF102〜TF112である。よって、以下では最終更新時刻フィールドに関する説明も省略する。
そして、ステップS101でノード装置Nからデータフレームを受信したノード装置Nは、ステップS102でノード装置Nにデータフレームを送信するときにFID管理テーブル105−Nに新たなエントリEを作成する。そして、ノード装置NはエントリEにおいて、OLSフィールドにはNと設定し、LDフィールドにはNと設定する。
続いて、ステップS102でノード装置Nからデータフレームを受信したノード装置Nは、ステップS103でノード装置Nにデータフレームを送信するときにFID管理テーブル105−Nに新たなエントリEを作成する。そして、ノード装置NはエントリEにおいて、OLSフィールドにはNと設定し、LDフィールドにはNと設定する。
続いて、ステップS103でノード装置Nからデータフレームを受信したノード装置Nは、ステップS104でノード装置Nにデータフレームを送信するときにFID管理テーブル105−Nに新たなエントリEを作成する。そして、ノード装置NはエントリEにおいて、OLSフィールドにはNと設定し、LDフィールドにはNと設定する。
ところが、ステップS104での送信は、ノード装置NとNの間のリンクの障害のために失敗する。すなわち、ノード装置Nは、ノード装置NからACKフレームを受信することができないため、タイムアウトする。その結果、ノード装置Nは、ステップS105のように、他の隣接ノード装置Nを次のLDとして再選択し、ノード装置Nにデータフレームを送信する。
ここで、ステップS104とS105でそれぞれ送信されるデータフレームは、FIDの値がFでありGSの値がNであるから、同一のデータフレームである。したがって、ステップS105でノード装置Nは、新たなエントリを作成するのではなく、既存のエントリEを更新する。
具体的には、ステップS105でノード装置Nは、エントリEにおいて、LDフィールドの値をNに上書きする。なお、GSの値がNでFIDの値がFである同じデータフレームをノード装置Nが何度送信しようとも、「ノード装置Nが当該データフレームを最初に受信したのはノード装置Nからである」という事実は変わらない。よって、エントリEのOLSフィールドの値は、書き換えられることはなく、Nのままである。
続いて、ステップS105でノード装置Nからデータフレームを受信したノード装置Nは、ステップS106でノード装置Nにデータフレームを送信するときにFID管理テーブル105−Nに新たなエントリEを作成する。そして、ノード装置NはエントリEにおいて、OLSフィールドにはNと設定し、LDフィールドにはNと設定する。
そして、ステップS106でノード装置Nからデータフレームを受信したノード装置Nは、受信したデータフレームのGSとFIDの値をキーにしてFID管理テーブル105−Nを検索し、エントリEを見つける。エントリEが見つかったことから、ノード装置Nは、「ノード装置N自身がかつてステップS103で送信したのと同一のデータフレームをステップS106で受信した」と認識することができる。
したがって、ノード装置Nは、次のステップS107でデータフレームをノード装置Nに送信するに際して、FID管理テーブル105−Nに新たなエントリを作成するのではなく、既存のエントリEを更新する。具体的には、ステップS107でノード装置Nは、エントリEにおいて、LDフィールドの値をNに上書きする。なお、エントリEのOLSフィールドの値は書き換えられることはなく、Nのままである。
すると、ステップS107でノード装置Nからデータフレームを受信したノード装置Nは、受信したデータフレームのGSとFIDの値をキーにしてFID管理テーブル105−Nを検索し、エントリEを見つける。エントリEが見つかったことから、ノード装置Nは、「ノード装置N自身がかつてステップS106で送信したのと同一のデータフレームをステップS107で受信した」と認識することができる。
したがって、ノード装置Nは、次のステップS108でデータフレームをノード装置Nに送信するに際して、FID管理テーブル105−Nに新たなエントリを作成するのではなく、既存のエントリEを更新する。具体的には、ステップS108でノード装置Nは、エントリEにおいて、LDフィールドの値をNに上書きする。なお、エントリEのOLSフィールドの値は書き換えられることはなく、Nのままである。
すると、ステップS108でノード装置Nからデータフレームを受信したノード装置Nは、受信したデータフレームのGSとFIDの値をキーにしてFID管理テーブル105−Nを検索し、エントリEを見つける。エントリEが見つかったことから、ノード装置Nは、「ノード装置N自身がかつてステップS105で送信したのと同一のデータフレームをステップS108で受信した」と認識することができる。
したがって、ノード装置Nは、次のステップS109でデータフレームをノード装置Nに送信するに際して、FID管理テーブル105−Nに新たなエントリを作成するのではなく、既存のエントリEを更新する。具体的には、ステップS109でノード装置Nは、エントリEにおいて、LDフィールドの値をNに上書きする。なお、エントリEのOLSフィールドの値は書き換えられることはなく、Nのままである。
すると、ステップS109でノード装置Nからデータフレームを受信したノード装置Nは、受信したデータフレームのGSとFIDの値をキーにしてFID管理テーブル105−Nを検索し、エントリEを見つける。エントリEが見つかったことから、ノード装置Nは、「ノード装置N自身がかつてステップS103で送信したのと同一のデータフレームをステップS109で受信した」と認識することができる。
したがって、ノード装置Nは、次のステップS110でデータフレームをノード装置Nに送信するに際して、FID管理テーブル105−Nに新たなエントリを作成するのではなく、既存のエントリEを更新する。具体的には、ステップS110でノード装置Nは、エントリEにおいて、LDフィールドの値をNに上書きする。なお、エントリEのOLSフィールドの値は書き換えられることはなく、Nのままである。
すると、ステップS110でノード装置Nからデータフレームを受信したノード装置Nは、受信したデータフレームのGSとFIDの値をキーにしてFID管理テーブル105−Nを検索し、エントリEを見つける。エントリEが見つかったことから、ノード装置Nは、「ノード装置N自身がかつてステップS102で送信したのと同一のデータフレームをステップS110で受信した」と認識することができる。
したがって、ノード装置Nは、次のステップS111でデータフレームをノード装置Nに送信するに際して、FID管理テーブル105−Nに新たなエントリを作成するのではなく、既存のエントリEを更新する。具体的には、ステップS111でノード装置Nは、エントリEにおいて、LDフィールドの値をNに上書きする。なお、エントリEのOLSフィールドの値は書き換えられることはなく、Nのままである。
そして、ステップS111でノード装置Nからデータフレームを受信したノード装置Nは、ステップS112でノード装置Nにデータフレームを送信するときにFID管理テーブル105−Nに新たなエントリEを作成する。そして、ノード装置NはエントリEにおいて、OLSフィールドにはNと設定し、LDフィールドにはNと設定する。
続いて、図14〜図29のフローチャートを参照して、ノード装置100の動作の詳細を説明する。
図14は、フレーム受信処理のフローチャートである。フレーム受信処理は、ノード装置100に電源が入れられると開始される。
ステップS201で受信部101は、フレームを受信するまで待機する。つまり、受信部101は、フレームを受信していなければステップS201を繰り返す。フレームを受信すると、受信部101は受信したフレームをフレーム分岐処理部106に出力し、処理はステップS202に移行する。
ステップS202では、フレーム分岐処理部106が、ステップS201で受信部101が受信したフレームのタイプフィールドの値を参照し、フレームのタイプを判定する。受信したフレームのタイプがハローフレームの場合、処理はステップS203に移行し、データフレームの場合、処理はステップS204に移行し、ACKフレームの場合、処理はステップS206に移行する。
ステップS203では、受信されたハローフレームをフレーム分岐処理部106がリンク管理部108へ出力し、リンク管理部108が図15のハローフレーム受信処理を行う。そして処理はステップS201に戻る。もちろん、図4のMPU201が図3の各部に対応する複数のタスクを並行して実行するマルチタスク環境では、フレーム分岐処理部106がハローフレームを出力したら、ハローフレーム受信処理の終了を待たずに処理がステップS201に移行してもよい。
また、ステップS204では、フレーム分岐処理部106が、ステップS201で受信されたデータフレームをバッファ部109に格納する。つまり、フレーム分岐処理部106は、バッファ部109内に新たなエントリの領域を確保し、確保した領域にステップS201で受信されたデータフレームを格納する。また、フレーム分岐処理部106は、次のステップS205のためにデータフレームからGSとFIDの値を取り出して記憶しておく。
なお、図8のとおりバッファ部109はタイムアウト時刻フィールドを有するが、ステップS204の時点では、タイムアウト時刻はまだ設定されない。
そして、ステップS205でフレーム分岐処理部106は、データフレーム処理部110にデータフレーム受信処理を行うよう指示する。指示に際してフレーム分岐処理部106は、ステップS204で記憶しておいたデータフレームのGSとFIDの値をデータフレーム処理部110に通知する。
なお、ノード装置100がGSとならないタイプの装置である場合(すなわち、ノード装置100が中継専門の装置である場合)、データフレーム受信処理は図20〜23のとおりである。他方、ノード装置100がGSにもなりうるタイプの装置である場合、データフレーム受信処理は、図20〜22、29のとおりである。
データフレーム処理部110が指示にしたがってデータフレーム受信処理を行うと、処理はステップS201に戻る。もちろん、マルチタスク環境では、フレーム分岐処理部106がデータフレーム処理部110にデータフレーム受信処理を行うよう指示したら、データフレーム受信処理の終了を待たずに処理がステップS201に移行してもよい。
また、ステップS206では、受信されたACKフレームをフレーム分岐処理部106がACK処理部107へ出力し、ACK処理部107が図25のACKフレーム受信処理を行う。そして処理はステップS201に戻る。もちろん、マルチタスク環境では、フレーム分岐処理部106がACKフレームを出力したら、ACKフレーム受信処理の終了を待たずに処理がステップS201に移行してもよい。
図15は、図14のステップS203におけるハローフレーム受信処理のフローチャートである。図15の処理は、フレーム分岐処理部106からハローフレームがリンク管理部108に出力されると開始される。
ステップS301でリンク管理部108は、受信したハローフレームのLSと同じ値をノードIDとして持つエントリが、隣接ノード管理テーブル103(図9参照)に存在するか否かを判断する。エントリが見つかれは処理はステップS302に移行し、エントリが見つからなければ処理はステップS303に移行する。
なお、図15の説明における「受信したハローフレーム」とは、図14のステップS201で受信部101が受信したハローフレームである。つまり、図15の説明における「受信したハローフレーム」とは、ステップS202でフレーム分岐処理部106がリンク管理部108に出力して図15の処理の開始の契機となったハローフレームである。
ステップS302でリンク管理部108は、ステップS301で見つかったエントリの最終更新時刻として、現在時刻を設定する。そして、図15の処理は終了する。
例えば、ノード装置NにおいてステップS302が実行された結果として、図9のように隣接ノード管理テーブル103−Nにおいて、NというノードIDに対応する最終更新時刻フィールドの値がTA2,1と更新される。その結果、ノード装置Nは「時刻TA2,1にはノード装置Nがノード装置Nを隣接ノード装置として認識可能な状況であった」と記憶しておくことができる。
他方、ステップS301でエントリが見つからない場合は、今まで隣接ノード装置として認識していなかった新たなノード装置からハローフレームが受信されたということである。よって、続くステップS303〜S308において、当該新たなノード装置を隣接ノード装置として登録するための処理が行われる。
ステップS303でリンク管理部108は、隣接ノード管理テーブル103に新規エントリを追加する。
そして、ステップS304でリンク管理部108は、ステップS303で追加した新規エントリに、受信したハローフレームのLSの値と現在時刻を設定する。例えば、図7のハローフレーム312を初めて受信したとき、ノード装置Nは、新規エントリのノードIDフィールドに、ハローフレーム312のLSの値であるNを設定し、新規エントリの最終更新時刻フィールドに現在時刻を設定する。
続いて、ステップS305でリンク管理部108は、重み付けテーブル104−1〜104−M(図10と図11を参照)の中に、まだ注目していない重み付けテーブル104−i(1≦i≦M)があるか否かを判断する。既にすべての重み付けテーブル104−1〜104−Mに注目し終わっていれば、図15の処理は終了し、まだ注目していない重み付けテーブル104−iがあれば、処理はステップS306に移行する。
ステップS306でリンク管理部108は、重み付けテーブル104−1〜104−Mのうちでまだ注目していないものの中から、次の重み付けテーブルに注目する。以下では説明の便宜上、ステップS306では重み付けテーブル104−iが注目されたとする。
そして、ステップS307でリンク管理部108は、注目している重み付けテーブル104−iに新規エントリを追加する。
さらに、ステップS308でリンク管理部108は、ステップS307で追加した新規エントリのLD、重み、最終更新時刻の各フィールドに、受信したハローフレームのLSの値と、初期重み付け値と、現在時刻を、それぞれ設定する。初期重み付け値は、実施形態に応じて任意に決められる定数である。
第1実施形態では、上記のとおり重みの値は0以上1以下であり、1はLDとして選択不能なことを示す特別な値であるから、初期重み付け値は、0以上1未満の任意の値でよい。より具体的には、初期重み付け値は、例えば0.5でもよい。例えば、図11の1番上に示した重み付けテーブル104−1−Nの最初のエントリは、次のようにして作成されたものであってもよい(ただし、正確にはその場合、最初のエントリの最終更新時刻には、他の2つのエントリの最終更新時刻Tとは異なる値が設定され、図11とまったく同じとはならない)。
・GDとしてノード装置Nに対応付けられた重み付けテーブル104−1−Nが既に存在している。
・しかし、ノード装置Nは、ノード装置Nを隣接ノード装置として今まで認識していなかった。
・ノード装置Nは、ノード装置Nから初めてハローフレームを受信した。
・以上の状況において、ステップS306では重み付けテーブル104−1−Nが注目された。
・よって、ステップS308では、新規エントリのLDフィールドに、受信したハローフレームのLSの値であるNが設定され、新規エントリの重みフィールドに、初期重み付け値である0.5が設定された。
ステップS308の実行後、処理はステップS305に戻る。
図16は、ハローフレーム送信処理のフローチャートである。図16の処理は、図14の処理とは独立して並行に、ハローフレーム生成部112により実行される。具体的には、ノード装置100に電源が入れられると、ハローフレーム生成部112が図16の処理を開始する。
ステップS401でハローフレーム生成部112は、現在時刻が送信予定時刻であるか否かを判断する。現在時刻が送信予定時刻であれば処理はステップS402に移行し、現在時刻が送信予定時刻でなければ処理はステップS401に戻る。つまり、ハローフレーム生成部112は送信予定時刻まで待機する。
例えば、基準時刻Trefとハローフレームの送信間隔ΔThelloが予め決められていてもよい。また、ハローフレーム生成部112は、例えば図4のMPU201のクロックに基づいて現在時刻Tnowを参照することができる。ハローフレーム生成部112は、式(4)のZが整数のときのみ、「現在時刻は送信予定時刻である」と判断してもよい。
Z=(Tref−Tnow)/ΔThello (4)
例えば、基準時刻Trefは予め決められた定数でもよいし、ノード装置100に電源が入れられた時刻でもよい。また、送信間隔ΔThelloは実施形態に応じて適宜決めることができ、例えば10秒などの比較的長い時間でもよい。
ステップS402では、ハローフレーム生成部112がFID生成部113に新たなFIDの生成を要求し、FID生成部113が新たなFIDを生成する。例えば、FIDはシーケンス番号でもよく、FID生成部113はカウンタ回路を使って実現されてもよい。もちろん、FID生成部113はMPU201がプログラムを実行することで実現されてもよい。
ステップS402ではさらに、FID生成部113が生成したFIDを用いてハローフレーム生成部112がハローフレームを生成する。
例えば、図7のハローフレーム312は、次のようにして生成される。すなわち、ノード装置NのFID生成部113−Nが、新たなFIDとしてFという値を生成する。すると、ノード装置Nのハローフレーム生成部112−Nは、新たなハローフレーム312を生成する。
その際、ハローフレーム生成部112−Nは、ハローフレーム312において、LDに0xFFFFFFという所定の値を設定し、LSとGSに自ノードIDであるNを設定し、GDに0x000000という所定の値を設定する。また、ハローフレーム生成部112−Nは、ハローフレーム312において、FIDにはFID生成部113−Nにより生成された値Fを設定し、タイプには所定の値Hを設定する。
以上のようにしてステップS402でハローフレームが生成されると、続いて、ステップS403においてハローフレーム生成部112は、生成したハローフレームの送信を送信部102に依頼し、送信部102がハローフレームを送信する。そして、処理はステップS401に戻る。
続いて、各種テーブルのエージング処理について図17〜図19を参照して説明する。各エージング処理は、例えば、図4のタイマIC203からの割り込み信号を契機として開始されてもよい。
図17は、隣接ノード管理テーブル103のエージング処理のフローチャートである。例えば、タイマIC203が所定の間隔Iで割り込み信号をリンク管理部108に出力し、割り込み信号を契機としてリンク管理部108が所定の間隔Iで図17の処理を行ってもよい。
ステップS501でリンク管理部108は、隣接ノード管理テーブル103(図9を参照)の1つ目のエントリに注目する。以下、図17に関する説明においては、リンク管理部108が注目している隣接ノード管理テーブル103のエントリを「注目エントリ」という。
続いてステップS502でリンク管理部108は、現在時刻と、注目エントリの最終更新時刻との差が、所定の値G以上か否かを判断する。なお、実施形態によって、G=Iでもよいし、G<Iでもよいし、G>Iでもよい。
現在時刻と、注目エントリの最終更新時刻との差が、所定の値G以上であれば、処理はステップS503に移行する。他方、現在時刻と、注目エントリの最終更新時刻との差が、所定の値G未満であれば、処理はステップS505に移行する。
ステップS503でリンク管理部108は、注目エントリのノードIDと同じ値をLDとして有するエントリを、重み付けテーブル104から削除する。
例えば、注目エントリが、図9の隣接ノード管理テーブル103−Nの3番目のエントリである場合、注目エントリのノードIDの値はNである。したがって、ステップS503でリンク管理部108は、重み付けテーブル104−1−N〜104−M−Nのそれぞれから、LDの値がNであるエントリを削除する。例えば、ステップS503では、図10の重み付けテーブル104−1−Nの3つ目のエントリと、重み付けテーブル104−2−Nの3つ目のエントリが削除される。
そして、ステップS504でリンク管理部108は。注目エントリを隣接ノード管理テーブル103から削除する。そして処理はステップS505に移行する。
ステップS505でリンク管理部108は、まだ注目していないエントリが隣接ノード管理テーブル103に残っているか否かを判断する。リンク管理部108が、隣接ノード管理テーブル103のすべてのエントリに注目し終わっていれば、図17の処理は終了する。他方、まだリンク管理部108が注目していないエントリが隣接ノード管理テーブル103に残っていれば、処理はステップS506に移行する。
ステップS506でリンク管理部108は、隣接ノード管理テーブル103のまだ注目していないエントリの中で、次のエントリに注目する。そして処理はステップS502に戻る。
以上の図17のエージング処理により、ノード装置100は、今まで隣接ノード装置として認識していたノード装置からのハローフレームの受信が途絶えると、「当該ノード装置は、もはやノード装置100に隣接していない」と認識することができるようになる。つまり、図17の処理により、ノード装置100は、潜在的なLDの候補としての隣接ノード装置を、環境の変化に追従して適切に管理することができるようになる。
なお、上記の所定の間隔Iおよび所定の値Gは、環境の変化しやすさなどに応じて、実施形態によって適宜決められることが望ましい。なお、第1実施形態では、ネットワーク内のすべてのノード装置に同じハローフレームの送信間隔ΔThelloが設定されており、隣接ノード管理テーブル103のエージング時間である上記の所定の値Gは、G>ΔThelloを満たす。
図18は、重み付けテーブル104のエージング処理のフローチャートである。例えば、タイマIC203が所定の間隔Iで割り込み信号をデータフレーム処理部110に出力し、割り込み信号を契機としてデータフレーム処理部110が所定の間隔Iで図18の処理を行ってもよい。
ステップS601でデータフレーム処理部110は、重み付けテーブル104(図10と図11を参照)のうち1枚目の重み付けテーブル104−1に注目する。以下、図18に関する説明においては、データフレーム処理部110が注目している重み付けテーブルを、「104−i」という参照符号で表し(1≦i≦M)、「注目テーブル」という。ステップS601の実行直後はi=1である。
続いてステップS602でデータフレーム処理部110は、注目テーブル104−iの1つ目のエントリに注目する。以下、注目テーブルのうちでデータフレーム処理部110が注目しているエントリを「注目エントリ」という。
続いてステップS603でデータフレーム処理部110は、現在時刻と、注目エントリの最終更新時刻との差が、所定の値G以上か否かを判断する。なお、実施形態によって、G=Iでもよいし、G<Iでもよいし、G>Iでもよい。
現在時刻と、注目エントリの最終更新時刻との差が、所定の値G以上であれば、処理はステップS604に移行する。他方、現在時刻と、注目エントリの最終更新時刻との差が、所定の値G未満であれば、処理はステップS605に移行する。
ステップS604でデータフレーム処理部110は、注目テーブル104−iから注目エントリを削除する。そして処理はステップS605に移行する。
ステップS605でデータフレーム処理部110は、注目テーブル104−iにまだ注目していないエントリが残っているか否かを判断する。データフレーム処理部110が注目テーブル104−iのすべてのエントリに注目し終わっていれば、処理はステップS607に移行する。他方、まだデータフレーム処理部110が注目していないエントリが注目テーブル104−iに残っていれば、処理はステップS606に移行する。
ステップS606でデータフレーム処理部110は、注目テーブル104−i内のまだ注目していないエントリの中で、次のエントリに注目する。そして処理はステップS603に戻る。
ステップS607でデータフレーム処理部110は、注目テーブル104−iにエントリが存在するか否かを判断する。ステップS603〜S606の繰り返しの結果、注目テーブル104−iにエントリがなくなった場合は、処理はステップS608に移行する。他方、注目テーブル104−iに1つ以上エントリが存在すれば、処理はステップS609に移行する。
ステップS608でデータフレーム処理部110は、エントリの存在しない注目テーブル104−iを削除する。そして、処理はステップS609に移行する。
ステップS609でデータフレーム処理部110は、まだ注目していない重み付けテーブルが重み付けテーブル104の中に残っているか否かを判断する。データフレーム処理部110が、すべての重み付けテーブル104−1〜104−Mに注目し終わっていれば、図18の処理は終了する。他方、まだデータフレーム処理部110が注目していない重み付けテーブル104−j(1≦j≦M)が重み付けテーブル104の中に残っていれば、処理はステップS610に移行する。
ステップS610でデータフレーム処理部110は、重み付けテーブル104の中でまだ注目していない次の重み付けテーブル104−jに注目する(すなわち、重み付けテーブル104−jを注目テーブル104−iとして選ぶ)。そして処理はステップS602に戻る。
以上の図18のエージング処理により、ノード装置100は、「過去の障害の影響が累積されて、どの隣接ノード装置もLDとして選択することが不能となる」といった事態に陥らずに済む。
例えば、図6の例において、ステップS112の後、ノード装置NとNの間のリンクに障害が発生し、ノード装置NとNの間のリンクが障害から復旧したという状況を想定する。もし図18のエージング処理が行われないと、実際には障害からの復旧により、例えば経路〈N,N,N,N,N〉でのデータフレームの送信が可能になっていても、自律分散協調の結果としてこの経路が選択されることがなくなってしまう。しかし、図18のエージング処理が行われれば、上記で想定した状況において、経路〈N,N,N,N,N〉が選択されうるようになる。
なお、上記の所定の間隔Iおよび所定の値Gは、環境の変化しやすさなどに応じて、実施形態によって適宜決められることが望ましい。
図19は、FID管理テーブル105のエージング処理のフローチャートである。例えば、タイマIC203が所定の間隔Iで割り込み信号をデータフレーム処理部110に出力し、割り込み信号を契機としてデータフレーム処理部110が所定の間隔Iで図19の処理を行ってもよい。
ステップS701でデータフレーム処理部110は、FID管理テーブル105(図12と図13を参照)のうち1つ目のエントリに注目する。以下、図19に関する説明においては、データフレーム処理部110が注目しているエントリを「注目エントリ」という。
続いてステップS702でデータフレーム処理部110は、現在時刻と、注目エントリの最終更新時刻との差が、所定の値G以上か否かを判断する。なお、実施形態によって、G=Iでもよいし、G<Iでもよいし、G>Iでもよい。
また、図21のステップS807に関して後述する理由から、第1実施形態では、重み付けテーブル104のエージング時間である所定の値Gと、FID管理テーブル105のエージング時間である所定の値Gは、G<Gを満たす。
現在時刻と、注目エントリの最終更新時刻との差が、所定の値G以上であれば、処理はステップS703に移行する。他方、現在時刻と、注目エントリの最終更新時刻との差が、所定の値G未満であれば、処理はステップS704に移行する。
ステップS703でデータフレーム処理部110は、注目エントリをFID管理テーブル105から削除する。そして処理はステップS704に移行する。
そして、ステップS704でデータフレーム処理部110は、まだ注目していないエントリがFID管理テーブル105に残っているか否かを判断する。データフレーム処理部110がFID管理テーブル105のすべてのエントリに注目し終わっていれば、図19の処理は終了する。他方、まだデータフレーム処理部110が注目していないエントリがFID管理テーブル105に残っていれば、処理はステップS705に移行する。
ステップS705でデータフレーム処理部110は、FID管理テーブル105のまだ注目していないエントリの中で、次のエントリに注目する。そして処理はステップS702に戻る。
以上の図19のエージング処理により、「FID管理テーブル105のエントリが増え続けて記憶領域を使い尽くしてしまう」といった事態を防ぐことができる。
なお、上記の所定の値Gは、例えば、何度もバックトラックが生じる最悪ケースにおいてデータフレームがGSからGDに到達するのにかかると予測される時間の長さ以上になるよう、決められていてもよい。なお、「最悪ケース」とは、詳しくは図30とともに後述するが、探索空間において、刈り込まれていない全探索ノードをバックトラックしながら深さ優先探索順にたどる場合を意味する。一般には、ネットワークの規模が大きいほど、所定の値Gも大きく設定しておくことが望ましい。
図20〜図23は、図14のステップS205におけるデータフレーム受信処理のフローチャートである。なお、説明の便宜上、まず、ノード装置100がGSとはならず中継専門のタイプである場合のデータフレーム受信処理について、図20〜図23を参照して説明する。ノード装置100がGSにもなりうるタイプの場合については、図23の部分が後述の図29の処理に置き換わる。
図14のステップS205でフレーム分岐処理部106からデータフレーム受信処理を行うよう指示されると、データフレーム処理部110は図20の処理を開始する。なお、前述のとおり、フレーム分岐処理部106からの指示は、受信したデータフレームのGSとFIDの値の通知をともなっている。
ステップS801でデータフレーム処理部110は、受信したデータフレームのLDの値が自ノードIDであるか否かを判断する。受信したデータフレームのLDの値が自ノードIDでなければ、処理はステップS802に移行し、受信したデータフレームのLDの値が自ノードIDであれば、処理はステップS803に移行する。
なお、データフレーム受信処理の説明において、「受信したデータフレーム」とは、図14のステップS201で受信部101が受信し、ステップS204でバッファ部109に格納され、図20の処理の開始の契機となったデータフレームのことである。
また、フレーム分岐処理部106は、データフレーム受信処理の開始をデータフレーム処理部110に指示するとき、受信したデータフレームのGSとFIDの値をデータフレーム処理部110に通知している。よって、データフレーム処理部110は、通知されたGSとFIDの値をキーにしてバッファ部109を検索することで、受信したデータフレームを含むエントリを見つけることができる。したがって、データフレーム処理部110は、見つけたエントリから、受信したデータフレームのヘッダに含まれる各フィールドの値を読み出すことができる。
正確には、ステップS801では、データフレーム処理部110はまず、以上のようにして、受信したデータフレームのヘッダに含まれる各フィールドの値をバッファ部109から読み出して記憶する。そして、記憶したLDの値(すなわち受信したデータフレームのLDの値)を自ノードIDと比較する。なお、ノード装置100自身のノードIDである自ノードIDは、例えば、図4のフラッシュメモリ205に予め記録されているので、データフレーム処理部110は自ノードIDを参照することができる。
受信したデータフレームのLDの値が自ノードIDと異なるとき、ノード装置100はノード装置100自身には無関係なデータフレームを偶然受信したということである。よって、ステップS802でデータフレーム処理部110は、受信したデータフレームを破棄する。つまり、データフレーム処理部110は、ステップS801で見つけたバッファ部109のエントリを削除する。そして、データフレーム受信処理は終了する。
他方、受信したデータフレームのLDの値が自ノードIDと等しい場合は、ステップS803でデータフレーム処理部110は、ACKフレームを生成し、ACKフレームの送信を送信部102に依頼する。そして、送信部102がACKフレームを送信する。
例えば、図7のデータフレーム303をノード装置Nが受信すると、ノード装置Nのデータフレーム処理部110−Nは、ステップS803において図7のACKフレーム322を生成する。そして、送信部102−NがACKフレーム322を送信する。
具体的には、データフレーム処理部110−Nは、受信したデータフレーム303のLSの値であるNをACKフレーム322のLDに設定し、自ノードID(すなわちノード装置N自身のノードIDであるN)をACKフレーム322のLSに設定する。また、ACKフレーム322は、対応するデータフレーム303のLSであるノード装置N以外には無関係なので、データフレーム処理部110−Nは、ACKフレーム322のGDには、ヌルを表す特殊な値0x000000を設定する。
また、データフレーム処理部110−Nは、ACKフレーム322を受信したノード装置Nが「ACKフレーム322はデータフレーム303に対するACKフレームである」と認識することができるように、ACKフレーム322のGSとFIDを設定する。すなわち、データフレーム処理部110−Nは、ACKフレーム322のGSとFIDに、それぞれ、受信したデータフレーム303のGSとFIDの値NとFを設定する。
そして、データフレーム処理部110−Nは、ACKフレーム322のタイプとして、「ACKフレーム」を示す所定の値Aを設定する。ステップS803では、以上のようにしてデータフレーム処理部110−NがACKフレーム322を生成し、送信部102−NがACKフレーム322を送信する。
続いて、ステップS804でデータフレーム処理部110は、受信したデータフレームのGDの値が自ノードIDであるか否かを判断する。受信したデータフレームのGDの値が自ノードIDであれば、処理はステップS805に移行する。他方、受信したデータフレームのGDの値が自ノードIDと異なれば、処理は図21のステップS806に移行する。
ステップS805でデータフレーム処理部110は、上位層処理部111に、受信したデータフレームのペイロードを渡し、データフレーム受信処理を終了する。具体的には、データフレーム処理部110は、ステップS801で見つけたバッファ部109のエントリからペイロードを取り出して上位層処理部111に出力し、当該エントリをバッファ部109から削除する。そしてデータフレーム受信処理は終了する。
例えば、図6のステップS112でデータフレームをノード装置Nから受信したノード装置Nでは、受信したデータフレームのペイロードは上位層処理部111−Nに出力され、上位層処理部111−Nにおいて処理される。
図21のステップS806以降の処理は、受信したデータフレームのLDの値が自ノードIDと等しく、かつ受信したデータフレームのGDの値が自ノードIDと異なる場合に実行される。
ステップS806でデータフレーム処理部110は、受信したデータフレームのFIDとGSの値を検索キーとして用いて、FID管理テーブル105を検索する。なお、上記のように、受信したデータフレームのFIDとGSの値は、図20の処理の開始時にフレーム分岐処理部106から通知されている。
続いて、ステップS807でデータフレーム処理部110は、ステップS806の検索の結果エントリがヒットしたか否かを判断する。エントリがヒットした場合、ノード装置
100が以前送信したことのあるデータフレームと同じデータフレームが受信されたということなので、処理はステップS808に移行する。他方、エントリがヒットしなかった場合、ノード装置100が送信したことのないデータフレームが受信されたということなので、処理はステップS810に移行する。
なお、正確には、「ノード装置100が以前送信したことのあるデータフレームと同じデータフレームが受信されたが、検索対象のエントリは既にエージングにより消滅してしまった」という場合も、エントリはヒットしない。このような場合が生じないように、ネットワーク内でバックトラックが繰り返される最悪の時間の見積もりなどに基づいて、適切にFID管理テーブル105のエージング時間Gが定められることが望ましい。
ステップS808でデータフレーム処理部110は、ステップS806の検索でヒットしたFID管理テーブル105のエントリのLDとOLSの値を取り出し、例えば図4のDRAM204などの記憶領域に記憶する。
続いてステップS809でデータフレーム処理部110は、受信したデータフレームのGDの値に対応する重み付けテーブル(以下、図21〜23の説明においては「104−i」という参照符号で参照する)を次のように更新する。すなわち、データフレーム処理部110は、重み付けテーブル104−iにおいて、ステップS808で取り出したLDに対応する重みを、最大値に変更する。なお、第1実施形態では重みの最大値は1である。重みの変更後、処理はステップS817に移行する。
なお、ステップS807、S808、S809と処理が進む場合、ステップS808で取り出したLDに対応するエントリが、受信したデータフレームのGDの値に対応する重み付けテーブル104−iに存在することが、ステップS809では保証されている。その理由は以下のとおりである。
図12と図13に関して説明したように、FID管理テーブル105のエントリにおいて最終更新時刻は、データフレームの送信時に設定される。また、図19に関して説明したように、FID管理テーブル105のエージング時間Gfは、例えば、最悪ケースで予測される時間以上に設定される。よって、ノード装置100が過去に送信したデータフレームがネットワーク内を巡ってノード装置100で受信されるとき、当該データフレームに対応するエントリは、まだFID管理テーブル105に残っていることが保証される。
そして、図11に関して説明したように、データフレームが送信されてACKフレームが返信されると、重みが更新され、重み付けテーブル104−1〜101−M内の各エントリにおいては、重みが更新されるときに最終更新時刻も設定される。
したがって、時系列を追うと下記(E1)〜(E5)の順となる。
(E1)GDの値がNGDで、GSの値がNGSで、LDの値がNLDで、FIDの値がFのデータフレームがノード装置100から送信される。このとき、FID管理テーブル105において最終更新時刻が設定される。例えば、図6のノード装置Nにおいて、ステップS103で図12のエントリEに最終更新時刻T103が設定される。
(E2)上記データフレームに対するACKフレームが受信されると、ノード装置NGDに対応する重み付けテーブル104−iにおいて、LDフィールドの値がNLDであるエントリの重みが更新される。このとき、当該エントリの最終更新時刻が設定される。例えば、ノード装置Nにおいて、図11に示すようにステップS103aで重み付けテーブル104−1−Nの、LDフィールドの値がNであるエントリの最終更新時刻がTに設定される。
(E3)GSの値がNGSで、FIDの値がFの同じデータフレームが、ノード装置100で受信される。例えば、図6のステップS106でノード装置Nがデータフレームを受信する。なお、データフレームのGDの値は中継に際して書きかえられることはないので、(E3)で受信されるデータフレームのGDの値は、上記(E1)より当然、NGDである。
(E4)上記(E1)の時点から、FID管理テーブル105のエージング時間Gが経過する。
(E5)上記(E2)の時点から、重み付けテーブル104のエージング時間Gが経過する。
以上のとおり、(E3)の時点は(E5)の時点より前である。よって、(E3)の時点では、ノード装置NGDに対応する重み付けテーブル104−iにおいて、LDフィールドの値がNLDであるエントリの存在が保証される。
例えば、上記の例では、重み付けテーブル104−1−Nの、LDフィールドの値がNであるエントリの存在が、図6のステップS106の時点保証されている。なお、ここでの「ステップS106の時点」とは、より詳しくは、ステップS106での受信を契機とするデータフレーム受信処理に含まれるステップS809の処理を、ノード装置Nが実行する時点のことである。
したがって、図21のステップS806の検索でFID管理テーブル105にエントリが見つかった場合、ステップS809では必ず、ステップS808で取り出したLDに対応するエントリが、重み付けテーブル104−iに存在する。よって、ステップS809でデータフレーム処理部110は、存在が保証されているエントリにおいて、重みの値を最大値に設定している。
逆に、ステップS806の検索でエントリが見つからなかった場合、ステップS810でデータフレーム処理部110は、受信したデータフレームのLSの値を、例えば図4のDRAM204などの記憶領域に、OLSとして記憶する。
そして、ステップS811でデータフレーム処理部110は、受信したデータフレームのGDの値を検索キーとして用いて、重み付けテーブル104を検索する。
続いて、ステップS812でデータフレーム処理部110は、ステップS811の検索の結果、テーブルがヒットしたか否かを判断する。
受信したデータフレームのGDの値に対応する重み付けテーブルが重み付けテーブル104の中に存在すれば、処理はステップS812aに移行する。なお、ステップS809で導入した「104−i」という参照符号は、受信したデータフレームのGDの値に対応する重み付けテーブルを指すので、ステップS811の検索の結果ヒットしたテーブルも、「重み付けテーブル104−i」である。
他方、受信したデータフレームのGDの値に対応する重み付けテーブルが重み付けテーブル104の中に存在しなければ、処理はステップS813に移行する。
ステップS812aでデータフレーム処理部110は、ステップS811の検索でヒットした重み付けテーブル104−iを調整する。ステップS812aの重み付けテーブル調整処理は、詳しくは図24とともに後述するが、エージング処理の副作用を中和する処理である。
ステップS812aの結果、隣接ノード管理テーブル103で管理されているすべての隣接ノード装置に対応するエントリが重み付けテーブル104−iに存在することが保証される。そして、処理はステップS817に移行する。
ステップS813でデータフレーム処理部110は、受信したデータフレームのGDの値に対応する新規重み付けテーブルを追加する。なお、ステップS813で追加されるテーブルも、「重み付けテーブル104−i」である。
そして、ステップS814でデータフレーム処理部110は、新規重み付けテーブル104−iにおいて、受信したデータフレームのGDの値を、重み付けテーブル104−iのGDとして設定する。
さらに、ステップS815でデータフレーム処理部110は、隣接ノード管理テーブル103のエントリ数と同数の新規エントリを、新規重み付けテーブル104−iに作成する。
そして、ステップS816でデータフレーム処理部110は、ステップS815で作成した各エントリに、それぞれ、隣接ノード管理テーブル103の各エントリのノードIDと、初期重み付け値と、現在時刻を設定する。
なお、以上のステップS811〜S816の具体例を挙げれば、以下のとおりである。
例えば、図6のステップS102でノード装置Nから図7のデータフレーム303を受信したとき、ノード装置Nの重み付けテーブル104−Nには、図11の重み付けテーブル104−1−Nが存在しなかったとする。すると、ノード装置Nが受信したデータフレーム303のGDの値であるNを検索キーにしてノード装置Nのデータフレーム処理部110−NがステップS811で重み付けテーブル104−Nを検索しても、テーブルはヒットしない。
そこで、データフレーム処理部110−Nは、ステップS813で新たに重み付けテーブル104−1−Nを作成し、ステップS814で重み付けテーブル104−1−NのGDにNを設定する。そして、データフレーム処理部110−Nは、ステップS815で、図9の隣接ノード管理テーブル103−Nと同数の(すなわち3つの)新規エントリを重み付けテーブル104−1−Nに作成する。
ここで、隣接ノード管理テーブル103−Nの各エントリのノードIDは、図10のとおり、NとNとNである。よって、ステップS816でデータフレーム処理部110−Nは、ステップS815で作成した3つのエントリそれぞれに、LDとしてNとNとNを設定する。また、データフレーム処理部110−Nは、これら3つのエントリの重みフィールドに、いずれも0.5という初期重み付け値を設定し、これら3つのエントリの最終更新時刻フィールドに、いずれも現在時刻を設定する。
以上のステップS813〜S816の結果として、図11の1段目のような重み付けテーブル104−1−Nが重み付けテーブル104−Nの中に追加される。
ここで、具体例の説明から図21の処理一般の説明に戻る。ステップS817が実行されるのは、ステップS809の実行後、ステップS816の実行後、またはステップS811の検索においてテーブルがヒットしたとステップS812で判断された後である。よって、ステップS817の実行時には、受信したデータフレームのGDの値に対応する重み付けテーブル104−iの存在が保証されている。
そこで、ステップS817においてデータフレーム処理部110は、受信したデータフ
レームのGDの値に対応する重み付けテーブル104−iにおいて、OLSとは異なるLDのうちで最小の重みと対応付けられているLDの値を取得する。
つまり、データフレーム処理部110は、重み付けテーブル104−iにおいて、ステップS808またはS810で記憶したOLSの値とは異なる値をLDとして有するエントリの中から、重みの値が最小のものを選択する。そして、データフレーム処理部110は、選択したエントリのLDと重みの値を、例えば図4のDRAM204などの記憶領域に記憶する。
続いて、ステップS818でデータフレーム処理部110は、下記の2つの条件(F1)と(F2)のいずれかが成立するか否かを判断する。
(F1)ステップS817(または後述のS829)で取得したLDの値に対応する重みが、重みの最大値(第1実施形態では1.0)である。
(F2)ステップS808またはS810で記憶したOLSの値とは異なるLDへのデータフレームの転送がすべて失敗した(ただし、重み付けテーブル104−iにおけるLDが、もともとOLSしか存在しなかった場合も含む)。
条件(F1)または(F2)が成立する場合、もはやLDとして選択可能な隣接ノード装置は残っていないので、処理は図23のステップS830に移行する。
他方、条件(F1)と(F2)のいずれも成立しない場合、まだLDとして選択可能な隣接ノード装置が残っている。換言すれば、(G1)〜(G4)のいずれにも該当しない隣接ノード装置が、少なくとも1つは存在する。そして、LDとして選択可能な隣接ノード装置のノードIDが、ステップS817(または後述のS829)で取得されている。
(G1)当該隣接ノード装置から先の経路が袋小路またはループになっている、と判断されたため、当該隣接ノード装置は最大値の重みと対応付けられている。
(G2)過去に当該隣接ノード装置への同一GD宛てのデータフレームの送信に失敗した結果が累積したため、当該隣接ノード装置は最大値の重みと対応付けられている。
(G3)今回のデータフレーム受信処理において当該隣接ノード装置へのデータフレームの送信を試した結果として、「送信失敗」と判明した。すなわち、データフレームを送信した隣接ノード装置から、所定時間が経っても、ACKフレームを受信することができなかった。
(G4)当該隣接ノード装置はOLSである。
そこで、ステップS818で条件(F1)と(F2)のいずれも成立しないと判断されると、処理はステップS819に移行する。ステップS819以降の処理は、取得済みのLDの値で識別される隣接ノード装置へのデータフレームの転送を試みる処理である。
ステップS819でデータフレーム処理部110は、以下のようにして新たなデータフレームを作成して送信部102に出力し、作成されたデータフレームを送信部102が送信する。
具体的には、データフレーム処理部110は、ステップS817(または後述のS829)で取得したLDの値を新たなデータフレームのLDに指定し、自ノードIDを新たなデータフレームのLSに指定する。また、データフレーム処理部110は、受信したデータフレームからGD、GS、FID、タイプ、長さの各フィールドの値と、ペイロードを、新たなデータフレームにコピーする。なお、「受信したデータフレーム」とは、上記のとおり、ステップS801で見つかったバッファ部109内のエントリに格納されているデータフレームである。
ステップS819での送信後、処理はステップS820に移行し、データフレーム処理部110がバッファ部109のタイムアウト時刻を更新する。すなわち、データフレーム処理部110は、バッファ部109において、受信したデータフレームを格納しているエントリのタイムアウト時刻に、式(5)の時刻Ttimeoutを設定する。
timeout=Tnow+Twait (5)
なお、式(5)において時刻Tnowは現在時刻であり、時間TwaitはACKフレーム待ち時間である。
そして、ステップS821でデータフレーム処理部110は、ステップS806のFID管理テーブル105の検索においてエントリがヒットしているか、または、後述するステップS823、および、ステップS824で、FID管理テーブル105に新規エントリを追加して値を設定しているか否かを確認する。つまり、受信したデータフレームのGSとFIDの値に等しい値を、GSおよびFIDとして有するエントリが、FID管理テーブル105に存在するか否かを、データフレーム処理部110は確認する。
ステップS806の検索でエントリがヒットしているか、ステップS823およびステップS824でFID管理テーブル105に新規エントリを追加して値を設定していれば、今回のデータフレーム受信処理は、過去にノード装置100自身が送信したのと同じデータフレームの受信を契機とする処理である。よって、データフレーム処理部110は続いてステップS822を実行する。他方、ステップS806の検索でエントリがヒットしておらず、かつ、ステップS823およびステップS824でFID管理テーブル105に新規エントリを追加して値を設定していなければ、ノード装置100は、初めて受信するデータフレームの初めての転送を試みているところである。よって、処理はステップS823に移行する。
ステップS822でデータフレーム処理部110は、ステップS806の検索でヒットしたエントリを更新する。具体的には、データフレーム処理部110は、ステップS806の検索でヒットしたエントリにおいて、LDフィールドには、ステップS819で送信したデータフレームのLDの値を設定し、最終更新時刻フィールドには、現在時刻を設定する。そして、処理はステップS825に移行する。
また、ステップS823でデータフレーム処理部110は、FID管理テーブル105に新規エントリを追加する。
そして、次のステップS824でデータフレーム処理部110は、新規エントリに値を設定する。具体的には、データフレーム処理部110は、新規エントリにおいて、FIDとGSとLDの各フィールドには、それぞれステップS819で送信したデータフレームの値をコピーする。また、データフレーム処理部110は、新規エントリにおいて、最終更新時刻フィールドには現在時刻を設定し、OLSフィールドには、ステップS810で記憶したOLSの値をコピーする。そして、処理はステップS825に移行する。
ステップS825でデータフレーム処理部110は、ステップS819における送信の成否の通知を待つ。
例えば、データフレーム処理部110が、所定のプログラムのスレッドを実行する図4のMPU201により実現される場合、ステップS825ではスレッドがスリープしてもよい。その場合、「送信成功」または「送信失敗」の通知は、スレッドを起こす処理である。
ステップS819における送信が成功した場合は、ステップS819で送信したデータフレームにおいてLDとして指定されている隣接ノード装置からACKフレームが返信される。そして、ACK処理部107が後述の図25の処理を行い、データフレーム処理部110に「送信成功」を通知する。
また、ステップS819における送信の失敗とは、ステップS819で送信したデータフレームにおいてLDとして指定されている隣接ノード装置からのACKフレームが、式(5)の時刻Ttimeoutになってもノード装置100で受信されないことである。ACKフレームの受信は、ACK処理部107による後述の図26の処理により監視されており、ACKフレームがタイムアウト時刻Ttimeoutになっても受信されないと、ACK処理部107がデータフレーム処理部110に「送信失敗」を通知する。
データフレーム処理部110が、ステップS825での待機の後、ACK処理部107から「送信成功」または「送信失敗」の通知を受けると、処理はステップS826に移行する。
ステップS826でデータフレーム処理部110は、ACK処理部107から受けた通知に基づいて、ステップS819の送信が成功したか否かを判断する。送信が成功した場合、処理はステップS827に移行し、送信が失敗した場合、処理はステップS828に移行する。
送信が成功した場合、ステップS827でデータフレーム処理部110は、重み付けテーブル104において、ステップS819で送信したデータフレームのGDとLDの組に対応する重みを小さくする。ここで、データフレームのGDは転送によって書き換えられないことに注意して換言すれば、ステップS827でデータフレーム処理部110は、受信したデータフレームのGDに対応する重み付けテーブル104−iにおいて、重みの更新を行う。
つまり、データフレーム処理部110は、ステップS817(または後述のステップS829)で取得したLDの値をLDとして有するエントリを重み付けテーブル104−iで探し、見つかったエントリの重みの値を小さくする。重みの値を小さくすることは、対応するLDの優先度を上げることである。
ここで、見つかったエントリの現在の重みの値をWcurrentとすると、ステップS827でデータフレーム処理部110は、見つかったエントリの重みの値を例えば式(6)のWrevisedに更新してもよい。
revised=max(Wmin,Wcurrent−ΔWsuccess
(6)
なお、式(6)において、Wminは重みの最小値であり、第1実施形態ではWmin=0である。また、ΔWsuccessは、送信が成功したときに重みを減らす所定の量であり、実施形態に応じて適宜値を決めることができる。例えば、ΔWsuccess=0.1でもよい。
さらに、データフレーム処理部110はステップS827で、ステップS817(または後述のステップS829)で取得したLDの値をLDとして有する重み付けテーブル104−iのエントリにおいて、最終更新時刻に現在時刻を設定する。そして、データフレーム受信処理は終了する。
他方、送信が失敗した場合、ステップS828でデータフレーム処理部110は、重み付けテーブル104において、ステップS819で送信したデータフレームのGDとLDの組に対応する重みを大きくする。つまり、ステップS828でデータフレーム処理部110は、ステップS817(または後述のステップS829)で取得したLDの値をLDとして有するエントリを重み付けテーブル104−iで探し、見つかったエントリの重みの値を大きくする。重みの値を大きくすることは、対応するLDの優先度を下げることである。
例えば、ステップS828でデータフレーム処理部110は、見つかったエントリの重みの値を式(7)のWrevisedに更新してもよい。
revised=min(Wmax,Wcurrent+ΔWfailure
(7)
なお、式(7)において、Wmaxは重みの最大値であり、第1実施形態ではWmax=1である。また、ΔWfailureは、送信が失敗したときに重みを増やす所定の量であり、実施形態に応じて適宜値を決めることができる。例えば、ΔWfailure=0.1でもよい。もちろん、ΔWfailure≠ΔWsuccessでもよい。
なお、データフレーム処理部110はステップS828で、ステップS817(または後述のステップS829)で取得したLDの値を、例えば図4のDRAM204などのワークエリアに「転送に失敗したLD」として記憶する。例えば、データフレーム処理部110は、DRAM204上の線形リストをステップS817で空に初期化し、ステップS828の実行のたびに、ステップS817(または後述のステップS829)で取得したLDの値を保持する要素を線形リストに追加してもよい。もちろん、「転送に失敗したLD」の記憶のために配列など他のデータ構造が使われてもよい。
さらに、データフレーム処理部110はステップS828で、ステップS817(または後述のステップS829)で取得したLDの値をLDとして有する重み付けテーブル104−iのエントリにおいて、最終更新時刻に現在時刻を設定する。そして処理はステップS829に移行する。
ステップS829でデータフレーム処理部110は、今までにLDとして試していない他の選択可能な隣接ノード装置を探す。具体的には、データフレーム処理部110は、受信したデータフレームのGDの値に対応する重み付けテーブル104−iにおいて、転送に失敗したLD以外で、かつOLSとは異なるLDのうちで、最小の重みと対応付けられているLDの値を取得する。なお、転送に失敗したLDは、ステップS828において例えば図4のDRAM204などのワークエリアに、例えば線形リストなどの形で、記憶されている。
つまり、データフレーム処理部110は、重み付けテーブル104−iにおいて、(H1)かつ(H2)である値をLDとして有するエントリの中から、重みの値が最小のものを選択する。そして、データフレーム処理部110は、選択したエントリのLDと重みの値を、例えば図4のDRAM204などの記憶領域に記憶する。
(H1)過去にステップS817またはS829で取得したLDの値とは異なる値
(H2)ステップS808またはS810で記憶したOLSの値とは異なる値
したがって、例えば、ステップS828で0.2に更新された重みと対応付けられた隣接ノード装置は、ステップS829でLDとして選択されず、ステップS829では0.2より大きな、0.8などの重みの隣接ノード装置が選択されることもありうる。
以上のステップS817〜S829の具体例を挙げれば、以下のとおりである。例えば、図6のノード装置Nには、ノード装置N、N、およびNが隣接している。そして、図12のとおり、ノード装置NのFID管理テーブル105−NのエントリE4のOLSの値は、Nである。
図6の例では、ノード装置Nのデータフレーム処理部110−Nが、最初にステップS817でLDの値Nを取得するので、ステップS104のようにノード装置Nへのデータフレームの送信が行われる。しかし、図6に示すとおりステップS104の送信は失敗するので、データフレーム処理部110−NはステップS826で「送信失敗」と判断する。
すると、データフレーム処理部110−NがステップS829を実行する時点で、転送に失敗したLD(すなわちN)以外で、かつOLS(すなわちN)とは異なるLDの値は、Nのみである。よって、ステップS829ではLDの値Nが取得される。
こうしてステップS829でLDの値が取得されると、処理はステップS829からステップS818へ戻る。
よって、上記のノード装置Nの例では、ステップS829の後、再度ステップS818〜S826が実行される。そして、図6にステップS105として示すように、今度はステップS826で「送信成功」と判断され、ステップS827が実行されて、データフレーム受信処理が終了する。
なお、ステップS828で、例えば式(7)のように重みを更新することの影響について具体例を挙げて説明すれば、以下のとおりである。
例えば、図2のネットワーク2において、ノード装置N106が隣接ノード装置N108から、ノード装置N118をGDとして指定する第1のデータフレームを時刻Trcv1に受信したとする。そして、時刻Trcv1にノード装置N106には、ノード装置N118に対応する重み付けテーブル104−g106−N106が存在したとする。また、時刻Trcv1の重み付けテーブル104−g106−N106においては、ノード装置N102には重み0.4が、ノード装置N103には重み0.7が、ノード装置N107には重み0.1が、ノード装置N108には重み0.5が、それぞれ対応付けられていたとする。
すると、ステップS817では、最小の重み0.1と対応付けられているノード装置N107がLDとして選択される。ところが、ステップS819でデータフレームが送信されるとき、偶然、ノード装置N106とN107の間に遮蔽物が置かれるなどの理由で、一時的に、ノード装置N106とN107の無線リンクが通信不能になったとする。
すると、ACKフレームが返信されないので、ステップS828では、ノード装置N107の重みが0.1から0.2に更新される。そして、ステップS829では、重み0.4と対応付けられているノード装置N102がLDとして選択される。ここで、ステップS819におけるデータフレームの送信が成功し、ノード装置N102からACKフレームが返信されたとする。すると、ステップS827でノード装置N102の重みが0.4から0.3に更新され、データフレーム受信処理が終了する。
ここで、ノード装置N106からノード装置N102へ送信された第1のデータフレームは、ノード装置N106にバックトラックすることなく、ノード装置N118に到達したとする。つまり、重み付けテーブル104−g106−N106においては、第1のデータフレームの転送にともなって重みが1に更新されるエントリはなかったとする。
すると、ノード装置N106が、その後の時刻Trcv2に、同じくノード装置N118をGDとして指定する第2のデータフレームを今度はノード装置N103から受信したとき、重み付けテーブル104−g106−N106の内容は次のとおりである。すなわち、ノード装置N102には重み0.3が、ノード装置N103には重み0.7が、ノード装置N107には重み0.2が、ノード装置N108には重み0.5が、それぞれ対応付けられている。
よって、ステップS817では、第1のデータフレームの転送に失敗したとはいえ、なお最小の重みと対応付けられているノード装置N107が、LDとして選択される。そして、もし時刻Trcv2にノード装置N106とN107の間の無線リンクの通信品質が好転しており、ステップS819での第2のデータフレームの送信が成功すれば、ステップS827でノード装置N107の重みは再度0.1に戻る。
ここで、第2のデータフレームのノード装置N107への転送の結果、バックトラックが生じないものとすると、ノード装置N107の重みは0.1のままである。よって、さらにその後の時刻Trcv3に、同じくノード装置N118をGDとして指定する第3のデータフレームを、ノード装置N107以外の隣接ノード装置からノード装置N106が受信すれば、LDとして最も優先的に選択されるのは、やはりノード装置N107である。
このように、ステップS829で重みを急激に最大値に設定するのではなく少しだけ大きくすると、重み付けテーブル104が通信環境の変化に過剰に反応することはない。よって、同じノード装置をGDとして指定する複数のデータフレームを次々とノード装置N106が受信しているうちに、一時的に障害の生じていたリンクが障害から回復すれば、環境の好転に追従して、過去の学習結果が再びLDの選択に活かされるようになる。つまり、上記の例では、LDとして適切だと過去に学習済みのノード装置N107が、再びLDとして優先的に選択されるようになる。
あるいは、時刻Trcv2においてノード装置N106とN107の間の無線リンクが障害から復旧していない場合もありうる。その場合、第2のデータフレームの送信時のLDとして、一旦は重み0.2のノード装置N107が選択されるが、ACKフレームが受信されないために、ノード装置N107の重みは0.3に更新される。そして、最終的には重み0.3と対応付けられたノード装置N102がLDとして選択され、送信が成功して重みが0,2に更新されることもありうる。
すると、時刻Trcv3に、例えばノード装置N103から、ノード装置N106が第3のデータフレームを受信すると、重み0.2に対応付けられたノード装置N102がLDとして選択され、また送信が成功し、ノード装置N102の重みが0.1になるかもしれない。そして、その後しばらくは、ノード装置N118をGDとして指定するデータフレームのLDとして、ノード装置N106はノード装置N102を選択し続けるかもしれない。
しかし、さらにその後、ノード装置N106とN102の間の無線リンクに障害が生じたとすると、ノード装置N102からはACKフレームが返信されてこない。するとステップS829でLDの再選択が行われる。
その場合、時刻Trcv1以前にLDとして好適であると学習されていたノード装置N107が、重み0.5や0.7と対応付けられており相対的にLDとしてあまり適切ではないノード装置N108やN103よりも、優先的にLDとして選ばれる。その理由は、第1と第2のデータフレームの送信時の重みの学習は、ステップS828に示すように重みをなだらかに変化させるものであり、ノード装置N107の重みは、なおノード装置N108やN103の重みよりも小さいからである。
そして、この時点でノード装置N106とN107の間の無線リンクが障害から復旧していれば、再度、ノード装置N107の重み0.2に減らされる。このように、多少復旧に時間がかかっても、一時的な環境の変化が過剰に重み付けテーブル104に反映されないため、過去の学習の成果が緩やかに反映される。したがって、適切なLDが選択される蓋然性も高まる。
以上のとおり、一時的な障害の影響を過剰に受けないようにするため、ステップS828では、少しだけ重みが調整されるのである。
さてここで、ステップS818の分岐の説明に戻る。ステップS818で2つの条件(F1)と(F2)のいずれかが成立すると判断されると、もはやLDとして選択可能な隣接ノード装置は残っていないので、処理は図23のステップS830に移行する。
ステップS830でデータフレーム処理部110は、以下のようにして新たなデータフレームを作成して送信部102に出力し、作成されたデータフレームを送信部102が送信する。
具体的には、データフレーム処理部110は、ステップS808またはS810で記憶したOLSの値を新たなデータフレームのLDに指定し、自ノードIDを新たなデータフレームのLSに指定する。また、データフレーム処理部110は、受信したデータフレームからGD、GS、FID、タイプ、長さの各フィールドの値と、ペイロードを、新たなデータフレームにコピーする。なお、「受信したデータフレーム」とは、上記のとおり、ステップS801で見つかったバッファ部109内のエントリに格納されているデータフレームである。ステップS830で行われる送信処理が、すなわち、バックトラック動作である。
なお、ステップS830の送信の具体例は、図6のステップS110である。
ステップS830での送信後、処理はステップS831に移行する。ステップS831でデータフレーム処理部110は、受信したデータフレームのFIDとGSの値を検索キーとして用いてFID管理テーブル105を検索する。
そして、ステップS832でデータフレーム処理部110は、ステップS831の検索の結果、エントリがヒットしたか否かを判断する。エントリがヒットしていれば処理はステップS833に移行し、エントリがヒットしていなければ処理はステップS834に移行する。
なお、ステップS807で「エントリがヒットした」と判断されている場合に、ステップS831の検索の結果見つかるエントリは、ステップS806の検索の結果見つかったエントリである。また、ステップS807で「エントリがヒットしなかった」と判定され、かつステップS823において新規エントリが作成された場合は、ステップS831の検索の結果、ステップS823で作成された新規エントリが見つかる。
ステップS832で「エントリがヒットしなかった」と判断されるのは、(I1)かつ(I2)の場合であり、換言すれば、(J1)かつ(J2)の場合である。
(I1)ステップS807で「エントリがヒットしなかった」と判断された。
(I2)1回目にステップS818が実行された直後に、ステップS830に処理が移行した。
(J1)ノード装置100が今までに受信したことのないデータフレームが受信された。
(J2)受信したデータフレームのGSの値に対応する重み付けテーブル104−iでは、すべてのLDに最大値の重みが対応付けられている。
ステップS833でデータフレーム処理部110は、ステップS831の検索の結果ヒットしたエントリを更新する。具体的には、データフレーム処理部110は、ヒットしたエントリにおいて、LDには、ヒットしたエントリ自身のOLSの値をコピーし、最終更新時刻には、現在時刻を設定する。そして処理はステップS836に移行する。
他方、ステップS834では、データフレーム処理部110はFID管理テーブル105に新規エントリを追加する。
そして、次のステップS835でデータフレーム処理部110は、ステップS834で追加した新規エントリに値を設定する。具体的には、データフレーム処理部110は、新規エントリにおいて、FIDとGSには、受信したデータフレームの値をそれぞれコピーし、最終更新時刻には、現在時刻を設定し、OLSとLDには、受信したデータフレームのLSの値をコピーする。そして処理はステップS836に移行する。
ステップS836でデータフレーム処理部110は、ステップS830で送信したデータフレームに関する送信成否の通知を待つ。そして、「送信成功」または「送信失敗」の通知をデータフレーム処理部110がACK処理部107から受けると、処理はステップS837に移行する。ステップS836はステップS825と類似しているので、詳しい説明は省略する。
そして、ステップS837でデータフレーム処理部110は、ステップS830におけるデータフレームの送信が成功したか否かを判断する。送信が失敗した場合、処理はステップS838に移行し、送信が成功した場合、処理はステップS839に移行する。
ステップS838が実行されるのは、(K1)かつ(K2)という、例外的な場合である。
(K1)OLS以外のすべての隣接ノード装置が、(K1−1)または(K1−2)である。
(K1−1)最大値の重みと対応付けられている。
(K1−2)LDとして指定してデータフレームを送信すると、送信に失敗する。
(K2)OLSへのデータフレームの送信(つまりバックトラック動作)は失敗した。
この場合、データフレーム処理部110はステップS838で、受信したデータフレームを破棄する。すなわち、データフレーム処理部110は、ステップS801で見つけたエントリをバッファ部109から削除する。そして、データフレーム受信処理は終了する。
なお、ステップS838の影響について、具体例とともに説明すれば以下のとおりである。
例えば、図6のステップS110は、ノード装置NがステップS830で行う送信である。図6の例では、ステップS110でのノード装置Nからノード装置Nへのデータフレームの送信に対して、ノード装置NがACKフレームをノード装置Nに返信する。
ここで、逆に、ステップS110の時点でノード装置NとNの間のリンクに障害が発生し、ステップS110(すなわちステップS830)でノード装置Nが送信したデータフレームが、ノード装置Nには届かなかったと仮定する。すると、当然ノード装置Nがノード装置NからACKフレームを受信することもないので、ノード装置Nは、ステップS837で「送信失敗」と判断し、ステップS838を実行する。つまり、ステップS101でノード装置Nが送信したデータフレームは、GDであるノード装置Nに到達する前に、ネットワーク1内で消滅してしまう。
しかも、ノード装置Nにとっては、「ステップS102で送信が成功した後、どの隣接ノード装置からも同じデータフレームは受信されていない」という状態である。したがって、ノード装置Nには、「GDとしてノード装置Nが指定されているとき、ノード装置NがLDとしてノード装置Nを選択することは不適切である」とは認識されない。つまり、図6の例のように、ノード装置Nが「GDとしてノード装置Nが指定されているとき、ノード装置NはLDとしてノード装置Nを選択するのが適切である」と学習することはできない。
その結果、GDとしてノード装置Nが指定されている新たな別のデータフレームをノード装置Nが受信した場合(またはそのようなデータフレームをノード装置NがGSとなって送信する場合)、ノード装置Nは、LDとしてノード装置Nを選択する。
仮に、その時点でもまだノード装置NとNの間のリンクが障害から復旧していなければ(例えば、悪い電波状況が続いていれば)、ノード装置Nから送信されたデータフレームがノード装置Nには届かない。したがって、ノード装置NはACKフレームを受信することができず、図22のステップS826で「送信失敗」と判断する。
その結果、ノード装置NはステップS828で、GDであるノード装置Nに対応する重み付けテーブル104−h−N(この参照符号は図6の説明と同様)においてノード装置Nに対応する重みを大きくする。そして、ノード装置Nは、続くステップS829で、LDとしてノード装置Nを再選択する。
このように、データフレームがネットワーク1内のノード装置NにおいてステップS838で破棄されると、破棄されたデータフレームに関するOLSである他のノード装置Nにおける重み付けテーブル104−h−Nの学習が、遅れることがある。
しかしながら、上記の例示から明らかなとおり、ノード装置Nにおける学習は単に少し遅れるだけである。ノード装置Nは、先のデータフレームと同じくノード装置NをGDとする次のデータフレームを受信した後、その受信を契機とする一連の処理により、適切な重みを学習することができる。つまり、複数のデータフレームが次々に流通するネットワーク1全体の動作として見れば、OLSへのバックトラックのためのデータフレームの送信失敗により局所的に重みの学習が遅れるノード装置があっても、学習の遅れはすぐに挽回することができる。
ここで、図23のフローチャートの説明に戻る。ステップS839は、OLSへのデータフレームの送信に成功した場合に実行される。
ステップS839でデータフレーム処理部110は、重み付けテーブル104において、ステップS830で送信したデータフレームのGDとLDの組に対応する重みを小さくする。換言すれば、データフレーム処理部110は、受信したデータフレームのGDに対応する重み付けテーブル104−iにおいて、送信したデータフレームのLD(つまりステップS808またはS810で記憶したOLS)に対応する重みを更新する。
ステップS839の詳細はステップS827と同様なので詳しい説明は省略するが、データフレーム処理部110は、例えば式(6)を使って重みを更新してもよい。データフレーム処理部110はさらに、重み付けテーブル104−iの、重みを更新したエントリにおいて、最終更新時刻に現在時刻を設定する。そして、データフレーム受信処理は終了する。
続いて、図24を参照して、図21のステップS812aの重み付けテーブル調整処理の詳細を説明する。なお、図24の重み付けテーブル調整処理は、後述の図27のステップS1108aでも呼び出される。図24の説明において「ヒットした重み付けテーブル104−i」とは、図21のステップS811の検索または図27のステップS1107の検索でヒットしたテーブルを意味する。
ステップS851でデータフレーム処理部110は、隣接ノード管理テーブル103(図9参照)の1つ目のエントリに注目する。なお、以下の図24の説明において、データフレーム処理部110が注目している隣接ノード管理テーブル103のエントリを「注目エントリ」という。
次に、ステップS852では、ヒットした重み付けテーブル104−iに注目エントリのノードIDの値をLDとして含むエントリがあるか否かを、データフレーム処理部110が判断する。ヒットした重み付けテーブル104−iに、注目エントリのノードIDの値をLDとして含むエントリがあれば、処理はステップS855に移行する。逆に、ヒットした重み付けテーブル104−iに、注目エントリのノードIDの値をLDとして含むエントリがなければ、処理はステップS853に移行する。
ステップS853でデータフレーム処理部110は、ヒットした重み付けテーブル104−iに新規エントリを追加する。
続いてステップS854でデータフレーム処理部110は、ステップS853で重み付けテーブル104−iに追加した新規エントリに値を設定する。つまり、データフレーム処理部110は、新規エントリにおいて、隣接ノード管理テーブル103の注目エントリのノードIDの値をLDフィールドに、初期重み付け値を重みフィールドに、現在時刻を最終更新時刻フィールドに、それぞれ設定する。
なお、ステップS854における初期重み付け値は、図15のステップS308における初期重み付け値とは異なる。具体的には、ステップS854での初期重み付け値は、ヒットした重み付けテーブル104−iの重みフィールドにおいて、1未満の重みのうちの最大値である。
例えば、ヒットした重み付けテーブル104−iの重みフィールドに4つのエントリが存在し、それぞれの重みフィールドの値が0.4、0.7、1、および0.5であれば、ステップS854での初期重み付け値は、0.7である。なお、ヒットした重み付けテーブル104−iの重みフィールドの値が、全エントリで1の場合は、ステップS854での初期重み付け値は、1未満の任意の値であり、例えば図15のステップS308での初期重み付け値と同様に0.5でもよい。
以上のような初期重み付け値をステップS854で用いることにより、重み付けテーブル104−iの既存のエントリに反映されている学習結果が優先的に考慮される。その結果、経路が必要以上に変動することがなくなり、換言すれば、経路が安定する。
例えば、4つのエントリの重みフィールドの値がそれぞれ0.4、0.7、1、および0.5である上記の例において、ステップS854で初期重み付け値として図15のステップS308と同様に0.5が使われるとする。すると、重みが何も学習されていない隣接ノード装置(すなわちステップS853で追加された新規エントリにLDとしてノードIDが記録されている隣接ノード装置)が、重みが0.7の隣接ノード装置よりも優先的にLDとして選択されてしまう。つまり、今までの学習の蓄積としての重み0.7が無視されてしまう。
そこで、第1実施形態では、重みが何も学習されていない隣接ノード装置が、重みが学習済みの隣接ノード装置よりも優先的にLDとして選択されることを防ぎ、今までの学習結果を優先的に考慮するために、上記のように定義される初期重み付け値が利用される。
ステップS855でデータフレーム処理部110は、隣接ノード管理テーブル103にまだ注目していないエントリが残っているか否かを判断する。データフレーム処理部110が隣接ノード管理テーブル103のすべてのエントリに注目し終えていれば、図24の処理は終了する。他方、まだデータフレーム処理部110が注目していないエントリが隣接ノード管理テーブル103に残っていれば、処理はステップS856に移行する。
そして、ステップS856でデータフレーム処理部110は、隣接ノード管理テーブル103のまだ注目していないエントリのうち、次のエントリに注目する。そして処理はステップS852に戻る。
なお、図24の処理の意義は以下のとおりである。
重み付けテーブル104−iにおけるエントリごとのエージング処理の副作用として、図24の処理の直前には、次のような状況の可能性もある。すなわち、隣接ノード管理テーブル103に登録されているある隣接ノード装置のノードIDを、LDとして有するエントリが、重み付けテーブル104−iに存在しない可能性がある。
ここで、ノード装置100の隣接ノード装置は、データフレームを送信する際にデータフレーム処理部110が選択するLDの潜在的な候補である。よって、ヒットした重み付けテーブル104−iのLDフィールドにおいて全隣接ノード装置が網羅されるようにすることが、ノード装置100の適切な動作のためには望ましい。
以上の図24の重み付けテーブル調整処理によれば、エージング処理の副作用として生じる可能性のある上記のような状況が解消される。つまり、隣接ノード管理テーブル103に登録されているすべてのノードIDが、ヒットした重み付けテーブル104−iにLDとして登録されていることが、保証される。
以上、図20〜24を参照して、図14のステップS205におけるデータフレーム受信処理について詳しく説明した。続いて、データフレーム受信処理のステップS826およびS837における送信成否の通知に関連する処理について、図25と図26を参照して説明する。
図25は、図14のステップS206におけるACKフレーム受信処理のフローチャートである。図25の処理は、フレーム分岐処理部106からACKフレームがACK処理部107に出力されると開始される。
ステップS901でACK処理部107は、フレーム分岐処理部106から受け取ったACKフレームのLDの値が自ノードIDと等しいか否かを判断する。ACKフレームのLDの値が自ノードIDと等しければ、処理はステップS902に移行し、ACKフレームのLDの値が自ノードIDと異なれば、図25の処理は終了する。ACK処理部107も、例えばフラッシュメモリ205などに予め格納された自ノードIDを参照することができる。
例えば、図6のステップS105でノード装置Nが送信したデータフレームに対するACKフレームを、図31にステップS105aとして示すようにノード装置Nが送信すると、無関係なノード装置NもACKフレームを受信する。なぜなら、ノード装置Nはノード装置Nに隣接しているからである。
しかし、ノード装置NのACK処理部107−Nは、ステップS901の判断の結果、直ちに図25の処理を終了するので、ノード装置Nは、ノード装置Nと無関係なACKフレームによる副作用を受けることはない。
ステップS902でACK処理部107は、ACKフレームのGSとFIDの値から、ACKフレームに対応する送信済みのデータフレームを特定する。
例えば、図6のステップS102でノード装置Nがノード装置Nへ送信する図7のデータフレーム303に対して、ノード装置Nは図7のACKフレーム322をノード装置Nに返信する。ここで、ACKフレーム322の受信を契機にノード装置NのACK処理部107−Nが図25の処理を行う場合について詳しく説明すると、以下のとおりである。
ACK処理部107−Nは、ステップS902において、ACKフレーム322のGSとFIDの値(すなわちNとF)を取り出す。また、バッファ部109−Nは、図8と同様の形式であるから、バッファ部109−Nには、ノード装置Nから送信済みのデータフレーム303が格納されている。よって、ACK処理部107−Nは、取り出したGSとFIDの値(すなわちNとF)をキーにしてバッファ部109−Nのエントリを検索し、データフレーム303を含むエントリを特定する。
続いて、ステップS903でACK処理部107は、ステップS902で特定した送信済みのデータフレームをバッファ部109から削除する。つまり、ステップS902の検索で見つかったエントリを、ACK処理部107はバッファ部109から削除する。
また、ステップS904でACK処理部107は、ステップS902で特定した送信済みのデータフレームに関して、データフレーム処理部110に「送信成功」を通知する。そして、図25の処理は終了する。
例えば、データフレーム処理部110は、図4のMPU201がプログラムを実行することにより実現されていてもよい。その場合、MPU201をデータフレーム処理部110として機能させるスレッドは、データフレームの送信後、ACKフレームを受信するまでスリープしていてもよい。ステップS904における「送信成功」の通知は、スリープしているスレッドを起こす処理である。
なお、ステップS904の通知は、ステップS902で特定したデータフレームのGSとFIDの値の通知をともなう。例えば上記の例においては、ACK処理部107−Nは、データフレーム303を識別するためのGSとFIDの値(すなわちNとF)も、データフレーム処理部110に通知する。
図26は、ACKフレームがタイムアウト時刻までに受信されない場合の処理を示すフローチャートである。図26の処理は、例えば、図4のタイマIC203が所定の間隔で発生させる割り込み信号を契機として、定期的に行われる。
ステップS1001でACK処理部107は、バッファ部109(図8を参照)の1つ目のエントリに注目する。以下、図26に関する説明においては、ACK処理部107が注目しているバッファ部109のエントリを「注目エントリ」という。
続いてステップS1002でACK処理部107は、現在時刻と注目エントリのタイムアウト時刻フィールドの値を比較する。そして、現在時刻がタイムアウト時刻以降であれば、処理はステップS1003に移行する。他方、現在時刻がまだタイムアウト時刻に達していなければ、処理はステップS1005に移行する。
ステップS1003でACK処理部107は、バッファ部109の注目エントリに格納されているデータフレームに関して、「送信失敗」をデータフレーム処理部110に通知する。ステップS1003の通知は、図25のステップS904の通知と同様に、具体的には、例えばスリープしているスレッドを起こす処理であってもよい。
また、ステップS904の通知と同様に、ステップS1003の通知も、データフレームのGSとFIDの値の通知をともなう。具体的には、ACK処理部107は、注目エントリに格納されているデータフレームのGSとFIDの値を読み取り、読み取ったGSとFIDの値によりデータフレームを特定して、特定したデータフレームの「送信失敗」をデータフレーム処理部110に通知する。
なお、送信失敗の場合、データフレーム処理部110が今までLDとして試していない隣接ノード装置を新たなLDとして選択してデータフレームの再送を試みることがある。よって、ステップS1003の時点では、注目エントリはバッファ部109から削除されない。
続いてステップS1004でACK処理部107は、注目エントリのタイムアウト時刻に、式(5)の時刻Ttimeoutを設定する。そして、処理はステップS1005に移行する。
ステップS1005では、まだ注目していないエントリがバッファ部109に残っているか否かをACK処理部107が判断する。ACK処理部107が、バッファ部109のすべてのエントリに注目し終わっていれば、図26の処理は終了する。他方、まだACK処理部107が注目していないエントリがバッファ部109に残っていれば、処理はステップS1006に移行する。
ステップS1006でACK処理部107は、バッファ部109の中でまだ注目していない次のエントリに注目する。そして処理はステップS1002に戻る。
ところで、図20〜図23を参照して説明したデータフレーム受信処理は、上記のとおり、ノード装置100がGSとならないタイプのノード装置である場合の例である。以下では、図27〜図29を参照して、GSとなりうるタイプのノード装置に特有の処理について説明する。
図27と図28は、ノード装置100がGSとなってデータフレームを送信する場合の送信処理のフローチャートである。図27の処理は、上位層処理部111からデータフレーム処理部110への要求を契機として開始される。
ステップS1101でデータフレーム処理部110は、上位層処理部111から、上位層処理部111における上位層のプロトコルの処理の結果として、データフレームのGDの値とペイロードを取得する。
例えば、「上位層のプロトコル」がイーサネットプロトコルであってもよい。その場合、上位層処理部111は、第1実施形態で定義されるデータフレームのペイロードとして、イーサネットフレームをデータフレーム処理部110に出力する。また、上位層処理部111は、第1実施形態におけるデータフレームのGDに設定する値を、データフレーム処理部110に通知する。
そして、データフレーム処理部110は、上位層処理部111から取得したペイロードを含む新たなデータフレームを作成し、作成したデータフレームのGDに、上位層処理部111から取得した値を設定する。例えば、図6の例では、ノード装置Nのデータフレーム処理部110−Nは、上位層処理部111−NからGDの値としてNを取得し、データフレームのGDにNと設定する。
続いて、ステップS1102でデータフレーム処理部110は、ステップS1101で取得したペイロードの長さを求め、作成したデータフレームの長さフィールドに設定する。例えば、図6の例では、図7のデータフレーム302と303に例示するように、ペイロードの長さはPであるから、ノード装置Nのデータフレーム処理部110−Nは、作成したデータフレームの長さフィールドにPと設定する。
そして、ステップS1103でデータフレーム処理部110は、作成したデータフレームのGSとLSに自ノードIDを設定する。例えば、図6の例では、ノード装置Nのデータフレーム処理部110−Nは、作成したデータフレームのGSとLSにそれぞれNと設定する。
そして、ステップS1104でデータフレーム処理部110は、FID生成部113に新たなFIDの生成を要求する。するとFID生成部113が新たなFIDを生成してデータフレーム処理部110に出力するので、データフレーム処理部110は、生成されたFIDを作成したデータフレームのFIDフィールドに設定する。
さらに、ステップS1105でデータフレーム処理部110は、「データフレーム」を示す所定の値D(図7を参照)を、作成したデータフレームのタイプフィールドに設定する。なお、以上のステップS1102〜S1105の実行順序は順不同である。
以上のようにして、送信するデータフレームを作成し終わると、ステップS1106でデータフレーム処理部110は、作成したデータフレームをバッファ部109に格納する。すなわち、データフレーム処理部110は、バッファ部109内に新たなエントリの領域を確保し、確保した領域に、作成したデータフレームを格納する。なお、図8に示すようにバッファ部109にはタイムアウト時刻フィールドがあるが、この時点ではタイムアウト時刻は設定されない。
続いてステップS1107でデータフレーム処理部110は、ステップS1101で上位層処理部111から指定されたGDの値を用いて重み付けテーブル104を検索する。
そしてステップS1108でデータフレーム処理部110は、指定されたGDの値に対応する重み付けテーブルが、ステップS1107の検索の結果としてヒットしたか否かを判断する。指定されたGDの値に対応する重み付けテーブルがヒットした場合、処理はステップS1108aに移行し、指定されたGDの値に対応する重み付けテーブルが存在しない場合、処理はステップS1009に移行する。
ステップS1108aでデータフレーム処理部110は、図24の重み付けテーブル調整処理を行い、エージング処理の副作用を中和する。そして、処理はステップS1110に移行する。
ステップS1109でデータフレーム処理部110は、ステップS1101で指定されたGDの値に対応する新規重み付けテーブルを重み付けテーブル104の中に追加する。具体的には、図21のステップS813〜S816と類似の処理をデータフレーム処理部110はステップS1109で行う。
すなわち、データフレーム処理部110はステップS1109で、上位層処理部111から指定されたGDの値に対応する新規重み付けテーブルを追加し、新規重み付けテーブルにおいて、上位層処理部111から指定されたGDの値をGDとして設定する。さらに、データフレーム処理部110は、隣接ノード管理テーブル103と同数の新規エントリを新規重み付けテーブル内に作成する。そして、データフレーム処理部110は、作成した各エントリに、それぞれ、隣接ノード管理テーブル103の各エントリのノードIDと初期重み付け値と現在時刻を設定する。
なお、以下では説明の便宜上、ステップS1101で指定されたGDの値に対応する重み付けテーブルを、「104−i」という参照符号で参照する。すなわち、重み付けテーブル104−iは、ステップS1107の検索でヒットしたテーブルまたはステップS1109で追加されたテーブルである。
以上のようにして、重み付けテーブル104−iがヒットしたとステップS1108で判断された後、またはステップS1109で重み付けテーブル104−iが作成された後、処理はステップS1110に移行する。
そして、ステップS1110でデータフレーム処理部110は、上位層処理部111から指定されたGDの値に対応する重み付けテーブル104−iにおいて、最小の重みと対応付けられているLDの値を取得する。なお、図11に例示するように、重み付けテーブル104−iにおいて複数のエントリが同じ最小の重みを有する場合もありうる。その場合、データフレーム処理部110は、最小の重みと対応付けられている複数のLDの値のうち任意の1つをステップS1110で選択して取得する。データフレーム処理部110は、取得したLDの値および対応する重みの値を、例えば図4のDRAM204などの記憶領域に記憶する。
続いて、処理は図28のステップS1111に移行し、ステップS1111でデータフレーム処理部110は、下記の2つの条件(L1)と(L2)のいずれかが成立するか否かを判断する。
(L1)ステップS1110で取得したLDの値に対応する重みが、重みの最大値(第1実施形態では、具体的には1.0)である。
(L2)重み付けテーブル104−iに登録されているすべてのLDへの送信が、いずれも失敗した。
条件(L1)または(L2)が成立する場合、もはやLDとして選択可能な隣接ノード装置は残っていないので、処理はステップS1112に移行する。
他方、条件(L1)と(L2)のいずれも成立しない場合、まだLDとして選択可能な隣接ノード装置が残っている。換言すれば、データフレーム受信処理のステップS818に関して説明した(G1)〜(G3)のいずれにも該当しない隣接ノード装置が、少なくとも1つは存在する。そして、LDとして選択可能な隣接ノード装置のノードIDが、ステップS1110(または後述のステップS1125)で取得されている。そこで、ステップS1111で条件(L1)と(L2)のいずれも成立しないと判断されると、処理はステップS1114に移行する。
条件(L1)または(L2)が成立する場合、ステップS1112でデータフレーム処理部110は、データフレームを破棄する。つまり、データフレーム処理部110は、ステップS1106で新たに作成してデータフレームを格納したエントリを、バッファ部109から削除する。
そして、続くステップS1113でデータフレーム処理部110は、上位層処理部111に「送信失敗」を通知する。つまり、データフレーム処理部110は、どの隣接ノード装置にもデータフレームを成功裡に送信することはできなかったことを、上位層処理部111に通知する。そして図27〜図28の処理が終了する。
他方、ステップS1111において、条件(L1)と(L2)のいずれも成立しないと判断されると、取得済みのLDの値で識別される隣接ノード装置へのデータフレームの転送を試みる処理が、ステップS1114〜S1125で行われる。
ステップS1114では、データフレーム処理部110が、ステップS1106でバッファ部109に格納したデータフレームのLDに、ステップS1110または後述のステップS1125で取得したLDの値を設定する。そして、データフレーム処理部110は、LDの値を設定したデータフレームの送信を、送信部102に依頼する。すると、送信部102がデータフレームを送信する。
続いてステップS1115でデータフレーム処理部110は、ステップS1106でデータフレームを格納したバッファ部109内のエントリのタイムアウト時刻に、式(5)の時刻Ttimeoutを設定する。
そして、ステップS1116でデータフレーム処理部110は、自ノードIDと、ステップS1104でFID生成部113が生成したFIDを使ってFID管理テーブル105を検索する。
次にステップS1117でデータフレーム処理部110は、ステップS1116のFID管理テーブル105の検索においてエントリがヒットしたか否かを判断する。なお、ステップS1117が1回目に実行される場合には「エントリがヒットしなかった」と判断され、ステップS1117が2回目以降に実行されるときは「エントリがヒットした」と判断される。
ステップS1116の検索でエントリがヒットしていれば、処理はステップS1118に移行する。他方、ステップS1116の検索でエントリがヒットしていなければ、処理はステップS1119に移行する。
ステップS1118でデータフレーム処理部110は、ステップS1116の検索でヒットしたエントリを更新する。具体的には、データフレーム処理部110は、ステップS1116の検索でヒットしたエントリにおいて、LDフィールドには、ステップS1114で送信したデータフレームのLDの値を設定し、最終更新時刻フィールドには、現在時刻を設定する。そして、処理はステップS1121に移行する。
また、ステップS1119でデータフレーム処理部110は、FID管理テーブル105に新規エントリを追加する。
そして、次のステップS1120でデータフレーム処理部110は、新規エントリに値を設定する。具体的には、データフレーム処理部110は、新規エントリにおいて、FIDとGSとLDの各フィールドには、それぞれステップS1114で送信したデータフレームの値をコピーする。また、データフレーム処理部110は、新規エントリにおいて、最終更新時刻フィールドには現在時刻を設定し、OLSフィールドには、自ノードIDをコピーする。
例えば、図12に示した、ノード装置NのFID管理テーブル105−NのエントリE1は、ノード装置Nのデータフレーム処理部110−Nが以上の処理により作成したものである。
ステップS1121でデータフレーム処理部110は、ステップS1114における送信の成否の通知を待つ。ステップS1121の詳細は、図22のステップS825と同様である。データフレーム処理部110が、ステップS1121での待機の後、ACK処理部107から「送信成功」または「送信失敗」の通知を受けると、処理はステップS1122に移行する。
ステップS1122でデータフレーム処理部110は、ACK処理部107から受けた通知に基づいて、ステップS1114の送信が成功したか否かを判断する。送信が成功した場合、処理はステップS1123に移行し、送信が失敗した場合、処理はステップS1124に移行する。
送信が成功した場合、ステップS1123でデータフレーム処理部110は、重み付けテーブル104において、ステップS1114で送信したデータフレームのGDとLDの組に対応する重みを小さくする。
つまり、データフレーム処理部110は、上位層処理部111から指定されたGDの値に対応する重み付けテーブル104−iにおいて、送信したデータフレームのLDに対応する重みを、例えば式(6)を使って更新する。データフレーム処理部110はさらに、重み付けテーブル104−iの、重みを更新したエントリにおいて、最終更新時刻に現在時刻を設定する。そして、図27〜図28の処理は終了する。
逆に、送信が失敗した場合、ステップS1124でデータフレーム処理部110は、重み付けテーブル104において、ステップS1114で送信したデータフレームのGDとLDの組に対応する重みを大きくする。
つまり、データフレーム処理部110は、上位層処理部111から指定されたGDの値に対応する重み付けテーブル104−iにおいて、送信したデータフレームのLDに対応する重みを、例えば式(7)を使って更新する。
なお、データフレーム処理部110はステップS1124でさらに、送信したデータフレームのLDの値を、例えば図4のDRAM204などのワークエリアに「送信に失敗したLD」として記憶する。図22のステップS828と同様に、「送信に失敗したLD」の記憶のためには、線形リストや配列などのデータ構造が利用されてもよい。
また、データフレーム処理部110はステップS1124でさらに、重み付けテーブル104−iの、重みを更新したエントリにおいて、最終更新時刻に現在時刻を設定する。そして、処理はステップS1125に移行する。
ステップS1125でデータフレーム処理部110は、今までにLDとして試していない他の選択可能な隣接ノード装置を探す。具体的には、データフレーム処理部110は、上位層処理部111から指定されたGDの値に対応する重み付けテーブル104−iにおいて、送信に失敗したLD以外のLDのうちで、最小の重みと対応付けられているLDの値を取得する。ここで、送信に失敗したLDは、ステップS1124において例えば図4のDRAM204などのワークエリアに、例えば線形リストや配列の形で記憶されている。
つまり、データフレーム処理部110は、重み付けテーブル104−iにおいて、過去にステップS1110またはS1125で取得されていないLDの値のうちで、最小の重みと対応付けられているものを取得する。データフレーム処理部110は、取得したLDの値および対応する重みの値を、例えば図4のDRAM204などの記憶領域に記憶する。そして、処理はステップS1111に戻る。
さて、図29は、GSにもなりうるノード装置100が、データフレーム受信処理の一部として図23の処理の代わりに行う処理のフローチャートである。
ノード装置100がGSにもなりうるタイプの装置である場合、データフレーム受信処理におけるステップS801〜S829は、ノード装置100が中継専用の場合と同様であり、図20〜図22に示したとおりである。しかし、ノード装置100がGSにもなりうるタイプの装置の場合は、図22のステップS818においてデータフレーム処理部110が「条件(F1)と(F2)のいずれかが成立する」と判断すると、処理は図29のステップS830aに移行する。
ステップS830aでデータフレーム処理部110は、受信したデータフレームのGSの値が自ノードIDであるか否かを判断する。受信したデータフレームのGSの値が自ノードIDと異なれば、処理はステップS830bに移行し、受信したデータフレームのGSの値が自ノードIDであれば、処理はステップS830cに移行する。
ステップS830bでデータフレーム処理部110は、以下のようにして新たなデータフレームを作成して送信部102に出力し、作成されたデータフレームを送信部102が送信する。
具体的には、データフレーム処理部110は、ステップS808またはS810で記憶したOLSの値を新たなデータフレームのLDに指定し、自ノードIDを新たなデータフレームのLSに指定する。また、データフレーム処理部110は、受信したデータフレームからGD、GS、FID、タイプ、長さの各フィールドの値と、ペイロードを、新たなデータフレームにコピーする。データフレームの送信後、処理はステップS831aに移行する。
また、ステップS830cでは、データフレーム処理部110は、上位層処理部111に「送信失敗」を通知する。通知にあたって、データフレーム処理部110は、例えば受信したデータフレームからペイロードを取り出し、ペイロードまたはペイロードの一部を上位層処理部111に出力してもよい。すると、上位層処理部111はどのデータの送信に失敗したのかを、データフレーム処理部110から受け取ったペイロードの内容に基づいて認識することができる。送信失敗の通知の後、処理はステップS838aに移行する。
さて、ステップS831aでは、データフレーム処理部110が、受信したデータフレームのFIDとGSの値を検索キーとして用いてFID管理テーブル105を検索する。なお、以下のステップS831a〜S839aは、それぞれ図23のステップS831〜S839と類似のステップである。
次のステップS832aでデータフレーム処理部110は、ステップS831aの検索の結果、エントリがヒットしたか否かを判断する。エントリがヒットしていれば処理はステップS833aに移行し、エントリがヒットしていなければ処理はステップS834aに移行する。
なお、ステップS807で「エントリがヒットした」と判断されている場合に、ステップS831aの検索の結果見つかるエントリは、ステップS806の検索の結果見つかったエントリである。また、ステップS807で「エントリがヒットしなかった」と判定され、かつステップS823において新規エントリが作成された場合は、ステップS831aの検索の結果、ステップS823で作成された新規エントリが見つかる。
ステップS832aで「エントリがヒットしなかった」と判断されるのは、(M1)かつ(M2)の場合である。
(M1)ステップS807で「エントリがヒットしなかった」と判断された。
(M2)1回目にステップS818が実行された直後に、ステップS830aに処理が移行した。
ステップS833aでデータフレーム処理部110は、ステップS831aの検索の結果ヒットしたエントリを更新する。具体的には、データフレーム処理部110は、ヒットしたエントリにおいて、LDには、ヒットしたエントリ自身のOLSの値をコピーし、最終更新時刻には、現在時刻を設定する。そして処理はステップS836aに移行する。
他方、ステップS834aでは、データフレーム処理部110はFID管理テーブル105に新規エントリを追加する。
そして、次のステップS835aでデータフレーム処理部110は、ステップS834aで追加した新規エントリに値を設定する。具体的には、データフレーム処理部110は、新規エントリにおいて、FIDとGSには、受信したデータフレームの値をそれぞれコピーし、最終更新時刻には、現在時刻を設定し、OLSとLDには、受信したデータフレームのLSの値をコピーする。そして処理はステップS836aに移行する。
ステップS836aでデータフレーム処理部110は、ステップS830bで送信したデータフレームに関する送信成否の通知を待つ。そして、「送信成功」または「送信失敗」の通知をデータフレーム処理部110がACK処理部107から受けると、処理はステップS837aに移行する。
ステップS837aでデータフレーム処理部110は、ステップS830bにおけるデータフレームの送信が成功したか否かを判断する。送信が失敗した場合、処理はステップS838aに移行し、送信が成功した場合、処理はステップS839aに移行する。
ステップS838aが実行されるのは、(N1)または(N2)の場合である。
(N1)ノード装置100自身がGSとなって送信したデータフレームがバックトラックによりノード装置100に戻ってきて受信されたのであり、かつ、ノード装置100の隣接ノード装置はすべて(N1−1)または(N1−2)である。
(N1−1)最大値の重みと対応付けられている。
(N1−2)LDとして指定してデータフレームを送信すると、送信に失敗する。
(N2)受信したデータフレームのGSは、ノード装置100以外の他のノード装置であり、かつ、OLS以外のすべての隣接ノード装置が(N2−1)または(N2−2)であり、かつ、OLSへのデータフレームの送信は失敗した。
(N2−1)最大値の重みと対応付けられている。
(N2−2)LDとして指定してデータフレームを送信すると、送信に失敗する
この場合、データフレーム処理部110はステップS838aで、受信したデータフレームを破棄する。すなわち、データフレーム処理部110は、ステップS801で見つけたエントリをバッファ部109から削除する。そして、データフレーム受信処理は終了する。
他方、ステップS839aは、ノード装置100ではない別のノード装置がGSであるデータフレームに関して、ノード装置100からノード装置100のOLSへの送信が成功した場合に実行される。ステップS839aでデータフレーム処理部110は、重み付けテーブル104において、ステップS830bで送信したデータフレームのGDとLDの組に対応する重みを小さくする。換言すれば、データフレーム処理部110は、受信したデータフレームのGDに対応する重み付けテーブル104−iにおいて、送信したデータフレームのLD(つまりステップS808またはS810で記憶したOLS)に対応する重みを更新する。
例えば、ステップS829やS839と同様に、データフレーム処理部110は、式(6)を使って重みを更新してもよい。データフレーム処理部110はさらに、重み付けテーブル104−iの、重みを更新したエントリにおいて、最終更新時刻に現在時刻を設定する。そして、データフレーム受信処理は終了する。
続いて、以上の詳細な説明を踏まえて、再度、図6の例について説明する。
図30は、経路を探索するための探索空間を表す探索木の形式で、図6における経路選択を説明する図である。人工知能の分野では、探索空間はしばしば探索木の形式で表現される。図30は、第1実施形態におけるデータフレームの転送を、ネットワーク内で動的に行われる経路探索という観点から見て、探索空間を探索木400として表現した図である。なお、探索木400は、ノード装置内に作成されるデータ構造ではなく、ネットワークトポロジそのものでもない。
探索木400に含まれる各探索ノードには、ネットワーク1内のノード装置のノードIDのラベルが付けられる。なお、図30では、各探索ノードを、円、正方形、六画形の3種類の図形で表しているが、円、正方形、六画形の意味の違いについては後述する。
また、図6の例では、データフレームのGSとGDは、それぞれノード装置NとNなので、探索木400のルートノードは、Nというラベルが付けられた探索ノード401である。そして、経路探索のゴールは、探索木400においてNというラベルが付けられた探索ノード409を発見することである。
ここで、図6のネットワーク1においてノード装置NとNが隣接していれば、(1≦i,j≦7)、ノード装置Nにとって隣接ノード装置Nは潜在的なLDの候補であり、ノード装置Nにとっても隣接ノード装置Nは潜在的なLDの候補である。よって、探索木400内において、Nというラベルが付けられた探索ノードは、Nというラベルが付けられた探索ノードを子ノードとして有する。
したがって、探索木400では、Nというラベルが付けられた第1の探索ノードが、Nというラベルが付けられた第2の探索ノードを子ノードとして有し、第2の探索ノードが、Nというラベルが付けられた第3の探索ノードを子ノードとして有する。以下同様であるから、探索木400は、潜在的には無限の探索ノードを有する。
潜在的には無限に大きい探索木400の探索においては、探索空間の刈り込み(pruning)が行われつつ、深さ優先探索が行われる。「探索空間の刈り込み」とは、探索効率を上げるために探索木の1つ以上の枝を無視するという技法であり、探索アルゴリズムの研究分野においては、応用分野に応じて種々の刈り込み手法が提案されている。
第1実施形態のノード装置100の自律分散協調の結果としての刈り込みには2種類ある。以下、便宜的に「第1種の刈り込み」と「第2種の刈り込み」と称する。
第1種の刈り込みは、親ノードと同じラベルを有する子ノードの刈り込みである。例えば、上記の第1〜第3の探索ノードの例では、第2の探索ノードの子ノードである第3の探索ノードのラベルは、第2の探索ノードの親ノードである第1の探索ノードのラベルと等しい。そこで、第2の探索ノードから先の探索においては、第3の探索ノードが刈り込まれる。第1種の刈り込みによって刈り込まれる探索ノードは、図30において正方形で表されている。
第2種の刈り込みは、祖先ノードと同じラベルを有する子ノードの刈り込みである。第2種の刈り込みは、第1実施形態のFID管理テーブル105によって可能となっている。第2種の刈り込みによって刈り込まれる探索ノードは、図30において六画形で表されている。
なお、図30において円は、刈り込まれずに探索された探索ノードを表す。
以下、具体的に図6の例と探索木400との関係について説明する。
上記のように、探索木400のルートノードである探索ノード401のラベルは、データフレームのGSであるノード装置NのノードID・Nである。そして、ネットワーク1においてノード装置Nにはノード装置Nのみが隣接するので、探索ノード401は1つの探索ノード402のみを子ノードとして有し、探索ノード402のラベルはNである。
また、ノード装置Nにはノード装置Nのみが隣接するので、図6のステップS101のように、データフレームがノード装置Nからノード装置Nへと送信される。ステップS101の送信は、図30では、探索ノード401から探索ノード402へと探索が進むことに対応する。
そして、ネットワーク1においてノード装置Nには、ノード装置NとNとNが隣接している。よって、探索ノード402は、3つの探索ノード403と404と405を子ノードとして有し、探索ノード403と404と405それぞれのラベルはNとNとNである。
図6においてノード装置Nが、最初にノード装置NをLDとして選択して、ステップS102でノード装置Nへデータフレームを送信することは、図30では、探索ノード402から探索ノード403へ探索が進むことに対応する。
そして、ネットワーク1においてノード装置Nには、ノード装置NとNとNが隣接している。よって、探索ノード403は、3つの探索ノード406、407および408を子ノードとして有し、探索ノード406、407、および408それぞれのラベルは、NとNとNである。
図6においてノード装置Nが、最初にノード装置NをLDとして選択して、ステップS103でノード装置Nへデータフレームを送信することは、図30では、探索ノード403から探索ノード406へ探索が進むことに対応する。
そして、ネットワーク1においてノード装置Nには、ノード装置NとNとNが隣接する。よって、探索ノード406は、3つの探索ノード411、412、および413を子ノードとして有し、探索ノード411、412、および413それぞれのラベルは、NとNとNである。
図6においてノード装置Nが、最初にノード装置NをLDとして選択して、ステップS104でノード装置Nへデータフレームを送信することは、図30では、探索ノード406から探索ノード411へ探索が進むことに対応する。
ところが、図6に示すように、ステップS104ではノード装置NとNの間のリンクの障害により、送信が失敗する。つまり、探索木400においては、探索ノード411で探索が失敗してバックトラックが生じる。なお、探索ノード411から探索ノード406への、探索木400上でのバックトラックは、実際のネットワーク1上では、ACKフレームが受信されずにノード装置Nがタイムアウトするという現象である。
図6においては、ステップS104の送信失敗の後、ノード装置Nは、次にノード装置NをLDとして選択してステップS105でノード装置Nへデータフレームを送信する。このステップS105での送信は、図30では、探索ノード406から探索ノード412へ探索が進むことに対応する。
そして、ネットワーク1においてノード装置Nにはノード装置NとNが隣接するので、探索ノード412は、2つの探索ノード414と415を子ノードとして有し、探索ノード414と415それぞれのラベルは、NとNである。
図6においてノード装置Nが最初にノード装置NをLDとして選択してステップS106でノード装置Nへデータフレームを送信することは、図30では、探索ノード412から探索ノード414へと探索が進むことに対応する。
なお、探索木400において、探索ノード414は、祖先ノードである探索ノード403と同じラベルを持つ。しかし、探索ノード403と414の間には、2つの探索ノード406と412がはさまっているため、この時点では探索ノード414は刈り込まれない。
そして、ネットワーク1においてノード装置Nにはノード装置NとNとNが隣接するので、探索ノード414は、3つの探索ノード416、417、および418を子ノードとして有し、探索ノード416、417、および418それぞれのラベルは、NとNとNである。
ところで、ステップS106でデータフレームを受信した時点で、ノード装置NのFID管理テーブル105−Nには、図12のとおりエントリEが既に存在している。このことは、次の(O1)と(O2)を意味する。
(O1)探索木400において、探索ノード414から見た祖先ノードとして、探索ノード414自身と同じラベルNを有する探索ノード403が存在している。
(O2)したがって、探索ノード414の子ノードである探索ノード416、417、および418は、刈り込み対象である。
そして、刈り込みは次のようにして実現される。
ラベルNを有する探索ノード414の祖先ノードにラベルNを有する探索ノード406があることは、ノード装置NのFID管理テーブル105−NのエントリEにおいて、ステップS106の時点でLDの値がNであることに対応する(図12参照)。そして、ステップS106でデータフレームを受信すると、ノード装置Nは、ステップS103でLDとして選択したノード装置Nに対応する重みを、図11に示すように最大値に設定している。
換言すれば、ステップS106でのデータフレームの受信を契機として、ノード装置Nは、ノード装置Nを潜在的なLDの候補から除外している。そして、潜在的なLDの候補からの除外とは、探索木400における刈り込みであるから、ラベルNを持つ探索ノード417は刈り込まれる。
また、探索ノード414の祖先ノードにラベルNを有する探索ノード402があることは、ノード装置NのFID管理テーブル105−NのエントリEにおいて、OLSの値がNであることに対応する(図12参照)。
そして、ステップS106でデータフレームを受信した時点では、OLS以外で潜在的にLDとして選択可能なノード装置Nが存在しているので、ノード装置Nは、OLSであるノード装置NをLDとして選択しない。つまり、ラベルNを持つ探索ノード416は刈り込まれる。
また、ステップS106の受信を契機に、ノード装置NはLDとしてノード装置Nを選択する。ここで、探索木400において探索ノード414の子ノードである探索ノード418は、探索ノード414の親ノードである探索ノード412と同じラベルNを有することに注目すると、探索ノード418は第1種の刈り込みの対象である。
実際、ステップS107でのノード装置Nからノード装置Nへのデータフレームの送信は、図30に示すように、探索木400上での探索ノード414から親ノードである探索ノード412へのバックトラックとして表すことができる。換言すれば、探索ノード414の子ノードであり、親ノードの探索ノード412と同じラベルNを有する探索ノード418は、刈り込まれる。
次のステップS108では、図6に示すように、ノード装置NはOLSであるノード装置Nへとデータフレームをバックトラックさせている。このステップS108の動作は、図30では、探索木400においてラベルNを有する探索ノード412からラベルNを有する探索ノード406へのバックトラックとして表現される。換言すれば、探索ノード412の子ノードであり、探索ノード412の親ノードの探索ノード406と同じラベルNを有する探索ノード415は、刈り込まれる。
そして、次のステップS109でも、図6に示すように、ノード装置NがOLSであるノード装置Nへとデータフレームをバックトラックさせている。このステップS109の動作も、図30では、探索木400においてラベルNを有する探索ノード406からラベルNを有する探索ノード403へのバックトラックとして表現される。換言すれば、探索ノード406の子ノードであり、探索ノード406の親ノードの探索ノード403と同じラベルNを有する探索ノード413は、刈り込まれる。
この段階で、ラベルNを有する探索ノード403の子ノードのうち未探索なのは、ラベルNを有する探索ノード407と、ラベルNを有する探索ノード408である。
しかし、ノード装置NはステップS107でノード装置Nにデータフレームを送信済みであり、ステップS109でのデータフレームの受信を契機として、図11に示すように、ノード装置Nに対応する重みは最大値に設定されている。よって、ノード装置NはLDの候補から除外され、ラベルNを有する探索ノード408は刈り込まれる。
結局、ステップS110では、図6に示すように、ノード装置NはOLSであるノード装置Nへとデータフレームをバックトラックさせている。このステップS110の動作は、図30では、探索木400においてラベルNを有する探索ノード403からラベルNを有する探索ノード402へのバックトラックとして表現される。換言すれば、探索ノード403の子ノードであり、探索ノード403の親ノードの探索ノード402と同じラベルNを有する探索ノード407は、刈り込まれる。
続いて、ステップS111で、ノード装置NはLDとして新たにノード装置Nを選択し、ノード装置Nにデータフレームを送信する。ステップS111の送信は、図30では、ラベルNを有する探索ノード402からラベルNを有する探索ノード404へ探索が進むことに対応する。
そして、ネットワーク1においてノード装置Nにはノード装置NとNが隣接するので、探索ノード404は、2つの探索ノード409と410を子ノードとして有し、探索ノード409と410それぞれのラベルは、NとNである。
図6においてノード装置Nは、OLSであるノード装置Nではなく、まずノード装置NをLDとして選択してデータフレームをステップS112で送信する。つまり、ラベルNを有する探索ノード410は刈り込まれる。そして、ステップS112の送信により、GDであるノード装置NのノードID・Nをラベルとして有する探索ノード409へと探索が進み、探索が終了する。なお、ステップS112で探索が終了するので、探索ノード402の子ノードである探索ノード405は探索されないが、探索ノード405は、第1種の刈り込みの対象でもあるから、図30では便宜的に正方形で表現してある。
なお、探索木400において、ルートノードである探索ノード401から、以上のようにして探索により見つかったリーフノードである探索ノード409に至る、経路上の各探索ノードのラベルを順に並べてタプルで表すと、〈N,N,N,N〉となる。そして、このタプルは、図6のネットワーク1において学習された経路〈N,N,N,N〉である。
第1実施形態によれば、データフレームが転送されながら動的に経路が探索されるが、その探索順を探索木400で表すと、図30のとおり深さ優先探索順である。幅優先探索ではなく深さ優先探索が行われることは、データフレームがマルチキャストされず常にユニキャストされることからも理解される。
そして、以上の説明から明らかなとおり、FID管理テーブル105のエントリのエージング時間Gが適切に設定されていれば、ネットワーク1内でGSからGDに至る経路が見つかるまで、潜在的に可能な経路が深さ優先探索により調べつくされる。すなわち、エージング時間Gが短すぎなければ、GSからGDに至る経路が存在さえすれば、経路は必ず見つかる。なお、図19に関して述べた「最悪ケース」とは、探索木400の深さ優先探索順でのトラバース(traverse)において、GDのノード装置のノードIDをラベルとして有する探索ノードが、一番最後に見つかる場合のことである。
続いて、さらに別の観点から第1実施形態について説明する。
図31は、ハローフレームの送受信による隣接ノードの認識と図6の経路選択とを示すタイミングチャートである。
図1のネットワーク1において、各ノード装置N〜Nは、独立してそれぞれ図16のハローフレーム送信処理を行う。どのノード装置が先にハローフレームを送信するかは任意であるが、図31の例では、まずステップS1201でノード装置Nが図16のステップS403を実行し、ハローフレームを送信する。すると、ハローフレームはノード装置Nに隣接するノード装置N、N、およびNでそれぞれ受信される。そして、ノード装置N、N、およびNは、それぞれ図14のステップS203で図15のハローフレーム受信処理を呼び出して実行し、ノード装置Nを隣接ノード装置として認識する。
また、図31の例では、続いてステップS1202で、ノード装置Nが図16のステップS403を実行し、ハローフレームを送信する。すると、ハローフレームはノード装置Nに隣接するノード装置N、N、およびNでそれぞれ受信される。そして、ノード装置N、N、およびNは、それぞれ図14のステップS203で図15のハローフレーム受信処理を呼び出して実行し、ノード装置Nを隣接ノード装置として認識する。
さらに、ステップS1203では、ノード装置Nが図16のステップS403を実行し、図7のハローフレーム312を送信する。すると、ハローフレーム312はノード装置Nに隣接するノード装置N、N、およびNでそれぞれ受信される。そして、ノード装置N、N、およびNは、それぞれ図14のステップS203で図15のハローフレーム受信処理を呼び出して実行し、ノード装置Nを隣接ノード装置として認識する。
また、ステップS1204では、ノード装置Nが図16のステップS403を実行し、ハローフレームを送信する。なお、ステップS1204の時点では、ノード装置NとNの間のリンクには障害がまだ生じていないものとする。よって、ハローフレームはノード装置Nに隣接するノード装置NとNでそれぞれ受信される。そして、ノード装置NとNは、それぞれ図14のステップS203で図15のハローフレーム受信処理を呼び出して実行し、ノード装置Nを隣接ノード装置として認識する。
また、ステップS1205では、ノード装置Nが図16のステップS403を実行し、ハローフレームを送信する。すると、ハローフレームはノード装置Nに隣接するノード装置Nで受信される。そして、ノード装置Nは、図14のステップS203で図15のハローフレーム受信処理を呼び出して実行し、ノード装置Nを隣接ノード装置として認識する。
さらに、ステップS1206では、ノード装置Nが図16のステップS403を実行し、ハローフレームを送信する。すると、ハローフレームはノード装置Nに隣接するノード装置NとNでそれぞれ受信される。そして、ノード装置NとNは、それぞれ図14のステップS203で図15のハローフレーム受信処理を呼び出して実行し、ノード装置Nを隣接ノード装置として認識する。
そして、ステップS1207では、ノード装置Nが図16のステップS403を実行し、ハローフレームを送信する。すると、ハローフレームはノード装置Nに隣接するノード装置NとNでそれぞれ受信される。そして、ノード装置NとNは、それぞれ図14のステップS203で図15のハローフレーム受信処理を呼び出して実行し、ノード装置Nを隣接ノード装置として認識する。
以上のステップS1201〜S1207により、図1および図6に示すネットワーク1内のノード装置N〜Nは、それぞれ隣接ノード装置を認識し、隣接ノード管理テーブル103−N〜103−Nを更新する。また、図15に示すように、ノード装置N〜Nは、ハローフレームの受信を契機として、場合によっては重み付けテーブル104−N〜104−N)を更新することもある。
その後、ステップS1208でノード装置NとNの間のリンクに障害が発生する。
また、障害の発生とは関係なく、ステップS101でノード装置Nが、ノード装置NをGDとして指定するデータフレームを、ノード装置NをLDとして指定して送信する。つまり、ステップS101でノード装置Nは、図27〜28の処理を行う。
すると、データフレームを受信したノード装置Nは、図14のステップS205から図20〜23の処理を呼び出して実行する。図20のステップS803でノード装置NがACKフレームを送信することが、図31ではステップS101aとして表現されている。
他方、ノード装置Nは、図28のステップS1121でACKフレームの受信を待っている。そして、ノード装置Nは、ステップS101aで送信されるACKフレームを受信すると、図14のステップS206から図25の処理を呼び出して実行し、その結果、ステップS1121の待機を終え、ステップS1122とS1123を実行し、図28の処理を終える。
また、ステップS101aに示すように図20のステップS803でACKフレームを送信したノード装置Nは、ステップS804以降の処理を続行し、図22のステップS819で、LDとしてノード装置Nを指定してデータフレームを送信する。ステップS819での送信が、図31のステップS102に相当する。なお、図7には、ステップS102で送信されるデータフレーム303が例示されている。
すると、データフレームを受信したノード装置Nは、図14のステップS205から図20〜23の処理を呼び出して実行する。図20のステップS803でノード装置NがACKフレームを送信することが、図31ではステップS102aとして表現されている。なお、図7には、ステップS102aで送信されるACKフレーム322が例示されている。
他方、ノード装置Nは、図22のステップS825でACKフレームの受信を待っている。そして、ノード装置Nは、ステップS102aで送信されるACKフレームを受信すると、図14のステップS206から図25の処理を呼び出して実行し、その結果、ステップS825の待機を終え、ステップS826とS827を実行し、図22の処理を終える。
また、ステップS102aに示すように図20のステップS803でACKフレームを送信したノード装置Nは、ステップS804以降の処理を続行し、図22のステップS819で、LDとしてノード装置Nを指定してデータフレームを送信する。ステップS819での送信が、図31のステップS103に相当する。なお、図7には、ステップS103で送信されるデータフレーム304が例示されている。
すると、データフレームを受信したノード装置Nは、図14のステップS205から図20〜23の処理を呼び出して実行する。図20のステップS803でノード装置NがACKフレームを送信することが、図31ではステップS103aとして表現されている。
他方、ノード装置Nは、図22のステップS825でACKフレームの受信を待っている。そして、ノード装置Nは、ステップS103aで送信されるACKフレームを受信すると、図14のステップS206から図25の処理を呼び出して実行し、その結果、ステップS825の待機を終え、ステップS826とS827を実行し、図22の処理を終える。
また、ステップS103aに示すように図20のステップS803でACKフレームを送信したノード装置Nは、ステップS804以降の処理を続行し、図22のステップS819で、LDとしてノード装置Nを指定してデータフレームを送信する。ステップS819での送信が、図31のステップS104に相当する。
しかし、ステップS1208でノード装置NとNの間のリンクには障害が発生しており、データフレームはノード装置Nに到達しない。そのため、図31ではステップS104の矢印は、途中から破線になっている。
ノード装置Nは、図22のステップS825でACKフレームの受信を待っている。しかし、ノード装置NからACKフレームが受信されないため、ノード装置Nは、定期的に実行している図26の処理のステップS1003において、ノード装置Nへのデータフレームの送信が失敗したと認識する。
その結果、ノード装置Nは、ステップS825の待機を終え、ステップS826、S828、S829、S818の処理を順に実行する。そして、ノード装置Nは、続くステップS819において、LDとしてノード装置Nを指定してデータフレームを送信する。ステップS819での送信が、図31のステップS105に相当する。
すると、データフレームを受信したノード装置Nは、図14のステップS205から図20〜23の処理を呼び出して実行する。図20のステップS803でノード装置NがACKフレームを送信することが、図31ではステップS105aとして表現されている。
他方、ノード装置Nは、図22のステップS825でACKフレームの受信を待っている。そして、ノード装置Nは、ステップS105aで送信されるACKフレームを受信すると、図14のステップS206から図25の処理を呼び出して実行し、その結果、ステップS825の待機を終え、ステップS826とS827を実行し、図22の処理を終える。
また、ステップS105aに示すように図20のステップS803でACKフレームを送信したノード装置Nは、ステップS804以降の処理を続行し、図22のステップS819で、LDとしてノード装置Nを指定してデータフレームを送信する。ステップS819での送信が、図31のステップS106に相当する。
すると、データフレームを受信したノード装置Nは、図14のステップS205から図20〜23の処理を呼び出して実行する。図20のステップS803でノード装置NがACKフレームを送信することが、図31ではステップS106aとして表現されている。
他方、ノード装置Nは、図22のステップS825でACKフレームの受信を待っている。そして、ノード装置Nは、ステップS106aで送信されるACKフレームを受信すると、図14のステップS206から図25の処理を呼び出して実行し、その結果、ステップS825の待機を終え、ステップS826とS827を実行し、図22の処理を終える。
また、ステップS106aに示すように図20のステップS803でACKフレームを送信したノード装置Nは、ステップS804以降の処理を続行し、図22のステップS819で、LDとしてノード装置Nを指定してデータフレームを送信する。ステップS819での送信が、図31のステップS107に相当する。
すると、データフレームを受信したノード装置Nは、図14のステップS205から図20〜23の処理を呼び出して実行する。図20のステップS803でノード装置NがACKフレームを送信することが、図31ではステップS107aとして表現されている。
他方、ノード装置Nは、図22のステップS825でACKフレームの受信を待っている。そして、ノード装置Nは、ステップS107aで送信されるACKフレームを受信すると、図14のステップS206から図25の処理を呼び出して実行し、その結果、ステップS825の待機を終え、ステップS826とS827を実行し、図22の処理を終える。
また、ステップS107aに示すように図20のステップS803でACKフレームを送信したノード装置Nは、ステップS804以降の処理を続行する。具体的には、処理が図22のステップS818から図23のステップS830へと進み、ノード装置NはステップS830で、OLSであるノード装置NをLDとして指定してデータフレームを送信する。ステップS830での送信が、図31のステップS108に相当する。
すると、データフレームを受信したノード装置Nは、図14のステップS205から図20〜23の処理を呼び出して実行する。図20のステップS803でノード装置NがACKフレームを送信することが、図31ではステップS108aとして表現されている。
他方、ノード装置Nは、図23のステップS836でACKフレームの受信を待っている。そして、ノード装置Nは、ステップS108aで送信されるACKフレームを受信すると、図14のステップS206から図25の処理を呼び出して実行し、その結果、ステップS836の待機を終え、ステップS837とS839を実行し、図23の処理を終える。
また、ステップS108aに示すように図20のステップS803でACKフレームを送信したノード装置Nは、ステップS804以降の処理を続行する。具体的には、処理が図22のステップS818から図23のステップS830へと進み、ノード装置NはステップS830で、OLSであるノード装置NをLDとして指定してデータフレームを送信する。ステップS830での送信が、図31のステップS109に相当する。
すると、データフレームを受信したノード装置Nは、図14のステップS205から図20〜23の処理を呼び出して実行する。図20のステップS803でノード装置NがACKフレームを送信することが、図31ではステップS109aとして表現されている。
他方、ノード装置Nは、図23のステップS836でACKフレームの受信を待っている。そして、ノード装置Nは、ステップS109aで送信されるACKフレームを受信すると、図14のステップS206から図25の処理を呼び出して実行し、その結果、ステップS836の待機を終え、ステップS837とS839を実行し、図23の処理を終える。
また、ステップS109aに示すように図20のステップS803でACKフレームを送信したノード装置Nは、ステップS804以降の処理を続行する。具体的には、処理が図22のステップS818から図23のステップS830へと進み、ノード装置NはステップS830で、OLSであるノード装置NをLDとして指定してデータフレームを送信する。ステップS830での送信が、図31のステップS110に相当する。
すると、データフレームを受信したノード装置Nは、図14のステップS205から図20〜23の処理を呼び出して実行する。図20のステップS803でノード装置NがACKフレームを送信することが、図31ではステップS110aとして表現されている。
他方、ノード装置Nは、図23のステップS836でACKフレームの受信を待っている。そして、ノード装置Nは、ステップS110aで送信されるACKフレームを受信すると、図14のステップS206から図25の処理を呼び出して実行し、その結果、ステップS836の待機を終え、ステップS837とS839を実行し、図23の処理を終える。
また、ステップS110aに示すように図20のステップS803でACKフレームを送信したノード装置Nは、ステップS804以降の処理を続行し、図22のステップS819で、LDとしてノード装置Nを指定してデータフレームを送信する。ステップS819での送信が、図31のステップS111に相当する。
すると、データフレームを受信したノード装置Nは、図14のステップS205から図20〜23の処理を呼び出して実行する。図20のステップS803でノード装置NがACKフレームを送信することが、図31ではステップS111aとして表現されている。
他方、ノード装置Nは、図22のステップS825でACKフレームの受信を待っている。そして、ノード装置Nは、ステップS111aで送信されるACKフレームを受信すると、図14のステップS206から図25の処理を呼び出して実行し、その結果、ステップS825の待機を終え、ステップS826とS827を実行し、図22の処理を終える。
また、ステップS111aに示すように図20のステップS803でACKフレームを送信したノード装置Nは、ステップS804以降の処理を続行し、図22のステップS819で、LDとしてノード装置Nを指定してデータフレームを送信する。ステップS819での送信が、図31のステップS112に相当する。
すると、データフレームを受信したノード装置Nは、図14のステップS205から図20〜23の処理を呼び出して実行する。図20のステップS803でノード装置NがACKフレームを送信することが、図31ではステップS112aとして表現されている。
以上説明した一連の処理により、ネットワーク1全体では、たとえステップS1208で障害が発生しようとも、ノード装置N〜Nの自律分散協調の結果として、動的に経路〈N,N,N,N〉が選択され、学習される。すなわち、以上の一連の処理によりノード装置N〜Nでは重み付けテーブル104−N〜104−Nが更新されている。
したがって、ステップS112aの後には、学習の結果として、ノード装置NをGDとして指定するデータフレームは、図6のようにネットワーク1内で試行錯誤的にバックトラックしながら転送される代わりに、初めから効率よく転送される。具体例をいくつか挙げれば、下記のとおりである。
(P1)ノード装置NがGSとなって、ノード装置NをGDとして指定するデータフレームを隣接するノード装置Nに送信すると、ノード装置Nは、学習された重み付けテーブル104−Nに基づき、最初からLDとしてノード装置Nを選択する。そして、データフレームはノード装置NからGDであるノード装置Nへと送信される。
(P2)同様に、ノード装置NがGSとなって、ノード装置NをGDとして指定するデータフレームを送信するときも、ノード装置Nは、学習された重み付けテーブル104−Nに基づき、最初からLDとしてノード装置Nを選択する。そして、データフレームはノード装置NからGDであるノード装置Nへと送信される。
(P3)ノード装置NがGSとなって、ノード装置NをGDとして指定するデータフレームを送信するとき、ノード装置Nは、学習された重み付けテーブル104−Nに基づき、バックトラックの生じたノード装置Nではなく、ノード装置Nを最初にLDとして選択する。以下同様にして、ノード装置NはLDとしてノード装置Nを選択し、ノード装置NはLDとしてノード装置Nを選択し、ノード装置NはLDとしてノード装置Nを選択し、ノード装置NはLDとしてノード装置Nを選択する。
(P4)ノード装置NがGSとなって、ノード装置NをGDとして指定するデータフレームを送信するとき、ノード装置Nは、学習された重み付けテーブル104−Nに基づき、ノード装置NをLDとして選択する。したがって、データフレームは、最初から効率よく経路〈N,N,N,N〉に沿って転送される。
以上のように第1実施形態によれば、図6のようにバックトラックによってネットワーク1内で試行錯誤的かつ動的に経路が選択されると、バックトラックの過程で経由した各ノード装置において、重み付けテーブル104の重みという形で、適切な経路が学習される。よって、GDとして同じくノード装置Nが指定されたデータフレームが今後送信される場合には、上記(P1)〜(P4)の例のように、学習の結果にしたがって、経路選択が効率化される。
続いて、有線ネットワークに適用される第2実施形態について説明する。第1実施形態では、図3の受信部101と送信部102が図4の無線モジュール206により実現され、図1のネットワーク1が無線ネットワークである場合を例として説明した。しかし、第2実施形態では、例えば図1や図2のネットワーク1や2が、有線リンクで接続された有線アドホックネットワークであってもよい。以下、具体例について、図32を参照して説明する。
図32は、第2実施形態が適用される有線ネットワークの例を示す図である。図32のネットワーク4は、複数のノード装置100a〜100iを含み、有線アドホックネットワークの一例である。まず、ノード装置100aの構成の概略を説明する。
なお、ノード装置100a〜100iの構成は同様である。互いに同様のコンポーネントには、「211a−1」、「211a−2」、「211b−1」などのように、添え字を除いて同じ参照符号を割り当て、詳しい説明を省略することがある。
ノード装置100a〜100iは、無線モジュール206により実現される図3の受信部101および送信部102の代わりに、有線通信のための物理ポート(以下単に「ポート」という)とPHYチップにより実現される不図示の受信部および送信部を有する。図32の例では、ノード装置100aは、4つのポート211a−1〜211a−4を備えるが、ポートの数は実施形態に応じて任意である。
なお、ポート211a−1〜211a−4は、第2実施形態によるフレームの通信を行うためのポートである。つまり、図7に示す第1実施形態と同様のデータフレームが、ポート211a−1〜211a−4を介して送受信される。換言すれば、ポート211a−1〜211a−4は、ノード装置100aが隣接ノード装置と有線接続するためのポートである。
以下では説明の便宜上、1つのポートに対応して1つのPHYチップがあるものと仮定するが、物理的には1つのPHYチップが4つのポートの入出力処理を行うことも可能である。
また、第2実施形態ではACKフレームとハローフレームが使われない。よって、ノード装置100aは、図3のACK処理部107とハローフレーム生成部112を含まない。また、詳しくは後述するが、第2実施形態では、フレーム分岐処理部106とリンク管理部108とデータフレーム処理部110の動作の一部が、第1実施形態とは異なる。そして、図9に示す第1実施形態の隣接ノード管理テーブル103の代わりに、図33に示す隣接ノード管理テーブル103aが使われる。
ところで、第1実施形態では、外部ネットワークとの接続のためにノード装置100が図4のPHYチップ202を備えている場合を例示した。第2実施形態のノード装置100aも同様に、外部ネットワークとの接続のため、汎用LANポート212aを備えている。
汎用LANポート212aは、例えばイーサネット規格にのっとった有線接続用の物理ポートであり、不図示のPHYチップと接続されている。図32では、汎用LANポート212a〜212iを斜線で示して、ポート211a−1〜211i−4とは区別してある。なお、本実施形態における汎用LANポート212a〜212iは有線LANポートであるが、実施形態によっては無線LANインタフェイスを代わりに用いることもできる。
そして、上記のごとき構成を有する各ノード装置100a〜100iは、ネットワーク4において、ケーブル(例えば、銅ケーブルなどの金属線ケーブル、または光ファイバケーブル)により、物理的にはメッシュ状(換言すれば格子状)に接続されている。
もちろん、ネットワークにおける物理的な接続トポロジは、実施形態に応じて任意であり、必ずしもメッシュ状でなくてもよい。
図32に示すメッシュ状の物理的なトポロジは、具体的には、次の(Q1)〜(Q12)のようなケーブル配線により実現されている。
(Q1)ノード装置100aと100dは、ポート211a−1と211d−1の間のリンク515により接続されている。
(Q2)ノード装置100aと100bは、ポート211a−4と211b−1の間のリンク516により接続されている。
(Q3)ノード装置100bと100eは、ポート211b−2と211e−2の間のリンク517により接続されている。
(Q4)ノード装置100bと100cは、ポート211b−4と211c−1の間のリンク518により接続されている。
(Q5)ノード装置100cと100fは、ポート211c−3と211f−3の間のリンク519により接続されている。
(Q6)ノード装置100dと100gは、ポート211d−2と211g−2の間のリンク521により接続されている。
(Q7)ノード装置100dと100eは、ポート211d−4と211e−1の間のリンク522により接続されている。
(Q8)ノード装置100eと100hは、ポート211e−3と211h−3の間のリンク523により接続されている。
(Q9)ノード装置100eと100fは、ポート211e−4と211f−1の間のリンク524により接続されている。
(Q10)ノード装置100fと100iは、ポート211f−4と211i−4の間のリンク525により接続されている。
(Q11)ノード装置100gと100hは、ポート211g−4と211h−1の間のリンク526により接続されている。
(Q12)ノード装置100hと100iは、ポート211h−4と211i−1の間のリンク527により接続されている。
もちろん、実施形態に応じて、図32に例示した以外の組み合せのポート間をケーブルで接続することで図32と等価なメッシュトポロジを実現することも可能である。
ところで、図32の例では、ネットワーク4は孤立したネットワークではなく、LANやWAN(Wide Area
Network)などの外部ネットワークとも接続される。
例えば、図32の例では、ネットワーク4は次のようにして外部ネットワークと接続される。すなわち、リンク511を介してPC(Personal Computer)501と接続されたL2SW(Layer 2
Switch)502が、ノード装置100aと100bそれぞれの汎用LANポート212aと212bに、それぞれリンク512と513を介して接続されている。また、PC503、505、506が、ノード装置100c、100g、100hそれぞれの汎用LANポート212c、212g、212hに、それぞれリンク514、528、529を介して接続されている。
なお、L2SW502は、不図示のルータや、不図示の他のPCとさらに接続されていてもよい。また、PC503、505、および506も、不図示の他の外部ネットワークに接続されていてもよい。
また、説明の便宜上、図32には9個のノード装置100a〜100iを含むネットワーク4を例示したが、実施形態によっては、例えば数千個〜数十万個といった多数のノード装置を有線アドホックネットワークが含んでいてもよい。
例えば、いたる所に配置された多数のセンサから様々な情報を収集するためのネットワークであるセンサネットワークに、本実施形態の有線アドホックネットワークが適用されてもよい。その場合、多数のセンサに対応して、有線アドホックネットワークは、数千個〜数十万個のオーダの、多数のノード装置を含んでもよい。センサネットワークでは、例えば、画像センサ、温度センサ、湿度センサ、圧力センサ、加速度センサなど、任意の種類のセンサが利用される。
図32も、本実施形態による有線アドホックネットワークの、センサネットワークへの適用例の1つを示している。すなわち、図32においてノード装置100eと100iそれぞれの汎用LANポート212eと212iには、LANインタフェイスを備えたセンサ504と507が、それぞれリンク520と530を介して接続されている。センサ504と507は、感知した結果を示すデータを、LANインタフェイスを介してイーサネットフレームとして出力する。これらのセンサ504と507の種類は任意である。
図32に示すような本実施形態による有線アドホックネットワークを利用すると、無線通信では通信困難な環境でも有線通信ならば通信可能な場合が多いため、過酷な環境においてもセンサネットワークを構築することが可能となる。
例えば、畑や崖などの土中、水田や河川や海などの水中、建物の壁や柱などの構造物中などに、センサと、汎用LANポートを介して当該センサに接続されたノード装置とが埋め込まれてもよい。そのような場合でも、ノード装置は有線接続によって他のノード装置と確実に通信することが可能である。よって、本実施形態による有線アドホックネットワークを利用すると、土中、水中、構造物中などの、無線通信が困難な環境においても、センサネットワークを構築することが可能である。
続いて、図32のようなネットワーク4における各ノード装置100a〜100iの構成と動作について、第1実施形態に関する図7〜29を順に参照しながら、第1実施形態との違いを説明する。
まず図7を参照すると、第2実施形態では、ハローフレームとACKフレームが利用されない。その理由は、有線リンクは無線リンクと比べて格段に通信品質が良いからである。つまり、物理ポート間を1対1に接続する有線通信においては、伝送媒体上の搬送波信号が検出されさえすれば、通信は事実上100%成功する。
例えば、ノード装置100aは、ハローフレームの受信を契機として隣接ノード装置を認識する必要はなく、単にポート211a−1〜211a−4を監視して、搬送波信号が検出されるか否かを調べればよい。搬送波信号が検出されれば、隣接ノード装置が存在する。
また、例えば、ケーブルの切断などによりポート211a−4がリンクダウン状態でない限り、ノード装置100aがポート211a−4からリンク516を介して隣接するノード装置100bにデータフレームを送信すると、送信の成功が保証される。したがってACKフレームも不要である。
次に、図8を参照すると、第2実施形態ではACKフレームが使われないので、バッファ部109においてタイムアウト時刻フィールドは不要である。
また、第2実施形態においては、図9のような形式の隣接ノード管理テーブル103の代わりに、図33のような隣接ノード管理テーブル103aが使われる。図33は、第2実施形態における隣接ノード管理テーブル103aの例を示す図である。
なお、以下ではノード装置100aにおいて、4つのポート211a−1〜211a−4をそれぞれ識別するポートIDが、各ポート211a−1〜211a−4に予め割り当てられているものとする。
図33を図9と比較すると、図33ではポートIDフィールドが追加されている点のみが異なる。例えば、図1のネットワーク1が、有線ネットワークである場合、ノード装置Nの隣接ノード管理テーブル103a−Nは、図9と同様にノード装置Nに隣接する3つのノード装置N、N、およびNにそれぞれ対応する3つのエントリを有する。そして、各エントリにおいて、ポートIDフィールドの値Q2,i(i=1,3,6)は、「ノード装置NにおいてポートIDとしてQ2,iが割り当てられたポートには、ノード装置Nが接続されている」ということを示す。
例えば、ノード装置Nは、あるポートID・Q2,iが割り当てられたポートにおいて受信したデータフレームからLSの値Nを取り出し、取り出した値NとポートID・Q2,iとを対応付けて、図33のような隣接ノード管理テーブル103aを作成する。
次に、図10と図11を参照すると、第2実施形態でも重み付けテーブル104の形式は第1実施形態と同様である。しかし、第2実施形態では重みの値が「0」と「1」の2値である。
第1実施形態では、無線リンクの品質も考慮して、より適切な隣接ノード装置をLDとして選択するために、ACKフレームが受信されるか否かに応じて式(6)または(7)により重みが小刻みに調整される。しかし、ポート間が1対1に接続されている有線リンクの状態は、以下の(R1)と(R2)の二者択一である。
(R1)搬送波信号が検出されているので、事実上100%通信が成功すると保証されている。
(R2)搬送波信号が検出されないリンクダウン状態なので、通信が失敗することは明らかである。
そのため、第2実施形態においては、重みの値は2値でよい。重みの値の操作の詳細は後述する。
続いて図12と図13を参照すると、第2実施形態でもFID管理テーブル105の形式は、第1実施形態と同様である。
次に図14を参照すると、第2実施形態では受信したフレームのタイプによるステップS202での分岐がなく、したがって、ステップS203とS206も存在しない。
ただし、第2実施形態では、ステップS203から呼び出される図15の処理の代わりに、リンク管理部108は、定期的に各ポートの状態を監視する。そして、リンク管理部108は、搬送波信号が検出されたポートのポートIDを有するエントリが図33の隣接ノード管理テーブル103aに存在するか否かを調べる。
エントリが存在すれば、リンク管理部108は、見つかったエントリの最終更新時刻フィールドの値を現在時刻に更新する。エントリが見つからなければ、リンク管理部108は、新規エントリを作成し、搬送波信号が検出されたポートのポートIDと現在時刻を新規エントリに登録する。この段階ではノードIDフィールドは空である。
また、第2実施形態では、図14のステップS201でデータフレームが受信されたとき、フレーム分岐処理部106はステップS204の処理に加えて、さらに次の処理を行う。すなわち、フレーム分岐処理部106は、データフレームのLSの値と、データフレームを受信したポートのポートIDとを、リンク管理部108に通知する。
すると、リンク管理部108は図33の隣接ノード管理テーブル103aを検索し、以下の(S1)〜(S4)の操作を行う。
(S1)ノードIDフィールドの値がデータフレームのLSの値に一致し、かつポートIDフィールドの値が、データフレームを受信したポートのポートIDに一致するエントリがある場合。
リンク管理部108は、当該エントリの最終更新時刻として現在時刻を設定する。
(S2)ノードIDフィールドが空であり、かつポートIDフィールドの値が、データフレームを受信したポートのポートIDに一致するエントリがある場合。
リンク管理部108は、当該エントリにおいて、ノードIDとしてデータフレームのLSの値を設定し、最終更新時刻として現在時刻を設定する。また、図15における「受信したハローフレームのLSの値」の代わりに、受信したデータフレームのLSの値を用いて、リンク管理部108は、図15のステップS305〜S308の処理を行う。
(S3)ポートIDフィールドの値が、データフレームを受信したポートのポートIDに一致するエントリがない場合。
リンク管理部108は、隣接ノード管理テーブル103aに新規エントリを作成し、新規エントリに、データフレームのLSの値と、データフレームを受信したポートのポートIDと、現在時刻を設定する。また、図15における「受信したハローフレームのLSの値」の代わりに、受信したデータフレームのLSの値を用いて、リンク管理部108は、図15のステップS305〜S308の処理を行う。
(S4)ノードIDフィールドの値がデータフレームのLSの値に一致するが、ポートIDフィールドの値は、データフレームを受信したポートのポートIDに一致しないエントリがある場合。
リンク管理部108は当該エントリを削除する。つまり、リンク管理部108はケーブルの接続替えを隣接ノード管理テーブル103aに反映させる。
続いて、図16を参照して第1実施形態との違いを説明すると、第2実施形態ではハローフレームは使われないので、図16の処理も行われない。
また、図17〜19の各種エージング処理は、第2実施形態でも第1実施形態と同様である。
第2実施形態において、図20〜23のデータフレーム受信処理は次のように変形される。
図20において、ステップS803は省略される。また、図21のステップS816では、初期重み付け値として、送信可能であることを示す「0」が使われる。
また、第2実施形態ではACKフレームが存在しないため、当然、タイムアウトを契機としたLDの再選択も行われない。そして、第2実施形態では重みが2値である。したがって、図22のステップS818は次のように変形される。すなわち、データフレーム処理部110は、取得したLDの値に対応する重みが1であるか否かを判断し、当該重みが1ならば処理は図23のステップS830に移行し、当該重みが0ならば処理はステップS819に移行する。
そして、ステップS819では、データフレーム処理部110は、第1実施形態と同様にして新たなデータフレームを作成して送信部102に出力する。すると、第2実施形態の送信部102は、隣接ノード管理テーブル103aを参照して、LDとして指定された隣接ノード装置に対応するポートIDを特定する。そして、送信部102は、データフレーム処理部110から受け取った新たなデータフレームを、特定したポートIDの割り当てられたポートに出力する。
その後、第2実施形態ではステップS820が省略される。ステップS821〜S824は第1実施形態と同様である。
また、第2実施形態ではACKフレームがないため、ステップS825とS826は省略される。そして、データフレーム処理部110は、ステップS819で送信部102に送信を依頼し終わった時点で、「送信成功」と認識し、受信したデータフレームをバッファ部109から削除する。
よって、ステップS822またはS824の直後に、データフレーム処理部110はステップS827を実行することになる。ただし、第2実施形態では、ステップS827において、データフレーム処理部110は重みの更新は行わない。なぜなら第2実施形態での重みは0と1の2値であり、重みは0のままでよいからである。
また、ステップS819でデータフレーム処理部110が既に「送信成功」と認識しているので、ステップS828とS829は、第2実施形態では存在しない。
そして、図23では、ステップS830での送信が、ステップS819と同様に変形される。また、ステップS836およびS837は、ステップS825およびS826と同様に省略される。ステップS838はステップS828と同様に省略される。そして、ステップS839では、ステップS827と同様に、重みの更新が省略され、最終更新時刻のみが更新される。
そして、第2実施形態ではACKフレームが存在しないので、図25と26の処理も存在しない。
また、図27〜28のデータフレーム送信処理は、第2実施形態では次のように変形される。
図27のステップS1101〜S1110は第1実施形態と同様である。しかし、図28のステップS1111は、ステップS818と同様に変形される。すなわち、データフレーム処理部110はステップS1111において、取得したLDの値に対応する重みが1であるか否かを判断し、当該重みが1ならば処理はステップS1112に移行し、当該重みが0ならば処理はステップS1114に移行する。
また、ステップS1114での送信はステップS819と同様に変形され、受信したデータフレームは、新たなデータフレームの送信後すぐにバッファ部109から削除される。よってステップS1115は省略される。
ステップS1116〜S1120は第1実施形態と同様だが、ステップS1121、S1122、S1124、およびS1125は第2実施形態には存在しない。また、ステップS1123はステップS827と同様に変形される。すなわち、データフレーム処理部110はステップS1123において、重みは更新せず、最終更新時刻のみを更新する。
また、図29の処理は図23の処理と同様に、第2実施形態において変形される。
続いて、第3実施形態について説明する。第3実施形態は、第1および第2実施形態を合わせた実施形態であり、有線接続と無線接続が混在するネットワークに適用される実施形態である。
具体的には、第3実施形態では、下記の3種類のノード装置がネットワーク内に混在している。
(T1)第1実施形態のノード装置100のように無線リンクを介して隣接ノード装置と通信を行う、無線タイプのノード装置。
(T2)第2実施形態のノード装置100a〜100hのように有線リンクを介して隣接ノード装置と通信を行う、有線タイプのノード装置。
(T3)第1実施形態のノード装置100のように無線モジュール206により実現される受信部101および送信部102を有し、さらに、第2実施形態のノード装置100a〜100hのように有線接続用のポートとPHYチップを備える、混合タイプのノード装置。つまり、無線リンクを介して隣接ノード装置と通信を行うこともでき、かつ有線リンクを介して隣接ノード装置と通信を行うこともできる、混合タイプのノード装置。
なお、混合タイプのノード装置においては、例えば、図33のような隣接ノード管理テーブルが使われてもよい。その場合、ポートIDフィールドには、有線リンクを介した隣接ノード装置に関しては、ポートIDの値が格納され、無線リンクを介した隣接ノード装置に関しては、ポートIDとしては利用されない特定の値が格納されてもよい。混合タイプのノード装置は、無線リンクを介したフレームの送受信に関しては、第1実施形態のノード装置100と同様に動作し、有線リンクを介したデータフレームの送受信に関しては、第2実施形態のノード装置100a〜100hと同様に動作する。
続いて、第4実施形態について説明する。第4実施形態は、ACKフレームを利用しないように、無線ネットワークに関する第1実施形態を変形した実施形態である。
ここで、まず先に、無線ネットワークにおいてACKフレームを利用しないことの意味について説明する。
一般に、ACKフレームを利用することで、データフレームが隣接ノード装置に成功裡に到達したという到達保証が得られる。しかし、データフレームに対してACKフレームを返信することで、レイテンシの増大、実質的なスループットの低下といった影響が出るので、ネットワークシステム全体としてパフォーマンスが低下することもある。
また、図22に示すように、ACKフレームが受信されないことが原因でノード装置100が次々と別の隣接ノード装置をLDとして選択する場合がある。すると、経路が次々と切り替わり、結果として、同じGSから同じGDへと宛てられた複数のデータフレーム間で、順序が保たれない可能性がある。つまり、複数のデータフレームがGSから送信された順序と、それら複数のデータフレームがGDに到達する順序が異なるかもしれない。
他方で、無線ネットワークにおいてACKフレームをなくすと、データフレームが隣接ノード装置に到達するという保証はされなくなるが、逆に、GDへの到達順序は保たれる。
つまり、到達保証と順序保証はトレードオフの関係にある。よって、ネットワークの用途、あるいはデータフレームのペイロードに何のプロトコルのPDUが含まれるか、といった要素を考慮して、無線ネットワークにおいてACKフレームを利用するか否かが決められてもよい。
例えば、データフレームのペイロードがイーサネットフレームであり、イーサネットフレームのペイロードがIPデータグラムであり、IPデータグラムのペイロードがTCP(Transmission Control Protocol)セグメントである、という場合がありうる。この場合、TCPは、TCPセグメントがドロップすることを前提に設計されているので、ACKフレームによる到達保証はなくてもよい。つまり、到達しないデータフレームがあったとしても、上位層のプロトコルであるTCPにより、再送制御が行われるので、問題は生じない。逆に、TCPでは順序保証が必要である。
よって、ACKフレームを利用しない第4実施形態は、例えば上記のようにTCPセグメントが図7のデータフレーム301のペイロードの中に含まれている場合などに好適である。
具体的には、第4実施形態は、ACKフレームが存在しないという点で第2実施形態と同様である。ただし、第4実施形態では、隣接ノード装置は第1実施形態と同様にハローフレームを利用して管理される。
よって、第4実施形態では、図14からステップS206が省略されるが、図15〜19の処理は第1実施形態と同様である。また、図20では第2実施形態と同様にステップS803が省略されるが、続く図21の処理は第1実施形態と同様である。
図22において、ステップS818は第2実施形態と同様に変形され、ステップS819は第1実施形態と同様である。ただし、第4実施形態でデータフレーム処理部110は、ステップS819で送信部102に送信を依頼し終わった時点で、「送信成功」と認識し、受信したデータフレームをバッファ部109から削除する。よって、ステップS820は第2実施形態と同様に省略される。
ステップS821〜S824は第1実施形態と同様である。そして、ステップS825とS826は第2実施形態と同様に省略される。よって、ステップS822またはS824の直後に、データフレーム処理部110はステップS827を実行することになり、ステップS828とS829は存在しない。したがって、重みが式(7)により更新されることはない。
なお、ステップS827は第1実施形態と同様でもよいし、第2実施形態と同様に重みの更新が省略されたステップであってもよい。
そして、図23では、ステップS830での送信が、ステップS819と同様に変形される。また、ステップS836およびS837は、ステップS825およびS826と同様に省略され、ステップS838はステップS828と同様に省略される。ステップS839は、第1実施形態と同様でもよいし、第2実施形態と同様に重みの更新が省略されたステップであってもよい。
第4実施形態ではACKフレームが存在しないので、図25と26の処理も存在しない。
また、図27〜28のデータフレーム送信処理は、第4実施形態では次のように変形される。
図27のステップS1101〜S1110は第1実施形態と同様であるが、図28のステップS1111は、ステップS818と同様に変形される。すなわち、データフレーム処理部110はステップS1111において、取得したLDの値に対応する重みが1であるか否かを判断し、当該重みが1ならば処理はステップS1112に移行し、当該重みが0ならば処理はステップS1114に移行する。
また、ステップS1114での送信はステップS819と同様に変形され、受信したデータフレームは、新たなデータフレームの送信後すぐにバッファ部109から削除される。よってステップS1115は省略される。
ステップS1116〜S1120は第1実施形態と同様だが、ステップS1121、S1122、S1124、およびS1125は第4実施形態には存在しない。したがって、重みが式(7)により更新されることはない。
また、ステップS1123は、第1実施形態と同様でもよいし、第2実施形態と同様に重みの更新が省略されたステップであってもよい。
また、図29の処理は図23の処理と同様に、第4実施形態において変形される。
続いて、第5実施形態について説明する。第5実施形態は、第1実施形態と第4実施形態を折衷した実施形態であり、ACKフレームの頻度が調整される実施形態である。
すなわち、第5実施形態では、ACKフレームを要求する第1種のデータフレームと、ACKフレームを要求しない第2種のデータフレームが利用される。第1種と第2種のデータフレームは、図7に示すタイプフィールドの値により区別される。
例えば、第1種のデータフレームのタイプフィールドには、図7のデータフレーム303と同様に、所定の定数Dが指定され、第2種のデータフレームのタイプフィールドには、別の定数Cが指定される。具体的には、タイプフィールドが2ビットのとき、例えば、D=(00)かつC=(01)でもよい。
ところで、ACKフレームを利用する目的の1つは、第4実施形態に関して述べたとおり到達保証であるが、他の目的は、リンクの品質の良さの把握のためである。
一般に、ノード装置NとNの間の無線リンクLi,jの通信品質が非常に悪ければ、ノード装置Nからノード装置Nへ(あるいはノード装置Nからノード装置Nへ)の無線リンクLi,jを介した通信はほぼ不可能である。ハローフレームのようにごく短いフレームでさえも、非常に通信品質の悪い無線リンクLi,jを介してノード装置Nからノード装置Nへ(あるいはノード装置Nからノード装置Nへ)到達することは難しい。
他方、ノード装置NとNの間の無線リンクLi,jの通信品質が非常に良ければ、データフレームのように長いフレームでさえも、無線リンクLi,jを介してノード装置Nからノード装置Nへ(あるいはノード装置Nからノード装置Nへ)成功裡に到達する。
しかし、ノード装置NとNの間の無線リンクLi,jの通信品質が中程度であれば、「ごく短いフレームに関しては無線リンクLi,jを介した送信が成功するが、長いフレームに関しては無線リンクLi,jを介した送信が失敗する」という場合もありうる。図22のステップS826などで送信失敗と判断される場合の中には、一時的にリンクに障害が発生じた場合だけでなく、上記のように、無線リンクの通信品質が、ハローフレームの送信には十分だがデータフレームの送信には不十分である場合も含まれる。
ここで図22のステップS827とS828に注目すると、ACKフレームが受信されるか否かによって、重みが漸減または漸増する。よって、学習された結果の重みの値は、ACKフレームが受信される割合を反映しており、すなわち、通信品質の良さを反映している。つまり、通信品質が良いリンクを介して隣接しているノード装置に対応する重みほど、値が小さく、したがって、LDとしてより優先的に選択される。
さて、このようにACKフレームは、到達保証のほかにリンクの品質の良さの把握のためにも使えるが、第4実施形態に関して述べたとおり、ネットワークシステム全体のパフォーマンス低下を招くこともある。そこで、第5実施形態では、上記のように第1種と第2種のデータフレームが使われる。
例えば、ノード装置100は、基本的にはパフォーマンス向上のために第2種のデータフレームを利用し、時々、リンクの品質の良さを把握するために抜き打ち検査的に第1種のデータフレームを利用してもよい。あるいは、上位層のプロトコルなどに応じて、GSとしてデータフレームを送信するノード装置100が、第1種と第2種のどちらが適切かを判断して、データフレームのタイプフィールドに値を設定してもよい。
第5実施形態には、例えば、以下の(U1)〜(U4)のような、様々なバリエーションがありうる。
(U1)GSとしてデータフレームを送信するノード装置100において、データフレーム処理部110は、最後にデータフレームを送信した時刻Tlastを記憶する。そして、データフレームの送信時に、現在時刻Tnowと最終送信時刻Tlastの差が所定の間隔Iack以上である場合のみ、データフレーム処理部110は、第1種を示す所定の値Dをデータフレームのタイプフィールドに設定する。その他の場合、データフレーム処理部110は、第2種を示す所定の値Eをデータフレームのタイプフィールドに設定する。例えば、間隔Iackは、10秒などの比較的長い時間でもよい。
(U2)GSとしてデータフレームを送信するノード装置100において、データフレーム処理部110は、GDごと、あるいは選択したLDごとに、時刻Tlastを記憶するようにして、上記(U1)と同様に動作してもよい。
(U3)GSとしてデータフレームを送信するノード装置100において、データフレーム処理部110は、送信したデータフレームの数Cを数える。つまり、データフレームの送信時に、データフレーム処理部110はCをインクリメントする。数えた値Cが所定の値Cackと等しい場合のみ、データフレーム処理部110は、第1種を示す所定の値Dをデータフレームのタイプフィールドに設定し、Cをゼロにリセットする。その他の場合、データフレーム処理部110は、第2種を示す所定の値Eをデータフレームのタイプフィールドに設定する。例えば、所定の値Cackは、数千といった比較的大きな数でもよい。
(U4)GSとしてデータフレームを送信するノード装置100において、データフレーム処理部110は、GDごと、あるいは選択したLDごとに、送信したデータフレームの数Cを数えるようにして、上記(U3)と同様に動作してもよい。
なお、隣接ノード装置から受信したデータフレームを転送するノード装置100において、データフレーム処理部110は、受信したデータフレームに指定されたタイプの値をそのまま、送信するデータフレームのタイプフィールドにコピーする。
あるいは、選択したLDに対応付けられた重みの値に応じて、データフレーム処理部110は、タイプフィールドの値を書き換えてもよい。例えば、選択したLDに対応付けられた重みが所定の閾値以上の場合、リンク品質が悪いと推測される。そこで、データフレーム処理部110は、受信したデータフレームにおけるタイプフィールドの値にかかわらず、送信するデータフレームのタイプフィールドに、第2種を示す所定の値Eを設定してもよい。
または、タイプフィールドが3ビット以上で表され、データフレームに以下の(V1)〜(V4)のような複数のサブタイプがあってもよい。
(V1)ACKフレームを要求しており、中継時のタイプフィールドの値の書き換えが許されないデータフレーム。
(V2)ACKフレームを要求しており、中継時のタイプフィールドの値の書き換えが許されるデータフレーム。
(V3)ACKフレームを要求せず、中継時のタイプフィールドの値の書き換えが許されないデータフレーム。
(V4)ACKフレームを要求せず、中継時のタイプフィールドの値の書き換えが許
されるデータフレーム。
以上、第1〜第5実施形態について詳細に説明したが、これらの実施形態の利点の理解を助けるため、続いて第1および第2比較例について説明する。なお、以下では説明の便宜上、「受信したデータフレームのGSとFIDの値が、過去に送信したデータフレームのGSとFIDの値に等しいのか否か」という判定(つまり図21のステップS807)を、「ループ判定」と称する。
図34と図35は、ループ判定があるがバックトラック動作のない第1比較例について説明する図である。図34と図35には、図6と同様に、図1のネットワーク1におけるデータフレームの転送の様子が示されている。
第1比較例のノード装置は、第1実施形態と同様のFID管理テーブルを有し、ループ判定を行う。つまり、図21のステップS809と同様に、第1比較例のノード装置も、過去に送信したデータフレームが受信された場合、送信の際に選択したLDに対応する重みを最大値に設定する。
しかし、第1比較例のノード装置は、バックトラック動作を行わない。つまり、第1比較例のノード装置では、FID管理テーブルのOLSフィールドは、OLSにあたるノード装置をLDの候補から除外するために参照される(図21のステップS817と図22のステップS829を参照)だけである。そして、第1比較例では、図23のステップS830〜S839の処理の代わりに、単にステップS838と同様に、受信したデータフレームを破棄する処理だけが行われる。
よって、図1のノード装置N〜Nがいずれも第1比較例のノード装置である場合に、ノード装置NがGDとしてノード装置Nを指定し、ノード装置NとNの間のリンクに障害が発生していると、データフレームは図34または図35のように転送される。
図34において、ステップS106までは図6の第1実施形態と同様なので、説明を省略する。
第1実施形態と同様に、ステップS106でデータフレームを受信したノード装置Nは、ステップS103でLDとして選択したノード装置Nに対応する重みを1に設定する。そして、新たにノード装置NをLDとして選択し、ステップS107でデータフレームを送信する。
すると、ステップS107でデータフレームを受信したノード装置Nは、FID管理テーブルに基づいて、ステップS106で送信したのと同じデータフレームが受信されたと認識する。そして、ノード装置Nは、ステップS106でLDとして選択したノード装置Nの重みを最大値に設定する。
ここで、ノード装置Nには、OLSであるノード装置Nと、重みが最大値に設定されたノード装置Nしか隣接していない。よって、ノード装置Nは、LDとして選択可能な隣接ノード装置がないと判断し、ステップS107で受信したデータフレームを破棄する。こうしてデータフレームは、GDであるノード装置Nに到達することなく、ネットワーク1から消滅してしまう。
そして、ノード装置Nにとっては、「ステップS107の送信の後、どの隣接ノード装置からも同じデータフレームが返ってこない」という状況である。よって、ノード装置Nは、「GDとしてノード装置Nが指定されているデータフレームの送信時にLDとしてノード装置Nを選択することは適切である」と誤った学習をしてしまう。同様に、
ノード装置Nも、「GDとしてノード装置Nが指定されているデータフレームの送信時にLDとしてノード装置Nを選択することは適切である」と誤った学習をしてしまう。
つまり、第1実施形態の図6の例では、ステップS109やS110のバックトラック動作によって誤った学習結果が正されるが、第1比較例では、誤った学習結果が正されない。
すると、図34のデータフレームの転送の後、再度ノード装置NがGDとしてノード装置Nを指定し、ノード装置NとNの間のリンクは障害から復旧していないとすると、次は図35のようにデータフレームが転送される。
図35のステップS101とS102は図6と同様なので説明を省略する。ステップS102でデータフレームを受信したノード装置Nは、図34での学習の結果に基づいて、ステップS103bでLDとしてノード装置Nを選択し、データフレームを転送する。
すると、図34のステップS107の受信により、「GDとしてノード装置Nが指定されている場合、LDとしてノード装置Nは選択不能である」と学習したノード装置Nは、他の隣接ノード装置NをLDとして選択する。そして、ノード装置Nは、ノード装置NをLDとして指定して、ステップS104bでデータフレームを送信する。
この時点のノード装置Nにおいて、GDであるノード装置Nに対応する重み付けテーブルでは、図34のステップS104で送信失敗と判定されて値が増やされたノード装置Nの重みよりも、ノード装置Nの重みの方が、値が小さいとする。すると、ード装置Nは、ノード装置NをLDとして選択し、ステップS105bでデータフレームを送信する。
すると、ノード装置Nは、ステップS103bで送信したのと同じデータフレームが受信されたと認識し、ノード装置Nの重みを最大値に設定する。そして、ノード装置Nは、まだLDとして選択していない隣接ノード装置Nを新たにLDとして選択し、ステップS106bでデータフレームを送信する。
すると、データフレームを受信したノード装置Nは、ステップS105bで送信したのと同じデータフレームが受信されたと認識し、ノード装置Nの重みを最大値に設定する。その結果、ノード装置Nは、LDとして選択可能な隣接ノード装置が残っていないと判断し、ステップS106bで受信したデータフレームを破棄する。こうしてデータフレームは、GDであるノード装置Nに到達することなく、ネットワーク1から消滅してしまう。
しかしながら、ノード装置Nにとっては、「ステップS102の送信の後、どの隣接ノード装置からも同じデータフレームが返ってこない」という状況である。よって、ノード装置Nは、「GDとしてノード装置Nが指定されているデータフレームの送信時にLDとしてノード装置Nを選択することは適切である」と誤った学習をしてしまう。
よって、その後もノード装置Nは、GDとしてノード装置Nが指定されているデータフレームの送信時にLDとしてノード装置Nを選択し続ける。そのため、ード装置NとNの間のリンクが障害から復旧しない限り、データフレームはネットワーク内で消滅してしまう。
以上のように、ノード装置がループ判定を行ったとしても、バックトラック動作を行わなければ、GSのノード装置は、データフレームがネットワーク内で破棄されて消滅することを認識せずに、データフレームを送り続ける。その結果、送り続けられるデータフレームは、ネットワークのどこかで廃棄し続けられる。よって、第1比較例は、好ましくない。
図35は、擬似的なバックトラック動作は行うがループ判定を行わない第2比較例について説明する図である。
第2比較例のノード装置は、FID管理テーブル105を持たず、ループ判定も行わない。また、第2比較例のノード装置は、擬似的なバックトラック動作を行う。
すなわち、第2比較例のノード装置は、GDとして自ノード装置以外が指定されたデータフレームを受信すると、データフレームのLS以外の隣接ノード装置のうち、最大値でない重みと対応付けられているものをLDとして選択し、データフレームを送信する。そして、第2比較例のノード装置は、送信が成功するまで順次、選択可能な隣接ノードを選択してゆく。
その結果、重みが最大値の隣接ノードおよび受信したデータフレームのLS以外の、すべての隣接ノード装置をLDとして試しても送信が成功しなかった場合に、第2比較例のノード装置は、受信したデータフレームのLSへとデータフレームを返送する。この返送が、第2比較例における擬似的なバックトラック動作である。
図35において、ステップS101〜S106は第1実施形態の図6と同様であるから、説明を省略する。
第2比較例のノード装置はFID管理テーブル105を持たず、ループ判定を行わない。よって、ノード装置Nは、ステップS106でデータフレームを受信すると、ステップS103と同様にして再度ノード装置NをLDとして選択し、ステップS107bでデータフレームを送信する。
すると、やはりFID管理テーブル105を持たないノード装置Nは、ステップS107bでデータフレームを受信すると、ステップS105と同様にして再度ノード装置NをLDとして選択し、ステップS108bでデータフレームを送信する。
以下同様にして、ループ判定が行われない第2比較例においては、閉路〈N,N,N〉内でデータフレームが永遠に転送され続けるという、無限ループに陥ってしまう。よって、第2比較例も好ましくない。
それに対し、第1〜第5実施形態のノード装置は、ループ判定とバックトラック動作をともに行うので、アドホックネットワークに適した装置である。
なお、上記で説明した各実施形態は、互いに矛盾しない限り、適宜組み合わせることが可能である。例えば、第3実施形態と第5実施形態を組み合わせた実施形態(すなわち、有線接続と無線接続が混在するネットワークにおいて、ACKフレームの頻度調整が行われる実施形態)などが可能である。
また、本発明は上記の実施形態に限られるものではなく、様々に変形可能である。以下にその例をいくつか述べる。
変形の第1の観点は、データ構造である。図8〜13はテーブル形式で表されているが、実施形態に応じて、各種データの形式は任意であり、テーブル、有限FIFO(First In First Out)、線形リストなど任意のデータ構造を利用することができる。
例えば、FID管理テーブル105は、有限FIFOにより実現されてもよい。この場合、エントリは、古いものから順に、有限FIFOから追い出される。よって、図19に示すFID管理テーブル105のエージング処理は不要である。したがって、FID管理テーブル105の最終更新時刻フィールドも不要である。
具体的には、図22のステップS822、図23のステップS833、図28のステップS1118、および図29のステップS833aにおいて、既存のエントリを更新する代わりに、新規エントリの作成と、作成した新規エントリでの値の設定が行われてもよい。
例えば、ステップS822は、以下の(W1)〜(W3)の処理に置き換えられる。
(W1)データフレーム処理部110は、FID管理テーブル105に新規エントリを作成する。
(W2)データフレーム処理部110は、受信したデータフレームのGSとFIDに等しい値をGSおよびFIDとして有する既存のエントリから、FID、GS、OLSの各フィールドの値を新規エントリにコピーする。
(W3)データフレーム処理部110は、送信したデータフレームのLDの値を新規エントリのLDとして設定する。
なお、図21のステップS806、図23のステップS831、図28のステップS1116、および図29のステップS831aでは、有限FIFOの最も新しいエントリから古いエントリへと向かう順で、各エントリが順々に調べられる。
変形の第2の観点は、重みの表現である。重みを表す数値の範囲は実施形態によって任意である。例えば、上記の例のように0から1の範囲の値で重みを表す代わりに、0から255の範囲の整数により重みを表してもよい。また、上記各実施形態では、優先度が高いほど重みの値は小さいが、実施形態によっては逆に、優先度が高いほど重みの値が大きくてもよい。その場合、重みを変更する各ステップの動作が適宜変更される。
変形の第3の観点は、ポーリング処理と割り込み処理の置き換えである。例えば、タイマIC203は、データフレームの送信の後ACKフレームが返信されないときにタイムアウトするための割り込み信号を出力することもできる。つまり、図26のようにACK処理部107がバッファ部109の各エントリの最終更新時刻の値をポーリングにより調べる代わりに、バッファ部109の各エントリの最終更新時刻になったらタイマIC203が割り込み信号を発するような実施形態も可能である。
変形の第4の観点は、隣接ノード装置の管理に関する。
他のノード装置がハローフレームを送信する間隔が既知の場合、リンク管理部108は、現在隣接ノード装置として認識しているノード装置から次にハローフレームを受信する時刻を予測することができる。例えば、ネットワーク内のすべてのノード装置においてハローフレームの送信間隔ΔThelloが等しい場合には、他のノード装置がハローフレームを送信する間隔が既知である。
また、図7のハローフレーム311の代わりに、ハローフレームの送信間隔を示すフィールドをさらに有する別の形式のハローフレームが使われてもよい。その場合、リンク管理部108は、受信済みのハローフレームから、隣接ノード装置から次にハローフレームを受信する時刻を予測することができる。
このように、他のノード装置がハローフレームを送信する間隔が既知の場合は、例えば、隣接ノード管理テーブル103(図9参照)において、最終更新時刻フィールドが省略され、代わりに次のようなフィールドが追加されてもよい。
(X1)ハローフレームの受信に連続して失敗した回数を記録するための連続失敗回数フィールド
(X2)次にハローフレームが受信されると予測される時刻を記録するための予測時刻フィールド
そして、リンク管理部108は、図15のステップS302とS304で、現在時刻を最終更新時刻として設定する代わりに、連続失敗回数の値を0にクリアし、ハローフレームの既知の送信間隔を現在時刻に足した時刻を、予測時刻として設定してもよい。また、図17のステップS502の代わりに、次のような処理が行われてもよい。
すなわち、注目エントリの予測時刻フィールドの値が現在時刻よりも前の時刻を示す場合、リンク管理部108は、注目エントリの連続失敗回数の値をインクリメントし、予測時刻フィールドの値を、ハローフレームの既知の送信間隔の分だけ後ろにずらす。そして、注目エントリの連続失敗回数の値が所定の回数(例えば3回)以上であれば、処理はステップS503に移行し、注目エントリの連続失敗回数の値が所定の回数未満であれば、処理はステップS505に移行する。
また、隣接ノード装置の管理という上記第4の観点から、上記各実施形態は、次のように変形されてもよい。
すなわち、データフレームの受信時にも、受信したデータフレームのLSの値に基づいて、ハローフレーム受信処理と同様にして、必要に応じてリンク管理部108が隣接ノード管理テーブル103と重み付けテーブル104を更新してもよい。同様に、ACKフレームの受信時にも、受信したACKフレームのLSの値に基づいて、ハローフレーム受信処理と同様にして、必要に応じてリンク管理部108が隣接ノード管理テーブル103と重み付けテーブル104を更新してもよい。
変形の第5の観点は、LDを選択する際の基準である。すなわち、上記の各実施形態では、データフレームの送信時に重みに基づいてLDが選択されるが、LDの選択において、さらにリンク品質が考慮されてもよい。例えば、ノード装置100は、受信電波強度などに基づいて無線リンクのリンク品質を計測してもよい。そして、データフレーム処理部110は、重みとリンク品質の関数として表される評価値に基づいてLDを選択してもよい。
変形の第6の観点は、ACKフレームが受信されないときの処理に関する。
例えば、図22のステップS829では、一度ステップS826で「送信失敗」と判断された隣接ノード装置が、LDの候補から除外されている。しかし、一度ステップS826で「送信失敗」と判断された隣接ノード装置も候補から除外せず、ステップS829で選択可能とする実施形態も可能である。
その場合、ステップS818は次のように変形される。すなわち、データフレーム処理部110は、取得したLDの値に対応する重みが最大値であるか否かを判断する。そして、当該重みが最大値のとき、処理は図23のステップS830に移行し、当該重みが最大値未満のとき、処理はステップS819に移行する。
同様に、図28のステップS1125も、一度ステップS1122で「送信失敗」と判断された隣接ノード装置をLDの候補から除外しないように、変形することができる。そして、ステップS1111は、取得したLDの値に対応する重みが最大値であるか否かをデータフレーム処理部110が判断するように、変形される。
ステップS819とS819が上記のように変形されると、例えば、図2のノード装置N111が、GDとしてノード装置N101を指定するデータフレームをノード装置N116から受信したとき、次のようにノード装置N111が動作する。
上記データフレームの受信時に、ノード装置N111が有するノード装置N101に対応する重み付けテーブルにおいて、隣接ノード装置N105、N109、N115それぞれの重みが0.1、0.6、0.7だったとする。すると、まずLDとして隣接ノード装置N105が選択される。
仮に、ノード装置N105からACKフレームが返ってこないとすると、ノード装置N105の重みは0.2に更新される。そして、第1実施形態では、送信に失敗したノード装置N105はLDの候補から除外されて、次に隣接ノード装置N109がLDとして選択されるが、この変形例においては、0.2<0.6<0.7なので、再度ノード装置N105がLDとして選択される。
そして、またもやノード装置N105からはACKフレームが返ってこないとすると、ノード装置N105の重みは0.3に更新され、0.3<0.6<0.7なので、再度ノード装置N105がLDとして選択される。ノード装置N111とN105の間のリンクの状態が改善しない限り、以下同様にして繰り返しノード装置N105がLDとして選択されては送信が失敗する。そして、ノード装置N105の重みが0.6(または0.7)になった段階で、初めて、重み0.6と対応付けられたノード装置N109がLDとして選択される。
以上例示したように、一度「送信失敗」と判断された隣接ノード装置をLDの候補から除外しないことも可能である。この変形例は、「リンクに一時的に障害が発生しても、すぐにリンクが障害から復旧する」といった場合に好適である。例えば、ステップS818〜S829の繰り返しループの実行中にリンクが障害から復旧すれば、ノード装置100は、「LDとして好適」と今までの学習の結果から判っている隣接ノード装置を、瞬間的な障害の影響を受けずに、LDとして選択することができる。
ただし、障害からの復旧が常に瞬間的であるとは限らない。そこで、第1実施形態では、経路の収束にかかる時間を短縮するために、一度「送信失敗」と判断された隣接ノード装置はLDの候補から除外されている。つまり、一度「送信失敗」と判断された隣接ノード装置をLDの候補から除外することで、ある1つのデータフレームに関してノード装置100がLDを最終的に決定するのにかかる時間が短縮される。その結果、ネットワーク全体としても、データフレームがGSで送信されてからGDに到着するまでのレイテンシが短縮される。
また、上記の第6の観点からの変形例として、図22のステップS828において式(7)の代わりに下記の式(8)を用いてデータフレーム処理部110が重みの更新を行う変形例も可能である。
revised=Wmax (8)
式(8)による重みの更新は、障害が生じているリンクを介してノード装置100に隣接するノード装置を、重みが更新される当該エントリがエージング処理により消去されるまで、LDの候補から除外し続けることを意味する。
さらに、上記の第6の観点からは、次のような変形も可能である。
すなわち、第1実施形態では、図26に示すように、1度データフレームの送信を試みてもACKフレームが所定のACKフレーム待ち時間Twaitのうちに受信されなければ、送信失敗と見なされる。しかし、所定の回数(例えば3回)データフレームの送信を試みてもACKフレームが返信されないときにはじめて、「送信失敗」と見なす実施形態も可能である。
例えば、送信済みのデータフレームを送信回数と対応付けて格納する送信バッファを、送信部102が備えていてもよい。送信部102は、最初にデータフレーム処理部110からデータフレームの送信を依頼されたとき、送信回数として1を設定し、データフレーム処理部110から出力されたデータフレームを送信バッファに格納する。そして、ACK処理部107は、図26のステップS1003の処理を行う代わりに、次のように動作してもよい。
すなわち、ACK処理部107は、バッファ部109の注目エントリに格納されているデータフレームに対応する、送信バッファ中の送信済みデータフレームを、GSフィールドとFIDフィールドの値に基づいて特定する。
そして、ACK処理部107が特定した送信済みデータフレームに対応付けられている送信回数の値が、所定の回数に達していれば、ACK処理部107はステップS1003の処理を行い、処理は続いてステップS1004へと移行する。
他方、ACK処理部107が特定した送信済みデータフレームに対応付けられている送信回数の値が、所定の回数未満であれば、ステップS1003の処理は行われず、代わりにACK処理部107は送信回数の値をインクリメントする。そして、処理はステップS1004へと移行する。
なお、上記の様々な実施形態とその変形例についてまとめれば、以下のとおりである。
ノード装置は、複数の隣接ノード装置のうち任意の1つからフレームを受信する受信手段として、例えば図3の受信部101、図4の無線モジュール206、図21のポート211a−1〜211a−4とそこに接続されたPHYチップなどを備える。
また、図3のFID管理テーブル105は、図4のDRAM20ネットワーク4やフラッシュメモリ205により実現され、図12や図13のような情報を格納している。このFID管理テーブル105は、以下の(Y1)〜(Y3)の各情報を対応付けて記憶する記憶手段の一例である。
(Y1)送信対象フレームを識別するフレーム識別情報
(Y2)複数の隣接ノード装置のうちで、送信対象フレームの送信先である送信先隣接ノード装置を識別する送信先隣接ノード識別情報
(Y3)送信対象フレームを最初に送信してきた隣接ノード装置を識別する起源ノード識別情報
なお、上記(Y1)の送信対象フレームの例は、図22のステップS819、図23のステップS830、図28のステップS1114、図29のステップS830bなどで送信されるデータフレームである。そして、フレーム識別情報の例は、GSフィールドの値とFIDフィールドの値の組み合わせである。
また、上記(Y2)の送信先隣接ノード識別情報の具体例は、FID管理テーブル105のLDフィールドに格納される、隣接ノード装置のノードIDである。
そして、上記(Y3)の起源ノード識別情報の具体例は、FID管理テーブル105のOLSフィールドに格納されるノードIDである。
上記のとおり、ノード装置100がデータフレームを中継する場合には、ノード装置100が最初に当該データフレームを受信したときの当該データフレームのLSフィールドの値が、FID管理テーブル105のOLSフィールドに格納される。つまり、送信対象フレームを最初に送信してきた隣接ノード装置のノードIDが、OLSフィールドに格納される。
なお、拡張されたOLSの定義にしたがい、ノード装置100自身がGSとなる場合はFID管理テーブル105のOLSフィールドには自ノードIDが格納される。つまり、ノード装置100自身が送信対象フレームを生成した場合、OLSフィールドには、ノード装置100自身の識別情報である自ノードIDが格納される。換言すれば、OLSフィールドに格納されるノードIDは、ノード装置100自身を中心としたホップ数1以下の範囲において、ノード装置100が送信対象フレームの起源として認識するノード装置のノードIDである。
また、図3の重み付けテーブル104は、図4のDRAM204やフラッシュメモリ205により実現され、図10や図11のような情報を格納している。この重み付けテーブル104は、データフレームの最終宛先であるGDに対応付けて、複数の隣接ノード装置それぞれへの送信可能性を表す送信可能性情報を記憶する記憶手段の一例である。
なお、送信可能性情報は、上記実施形態では、具体的にはLDフィールドのノードIDと重みの値との組をそれぞれ含む、1つまたは複数のエントリで表されている。そして、送信可能性は、例えば「重みの値が1ならば送信不能であり、重みの値が1未満ならば送信可能である」というように表される。
また、図3のデータフレーム処理部110は、例えば図4のMPU201とDRAM204により実現され、送信可能性情報を更新する更新手段の一例である。受信部101などの受信手段が受信した受信フレームを識別する受信フレーム識別情報が、FID管理テーブル105などの記憶手段に(Y1)のフレーム識別情報として記憶されている場合、更新手段としてのデータフレーム処理部110は、送信可能性情報を更新する。
具体的には、この場合に更新される送信可能性情報は、受信フレームに指定された最終宛先(つまりGD)である受信フレーム宛先に対応付けられて、重み付けテーブル104などの記憶手段に記憶されている送信可能性情報である。送信可能性情報は、FID管理テーブル105などの記憶手段に、受信フレーム識別情報と対応付けられて記憶されている、(Y2)の送信先隣接ノード識別情報により識別される第1の隣接ノード装置への送信可能性が「送信不能」を示すように、更新される。
具体的には、例えば、「FID管理テーブル105のLDフィールドと同じ値をLDフィールドに持つ、重み付けテーブル104−iのエントリにおいて、重みを1に設定する」という動作が、更新手段としてのデータフレーム処理部110により行われる。
また、データフレーム処理部110と送信部102は、協働して、複数の隣接ノード装置の中から、送信可能な第2の隣接ノード装置を選択し、第2の隣接ノード装置へ受信フレームを送信する送信手段として機能する。送信手段の一部としてのデータフレーム処理部110は、受信フレーム宛先に対応付けられて重み付けテーブル104などの記憶手段に記憶されている送信可能性情報に基づいて、第2の隣接ノード装置を選択する。
ここで、FID管理テーブル105などの記憶手段において、受信フレーム識別情報に対応付けられた(Y3)の起源ノード識別情報として第3の隣接ノード装置が記憶されているとする。
すると、受信フレーム識別情報が、FID管理テーブル105などの記憶手段に(Y1)のフレーム識別情報として記憶されている場合、送信手段としてのデータフレーム処理部110は、第3の隣接ノード装置を送信可能性情報によらず送信不能と見なす。
つまり、データフレーム処理部110は、「OLSである隣接ノード装置は、重みの値によらず、送信不能である」と見なして、OLSである隣接ノード装置をLDの候補から除外する。そして、送信手段としてのデータフレーム処理部110は、第3の隣接ノード装置とは異なる、送信可能な第2の隣接ノード装置を選択する。
また、データフレーム処理部110と送信部102は、協働してバックトラック手段としても機能する。バックトラック手段としてのデータフレーム処理部110と送信部102は、重み付けテーブル104などの記憶手段の送信可能性情報において、複数の隣接ノード装置の中に送信可能なものがなく、かつ受信フレーム識別情報がFID管理テーブル105などの記憶手段に(Y1)のフレーム識別情報として記憶されている場合に、第3の隣接ノード装置へ受信フレームを送信する。
なお、ここで「複数の隣接ノード装置の中に送信可能なものがない」とは、「重みが1であるなど、送信可能性情報により送信不能と示されている隣接ノード装置か、上記のように送信可能性情報によらず送信不能と見なされている第3の隣接ノード装置しかない」という意味である。つまり、バックトラック手段としてのデータフレーム処理部110と送信部102は、第3の隣接ノード装置以外の(0個、1個、または複数の)隣接ノード装置の中に送信可能なものがない場合に、第3の隣接ノード装置へ受信フレームを送信する。
また、ノード装置は、新規フレームを生成する生成手段を備えてもよい。生成手段のいくつかの例は、下記(Z1)〜(Z4)のとおりである。
(Z1)図3の上位層処理部111
(Z2)図31において汎用LANポート212eを介してセンサ504に接続されているノード装置100eが備える、不図示のMACチップとMPU
(Z3)図31において汎用LANポート212gを介してPC505と接続されているノード装置100gが備える、不図示のMACチップとMPU
(Z4)図31において汎用LANポート212aを介してL2SW502と接続されているノード装置100aが備える、不図示のMACチップとMPU
なお、上記の様々な実施形態とその変形例によれば、データ伝送フェーズとは独立した事前の経路生成フェーズが別途存在する訳ではなく、データ伝送フェーズで動的に経路生成が行われる。その利点を説明すれば、下記のとおりである。
一般に、データ伝送フェーズとは独立した事前の経路生成フェーズを有する通信プロトコルでは、制御用の短いPDUを用いて経路が生成される。しかし無線リンクの通信品質には、「制御用の短いPDUの通信には十分だが、データ伝送用の長いPDUの通信には不十分」という、中間的なレベルもありうる。その理由の一つは、PDUの長さによって、通信可能な距離が異なるからである。
そのため、経路生成フェーズでは有効と思われた経路が、データ伝送フェーズになってはじめて、現実的には使用不能であると判明するかもしれない。また、電波状況は常に変わりうるし、有線ネットワークであっても、ノード装置の増設もしくは撤去、またはケーブルの接続替えなどは、常に起こりうる。
しかし、上記の様々な実施形態とその変形例によれば、データ伝送フェーズで、データフレームを送信しながら、データフレームの送信が可能な経路が動的に生成されていく。したがって、「現実的なデータフレームの伝送には使用不能な経路が、データ伝送フェーズとは独立した経路生成フェーズで作られてしまう」といった無駄は生じない。
また、上記の様々な実施形態とその変形例によれば、データ伝送フェーズにおけるネットワーク環境の動的な変化にも、動的に応じつつ、経路が選択される。そして、上記の説明から明らかなとおり、人手による設定なしに、各ノード装置の自律分散協調の結果として、動的に適切な経路が見出される。
さらに、図6の例からも明らかなとおり、上記の様々な実施形態とその変形例によれば、たとえバックトラックが生じても、必ずしもGSまで影響が及ぶ訳ではない。つまり、局所的に起こる変化に応じて、限られた局所的な範囲の中だけで経路が修正される。よって、「局所的な変化がネットワーク全体にポジティブにフィードバックし、その結果ネットワーク全体が過負荷状態に陥る」といった事態は生じない。

Claims (8)

  1. 複数の隣接ノード装置のうち任意の1つからフレームを受信する受信手段と、
    送信対象フレームを識別するフレーム識別情報と、前記複数の隣接ノード装置のうちで前記送信対象フレームの送信先である送信先隣接ノード装置を識別する送信先隣接ノード識別情報と、該送信対象フレームを最初に送信してきた隣接ノード装置を識別する起源ノード識別情報とを対応付けて記憶する第1の記憶手段と、
    フレームの最終宛先に対応付けて、前記複数の隣接ノード装置それぞれへの送信可能性を表す送信可能性情報を記憶する第2の記憶手段と、
    前記受信手段が受信した受信フレームを識別する受信フレーム識別情報が、前記第1の記憶手段に前記フレーム識別情報として記憶されている場合に、前記受信フレームに指定された最終宛先である受信フレーム宛先に対応付けられて前記第2の記憶手段に記憶されている前記送信可能性情報を、前記第1の記憶手段に前記受信フレーム識別情報と対応付けられて記憶されている前記送信先隣接ノード識別情報により識別される第1の隣接ノード装置への前記送信可能性が送信不能を示すように、更新する更新手段と、
    前記受信フレーム宛先に対応付けられて前記第2の記憶手段に記憶されている前記送信可能性情報に基づいて、前記複数の隣接ノード装置の中から、送信可能な第2の隣接ノード装置を選択し、前記第2の隣接ノード装置へ前記受信フレームを送信する送信手段と、
    前記第2の記憶手段の送信可能性情報において、前記複数の隣接ノード装置の中に送信可能なものがなく、かつ前記受信フレーム識別情報が前記第1の記憶手段に前記フレーム識別情報として記憶されている場合に、前記第1の記憶手段において前記受信フレーム識別情報に対応付けられた前記起源ノード識別情報として記憶される第3の隣接ノード装置へ前記受信フレームを送信するバックトラック手段と、
    を備えることを特徴とするノード装置。
  2. 前記受信手段が前記受信フレームを受信したとき、前記受信フレームを記憶するバッファ手段をさらに備え、
    前記送信手段と前記バックトラック手段は、前記受信フレームの送信に成功したと認識すると、前記バッファ手段から前記受信フレームを削除する、
    ことを特徴とする請求項1に記載のノード装置。
  3. 前記受信フレーム識別情報が前記第1の記憶手段に前記フレーム識別情報として記憶されている場合、前記送信手段は、前記第3の隣接ノード装置を前記送信可能性情報によらず送信不能と見なして、前記第3の隣接ノード装置とは異なる、送信可能な前記第2の隣接ノード装置を選択し、前記バックトラック手段は、前記第3の隣接ノード装置を除いた前記複数の隣接ノード装置の中に送信可能なものがない場合に、前記第3の隣接ノード装置へ前記受信フレームを送信する
    ことを特徴とする請求項1に記載のノード装置。
  4. 前記受信フレーム識別情報が既に前記第1の記憶手段において前記フレーム識別情報として記憶されている場合、前記送信手段は、フレーム識別情報として前記受信フレーム識別情報を、送信先隣接ノード識別情報として該送信手段が該受信フレームを送信した送信先である隣接ノード装置の識別情報を、そして、起源ノード識別情報として既に前記第1の記憶手段に記憶されている前記フレーム識別情報に対応する前記起源ノード識別情報を、前記第1の記憶手段に互いに対応付けて記憶させ、
    前記受信フレーム識別情報が前記第1の記憶手段に記憶されていない場合、前記送信手段は、フレーム識別情報として前記受信フレーム識別情報を、送信先隣接ノード識別情報として該送信手段が該受信フレームを送信した送信先である隣接ノード装置の識別情報を、そして、起源ノード識別情報として該受信フレームの送信元である隣接ノード装置の識別情報を、前記第1の記憶手段に互いに対応付けて記憶させる、
    ことを特徴とする請求項1に記載のノード装置。
  5. 新規フレームを生成する生成手段をさらに備え、
    前記送信手段はさらに、
    前記新規フレームの最終宛先に対応付けられて前記第2の記憶手段に記憶されている前記送信可能性情報に基づいて、前記複数の隣接ノード装置の中から、送信可能な隣接ノード装置を選択し、該選択した隣接ノード装置へ前記新規フレームを送信し、
    フレーム識別情報として前記新規フレームを識別する新規フレーム識別情報を、送信先隣接ノード識別情報として前記選択した隣接ノード装置の識別情報を、そして、起源ノード識別情報として前記新規フレームを生成した前記ノード装置自身を識別する自ノード識別情報を、前記第1の記憶手段に互いに対応付けて記憶させる、
    ことを特徴とする請求項1に記載のノード装置。
  6. 前記バックトラック手段は、前記複数の隣接ノード装置の中に送信可能なものがなく、かつ前記第1の記憶手段に記憶されている前記フレーム識別情報が前記受信フレーム識別情報と等しく、かつ、前記起源ノード識別情報が自ノード識別情報である場合に、前記受信フレームを破棄する、
    ことを特徴とする請求項5に記載のノード装置。
  7. ノード装置が備えるコンピュータに複数の隣接ノード装置のうち任意の1つへフレームを送信させる送信プログラムを記憶した記憶媒体であって、
    前記送信プログラムが前記コンピュータに
    複数の隣接ノード装置のうち任意の1つから前記ノード装置が受信した受信フレームから、前記受信フレームを識別する受信フレーム識別情報を抽出する抽出ステップと、
    送信対象フレームを識別するフレーム識別情報と、前記複数の隣接ノード装置のうちで前記送信対象フレームの送信先である送信先隣接ノード装置を識別する送信先隣接ノード識別情報と、該送信対象フレームを最初に送信してきた前記隣接ノード装置を識別する起源ノード識別情報とを対応付けて記憶する第1の記憶手段に、抽出した前記受信フレーム識別情報が前記フレーム識別情報として記憶されているか否か判断する判断ステップと、
    前記受信フレーム識別情報が前記フレーム識別情報として記憶されていると判断した場合に、フレームの最終宛先に対応付けて前記複数の隣接ノード装置それぞれへの送信可能性を表す送信可能性情報を記憶する第2の記憶手段において、前記受信フレームに指定された最終宛先である受信フレーム宛先に対応付けられて記憶されている前記送信可能性情報を、前記第1の記憶手段に前記受信フレーム識別情報と対応付けられて記憶されている前記送信先隣接ノード識別情報により識別される第1の隣接ノード装置への前記送信可能性が送信不能を示すように、更新する更新ステップと、
    前記受信フレーム宛先に対応付けられて前記第2の記憶手段に記憶されている前記送信可能性情報に基づいて、前記複数の隣接ノード装置の中から、送信可能な第2の隣接ノード装置を選択し、前記第2の隣接ノード装置へ前記受信フレームを送信する送信ステップと、
    前記第2の記憶手段の送信可能性情報において、前記複数の隣接ノード装置の中に送信可能なものがなく、かつ前記受信フレーム識別情報が前記第1の記憶手段に前記フレーム識別情報として記憶されている場合に、前記第1の記憶手段において前記受信フレーム識別情報に対応付けられた前記起源ノード識別情報として記憶される第3の隣接ノード装置へ前記受信フレームを送信するバックトラックステップと、
    を実行させることを特徴とする記憶媒体。
  8. ノード装置が、複数の隣接ノード装置のうち任意の1つへフレームを送信するフレーム送信方法であって、
    前記ノード装置が、
    前記複数の隣接ノード装置のうち任意の1つから前記ノード装置が受信した受信フレームから、前記受信フレームを識別する受信フレーム識別情報を抽出する抽出ステップと、
    送信対象フレームを識別するフレーム識別情報と、前記複数の隣接ノード装置のうちで前記送信対象フレームの送信先である送信先隣接ノード装置を識別する送信先隣接ノード識別情報と、該送信対象フレームを最初に送信してきた前記隣接ノード装置を識別する起源ノード識別情報とを対応付けて記憶する第1の記憶手段に、抽出した前記受信フレーム識別情報が前記フレーム識別情報として記憶されているか否か判断する判断ステップと、
    前記受信フレーム識別情報が前記フレーム識別情報として記憶されていると判断した場合に、フレームの最終宛先に対応付けて前記複数の隣接ノード装置それぞれへの送信可能性を表す送信可能性情報を記憶する第2の記憶手段において、前記受信フレームに指定された最終宛先である受信フレーム宛先に対応付けられて記憶されている前記送信可能性情報を、前記第1の記憶手段に前記受信フレーム識別情報と対応付けられて記憶されている前記送信先隣接ノード識別情報により識別される第1の隣接ノード装置への前記送信可能性が送信不能を示すように、更新する更新ステップと、
    前記受信フレーム宛先に対応付けられて前記第2の記憶手段に記憶されている前記送信可能性情報に基づいて、前記複数の隣接ノード装置の中から、送信可能な第2の隣接ノード装置を選択し、前記第2の隣接ノード装置へ前記受信フレームを送信する送信ステップと、
    前記第2の記憶手段の送信可能性情報において、前記複数の隣接ノード装置の中に送信可能なものがなく、かつ前記受信フレーム識別情報が前記第1の記憶手段に前記フレーム識別情報として記憶されている場合に、前記第1の記憶手段において前記受信フレーム識別情報に対応付けられた前記起源ノード識別情報として記憶される第3の隣接ノード装置へ前記受信フレームを送信するバックトラックステップと、
    を備えることを特徴とするフレーム送信方法。
JP2011524537A 2009-07-27 2009-07-27 ノード装置、記憶媒体およびフレーム送信方法 Expired - Fee Related JP4820464B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2009/003537 WO2011013165A1 (ja) 2009-07-27 2009-07-27 ノード装置、記憶媒体およびフレーム送信方法

Publications (2)

Publication Number Publication Date
JP4820464B2 true JP4820464B2 (ja) 2011-11-24
JPWO2011013165A1 JPWO2011013165A1 (ja) 2013-01-07

Family

ID=43528848

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011524537A Expired - Fee Related JP4820464B2 (ja) 2009-07-27 2009-07-27 ノード装置、記憶媒体およびフレーム送信方法

Country Status (6)

Country Link
US (1) US8929375B2 (ja)
EP (2) EP3054633B1 (ja)
JP (1) JP4820464B2 (ja)
KR (1) KR101301885B1 (ja)
CN (1) CN102415057B (ja)
WO (1) WO2011013165A1 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8792360B2 (en) 2012-04-30 2014-07-29 Fujitsu Limited Duplicate packet suppression
US9628372B2 (en) 2012-03-09 2017-04-18 Fujitsu Limited Data communication apparatus, data communication system, and data communication method

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
RU2502203C2 (ru) * 2009-05-11 2013-12-20 Фудзицу Лимитед Узловое устройство и способ связи
JP5347846B2 (ja) * 2009-08-31 2013-11-20 富士通株式会社 ノード関連情報を収集するシステム、ノード装置、およびフレーム処理方法
WO2011121672A1 (ja) * 2010-03-31 2011-10-06 富士通株式会社 ノード装置およびデータ送信方法
JP5754206B2 (ja) 2011-03-29 2015-07-29 富士通株式会社 アドホックネットワークにおける時刻同期方法および装置
JP5720793B2 (ja) * 2011-09-20 2015-05-20 富士通株式会社 データ転送方法およびそれを用いるノード装置
JP5692404B2 (ja) * 2011-11-01 2015-04-01 富士通株式会社 送信制御方法および送信制御装置
WO2013088498A1 (ja) 2011-12-12 2013-06-20 富士通株式会社 送信制御方法、ノードおよび送信制御プログラム
WO2013094001A1 (ja) 2011-12-19 2013-06-27 富士通株式会社 送信制御方法およびノード
WO2013099026A1 (ja) 2011-12-28 2013-07-04 富士通株式会社 ノード装置および時刻同期方法
US9712559B2 (en) * 2012-05-31 2017-07-18 Red Hat, Inc. Identifying frames
WO2014068616A1 (ja) 2012-10-31 2014-05-08 富士通株式会社 通信制御方法、ネットワークシステム、および通信装置
US9674193B1 (en) 2013-07-30 2017-06-06 Juniper Networks, Inc. Aggregation and disbursement of licenses in distributed networks
US9495378B2 (en) * 2013-08-27 2016-11-15 Purdue Research Foundation Tracing message transmissions between communications network devices
TWI524792B (zh) * 2013-09-27 2016-03-01 財團法人資訊工業策進會 用於車載隨意網路系統的傳輸控制方法以及通訊裝置
JP6264856B2 (ja) 2013-11-18 2018-01-24 富士通株式会社 ノード装置、制御プログラム、無線通信システム、及びデータ通信方法
JP6303426B2 (ja) 2013-11-18 2018-04-04 富士通株式会社 ノード装置、通信システム、通信方法および通信プログラム
US10015720B2 (en) 2014-03-14 2018-07-03 GoTenna, Inc. System and method for digital communication between computing devices
US9641616B2 (en) * 2014-07-10 2017-05-02 Kabushiki Kaisha Toshiba Self-steering point-to-point storage protocol
US20160149685A1 (en) * 2014-11-21 2016-05-26 Samsung Electronics Co., Ltd. Method and apparatus for wireless communication
JP6459558B2 (ja) 2015-01-27 2019-01-30 富士通株式会社 無線通信装置、無線通信方法、および無線通信プログラム
CN106330747B (zh) 2015-06-30 2019-09-13 富士通株式会社 转发目的地选择方法以及通信装置
US11115320B2 (en) * 2017-03-24 2021-09-07 Telefonaktiebolaget Lm Ericsson (Publ) Routing in communication networks
US11341123B2 (en) 2017-06-30 2022-05-24 Nchain Licensing Ag Probabilistic relay for efficient propagation in a blockchain network
US11082324B2 (en) 2018-07-27 2021-08-03 goTenna Inc. Vine: zero-control routing using data packet inspection for wireless mesh networks
WO2020167261A1 (en) * 2019-02-12 2020-08-20 Koc Universitesi A method of qos-constrained semi-persistent scheduling of machine type communications in cellular networks
US11606829B2 (en) * 2019-06-18 2023-03-14 Kyndryl, Inc. Facilitation of data transmission in low connectivity areas
CN110572790B (zh) * 2019-08-19 2022-04-08 湖南九层台环境科技有限公司 一种农村快递小笼读取系统
CN110661550B (zh) * 2019-09-27 2021-08-31 青岛联众芯云科技有限公司 一种hplc通信链路中转发报文的方法、装置、存储介质和电子设备

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001298488A (ja) * 2000-04-14 2001-10-26 Fujitsu Ltd ノード装置
JP2002271399A (ja) * 2001-03-09 2002-09-20 Nec Corp 電話システム及び電話接続監視方法
JP2003273964A (ja) * 2002-03-15 2003-09-26 Ntt Docomo Inc 通信システム、通信制御方法及びルータ
JP2006033275A (ja) * 2004-07-14 2006-02-02 Fujitsu Ltd ループフレーム検知装置およびループフレーム検知方法
JP2006526937A (ja) * 2003-06-05 2006-11-24 メッシュネットワークス インコーポレイテッド アドホック無線通信ネットワークにおける最適なルーティング
JP2006340165A (ja) * 2005-06-03 2006-12-14 Hitachi Communication Technologies Ltd 通信経路切替制御システム及びルータ装置
JP4173842B2 (ja) * 2004-07-02 2008-10-29 富士通株式会社 位置検出装置、送受信方法および送受信プログラム
JP2008306314A (ja) * 2007-06-05 2008-12-18 Panasonic Electric Works Co Ltd マルチホップ通信ネットワークにおける隣接ノード確認方法、マルチホップ通信ネットワークのノード

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04173842A (ja) 1990-11-07 1992-06-22 Nippon Zeon Co Ltd シロキサン複合ラテックスポリマー皮膜の製造方法
US6885937B1 (en) * 1998-12-10 2005-04-26 Tele Atlas North America, Inc. Shortcut generator
US7082531B1 (en) * 2001-11-30 2006-07-25 Cisco Technology, Inc. Method and apparatus for determining enforcement security devices in a network topology
US8018953B1 (en) * 2003-08-20 2011-09-13 Cisco Technology, Inc. Adaptive, deterministic ant routing approach for updating network routing information
JP2005198201A (ja) 2004-01-09 2005-07-21 Ntt Docomo Inc ネットワークトポロジー構成方法及びノード
FR2878674A1 (fr) * 2004-12-01 2006-06-02 France Telecom Procede et systeme d'adaptation dynamique de metrique de qualite de service dans un reseau ad hoc
CN1297551C (zh) * 2005-03-11 2007-01-31 河南省科学院化学研究所 一种生产液体甲基四氢苯酐的方法
US9043487B2 (en) * 2006-04-18 2015-05-26 Cisco Technology, Inc. Dynamically configuring and verifying routing information of broadcast networks using link state protocols in a computer network
WO2008053145A1 (en) * 2006-10-31 2008-05-08 British Telecommunications Public Limited Company Ethernet p-cycle protection scheme
US7583589B2 (en) * 2007-03-15 2009-09-01 Cisco Technology, Inc. Computing repair path information
US7940776B2 (en) * 2007-06-13 2011-05-10 Cisco Technology, Inc. Fast re-routing in distance vector routing protocol networks
US8077602B2 (en) * 2008-02-01 2011-12-13 International Business Machines Corporation Performing dynamic request routing based on broadcast queue depths
US8315158B2 (en) * 2008-05-01 2012-11-20 Siemens Aktiengesellschaft Methods and apparatus for decentralized rapid recovery for Ethernet rings

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001298488A (ja) * 2000-04-14 2001-10-26 Fujitsu Ltd ノード装置
JP2002271399A (ja) * 2001-03-09 2002-09-20 Nec Corp 電話システム及び電話接続監視方法
JP2003273964A (ja) * 2002-03-15 2003-09-26 Ntt Docomo Inc 通信システム、通信制御方法及びルータ
JP2006526937A (ja) * 2003-06-05 2006-11-24 メッシュネットワークス インコーポレイテッド アドホック無線通信ネットワークにおける最適なルーティング
JP4173842B2 (ja) * 2004-07-02 2008-10-29 富士通株式会社 位置検出装置、送受信方法および送受信プログラム
JP2006033275A (ja) * 2004-07-14 2006-02-02 Fujitsu Ltd ループフレーム検知装置およびループフレーム検知方法
JP2006340165A (ja) * 2005-06-03 2006-12-14 Hitachi Communication Technologies Ltd 通信経路切替制御システム及びルータ装置
JP2008306314A (ja) * 2007-06-05 2008-12-18 Panasonic Electric Works Co Ltd マルチホップ通信ネットワークにおける隣接ノード確認方法、マルチホップ通信ネットワークのノード

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9628372B2 (en) 2012-03-09 2017-04-18 Fujitsu Limited Data communication apparatus, data communication system, and data communication method
US8792360B2 (en) 2012-04-30 2014-07-29 Fujitsu Limited Duplicate packet suppression

Also Published As

Publication number Publication date
EP2464060B1 (en) 2016-05-04
WO2011013165A1 (ja) 2011-02-03
US8929375B2 (en) 2015-01-06
CN102415057B (zh) 2014-12-31
US20120106552A1 (en) 2012-05-03
EP2464060A1 (en) 2012-06-13
CN102415057A (zh) 2012-04-11
KR101301885B1 (ko) 2013-08-29
EP2464060A4 (en) 2014-11-05
JPWO2011013165A1 (ja) 2013-01-07
EP3054633A1 (en) 2016-08-10
EP3054633B1 (en) 2017-10-25
KR20120109995A (ko) 2012-10-09

Similar Documents

Publication Publication Date Title
JP4820464B2 (ja) ノード装置、記憶媒体およびフレーム送信方法
JP5408337B2 (ja) ノード装置および迂回経路調査方法
US9608912B2 (en) Computing disjoint paths for reactive routing mesh networks
JP4732972B2 (ja) アドホックネットワーク、ノード、経路制御方法、及び経路制御プログラム
KR101179919B1 (ko) 센서 네트워크에서의 다중 경로 소스 라우팅 방법
CN101534520B (zh) 移动Ad hoc网络可靠路由方法
EP2915294B1 (en) Multiple path availability between walkable clusters
KR100652963B1 (ko) 센서 네트워크에서의 데이터 전송경로 설정방법
JP2012095235A (ja) ノード局および冗長経路制御方法
Heimfarth et al. Using unmanned aerial vehicle to connect disjoint segments of wireless sensor network
JP2008118339A (ja) 無線ネットワークシステム
JP2008160691A (ja) 無線通信システム、無線通信装置、無線通信方法、および、プログラム
KR101555315B1 (ko) 저전력 사물 인터넷 네트워크 관리를 위한 네트워크 관리 데이터 전파 방법 및 저전력 사물 인터넷 노드 장치
CN105072586A (zh) 嵌入式无线自组织网络中对广播消息的转发的管理方法
JP5500246B2 (ja) データ通信装置および方法
CN102573000B (zh) 基于直接/间接矩阵的无线自组织网络保护路由生成方法
JP2013198077A (ja) ネットワーク及びブリッジ
JP5477462B2 (ja) ノード装置およびデータ送信方法
Poonguzharselvi et al. Data forwarding in opportunistic network using mobile traces
Kardoust et al. Introducing a method for improving the performance of routing algorithms in unmanned aeronautical ad-hoc networks
JP4687292B2 (ja) 通信装置及びネットワーク内で不要な無線リンクの切断方法
JP6738851B2 (ja) ネットワークシステム、ネットワークシステムの経路切換方法、および、通信装置
JP2009005183A (ja) 経路決定方法、通信装置およびアドホックネットワーク
CN107612828A (zh) 一种dsr路由协议的改进方法

Legal Events

Date Code Title Description
A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20110816

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: 20110830

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110902

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140909

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4820464

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