(57)【要約】【課題】  他の通信装置のＩＰアドレスとＭＡＣアドレスとの対応関係の有効期限を管理するタイマの処理負荷を軽減させる。【解決手段】  第２の他の通信装置のＩＰアドレスとＭＡＣアドレスとの対応関係の有効期限として設定可能な範囲に、第１の他の通信装置に係る上記対応関係の有効期限を管理するためのタイマの起床時刻が含まれると判定された場合、当該タイマを用いて第２の他の通信装置に係る上記対応関係の有効期限を管理するように制御する。【選択図】  図８
2020053954.tif 000002
【特許請求の範囲】
【請求項１】
通信装置であって、
第１の他の通信装置のＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）アドレスとＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）アドレスとの対応関係の第１の有効期限を管理するためのタイマと、
第２の他の通信装置のＩＰアドレスとＭＡＣアドレスとの対応関係の第２の有効期限として設定可能な範囲に、前記タイマの起床時刻が含まれるかを判定する判定手段と、
前記判定手段により、前記第２の有効期限として設定可能な範囲に、前記タイマの起床時刻が含まれると判定された場合、前記タイマを用いて前記第２の有効期限を管理するように制御する制御手段と、
を有することを特徴とする通信装置。
【請求項２】
前記第２の有効期限が経過した場合、前記第２の他の通信装置のＩＰアドレスとＭＡＣアドレスとの対応関係を確認するための第１のパケットを送信する第１の送信手段を更に有することを特徴とする請求項１に記載の通信装置。
【請求項３】
前記第１のパケットは、ＩＣＭＰｖ６（Ｉｎｔｅｒｎｅｔ  Ｃｏｎｔｒｏｌ  Ｍｅｓｓａｇｅ  Ｐｒｏｔｏｃｏｌ  Ｖｅｒｓｉｏｎ６）におけるＮＳ（Ｎｅｉｇｈｂｏｒ  Ｓｏｌｉｃｉｔａｔｉｏｎ）パケットであることを特徴とする請求項２に記載の通信装置。
【請求項４】
前記第２の有効期限として設定可能な範囲は、ＩＰｖ６（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ  Ｖｅｒｓｉｏｎ６）規格で規定されたＲｅａｃｈａｂｌｅ  Ｔｉｍｅに基づいて設定可能な範囲であることを特徴とする請求項１から３のいずれか１項に記載の通信装置。
【請求項５】
前記ＩＰアドレスは、ＩＰｖ６（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ  Ｖｅｒｓｉｏｎ６）アドレスであることを特徴とする請求項１から４のいずれか１項に記載の通信装置。
【請求項６】
前記第２の他の通信装置のＩＰアドレスとＭＡＣアドレスとの対応関係を示す第２のパケットを受信する受信手段を更に有し、
前記受信手段が前記第２のパケットを受信した場合に、前記判定手段は、前記第２の有効期限として設定可能な範囲に、前記第１の有効期限が含まれるかを判定することを特徴とする請求項１から５のいずれか１項に記載の通信装置。
【請求項７】
前記第２のパケットは、ＩＣＭＰｖ６（Ｉｎｔｅｒｎｅｔ  Ｃｏｎｔｒｏｌ  Ｍｅｓｓａｇｅ  Ｐｒｏｔｏｃｏｌ  Ｖｅｒｓｉｏｎ６）におけるＮＡ（Ｎｅｉｇｈｂｏｒ  Ａｄｖｅｒｔｉｓｅｍｅｎｔ）パケットであることを特徴とする請求項６に記載の通信装置。
【請求項８】
前記第２のパケットは、ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）に準拠した確認応答であることを特徴とする請求項６に記載の通信装置。
【請求項９】
前記判定手段により、前記第２の有効期限として設定可能な範囲に、前記タイマの起床時刻が含まれないと判定された場合、前記制御手段は、前記タイマとは異なる他のタイマを用いて前記第２の有効期限を管理するように制御することを特徴とする請求項１から８のいずれか１項に記載の通信装置。
【請求項１０】
第１の他の通信装置のＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）アドレスとＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）アドレスとの対応関係の第１の有効期限を管理するためのタイマを有する通信装置の制御方法であって、
第２の他の通信装置のＩＰアドレスとＭＡＣアドレスとの対応関係の第２の有効期限として設定可能な範囲に、前記タイマの起床時刻が含まれるかを判定する判定工程と、
前記判定工程において、前記第２の有効期限として設定可能な範囲に、前記タイマの起床時刻が含まれると判定された場合、前記タイマを用いて前記第２の有効期限を管理するように制御する制御工程と、
を有する。
【請求項１１】
コンピュータを請求項１から９のいずれか１項に記載の通信装置として動作させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アドレスに係る有効期限を管理するタイマを有する装置に関する。
【背景技術】
【０００２】
ＩＰｖ６では、通信相手装置のＩＰｖ６アドレスとＭＡＣアドレスとの対応関係が有効であるとみなすことができる有効期限が規定されている。当該有効期限は、ＴＣＰ／ＩＰパケットを送信し、当該パケットに対する応答（Ａｃｋ）を受信した場合に、更新できることが非特許文献１に開示されている。
【０００３】
なお、ＩＰｖ６はＩｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ  Ｖｅｒｓｉｏｎ６の、ＭＡＣはＭｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌの、ＴＣＰはＴｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌの各々略である。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】ＲＦＣ（Ｒｅｑｕｅｓｔ  Ｆｏｒ  Ｃｏｍｍｅｎｔｓ）４８６１（ｈｔｔｐｓ：／／ｔｏｏｌｓ．ｉｅｔｆ．ｏｒｇ／ｈｔｍｌ／ｒｆｃ４８６１）
【発明の概要】
【発明が解決しようとする課題】
【０００５】
通信装置が、通信相手装置のＩＰｖ６アドレスとＭＡＣアドレスとの対応関係の組を数多く保持している場合、これらの全ての有効期限の各々を異なるタイマにより管理しようとすると、通信装置におけるタイマ処理の負荷が増大してしまう。
【０００６】
上記課題を鑑み、本発明は、他の通信装置のＩＰアドレスとＭＡＣアドレスとの対応関係の有効期限を管理するタイマの処理負荷を軽減させることを目的とする。
【課題を解決するための手段】
【０００７】
本発明の通信装置は、第１の他の通信装置のＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）アドレスとＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）アドレスとの対応関係の第１の有効期限を管理するためのタイマと、第２の他の通信装置のＩＰアドレスとＭＡＣアドレスとの対応関係の第２の有効期限として設定可能な範囲に、前記タイマの起床時刻が含まれるかを判定する判定手段と、前記判定手段により、前記第２の有効期限として設定可能な範囲に、前記タイマの起床時刻が含まれると判定された場合、前記タイマを用いて前記第２の有効期限を管理するように制御する制御手段と、を有する。
【発明の効果】
【０００８】
本発明によれば、他の通信装置のＩＰアドレスとＭＡＣアドレスとの対応関係の有効期限を管理するタイマの処理負荷を軽減させることができる。
【図面の簡単な説明】
【０００９】
【図１】通信装置のハードウェア構成を示す図。
【図２】ＮＤキャッシュおよびＮＤタイマエントリを示す図。
【図３】タイマタスクを生成するフローチャート。
【図４】タイマタスクの動作を示すフローチャート。
【図５】パケットを送信する際のフローチャート。
【図６】ＮＳ送信処理を示すフローチャート。
【図７】ＮＡパケットを受信した場合のフローチャート。
【図８】ＮＤタイマエントリを検索する際のフローチャート。
【図９】ＴＣＰ−ＡＣＫ受信時のフローチャート
【図１０】ＮＤキャッシュおよびＮＤタイマエントリを示す図。
【図１１】ＮＤタイマエントリを検索する際のフローチャート。
【図１２】パケットを送信する際のフローチャート。
【発明を実施するための形態】
【００１０】
以下に、図面を参照して、実施の形態を詳しく説明する。なお、以下の実施形態は例示であり、本発明の範囲を限定する趣旨ではない。
【００１１】
＜実施形態１＞
図１に、通信装置１１２のハードウェア構成を示す。通信装置１１２は、各種制御を行うＣＰＵ１０２、ワークメモリであるＤＲＡＭ１０３、ＣＰＵ１０２が実行するプログラムなどを格納するＲＯＭ  ２０９を有する。また、通信装置１１２は、イーサネット（登録商標）規格などのネットワーク（ＬＡＮ）１１０を介した通信を行うためのＬＡＮモジュール１０４を有する。通信装置１１２は更に、ＩＰｖ６の近隣探索プロトコル（ＮＤ：Ｎｅｉｇｈｂｏｒ  Ｄｉｓｃｏｖｅｒｙ  Ｐｒｏｔｏｃｏｌ）により得られたＩＰアドレス情報をキャッシュするＮＤキャッシュ１０５、および、複数のＮＤタイマエントリ１０６を有する。ＮＤタイマエントリ１０６はＮＤキャッシュの状態遷移を管理するために使用される。
【００１２】
ここでＣＰＵはＣｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔの略である。なお、ＣＰＵ１０２は複数のプロセッサから構成されていてもよい。また、ＤＲＡＭはＤｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙの略であり、ＲＯＭはＲｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙの略である。また、ＩＰｖ６はＩｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ  Ｖｅｒｓｉｏｎ６の略である。
【００１３】
図２に、本実施形態に係るＮＤキャッシュ１０５にデータ（エントリ）が格納された場合の例、および、ＮＤタイマキュー２０２のＮＤタイマエントリ１０６との関連を示す例を示す。
【００１４】
ＮＤキャッシュ１０５は、ＩＰｖ６アドレスから対応するリンク層アドレスを参照するために使用される。リンク層アドレスとは、例えばＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）アドレスである。ＩＰｖ６アドレスの列はＩＰｖ６アドレス、ＭＡＣアドレスの列はＭＡＣアドレス、状態の列はＮＤキャッシュ１０５における各エントリの状態を示す。Ｔｉｍｅｒ  Ｔａｂｌｅ  Ｎｏは、当該エントリが使用するＮＤタイマエントリ１０６を指している。Ｒｅａｃｈａｂｌｅ  Ｔｉｍｅの開始時刻は、この例では機器起動時からの経過時間を時刻（秒）で表記されており、各エントリの有効期限、即ち、ＩＰｖ６アドレスとＭＡＣアドレスとの対応関係の有効期限を示す。
【００１５】
ＲＦＣ４８６１では、各エントリの有効期間である「Ｒｅａｃｈａｂｌｅ」状態の期間（Ｒｅａｃｈａｂｌｅ  Ｔｉｍｅ）は、デフォルト３０秒×（０．５〜１．５の乱数）としている。ＩＰｖ６パケット送信時、ＮＤキャッシュ１０５に送信先のＩＰｖ６アドレスのエントリがない場合、その送信パケットを未送信パケットキューに追加する。なお、ＲＦＣとは、Ｒｅｑｕｅｓｔ  Ｆｏｒ  Ｃｏｍｍｅｎｔの略である。
【００１６】
ＮＤタイマキュー２０２は、ＮＤタイマエントリ１０６を連結し、キュー構造にしたものである。起床時刻に付き１個ずつＮＤタイマエントリ１０６が割り当てられ、そのそれぞれが時間順に連結される。タイマ起床時刻になるとタイマキャッシュのフラグがＯＦＦからＯＮに変更するよう構成される。また、各ＮＤタイマエントリ１０６ａ〜ｃは、自タイマエントリがＮＤキャッシュ１０５に含まれるエントリのうち、いくつのエントリから参照されているかを示す参照カウンタを有する。
【００１７】
次に、図３、図４を用いて、ＮＤタイマエントリ１０６のフラグの更新について説明する。図３に示すフローチャートは、通信装置１１２の電源が投入された場合に開始される。なお、図３および４に示すフローチャートは、通信装置１１２のＲＯＭ２０９に記憶されたプログラムをＣＰＵ１０２が読み出して実行することで実現される。なお、図３および４のフローチャートに示すステップの一部または全部を例えばＡＳＩＣ等のハードウェアで実現する構成としても良い。なお、ＡＳＩＣは、Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔの略である。
【００１８】
図３において、通信装置１１２はＮＤタイマキュータスクを生成する（Ｓ３０２）。生成されたＮＤタイマキュータスクは、ＮＤタイマキューを呼び出したタスクとは別のタスクとして動作する。その動作について、図４を用いて説明する。
【００１９】
通信装置１１２は、ＮＤタイマキュータスクにおいて、ＮＤタイマキュー２０２のタイマエントリ１（１０６−ａ）とタイマエントリ２（１０６−ｂ）を獲得する（Ｓ４０２）。具体的には、初期値（フラグＯＦＦ，参照カウンタ０）を各タイマエントリに格納し、これをキューとして連結する。つまり、図２のようにタイマエントリ１の次のエントリとして指し示すポインタ（ｎｅｘｔｐｔｒ）がタイマエントリ２を指すようにする。
【００２０】
次に、通信装置１１２は、現在時刻を獲得し（Ｓ４０３）、当該現在時刻に３０（秒）を加算した値（Ｓ４０４）をタイマエントリ１の起床時刻（ｔｉｍｅＮｅｘｔ）に設定する（Ｓ４０５）。次に、通信装置１１２は、タイマエントリ１の起床時刻に更に３０（秒）を加算し（Ｓ４０６）、当該値をタイマエントリ２の起床時刻に設定する（Ｓ４０７）。このように設定することにより、まず、３０秒後にタイマエントリ１が起床し、更に３０秒後にタイマエントリ２が起床する。
【００２１】
そして、通信装置１１２は、次に起床するタイマエントリを表す変数ｔａｂｌｅＮｏに１を設定する（Ｓ４０８）。更に、通信装置１１２は、ＮＤタイマキュー２０２の先頭エントリを表す変数ｔａｂｌｅＨｅａｄに１を設定し（Ｓ４０９）、また、ＮＤタイマキュー２０２の最終エントリを表す変数ｔａｂｌｅＬａｓｔに２を設定する（Ｓ４１０）する。その後、通信装置１１２は、図４に示すＮＤタイマタスクキューを３０秒スリープする（Ｓ４１１）。
【００２２】
３０秒スリープ後、通信装置１１２は、ｔａｂｌｅＮｏ（最初は１が設定されている）のフラグをＯＦＦからＯＮに変更する（Ｓ４１２）。次に、通信装置１１２は、新たなタイマエントリを準備するために、変数ｔａｂｌｅＮｏとｔａｂｌｅＬａｓｔを各々１増やし（Ｓ４１３、Ｓ４１４）、ｔｉｍｅｒＮｅｘｔに３０秒を加える（Ｓ４１５）。
【００２３】
そして、通信装置１１２は、新たなタイマエントリを獲得し、当該タイマエントリのＴｉｍｅｒ  Ｔａｂｌｅ  Ｎｏ．にｔａｂｌｅＬａｓｔの値を設定すると共に、初期化（フラグをＯＦＦ、参照カウンタを０にする）を行う（Ｓ４１６）。そして、当該タイマエントリの起床時刻にｔｉｍｅｒＮｅｘｔを格納する（Ｓ４１７）。そして、通信装置１１２は、この新たに獲得したタイマエントリをＮＤタイマキュー２０２の末尾に連結する（Ｓ４１８）。これにより、図２に示すようなＮＤタイマキュー２０２が構築される。
【００２４】
次に、ＮＤタイマキュー２０２に含まれる先頭エントリ（ｔａｂｌｅＨｅａｄが示すキュー）の参照カウンタが０かどうかを判定する（Ｓ４１９）。即ち、ＮＤキャッシュ１０５に含まれるいずれかのエントリから、先頭のタイマエントリが参照されているかを判定する。
【００２５】
参照カウンタが０でない場合は（Ｓ４１９のＮｏ）、即ち、ＮＤキャッシュ１０５に含まれるいずれかのエントリから、先頭のタイマエントリが参照されている場合には、Ｓ４１１に戻る。一方、先頭の参照カウンタが０である場合（Ｓ４１９のＹｅｓ）、即ち、ＮＤキャッシュ１０５に含まれるいずれのエントリからも、先頭のタイマエントリが参照されていない場合、通信装置１１２は、当該先頭のタイマエントリを解放する（Ｓ４２０〜４２２）。即ち、ＮＤタイマキュー２０２に含まれる先頭エントリを次のタイマエントリに設定し直す。その後、Ｓ４１１に戻る。
【００２６】
この動作により、３０秒毎のタイマ起床時に次々回の起床で使用するＮＤタイマエントリ１０６を生成し、ＮＤタイマキュー２０２に追加している。このように、次々回の起床で使用するＮＤタイマエントリ１０６を事前に生成することで、ＲＥＡＣＨＡＢＬＥ開始時にＮＤタイマキュー２０２内のＮＤタイマエントリ１０６のいずれを用いてＮＤキャッシュ１０５のエントリの有効期限を管理するかを選択できる。
【００２７】
次に、図５を用いて、パケット送信要求時のＮＤキャッシュ、及び、ＮＤタイマキューの処理について説明する。図５に示すフローチャートは、通信装置１１２がＩＰｖ６パケット（ＩＰｖ６に準拠したパケット）を送信する場合に開始される。
【００２８】
図５に示すフローチャートは、通信装置１１２のＲＯＭ２０９に記憶されたプログラムをＣＰＵ１０２が読み出して実行することで実現される。なお、図５のフローチャートに示すステップの一部または全部を例えばＡＳＩＣ等のハードウェアで実現する構成としても良い。
【００２９】
通信装置１１２は、アプリケーション等からＩＰｖ６パケットの送信要求があると（Ｓ５０１）、パケットの宛先ＩＰｖ６アドレスから対応するＭＡＣアドレスを参照するために、ＮＤキャッシュ１０５を検索する（Ｓ５０２）。ＮＤキャッシュ１０５内に該当するＩＰｖ６アドレスを含むエントリがあった場合（Ｓ５０３のＹｅｓ）、通信装置１１２は、当該エントリの状態がＩＮＣＯＭＰＬＥＴＥかどうかを判定する（Ｓ５０４）。なお、ＩＮＣＯＭＰＬＥＴＥとは、ＩＰｖ６アドレスとＭＡＣアドレスとの対応関係が不明の状態、即ち、近隣探索プロトコルによるアドレス解決が完了していない状態を指す。
【００３０】
状態がＩＮＣＯＭＰＬＥＴＥである場合（Ｓ５０４のＹｅｓ）、送信パケットの宛先ＭＡＣアドレスが分からないため、通信装置１１２は当該パケットを送信できない。そこで、通信装置１１２は、未送信パケットキューに当該パケットを格納すると共に、当該パケットの格納位置を示す情報を新たに生成、追加したエントリに入力する（Ｓ５１５）。そして、図５に示す処理を終了する。
【００３１】
一方、状態がＩＮＣＯＭＰＬＥＴＥでなければ（Ｓ５０４のＮｏ）、通信装置１１２は、当該エントリが示すＴｉｍｅｒ  Ｔａｂｌｅ  ＮｏのＮＤタイマエントリ１０６を参照する（Ｓ５０５）。ここで、参照したＮＤタイマエントリ１０６のフラグがＯＮでなければ、即ちＯＦＦであれば（Ｓ５０６のＮｏ）、当該エントリは有効期限内である。そこで、通信装置１１２は、ＩＰｖ６アドレスとＭＡＣアドレスとの対応関係を確認するためのＮＳ送信処理は行うことなく、参照されたＭＡＣアドレス宛てに、要求されたＩＰｖ６パケットを送信する（Ｓ５１４）。なお、ＮＳとは、Ｎｅｉｇｈｂｏｒ  Ｓｏｌｉｃｉｔａｔｉｏｎの略であり、ＮＳ送信処理の詳細は図６を用いて後述する。
【００３２】
一方、参照したＮＤタイマエントリ１０６のフラグがＯＮであれば（Ｓ５０６のＹｅｓ）、当該エントリは有効期限であるＲＥＡＣＨＡＢＬＥ期間を過ぎている。そこで、通信装置１１２、ＮＤタイマエントリ１０６の参照カウンタを１減算し（Ｓ５０７）、減算後の参照カウンタが０かを判定する（Ｓ５０８）。ここで、参照カウンタを１減算するのは、当該エントリは有効期限を経過しており、タイマエントリを参照する必要がなくなるためである。
【００３３】
減算後の参照カウンタが０の場合は（Ｓ５０８のＹｅｓ）、そのＮＤタイマエントリ１０６を参照するＮＤキャッシュ１０５のエントリがないので、通信装置１１２は、当該ＮＤタイマエントリ１０６を削除する処理を行う。具体的には、まず通信装置１１２は、参照したＮＤタイマエントリ１０６がＮＤタイマキュー２０２の先頭エントリであるかを判定する（Ｓ５０９）。
【００３４】
先頭エントリである場合（Ｓ５０９のＹｅｓ）、通信装置１１２は、ＮＤタイマキュー２０２の先頭エントリを示す変数ｔａｂｌｅＨｅａｄに、参照したＮＤタイマエントリ１０６の次のエントリ（ｎｅｘｔｐｔｒ）の値を設定して（Ｓ５３１）、Ｓ５１０に進む。一方、先頭エントリでない場合（Ｓ５０９のＮｏ）には、当該設定を行うことなくＳ５１０に進む。そして、通信装置１１２は、参照したＮＤタイマエントリ１０６を解放し（Ｓ５１０）、空きのできたＮＤタイマキューを再連結する（Ｓ５１１）。このようにして、参照したＮＤタイマエントリ１０６が削除され、ステップＳ５１２に進む。
【００３５】
ステップＳ５０８の説明に戻る。減算後の参照カウンタが０でない場合は（Ｓ５０８のＮｏ）、当該ＮＤタイマエントリ１０６を参照するＮＤキャッシュ１０５のエントリが残っている。従って、このような場合には、Ｓ５０９〜５１１に示したＮＤタイマエントリ１０６を削除する処理が行われることなく、ステップＳ５１２に進む。
【００３６】
ステップＳ５１２において、通信装置１１２は、ＮＤキャッシュ１０５において検索されたエントリの状態をＤＥＬＡＹに設定する（Ｓ５１２）。そして、ＮＳ送信処理タスクＢを生成する（Ｓ５１３）。ＮＳ送信処理タスクＢの詳細については、図６を用いて後述する。なお、ＮＳ送信処理タスクＢの処理は図５の処理とは別のタスクで行われるため、通信装置１１２は、ＮＳ送信処理タスクＢの処理の終了を待つことなく、Ｓ５１４に進み、参照されたＭＡＣアドレス宛てに、要求されたＩＰｖ６パケットを送信する（Ｓ５１４）。そして、図５に示す処理を終了する。
【００３７】
次に、ステップＳ５０３において、ＮＤキャッシュ１０５内に該当するＩＰｖ６アドレスを含むエントリがなかった場合（Ｓ５０３のＮｏ）について説明する。このような場合、通信装置１１２は、ＮＤキャッシュ１０５に、当該ＩＰｖ６アドレスを含むＮＤキャッシュエントリを生成・追加する（Ｓ５１６）。なお、当該エントリの状態はＩＮＣＯＭＰＬＥＴＥに設定する（Ｓ５１７）。また、送信パケットの宛先ＭＡＣアドレスが分からないため、通信装置１１２は当該パケットを送信できない。そこで、通信装置１１２は、未送信パケットキューに当該パケットを格納すると共に、当該パケットの格納位置を示す情報を新たに生成、追加したエントリに入力する（Ｓ５１８）。そして、通信装置１１２は、ＮＳ送信処理タスクＡを生成する（Ｓ５１９）。ＮＳ送信処理タスクＡの詳細については、図６を用いて後述する。なお、ＮＳ送信処理タスクＡの処理は図５の処理とは別のタスクで行われるため、通信装置１１２は、ＮＳ送信処理タスクＡの処理の終了を待つことなく、図５に示す処理を終了する。
【００３８】
次に、ＮＳ送信処理タスクＡおよびＢの処理について、図６を用いて説明する。なお、ＮＳ送信処理タスクＡが生成された場合（Ｓ５１９）、Ｓ７０１ａから処理が開始される。また、ＮＳ送信処理タスクＢが生成された場合（Ｓ５１３）、Ｓ７０１ｂから処理が開始される。
【００３９】
Ｓ７０１ｂから処理が開始された場合、通信装置１１２は、ＮＳ送信処理タスクを５秒スリープし（Ｓ７０２）、対応するＮＤキャッシュ１０５のエントリの状態をＰＲＯＢＥに設定した後（Ｓ７０３）、ステップＳ７０４に進む。一方、Ｓ７０１ａから処理が開始された場合、通信装置１１２は、ステップＳ７０２〜７０３の処理を行うことなく、ステップＳ７０４に進む。
【００４０】
ステップＳ７０４において、通信装置１１２は、近隣探索プロトコルに基づくアドレス解決を行うためのＮＳパケットの送信回数をカウントするためのカウンタであるｓｎｄｃｎｔに０を代入する（Ｓ７０４）。なお、ＮＳパケットとは、ＮＳ（Ｎｅｉｇｈｂｏｒ  Ｓｏｌｉｃｉｔａｔｉｏｎ）ＩＣＭＰｖ６メッセージタイプのパケットのことである。なお、ＩＣＭＰｖ６とは、Ｉｎｔｅｒｎｅｔ  Ｃｏｎｔｒｏｌ  Ｍｅｓｓａｇｅ  Ｐｒｏｔｏｃｏｌ  Ｖｅｒｓｉｏｎ６の略である。
【００４１】
次に、通信装置１１２はＮＳパケットを送信し（Ｓ７０５）、１秒スリープした後に（Ｓ７０６）、当該エントリの状態がＲＥＡＣＨＡＢＬＥかどうかを判定する（Ｓ７０７）。なお、当該エントリの状態は、後述するＮＡ（Ｎｅｉｇｈｂｏｒ  Ａｄｖｅｒｔｉｓｅｍｅｎｔ）パケットの受信によって、ＲＥＡＣＨＡＢＬＥになり得る。ここで、ＮＡパケットは、ＮＳパケットの送信に対する応答、もしくは、他の通信装置から自発的に送信されるパケットであり、ＮＡ  ＩＣＭＰｖ６メッセージタイプのパケットである。ＮＡパケットを受信した場合の動作については、図７を用いて後述する。
【００４２】
エントリの状態がＲＥＡＣＨＡＢＬＥであれば（Ｓ７０５のＹｅｓ）、図６に示す処理を終了する。一方、エントリの状態がＲＥＡＣＨＡＢＬＥでなければ（Ｓ７０５のＮｏ）、送信したＮＳパケットに対するＮＡパケットを受信していないということなので、通信装置１１２は、ＮＳパケットを再送するための処理を行う。具体的には、通信装置１１２は、ｓｎｄｃｎｔの値に１を加算し（Ｓ７０８）、ｓｎｄｃｎｔの値が３以上かどうかを判定する（Ｓ７０９）。
【００４３】
ｓｎｄｃｎｔの値が３未満である場合（Ｓ７０９のＮｏ）、ステップＳ７０５に戻り、通信装置１１２はＮＳパケットを再送する（Ｓ７０５）。一方、ｓｎｄｃｎｔの値が３以上である場合（Ｓ７０９のＹｅｓ）、即ち、３回ＮＳパケットを送信したにも拘らず、ＮＡパケットを受信できていない場合には、通信装置１１２は、ＮＤキャッシュ１０５の当該エントリを破棄する（Ｓ７１０）。
【００４４】
次に、図７を用いて、ＮＡパケットの受信処理について説明する。図７に示すフローチャートは、通信装置１１２の電源が投入された場合に開始される。なお、図７に示すフローチャートは、通信装置１１２のＲＯＭ２０９に記憶されたプログラムをＣＰＵ１０２が読み出して実行することで実現される。なお、図７のフローチャートに示すステップの一部または全部を例えばＡＳＩＣ等のハードウェアで実現する構成としても良い。
【００４５】
ＮＡパケットを受信した場合、通信装置１１２は、ＮＤキャッシュ１０５にエントリに、受信したＮＡパケットのＩＰｖ６アドレスのエントリがあるか検索する（Ｓ８０２）。エントリがなければ（Ｓ８０３のＮｏ）、通信装置１１２は何もせずに図７に示す処理を終了する。
【００４６】
一方、エントリがある場合（Ｓ８０３のＹｅｓ）、通信装置１１２は、当該エントリの状態がＩＮＣＯＭＰＬＥＴＥであるかを判定する（Ｓ８０４）。
【００４７】
ＩＮＣＯＭＰＬＥＴＥでなければ（Ｓ８０４のＮｏ）、通信装置１１２は、当該エントリのＴｉｍｅｒ  Ｔａｂｌｅ  Ｎｏが指す番号のＮＤタイマエントリ１０６を参照する（Ｓ８０５）。そして、当該タイマエントリのフラグがＯＮかどうかを判定する（Ｓ８０６）。フラグがＯＦＦ（ＯＮでない）場合（Ｓ８０６のＮｏ）、通信装置１１２は何もせずに図７に示す処理を終了する。一方、フラグがＯＮである場合（Ｓ８０６のＹｅｓ）、ステップＳ８１１に進む。
【００４８】
エントリの状態がＩＮＣＯＭＰＬＥＴＥである場合には（Ｓ８０４のＹｅｓ）、通信装置１１２は、当該エントリに対応する未送信パケットがあるかを確認する（Ｓ８０９）。未送信パケットがあれば（Ｓ８０９のＹｅｓ）、通信装置１１２は、当該パケットを送信して（Ｓ８１０）、ステップＳ８１１に進む。一方、未送信パケットがなければ（Ｓ８０９のＮｏ）、そのままステップＳ８１１に進む。
【００４９】
ステップＳ８１１において、通信装置１１２は、検索されたＮＤキャッシュ１０５のエントリの状態をＲＥＡＣＨＡＢＬＥに設定する（Ｓ８１１）。そして、通信装置１１２は、ＲＥＡＣＨＡＢＬＥの有効期限として設定可能な範囲内にタイマ起床時刻が設定され、かつ、フラグがＯＦＦのタイマエントリを検索する（Ｓ８１２）。ステップＳ８１２の処理の詳細は、図８を用いて後述する。
【００５０】
上述のようなタイマエントリが検出されたら、通信装置１１２は、当該タイマエントリの参照カウンタを１増やす（Ｓ８１３）。そして、当該タイマエントリ１０６の番号をＮＤキャッシュ１０５のエントリにおけるＴｉｍｅｒ  Ｔａｂｌｅ  Ｎｏに格納する（Ｓ８１４）。そして、図８に示す処理を終了する。
【００５１】
次に、ステップＳ８１２の処理の詳細について、図８を用いて説明する。
【００５２】
まず、通信装置１１２は、現在時刻を獲得する（Ｓ９０２）。そして、ＲＥＡＣＨＡＢＬＥ期限として設定可能な最小値と最大値を求める（Ｓ９０３）。ＲＦＣ４８６１では、ベースとなるＲＥＡＣＨＡＢＬＥ期間３０秒に０．５〜１．５の間の乱数を乗じた値、即ち、１５秒〜４５秒のいずれかの値をＲＥＡＣＨＡＢＬＥ期間として設定することが規定されている。そこで、最小値（ＲｅａｃｈＭｉｎ）としては、現在時刻に１５秒を加算した値となり、最大値（ＲｅａｃｈＭａｘ）としては、現在時刻に４５秒を加算した値となる。
【００５３】
そして、通信装置１１２は、変数ｔａｂｌｅＴｍｐにＮＤタイマキュー２０２の先頭エントリを示す番号（Ｔｉｍｅｒ  Ｔａｂｌｅ  Ｎｏ）を格納する（Ｓ９０４）。また、変数ｔａｂｌｅＮｅｘｔに、変数ｔａｂｌｅＴｍｐが示すタイマエントリの次のタイマエントリを示す番号を格納する（Ｓ９０５）。
【００５４】
そして、通信装置１１２は、ｔａｂｌｅＴｍｐのタイマ起床時刻が、ＲＥＡＣＨＡＢＬＥの範囲に入っているかどうかを調べる（ＲｅａｃｈＭｉｎ≦ｔａｂｌｅＴｍｐのタイマ起床時刻≦ＲｅａｃｈＭａｘ）（Ｓ９０６）。
【００５５】
範囲外であれば（Ｓ９０６のＮｏ）、ステップＳ９０８に進む。範囲内であれば（Ｓ９０６のＹｅｓ）、通信装置１１２は、ｔａｂｌｅＴｍｐが示すタイマエントリのフラグがＯＦＦであるかを判定する（Ｓ９０７）。
【００５６】
ここで、フラグがＯＦＦであれば（Ｓ９０７Ｙｅｓ）、当該ｔａｂｌｅＴｍｐが示すタイマエントリが検索されたタイマエントリとなる。一方、フラグがＯＮであれば（Ｓ９０７のＮｏ）、ステップＳ９０８に進む。
【００５７】
ステップＳ９０８において、通信装置１１２は、ｔａｂｌｅＴｍｐに次のＮＤタイマエントリ１０６を指定する（Ｓ９０８）。そして、ステップＳ９０５の処理に戻る。
【００５８】
図４のフローにより、ＮＤタイマエントリ１０６は現在時刻から３０秒以内にタイムアウトするエントリと、３０秒から６０秒以内にタイムアウトするエントリを用意している。そして、ステップＳ９０６において検索する範囲は、現在時刻から４５〜６０秒後の範囲であるので、これにあてはまるＮＤタイマエントリ１０６が必ず存在するようになっている。
【００５９】
以上のように構成することにより、同時に多数の装置と通信して、図２のＮＤキャッシュ１０５のエントリが増えた場合でも、有効期限の近い近隣探索でＮＤタイマエントリ１０６を共有できる。それによりエントリそれぞれに対して近隣探索の有効期間のためのタイマを使用する必要がなく、タイマ資源の使用やタイマ処理の負荷を低減することができる。
【００６０】
なお、ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）に準拠した確認応答（ＡＣＫ、ａｃｋｎｏｗｌｅｄｇｅｍｅｎｔ）を受信した場合に、ＲＥＡＣＨＡＢＬＥ状態へ遷移するようにしてもよい。以下、ＴＣＰに準拠したＡＣＫをＴＣＰ−ＡＣＫと記す。
【００６１】
ＴＣＰ−ＡＣＫを受信した場合に開始されるフローチャートを図９に示す。図９に示すフローチャートは、通信装置１１２のＲＯＭ２０９に記憶されたプログラムをＣＰＵ１０２が読み出して実行することで実現される。なお、図９のフローチャートに示すステップの一部または全部を例えばＡＳＩＣ等のハードウェアで実現する構成としても良い。
【００６２】
ここで、図７に示す処理と同様の処理が実行されるステップについては、図７で用いた符号と同じ符号を付し、詳細な説明を省略する。
【００６３】
通信装置１１２は、ＴＣＰ−ＡＣＫを受信すると、ＮＤキャッシュ１０５にエントリに、受信したＴＣＰ−ＡＣＫのＩＰｖ６アドレスのエントリがあるか検索する（Ｓ８０３）。エントリがなければ（Ｓ８０３のＮｏ）、通信装置１１２は何もせずに図９に示す処理を終了する。
【００６４】
一方、エントリがある場合（Ｓ８０３のＹｅｓ）、通信装置１１２は、当該タイマエントリのフラグがＯＮかどうかを判定する（Ｓ８０６）。フラグがＯＦＦ（ＯＮでない）場合（Ｓ８０６のＮｏ）、通信装置１１２は何もせずに図９に示す処理を終了する。一方、フラグがＯＮである場合（Ｓ８０６のＹｅｓ）、通信装置１１２はステップＳ８１１〜８１４の処理を実行する。
【００６５】
このように、ＴＣＰ−ＡＣＫの受信したことで、ＮＤキャッシュ１０５にエントリの状態が更新された場合であっても、適切にＮＤタイマエントリ１０６を共有できる。
【００６６】
＜実施形態２＞
第２実施形態について、図１０、図１１、および、図１２を用いて説明する。第２実施形態は、第１実施形態ではタイマの起床時刻で決定していたＲＥＡＣＨＡＢＬＥ期間の終了時刻を、タイマの起床時刻からＲＥＡＣＨＡＢＬＥ期間の最大時刻の間で決定するものである。
【００６７】
図１０にＮＤキャッシュ１０５−２とＮＤタイマエントリ１０６−２を示す。図１０のＮＤキャッシュ１０５−２と図２のＮＤキャッシュ１０５との差異は、ＮＤキャッシュ１０５−２ではＲｅａｃｈａｂｌｅ  Ｔｉｍｅ終了時刻の列が加えられている。また、図１０のＮＤタイマエントリ１０６−２では、フラグが時刻獲得フラグになっている。
【００６８】
また、本実施形態では、ステップＳ８１２の処理として、図１１に示す処理が実行される。即ち、図９に示す処理が終了した後に、通信装置１１２は、ステップＳ１２０１およびＳ１２０２を実行する。
【００６９】
ステップＳ１２０１において、通信装置１１２は、ｔａｂｌｅＴｍｐのタイマ起床時刻からＲｅａｃｈＭａｘの範囲内で乱数を用いてＲｅａｃｈＴｉｍｅの有効期限を決定する（Ｓ１２０１）。そして、決定したＲｅａｃｈＴｉｍｅ有効期限を、ＮＤキャッシュ１０５−２の該当するエントリに格納する（Ｓ１２０２）。
【００７０】
次に、図１２を用いてパケット送信要求時のＮＤキャッシュとＮＤタイマキューの処理について説明する。図１２は図５とほぼ同じであるが、ＮＤタイマエントリ１０６−２の時刻獲得フラグがＯＮであることを確認した後（Ｓ５０６のＹｅｓに対応）に、通信装置１１２は、ステップＳ１３０１および、Ｓ１３０２を実行する。
【００７１】
ステップＳ１３０１において、通信装置１１２は現在時刻を獲得する（Ｓ１３０１）。そして、獲得した現在時刻とＮＤキャッシュ１０５−２のエントリのＲｅａｃｈＴｉｍｅ有効期限とを比較する（Ｓ１３０２）。その結果、現在時刻がＲｅａｃｈＴｉｍｅ有効期限内である場合（Ｓ１３０２のＹｅｓ）、ステップＳ５１４に進む。一方、現在時刻がＲｅａｃｈＴｉｍｅ有効期限内でない場合（Ｓ１３０２のＮｏ）、ステップＳ５０７に進む。
【００７２】
このように、実施形態２においては、ＲｅａｃｈＴｉｍｅ終了時刻を過ぎたかどうかの判断に時刻を獲得するが、時刻獲得フラグがＯＮかどうかを行った後で時刻を獲得しているため、時刻獲得の負荷を減らすことができる。ＲｅａｃｈａｂｌｅＴｉｍｅ終了時刻を乱数で設定しているので、ＮＤタイマエントリ１０６の解放が集中しない。
【００７３】
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【００７４】
１０２  ＣＰＵ
１０３  ＤＲＡＭ
１０４  ＬＡＮモジュール
１０５  ＮＤキャッシュ
１０６  ＮＤタイマエントリ
１０９  ＲＯＭ
１１０  ネットワーク
１１２  通信装置
【図１】
2020053954.tif 000003
【図２】
2020053954.tif 000004
【図３】
2020053954.tif 000005
【図４】
2020053954.tif 000006
【図５】
2020053954.tif 000007
【図６】
2020053954.tif 000008
【図７】
2020053954.tif 000009
【図８】
2020053954.tif 000010
【図９】
2020053954.tif 000011
【図１０】
2020053954.tif 000012
【図１１】
2020053954.tif 000013
【図１２】
2020053954.tif 000014