(57)【要約】      （修正有）【課題】ネットワークにおけるデータ伝送効率を向上させる。【解決手段】宛先通信装置のIDと当該宛先通信装置へ送信する場合に送信すべき隣接通信装置のIDと当該隣接通信装置への送信の評価値と当該隣接通信装置を経由する場合に宛先通信装置までに必要なhop数とを含む隣接データを格納するルーティングテーブルを、隣接通信装置からの受信packetの宛先通信装置のIDで検索して評価値に基づき隣接データを抽出し、そのhop数がdata packetに含まれるhop数以上であるか判断する工程と、抽出hop数がdata packetに含まれるhop数以上である場合に、data packetの直接の送信元通信装置である隣接元通信装置のIDが送信先通信装置のIDとして指定された異常通知パケットを生成し、送信する工程とを含む。【選択図】図３４
2010212758.tif 000002
【特許請求の範囲】
【請求項１】
宛先通信装置の識別子と当該宛先通信装置へ送信する場合に送信すべき隣接通信装置の識別子と当該隣接通信装置への送信の評価値と当該隣接通信装置を経由する場合に前記宛先通信装置までに必要なホップ数とを含む隣接データを格納するルーティングデータ格納部と、
ある隣接通信装置からデータパケットを受信した場合、当該データパケットに含まれる宛先通信装置の識別子で前記ルーティングデータ格納部を検索して評価値に基づき隣接データを抽出し、当該隣接データに含まれるホップ数が前記データパケットに含まれるホップ数以上であるか判断する手段と、
抽出された前記隣接データに含まれるホップ数が前記データパケットに含まれるホップ数以上である場合に、前記データパケットに含まれる宛先通信装置の識別子及び送信元通信装置の識別子と前記データパケットの識別子とを含み、前記データパケットの直接の送信元通信装置である隣接元通信装置の識別子が送信先通信装置の識別子として指定され且つ前記データパケットの自通信装置以降の送信が不可能であることを通知する異常通知パケットを生成し、前記送信先通信装置に送信する手段と、
を含む通信装置。
【請求項２】
抽出された前記隣接データに含まれるホップ数が前記データパケットに含まれるホップ数未満である場合に、前記データパケットに含まれる前記宛先通信装置の識別子に基づき前記ルーティングデータ格納部から抽出される、評価値が上位所定順位までの隣接データに含まれる隣接通信装置の識別子と、前記データパケットに含まれる前記送信元通信装置の識別子、前記隣接元通信装置の識別子及び前記データパケットの識別子とを、対応付けてデータパケット受信管理データ格納部に格納する手段と、
抽出された前記隣接データのうち前記評価値が最上位の隣接データに含まれる特定の隣接通信装置に対して、前記隣接元通信装置の識別子として前記ある隣接通信装置の識別子の代わりに自通信装置の識別子を含む前記データパケットを生成し、送信する手段と、
前記データパケットの宛先通信装置の識別子及び送信元通信装置の識別子と前記データパケットの識別子とを含み、前記自通信装置の識別子が送信先通信装置の識別子として指定され且つ前記データパケットの前記特定の隣接通信装置以降の送信が不可能であることを通知する異常通知パケットを受信した場合、前記データパケット受信管理データ格納部を前記異常通知パケットに含まれる前記データパケットの送信元通信装置の識別子及び前記データパケットの識別子で検索して該当するレコードを特定し、当該レコードに含まれる隣接通信装置の識別子のうち前記データパケットを送信したことのない隣接通信装置の識別子が存在するか判断する手段と、
前記データパケットを送信したことのない隣接通信装置の識別子が存在しない場合には、特定された前記レコードに含まれる前記隣接元通信装置の識別子を前記自通信装置の識別子の代わりに前記送信先通信装置の識別子として含む前記異常通知パケットを送信する手段と、
をさらに有する請求項１記載の通信装置。
【請求項３】
前記データパケットを送信したことのない隣接通信装置の識別子が存在する場合には、前記ルーティングデータ格納部において、特定された前記レコードに含まれる前記宛先通信装置の識別子及び特定された前記レコードによって特定される前記データパケットを最後に送信した前記隣接通信装置の識別子に対応付けて格納されている評価値を所定レベル評価減となるように設定する手段、
をさらに有する請求項１又は２記載の通信装置。
【請求項４】
宛先通信装置の識別子と当該宛先通信装置へ送信する場合に送信すべき隣接通信装置の識別子と当該隣接通信装置への送信の評価値と当該隣接通信装置を経由する場合に前記宛先通信装置までに必要なホップ数とを含む隣接データを格納するルーティングデータ格納部を、ある隣接通信装置からデータパケットを受信した場合当該データパケットに含まれる宛先通信装置の識別子で検索して評価値に基づき隣接データを抽出し、当該隣接データに含まれるホップ数が前記データパケットに含まれるホップ数以上であるか判断するステップと、
抽出された前記隣接データに含まれるホップ数が前記データパケットに含まれるホップ数以上である場合に、前記データパケットに含まれる宛先通信装置の識別子及び送信元通信装置の識別子と前記データパケットの識別子とを含み、前記データパケットの直接の送信元通信装置である隣接元通信装置の識別子が送信先通信装置の識別子として指定され且つ前記データパケットの自通信装置以降の送信が不可能であることを通知する異常通知パケットを生成し、前記送信先通信装置に送信するステップと、
を含む通信処理方法。
【請求項５】
抽出された前記隣接データに含まれるホップ数が前記データパケットに含まれるホップ数未満である場合に、前記データパケットに含まれる前記宛先通信装置の識別子に基づき前記ルーティングデータ格納部から抽出される、評価値が上位所定順位までの隣接データに含まれる隣接通信装置の識別子と、前記データパケットに含まれる前記送信元通信装置の識別子、前記隣接元通信装置の識別子及び前記データパケットの識別子とを、対応付けてデータパケット受信管理データ格納部に格納するステップと、
抽出された前記隣接データのうち前記評価値が最上位の隣接データに含まれる特定の隣接通信装置に対して、前記隣接元通信装置の識別子として前記ある隣接通信装置の識別子の代わりに自通信装置の識別子を含む前記データパケットを生成し、送信するステップと、
前記データパケットの宛先通信装置の識別子及び送信元通信装置の識別子と前記データパケットの識別子とを含み、前記自通信装置の識別子が送信先通信装置の識別子として指定され且つ前記データパケットの前記特定の隣接通信装置以降の送信が不可能であることを通知する異常通知パケットを受信した場合、前記データパケット受信管理データ格納部を前記異常通知パケットに含まれる前記データパケットの送信元通信装置の識別子及び前記データパケットの識別子で検索して該当するレコードを特定し、当該レコードに含まれる隣接通信装置の識別子のうち前記データパケットを送信したことのない隣接通信装置の識別子が存在するか判断するステップと、
前記データパケットを送信したことのない隣接通信装置の識別子が存在しない場合には、特定された前記レコードに含まれる前記隣接元通信装置の識別子を前記自通信装置の識別子の代わりに前記送信先通信装置の識別子として含む前記異常通知パケットを送信するステップと、
をさらに含む請求項５記載の通信処理方法。
【請求項６】
前記データパケットを送信したことのない隣接通信装置の識別子が存在する場合には、前記ルーティングデータ格納部において、特定された前記レコードに含まれる前記宛先通信装置の識別子及び特定された前記レコードによって特定される前記データパケットを最後に送信した前記隣接通信装置の識別子に対応付けて格納されている評価値を所定レベル評価減となるように設定するステップ
をさらに含む請求項５又は６記載の通信処理方法。
【請求項７】
請求項４乃至６のいずれか１つ記載の通信処理方法をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、通信経路を通信状態に応じて変更するための通信技術に関する。
【背景技術】
【０００２】
例えば、図１に示すように、送信元ノードａから宛先ノードＧＷまでパケットを送信するケースを考える。なお、隣接ノード同士は例えば無線通信によって互いに通信を行い、各隣接ノード間でパケットを転送することによって特定のノード間で通信を行うようなアドホックネットワークを想定する。また、パケットのヘッダには、送信元ノードａによって決定された許容ホップ数が含まれる。許容ホップ数は、このパケットを転送できる限界回数を示しており、１回転送する毎に１デクリメントされる。
【０００３】
この場合、最初に送信元ノードａから、隣接するノードｂにパケットが送信される。パケットを受信したノードｂでは、宛先ノードＧＷへパケットを送信するために、ノードｅの方向にパケットを送信する経路と、ノードｃの方向にパケットを送信する経路とが把握されるが、ここではその時点で有利とされたノードｃにパケットを転送するものとする。ノードｃは、パケットを受信すると、宛先ノードＧＷへパケットを送信するために隣接するノードｄを特定し、パケットを転送する。その後、幾つかのノードを経由してパケットを受信したノードｆでは、宛先ノードＧＷへパケットが到達しないにもかかわらず許容ホップ数が「０」となってしまって初めて、従来技術では本経路が失敗であることが分かる。
【０００４】
この失敗を検出した後、従来技術では、１ステップ前の状態に戻って、他の経路で可能かどうかを１つずつ確認する。すなわち、１ステップ前のノードで、全ての選択肢について可能であるかどうかを試してみて、全ての選択肢で失敗であることが分かると、さらに１ステップ前のノードに戻って、同じような確認を行う。従って、無駄な経路探索を繰り返す可能性がある。図１のような場合には、ノードｂで他の経路であるノードｅの方にパケットを送信すれば宛先ノードＧＷに届くわけであるが、このノードｂに失敗が通知されるまでには相当な時間がかかってしまう。従って、送信元ノードａが多数のパケットを送信する場合には、多数のパケットがノードｂからノードｃへ転送され、多数のパケットについて同じような処理が繰り返され、パケットの伝送効率が非常に悪くなってしまう。また、無線の帯域や処理リソースが浪費されることにもなる。
【０００５】
また、複数の中継点の先にある受信指定先からパケット受信の失敗信号を送信源が得て送信源がパケットを再送信する場合には、送信源まで失敗信号を戻すのは非効率であるため、受信指定先の隣に位置する中継点がパケットを保持して失敗信号を受信したら送信源ではなく、中継点がパケットを送信するという技術は存在している。しかしながら、失敗を検出するタイミングが遅くなれば、多数のパケットを再送しなければならない点は同じである。
【０００６】
さらに、隣接ノード間でデータ受信の成功を通知するパケットとしてＡＣＫパケットが従来から用いられているが、通常ＡＣＫパケットは隣接ノード間でのみやりとりされるので、経路上それらより前のノードには通知されない。従って、ＡＣＫパケットを受信できなかったノードは、そのノードでのみ経路の設定変更を行うが、経路上それより前のノードでは何らの変更も行われない。また、従来から存在するend-to-end ＡＣＫパケットを用いるという手法があるが、このend-to-end ＡＣＫパケットは、パケットの中継経路を遡ることを保障していない。すなわち、パケットを中継した中継ノードでは直接の通信相手が受信に失敗しない限り経路の変更を行うことはない。従って、再度同じ宛先のパケットを受信した場合には、同じ相手に送信してしまい、ネットワーク全体としては無駄なデータ送信が行われることになる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００６−１２１２０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
従って、本技術の目的は、ネットワークにおけるデータ伝送効率を向上させる新規な技術を提供することである。
【課題を解決するための手段】
【０００９】
本通信処理方法は、宛先通信装置の識別子と当該宛先通信装置へ送信する場合に送信すべき隣接通信装置の識別子と当該隣接通信装置への送信の評価値と当該隣接通信装置を経由する場合に宛先通信装置までに必要なホップ数とを含む隣接データを格納するルーティングデータ格納部を、ある隣接通信装置からデータパケットを受信した場合当該データパケットに含まれる宛先通信装置の識別子で検索して評価値に基づき隣接データを抽出し、当該隣接データに含まれるホップ数が上記データパケットに含まれるホップ数以上であるか判断するステップと、抽出された隣接データに含まれるホップ数が上記データパケットに含まれるホップ数以上である場合に、上記データパケットに含まれる宛先通信装置の識別子及び送信元通信装置の識別子と上記データパケットの識別子とを含み、上記データパケットの直接の送信元通信装置である隣接元通信装置の識別子が送信先通信装置の識別子として指定され且つ上記データパケットの自通信装置以降の送信が不可能であることを通知する異常通知パケットを生成し、送信先通信装置に送信するステップとを含む。
【発明の効果】
【００１０】
ネットワークにおけるデータ伝送効率を向上させることができる。
【図面の簡単な説明】
【００１１】
【図１】図１は、従来技術の問題点を説明するための図である。
【図２】図２は、ルーティングテーブルのフォーマット例を示す図である。
【図３】図３は、データ管理テーブルのフォーマット例を示す図である。
【図４】図４は、データパケットのフォーマット例を示す図である。
【図５】図５は、異常通知パケットのフォーマット例を示す図である。
【図６】図６は、ＡＣＫパケットのフォーマット例を示す図である。
【図７】図７は、送信元ノードａから宛先ノードＧＷにデータパケットを送信する際に、ノードｂでノードｃ方向に転送されるケースを示す図である。
【図８】図８は、ノードａからノードｂへ送信されるデータパケットのヘッダを示す図である。
【図９】図９は、ノードｂからノードａへ送信されるＡＣＫパケットを示す図である。
【図１０】図１０は、ノードｂのルーティングテーブルのレコードを示す図である。
【図１１】図１１は、ノードｂのデータ管理テーブルのレコードを示す図である。
【図１２】図１２は、ノードｂからノードｃへ送信されるデータパケットのヘッダを示す図である。
【図１３】図１３は、ノードｃからノードｂへ送信されるＡＣＫパケットを示す図である。
【図１４】図１４は、ノードｃのルーティングテーブルのレコードを示す図である。
【図１５】図１５は、ノードｃのデータ管理テーブルのレコードを示す図である。
【図１６】図１６は、ノードｃからノードｄへ送信されるデータパケットのヘッダを示す図である。
【図１７】図１７は、ノードｄからノードｃへ送信されるＡＣＫパケットを示す図である。
【図１８】図１８は、ノードｄのルーティングテーブルのレコードを示す図である。
【図１９】図１９は、ノードｄから異常通知パケットを送信するケースを示す図である。
【図２０】図２０は、ノードｄからノードｃへ送信される異常通知パケットを示す図である。
【図２１】図２１は、ノードｃからノードｂへ送信される異常通知パケットを示す図である。
【図２２】図２２は、ノードｂにおけるルーティングテーブルの更新を説明するための図である。
【図２３】図２３は、２番目のデータパケットをノードａからノードＧＷへ送信するケースを示す図である。
【図２４】図２４は、ノードａからノードｂへ送信される２番目のデータパケットのヘッダを示す図である。
【図２５】図２５は、ノードｂからノードａへ送信されるＡＣＫパケットを示す図である。
【図２６】図２６は、ノードｂのデータ管理テーブルのレコードを示す図である。
【図２７】図２７は、ノードｂからノードｅへ送信される２番目のデータパケットのヘッダを示す図である。
【図２８】図２８は、ノードｅからノードｂへ送信されるＡＣＫパケットを示す図である。
【図２９】図２９は、ノードｅのルーティングテーブルのレコードを示す図である。
【図３０】図３０は、ノードｅのデータ管理テーブルのレコードを示す図である。
【図３１】図３１は、ノードｅからノードＧＷへ送信されるデータパケットのヘッダを示す図である。
【図３２】図３２は、ノードＧＷからノードｅへ送信されるＡＣＫパケットを示す図である。
【図３３】図３３は、通信装置の機能ブロック図である。
【図３４】図３４は、通信装置のメインの処理フローを示す図である。
【図３５】図３５は、通信装置のメインの処理フローを示す図である。
【図３６】図３６は、データパケットの受信処理の処理フローを示す図である。
【図３７】図３７は、データパケットの受信処理の処理フローを示す図である。
【図３８】図３８は、異常通知パケットの受信処理の処理フローを示す図である。
【図３９】図３９は、ＡＣＫパケットの受信処理の処理フローを示す図である。
【図４０】図４０は、データパケットの再送処理の処理フローを示す図である。
【図４１】図４１は、コンピュータの機能ブロック図である。
【発明を実施するための形態】
【００１２】
［本実施の形態の概要］
本実施の形態では、通信装置である各ノードにおいて図２に示すようなルーティングテーブルを予め保持して管理するものとする。図２の例では、パケットの最終目的地である宛先ノードの識別子（アドレスの場合もある。以下同じ。）と、その宛先ノードに送信する際にパケットを次に送信する相手のノードである隣接先ノードの識別子と、本経路の評価値（本実施の形態では小さい方が評価が高い）と、本経路で宛先ノードまでに必要とされるホップ数とが登録されるようになっている。
【００１３】
また、各ノードにおいて図３に示すようなデータ管理テーブルを保持して管理するものとする。データ管理テーブルのレコードは、他のノードからデータパケットを受信した際に生成され、以下で具体的に述べるタイミングにおいて更新されたり、削除される。図３の例では、データパケットの送信元ノードの識別子と、データパケットの識別子（例えばシリアル番号）であるＦＩＤと、データパケットの宛先ノードの識別子と、データパケットの直接の送信元ノードである隣接元ノードの識別子と、データパケットの送信先候補である第１の隣接ノードの識別子と、当該第１の隣接ノードへデータパケットの送信を行ったか否かを表すフラグＦ１（使用フラグとも呼ぶ。以下同じ。）と、データパケットの送信先候補である第２の隣接ノードの識別子と、当該第２の隣接ノードへデータパケットの送信を行ったか否かを表すフラグＦ２と、データパケットの送信先候補である第３の隣接ノードの識別子と、当該第３の隣接ノードへデータパケットの送信を行ったか否かを表すフラグＦ３と、ＡＣＫパケットが返信されるまでの期限時刻であるＴＴＷ１と、ＡＣＫパケットが返信された後で本レコードを削除するまでの期限時刻であるＴＴＷ２とが含まれる。
【００１４】
また、データパケットのヘッダ・フォーマットを図４に示す。図４の例では、宛先ノードの識別子と、直接の送信元ノードである隣接元ノードの識別子と、直接の送信先ノードである隣接先ノードの識別子と、今後の経路で許容されるホップ数（Ｈｏｐ数）と、データパケットを最初に送信したノードである送信元ノードの識別子と、データパケットの識別子（例えばシリアル番号）であるＦＩＤとを含む。
【００１５】
さらに、異常通知パケットのフォーマットを図５に示す。図５の例では、宛先ノードの識別子と、隣接先ノードの識別子と、送信元ノードの識別子と、データパケットの識別子であるＦＩＤとを含む。
【００１６】
また、ＡＣＫパケットのフォーマットを図６に示す。図６の例では、宛先ノードの識別子と、隣接先ノードの識別子と、送信元ノードの識別子と、データパケットの識別子であるＦＩＤとを含む。
【００１７】
このような前提の下、例えば図７のようなネットワークにおいて、送信元ノードａから宛先ノードＧＷへデータパケットを送信する際の処理についてその概要を説明する。図７では、ノードａ乃至ｅとノードＧＷとを含むネットワークが構築されている。但し、図７で概略が示されているように、ノードａからノードｂ、ノードｂからノードｃとノードｅ、ノードｅからノードＧＷ、ノードｃからノードｄに経路が設定されているものとする。
【００１８】
まず、送信元ノードａは、図８に示すようなヘッダを有するデータパケットをノードｂに送信する（ステップ（１））。図８のデータパケットでは、宛先ノードの識別子は「ＧＷ」であり、隣接元ノードの識別子は「ａ」であり、隣接先ノードの識別子は「ｂ」であり、ホップ数は「４」であり、送信元ノードの識別子は「ａ」であり、ＦＩＤは「１」である。ノードｂは、このようなデータパケットを受信できれば、図９に示すようなＡＣＫパケットを送信元ノードａへ返信する（ステップ（２））。図９のＡＣＫパケットでは、宛先ノードの識別子は「ＧＷ」であり、隣接先ノードの識別子は「ａ」であり、送信元ノードの識別子は「ａ」であり、ＦＩＤは「１」である。これによって送信元ノードａは、どのデータパケットについてのＡＣＫパケットであるかを特定できる。
【００１９】
次に、ノードｂは、自身のルーティングテーブルに基づき、データパケットの転送先である隣接先ノードの識別子を特定する。具体的には、宛先ノードの識別子「ＧＷ」でルーティングテーブルを検索すると、図１０に示すような２つのレコードが抽出される。すなわち、隣接先ノードが「ｅ」のレコードと、隣接先ノードが「ｃ」のレコードとが得られる。本実施の形態では、評価値が最小のレコードを採用する。具体的には、隣接先ノードとしてはノード「ｃ」が選択される。ここでホップ数が足りるかを確認する。具体的に、ノードｃの場合に、さらに必要なホップ数は「４」であって、受信したデータパケットのホップ数が「４」であるから、ノードｃにデータパケットを送信することができる。
【００２０】
ノードｂは、さらにデータ管理テーブルに図１１に示すようなレコードを登録する。本レコードは、送信元ノードの識別子として「ａ」と、データパケットの識別子ＦＩＤとして「１」と、宛先ノードの識別子として「ＧＷ」と、隣接元ノードの識別子として「ａ」と、第１の隣接ノードの識別子として「ｃ」と、第１の隣接ノードについてのフラグＦ１として「１」と、第２の隣接ノードの識別子として「ｅ」と、第２の隣接ノードについてのフラグＦ２として「０」とが登録されている。送信元ノードの識別子から隣接元ノードの識別子まではデータパケットのデータのコピーであり、第１及び第２の隣接ノードの識別子についてはルーティングテーブルから抽出されたデータである。なお、ＴＴＷ１及びＴＴＷ２については省略している。
【００２１】
次に、ノードｂは、ノードｃに、図１２に示すようなヘッダを有するデータパケットを送信する（ステップ（３））。図８のデータパケットのヘッダから図１２のデータパケットのヘッダへは、隣接元ノードの識別子が「ａ」から「ｂ」に、隣接先ノードの識別子が「ｂ」から「ｃ」に、ホップ数が「４」から「３」に変更されている。
【００２２】
これに対して、ノードｃは、ノードｂに対して、図１３に示すようなＡＣＫパケットを送信する（ステップ（４））。ＡＣＫパケットは、どのデータパケットについてのＡＣＫパケットであるかを特定するために、宛先ノードの識別子「ＧＷ」と、送信元ノードの識別子「ａ」と、データパケットのＦＩＤ「１」とを含み、さらにＡＣＫパケットの直接の送信先である隣接先ノードの識別子「ｂ」を含む。
【００２３】
次に、ノードｃは、自身のルーティングテーブルに基づき、データパケットの転送先である隣接先ノードの識別子を特定する。具体的には、宛先ノードの識別子「ＧＷ」でルーティングテーブルを検索すると、図１４に示すようなレコードが抽出される。すなわち、隣接先ノードが「ｄ」のレコードが得られる。１レコードしか抽出されなければ、そのレコードの隣接先ノードを選択する。また、その隣接先ノードｄに送信した時に必要なホップ数「３」と、受信したデータパケットのホップ数「３」とを比較すると、必要なホップ数「３」＝許容ホップ数「３」であるから、本データパケットを隣接先ノードｄに送信することができる。
【００２４】
そうすると、ノードｃは、データ管理テーブルに、図１５に示すようなレコードを登録する。本レコードは、送信元ノードの識別子として「ａ」と、データパケットの識別子ＦＩＤとして「１」と、宛先ノードの識別子として「ＧＷ」と、隣接元ノードの識別子として「ｂ」と、第１の隣接ノードの識別子として「ｄ」と、第１の隣接ノードについてのフラグＦ１として「１」とが登録されている。送信元ノードの識別子から隣接元ノードの識別子まではデータパケットのデータのコピーであり、第１の隣接ノードの識別子についてはルーティングテーブルから抽出されたデータである。なお、ＴＴＷ１及びＴＴＷ２については省略している。
【００２５】
そして、ノードｃは、ノードｄに、図１６に示すようなヘッダを有するデータパケットを送信する（ステップ（５））。図１２のデータパケットのヘッダから図１６のデータパケットのヘッダへは、隣接元ノードの識別子が「ｂ」から「ｃ」に、隣接先ノードの識別子が「ｃ」から「ｄ」に、ホップ数が「３」から「２」に変更されている。
【００２６】
これに対して、ノードｄは、ノードｃに対して、図１７に示すようなＡＣＫパケットを送信する（ステップ（６））。ＡＣＫパケットは、どのデータパケットについてのＡＣＫパケットであるかを特定するために、宛先ノードの識別子「ＧＷ」と、送信元ノードの識別子「ａ」と、データパケットのＦＩＤ「１」とを含み、さらにＡＣＫパケットの直接の送信先である隣接先ノードの識別子「ｃ」を含む。
【００２７】
次に、ノードｄは、自身のルーティングテーブルに基づき、データパケットの転送先である隣接先ノードの識別子を特定する。具体的には、宛先ノードの識別子「ＧＷ」でルーティングテーブルを検索すると、図１８に示すようなレコードが抽出される。すなわち、隣接先ノードが「ｆ」のレコードが得られる。１レコードしか抽出されなければ、そのレコードの隣接先ノードを選択する。また、その隣接先ノードｆに送信した時に必要なホップ数「３」と、受信したデータパケットの許容ホップ数「２」とを比較すると、必要なホップ数「３」＞許容ホップ数「２」であるから、本データパケットを隣接先ノードｆに送信することができないことが分かる。すなわちノードｄが異常検知ノードとなる。
【００２８】
これ以降の処理については図１９に沿って説明する。具体的には、ノードｄは、図１６に示したデータパケットのヘッダから図２０に示すような異常通知パケットを生成して、ノードｃに送信する（ステップ（７））。図２０の異常通知パケットは、データパケットの宛先ノードの識別子「ＧＷ」と、データパケットの送信元ノードの識別子「ａ」と、データパケットの識別子ＦＩＤ「１」とによりデータパケットを特定すると共に、データパケットの直接の送信元ノードの識別子であって且つ異常通知パケットの送信先ノードの識別子である隣接先ノードの識別子「ｃ」が含まれる。
【００２９】
ノードｃは、ノードｄから異常通知パケットを受信すると、データ管理テーブルを、異常通知パケットに含まれる、データパケットの送信元ノードの識別子「ａ」とデータパケットの識別子ＦＩＤ「１」で検索して、該当レコード（図１５）を特定する。そして、特定されたレコードに、使用フラグが「０」である隣接ノードが存在するか判断するが、図１５の例では存在しないので、異常通知パケットを転送する。具体的には、図２１のような異常通知パケットを生成して、ノードｂに送信する（ステップ（８））。図２１の異常通知パケットは、図２０と比較すると、隣接先ノードの識別子が「ｃ」から「ｂ」に変更されている部分以外は同じである。
【００３０】
ここで、ノードｂは、ノードｃから異常通知パケットを受信すると、データ管理テーブルを、異常通知パケットに含まれる、データパケットの送信元ノードの識別子「ａ」とデータパケットの識別子ＦＩＤ「１」で検索して、該当レコード（図１１）を特定する。そして、特定されたレコードに、使用フラグが「０」である隣接ノードが存在するか判断するが、隣接ノード「ｅ」についての使用フラグＦ２が「０」となっていることが特定される。そうすると、ノードｂは、ルーティングテーブルを、宛先ノードの識別子「ＧＷ」と使用フラグが「１」となっている隣接ノードの識別子「ｃ」で検索して、該当するレコードを特定すると共に、当該レコードにおける評価値に例えば「１０」を足して、宛先ノード「ＧＷ」について隣接ノード「ｃ」が選択されにくくする。この処理によって、図２２のようなルーティングテーブルが得られる。隣接ノード「ｃ」についての評価値が「３」から「１３」となって、隣接ノード「ｅ」についての評価値「４」よりも大きくなって、次回は隣接ノード「ｅ」の方が優先されるようになる。
【００３１】
ノードｂは、ここでステップ（１）で受信しステップ（３）で送信したデータパケットについての処理を終了する。すなわち、ノードｂでは、同じ宛先へのデータパケットを受信したとしても異なる経路に転送できる可能性があるので、異常通知パケットを転送することなく、次に受信したデータパケットから異なる経路に転送するようにする。なお、今回のデータパケット、すなわちＦＩＤが「１」のパケットについては、宛先ノード「ＧＷ」には到達しないが、他の手段によって例えば宛先ノード「ＧＷ」から未達パケットの通知を受けた際に、これから述べる新たな経路で送信し直すものとする。
【００３２】
この後、ＦＩＤが「２」であるデータパケットを送信する際の処理については図２３に沿って説明する。ノードａは、図２４に示すようなヘッダを含むデータパケットを、ノードｂに対して送信する（ステップ（１０））。図２４に示したデータパケットのヘッダは、ＦＩＤが「２」であること以外はステップ（１）で送信したデータパケットのヘッダと同じである。
【００３３】
ノードｂは、ノードａからデータパケットを受信すると、当該データパケットに対して図２５に示すようなＡＣＫパケットをノードａに返信する（ステップ（１１））。図２５のＡＣＫパケットは、データパケットの宛先ノードの識別子「ＧＷ」と、データパケットの送信元ノードの識別子「ａ」と、データパケットの識別子ＦＩＤ「２」と、ＡＣＫパケットの直接の送信先ノードの識別子である隣接先ノードの識別子「ａ」とを含む。
【００３４】
さらに、ノードｂは、データパケットに含まれる宛先ノードの識別子「ＧＷ」でルーティングテーブルを検索して、該当するレコードを抽出する。具体的には、図２２に示すようなレコードが抽出される。上で述べたように、隣接先ノード「ｅ」についてのレコードと、隣接先ノード「ｃ」についてのレコードとが抽出されるが、評価値は最初のデータパケット送信時とは異なり、隣接先ノード「ｅ」の方が評価値が低い値となり優先度が上がっている。隣接先ノード「ｅ」のレコードを選択して、そのホップ数「２」と、受信したデータパケットの許容ホップ数「４」と比較すると、隣接先ノード「ｅ」にデータパケットを送信しても問題ない。従って、今回のデータパケットの隣接先ノードを「ｅ」として特定する。
【００３５】
さらに、ノードｂは、受信したデータパケットと、ルーティングテーブルから抽出されたレコードとから、データ管理テーブルに図２６に示すようなレコードを登録する。図２６の例では、データパケットの送信元ノードの識別子「ａ」と、データパケットの識別子ＦＩＤ「２」と、データパケットの宛先ノードの識別子「ＧＷ」と、データパケットの直接の送信元ノードである隣接元ノードの識別子「ａ」と、第１の隣接ノードの識別子「ｅ」と、第１の隣接ノードについてのフラグＦ１「１」と、第２の隣接ノードの識別子「ｃ」と、第２の隣接ノードについてのフラグＦ２「０」とが含まれる。１回目のデータパケットについてのレコード（図１２）と比較すると、ＦＩＤが異なっている点だけではなく、第１の隣接ノードと第２の隣接ノードの順番が入れ替わっている。これは、隣接ノード「ｃ」についての評価値が増加させられて優先度が低くなったためである。
【００３６】
その後、ノードｂは、受信データパケットのヘッダを、図２７に示すようなヘッダに変更した上で、ノードｅに送信する（ステップ（１２））。図２７の例では、図２４のデータパケットのヘッダから、隣接元ノードの識別子が「ａ」から「ｂ」に、隣接先ノードの識別子が「ｂ」から「ｅ」に、ホップ数が「４」から「３」に変更されている。
【００３７】
ノードｅは、ノードｂからデータパケットを受信すると、図２８に示すようなＡＣＫパケットを返信する（ステップ（１３））。図２８の例では、データパケットの宛先ノードの識別子「ＧＷ」と、データパケットの送信元ノードの識別子「ａ」と、データパケットの識別子ＦＩＤ「２」と、ＡＣＫパケットの直接の送信先ノードの識別子である隣接先ノードの識別子「ｂ」とを含む。
【００３８】
ノードｅは、ルーティングテーブルを、データパケットの宛先ノードの識別子「ＧＷ」で検索して該当レコードを抽出する。例えば図２９のようなレコードが抽出される。ここでは、隣接先ノードの識別子も宛先ノードの識別子もノード「ＧＷ」であるレコードのみが抽出されたものとする。そしてこのレコードのホップ数は「１」であり、データパケットの許容ホップ数「３」と比較すると、隣接先ノード「ＧＷ」に送信できることが分かる。
【００３９】
そうすると、ノードｅは、受信データパケットと、ルーティングテーブルからの抽出レコードとから、データ管理テーブルに図３０に示すようなレコードを登録する。図３０の例では、データパケットの送信元ノードの識別子「ａ」と、データパケットの識別子ＦＩＤ「２」と、データパケットの宛先ノードの識別子「ＧＷ」と、データパケットの直接の送信元ノードである隣接元ノードの識別子「ｂ」と、第１の隣接ノードの識別子「ＧＷ」と、第１の隣接ノードについてのフラグＦ１「１」とが含まれる。
【００４０】
そして、ノードｅは、図３１に示すようなヘッダを含むデータパケットを、宛先ノードＧＷに送信する（ステップ（１４））。図３１の例では、図２７のデータパケットのヘッダから、隣接元ノードの識別子が「ｂ」から「ｅ」に、隣接先ノードの識別子が「ｅ」から「ＧＷ」に、ホップ数が「３」から「２」に変更されている。
【００４１】
これに対して、ノードＧＷは、ノードｅからデータパケットを受信すると、図３２に示すようなＡＣＫパケットを返信する（ステップ（１５））。図３２の例では、データパケットの宛先ノードの識別子「ＧＷ」と、データパケットの送信元ノードの識別子「ａ」と、データパケットの識別子ＦＩＤ「２」と、ＡＣＫパケットの直接の送信先ノードの識別子である隣接先ノードの識別子「ｅ」とを含む。
【００４２】
このような処理を実施することによって、ホップ数で早期にデータパケットの宛先ノードへの未達を検出して、このような異常の検出に応じて経路を遡るように異常通知パケットを送信する。そして、この異常通知パケットを、異なる経路を採用できる異常開始ノードまで転送して、当該異常開始ノードは、次回のデータパケットの伝送のために、問題が発生した経路を採用しないようにルーティングテーブルの該当レコードの評価値を変更する。このようにして早期に無駄なデータパケットの伝送を中止して同じ経路を採用しないようにするため、例えばアドホックネットワークにおけるデータ伝送効率を高めることができるようになる。
【００４３】
［通信装置の構成及び動作の具体例］
上で述べたような処理を実施するために、各ノードとなる通信装置は、図３３に示すような構成を有する。通信装置１００は、例えば無線で他の通信装置と通信を行う通信部１１０と、半導体メモリやＨＤＤ（ハードディスクドライブ）などの記憶部１２０と、記憶部１２０に格納されているデータを用いて通信装置１００の制御を行う制御部１３０とを有する。記憶部１２０は、上で述べたルーティングテーブル１２１と、同じく上で述べたデータ管理テーブル１２２とを格納する。そのほか、記憶部１２０は、受信した各種パケットを一旦格納するパケットバッファとしても機能する。また、制御部１３０は、例えば以下で述べるような機能を実施させるためのプログラムと当該プログラムを実行するプロセッサとの組み合わせにて実現され、パケットタイプ判定部１３１と、異常検出部１３２と、異常通知パケット処理部１３３と、ルーティングテーブル更新部１３４と、データ管理テーブル更新部１３６と、データパケット処理部１３７と、ＡＣＫパケット処理部１３８とを有する。
【００４４】
次に、図３４乃至図４０を用いて、通信装置１００の処理内容について説明する。制御部１３０の例えばパケットタイプ判定部１３１は、通信部１１０からパケット受信の通知を受け取ったか判断する（ステップＳ１）。パケット受信がなければ待機する。パケットを受信していれば、パケットタイプ判定部１３１は、受信パケットが異常通知パケットであるか判断する（ステップＳ３）。異常通知パケットであれば、データ管理テーブル更新部１３６等によって異常通知パケットの受信処理を実施する（ステップＳ５）。異常通知パケットの受信処理については後に詳細に述べる。そして、ステップＳ１７に移行する。
【００４５】
一方、受信パケットが異常通知パケットでなければ、パケットタイプ判定部１３１は、受信パケットがデータパケットであるか判断する（ステップＳ７）。データパケットであれば、データパケット処理部１３７等がデータパケットの受信処理を実施する（ステップＳ９）。データパケットの受信処理については後に詳細に述べる。そして、ステップＳ１７に移行する。
【００４６】
さらに、受信パケットがデータパケットでなければ、パケットタイプ判定部１３１は、受信パケットがＡＣＫパケットであるか判断する（ステップＳ１１）。ＡＣＫパケットであれば、データ管理テーブル更新部１３６等がＡＣＫパケットの受信処理を実施する（ステップＳ１３）。ＡＣＫパケットの受信処理については後に詳細に述べる。そして、ステップＳ１３に移行する。
【００４７】
さらに、受信パケットがＡＣＫパケットでない場合には、例えば他の制御パケットであって、制御部１３０が当該制御パケットに対する従来の処理を実施し（ステップＳ１５）、ステップＳ１７に移行する。
【００４８】
ステップＳ１７では、制御部１３０はユーザからの指示などに応じて処理終了であるかを判断し、処理終了でなければステップＳ１に戻る。処理終了であれば、ここで処理を終了する。
【００４９】
また、図３４とは別スレッドで、図３５の処理も実施される。データ管理テーブル更新部１３６は、時計から現時刻を取得して、データ管理テーブル１２２中にＴＴＷ１が現時刻と一致するレコードが存在するか判断する（ステップＳ２１）。データ管理テーブル１２２中にＴＴＷ１が現時刻と一致するレコードが存在する場合には、データ管理テーブル更新部１３６及びデータパケット処理部１３７等は、各レコードについてデータパケットの再送処理を実施する（ステップＳ２３）。データパケットの再送処理については後に詳細に述べる。そしてステップＳ２５に移行する。
【００５０】
一方、ステップＳ２３の後、又はデータ管理テーブル１２２中にＴＴＷ１が現時刻と一致するレコードが存在しない場合には、データ管理テーブル更新部１３６は、データ管理テーブル１２２中にＴＴＷ２が現時刻と一致するレコードが存在するか判断する（ステップＳ２５）。データ管理テーブル１２２中にＴＴＷ２が現時刻と一致するレコードが存在する場合には、データ管理テーブル更新部１３６は、該当レコードをデータ管理テーブル１２２から削除する（ステップＳ２７）。そしてステップＳ２９に移行する。
【００５１】
一方、データ管理テーブル１２２中にＴＴＷ２が現時刻と一致するレコードが存在しない場合、又はステップＳ２７の後に、データ管理テーブル更新部１３６は、処理終了であるか判断し（ステップＳ２９）、処理終了でなければステップＳ２１に戻る。一方、処理終了であれば、この時点で処理を終了する。
【００５２】
次に、図３６及び図３７を用いてデータパケットの受信処理について説明する。データパケット処理部１３７は、受信データパケットの宛先ノードが自ノードであるか判断する（ステップＳ３１）。受信データパケットの宛先ノードが自ノードである場合には、制御部１３０は、受信データパケットを通常どおり処理する（ステップＳ３３）。この処理については従来と同じであるので元の処理に戻る。
【００５３】
一方、受信データパケットの宛先ノードが自ノードでない場合には、データパケット処理部１３７は、ＡＣＫパケット処理部１３８に指示を出し、受信したデータパケットの送信元ノードの識別子及びデータパケットの識別子ＦＩＤを含み、さらに受信データパケットに含まれる隣接元ノードの識別子を隣接先ノードの識別子として含むＡＣＫパケットを生成させ、当該ＡＣＫパケットを通信部１１０に送信させる（ステップＳ３５）。
【００５４】
また、データパケット処理部１３７は、異常検出部１３２に指示を出し、受信データパケットの宛先ノードの識別子をキーとしてルーティングテーブル１２１を検索させ、一致するレコードのうち評価値が最も低い（優先度が最も高い）レコードを選択させる（ステップＳ３７）。そして、異常検出部１３２は、データパケットに含まれる許容ホップ数が、抽出されたレコードのホップ数より小さいか判断する（ステップＳ３９）。この条件を満たす場合には、これ以上データパケットを送信してもデータパケットに規定されている許容ホップ数の条件を満たして宛先ノードに当該データパケットを到達させることはできない。すなわち、異常検出部１３２は、この条件を満たした場合には異常を検出したとして、受信データパケットに含まれる宛先ノードの識別子、送信元ノードの識別子及びデータパケットの識別子ＦＩＤを含み、さらに隣接元ノードの識別子を隣接先ノードの識別子として含む異常通知パケットを生成し、当該異常通知パケットを通信部１１０に送信させる（ステップＳ４１）。そして処理を終了する。
【００５５】
一方、許容ホップ数が、抽出されたレコードのホップ数以上であれば、端子Ａを介して図３７の処理に移行する。
【００５６】
図３７の処理の説明に移行して、データパケット処理部１３７は、データ管理テーブル更新部１３６に指示を出し、データ管理テーブル１２２中に新たなレコードを生成し、受信データパケットに含まれる宛先ノードの識別子、送信元ノードの識別子、データパケットの識別子ＦＩＤ及び隣接元ノードの識別子をコピーして登録させる（ステップＳ４３）。さらに、データ管理テーブル更新部１３６は、ルーティングテーブル１２１を受信データパケットの宛先ノードの識別子をキーとして検索し、一致するレコードのうち評価値が上位ｎ番目までのレコードの隣接ノードの識別子を、順番にステップＳ４３で生成したレコードの隣接ノードとして登録すると共に、評価値が最上位のレコードについての隣接ノードのためのフラグＦ１を「１」にセットする（ステップＳ４５）。また、データ管理テーブル更新部１３６は、生成レコードにおけるＴＴＷ１を現時刻の所定時間後に設定し、登録する（ステップＳ４７）。
【００５７】
なお、所定時間は、ＡＣＫパケットが返信されてくるまでの時間を想定して十分な余裕をもって定めるものとする。
【００５８】
さらに、データパケット処理部１３７は、受信データパケットに含まれる宛先ノードの識別子、送信元ノードの識別子、データパケットの識別子ＦＩＤ及び（許容ホップ数−１）を含み、さらに現ノードの識別子を隣接元として、また生成レコード中評価値が最上位であるので第１の隣接ノード（すなわち「隣接１」）として登録されているノードの識別子を隣接先ノードの識別子としてヘッダに含む送信用データパケットを生成し、通信部１１０に送信させる（ステップＳ４９）。そして元の処理に戻る。
【００５９】
このように、データパケットを転送できなければ異常通知パケットを、データパケットの直接の送信元に返信すると共に、データパケットを転送できれば、データパケットの再送処理又は異常通知パケットを受信する際に用いるためにデータ管理テーブル１２２にレコードを生成・登録している。
【００６０】
次に、異常通知パケットの受信処理について図３８を用いて説明する。異常通知パケット処理部１３３は、データ管理テーブル１２２を、異常通知パケットに含まれる送信元ノードの識別子とＦＩＤとで検索して、該当するレコードを抽出する（ステップＳ５１）。そして、抽出レコードに使用フラグＦが「０」である隣接ノードが存在しているか判断する（ステップＳ５３）。すなわち、抽出レコードに係るデータパケットを送信したことのない隣接ノードが存在しているか判断する。
【００６１】
抽出レコードに使用フラグＦが「０」である隣接ノードが存在していない場合には、自ノードに、抽出レコードに係るデータパケットと同じ宛先ノードを指定したデータパケットを送信されても、宛先ノードに到達しないということである。従って、異常通知パケットを、経路を遡って通知する必要がある。そこで、異常通知パケット処理部１３３は、受信した異常通知パケットに含まれる、データパケットの送信元ノードの識別子、データパケットの識別子ＦＩＤ及び宛先ノードの識別子を含み、さらに抽出レコードの隣接元ノードの識別子を隣接先ノードの識別子として含む異常通知パケットを生成し、通信部１１０に送信させる（ステップＳ６１）。そして元の処理に戻る。
【００６２】
一方、抽出レコードに使用フラグＦが「０」である隣接ノードが存在している場合には、異常通知パケット処理部１３３は、ルーティングテーブル更新部１３４に指示を出力し、ルーティングテーブル更新部１３４は、抽出レコード中使用フラグが「１」となっている隣接ノードのうち優先度が最下位の隣接ノードである現隣接ノードを抽出する（ステップＳ５５）。例えば３つの隣接ノードがステップＳ４５で登録され、最上位の「隣接１」の隣接ノードにデータパケットを送信した後である場合には、「隣接１」の隣接ノードが現隣接ノードである。一方、以下で述べるようにデータパケットの再送処理を行った場合には、「隣接２」の隣接ノードにもデータパケットを送信している可能性がある。このような場合には、「隣接２」の隣接ノードが現隣接ノードとなる。
【００６３】
さらに、ルーティングテーブル更新部１３４は、ルーティングテーブル１２１を抽出レコードの宛先ノードの識別子で検索して該当レコードを抽出すると共に、現隣接ノードの識別子と同じ隣接先ノードの識別子を含むレコードを特定する（ステップＳ５７）。そして、特定レコード中の評価値を一定量増加するように更新してルーティングテーブル１２１に登録する（ステップＳ５９）。本実施の形態では、評価値は小さいほど優先されるので、一定量増加させることによって優先度を下げる。すなわち、現隣接ノードを直接の選択先として選択しないように設定する。一定量は、通常の評価値の最低値を最大値よりも大きくさせるのに十分な値とする。これによって今回の隣接ノードについての評価値が最下位となる。
【００６４】
また、異常通知パケットについては、経路上遡って転送することはしない。これは、ステップＳ５１で抽出されたレコードに係るデータパケットをまだ送信したことのない隣接ノードが存在しており、その隣接ノードに送信すればデータパケットが宛先ノードに到達する可能性があるためである。そして元の処理に戻る。
【００６５】
このような処理を実施すれば、同じ宛先ノードについてのデータパケットを受け取っても当該宛先ノードに到達させることができない場合には、自ノードに同じ宛先ノードについてのデータパケットを送ってこないようにするために異常通知パケットを送信し、同じ宛先ノードについてのデータパケットを当該宛先ノードに到達させることができる場合には、ルーティングテーブルを更新して経路選択の際に異なる選択を行うように設定する。
【００６６】
次に図３９を用いてＡＣＫパケットの受信処理について説明する。データ管理テーブル更新部１３６は、ＡＣＫパケットからＦＩＤ及び送信元ノードの識別子を抽出する（ステップＳ７１）。また、データ管理テーブル１２２を、抽出ＦＩＤ及び送信元ノードの識別子で検索して、該当レコードを抽出する（ステップＳ７３）。そして、抽出レコードのＴＴＷ２を一定時間後に設定して登録する（ステップＳ７５）。この一定時間については、例えばデータパケットの伝送に係る時間の数倍とする。これによって異常通知パケットが異常開始ノードまで転送されるまでの間、本レコードがデータ管理テーブル１２２に残るようになる。そして元の処理に戻る。
【００６７】
なお、上で述べたようにＴＴＷ２は、抽出レコードを削除するタイミングを規定するものであり、ステップＳ２５で用いられる。
【００６８】
次に図４０を用いてデータパケットの再送処理を説明する。データ管理テーブル更新部１３６は、データ管理テーブルの該当レコード（ステップＳ２１で特定されたレコード）に使用フラグが「０」の隣接ノードが存在するか判断する（ステップＳ８１）。該当レコードに使用フラグが「０」の隣接ノードが存在しない場合には、データパケットを送信する先がないので、該当レコードをデータ管理テーブル１２２から削除する（ステップＳ８３）。すなわち、データパケットの転送も終了する。そして元の処理に戻る。
【００６９】
一方、該当レコードに使用フラグが「０」の隣接ノードが存在する場合には、データ管理テーブル更新部１３６は、使用フラグが「０」の隣接ノードのうち優先度最上位のものを選択し、使用フラグを「１」に設定する（ステップＳ８５）。さらに、該当レコードのＴＴＷ１を一定時間後に設定する（ステップＳ８７）。ＡＣＫパケットを受信できなければ、再度データパケットを送信する場合もあるためである。
【００７０】
そして、データ管理テーブル更新部１３６は、データパケット処理部１３７に指示を出力し、データパケット処理部１３７は、該当レコードに含まれる宛先ノードの識別子、送信元ノードの識別子及びＦＩＤを含み、さらに自ノードの識別子を隣接元ノードの識別子として含み、且つステップＳ８５で選択された隣接ノードの識別子を隣接先ノードの識別子として含む送信用データパケットを生成し、通信部１１０に送信させる（ステップＳ８９）。そして元の処理に戻る。
【００７１】
このように、データパケットを送信したにもかかわらずＡＣＫパケットが返ってこないような場合には、送信可能な送信先ノードが他にあればその送信先ノードにデータパケットを再送し、送信可能な送信先ノードが存在しなければ処理を終了する。上では述べていないが、ＡＣＫパケットを返してこないノードについての評価値を優先度を下げるように変更するようにしても良い。
【００７２】
以上本技術の実施の形態を説明したが、本実施の形態はこれに限定されるものではない。例えば、図３３に示した機能ブロック図は一例であって、必ずしも実際の構成と一致しない場合もある。例えば、制御部１３０の機能構成が実際のプログラムモジュール構成や部品構成と一致しない場合もある。
【００７３】
さらに、処理フローについても処理結果が変わらない限りにおいて変更可能である。例えば、処理を並列実行したり、順番を入れ替えたりすることができる。
【００７４】
また、上の例ではルーティングテーブル１２１における評価値のみをベースに隣接ノードを選択するようにしているが、評価値とホップ数を総合的に評価して隣接ノードを選択するようにしても良い。
【００７５】
さらに、上の例ではデータ管理テーブル１２２に、ｎ個の隣接ノードの識別子を登録する例を示したが、必ずしも複数の隣接ノードの識別子を登録する必要はない。具体的には、データパケットの再送処理においては、その都度ルーティングテーブル１２１から使用可能な隣接ノードを抽出するようにしても良い。但し、ＡＣＫパケットを受信しなかった隣接ノードについては、評価値を優先度を下げるように変更する必要がある。また、異常通知パケットを受信した場合には、実際には隣接ノードを用いることはないので、例えば他に使用可能な隣接ノードが存在していることのみデータ管理テーブル１２２に登録しておくだけでも良い。
【００７６】
また、上で述べた例ではアドホックネットワークを構築した際の通信装置で上記のような処理を実施する例を示したが、他のネットワークにおいても有効な場合がある。
【００７７】
さらに、通信装置は、携帯電話機であってもよいし、パーソナルコンピュータ等の携帯端末装置であってもよい。
【００７８】
なお、上で述べた通信装置１００は、コンピュータ装置であれば、図４１に示すように、メモリ２５０１とＣＰＵ２５０３とハードディスク・ドライブ（ＨＤＤ）２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７とがバス２５１９で接続されている。オペレーティング・システム（ＯＳ：Operating System）及び本実施例における処理を実施するためのアプリケーション・プログラムは、ＨＤＤ２５０５に格納されており、ＣＰＵ２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。必要に応じてＣＰＵ２５０３は、表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、必要な動作を行わせる。また、処理途中のデータについては、メモリ２５０１に格納され、必要があればＨＤＤ２５０５に格納される。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク２５１１に格納されて頒布され、ドライブ装置２５１３からＨＤＤ２５０５にインストールされる。インターネットなどのネットワーク及び通信制御部２５１７を経由して、ＨＤＤ２５０５にインストールされる場合もある。このようなコンピュータ装置は、上で述べたＣＰＵ２５０３、メモリ２５０１などのハードウエアとＯＳ及び必要なアプリケーション・プログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【００７９】
通信装置１００は、ハードディスク・ドライブ２５０５やドライブ装置２５１３を有しない場合もあるが、代わりにＳＳＤ（Solid State Disk）その他のフラッシュメモリを有している場合もある。
【００８０】
以上本実施の形態をまとめると以下のようになる。
【００８１】
本通信処理方法は、宛先通信装置の識別子と当該宛先通信装置へ送信する場合に送信すべき隣接通信装置の識別子と当該隣接通信装置への送信の評価値と当該隣接通信装置を経由する場合に宛先通信装置までに必要なホップ数とを含む隣接データを格納するルーティングデータ格納部を、ある隣接通信装置からデータパケットを受信した場合当該データパケットに含まれる宛先通信装置の識別子で検索して評価値に基づき隣接データを抽出し、当該隣接データに含まれるホップ数が上記データパケットに含まれるホップ数以上であるか判断するステップと、抽出された隣接データに含まれるホップ数が上記データパケットに含まれるホップ数以上である場合に、上記データパケットに含まれる宛先通信装置の識別子及び送信元通信装置の識別子と上記データパケットの識別子とを含み、上記データパケットの直接の送信元通信装置である隣接元通信装置の識別子が送信先通信装置の識別子として指定され且つ上記データパケットの自通信装置以降の送信が不可能であることを通知する異常通知パケットを生成し、送信先通信装置に送信するステップとを含む。
【００８２】
このようにホップ数をルーティングデータ格納部に保持してデータパケットに含まれる許容ホップ数と比較することによって、宛先通信装置まで辿り着けるか否かを容易に判断することができる。そして、辿り着けない場合には無駄なデータパケットの伝送を中止させるための異常通知パケットを現経路を遡るように送信して現経路上の通信装置に通知することによって、ネットワーク全体のパケット伝送効率を向上させることができるようになる。
【００８３】
また、本通信処理方法は、抽出された隣接データに含まれるホップ数が上記データパケットに含まれるホップ数未満である場合に、上記データパケットに含まれる宛先通信装置の識別子に基づきルーティングデータ格納部から抽出される、評価値が上位所定順位（１の場合を含む）までの隣接データに含まれる隣接通信装置の識別子と、上記データパケットに含まれる送信元通信装置の識別子、隣接元通信装置の識別子及び上記データパケットの識別子とを、対応付けてデータパケット受信管理データ格納部に格納するステップと、抽出された隣接データのうち評価値が最上位の隣接データに含まれる特定の隣接通信装置に対して、隣接元通信装置の識別子としてある隣接通信装置の識別子の代わりに自通信装置の識別子を含むデータパケットを生成し、送信するステップと、上記データパケットの宛先通信装置の識別子及び送信元通信装置の識別子とデータパケットの識別子とを含み、自通信装置の識別子が送信先通信装置の識別子として指定され且つ上記データパケットの特定の隣接通信装置以降の送信が不可能であることを通知する異常通知パケットを受信した場合、データパケット受信管理データ格納部を異常通知パケットに含まれる上記データパケットの送信元通信装置の識別子及びデータパケットの識別子で検索して該当するレコードを特定し、当該レコードに含まれる隣接通信装置の識別子のうち上記データパケットを送信したことのない隣接通信装置の識別子が存在するか判断するステップと、上記データパケットを送信したことのない隣接通信装置の識別子が存在しない場合には、特定されたレコードに含まれる隣接元通信装置の識別子を自通信装置の識別子の代わりに送信先通信装置の識別子として含む異常通知パケットを送信するステップとさらに含むようにしても良い。
【００８４】
このようにデータパケット受信管理データ格納部にデータを登録しておくことによって、経路上自通信装置より先の通信装置から異常通知パケットを受信した場合に、自通信装置に同じ宛先通信装置宛のデータパケットが送られてきて対処できるか否かを容易に判断することができるようになる。すなわち、該当レコードに隣接通信装置の識別子のうちデータパケットを送信したことのない隣接通信装置の識別子が登録されていなければ、自通信装置に同じ宛先通信装置宛のデータパケットが送られてきても対処できないので、異常通知パケットを現経路を遡るように送信して、経路を切り換えるように促すことによって、データパケットの伝送効率を向上させる。
【００８５】
さらに、本通信処理方法は、上記データパケットを送信したことのない隣接通信装置の識別子が存在する場合には、ルーティングデータ格納部において、特定されたレコードに含まれる宛先通信装置の識別子及び特定されたレコードによって特定されるデータパケットを最後に送信した隣接通信装置の識別子に対応付けて格納されている評価値を所定レベル評価減となるように設定するステップをさらに含むようにしても良い。このようにすれば、今回異常通知パケットを送ってきた隣接通信装置へ、同一の宛先通信装置宛のデータパケットを送信しづらくなるので、自通信装置にて他の経路（具体的には上記データパケットを送信したことのない隣接通信装置を含む経路）を選択するようになる。
【００８６】
また、本通信処理方法では、上記データパケットを送信したことのない隣接通信装置の識別子が存在する場合には、受信した異常通知パケットの転送を停止するようにしてもよい。他の機構を用いて宛先通信装置に到達しなかったデータパケットについては再送するようにすれば、異常通知パケットを転送せずにネットワークの負荷を抑えると共に、次のデータパケットの転送のための経路の切り換え設定を行って、データパケットの伝送効率を向上させるものである。
【００８７】
なお、上で述べたような処理を通信装置に実施させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブル・ディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。なお、処理途中のデータについては、コンピュータのメモリ等の記憶装置に一時保管される。
【００８８】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【００８９】
（付記１）
宛先通信装置の識別子と当該宛先通信装置へ送信する場合に送信すべき隣接通信装置の識別子と当該隣接通信装置への送信の評価値と当該隣接通信装置を経由する場合に前記宛先通信装置までに必要なホップ数とを含む隣接データを格納するルーティングデータ格納部と、
ある隣接通信装置からデータパケットを受信した場合、当該データパケットに含まれる宛先通信装置の識別子で前記ルーティングデータ格納部を検索して評価値に基づき隣接データを抽出し、当該隣接データに含まれるホップ数が前記データパケットに含まれるホップ数以上であるか判断する手段と、
抽出された前記隣接データに含まれるホップ数が前記データパケットに含まれるホップ数以上である場合に、前記データパケットに含まれる宛先通信装置の識別子及び送信元通信装置の識別子と前記データパケットの識別子とを含み、前記データパケットの直接の送信元通信装置である隣接元通信装置の識別子が送信先通信装置の識別子として指定され且つ前記データパケットの自通信装置以降の送信が不可能であることを通知する異常通知パケットを生成し、前記送信先通信装置に送信する手段と、
を含む通信装置。
【００９０】
（付記２）
抽出された前記隣接データに含まれるホップ数が前記データパケットに含まれるホップ数未満である場合に、前記データパケットに含まれる前記宛先通信装置の識別子に基づき前記ルーティングデータ格納部から抽出される、評価値が上位所定順位までの隣接データに含まれる隣接通信装置の識別子と、前記データパケットに含まれる前記送信元通信装置の識別子、前記隣接元通信装置の識別子及び前記データパケットの識別子とを、対応付けてデータパケット受信管理データ格納部に格納する手段と、
抽出された前記隣接データのうち前記評価値が最上位の隣接データに含まれる特定の隣接通信装置に対して、前記隣接元通信装置の識別子として前記ある隣接通信装置の識別子の代わりに自通信装置の識別子を含む前記データパケットを生成し、送信する手段と、
前記データパケットの宛先通信装置の識別子及び送信元通信装置の識別子と前記データパケットの識別子とを含み、前記自通信装置の識別子が送信先通信装置の識別子として指定され且つ前記データパケットの前記特定の隣接通信装置以降の送信が不可能であることを通知する異常通知パケットを受信した場合、前記データパケット受信管理データ格納部を前記異常通知パケットに含まれる前記データパケットの送信元通信装置の識別子及び前記データパケットの識別子で検索して該当するレコードを特定し、当該レコードに含まれる隣接通信装置の識別子のうち前記データパケットを送信したことのない隣接通信装置の識別子が存在するか判断する手段と、
前記データパケットを送信したことのない隣接通信装置の識別子が存在しない場合には、特定された前記レコードに含まれる前記隣接元通信装置の識別子を前記自通信装置の識別子の代わりに前記送信先通信装置の識別子として含む前記異常通知パケットを送信する手段と、
をさらに有する付記１記載の通信装置。
【００９１】
（付記３）
前記データパケットを送信したことのない隣接通信装置の識別子が存在する場合には、前記ルーティングデータ格納部において、特定された前記レコードに含まれる前記宛先通信装置の識別子及び特定された前記レコードによって特定される前記データパケットを最後に送信した前記隣接通信装置の識別子に対応付けて格納されている評価値を所定レベル評価減となるように設定する手段、
をさらに有する付記１又は２記載の通信装置。
【００９２】
（付記４）
前記データパケットを送信したことのない隣接通信装置の識別子が存在する場合には、受信した前記異常通知パケットの転送を停止する
付記３記載の通信装置。
【００９３】
（付記５）
宛先通信装置の識別子と当該宛先通信装置へ送信する場合に送信すべき隣接通信装置の識別子と当該隣接通信装置への送信の評価値と当該隣接通信装置を経由する場合に前記宛先通信装置までに必要なホップ数とを含む隣接データを格納するルーティングデータ格納部を、ある隣接通信装置からデータパケットを受信した場合当該データパケットに含まれる宛先通信装置の識別子で検索して評価値に基づき隣接データを抽出し、当該隣接データに含まれるホップ数が前記データパケットに含まれるホップ数以上であるか判断するステップと、
抽出された前記隣接データに含まれるホップ数が前記データパケットに含まれるホップ数以上である場合に、前記データパケットに含まれる宛先通信装置の識別子及び送信元通信装置の識別子と前記データパケットの識別子とを含み、前記データパケットの直接の送信元通信装置である隣接元通信装置の識別子が送信先通信装置の識別子として指定され且つ前記データパケットの自通信装置以降の送信が不可能であることを通知する異常通知パケットを生成し、前記送信先通信装置に送信するステップと、
を含む通信処理方法。
【００９４】
（付記６）
抽出された前記隣接データに含まれるホップ数が前記データパケットに含まれるホップ数未満である場合に、前記データパケットに含まれる前記宛先通信装置の識別子に基づき前記ルーティングデータ格納部から抽出される、評価値が上位所定順位までの隣接データに含まれる隣接通信装置の識別子と、前記データパケットに含まれる前記送信元通信装置の識別子、前記隣接元通信装置の識別子及び前記データパケットの識別子とを、対応付けてデータパケット受信管理データ格納部に格納するステップと、
抽出された前記隣接データのうち前記評価値が最上位の隣接データに含まれる特定の隣接通信装置に対して、前記隣接元通信装置の識別子として前記ある隣接通信装置の識別子の代わりに自通信装置の識別子を含む前記データパケットを生成し、送信するステップと、
前記データパケットの宛先通信装置の識別子及び送信元通信装置の識別子と前記データパケットの識別子とを含み、前記自通信装置の識別子が送信先通信装置の識別子として指定され且つ前記データパケットの前記特定の隣接通信装置以降の送信が不可能であることを通知する異常通知パケットを受信した場合、前記データパケット受信管理データ格納部を前記異常通知パケットに含まれる前記データパケットの送信元通信装置の識別子及び前記データパケットの識別子で検索して該当するレコードを特定し、当該レコードに含まれる隣接通信装置の識別子のうち前記データパケットを送信したことのない隣接通信装置の識別子が存在するか判断するステップと、
前記データパケットを送信したことのない隣接通信装置の識別子が存在しない場合には、特定された前記レコードに含まれる前記隣接元通信装置の識別子を前記自通信装置の識別子の代わりに前記送信先通信装置の識別子として含む前記異常通知パケットを送信するステップと、
をさらに含む付記５記載の通信処理方法。
【００９５】
（付記７）
前記データパケットを送信したことのない隣接通信装置の識別子が存在する場合には、前記ルーティングデータ格納部において、特定された前記レコードに含まれる前記宛先通信装置の識別子及び特定された前記レコードによって特定される前記データパケットを最後に送信した前記隣接通信装置の識別子に対応付けて格納されている評価値を所定レベル評価減となるように設定するステップ
をさらに含む付記５又は６記載の通信処理方法。
【００９６】
（付記８）
付記５乃至７のいずれか１つ記載の通信処理方法をコンピュータに実行させるためのプログラム。
【符号の説明】
【００９７】
１００  通信装置    １１０  通信部    １２０  記憶部
１３０  制御部
１２１  ルーティングテーブル    １２２  データ管理テーブル
１３１  パケットタイプ判定部    １３２  異常検出部
１３３  異常通知パケット処理部    １３４  ルーティングテーブル更新部
１３６  データ管理テーブル更新部
１３７  データパケット処理部      １３８  ＡＣＫパケット処理部
【図１】
2010212758.tif 000003
【図２】
2010212758.tif 000004
【図３】
2010212758.tif 000005
【図４】
2010212758.tif 000006
【図５】
2010212758.tif 000007
【図６】
2010212758.tif 000008
【図７】
2010212758.tif 000009
【図８】
2010212758.tif 000010
【図９】
2010212758.tif 000011
【図１０】
2010212758.tif 000012
【図１１】
2010212758.tif 000013
【図１２】
2010212758.tif 000014
【図１３】
2010212758.tif 000015
【図１４】
2010212758.tif 000016
【図１５】
2010212758.tif 000017
【図１６】
2010212758.tif 000018
【図１７】
2010212758.tif 000019
【図１８】
2010212758.tif 000020
【図１９】
2010212758.tif 000021
【図２０】
2010212758.tif 000022
【図２１】
2010212758.tif 000023
【図２２】
2010212758.tif 000024
【図２３】
2010212758.tif 000025
【図２４】
2010212758.tif 000026
【図２５】
2010212758.tif 000027
【図２６】
2010212758.tif 000028
【図２７】
2010212758.tif 000029
【図２８】
2010212758.tif 000030
【図２９】
2010212758.tif 000031
【図３０】
2010212758.tif 000032
【図３１】
2010212758.tif 000033
【図３２】
2010212758.tif 000034
【図３３】
2010212758.tif 000035
【図３４】
2010212758.tif 000036
【図３５】
2010212758.tif 000037
【図３６】
2010212758.tif 000038
【図３７】
2010212758.tif 000039
【図３８】
2010212758.tif 000040
【図３９】
2010212758.tif 000041
【図４０】
2010212758.tif 000042
【図４１】
2010212758.tif 000043