図4は、実施形態にかかるNATタイプの調査方法の例を説明するシーケンス図である。以下の記載では、「NAT」という語は、NATとNAPT(Network Address Port Translation)の両方を含む意味で用いる。また、「アドレス変換」は、プライベートIPアドレスとグローバルIPアドレスの変換処理に加えて、プライベートポート番号とグローバルポート番号の変換処理も含むことがあるものとする。
図4に示す通信システムには、端末20、ルータ10、情報処理装置30(30a、30b)が含まれている。端末20は、ルータ10を介して、情報処理装置30aと通信している。また、ルータ10は、端末20から送信されたパケットをLANに含まれていない装置に送信する場合に、アドレス変換を行っている。なお、図4に示すシーケンスは一例であり、通信処理が行われるシステム中の端末20、ルータ10、情報処理装置30の数は任意である。
ステップS31において、端末20は、NATタイプの特定を要求する要求パケット(NATタイプ特定要求)を、情報処理装置30aに送信する。ルータ10は、情報処理装置30a宛のパケットを受信すると、アドレス変換処理を行ってから、情報処理装置30aに転送する(ステップS32)。
情報処理装置30aは、要求パケットを受信すると、情報処理装置30bに対して、要求パケットの送信元と通信が可能であるかを判定することを要求するための接続要求(接続判定要求)を送信する(ステップS33)。このとき、情報処理装置30aは、要求パケットの送信元アドレスを、端末20のアドレスとして、接続判定要求に含めるものとする。
接続判定要求を受信すると、情報処理装置30bは、端末20との間で通信を確立するための処理を行う(ステップS34)。情報処理装置30bは端末20との通信が確立できたかを、接続判定応答で情報処理装置30aに通知する(ステップS35)。
ステップS36において、情報処理装置30aは、情報処理装置30bと端末20との間の通信確立処理の結果を用いて、端末20との通信を中継しているルータ10で行われているアドレス変換処理のタイプを判定するための処理を行う。例えば、情報処理装置30bが端末20に通信を要求したときに、情報処理装置30bと端末20との間での通信が確立できたとすると、端末20からの通信の実績がない装置からのパケットも端末20に届いていることになる。そのため、情報処理装置30bが端末20に通信を要求したときに、情報処理装置30bと端末20との間で通信が確立できたことが通知されると、情報処理装置30aは、ルータ10において、フルコーン型のアドレス変換が行われていると判定する。一方、情報処理装置30bと端末20の間での通信の確立に失敗すると、情報処理装置30aは、ルータ10において、フルコーン型以外のタイプのアドレス変換が行われていると判定する。このとき、情報処理装置30aは、ルータ10で行われているアドレス変換の種類を特定するために、さらに、情報処理装置30aのポートのうちで、要求パケットを受信していないポートから端末20への通信を要求するなどの処理を行っても良い。
ステップS37において、情報処理装置30aは、ルータ10で行われているアドレス変換の種類を特定する情報を通知するための通知パケットを、端末20に送信する。
このように、図4にかかる判定方法では、端末20は、ルータ10で行われているアドレス変換の種類を特定するためには、情報処理装置30aに対してNATタイプの特定を要求する以外には能動的に処理を行わない。換言すると、端末20では、ルータ10でのNATタイプの特定に際して、通信先を選択する処理や通信確立を要求した結果を用いた判定処理を行わなくて良い。従って、実施形態にかかる方法により、端末20での処理負担が軽減される。
<装置構成>
図5は、通信を行う装置の構成の例を説明する図である。端末20は、ユーザインタフェース(UI)21、制御部22、記憶部23、および、通信部24を備える。ユーザインタフェース21は、端末20のユーザからの入力を受け付け、入力された情報を制御部22に出力する。制御部22は、情報処理装置30へ送信する要求パケットの生成や、情報処理装置30から通知された情報の取得を行う。さらに、制御部22は、情報処理装置30との間の通信を確立するための制御を行う。記憶部23は、端末20で使用される情報を記憶する。通信部24は、他の装置との間のパケットの送受信を行う。
ルータ10は、通信部11とアドレス変換処理部12を備える。通信部11は、LANに含まれている端末20などの装置とパケットを送受信し、さらに、インターネットやWAN(Wide Area Network)中の情報処理装置30などの装置ともパケットを送受信する。アドレス変換処理部12は、LAN内の端末20とLANに含まれていない情報処理装置30などの装置との間で行われる通信を中継する際に、パケットのアドレス変換処理を行う。
情報処理装置30は、通信部31、記憶部35、制御部40を備える。制御部40は、要求部41と特定部50を有する。通信部31は、受信部32と送信部33を有する。受信部32は、ルータ10や他の情報処理装置30などからパケットを受信する。送信部33は、ルータ10や他の情報処理装置30などに向けてパケットを送信する。記憶部35は、情報処理装置30の処理に使用される情報を記憶する。要求部41は、端末20からNATタイプの特定が要求されると、他の情報処理装置30に端末20との間の通信の確立を要求する。さらに、要求部41は、他の情報処理装置30や端末20へ送信する制御パケットの生成や、情報処理装置30との間の通信を確立するための制御を行う。特定部50は、他の情報処理装置30や端末20から受信したパケット中の情報の処理を行うことにより、NATタイプの特定を行う。
図6は、通信を行う装置のハードウェア構成の例を説明する図である。端末20は、CPU(Central Processing Unit)101a、ROM(Read Only Memory)102a、RAM(Random Access Memory)103a、ネットワークインタフェース104a、入力装置105a、出力装置106aを備える。さらに、端末20は、オプションとして、ハードディスク(HDD)107aを備えてもよい。CPU101a、ROM102a、RAM103a、ネットワークインタフェース104a、入力装置105a、出力装置106a、ハードディスク107aは、相互にデータを入出力可能なように接続されている。CPU101aは、ROM102aやハードディスク107aに格納されたプログラムを実行することにより、制御部22として動作する。RAM103aは記憶部23として動作する。入力装置105aと出力装置106aは、ユーザインタフェース21として動作する。通信部24は、ネットワークインタフェース104aとCPU101aにより実現される。
ルータ10は、CPU101b、RAM103b、ネットワークインタフェース104(104b、104c)、フラッシュメモリ108を備える。ネットワークインタフェース104bは、ルータ10とLAN側の装置の間の通信に使用され、ネットワークインタフェース104cは、ルータ10とWANやインターネット中の装置との間の通信に使用される。CPU101b、RAM103b、ネットワークインタフェース104(104b、104c)、フラッシュメモリ108はデータの入出力が可能になるように接続されている。通信部11は、ネットワークインタフェース104(104b、104c)とCPU101bにより実現される。CPU101b、RAM103b、フラッシュメモリ108は、アドレス変換処理部12を実現する。
情報処理装置30は、CPU101d、ROM102d、RAM103d、ネットワークインタフェース104dを備え、オプションとして、入力装置105d、出力装置106d、ハードディスク107dを備える。CPU101d、ROM102d、RAM103d、ネットワークインタフェース104d、入力装置105d、出力装置106d、ハードディスク107dは、相互にデータを入出力可能になるように接続されている。CPU101dは、ROM102d中のプログラムを読み込んで、制御部40として動作する。RAM103dは記憶部35として動作する。また、通信部31は、ネットワークインタフェース104dとCPU101dにより実現される。
<第1の実施形態>
図7は、第1の実施形態で使用されるメッセージのフォーマットの例を示す図である。図7では、第1の実施形態で使用される各制御メッセージのペイロードのうち、トランスポート層のヘッダの後に含められている情報を示している。このため、例えば、ネットワーク層でIP、トランスポート層でTCP(Transmission Control Protocol)が用いられている場合、制御メッセージには、図7に示す情報要素の前に、IPヘッダとTCPヘッダが含まれている。なお、いずれの制御メッセージも、トランザクションID、メッセージタイプを含んでいる。トランザクションIDは、端末20から送信されたNATタイプ特定要求(要求メッセージ)を一意に特定できるように、NATタイプ特定要求を受信した情報処理装置30によって設定される。メッセージタイプは、制御メッセージの種類を一意に特定できるように設定されており、制御メッセージの種類の識別に使用される。以下の説明では、各メッセージに設定されるメッセージタイプの値は、図7中に示すとおりであるものとする。
F1は、NATタイプ特定要求に含まれる情報要素である。NATタイプ特定要求は、端末20が情報処理装置30にNATタイプの特定を要求する際に、端末20から送信される。NATタイプ特定要求は、トランザクションID、メッセージタイプ、プロトコル種別を含む。なお、トランザクションIDはNATタイプ特定要求を受信した情報処理装置30で決定されるので、NATタイプ特定要求には、トランザクションIDが含まれていなくても良い。プロトコル種別は、端末20が使用しているトランスポート層のプロトコルの種類を示す情報である。
F2は、接続判定要求に含まれる情報要素を示す。接続判定要求は、NATタイプ特定要求を受信した情報処理装置30が他の情報処理装置30に、端末20との通信の確立が可能であるかの判定を要求する際に使用される。接続判定要求には、トランザクションID、メッセージタイプ、端末20との通信に使用される情報が含まれる。端末20との通信に使用される情報には、端末20が使用しているプロトコル種別、端末20のIPアドレスとポート番号が含まれる。
F3は、接続判定応答に含まれる情報要素である。接続判定応答中の接続結果は、端末20との通信の開始を要求された情報処理装置30が、端末20との通信に成功したかを示す情報である。
F4は、NATタイプ特定応答に含まれる情報要素を示す。NATタイプ特定応答には、NATタイプの特定結果と、NATタイプの特定を要求した端末20のグローバルIPアドレスとグローバルポート番号が含まれる。
F5は、サーバ接続要求に含まれる情報要素である。サーバ接続要求は、情報処理装置30が、端末20に特定の情報処理装置30へのパケット(サーバ接続要求応答)の送信を要求する際に使用される。サーバ接続要求には、サーバ接続要求応答の送信先のサーバで使用されているアドレスとポート番号が含まれる。サーバ接続要求応答は、F6に示すように、トランザクションIDとメッセージタイプ以外の情報を含まなくても良い。しかし、オプションとして、サーバ接続要求応答の結果を通知する通知先として、サーバ接続要求の送信元IPアドレスと送信元ポート番号も、サーバ接続要求応答に含められる場合がある。サーバ接続要求応答が使用されるケースについては後述する。
F7は、端末情報通知に含まれる情報要素である。端末情報通知は、情報処理装置30間で、通信に成功した端末20の情報の通知を行う際に使用され、端末20のグローバルIPアドレスとグローバルポート番号が含められる。
図8は、第1の実施形態で行われるNATタイプの判定の要求処理の例を説明するシーケンス図である。以下、端末20がTCPプロトコルを用いて情報処理装置30aのポート1にNATタイプの判定要求を送信する場合について説明する。以下、端末20や情報処理装置30の内部の説明を行うときは、符号の末尾に、端末20または情報処理装置30に割り当てられた識別子と同じアルファベットを付すものとする。例えば、制御部40aは、情報処理装置30aに含まれている制御部40を指す。また、図を見やすくするために、図において、情報処理装置30のことを「サーバ」と記載することがある。
ステップS41は、端末20のNATタイプの判定がユーザから要求されてから端末20内で行われる処理を示す。ユーザが端末20のNATタイプの判定を行うために、ユーザインタフェース21に入力処理を行うと、ユーザインタフェース21は、入力された情報を制御部22に出力する。制御部22は、入力された信号を解析して、NATタイプの判定が要求されていることを特定すると、以下の情報を含むNATタイプ特定要求メッセージ(図7のF1)を生成する。
送信元IPアドレス:端末20のプライベートIPアドレス
ポート番号 :プライベートポート番号
メッセージタイプ :1(NATタイプ特定要求)
プロトコル種別 :TCP
制御部22は、生成したNATタイプ特定要求を、通信部24を介して、情報処理装置30aに向けて送信する。
ルータ10は、端末20からNATタイプ特定要求を受信すると、NATタイプ特定要求に対するアドレス変換処理を行う(ステップS42、S43)。さらに、ルータ10は、NATタイプ特定要求のアドレス変換処理に使用したアドレスやポート番号などの情報を、端末20に対応付けられたNATエントリとして記憶する。ルータ10は、アドレス変換後のNATタイプ特定要求を、情報処理装置30aに向けて転送する(ステップS44)。
情報処理装置30aの受信部32aは、ポート1を介して、NATタイプ特定要求を受信したとする。受信部32aは、NATタイプ特定要求を要求部41aに出力する(ステップS45)。要求部41aは、NATタイプ特定要求中の情報を特定部50aに出力する(ステップS46)。特定部50aは、端末20のグローバルIPアドレスやグローバルポート番号などの情報を記憶部35中の端末情報テーブル36(図9)に格納する(ステップS47)。なお、このとき、特定部50aは、受信したNATタイプの特定要求を一意に特定するためのトランザクションIDを生成しているとする。
図9は、端末情報テーブル36の例を示す図である。端末情報テーブル36は、トランザクションIDごとに、グローバルIPアドレス、グローバルポート番号、プロトコル種別が記録されている。グローバルIPアドレスは、エントリ中のトランザクションIDで識別されるNATタイプ特定要求の送信元IPアドレスである。すなわち、端末情報テーブル36中のグローバルIPアドレスは、情報処理装置30aと端末20との通信の際に、端末20のグローバルIPアドレスとしてルータ10が設定したアドレスである。グローバルポート番号は、エントリ中のトランザクションIDで識別されるNATタイプ特定要求の送信元ポート番号である。従って、端末情報テーブル36中のグローバルポート番号は、情報処理装置30aと端末20との通信の際に、端末20のグローバルポート番号としてルータ10が設定したポート番号である。プロトコル種別は、エントリ中のトランザクションIDで識別されるNATタイプ特定要求の送信処理に使用されたプロトコルである。
例えば、端末20が送信したNATタイプ特定要求に対してトランザクションID=ID1が設定されたとする。また、トランザクションID=ID1のNATタイプ特定要求を情報処理装置30aが受信したときには、送信元IPアドレスがIP−G1、送信元ポート番号がPN−G1に設定されていたとする。この場合、端末20が送信したNATタイプ特定要求の処理により、図9の1番目のエントリが生成される。なお、情報処理装置30aは、並行して複数の装置についてNATの特定処理を行うことができる。情報処理装置30aにNAT特定を要求した各装置についての情報は、トランザクションIDに対応付けて端末情報テーブル36に格納される。
図10は、第1の実施形態で行われるNATタイプの判定処理の例を説明するシーケンス図である。特定部50aは、まず、端末20との間の通信を中継しているルータ10がフルコーン型のNATを行っているかを判定する。特定部50aは、情報処理装置30bと端末20の間で通信が可能であるかを判定することを、端末20のトランザクションIDと対応付けて、要求部41aに通知する(ステップS51)。要求部41aは、情報処理装置30bと端末20の間の接続が可能であるかを調べるために、以下の情報を含む接続判定要求(図7のF2)を生成する。
送信元IPアドレス :情報処理装置30aのアドレス
宛先IPアドレス :情報処理装置30bのアドレス
トランザクションID:ID1
メッセージタイプ :2(接続判定要求)
プロトコル種別 :TCP
端末IPアドレス :IP−G1
端末ポート番号 :PN−G1
要求部41aは、生成した接続判定要求を、通信部31aを介して、情報処理装置30bに送信する(ステップS52、S53)。
情報処理装置30bの通信部31bは、接続判定要求を受信すると、接続判定要求を、要求部41bに出力する(ステップS54)。要求部41bは、接続判定要求で通知されたプロトコルを用いて、接続判定要求で通知された端末との間の通信が可能であるかを判定するための制御パケットを生成する。図10の例では、端末20はTCPを使用して通信を行っているので、要求部41bは、TCPの3ウェイハンドシェークによって、端末20との間の通信の確立の可否を判定できることを認識する。そこで、要求部41は、通信部31bに対して、端末20との間でTCPコネクションの確立を要求する(ステップS55)。このとき、要求部41bは、接続判定要求の端末IPアドレスと端末ポート番号から端末20のグローバルIPアドレスとグローバルポート番号を取得し、取得した情報を通信部31bに通知する。
通信部31bは、以下の情報を含むTCPコネクションの確立要求を生成する。
送信元IPアドレス :情報処理装置30bのアドレス
宛先IPアドレス :IP−G1
宛先ポート番号 :PN−G1
制御ビット :SYN=1
通信部31bが生成したコネクションの確立要求を図10では、TCP(SYN)と記載する。通信部31bは、コネクションの確立要求を端末20に向けて送信する(ステップS56)。
ルータ10は、情報処理装置30bから端末20に宛てたコネクションの確立要求を受信すると、アドレス変換処理部12の設定に応じて処理を行う。図10の例では、アドレス変換処理部12がフルコーン型のアドレス変換処理を行うように設定されている場合について説明する。フルコーン型では、ルータ10は、端末20がパケットを送信していない情報処理装置30bから端末20に宛てたパケットを破棄しない。アドレス変換処理部12は、コネクションの確立要求の宛先アドレスと宛先ポートに対してアドレス変換を行う。アドレス変換後のコネクション確立要求では、宛先アドレスは端末20が使用するプライベートIPアドレスであり、宛先ポート番号は端末20が使用するプライベートポート番号である。ルータ10は、アドレス変換後のコネクション確立要求を端末20に転送する(ステップS57)。
端末20中の通信部24は、情報処理装置30bから受信したコネクション確立要求に応答して、端末20から情報処理装置30bに向かうコネクションの確立要求を生成し、情報処理装置30bに向けて送信する。図10では、端末20から情報処理装置30bに向かうコネクションの確立要求を、TCP(SYN/ACK)と記載する。ルータ10は、端末20からTCP(SYN/ACK)を受信すると、アドレス変換処理を行って、情報処理装置30bに転送する(ステップS58)。
情報処理装置30bの通信部31bは、端末20から送信されたTCP(SYN/ACK)を受信すると、端末20に宛てて確認応答(TCP(ACK))を送信する(ステップS59)。情報処理装置30bから端末20に宛てて送信された確認応答は、情報処理装置30bから端末20に宛てて送信したコネクション確立要求と同様に処理されるので、確認応答は端末20に到達する。通信部31bは、確認応答の送信後、端末20との間でTCPコネクションの確立に成功したことを、要求部41bに通知する(ステップS60)。
要求部41bは、通信部31bからTCPコネクションの確立に成功したことが通知されると、端末20との間の接続の確立に成功したと判定する。要求部41bは、情報処理装置30aに対して、端末20との接続に成功したことを通知するために、以下の情報を含む接続判定応答(図7のF3)を生成する。
送信元IPアドレス :情報処理装置30bのアドレス
宛先IPアドレス :情報処理装置30aのアドレス
トランザクションID:ID1
メッセージタイプ :3(接続判定応答)
接続結果 :接続成功
要求部41bは、通信部31bを介して、接続判定応答を情報処理装置30aに送信する(ステップS61、S62)。
情報処理装置30aが接続判定応答を受信したとする。特定部50aは、通信部31aと要求部41aを介して、接続判定応答を取得する(ステップS63)。特定部50aは、情報処理装置30bが端末20との間の通信の確立に成功したことから、端末20との間の通信を中継しているルータ10では、フルコーン型のアドレス変換が行われていると判定する(ステップS64)。そこで、特定部50aは、NATタイプや端末20が使用しているグローバルIPアドレス等を端末20に通知するために、適宜、端末情報テーブル36を用いて、以下の情報を含むNATタイプ特定応答(図7のF4)を生成する。
送信元IPアドレス :情報処理装置30aのアドレス
宛先IPアドレス :端末20のアドレス(IP−G1)
トランザクションID:ID1
メッセージタイプ :4(NATタイプ特定応答)
NATタイプ :フルコーン型
端末IPアドレス :IP−G1
端末ポート番号 :PN−G1
特定部50aは、要求部41aと通信部31aを介して、NATタイプ特定応答を端末20宛に送信する(ステップS65〜S67)。
ルータ10は、NATタイプ特定応答を受信すると、宛先アドレスを端末20が使用するプライベートIPアドレスに変換すると共に、宛先ポート番号は端末20が使用するプライベートポート番号に変換する(ステップS68)。ルータ10は、アドレス変換後のNATタイプ特定応答を端末20に転送する(ステップS69)。端末20中の制御部22は、通信部24を介してNATタイプ特定応答を受信することにより、ルータ10のNATタイプや端末20が使用しているグローバルIPアドレス等の情報を取得する(ステップS70)。
図11は、第1の実施形態で行われるNATタイプの判定処理の例を説明するシーケンス図である。図11を参照しながら、ルータ10で行われるアドレス変換がフルコーン型ではない場合に行われる処理の例を説明する。図11は、図10のステップS51〜S56の処理が行われた後の処理の例を示す。
ルータ10がフルコーン型以外のタイプのアドレス変換を行っている場合、ルータ10は、ステップS56で端末20宛に情報処理装置30bから送信されてきたコネクション確立要求(TCP(SYN))を破棄する(ステップS80)。このため、情報処理装置30bから送信されたコネクション確立要求は端末20に到達せず、情報処理装置30bは、コネクションの確立要求に対する応答を受信しない。
通信部31bは、コネクション確立要求に対する応答を待ち合わせる期間が終了しても端末20から応答が得られないため、端末20との間のコネクションの確立に失敗したと判定し、コネクション確立の失敗を要求部41bに通知する(ステップS81)。要求部41bは、情報処理装置30aに対して、端末20との接続に失敗したことを通知するために、以下の情報を含む接続判定応答(図7のF3)を生成する。
送信元IPアドレス :情報処理装置30bのアドレス
宛先IPアドレス :情報処理装置30aのアドレス
トランザクションID:ID1
メッセージタイプ :3(接続判定応答)
接続結果 :接続失敗
要求部41bは、通信部31bを介して、接続判定応答を情報処理装置30aに送信する(ステップS82、S83)。
情報処理装置30aが接続判定応答を受信したとする。特定部50aは、通信部31aと要求部41aを介して、接続判定応答を取得する(ステップS84)。特定部50aは、情報処理装置30bが端末20との間の通信の確立に失敗したことから、情報処理装置30aが保持するポートのうちで、端末20からのパケットを受信していないポートを用いた接続判定処理を行うことを決定する。図11の例では、特定部50aは、情報処理装置30aのポート2を用いて接続判定処理を行うことを決定している。特定部50aは、接続判定の対象として、情報処理装置30aのポート2と端末20を、トランザクションIDとともに、要求部41aに通知する(ステップS85)。
要求部41aは、特定部50aから通知されたトランザクションIDに対応付けられたプロトコルを用いて、端末20との間の通信が可能であるかを判定するための制御パケットを生成する。ここで、記憶部35に格納された情報では、端末20からのNATタイプ特定要求に対応付けられたトランザクションID(ID1)に対して、TCPが対応付けられている(図9)。このため、要求部41aは、TCPの3ウェイハンドシェークによって、端末20との間の通信の確立の可否を判定できることを認識する。要求部41aは、通信部31aに対して、ポート2を用いて端末20との間でTCPコネクションを確立することを要求する(ステップS86)。このとき、要求部41aは、記憶部35から端末20のグローバルIPアドレスとグローバルポート番号を取得し、取得した情報を通信部31aに通知する。
通信部31aは、以下の情報を含むコネクションの確立要求を生成する。
送信元IPアドレス :情報処理装置30aのアドレス
送信元ポート番号 :2
宛先IPアドレス :IP−G1
宛先ポート番号 :PN−G1
制御ビット :SYN=1
通信部31aは、コネクションの確立要求(TCP(SYN))を、ポート2から端末20に向けて送信する(ステップS87)。
ルータ10は、情報処理装置30aから端末20に宛てたコネクションの確立要求を受信すると、アドレス変換処理部12の設定に応じて処理を行う。図11の例では、アドレス変換処理部12がIP制限コーン型のアドレス変換処理を行うように設定されている場合について説明する。IP制限コーン型では、ルータ10は、端末20がパケットを送信したことがあるアドレスが送信元IPに設定されているパケットを端末20に転送する。ステップS87で送信されたコネクション確立要求は情報処理装置30aから送信されているので、ルータ10は、アドレス変換処理を行ってから、コネクション確立要求を端末20に転送する(ステップS88)。
端末20中の通信部24は、情報処理装置30aから受信したコネクション確立要求に応答して、端末20から情報処理装置30aに向かうコネクションの確立要求(TCP(SYN/ACK))を送信する(ステップS89)。TCP(SYN/ACK)は、ルータ10でのアドレス変換を経て、情報処理装置30aに到達する(ステップS90)。
情報処理装置30aの通信部31aは、TCP(SYN/ACK)を受信すると、端末20に宛てて確認応答(TCP(ACK))を送信する(ステップS91)。通信部31aは、確認応答の送信後、端末20との間でTCPコネクションの確立に成功したことを、要求部41aを介して特定部50aに通知する(ステップS92)。
特定部50aは、情報処理装置30aがポート2を介して端末20との間の通信の確立に成功したことから、端末20との間の通信を中継しているルータ10では、IP制限コーン型のアドレス変換が行われていると判定する(ステップS93)。そこで、特定部50aは、NATタイプ=IP制限コーン型であることを通知する情報を含むNATタイプ特定応答を生成し、NATタイプ特定応答を用いて、端末20にNATタイプを通知する。なお、ステップS94〜S99で行われる処理は、図10のステップS65〜S70を参照しながら説明した処理と同様である。
図12は、第1の実施形態で行われるNATタイプの判定処理の例を説明するシーケンス図である。図12を参照しながら、ルータ10で行われるアドレス変換がフルコーン型とIP制限コーン型のいずれでもない場合に行われる処理の例を説明する。図12は、図10のステップS51〜S56の処理と図11のステップS87までの処理が行われた後の処理の例を示す。
ルータ10は、フルコーン型とIP制限コーン型のいずれでもないタイプのアドレス変換を行っている場合、ステップS87で端末20宛に送信されてきたコネクション確立要求を破棄する(ステップS110)。このため、情報処理装置30aのポート2から送信されたコネクション確立要求は端末20に到達せず、情報処理装置30aは、コネクションの確立要求に対する応答を受信しない。
通信部31aは、コネクション確立要求に対する応答を待ち合わせる期間が終了しても端末20から応答が得られないため、端末20との間のコネクションの確立に失敗したと判定し、要求部41aを介して、コネクション確立の失敗を特定部50aに通知する(ステップS111、S112)。特定部50aは、端末20に対して、端末20から情報処理装置30bへのコネクションの生成を要求することを決定し、決定した情報を要求部41aに通知する(ステップS113)。要求部41aは、端末20に対してコネクションの生成を要求することを特定部50aから通知されると、サーバ接続要求(図7のF5)を生成する。サーバ接続要求は、サーバ接続要求を受信した装置に対して、ペイロード中に指定されている応答先のアドレスの応答先のポート番号に対して、応答パケットを送信することを要求するメッセージである。図12の例では、端末20に情報処理装置30bとの間のコネクションの生成を要求するので、以下の情報を含むサーバ接続要求が生成される。
送信元IPアドレス :情報処理装置30aのアドレス
送信元ポート :ポート1
宛先IPアドレス :端末20のアドレス
トランザクションID:ID1
メッセージタイプ :5(サーバ接続要求)
STUNサーバIPアドレス :情報処理装置30bのアドレス
STUNサーバポート番号 :情報処理装置30bのポートのいずれか
要求部41aは、通信部31aのポート1を介して、サーバ接続要求を端末20宛に送信する(ステップS114)。
ルータ10は、サーバ接続要求を受信すると、サーバ接続要求のアドレス変換を行うと共に、端末20と情報処理装置30aの間の通信に関するNATエントリを更新する(ステップS115)。ルータ10は、アドレス変換後のサーバ接続要求を端末20に転送する(ステップS116)。
端末20中の制御部22は、通信部24を介してサーバ接続要求を受信することにより、情報処理装置30bとの間のコネクションの生成が要求されたと判定する(ステップS117)。そこで、制御部22は、以下の情報を含むサーバ接続要求応答を生成する。なお、この例では、サーバ接続要求応答には、図7のF6に示す情報要素の他に、サーバ接続要求の送信元アドレスと送信元ポート番号も含まれる場合を示している。
宛先IPアドレス :情報処理装置30bのアドレス
宛先IPポート番号 :サーバ接続要求中のSTUNサーバポート番号
トランザクションID :ID1
メッセージタイプ :6(サーバ接続要求応答)
サーバ接続要求の送信元アドレス:情報処理装置30aのアドレス
サーバ接続要求の送信元ポート :ポート1
このように、サーバ接続要求の送信元の情報を含むサーバ接続要求応答は、サーバ接続要求応答の宛先に対して、端末20のグローバルアドレス等の情報を、サーバ接続要求の送信元に通知することを要求する際に使用される。制御部22は、通信部24を介して、生成したサーバ接続要求応答を、サーバ接続要求で指定されたアドレスとポートの組み合わせに向けて送信する(ステップS118)。
ルータ10は、端末20が情報処理装置30bに向けて送信したサーバ接続要求応答を受信すると、端末20と、情報処理装置30bのサーバ接続要求応答に指定されたポートとの間の通信に使用するNATエントリを生成する(ステップS119)。その後、ルータ10は、アドレス変換処理を行ってからサーバ接続要求応答を、情報処理装置30bに転送する(ステップS120)。
情報処理装置30bがサーバ接続要求応答を受信したとする。特定部50bは、通信部31bと要求部41bを介して、サーバ接続要求応答を取得する(ステップS121)。特定部50bは、自装置からサーバ接続要求を送信していない端末20からサーバ接続要求応答を受信したので、サーバ接続要求の送信元に対して、サーバ接続要求応答の送信元の端末の情報を通知することを決定する。そこで、特定部50bは、以下の情報を含む端末情報通知(図7のF7)を生成する。
送信元IPアドレス :情報処理装置30bのアドレス
宛先IPアドレス :情報処理装置30aのアドレス
トランザクションID:ID1
メッセージタイプ :7(端末情報通知)
端末IPアドレス :サーバ接続要求応答の送信元アドレス
端末ポート番号 :サーバ接続要求応答の送信元ポート番号
特定部50bは、要求部41bと通信部31bを介して、端末情報通知を情報処理装置30aに送信する(ステップS122、S123)。
情報処理装置30aが端末情報通知を受信すると、特定部50aは、通信部31aと要求部41aを介して、端末情報通知を取得する(ステップS124)。特定部50aは、端末情報通知で通知されてきた端末のIPアドレスが、情報処理装置30aのポート1との間で端末20が通信を行うときに使用されるIPアドレス(IP−G1)と等しいかを判定する。端末情報通知で通知されてきた端末のIPアドレスが、端末20と情報処理装置30aとの通信で使用されるIPアドレスと同じである場合、特定部50aは、ルータ10がポート制限コーン型のアドレス変換を行っていると判定する。一方、端末情報通知で通知されてきた端末のIPアドレスが、端末20と情報処理装置30aとの通信で使用されるIPアドレスとは異なる場合、特定部50aは、ルータ10がシンメトリック型のアドレス変換を行っていると判定する(ステップS125)。特定部50aは、NATタイプの判定が終わると、判定結果を通知する情報を含むNATタイプ特定応答を生成し、端末20に向けて送信する(ステップS126〜S128)。なお、ステップS126〜S131で行われる処理は、図10のステップS65〜S70を参照しながら説明した処理と同様である。
以上説明したように、第1の実施形態では、端末20の通信を中継しているルータ10が行うアドレス変換の種類を特定する際の判定処理は、情報処理装置30aで行われる。このため、端末20では、通信先を選択する処理や通信確立を要求した結果を用いた判定処理を行わなくて良く、処理負担が軽減される。
さらに、第1の実施形態では、情報処理装置30が端末20との接続を試みる装置に対してパケットの送信を要求するため、端末20が接続先を決定する場合に比べて、端末20から送信するパケットの数が少なくてすむ。端末20は、コンピュータ、スマートフォンを含む携帯電話、タブレットなど、任意の端末であり、パケットの送信数に応じて、ユーザが事業者に課金される場合もある。このため、NATタイプを特定する処理のために端末20から送信されるパケットの数が少なければ、ユーザが事業者から課金される金額が小さくなる。従って、第1の実施形態を適用することにより、事業者はユーザへのサービスを向上することができる。
〔プロトコルの変更例〕
次に、端末20と情報処理装置30aの間での通信がTCP以外のプロトコルで行われている場合に端末20と情報処理装置30a、30bの間で通信が可能であるかを判定する場合の処理を説明する。情報処理装置30aと情報処理装置30bの各々は、端末20がTCPを使用していない場合、コネクションの確立要求(TCP(SYN))の代わりに、サーバ接続要求(図7のF5)を使用する。このとき、サーバ接続要求を送信する情報処理装置30は、サーバ接続要求のSTUNサーバIPアドレスとSTUNサーバポート番号に、自ノードがサーバ接続要求を送信する際に使用するIPアドレスとポート番号を設定する。端末20からサーバ接続要求応答を受信すると、サーバ接続要求を送信した情報処理装置30は、端末20との間の通信に成功したと判定する。その後の処理はTCPが用いられる場合と同様である。
例えば、ルータ10がフルコーン型のアドレス変換を用いている場合を例として、端末20がTCPを使用していない場合の処理の具体例を説明する。端末20がTCPを使用していない場合も、NATタイプ特定要求の送受信や、図10のステップS51〜S54を参照して説明した接続要求の処理は、端末20がTCPを用いているときと同様に行われる。
情報処理装置30bの要求部41bは、情報処理装置30aから受信した接続判定要求において、端末20が使用しているプロトコルがTCPではないことが通知されたので、サーバ接続要求を使用して、端末20との間の通信の可否を判定することを決定する。そこで、要求部41bは、端末20に情報処理装置30bを応答先としたサーバ接続要求を送信することを決定し、以下の情報を含むサーバ接続要求を生成したとする。
送信元IPアドレス :情報処理装置30bのアドレス
送信元ポート :ポート3
宛先IPアドレス :端末20のアドレス
トランザクションID:ID1
メッセージタイプ :5(サーバ接続要求)
STUNサーバIPアドレス :情報処理装置30bのアドレス
STUNサーバポート番号 :ポート3
要求部41bは、送信部33bを介してサーバ接続要求を端末20に送信する。サーバ接続要求が端末20に転送される際に行われる処理は、図10のステップS56、S57を参照しながら説明したとおりである。
端末20の制御部22は、サーバ接続要求を取得すると、サーバ接続要求応答を生成する。このとき、制御部22は、サーバ接続要求の送信元と、サーバ接続要求で指定された応答の送信先が同じであるので、サーバ接続要求応答にサーバ接続要求応答の送信元の端末の情報を含めない。制御部22は、通信部24を介して、サーバ接続要求応答を情報処理装置30bに送信する。サーバ接続要求応答は、図10のステップS58と同様の処理により、情報処理装置30bに到達する。
情報処理装置30bの要求部41bは、サーバ接続要求応答が得られたことから、端末20と情報処理装置30bの間での接続に成功したと判定して、接続の成功を情報処理装置30aに通知する。接続の成功を情報処理装置30aに通知する処理以降の処理は、図10のステップS61以降と同様である。
TCPの3ウェイハンドシェークの代わりにサーバ接続要求とサーバ接続要求応答を用いて通信の可否を判定する方法は、情報処理装置30aが端末20と通信中のポート以外のポートを介して端末20と通信できるかを判定する場合も同様に使用される。このため、端末20がTCP以外のプロトコルで通信する場合であっても、端末20がTCPを用いて通信しているときと同様に、情報処理装置30側で端末20と情報処理装置30の間の通信を中継するルータ10のNATタイプを判定できる。
<第2の実施形態>
第2の実施形態では、情報処理装置60がNATタイプの判定結果を端末20の識別情報と共に記憶しておく場合について説明する。第2の実施形態では、情報処理装置60は、NATタイプ判定を行ったことのある端末20から、NATタイプの判定要求を受けた場合、端末20が前回の判定のときと同じルータ10を介して通信しているかを判定する。端末20が前回の判定のときと同じルータ10を介して通信していれば、情報処理装置60は、記憶しているNATタイプを通知することにより、迅速に、端末20へのNATタイプを通知することができる。
図13は、第2の実施形態で使用される情報処理装置60の構成の例を示す図である。情報処理装置60は、通信部31、記憶部35、制御部40を備える。制御部40は、要求部41と特定部50を有しており、特定部50は、NATタイプ特定部51とLAN変更判定部52を有する。記憶部35は、端末情報テーブル61とNATタイプテーブル62を記憶する。情報処理装置60においても、通信部31、要求部41で行われる処理は第1の実施形態と同様である。第2の実施形態では、第1の実施形態において特定部50が行っている判定処理をNATタイプ特定部51が行う。LAN変更判定部52は、NATタイプの判定を要求してきた端末20が位置するLANが、前回の判定の際に端末20が位置していたLANと同じであるかを判定する。
端末情報テーブル61は、NATタイプ特定要求の送信元の端末20についての情報を保持する。NATタイプテーブル62は、NATタイプの判定結果とユーザIDを対応付けて記憶する。ここで、ユーザIDは、端末20を一意に特定できる識別情報である。端末情報テーブル61とNATタイプテーブル62の例は後述する。
なお、情報処理装置60のハードウェア構成は、情報処理装置30と同様である。通信部31は、CPU101dとネットワークインタフェース104dによって実現される。制御部40はCPU101dによって実現され、記憶部35はRAM103dなどによって実現される。
図14は、第2の実施形態で行われるNATタイプの判定処理の例を説明するシーケンス図である。図15は、第2の実施形態で使用されるメッセージのフォーマットの例を示す図である。以下、図14と図15を参照しながら、第2の実施形態において、情報処理装置60がNATタイプを記憶していない端末20からNATタイプが要求された場合の処理の例を説明する。
図14のステップS141において、図8のステップS41と同様の処理により、NATタイプ特定要求が生成される。図15のF12に、第2の実施形態において、端末20が使用するNATタイプ特定要求のペイロードに含まれる情報要素の例を示す。第2の実施形態で使用されるNATタイプ特定要求には、トランザクションID、メッセージタイプ、プロトコル種別の他に、端末20を一意に識別可能なユーザIDが含まれている。なお、NATタイプ特定要求にはF12に示すペイロードの他に、IPヘッダやトランスポート層のヘッダ(図示せず)も含まれている。
図14のステップS142〜S145の処理は、図8のステップS42〜S45を参照しながら説明した処理と同様である。このため、NATタイプ特定要求は、情報処理装置60aの要求部41aに到達する。要求部41aは、NATタイプ特定要求をNATタイプ特定部51aに出力する。NATタイプ特定部51aは、NATタイプを取得済みの端末20からNATタイプを要求された可能性があるので、LAN変更判定部52aにLAN変更判定要求を出力する(ステップS147)。LAN変更判定要求は、端末20が前回のNAT判定の際に位置していたLANと異なるLANに位置しているかの判定を要求する信号である。
図15のF13に、LAN変更判定要求に含まれる情報要素の例を示す。LAN変更判定要求は、メッセージタイプ、ユーザID、端末IPアドレス、端末ポート番号を含む。ここで、端末のIPアドレス、端末のポート番号は、情報処理装置60a宛てのNATタイプ特定要求の送信元の情報である。
図14のステップS147においてLAN変更判定要求が入力されると、LAN変更判定部52aは、LAN変更判定要求に含まれているユーザIDをキーとしてNATタイプテーブル62aを検索する。図14の例では、NATタイプを判定したことがない端末20から、NATタイプの判定が要求されているので、NATタイプテーブル62a中には端末20のユーザIDが含まれていない。そこで、LAN変更判定部52aは、NATタイプ特定部51aに対し、端末20に関するNATタイプが記憶されていないことを通知するために使用するLAN変更判定要求を生成する。
図15のF14は、LAN変更判定応答に含まれる情報要素の例を示す。LAN変更判定応答は、メッセージタイプ、ユーザID、判定結果、NATタイプを含む。判定結果は、LAN変更有、LAN変更無し、不明のいずれかが選択される。「LAN変更有」は、NATタイプの要求元の端末20が位置するLANが、前回の判定の際に要求元の端末20が位置していたLANと異なることを表わす。「LAN変更なし」は、NATタイプの要求元の端末20が位置するLANが、前回の判定の際に要求元の端末20が位置していたLANと同じであることを表わす。「不明」は、LAN変更判定要求で通知された端末20に対するエントリがNATタイプテーブル62aに無いことを示す。NATタイプは、判定結果=LAN変更なしの場合に、NATタイプテーブル62に記憶されている値が設定される。
図14のステップS148において、LAN変更判定部52aは、判定結果=不明に設定したLAN変更判定応答を、NATタイプ特定部51aに出力する。NATタイプ特定部51aは、LAN変更判定応答を取得すると、NATタイプの特定を行っていない端末20からNATタイプの特定が要求されたと判定する。
図16は、情報処理装置60で行われるNATタイプの判定処理とNATタイプの判定結果を保持する方法の例を説明する図である。NATタイプの特定を行っていない端末20からNATタイプの特定が要求されたと判定するとNATタイプ特定部51aは、NATタイプ特定要求の送信元の情報を、端末情報テーブル61aに格納する。
図16に示す端末情報テーブル61aは、グローバルIPアドレス、グローバルポート番号、トランザクションID、プロトコル種別、ユーザIDを含む。例えば、端末20のユーザIDがUser1であり、端末20から受信したNATタイプ特定要求の送信元IPアドレスがIP−G1、送信元ポート番号がPN−G1であり、トランザクションIDがID1に決定されたとする。すると、NATタイプ特定部51aは、図16に示す端末情報テーブル61aの1番目のエントリを生成する。その後、第1の実施形態で図10〜図12を参照しながら説明した手順により、端末20と情報処理装置60aの間の通信を中継するルータ10で行われているNATの種類の判定が行われる。
NATタイプ特定部51は、NATタイプの特定に成功すると、トランザクションIDをキーとして端末情報テーブル61aを検索することにより、NATタイプの特定のきっかけとなったNATタイプ特定要求に対応付けられているユーザIDを特定する。図16の例では、NATタイプ特定部51aは、トランザクションID=ID1をキーとして、端末20に対応付けられているユーザIDがUser1であることを特定する。すると、NATタイプ特定部51aは、NATタイプの判定結果を端末20に通知すると共に、LAN変更判定部52aにも通知する。
図16のF15は、NATタイプ特定部51aがNATタイプの判定結果を通知するために、LAN変更判定部52aに出力する信号(LAN情報設定)に含まれている情報要素を示す。LAN情報設定には、ユーザID、端末のIPアドレス、端末のポート番号、NATタイプが含まれる。なお、端末のIPアドレス、端末のポート番号は、端末情報テーブル61aから取得された値であり、情報処理装置60a宛てのNATタイプ特定要求の送信元の情報である。LAN変更判定部52aは、LAN情報設定で通知された情報を、同じ端末20から再度NATタイプの特定が要求された場合に備えて、NATタイプテーブル62に格納する。図16中のNATタイプテーブル62aには、ユーザID=User1の端末20がIP−G1というアドレスとPN−G1というポート番号を用いて通信する際に、通信を中継しているルータ10がフルコーン型のアドレス変換を行うことが記録されている。
図17は、第2の実施形態で行われるNATタイプの判定処理の例を説明するシーケンス図である。以下、図17を参照しながら、情報処理装置60がNATタイプを記憶している端末20からNATタイプが要求された場合の処理の例を説明する。ステップS151〜S157で行われる処理は、図14のステップS141〜S147を参照しながら説明した処理と同様である。なお、ステップS151で生成されるNATタイプ判定要求と、ステップS157でLAN変更判定部52aに入力されたLAN変更判定要求のいずれにも、ユーザID=User1という情報が含まれているとする。
ステップS157においてLAN変更判定要求を取得したLAN変更判定部52aは、NATタイプテーブル62a(図16)から、ユーザID=User1に対応付けられたNATタイプの情報を取得する。LAN変更判定部52aは、LAN変更判定要求(図15のF13)に含まれているグローバルIPアドレスと、NATタイプテーブル62aでユーザID=User1に対応付けられているグローバルIPアドレスが一致するかを判定する。図17の例では、LAN変更判定要求中のグローバルIPアドレスと、NATタイプテーブル62aでユーザID=User1に対応付けられたグローバルIPアドレスが一致している場合を示す。この場合、LAN変更判定部52aは、端末20が位置するLANは、前回のNATタイプの判定の際に端末20が位置していたLANと同じであると判定する。そこで、LAN変更判定部52aは、以下の情報を含むLAN変更判定応答を生成する。
ユーザID =User1
判定結果 =変更無し
NATタイプ=フルコーン型
LAN変更判定部52aは、生成したLAN変更判定応答をNATタイプ特定部51aに出力する(ステップS158)。このため、NATタイプ特定部51aは、LAN変更判定部52aから通知されたNATタイプを通知する情報を含むNATタイプ特定応答を生成し、端末20に向けて送信する(ステップS159)。なお、ステップS159〜S160で行われる処理は、図10のステップS65〜S70を参照しながら説明した処理と同様である。
次に、LAN変更判定要求に含まれているグローバルIPアドレスと、NATタイプテーブル62aでユーザID=User1に対応付けられたグローバルIPアドレスが一致しない場合について説明する。この場合、LAN変更判定部52aは、端末20が位置するLANは、前回のNATタイプの判定の際と異なると判定する。そこで、LAN変更判定部52aは、判定結果=変更有りに設定したLAN変更判定応答を、NATタイプ特定部51aに出力する。NATタイプ特定部51aは、NATタイプの特定を行っていない端末20からNATタイプの特定が要求された場合と同様に、NATタイプの判定処理を行う。
図18は、第2の実施形態の適用例を説明する図である。第2の実施形態は、図18を用いて説明するように、端末20がNATタイプの特定を複数回にわたって要求する場合に特に有効である。例えば、端末20が図18のLAN1とLAN2のいずれにも接続することができるとする。ここで、LAN1中の装置はWAN中の装置と通信する際に、ルータ10aによって通信を中継されるものとする。端末20がLAN1に接続してWAN中の装置と通信する場合、ルータ10aは、端末20から送信されるパケットの送信元IPアドレスをXに変換する。また、ルータ10aが行うNATの種類はAであるとする。
一方、LAN2中の装置はWAN中の装置と通信する際に、ルータ10bによって通信を中継されるものとする。ルータ10bは、LAN2中の装置とWAN中の装置の通信を中継しており、端末20がLAN2に接続してWAN中の装置と通信する場合、端末20から送信されるパケットの送信元IPアドレスをYに変換するものとする。また、ルータ10bが行うNATの種類はBであるとする。
ステップS161において、端末20が情報処理装置60aに、ユーザID=01234という情報を含むNATタイプ特定要求を送信したとする。すると、情報処理装置60aは、ユーザID=01234に対応付けて、端末20のグローバルアドレスを記憶すると共に、端末20と情報処理装置60aの間の通信を中継しているルータ10aのNATタイプを特定する。情報処理装置60aは、得られたNATタイプの情報を、NATタイプテーブル62aに記憶する。図18の例ではNATタイプテーブル62aに、ユーザID=01234に対応付けて、IPアドレス=XとNATタイプ=Aという情報が記録されている。
ステップS162に示すように、端末20が、LAN1に接続中に再度、情報処理装置60aにNATタイプの特定を要求した場合、通信を中継しているルータ10は前回のNATタイプの特定の際と同じである。このため、ステップS162においてNATタイプ特定要求を情報処理装置60aが受信するときには、NATタイプ特定要求は、ユーザID=01234、送信元IPアドレス=Xという情報を含む。情報処理装置60aは、ユーザID=01234で特定される端末20のアドレスが前回のNATタイプ特定のときと同じため、端末20は前回のNATタイプ特定のときと同じLAN1に接続していると判定できる。従って、情報処理装置60aは、端末20aとの間の通信を中継するルータ10は前回のNATタイプの特定時と同じであると判定して、ユーザID=01234に対応付けて記憶しているNATタイプを端末20aに通知できる(ステップS163)。
一方、ステップS164に示すように、端末20が、LAN2に移動してから、情報処理装置60aにNATタイプの特定を要求した場合、ルータ10bによって端末20と情報処理装置60aの通信が中継される。情報処理装置60aは、ユーザID=01234で特定される端末20のアドレスが前回のNATタイプを特定したときとは異なるYであるため、端末20は前回のNATタイプを特定したときと異なるLANに接続していると判定できる。すると、情報処理装置60aは、端末20aとの通信を中継しているルータ10bのNATタイプの特定のための処理を行う。
このように、情報処理装置60aは、前回のNATタイプの特定の後で端末20がLANを変更したかを判定し、LANを変更していない場合には、前回のNATタイプの情報を使用するので、端末20aに対して迅速にNATタイプを通知できる。さらに、端末20aは、端末20がLANを変更していない場合は、新たにNATタイプの判定を行わずにすみ、情報処理装置60aの処理負荷を軽減できる。
第2の実施形態によって、事業者側でユーザへの新たなサービスを提供できる可能性もある。例えば、ユーザがオンラインゲームなどでP2P通信を行う場合、ユーザの端末20とサーバを中継するルータ10でのNATの種類によっては、通信できるユーザ同士が限定される場合がある。そこで、情報処理装置60がユーザのIDに対応付けてそのユーザが使用しているルータ10のNATタイプを特定することにより、ユーザに対して、P2Pで通信可能な他のユーザのリストを提供することもできる。
<第3の実施形態>
第3の実施形態では、端末20が過去に通知されたNATタイプの判定結果を記憶しておく場合について説明する。第3の実施形態では、端末20は、NATタイプ特定要求に際して、過去に通知されたグローバルアドレス等を情報処理装置30に通知する。情報処理装置30は、端末20が接続しているLANが前回のNATタイプの判定時から変更されていない場合は、端末20が保持しているNATタイプが有効であることを通知する。一方、端末20が接続しているLANが前回のNATタイプの判定時から変更されている場合、情報処理装置30は、NATタイプを判定する。
図19は、第3の実施形態で行われるNATタイプの判定処理の例を説明するシーケンス図である。また、図20は、第3の実施形態で使用されるメッセージのフォーマットの例を示す図である。以下、図19と図20を参照しながら、第3の実施形態において、NATタイプを記憶していない端末20が情報処理装置30にNATタイプの判定を要求した場合に行われる処理の例を説明する。
端末20のユーザインタフェース21から、NATタイプの取得を要求する信号が入力されると、制御部22は、前回のNATタイプの際に端末20が位置していたLANの情報とNATの判定結果の読み出しを試みる(ステップS171、S172)。このとき、制御部22は、例えば、図20のF22に示すLAN情報取得の信号を記憶部23に出力する。記憶部23は、記憶している情報を、LAN情報取得応答の信号として、制御部22に出力する(ステップS173)。LAN情報取得応答に含まれている情報要素の例を、図20のF23に示す。F23の例では、LAN情報取得応答として、メッセージタイプ、端末IPアドレス、端末ポート番号、NATタイプが含まれている。ここで、端末のIPアドレスは、ルータ10でのアドレス変換の結果として得られるグローバルIPアドレスである。端末ポート番号は、ルータ10でのアドレス変換の結果として得られるグローバルポート番号である。なお、端末20が情報処理装置30からNATタイプの判定結果を取得する前は、LAN情報取得応答中のIPアドレス、ポート番号、NATタイプは無効値である。
図19のステップS174において、制御部22は、記憶部23から取得した情報を用いて、NATタイプ特定要求を生成する。図20のF24に、第3の実施形態で端末20が使用するNATタイプ特定要求のペイロードに含まれる情報要素の例を示す。第3の実施形態で使用されるNATタイプ特定要求には、トランザクションID、メッセージタイプ、プロトコル種別の他に、前回のNATタイプ判定の結果として通知された端末のIPアドレス、端末ポート番号、NATタイプが含まれる。図19の例では、端末20はこれまでにNATタイプ判定を要求していないので、制御部22は、端末のIPアドレス、端末ポート番号、NATタイプのいずれについても無効値を設定する。制御部22は、生成したNATタイプ特定要求を通信部24に出力する。
図19のステップS175〜S179の処理は、図14のステップS142〜S146を参照しながら説明した処理と同様である。NATタイプ特定部51aは、NATタイプを特定したことがある端末20からNATタイプを要求された可能性があるので、LAN変更判定部52aにLAN変更判定要求を出力する(ステップS180)。
図20のF25に、LAN変更判定要求に含まれる情報要素の例を示す。LAN変更判定要求は、メッセージタイプ、端末IPアドレス、端末ポート番号、NATタイプ、送信元IPアドレス、送信元ポート番号を含む。ここで、送信元IPアドレス、送信元ポート番号は、情報処理装置30a宛てのNATタイプ特定要求のIPヘッダ中の送信元の情報である。従って、端末20が現在位置しているLANとWANを中継しているルータ10によって、アドレス変換された結果として、情報処理装置30aに通知されたアドレスとポート番号である。一方、端末IPアドレス、端末ポート番号は、情報処理装置30a宛てのNATタイプ特定要求のペイロード中に含まれている情報である。すなわち、端末20が以前にもNATタイプ判定を要求している場合、前回のNAT判定中に端末20が位置していたLANとWANを接続するルータ10でのアドレス変換で使用されていたアドレスとポート番号である。図19の例では、NATタイプ特定要求中の端末のIPアドレス、端末ポート番号、NATタイプは、いずれも無効値である。このため、LAN変更判定要求においても、端末のIPアドレス、端末ポート番号、NATタイプはいずれも無効値に設定される。
LAN変更判定部52aは、LAN変更判定要求に含まれている端末IPアドレスと端末ポート番号の組合せを、LAN変更判定要求で通知された送信元IPアドレスと送信元ポート番号の組合せと比較する。図19の例では、端末のIPアドレス、端末ポート番号、NATタイプが無効な値であるため、LAN変更判定部52aは、端末20がLANを変更したかは不明であると判定する。そこで、LAN変更判定部52aは、NATタイプ特定部51aにLAN変更が行われたかが不明であることを通知するために、LAN変更判定要求を生成する。
図20のF26は、第3の実施形態で使用されるLAN変更判定応答の情報要素の例を示す。LAN変更判定応答は、メッセージタイプ、判定結果、NATタイプを含む。LAN変更判定部52aは、判定結果=不明に設定したLAN変更判定応答をNATタイプ特定部51aに出力する(ステップS181)。
NATタイプ特定部51aは、LAN変更判定応答を取得すると、NATタイプの特定を行っていない端末20からNATタイプの特定が要求されたと判定する。そこで、図10〜図12を参照しながら説明した手順により、端末20と情報処理装置30aの間の通信を中継するルータ10で行われているNATの種類の判定と端末20へのNATタイプの通知が行われる。
図21は、端末がNATタイプの判定結果を保持する方法の例を説明する図である。制御部22は、NATタイプ特定応答を取得すると、LAN情報設定のための情報を記憶部23に出力する。LAN情報設定のために記憶部23に出力される情報要素の例を図21のF21に示す。図21の例では、LAN情報設定の要求と共に、端末IPアドレス、端末ポート番号、NATタイプが記憶部23に出力される。なお、端末IPアドレスは、NATタイプ特定応答(図7のF4)によって通知された端末のグローバルIPアドレスである。同様に、端末ポート番号は、NATタイプ特定応答(図7のF4)によって通知された端末のグローバルポート番号である。記憶部23は、通知された情報を対応付けて記憶する。記憶部23が保持するテーブルの例を図21のT1に示す。
図22は、第3の実施形態で行われるNATタイプの判定処理の例を説明するシーケンス図である。以下、図22を参照しながら、NATタイプの判定を要求したことがある端末20が、情報処理装置30にNATタイプの判定を要求する場合に行われる処理の例を説明する。ステップS201〜S209で行われる処理は、図19のステップS171〜S179を参照しながら説明した処理と同様である。なお、ステップS204で生成されるNATタイプ特定要求には、記憶部23が記憶しているグローバルIPアドレス、グローバルポート番号、NATタイプなどの情報が含まれる。記憶部23が図21のT1に示すテーブルを保持している場合、NATタイプ特定要求では、グローバルIPアドレス=IP−G1、グローバルポート番号=PN−G1、NATタイプ=フルコーンに設定されている。
ステップS209において情報処理装置30aのNATタイプ特定部51aは、取得したNATタイプ特定要求を用いて、LAN変更判定要求を生成する。このため、ステップS209において生成されるLAN変更判定要求には、以下の情報が含まれている。
端末IPアドレス =IP−G1
端末ポート番号 =PN−G1
NATタイプ =フルコーン
送信元IPアドレス=NATタイプ特定要求のIPヘッダ中の送信元アドレス
送信元ポート番号 =NATタイプ特定要求のIPヘッダ中の送信元ポート番号
NATタイプ特定部51aは、LAN変更判定要求をLAN変更判定部52aに出力する(ステップS210)。
LAN変更判定部52aは、端末IPアドレスと端末ポート番号の組合せが、LAN変更判定要求中の送信元IPアドレスと送信元ポート番号の組合せと一致するかによって、端末20がLANを変更したかを判定する。図22の例では、端末IPアドレスと端末ポート番号の組合せと、送信元IPアドレスと送信元ポート番号の組合せが一致したとする。すると、LAN変更判定部52aは、以下の情報を含むLAN変更判定応答を生成する。
メッセージタイプ=LAN変更判定応答
判定結果 =変更無し
NATタイプ =フルコーン型
LAN変更判定部52aは、生成したLAN変更判定応答をNATタイプ特定部51aに出力する(ステップS211)。このため、NATタイプ特定部51aは、LAN変更判定部52aから通知されたNATタイプを通知する情報を含むNATタイプ特定応答を生成し、端末20に向けて送信する(ステップS212)。なお、ステップS213〜S217で行われる処理は、図10のステップS65〜S70を参照しながら説明した処理と同様である。その後、図21を参照しながら説明した処理と同様の処理により、記憶部23のNATタイプなどの情報が更新される。
次に、LAN変更判定要求に含まれている端末IPアドレスと端末ポート番号の組合せと、送信元IPアドレスと送信元ポート番号の組合せが一致しない場合について説明する。この場合、LAN変更判定部52aは、端末20が位置するLANは、前回のNATタイプの判定の際と異なると判定する。そこで、LAN変更判定部52aは、判定結果=変更有りに設定したLAN変更判定応答NATタイプ特定部51aに出力する。NATタイプ特定部51aは、NATタイプの特定を行っていない端末20からNATタイプの特定が要求された場合と同様に、NATタイプの判定処理を行う。
図23は、第3の実施形態の適用例を説明する図である。図23では、第2の実施形態との比較を容易にするために、図18に図示したように、端末20がLAN1とLAN2の両方に接続できる場合を例として説明する。また、図23でも、LAN1は、ルータ10a、LAN2はルータ10bによってWANと接続されている。また、ルータ10aは、AのNATタイプを用いて、端末20から送信されるパケットの送信元IPアドレスをXに変換する。ルータ10bは、BのNATタイプを用いて、端末20から送信されるパケットの送信元IPアドレスをYに変換する。
ステップS191において、端末20が情報処理装置30aに、ユーザID=01234という情報を含むNATタイプ特定要求を送信したとする。すると、情報処理装置30aは、端末20と情報処理装置30aの間の通信を中継しているルータ10aのNATタイプを端末20のグローバルアドレスとともに、端末20に通知する。端末20は、通知されたグローバルアドレスとNATタイプを図23に示すように記憶部23に記憶する(ステップS192)。
端末20が、LAN1に接続中に再度、情報処理装置30aにNATタイプの特定を要求する場合、端末20は、前回のNATタイプの特定結果として通知されたグローバルアドレスとNATタイプを情報処理装置30aに通知する。情報処理装置30aは、NATタイプ特定要求の送信元と、NATタイプ特定要求中に含められたグローバルアドレスとがいずれもAであるので、端末20が通信に使用するLANを前回のNATタイプの特定時と変更していないと判定する。そこで、情報処理装置30aは、端末20が同じルータ10を介して通信していると判定し、NATタイプ特定要求中に含められた前回のNATタイプの特定結果を、今回の結果として端末20に通知する(ステップS193)。
一方、ステップS194に示すように、端末20が、LAN2に移動してから、情報処理装置30aにNATタイプの特定を要求した場合、ルータ10bによって端末20と情報処理装置30aの通信が中継される。このため、端末20から送信されたNATタイプ特定要求の送信元アドレスは、ルータ10bによってYに設定されるが、NATタイプ特定要求中で前回のNATタイプと対応付けられるグローバルIPアドレスはXである。情報処理装置30aは、端末20のアドレスが前回のNATタイプを特定したときと異なるYであるため、端末20は前回のNATタイプを特定したときと異なるLANに接続していると判定できる。すると、情報処理装置30aは、端末20aとの通信を中継しているルータ10bのNATタイプの特定のための処理を行う。
以上説明したように、第3の実施形態では、情報処理装置30は、前回のNATタイプの特定の後で端末20がLANを変更したかを判定し、端末20がLANを変更していない場合には、前回のNATタイプの情報を使用する。このため、情報処理装置30は、前回のNATタイプの特定の際と同じLANから通信している端末20に対して、迅速にNATタイプを通知できる。さらに、情報処理装置30は、端末20がLANを変更していない場合は、新たにNATタイプの判定を行わずにすみ、情報処理装置30の処理負荷を軽減できる。さらに、第2の実施形態と異なり、第3の実施形態では、情報処理装置30は、前回のNATタイプの特定結果を記憶していなくても良い。このため、第3の実施形態では、情報処理装置30が記憶する情報量を削減することもでき、情報処理装置30の処理負荷をさらに軽減できる。
なお、実施形態は上記に限られるものではなく、様々に変形可能である。以下にその例をいくつか述べる。
例えば、第3の実施形態は、情報処理装置60によって行われても良い。
以上の説明で述べたテーブルやパケットに含まれている情報要素は例であり、実装に応じて変更され得る。例えば、図7のF1において、NATタイプ特定要求にはプロトコル種別が含まれる場合について説明したが、NATタイプ特定要求にはプロトコル種別が含まれていなくても良い。NATタイプ特定要求にはプロトコル種別が含まれていない場合、情報処理装置30中の制御部40は他の情報処理装置30に接続判定を要求する際に、自装置が端末20との通信に使用しているプロトコルを接続判定要求に含める。
同様に、第3の実施形態において、端末20は、NATタイプ特定要求(図20のF24)にNATタイプの判定結果を含めなくても良い。NATタイプ特定要求にNATタイプの情報がなく、かつ、端末20が接続しているLANが変更されていない場合、情報処理装置30は、NATタイプ特定応答においてNATタイプが前回のNATタイプの特定の際と同じであることを端末20に通知する。
また、上記の説明では、端末20と情報処理装置30または情報処理装置60の間の通信に使用されるトランスポート層のプロトコルとしてTCP、UDPが用いられる場合を例として説明したが、実装に応じて任意のプロトコルが使用されうる。
さらに、第1〜第3の実施形態のいずれにおいても、端末情報テーブル61に含まれている情報は、トランザクションIDで特定されるNATタイプ特定要求で要求された取得処理が終わると削除されても良い。この場合、情報処理装置30や情報処理装置60のメモリが有効活用される。
上述の第1〜第3の実施形態を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
複数の情報処理装置を含むネットワーク中の第1の情報処理装置は、前記ネットワークにルータを介してアクセスしている端末から、前記ルータで行われるアドレス変換の種類の特定を要求する特定要求パケットを受信すると、第2の情報処理装置に前記端末との通信の確立を要求し、
前記第2の情報処理装置は、前記端末に対して通信の確立を要求するとともに、前記端末と前記第2の情報処理装置の間での通信の確立に成功したかを前記第1の情報処理装置に通知し、
前記第1の情報処理装置は、
前記第2の情報処理装置から受信した通知を用いて、前記種類を特定し、
前記端末に前記種類を通知する
ことを特徴とする判定方法。
(付記2)
前記第1の情報処理装置は、
前記第1の情報処理装置が備える複数のポートのうちの第1のポートを用いて前記特定要求パケットを受信し、
前記第1のポートとは異なる第2のポートを介して、前記端末に通信の確立を要求し、
前記第2のポートを介した前記端末への通信の要求の結果を、さらに用いて、前記種類を特定する
ことを特徴とする付記1に記載の判定方法。
(付記3)
前記第1の情報処理装置は、前記端末に対して前記第2の情報処理装置に接続することを要求する接続要求パケットを送信し、
前記端末は、前記接続要求パケットを受信すると、前記第2の情報処理装置に前記端末との通信の開始を要求すると共に、前記端末が前記第2の情報処理装置との通信に使用しているアドレスを前記第1の情報処理装置に通知することを要求する通知要求パケットを、前記第2の情報処理装置に送信し、
前記第1の通信装置は、前記第2の情報処理装置から通知されたアドレスと、前記特定要求パケットの送信元アドレスとの比較結果をさらに用いて、前記種類を特定する
ことを特徴とする付記1または2に記載の判定方法。
(付記4)
前記特定要求パケットは、前記端末を識別する第1の識別情報をさらに含み、
前記第1の情報処理装置は、
前記特定要求パケットの送信元アドレスと前記第1の識別情報に対応付けて、前記ルータで行われるアドレス変換の種類の判定結果を記憶し、
アドレス変換の種類の特定を要求する他の特定要求パケットを受信し、
前記他の特定要求パケットは、前記他の特定要求パケットの送信元を識別する第2の識別情報を含み、
前記第1の情報処理装置は、
前記第1の識別情報と前記第2の識別情報が一致し、かつ、前記特定要求パケットの送信元アドレスと、前記他の特定要求パケットの送信元のアドレスが一致する場合、前記他の特定要求パケットは、前記端末が前記ルータを介して送信したパケットであると判定し、
前記第1の識別情報に対応付けられたアドレス変換の種類を、前記端末に通知する
ことを特徴とする付記1〜3のいずれか1項に記載の判定方法。
(付記5)
前記第1の情報処理装置は、前記種類と共に、前記端末の送信元アドレスとして前記第1の情報処理装置に通知されているアドレスである第1のアドレスを、前記端末に通知し、
前記端末は、前記種類を取得した後に、前記端末と前記第1の情報処理装置の間の通信を中継しているルータでのアドレス変換の種類の特定を要求する際に送信する他の特定要求パケットに、前記第1のアドレスをデータとして含め、
前記第1の情報処理装置は、
前記他の特定要求パケットの送信元のアドレスとして前記第1の情報処理装置が取得した第2のアドレスと、前記第1のアドレスが一致すると、前記他の特定要求パケットは、前記端末が前記特定要求パケットの送信の際と同じルータを介して送信したパケットであると判定し、
前記特定要求パケットの応答として前記端末に通知したアドレス変換の種類を、前記他の特定要求パケットの応答として前記端末に通知する
ことを特徴とする付記1〜3のいずれか1項に記載の判定方法。
(付記6)
複数の情報処理装置を含むネットワーク中の情報処理装置であって、
パケットを受信する受信部と、
前記ネットワークにルータを介してアクセスしている端末から、前記ルータで行われるアドレス変換の種類の特定を要求する特定要求パケットを前記受信部が受信すると、他の情報処理装置に前記端末との通信の確立を要求する要求部と、
前記他の情報処理装置から前記端末との通信の確立に成功したかが通知されると、通知された結果を用いて、前記種類を特定する特定部と、
前記端末に前記種類を通知する通知パケットを送信する送信部
を備えることを特徴とする情報処理装置。
(付記7)
前記送信部および前記受信部がパケットの送受信をする際に使用する複数のポートをさらに備え、
前記要求部は、前記特定要求パケットの受信に使用した第1のポートとは異なる第2のポートを介して、前記端末に通信の確立を要求し、
前記特定部は、前記第2のポートを介した前記端末への通信の要求の結果を、さらに用いて、前記種類を判定する
ことを特徴とする付記6に記載の情報処理装置。
(付記8)
前記要求部は、前記端末に対して前記他の情報処理装置に接続することを要求する接続要求パケットを生成し、
前記送信部は、前記接続要求パケットを前記端末に向けて送信し、
前記特定部は、前記他の情報処理装置から、前記端末との通信を行っていることと、前記端末が前記他の情報処理装置との通信に使用しているアドレスが通知されると、前記他の情報処理装置から通知されたアドレスと、前記特定要求パケットの送信元アドレスとの比較結果をさらに用いて、前記種類を特定する
ことを特徴とする付記6または7に記載の情報処理装置。
(付記9)
前記特定部は、前記特定要求パケットから、前記端末を識別する第1の識別情報を取得し、
前記情報処理装置は、前記特定要求パケットの送信元アドレスと前記第1の識別情報に対応付けて、前記ルータで行われるアドレス変換の種類の判定結果を記憶する記憶部をさらに備え、
前記特定部は、
前記受信部がアドレス変換の種類の特定を要求する他の特定要求パケットを受信すると、前記他の特定要求パケットの送信元を識別する第2の識別情報を前記他の特定要求パケットから取得し、
前記第1の識別情報と前記第2の識別情報が一致し、かつ、前記特定要求パケットの送信元アドレスと、前記他の特定要求パケットの送信元のアドレスが一致する場合、前記他の特定要求パケットは、前記端末が前記ルータを介して送信したパケットであると判定し、
前記第1の識別情報に対応付けられたアドレス変換の種類を、前記端末に通知するための処理を行う
ことを特徴とする付記6〜8のいずれか1項に記載の情報処理装置。
(付記10)
前記通知パケットは、前記種類と共に、前記端末の送信元アドレスとして前記情報処理装置に通知されているアドレスである第1のアドレスを含み、
前記受信部は、前記第1のアドレスをデータとして含む他の特定要求パケットを受信し、
前記特定部は、
前記他の特定要求パケットの送信元のアドレスである第2のアドレスと、前記第1のアドレスが一致すると、前記他の特定要求パケットは、前記端末が前記特定要求パケットの送信の際と同じルータを介して送信したパケットであると判定し、
前記特定要求パケットの応答として前記端末に通知したアドレス変換の種類を、前記他の特定要求パケットの応答として前記端末に通知するための処理を行う
ことを特徴とする付記6〜8のいずれか1項に記載の情報処理装置。