(57)【特許請求の範囲】
【請求項１】
複数のプロトコルに対応する第１の端末によって第２の端末に向けて送信されるパケットとして、通信の開始を要求する通信開始メッセージを監視するとともに、前記第１の端末が前記第２の端末の識別情報を要求するＤＮＳクエリ要求、および、該ＤＮＳクエリ要求に対する応答であるＤＮＳクエリ応答を監視する監視部と、
前記ＤＮＳクエリ要求または前記ＤＮＳクエリ応答に含まれる前記第２の端末を識別するための複数のプロトコルにおける各識別情報同士を対応付けてテーブルに格納し、また、前記通信開始メッセージが前記複数あるプロトコルのうち特定のプロトコルにて前記第１の端末から前記第２の端末に所定期間内に所定回数送信されたとの監視結果が前記監視部により得られた後に、前記特定のプロトコルにおける識別情報に対応する別のプロトコルにおける識別情報を取得し、該識別情報を宛先とする前記別のプロトコルにて前記第２の端末に通信開始メッセージが送信されたかを判定し、前記別のプロトコルにて、該第１の端末から該第２の端末に通信開始メッセージが送信されたと判定した場合に、該通信開始メッセージの送信先となる該第２の端末を識別するための該特定のプロトコルにおける識別情報を所定の記憶装置に格納する格納部と、
前記格納部によって前記所定の記憶装置に格納された識別情報が宛先となる前記通信開始メッセージの送信元となる前記第１の端末について、フォールバックを制御するフォールバック制御部と
を備えたことを特徴とするフォールバック検知装置。
【請求項２】
前記フォールバック制御部は、前記格納部によって前記所定の記憶装置に格納された識別情報が宛先となる前記通信開始メッセージの送信元となる前記第１の端末に対して、該第１の端末をフォールバックさせるためのメッセージを送信することを特徴とする請求項１に記載のフォールバック検知装置。
【請求項３】
前記第１の端末は、前記第２の端末の識別情報を要求するＤＮＳクエリ要求を送信し、該ＤＮＳクエリ要求に対する応答であるＤＮＳクエリ応答を受信し、
前記監視部は、前記第１の端末による通信を中継することで、該第１の端末により送受信される情報を監視し、
前記フォールバック制御部は、前記所定の記憶装置に格納された識別情報を含む前記ＤＮＳクエリ応答が得られたとの監視結果が前記監視部により得られた場合に、該ＤＮＳクエリ応答に含まれる該識別情報を削除した上で、前記ＤＮＳクエリ要求の送信元となる前記第１の端末に送信することを特徴とする請求項１に記載のフォールバック検知装置。
【請求項４】
前記第１の端末は、前記第２の端末の任意のプロトコルの識別情報を要求するＤＮＳクエリ要求を送信し、該ＤＮＳクエリ要求に対する応答であるＤＮＳクエリ応答を受信し、
前記監視部は、前記第１の端末による通信を中継することで、該第１の端末により送受信される情報を監視し、
前記フォールバック制御部は、前記所定の記憶装置に格納された識別情報を要求する前記ＤＮＳクエリ要求が得られたとの監視結果が前記監視部により得られた場合に、該識別情報を含まない該ＤＮＳクエリ応答を生成した上で、前記ＤＮＳクエリ要求の送信元となる前記第１の端末に送信することを特徴とする請求項１に記載のフォールバック検知装置。
【請求項５】
複数のプロトコルに対応する第１の端末によって第２の端末に向けて送信されるパケットとして、通信の開始を要求する通信開始メッセージを監視するとともに、前記第１の端末が前記第２の端末の識別情報を要求するＤＮＳクエリ要求、および、該ＤＮＳクエリ要求に対する応答であるＤＮＳクエリ応答を監視する監視工程と、
前記ＤＮＳクエリ要求または前記ＤＮＳクエリ応答に含まれる前記第２の端末を識別するための複数のプロトコルにおける各識別情報同士を対応付けてテーブルに格納し、また、前記通信開始メッセージが前記複数あるプロトコルのうち特定のプロトコルにて前記第１の端末から前記第２の端末に所定期間内に所定回数送信されたとの監視結果が前記監視工程により得られた後に、前記特定のプロトコルにおける識別情報に対応する別のプロトコルにおける識別情報を取得し、該識別情報を宛先とする前記別のプロトコルにて前記第２の端末に通信開始メッセージが送信されたかを判定し、前記別のプロトコルにて、該第１の端末から該第２の端末に通信開始メッセージが送信されたと判定した場合に、該通信開始メッセージの送信先となる該第２の端末を識別するための該特定のプロトコルにおける識別情報を所定の記憶装置に格納する格納工程と、
前記格納工程によって前記所定の記憶装置に格納された識別情報が宛先となる前記通信開始メッセージの送信元となる前記第１の端末について、フォールバックを制御するフォールバック制御工程と
を含んだことを特徴とするフォールバック検知方法。
【請求項６】
コンピュータを請求項１〜４のいずれか１つに記載のフォールバック検知装置として機能させるためのフォールバック検知プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フォールバック検知装置、フォールバック検知方法及びフォールバック検知プログラムに関する。
【背景技術】
【０００２】
従来、複数のプロトコルに対応したネットワークがある。複数のプロトコルに対応したネットワーク内にある端末は、例えば、１つのプロトコルを優先して用いて他の端末と通信を行う。また、端末は、優先して用いるプロトコルで他の端末と通信ができなかった場合には、他のプロトコルへとフォールバックした上で通信を行う。
【０００３】
ＩＰｖ４及びＩＰｖ６に対応したデュアルスタックネットワークを例に説明する。この場合、デュアルスタックネットワークに接続された端末は、例えば、ＩＰｖ６を優先して用いて他の端末と通信を行う。また、端末は、ＩＰｖ６を用いて他の端末と通信ができなかった場合には、ＩＰｖ４にフォールバックした上で、ＩＰｖ４を用いて他の端末と通信を試みる。
【０００４】
また、端末は、通信が確立できない場合には、一定の時間を空けた上で、同じプロトコルにて再接続を何度か試みる。すなわち、端末は、一定の時間を空けた上で再接続を何度か試みても接続できず、タイムアウトとなった場合に、フォールバックを行い、別のプロトコルにて接続を試みる。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】”ＲＦＣ５４６１  ＴＣＰ’ｓ  Ｒｅａｃｔｉｏｎ  ｔｏ  Ｓｏｆｔ  Ｅｒｒｏｒｓ”、［ｏｎｌｉｎｅ］、［平成２３年５月１０日検索］、インターネット［ｏｎｌｉｎｅ］（ＵＲＬ：ｈｔｔｐ：／／ｔｏｏｌｓ．ｉｅｔｆ．ｏｒｇ／ｈｔｍｌ／ｒｆｃ５４６１）
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述した手法では、フォールバックが行われるまでに時間がかかる。
【０００７】
開示の実施形態は、上述に鑑みてなされたものであって、適切に通信可能となるフォールバック検知装置、フォールバック検知方法及びフォールバック検知プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
開示するフォールバック検知装置は、１つの態様において、複数のプロトコルに対応する第１の端末によって第２の端末に向けて送信されるパケットを監視する監視部を備える。また、通信の開始を要求する通信開始メッセージが前記複数あるプロトコルのうち特定のプロトコルにて前記第１の端末から前記第２の端末に所定期間内に所定回送信されたとの監視結果が前記監視部により得られた場合に、該通信開始メッセージの送信先となる該第２の端末を識別するための該プロトコルにおける識別情報を所定の記憶装置に格納する格納部を備える。また、前記格納部によって前記所定の記憶装置に格納された識別情報が宛先となる前記通信開始メッセージの送信元となる前記第１の端末について、フォールバックを制御するフォールバック制御部を備える。
【発明の効果】
【０００９】
開示するフォールバック検知装置の１つの態様によれば、適切に通信可能となるという効果を奏する。
【図面の簡単な説明】
【００１０】
【図１】図１は、実施例１におけるフォールバック検知装置を含むシステム構成の一例を示す図である。
【図２】図２は、実施例１におけるフォールバック検知装置の構成の一例を示すブロック図である。
【図３】図３は、実施例１における通信開始メッセージテーブルに記憶されたレコードの一例を示す図である。
【図４】図４は、実施例１におけるＤＮＳパケットテーブルに記憶されたレコードの一例を示す図である。
【図５】図５は、実施例１における内部端末情報テーブルに記憶されたレコードの一例を示す図である。
【図６】図６は、実施例１におけるフォールバックテーブルに記憶されたレコードの一例を示す図である。
【図７】図７は、実施例１において識別情報をフォールバックテーブルに格納するまでの処理の流れの一例を示すシーケンス図である。
【図８】図８は、実施例１におけるフォールバック制御部による処理の一例を示すフローチャートである。
【図９】図９は、フォールバック検知装置による１連の処理を実行するための制御プログラムによる情報処理が、コンピュータを用いて具体的に実現されることを示す図である。
【発明を実施するための形態】
【００１１】
以下に、開示するフォールバック検知装置、フォールバック検知方法及びフォールバック検知プログラムの実施例について、図面に基づいて詳細に説明する。なお、本実施例により開示する発明が限定されるものではない。各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【実施例１】
【００１２】
図１は、実施例１におけるフォールバック検知装置を含むシステム構成の一例を示す図である。図１に示す例では、フォールバック検知装置２００に加えて、内部端末１００と、ルータ３００と、外部端末４００とを併せて示したが、これに限定されるものではない。例えば、フォールバック検知装置２００を含むシステムは、内部端末１００やフォールバック検知装置２００、ルータ３００、外部端末４００以外の他の装置を有しても良い。また、例えば、フォールバック検知装置２００とルータ３００とを統合しても良く、ルータ３００を有さなくても良い。なお、内部端末１００は、「第１の端末」とも称される。外部端末４００は、「第２の端末」とも称される。
【００１３】
また、図１に示す例では、説明の便宜上、内部端末１００が１つあり、外部端末４００が１つある場合を示したが、これに限定されるものではない。例えば、内部端末１００や外部端末４００の数は任意であって良い。
【００１４】
以下では、内部端末１００と、フォークバック検知装置２００と、ルータ３００とがデュアルスタックネットワーク内にあり、外部端末４００が、デュアルスタックネットワーク外にある場合を用いて説明するが、これに限定されるものではない。デュアルスタックネットワークでは、複数のプロトコルが混在して用いられる。例えば、デュアルスタックネットワーク内にある装置は、ＩＰｖ４（Internet  Protocol  version  4）とＩＰｖ６（Internet  Protocol  version  6）との両方のプロトコルが用いられる。なお、以下では、デュアルスタックネットワークにて、ＩＰｖ４とＩＰｖ６とが用いられる場合を用いて説明するが、これに限定されるものではなく、任意の複数のプロトコルが用いられても良い。
【００１５】
内部端末１００は、フォールバック検知装置２００と接続される。内部端末１００は、デュアルスタックネットワーク内にあり、複数のプロトコルに対応する。例えば、内部端末１００は、ＩＰｖ４におけるアドレスとＩＰｖ６におけるアドレスとを有し、ＩＰｖ４とＩＰｖ６とを用いる。以下では、内部端末１００が、ＩＰｖ６を優先して用いる場合を例に説明する。言い換えると、内部端末１００は、ＩＰｖ６を用いて通信を確立できない場合にＩＰｖ４を用いる場合を例に説明する。ただし、これに限定されるものではなく、内部端末１００は、ＩＰｖ４を優先して用いても良い。
【００１６】
内部端末１００は、外部端末４００に向けてパケットを送信する。具体的には、内部端末１００は、通信先となる外部端末４００の識別情報（Query）を要求するＤＮＳクエリ要求を送信し、ＤＮＳクエリ要求に対する応答であるＤＮＳクエリ応答を受信する。例えば、内部端末１００は、外部端末４００のＩＰアドレスを要求するＤＮＳクエリ要求をルータ３００に向けて送信し、ＤＮＳクエリ応答を受信する。例えば、内部端末１００は、外部端末４００と通信を行う場合に、ＩＰｖ４におけるＩＰアドレスを要求するＤＮＳクエリ要求を送信するとともに、ＩＰｖ６におけるＩＰアドレスを要求するＤＮＳクエリ要求を送信する。なお、ＤＮＳクエリ応答は、ＤＮＳレスポンス（Response）とも称する。
【００１７】
より詳細な一例をあげて説明すると、内部端末１００は、ルータ３００に対して、外部端末４００のＦＱＤＮ（Fully  Qualified  Domain  Name、完全修飾ドメイン名）を記載したＤＮＳクエリ要求を送信し、ＤＮＳクエリに記載されたＦＱＤＮに対応するＩＰアドレスが記載されたＤＮＳクエリ応答を受信する。
【００１８】
また、内部端末１００は、予め設定された優先するプロトコルにて、ＤＮＳクエリ応答により受信した識別情報を用いて、通信の開始を要求する通信開始メッセージを外部端末４００に向けて送信する。例えば、内部端末１００は、ＤＮＳクエリ応答に記載されたＩＰｖ６におけるアドレスを送信先としてＴＣＰ−ＳＹＮパケットを送信する。なお、ＴＣＰ−ＳＹＮパケットとは、「ＳＹＮ」のフラグがたったパケットであり、通信を開始する際に送信される。
【００１９】
ここで、内部端末１００は、外部端末４００から応答がない場合には、同一のプロトコルにてＴＣＰ−ＳＹＮパケットの送信を所定回数繰り返す。例えば、内部端末１００は、外部端末４００から応答が得られない場合には、ＴＣＰ−ＳＹＮパケットの送信を３回繰り返す。
【００２０】
なお、以下では、内部端末１００が、同一のプロトコルにて「３」回通信開始メッセージの送信を繰り返す場合を例に説明するが、これに限定されるものではなく、任意の回数であって良い。
【００２１】
また、内部端末１００は、予め設定された優先するプロトコルにて通信開始メッセージを所定回数送信しても、外部端末４００から応答が得られなかった場合には、フォールバックを行う。そして、内部端末１００は、別のプロトコルにて通信開始メッセージを外部端末４００に向けて送信する。例えば、内部端末１００は、ＩＰｖ６にてＴＣＰ−ＳＹＮパケットを３回送信した後にタイムアウトとなると、フォールバックを行い、ＩＰｖ４にて、外部端末４００のＩＰｖ４におけるＩＰｖ４アドレスであるＩＰアドレス「192.168.100.1」を宛先とするＴＣＰ−ＳＹＮパケットを送信する。
【００２２】
また、内部端末１００によるフォールバックは、後述するように、フォールバック検知装置２００による制御によっても制御される。例えば、内部端末１００は、フォールバック検知装置２００からフォールバックする旨のメッセージを受信すると、フォールバックを行う。また、内部端末１００は、フォールバック検知装置２００によってＤＮＳクエリ応答に含まれる識別情報が変更されることで、フォールバックを行わないように制御される。詳細については後述する。
【００２３】
ルータ３００は、フォールバック検知装置２００と外部端末４００と接続される。ルータ３００は、内部端末１００からＤＮＳクエリ要求を受信すると、ＤＮＳクエリ応答を内部端末１００に送信する。つまり、例えば、ルータ３００は、外部端末４００のＩＰアドレスを内部端末１００に送信する。
【００２４】
外部端末４００は、ルータ３００と接続される。外部端末４００は、内部端末１００から通信開始メッセージを受信すると、内部端末１００と通信を行う。なお、内部端末１００により送信された通信開始メッセージは、外部端末４００によって受信されることもあれば、受信されないこともある。例えば、外部端末４００が対応していないプロトコルにて内部端末１００が通信開始メッセージを送信した場合には、外部端末４００によって受信されない。
【００２５】
なお、以下では、説明の便宜上、内部端末１００のＩＰｖ４アドレスが「192.168.1.10/32」であり、ＩＰｖ６アドレスが「2001:db8:1::100/128」である場合を用いて説明する。また、外部端末４００のＩＰｖ４アドレスが「192.168.100.1/32」であり、ＩＰｖ６アドレスが「2001:db8:2::1/128」であり、ＦＱＤＮが「www.example.com」である場合を用いて説明する。ただし、これに限定されるものではなく、任意のＩＰアドレスやＦＱＤＮを用いて良い。
【００２６】
フォールバック検知装置２００について説明する。フォールバック検知装置２００は、以下に詳細に説明するように、複数のプロトコルに対応する内部端末１００によって外部端末４００に向けて送信されるパケットを監視する。また、フォールバック検知装置２００は、通信開始メッセージが内部端末１００から外部端末４００に複数のプロトコルのうち特定のプロトコルにて所定回数送信されたとの監視結果が得られた場合に、通信開始メッセージの送信先となる外部端末４００を識別するための識別情報を所定の記憶装置に格納する。また、フォールバック検知装置２００は、所定の記憶装置に格納された識別情報に基づいて所定のメッセージを送信することで、内部端末１００におけるフォールバックを制御する。
【００２７】
すなわち、フォールバック検知装置２００は、例えば、フォールバックすることになる外部端末４００のアドレスリストを生成し、以後、この生成したアドレスリストに記載されたアドレスへの通信開始メッセージが内部端末１００により送信されると、内部端末１００が直ちにフォールバックを行うように制御する。また、フォールバック検知装置２００は、所定期間内に、特定プロトコルで所定回数の通信開始メッセージを受けたことを契機としてフォールバックが「発生する」ものとみなし、アドレスリストを生成する。より詳細には、フォールバック検知装置２００は、所定期間Ａ内に、特定プロトコルでＮ回目の通信開始メッセージを受けた後に、所定期間Ｂ内に（ＡとＢは同じでも異なっていてもよい）別のプロトコルで通信開始メッセージを受けたことを契機として、フォールバックが「発生した」ものとみなしてアドレスリストを生成する。なお、上述の所定期間Ａと所定期間Ｂとは、同一の期間であっても良く、異なる期間であっても良い。
【００２８】
図２は、実施例１におけるフォールバック検知装置の構成の一例を示すブロック図である。図２に示すように、フォールバック検知装置２００は、記憶部２１０と制御部２２０とを有する。
【００２９】
記憶部２１０は、制御部２２０と接続される。記憶部２１０は、制御部２２０による各種処理に用いるデータを記憶する。記憶部２１０は、例えば、ＲＡＭ（Random  Access  Memory）やＲＯＭ（Read  Only  Memory）、フラッシュメモリ（Flash  Memory）などの半導体メモリ素子、又は、ハードディスクや光ディスクなどである。図２に示す例では、記憶部２１０は、通信開始メッセージテーブル２１１と、ＤＮＳパケットテーブル２１２と、内部端末情報テーブル２１３と、フォールバックテーブル２１４とを有する。
【００３０】
通信開始メッセージテーブル２１１は、内部端末１００によって送信された通信開始メッセージについての情報を記憶する。例えば、通信開始メッセージテーブル２１１は、内部端末１００により送信されたＴＣＰ−ＳＹＮパケットについて、送信元アドレスと宛先アドレスと監視時刻とを含むレコードを記憶する。なお、監視時刻とは、例えば、フォールバック検知装置２００によりＴＣＰ−ＳＹＮパケットが検知された時刻を示す。
【００３１】
図３は、実施例１における通信開始メッセージテーブルに記憶されたレコードの一例を示す図である。図３に示す例では、通信開始メッセージテーブル２１１は、送信元アドレス「2001:db8:1::100/128」と宛先アドレス「2001:db8:2::1/128」と監視時刻「１２：００」とを含むレコードを記憶する。言い換えると、通信開始メッセージテーブル２１１は、「１２：００」に、「2001:db8:1::100/128」から「2001:db8:2::1/128」に送信されたＴＣＰ−ＳＹＮパケットを検知したことを記憶する。なお、通信開始メッセージテーブル２１１に記憶された情報は、後述する制御部２２０により格納されて用いられる。
【００３２】
ＤＮＳパケットテーブル２１２は、ＤＮＳクエリ要求及びＤＮＳクエリ応答に含まれる識別情報を記憶する。図４は、実施例１におけるＤＮＳパケットテーブルに記憶されたレコードの一例を示す図である。図４に示す例では、ＤＮＳパケットテーブル２１２は、「ＦＱＤＮ」と「ＩＰｖ４アドレス」と「ＩＰｖ６アドレス」とを含むレコードを記憶する。
【００３３】
図４に示す例では、ＤＮＳパケットテーブル２１２は、ＦＱＤＮ「www.example.com」とＩＰｖ４アドレス「192.168.100.1/32」とＩＰｖ６アドレス「2001:db8:2::1/128」とを含むレコードを記憶する。なお、ＤＮＳパケットテーブル２１２に記憶されたレコードは、後述する制御部２２０により格納されて用いられる。具体的には、ＤＮＳパケットテーブル２１２は、内部端末１００により送受信されるＤＮＳクエリ要求に含まれるＦＱＤＮと、ＤＮＳクエリ応答に含まれるＩＰｖ４アドレスやＩＰｖ６アドレスが対応付けられた上で、制御部２２０によってレコードとして格納される。
【００３４】
内部端末情報テーブル２１３は、内部端末１００を識別するための識別情報を記憶する。具体的には、内部端末１００は、内部端末１００により用いられるプロトコル各々について、内部端末１００を示す識別情報各々を記憶する。なお、内部端末情報テーブル２１３が事前に内部端末１００の識別情報を対応付けて記憶しておくことで、通信開始メッセージが同一の内部端末１００から送信されたものかどうかを制御部２２０が簡単に把握可能となる。
【００３５】
図５は、実施例１における内部端末情報テーブルに記憶されたレコードの一例を示す図である。図５に示す例では、内部端末情報テーブル２１３は、内部端末１００の「ＩＰｖ４アドレス」と「ＩＰｖ６アドレス」とを含むレコードを記憶する。例えば、内部端末情報テーブル２１３は、ＩＰｖ4アドレス「192.168.1.10/32」とＩＰｖ6アドレス「2001:db8:1::100/128」とを含むレコードを記憶する。
【００３６】
また、内部端末情報テーブル２１３は、内部端末１００が複数ある場合には、複数ある内部端末１００各々について、レコードを記憶する。内部端末情報テーブル２１３に記憶されたレコードは、例えば、予め利用者によって格納される。
【００３７】
フォールバックテーブル２１４は、制御部２２０による処理結果として、外部端末４００の識別情報を記憶する。具体的には、フォールバックテーブル２１４は、内部端末１００の通信先となる外部端末４００を示す識別情報のうち、内部端末１００が通信を確立できなかった通信先を示す識別情報を記憶する。すなわち、フォールバックテーブル２１４は、内部端末１００により通信を確立する際に用いられた識別情報であって、通信を確立できなかった通信先を特定する識別情報を記憶する。言い換えると、フォールバックテーブル２１４は、通信を試みた場合に、内部端末１００がフォールバックを行うことになる識別情報を記憶する。なお、フォールバックテーブル２１４は、「所定の記憶装置」とも称する。言い換えると、フォールバックテーブル２１４は、同一の内部端末１００から同一の外部端末４００に同一のプロトコルにて通信開始メッセージが所定回数送信された場合に、送信先となった外部端末の係るプロトコルにおける識別情報を記憶する。
【００３８】
図６は、実施例１におけるフォールバックテーブルに記憶されたレコードの一例を示す図である。図６に示す例では、フォールバックテーブル２１４は、「2001:db8:2::1/128」を記憶する。すなわち、フォールバックテーブル２１４は、内部端末１００が「2001:db8:2::1/128」に向けて通信開始メッセージを送信した場合、フォールバックを行うことになることを記憶する。つまり、フォールバックテーブル２１４は、内部端末１００が「2001:db8:2::1/128」に向けて通信開始メッセージを送信した場合、通信が確立されない、ということを記憶する。
【００３９】
制御部２２０は、記憶部２１０と接続される。制御部２２０は、各種の処理手順などを規定したプログラムを記憶する内部メモリを有し、種々の処理を制御する。制御部２２０は、例えば、ＡＳＩＣ（Application  Specific  Integrated  Circuit）、ＦＰＧＡ（Field  Programmable  Gate  Array）、ＣＰＵ（Central  Processing  Unit）、ＭＰＵ（Micro  Processing  Unit）などの電子回路である。図２に示す例では、制御部２２０は、監視部２２１と、格納部２２２と、フォールバック制御部２２３とを有する。
【００４０】
監視部２２１は、複数のプロトコルに対応する内部端末１００によって外部端末４００に向けて送信されるパケットを監視する。具体的には、監視部２２１は、内部端末１００による通信を中継することで、内部端末１００により送受信される情報を監視する。より詳細には、監視部２２１は、内部端末１００により送受信されるパケットのうち、通信開始メッセージとＤＮＳクエリ要求、ＤＮＳクエリ応答を監視する。また、監視部２２１は、格納部２２２やフォールバック制御部２２３に監視結果を出力する。
【００４１】
例えば、監視部２２１は、デュアルスタックネットワーク内の内部端末１００から外部端末４００への通信パケットのうち、ＴＣＰ−ＳＹＮパケットやＤＮＳクエリ要求、ＤＮＳクエリ応答を監視する。
【００４２】
より詳細な一例をあげて説明する。監視部２２１は、内部端末１００により送受信されるパケットを取り込み、ＤＮＳクエリ要求、ＤＮＳクエリ応答、又は、ＴＣＰ−ＳＹＮパケットであるかを判定する。ここで、監視部２２１は、取り込んだパケットがＤＮＳクエリ要求、ＤＮＳクエリ応答であると判定した場合には、ＤＮＳクエリ要求やＤＮＳクエリ応答に含まれるＦＱＤＮやＩＰｖ４アドレス、ＩＰｖ６アドレスを対応付けてＤＮＳパケットテーブル２１２に格納する。また、監視部２２１は、取り込んだパケットがＴＣＰ−ＳＹＮパケットであると判定した場合には、取り込んだＴＣＰ−ＳＹＮパケットの送信元アドレスと宛先アドレスと監視時刻とを対応付けて通信開始メッセージテーブル２１１に格納する。
【００４３】
例えば、監視部２２１は、ＤＮＳクエリ要求、ＤＮＳクエリ応答を取り込み、通信先となる外部端末４００のＦＱＤＮ「www.example.com」とＩＰｖ４アドレス「192.168.100.1」とＩＰｖ６アドレス「2001:db8:2::1」とを取得し、対応付けてＤＮＳパケットテーブル２１２に格納する。また、例えば、監視部２２１は、ＴＣＰ−ＳＹＮパケットを取り込み、送信元アドレス「2001:db8:1::100/128」と宛先アドレス「2001:db8:2::1/128」と監視時刻「１２：０２」とを含むレコードを通信開始メッセージテーブル２１１に格納する。
【００４４】
また、監視部２２１は、通信開始メッセージテーブル２１１に新たなレコードを格納すると、送信元アドレスと宛先アドレスとが同一となるレコードが一定時間内に所定数格納されているかを判定し、所定数格納されていると判定すると、格納されていると判定されたレコードを格納部２２２に出力する。つまり、監視部２２１は、通信開始メッセージが同一の内部端末１００から同一の外部端末４００に同一のプロトコルにて所定回数送信されているか否かを判定する。言い換えると、監視部２２１は、通信開始メッセージが同一の内部端末１００から外部端末４００に、複数のプロトコルのうち特定のプロトコルにて所定回数送信されたかを判定する。
【００４５】
図３を例に説明する。ここで、監視時刻が「１２：０２」となるレコードを格納した場合における処理を例として説明する。また、監視部２２１が、所定回として「３」を用いる場合を例に説明する。また、監視部２２１が一定時間として「５分」を用いる場合を用いて説明する。この場合、監視部２２１は、送信元アドレス「2001:db8:1::100/128」と宛先アドレス「2001:db8:2::1/128」と監視時刻「１２：０２」とを含むレコードを通信開始メッセージテーブル２１１に格納すると、宛先アドレス「2001:db8:2::1/128」と「送信元アドレス「2001:db8:1::100/128」」と監視時刻「１２：００」とを含み、監視時刻が「１２：０２」から「５分」以内となるレコードが３以上あるか否かを判定する。図３に示す例では、３つのレコードがあるため、監視部２２１は、あると判定し、例えば、送信元アドレス「2001:db8:1::100/128」と宛先アドレス「2001:db8:2::1/128」と監視時刻「１２：０２」とを含むレコードを格納部２２２に出力する。なお、上述して説明では、監視時刻が含まれたレコ−ドを出力する場合例に説明したが、これに限定されるものではなく、監視時刻を含めなくても良い。
【００４６】
なお、上述した説明では、監視部２２１が、所定回として「３」を用いる場合を例に説明したが、これに限定されるものではなく、任意の数を用いて良い。また、上述した説明では、監視部２２１が一定時間として「５分」を用いる場合を用いて説明したが、これに限定されるものではなく、任意の時間を用いて良い。また、上述した説明では、監視部２２１は、通信開始メッセージテーブル２１１にレコードを格納した場合に、送信元アドレスと宛先アドレスとが同一となるレコードが所定数あるか否かを判定する場合を例に説明したが、これに限定されるものではなく、任意のタイミングにて判定しても良い。
【００４７】
また、以下では、監視部２２１が、所定回数通信開始メッセージが送信されたかを判定し、送信されたと判定された場合にレコードを格納部２２２に出力する場合を用いて説明するが、これに限定されるものではない。例えば、監視部２２１は、所定回数通信開始メッセージが送信されたかを判定しなくても良い。この場合、例えば、後述する格納部２２２が通信開始メッセージテーブル２１１に基づいて判定する。
【００４８】
格納部２２２は、通信の開始を要求する通信開始メッセージが内部端末１００から外部端末４００に所定回数送信されたとの監視結果が監視部２２１により得られた場合に、通信開始メッセージの送信先となる外部端末４００を識別するための識別情報をフォールバックテーブル２１４に格納する。例えば、格納部２２２は、監視部２２１により出力されたレコードに含まれる宛先アドレスをフォールバックテーブル２１４に格納する。図３に示す例では、格納部２２２は、宛先アドレス「2001:db8:2::1/128」をフォールバックテーブル２１４に格納する。
【００４９】
すなわち、格納部２２２は、同一の送信元アドレスから同一の宛先アドレスに対する同一プロトコルでの通信開始メッセージを一定の時間内に所定回検知すると、内部端末１００にフォールバックが発生するとみなし、宛先アドレスをフォールバックテーブル２１４に格納する。言い換えると、監視部２２１は、通信開始メッセージが内部端末１００から外部端末４００に、複数のプロトコルのうち特定のプロトコルにて所定回数送信されたことを検知すると、フォールバックが発生するとみなして宛先アドレスをフォールバックテーブル２１４に格納する。すなわち、格納部２２２は、フォールバックテーブル２１４を引き起こす契機となった外部端末４００を示す識別情報を格納する。
【００５０】
また、格納部２２２は、通信開始メッセージが同一の内部端末１００から同一の外部端末４００に同一のプロトコルにて所定回数送信されたとの監視結果が監視部２２１により得られた後に、通信開始メッセージの送信に用いられたプロトコルとは別のプロトコルにて同一の外部端末４００に通信開始メッセージが送信された場合に初めて、識別情報をフォールバックテーブル２１４に格納しても良い。なお、格納部２２２により格納される宛先アドレスは、別のプロトコルにおける識別情報ではなく、所定回数送信されたプロトコルにおける宛先アドレスである。
【００５１】
例えば、格納部２２２は、同一の送信元アドレスから同一の宛先アドレスに対するＴＣＰ−ＳＹＮパケットがＩＰｖ６にて所定回送信された後に、ＩＰｖ４にてＴＣＰ−ＳＹＮパケットが送信されたことを更に検知した場合に初めて、ＩＰｖ６における外部端末４００を示す宛先アドレスをフォールバックテーブル２１４に格納しても良い。
【００５２】
詳細な一例を用いて説明する。格納部２２２は、監視部２２１から受信したレコードに含まれる宛先アドレスに対応するＦＱＤＮを含むレコードをＤＮＳパケットテーブル２１２から取得する。そして、格納部２２２は、取得したレコードに含まれるＩＰアドレスのうち、監視部２２１により所定回数検知されたＴＣＰ−ＳＹＮパケットのプロトコルとは別のプロトコルについてのＩＰアドレスを取得する。例えば、図３に示す例では、ＩＰｖ６におけるＴＣＰ−ＳＹＮパケットが検知されており、格納部２２２は、ＩＰｖ４におけるＩＰアドレスを取得する。そして、格納部２２２は、通信開始メッセージテーブル２１１から検索することで、監視部２２１により所定回数のＴＣＰ−ＳＹＮパケットが検知されてから一定の時間内に、取得したＩＰアドレスを宛先とするＩＰｖ４にて送信されたＴＣＰ−ＳＹＮパケットの有無を判定する。つまり、格納部２２２は、ＩＰｖ６にて一定時間内に同一送信元から同一宛先へと所定回数通信開始メッセージが送信された後に、一定時間内に、ＩＰｖ４にて同一宛先に対して通信開始メッセージが送信されたかを判定する。ここで、格納部２２２は、送信されたと判定した場合には、フォールバックが発生したとみなし、監視部２２１から受信したレコードに含まれるＩＰｖ６における宛先アドレスをフォールバックテーブル２１４に格納する。
【００５３】
このように、格納部２２２は、通信開始メッセージの送信に用いられたプロトコルとは別のプロトコルにて同一の外部端末４００に通信開始メッセージが送信されたかを更に判定した場合に、フォールバックが発生したとみなすことで、フォールバックの発生の検知精度を向上することが可能となる。
【００５４】
すなわち、別のプロトコルにて同一の外部端末４００に通信開始メッセージを送信する内部端末１００を限定しない結果、言い換えると、最初のプロトコルで通信開始メッセージを送った内部端末１００とは別の内部端末１００が通信開始メッセージを送信してもフォールバックであるとみなして検知することが可能となる。
【００５５】
例えば、最初に同一の内部端末１００から同一の外部端末４００へＩＰｖ６で通信開始メッセージが３回送信され、その後、別の内部端末１００から同一の外部端末４００へＩＰｖ４で通信開始メッセージが送信された場合であっても、フォールバックとして検知することが可能となる。
【００５６】
この場合、仮に最初のＩＰｖ６における３回目の通信開始メッセージにて通信が確立された場合であってもフォールバックとみなすことになるが、経験的に３回目以降で通信が確立する確率が低い場合には、有効となる。また、フォールバック検知装置２００は、内部端末１００の所定のプロトコルの識別情報と別のプロトコルの識別情報（ＩＰｖ６のアドレスとＩＰｖ４のアドレス）の対応関係の情報を記憶していない状況や不明な状況であっても、フォールバックの検知が可能となる。
【００５７】
また、格納部２２２は、更に、同一の送信元から同一の宛先に別のプロトコルにて通信開始メッセージが送信された場合に初めて、識別情報をフォールバックテーブル２１４に格納しても良い。具体的には、格納部２２２は、通信開始メッセージが内部端末１００から外部端末４００に所定回数送信されたとの監視結果が監視部２２１により得られた後に、通信開始メッセージの送信に用いられたプロトコルとは別のプロトコルにて、同一の内部端末１００から同一の外部端末４００に通信開始メッセージが送信されたとの監視結果が監視部２２１により得られた場合に初めて、識別情報を記憶部２１０に格納しても良い。なお、格納部２２２により格納される宛先アドレスは、別のプロトコルにて送信される前に、所定回数送信されたプロトコルにおける宛先アドレスである。この場合、内部端末１００を問わない場合と比較して、高精度にフォールバックを検知可能となる。
【００５８】
この場合、格納部２２２は、更に、監視部２２１から受信したレコードに含まれる送信元アドレスに対応する別のプロトコルの送信元アドレスを、内部端末情報テーブル２１３から取得する。例えば、内部端末１００がＩＰｖ６にてＴＣＰ−ＳＹＮパケットを送信していた場合には、格納部２２２は、監視部２２１から受信したレコードに含まれるＩＰｖ６のＩＰアドレスに対応付けられたＩＰｖ４のＩＰアドレスを内部端末情報テーブル２１３から取得する。そして、格納部２２２は、通信開始メッセージテーブル２１１から検索することで、監視部２２１により所定回数のＴＣＰ−ＳＹＮパケットが検知されてから一定の時間内に、同一の外部端末４００を宛先とするＩＰｖ４にて送信されたＴＣＰ−ＳＹＮパケットであって、内部端末情報テーブル２１３から取得したＩＰｖ４のＩＰアドレスが送信元アドレスとなるＴＣＰ−ＳＹＮパケットの有無を判定する。ここで、格納部２２２は、あると判定した場合には、フォールバックが発生したとみなし、監視部２２１から受信したレコードに含まれる宛先アドレスをフォールバックテーブル２１４に格納する。
【００５９】
フォールバック制御部２２３は、格納部２２２によってフォールバックテーブル２１４に格納された識別情報が宛先となる通信開始メッセージの送信元となる内部端末１００について、フォールバックを制御する。
【００６０】
具体的には、フォールバック制御部２２３は、フォールバックテーブル２１４に格納されたＩＰアドレスにより識別される第２の端末と、係るＩＰアドレスのプロトコルでの通信の開始を要求する通信開始メッセージが送信される場合に、内部端末１００に対して、内部端末１００をフォールバックさせるためのメッセージを送信する。言い換えると、フォールバック制御部２２３は、内部端末１００により送信された通信開始メッセージの宛先が、フォールバックテーブルに格納された識別情報と一致するかを判定し、一致すると判定した場合に、内部端末１００をフォールバックさせるためのメッセージを送信する。
【００６１】
例えば、フォールバック制御部２２３は、デュアルスタックネットワーク内の内部端末１００から外部端末４００への通信パケットのうちＴＣＰ−ＳＹＮパケットを常に監視し、ＴＣＰ−ＳＹＮパケットの宛先アドレスがフォールバックテーブル２１４に格納されているかを判定する。そして、フォールバック制御部２２３は、格納されていると判定した場合に、ＴＣＰ−ＳＹＮパケットの送信元となる内部端末１００に対し、ＲＳＴフラグが設定されたＴＣＰパケットであるＴＣＰ−ＲＳＴパケットを送信する。なお、フォールバック制御部２２３は、ＴＣＰ−ＳＹＮパケットから送信元を示すＩＰアドレスとＴＣＰセッション情報とを取得し、取得した情報に基づいてＴＣＰ−ＲＳＴパケットを生成する。例えば、フォールバック制御部２２３は、ＴＣＰ−ＲＳＴにおいて、ＴＣＰ−ＲＳＴパケットの宛先アドレスを送信元アドレスとし、ＴＣＰ−ＲＳＴパケットの送信元ポートを宛先ポートとし、ＴＣＰ−ＲＳＴパケットの宛先ポートを送信元ポートとする。
【００６２】
すなわち、フォールバック制御部２２３は、フォールバックとみなした通信の送信先に内部端末１００によって通信開始メッセージが送信されると、送信元となる内部端末１００にメッセージを送信することで、通信要求をしても通信確立できずにフォールバックしてしまうような宛先に通信要求を試みる内部端末１００をフォールバックさせる。この結果、例えば、内部端末１００のタイムアウトを待たずに通信ＮＧとすることが可能となる。
【００６３】
なお、その後、ＴＣＰ−ＲＳＴパケットを受信した内部端末１００は、フォールバックを行った上で、通信開始メッセージを外部端末４００に送信する。
【００６４】
なお、上述した説明では、フォールバック制御部２２３が、ＴＣＰ−ＲＳＴパケットを送信する場合を例に説明したが、これに限定されるものではなく、任意のパケットをメッセージとして出力しても良い。例えば、フォールバック制御部２２３は、ＩＣＭＰ（Internet  Control  Message  Protocol）（ｖ６）のパケットを送信することで、ＴＣＰ−ＳＹＮパケットの送信先となる外部端末４００のアドレスには到達不能である旨を内部端末１００に通知しても良い。例えば、「destination  unreachable」と記載されたＩＣＭＰのパケットを送信しても良い。
【００６５】
［識別情報を格納する処理］
図７は、実施例１において識別情報をフォールバックテーブルに格納するまでの処理の流れの一例を示すシーケンス図である。以下では、ＩＰｖ４アドレスが「192.168.1.10/32」であり、ＩＰｖ６アドレスが「2001:db8:1::100/128」である内部端末１００が、通信開始メッセージを送信する場合を用いて説明する。また、以下では、ＩＰｖ４アドレスが「192.168.100.1/32」であり、ＩＰｖ６アドレスが「2001:db8:2::1/128」であり、ＦＱＤＮが「www.example.com」である外部端末４００に向けて内部端末１００が通信開始メッセージを送信する場合を用いて説明する。
【００６６】
また、以下では、フォールバック検知装置２００が、ＩＰｖ６のＴＣＰ−ＳＹＮパケットを３回検知した後に、同一の内部端末１００より同一の宛先に対してＩＰｖ４のＴＣＰ−ＳＹＮパケットが送信されたことを検知することで、フォールバックが発生したとみなす場合を例に説明する。また、以下では、内部端末１００がＩＰｖ６にてＴＣＰ−ＳＹＮパケットを送信したとしても、外部端末４００から応答が得られない場合を用いて説明する。
【００６７】
図７に示すように、内部端末１００は、外部端末４００のＦＱＤＮであるＤＮＳクエリを送信し、ＤＮＳクエリ要求に対するＤＮＳクエリ応答を受信することで、外部端末４００のＩＰアドレスを取得する（ステップＳ１０１）。すなわち、内部端末１００は、ＦＱＤＮ「ww.example.com」となる外部端末４００へとＴＣＰ通信を行うため、ルータ３００に対し、外部端末４００の名前解決をＩＰｖ４及びＩＰｖ６の両方で行う。
【００６８】
例えば、内部端末１００は、ＦＱＤＮ「www.example.com」に対応するＩＰｖ４のＩＰアドレスを取得するためのＤＮＳクエリをルータ３００に向けて送信する（ステップＳ１０１１）。また、例えば、内部端末１００は、ＦＱＤＮ「www.example.com」に対応するＩＰｖ６のＩＰアドレスを取得するためのＤＮＳクエリをルータ３００に向けて送信する（ステップＳ１０１２）。また、その後、内部端末１００は、ＦＱＤＮ「www.example.com」に対応するＩＰｖ４のＩＰアドレス「192.168.100.1」が記載されたＤＮＳクエリ応答をルータ３００から受信する（ステップＳ１０１３）。また、内部端末１００は、ＦＱＤＮ「www.example.com」に対応するＩＰｖ６のＩＰアドレス「2001:db8:2::1/128」が記載されたＤＮＳクエリ応答をルータ３００から受信する（ステップＳ１０１４）。
【００６９】
ここで、フォールバック検知装置２００の監視部２２１は、内部端末１００により送受信されるＤＮＳパケットを監視することで、通信先となる外部端末４００のＦＱＤＮ「www.example.com」とＩＰｖ４アドレス「192.168.100.1」とＩＰｖ６アドレス「2001:db8:2::1/128」とを取得し、対応付けてＤＮＳパケットテーブル２１２に格納する（ステップＳ１０２）。
【００７０】
すなわち、監視部２２１は、ＤＮＳパケットを監視し、ＦＱＤＮ「www.example.com」が持つＩＰアドレスが「192.168.100.1」と「2001:db8:1::100/128」との２つのアドレスを持つという情報をＤＮＳパケットテーブル２１２に格納する。
【００７１】
具体的には、監視部２２１は、内部端末１００により送受信されるパケットを取り込み、ＤＮＳクエリ要求、ＤＮＳクエリ応答、又は、ＴＣＰ−ＳＹＮパケットであるかを判定する。ステップＳ１０２に示す場合、監視部２２１は、ＤＮＳクエリ要求又はＤＮＳクエリ応答と判定すると、ＤＮＳクエリ要求やＤＮＳクエリ応答に含まれるＦＱＤＮやＩＰｖ４アドレス、ＩＰｖ６アドレスを対応付けてＤＮＳパケットテーブル２１２に格納する。
【００７２】
その後、内部端末１００は、外部端末４００とＩＰｖ６にてＴＣＰ通信を行うため、外部端末４００のＩＰｖ６アドレス「2001:db8:2::1/128」に対してＴＣＰ−ＳＹＮパケットを送信する（ステップＳ１０３）。ここで、内部端末１００は、外部端末４００から応答が得られない結果、３回ＴＣＰ−ＳＹＮパケットを送信した後にタイムアウトする。
【００７３】
例えば、内部端末１００は、宛先を「2001:db8:2::1/128」とする１回目のＴＣＰ−ＳＹＮパケットを送信し（ステップＳ１０３１）、宛先を「2001:db8:2::1/128」とする２回目のＴＣＰ−ＳＹＮパケットを送信し（ステップＳ１０３２）、宛先を「2001:db8:2::1/128」とする３回目のＴＣＰ−ＳＹＮパケットを送信する（ステップＳ１０３３）。なお、ここで、内部端末１００により送信されるＴＣＰ−ＳＹＮパケットの送信元アドレスは、「2001:db8:1::100/128」となる。
【００７４】
ここで、フォールバック検知装置２００の監視部２２１は、内部端末１００によって送信されるＴＣＰ−ＳＹＮパケットを監視することで、内部端末１００によって送信されたＩＰｖ６アドレス「2001:db8:2::1/128」を宛先とするＴＣＰ−ＳＹＮパケットについて、の送信元アドレスと宛先アドレスと監視時刻とを含むレコードを、通信開始メッセージテーブル２１１に格納する（ステップＳ１０４）。また、この際、例えば、監視部２２１は、通信開始メッセージテーブル２１１に新たなレコードを格納すると、送信元アドレスと宛先アドレスとが同一となるレコードが一定時間内に所定数格納されているかを判定し、所定数格納されていると判定すると、格納されていると判定されたレコードを格納部２２２に出力する。
【００７５】
そして、内部端末１００は、ＩＰｖ６のＴＣＰ通信がタイムアウトした結果、ＩＰｖ４でＴＣＰ通信を行うため、外部端末４００のＩＰｖ４アドレス「192.168.100.1/32」を宛先とするＴＣＰ−ＳＹＮパケットを送信する（ステップＳ１０５）。なお、ここで、内部端末１００により送信されるＴＣＰ−ＳＹＮパケットの送信元アドレスは、「2001:db8:1::100/128」となる。
【００７６】
ここで、通信開始メッセージが内部端末１００から外部端末４００に所定回数送信されたとの監視結果が監視部２２１により得られた後に、通信開始メッセージの送信に用いられたプロトコルとは別のプロトコルにて同一の外部端末４００に通信開始メッセージが送信されたため、フォールバック検知装置２００の格納部２２２は、フォールバックが発生するとみなし、監視部２２１により出力されたレコードに含まれ宛先アドレスをフォールバックテーブル２１４に格納する（ステップＳ１０６）。例えば、格納部２２２は、宛先アドレス「2001:db8:2::1/128」をフォールバックテーブル２１４に格納する。
【００７７】
なお、上記の処理手順は、上記の順番に限定されるものではなく、処理内容を矛盾させない範囲で適宜変更しても良い。
【００７８】
［フォールバック制御部による処理］
図８は、実施例１におけるフォールバック制御部による処理の一例を示すフローチャートである。
【００７９】
図８に示すように、フォールバック制御部２２３は、内部端末１００により送信された通信開始メッセージの宛先が、フォールバックテーブル２１４に格納された識別情報と一致するかを判定する（ステップＳ２０１）。ここで、フォールバック制御部２２３は、一致したと判定した場合には（ステップＳ２０１肯定）、内部端末１００をフォールバックさせるためのメッセージを生成する（ステップＳ２０２）。例えば、フォールバック制御部２２３は、ＴＣＰ−ＲＳＴパケットを生成する。
【００８０】
そして、フォールバック制御部２２３は、内部端末１００に送信する（ステップＳ２０３）。この結果、内部端末１００は、通信が確立されないプロトコルにて通信開始メッセージの送信を繰り返すのではなく、すぐにフォールバックする。
【００８１】
一方、フォールバック制御部２２３は、一致しなかったと判定した場合には（ステップＳ２０１否定）、そのまま処理を終了する。なお、その後、フォールバック制御部２２３は、取り込んだ通信開始メッセージをそのまま外部端末４００に転送する。
【００８２】
［実施例１の効果］
上述したように、実施例１によれば、内部端末１００によって外部端末４００に向けて送信されるパケットを監視する。また、通信開始メッセージが複数あるプロトコルのうち特定のプロトコルにて所定期間内に所定回数外部端末４００に送信されたとの監視結果が得られた場合に、通信開始メッセージの送信先となる外部端末４００を識別するための識別情報をフォールバックテーブル２１４に格納する。また、フォールバックテーブル２２４に格納された識別情報が宛先となる通信開始メッセージの送信元となる内部端末１００について、フォールバックを制御する。この結果、通信の確立に要する時間を短縮可能となる。例えば、フォールバックを行うまでの時間が短縮することができ、適切に通信可能となる。
【００８３】
すなわち、実施例１によれば、例えば、内部端末１００がＴＣＰ通信をする際に用いるＴＣＰ−ＳＹＮパケットを監視することでフォールバックの発生を推測する。つまり、実施例１では、その宛先に対してどちらかのプロトコル（ＩＰｖ４あるいはＩＰｖ６）で接続できないことを検知する。その上で、フォールバック検知した宛先に対して、それ以降の通信を監視し、特定の処理を行うことで、内部端末１００が迅速にフォールバックをすることになる。なお、特定の処理とは、例えば、内部端末１００にＴＣＰ−ＲＳＴパケットを送信したり、ＩＣＭＰエラーを送信したりすることが該当する。
【００８４】
言い換えると、フォールバックとみなすと、通信を確立できない外部端末４００のアドレスリストを生成して記憶しておき、生成したアドレスリストに基づいて、内部端末１００を強制的にフォールバックさせるための処理を行う。つまり、リストの中にはない外部端末４００に最初にアクセスする内部端末１００は、往々にしてフォールバックする可能性が高いと考えられるが、この経験をリスト化していくことで、次に同じ又は別の内部端末１００が同じプロトコルにて外部端末４００にアクセスしようとした場合に、対処可能となる。
【００８５】
この結果、例えば、特定のデュアルスタックネットワーク環境において端末のＴＣＰ通信のフォールバックを検知することにより、特定のデュアルスタックネットワーク内の端末から特定の宛先に対し、ＩＰｖ４あるいはＩＰｖ６を利用した通信ができないことを検知することができる。また、例えば、検知した情報を元にその後のネットワーク内の端末のＴＣＰ通信が特定の宛先に対して通信不能なプロトコル（ＩＰｖ４あるいはＩＰｖ６）を利用して通信しようとした際に、強制的に通信可能なプロトコルにフォールバックさせることで迅速に通信が可能となる。
【００８６】
また、実施例１によれば、格納部２２２は、通信開始メッセージが内部端末１００から外部端末４００に特定のプロトコルにて所定回数送信されたとの監視結果が監視部２２１により得られた後に、通信開始メッセージの送信に用いられた特定のプロトコルとは別のプロトコルにて外部端末４００に通信開始メッセージが送信されたとの監視結果が監視部２２１により得られた場合に、識別情報を記憶部２１０に格納する。すなわち、例えば、ＩＰｖ６で所定回数の通信開始メッセージを観測した後に、ＩＰｖ４で同一の外部端末４００に対して通信開始メッセージを確認すると、ＩＰｖ４にて送信された通信開始メッセージの送信元が同一の内部端末１００かどうかを気にすることなく、フォールバックと検知する。この結果、特定のプロトコルとは別のプロトコルにて外部端末４００に通信開始メッセージが送信された場合にフォールバックと検知することで、フォールバックの発生を高精度にて検知可能となる。
【００８７】
また、実施例１によれば、格納部２２２は、通信開始メッセージが内部端末１００から外部端末４００にプロトコルにて所定回数送信されたとの監視結果が監視部２２１により得られた後に、通信開始メッセージの送信に用いられたプロトコルとは別のプロトコルにて、内部端末１００から外部端末４００に通信開始メッセージが送信されたとの監視結果が監視部２２１により得られた場合に、識別情報を記憶部２１０に格納する。すなわち、例えば、ＩＰｖ６で所定回数の通信開始メッセージを観測した後に、ＩＰｖ４で同一の外部端末４００に対して通信開始メッセージを確認すると、内部端末情報を利用することで、ＩＰｖ６とＩＰｖ４とにおいて送信された通信開始メッセージが同一の内部端末１００から発信されたものかどうかを判断した上で、フォールバックと検知することで、フォールバックの発生を高精度にて検知可能となる。
【００８８】
また、実施例１によれば、フォールバック制御部２２３は、記憶部２１０に格納された識別情報により識別される外部端末４００と該識別情報のプロトコルでの通信の開始を要求する通信開始メッセージが送信されたとの監視結果が得られた場合に、通信開始メッセージの送信元となる内部端末１００に対して、内部端末１００をフォールバックさせるためのメッセージを送信する。この結果、内部端末１００にすみやかにフォールバックさせることが可能となる。
【００８９】
また、実施例１によれば、内部端末１００は、複数のプロトコルに対応するデュアルスタックネットワーク内に接続された端末であって、内部端末１００は、デュアルスタックネットワーク外に接続された端末となる。この結果、デュアルスタックネットワーク内に接続された内部端末１００について、通信が確立できないプロトコルを用いて通信の確立を試みた場合にすみやかにフォールバックさせることが可能となる。
【００９０】
この結果、閉域網内において、広域網向けのパケットで通信可能な端末がどの端末で、広域網向けのパケットで通信不可能な端末がどの端末であるかが予めわかっていない状況であったとしても、格納部２２２によってフォールバックテーブル２１４に識別情報が格納されて蓄積される結果、対応可能となる。
【実施例２】
【００９１】
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、その他の実施例にて実施されても良い。そこで、以下では、その他の実施例を示す。
【００９２】
［フォールバック制御部］
例えば、フォールバック制御部２２３は、記憶部２１０に格納された識別情報を含むＤＮＳクエリ応答が得られたとの監視結果が監視部２２１により得られた場合に、ＤＮＳクエリ応答に含まれる識別情報を削除した上で内部端末１００に送信しても良い。また、同様に、フォールバック制御部２２３は、フォールバックテーブル２１４に格納された識別情報を要求するＤＮＳクエリ要求が得られたとの監視結果が監視部２２１により得られた場合に、識別情報を含まないＤＮＳクエリ応答を生成した上で内部端末１００に送信しても良い。
【００９３】
すなわち、格納部２２２は、ＤＮＳクエリ応答に記載される外部端末４００の識別情報に対応付けて、内部端末１００がフォールバックを行うことになる外部端末４００の通信を行う際に用いられる識別情報を記憶する。例えば、格納部２２２は、外部端末４００のＵＲＬやＦＱＤＮに対応付けて、ＩＰアドレスをフォールバックテーブル２１４に格納する。その上で、フォールバック制御部２２３は、フォールバック制御部２２３に記憶されたＵＲＬやＦＱＤＮについてのＩＰアドレスを要求するＤＮＳクエリ要求が得られたとの監視結果が監視部２２１により得られた場合に、フォールバックテーブル２１４に格納されたＩＰアドレスがＤＮＳクエリ応答にて内部端末１００に送信されないようにする。
【００９４】
例えば、フォールバック制御部２２３は、no  errorフラグを立ててAnswersを空にしたＤＮＳクエリ応答を生成しても良く、nxdomainフラグを立てたＤＮＳクエリ応答を生成しても良い。また、例えば、フォールバック制御部２２３は、ＤＮＳクエリ応答を内部端末１００に返さなくても良い。この結果、内部端末１００には、フォールバックすることになる外部端末４００のＩＰアドレスが通知されないこととなり、内部端末１００におけるフォールバックを防止可能となる。
【００９５】
例えば、内部端末１００は、外部端末４００と通信を行う場合に、ＩＰｖ４におけるＩＰアドレスを要求するＤＮＳクエリ要求を送信するとともに、ＩＰｖ６におけるＩＰアドレスを要求するＤＮＳクエリ要求を送信する。ここで、外部端末４００のＩＰｖ６におけるＩＰアドレスがフォールバックテーブル２１４に格納されている場合を用いて説明する。言い換えると、外部端末４００とＩＰｖ６にて通信を試みると、内部端末１００が、フォールバックを行うことになる場合を用いて説明する。この場合、フォールバック制御部２２３は、外部端末４００のＩＰｖ６が要求されているＤＮＳクエリ要求については、フォールバックテーブル２１４に格納されたＩＰアドレスと一致することから、ＤＮＳクエリ応答を内部端末１００に返さなかったり、nxdomainフラグを立てたＤＮＳクエリ応答を生成して返したりする。一方、フォールバック制御部２２３は、外部端末４００のＩＰｖ４が要求されているＤＮＳクエリ要求については、フォールバックテーブル２１４に格納されたＩＰアドレスと一致しないことから、そのまま返信する。この結果、内部端末１００は、ＩＰｖ６ではなく、最初からＩＰｖ４を用いて、外部端末４００と通信を試みることになる。この結果、内部端末１００がフォールバックを起こすことを防止することが可能である。つまり、そもそも、内部端末１００にフォールバックが起きないようにすることが可能となる。
【００９６】
また、上述した説明では、フォールバック制御部２２３がＤＮＳクエリ応答やＤＮＳクエリ要求について処理を行う場合を例に説明したが、これに限定されるものではない。例えば、ルータ３００が、フォールバック検知装置２００のフォールバックテーブル２１４を参照した上で、フォールバックが発生するＩＰアドレスを取得できないようにしたＤＮＳクエリ応答を送信しても良い。
【００９７】
［フォールバック］
また、例えば、上述の実施例では、内部端末１００が、ＩＰｖ６からＩＰｖ４にフォールバックする場合を例に説明したが、これに限定されるものではなく、ＩＰｖ４からＩＰｖ６にフォールバックしても良く、任意のプロトコルから別のプロトコルにフォールバックしても良い。
【００９８】
［フォールバック制御部］
また、フォールバック制御部２２３は、格納部２２２によって識別情報がフォールバックテーブル２１４に格納されると、直ちに処理を行っても良い。例えば、格納部２２２によって識別情報が格納されることとなった送信元となる内部端末１００に対して、ＴＣＰ−ＲＳＴパケットを送信しても良い。
【００９９】
また、例えば、フォールバック制御部２２３は、内部端末１００による「所定回数」回目の通信開始メッセージの送信が確認されたことを契機として、内部端末１００に対して、即フォールバックを行う旨のメッセージを送信しても良い。
【０１００】
［フォールバックテーブル］
また、例えば、フォールバックテーブル２１４に、通信先となる外部端末４００を示す識別情報に加えて、送信元となる内部端末１００を示す識別情報を更に記憶しておいても良い。この場合、フォールバック制御部２２３は、フォールバックテーブル２１４に記憶された外部端末４００を示す識別情報と内部端末１００を示す識別情報の組み合わせと、内部端末１００により送信された通信開始メッセージとが一致する場合に、ＴＣＰ−ＲＳＴパケットを送信しても良い。
【０１０１】
［システム構成］
また、本実施例において説明した各処理のうち、自動的に行われるものとして説明した処理の全部又は１部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部又は１部を公知の方法で自動的に行うこともできる。この他、上述文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については（図１〜図８）、特記する場合を除いて任意に変更することができる。
【０１０２】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部又は１部を、各種の負荷や使用状況などに応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。例えば、フォールバック検知装置２００とルータ３００とを統合して１つの装置としても良く、フォールバックテーブル２１４を外部装置としてネットワーク経由でフォールバック検知装置２００と接続されるようにしても良い。
【０１０３】
また、例えば、フォールバックの発生を検知して識別情報をフォールバックテーブル２１４に格納する装置と、フォールバックテーブル２１４に格納された情報に基づいて内部端末１００におけるフォールバックを制御する装置とが別装置であっても良い。すなわち、例えば、ＴＣＰ−ＲＳＴパケットやＩＣＭＰパケットを送信する装置を、フォールバックテーブル２１４にＩＰアドレスを格納する装置と別装置としても良い。
【０１０４】
［プログラム］
図９は、フォールバック検知装置による１連の処理を実行するための制御プログラムによる情報処理が、コンピュータを用いて具体的に実現されることを示す図である。図９に例示するように、コンピュータ３０００は、例えば、メモリ３０１０と、ＣＰＵ（Central  Processing  Unit）３０２０と、ネットワークインタフェース３０７０とを有する。コンピュータ３０００の各部はバス３１００によって接続される。
【０１０５】
メモリ３０１０は、図９に例示するように、ＲＯＭ３０１１及びＲＡＭ３０１２を含む。ＲＯＭ３０１１は、例えば、ＢＩＯＳ（Basic  Input  Output  System）等のブートプログラムを記憶する。
【０１０６】
ここで、図９に例示するように、ハードディスクドライブ３０８０は、例えば、ＯＳ３０８１、アプリケーションプログラム３０８２、プログラムモジュール３０８３、プログラムデータ３０８４を記憶する。すなわち、開示の技術に係る制御プログラムは、コンピュータによって実行される指令が記述されたプログラムモジュール３０８３として、例えばハードディスクドライブ３０８０に記憶される。具体的には、上記実施例で説明した制御部２２０の各部と同様の情報処理を実行する手順各々が記述されたプログラムモジュールが、ハードディスクドライブ３０８０に記憶される。
【０１０７】
また、上記実施例で説明した記憶部２１０の各テーブルに記憶されるデータのように、フォールバック検知プログラムによる情報処理に用いられるデータは、プログラムデータ３０８４として、例えばハードディスクドライブ３０８０に記憶される。そして、ＣＰＵ３０２０が、ハードディスクドライブ３０８０に記憶されたプログラムモジュール３０８３やプログラムデータ３０８４を必要に応じてＲＡＭ３０１２に読み出し、各種の手順を実行する。
【０１０８】
なお、フォールバック検知プログラムに係るプログラムモジュール３０８３やプログラムデータ３０８４は、ハードディスクドライブ３０８０に記憶される場合に限られない。例えば、プログラムモジュール３０８３やプログラムデータ３０８４は、着脱可能な記憶媒体に記憶されても良い。この場合、ＣＰＵ３０２０は、ディスクドライブなどの着脱可能な記憶媒体を介してデータを読み出す。また、同様に、更新プログラムに係るプログラムモジュール３０８３やプログラムデータ３０８４は、ネットワーク（ＬＡＮ（Local  Area  Network）、ＷＡＮ（Wide  Area  Network）等）を介して接続された他のコンピュータに記憶されても良い。この場合、ＣＰＵ３０２０は、ネットワークインタフェースを介して他のコンピュータにアクセスすることで各種データを読み出す。
【０１０９】
［その他］
なお、本実施例で説明したフォールバック検知プログラムは、インターネットなどのネットワークを介して配布することができる。また、フォールバック検知プログラムは、ハードディスク、フレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ、ブルーレイディスクなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行することもできる。
【符号の説明】
【０１１０】
１００      内部端末
２００      フォールバック検知装置
２１０      記憶部
２１１      通信開始メッセージテーブル
２１２      ＤＮＳパケットテーブル
２１３      内部端末情報テーブル
２１４      フォールバックテーブル
２２０      制御部
２２１      監視部
２２２      格納部
２２３      フォールバック制御部
３００      ルータ
４００      外部端末
【図１】
0005777938.tif 000002
【図２】
0005777938.tif 000003
【図３】
0005777938.tif 000004
【図４】
0005777938.tif 000005
【図５】
0005777938.tif 000006
【図６】
0005777938.tif 000007
【図７】
0005777938.tif 000008
【図８】
0005777938.tif 000009
【図９】
0005777938.tif 000010