一般に、ネットワークに接続される通信端末を識別するために、通信端末にはIPアドレスが付される。接続されるネットワーク全体で一意に決定され、一対一の通信(ピア・ツー・ピア通信:以下、「P2P通信」という)を可能とするIPアドレスを、グローバルIPアドレスという。また、特定のネットワーク内だけで一意に決定され、他のネットワークとのP2P通信に直接使用することができないIPアドレスを、ローカルIPアドレスという。ローカルIPアドレスによって通信端末が相互に識別されるネットワークを、プライベートネットワークという。
プライベートネットワークに接続される通信端末(ローカルIPアドレスを有する通信端末)が、グローバルネットワークに接続される通信機器(グローバルIPアドレスを有する通信端末)と通信するためには、一般に、プライベートネットワークとグローバルネットワークとの間に、ネットワークアドレス変換(Network Address Translation:以下、「NAT」という)の機能、あるいは、ネットワークアドレスポート変換(Network Address Port Translation:以下、「NAPT」という)機能を有する通信機器(ルータ)が接続される。尚、以降においては、説明の簡略化のために、NATとNAPTとを併せて「NAT」という。
ところが、ルータが有するNAT機能によって、プライベートネットワークと、グローバルネットワークとの間を単にルータ等の通信機器によって中継するだけでは、それぞれ異なるプライベートネットワークに接続される2つの通信機器は、P2P通信のためのパケットを交換することができない。
そこで、各々がルータを介して異なるプライベートネットワークに接続されている2つの端末が、ルータのNATを越えてP2P通信路を確立するための手法として、STUN(Simple Traversal UDP through NAT:RFC3489)を利用する方法が知られている。尚、以下の説明においては、「パケット」とは、「UDPパケット」のことをいう。
まず、STUNを利用するP2P通信路確立手法の説明に先立ち、図18A〜図18Eを参照しながら、NATの種類について説明する。尚、プライベートネットワークは、家庭内、すなわち宅内のネットワークとして構築される場合に限らず、企業内のネットワークとして構築される場合もある。以下においては、説明の便宜上、プライベートネットワークが宅内ネットワークである場合を想定するが、下記の説明は、企業において構築される大規模なプライベートネットワークにも同様に当てはまる。また、ある宅内のプライベートネットワークから見た場合に、当該宅内ネットワークとは異なるネットワークのことを、宅外ネットワーク、あるいは、外部ネットワークという。更に、説明の便宜のために、IPアドレスIPとポート番号Pとの組み合わせを、(IP、P)と表現する。
図18Aは、Full Cone NATと呼ばれるNATを説明するための図である。
Full Cone NAT特性を有するルータは、あるプライベートアドレスを有する宅内端末の特定のポート番号からある宅外端末へと送信されるパケットに対して、常に同一のポート番号を割り当てる。例えば、ルータは、宅内端末A(IPa、Pa)が送信したパケットに常にポート番号[Pb]を割り当て、当該パケットを外部ネットワークに接続される宅外端末Cへと転送する。また、Full Cone NAT特性を有するルータは、外部ネットワークに接続された宅外端末が(IPb、Pb)宛に送信した全てのパケットを、宅内端末(IPa、Pa)へと転送する。したがって、ルータは、宅外端末D(IPd、Pd)が(IPb、Pb)宛に送信したパケットも、宅内端末A(IPa、Pa)に転送する。
図18Bは、Restricted Cone NAT(以下、「R NAT」という)と呼ばれるNATを説明するための図である。
R NAT特性を有するルータは、ある宅内端末A(IPa、Pa)が宅外ネットワークに向けて送信したパケットに対して、常に同一のポート番号[Pb]を割り当てる。ただし、R NAT特性を有するルータは、宅外端末Aが送信したパケットの送信先である宅外端末C(IPアドレスIPcを有する)が(IPb、Pb)宛てに送信したパケットのみを宅内端末A(IPa、Pa)へと転送する点で、Full Cone NAT特性を有するルータとは異なっている。したがって、ルータは、宅内端末Aが送信したパケットの宛先でない宅外端末Dが、(IPb、Pb)へと送信したパケットを宅内端末Aへと転送しない。尚、R NAT特性を有するルータは、受信したパケットの発信元IPアドレスが[IPc]であれば、全ての発信元ポート番号のパケットを宅内端末Aへと転送する。したがって、ルータは、宅外端末Cのポート[Pc2]から(IPb、Pb)へと送信したパケットをも宅内端末Aへと転送する。
図18Cは、Port Restricted Cone NAT(以下、「PR NAT」という)と呼ばれるNAT特性を説明するための図である。
PR NAT特性を有するルータは、ある宅内端末A(IPa、Pa)が宅外ネットワークに向けて送信したパケットに対して、常に同一のポート番号[Pb]を割り当てる。ただし、PR NAT特性を有するルータは、宅内端末Aが発信したパケットの宛先(IPc1、Pc1)から(IPb、Pb)へと送信されたパケットのみを宅内端末A(IPa、Pa)へと転送する点で、R NAT特性を有するルータとは相違する。したがって、ルータは、宅外端末Dの発信元(IPd、Pd)から発信されたパケットのみならず、宅外端末の発信元(IPc2、Pc2)から送信されたパケットをも破棄する。
以下においては、上記のFull Cone NAT、R NAT、PR NATを総称して「Cone NAT」という。
図18Dは、Adress Sensitive Symmetric NAT(以下、「AS NAT」という)と呼ばれるNATを説明するための図である。
AS NAT特性を有するルータは、宅内端末Aが発信したパケットの宛先IPアドレスの各々に異なるポート番号を割り当てる。例えば、宅内端末A(IPa、Pa)から宅外端末C(IPc、Pc)へと送信されたパケットには、ポート番号[Pb1]を割り当て、宅内端末A(IPa、Pa)から、宅外端末とは異なるIPアドレスを有する宅外端末D(IPd、Pd)へと送信されたパケットには、ポート番号[Pb2]を割り当てる。また、AS NAT特性を有するルータは、あるポート番号に割り当てられた宅外端末から送信されたパケットのみを宅内端末A(IPa、Pa)へ転送し、当該ポート番号に割り当てられていない宅外端末から送信されたパケットを全て破棄する。例えば、ルータは、IPアドレス[IPc]を有する宅外端末Cから、(IPb、Pb)宛に送信されたパケットを宅内端末A(IPa、Pa)へと転送するが、IPアドレス[IPd]を有する宅外端末Dから、(IPb、Pb)宛に送信されたパケットを破棄する。尚、R NAT特性を有するルータは、(IPb、Pb)宛に送信されたパケットの発信元IPアドレスが[IPc]であれば、全ての発信元ポート番号を有するパケットを宅内端末Aへと転送する。
図18Eは、Port Sensitive Symmetric NAT(以下、「PS NAT」という)と呼ばれるNATを説明するための図である。
PS NAT特性を有するルータは、宅内端末Aが送信したパケットの宛先IPアドレス及び宛先ポート番号の組み合わせの各々に、異なるポート番号を割り当て、当該受信パケットをネットワークへと送出する。例えば、ルータは、宅内端末A(IPa、Pa)から発信されたパケットの宛先(IPc、Pc0)には、ポート番号[Pb0]を割り当て、宛先(IPc、Pc1)には、ポート番号[Pb1]を割り当て、宛先(IPc、Pc2)には、ポート番号[Pb2]を割り当てる。また、ルータは、あるポート番号に割り当てられた宅外端末から送信されたパケットを宅内端末Aへと転送するが、当該ポート番号に割り当てた宅外端末以外から送信されたパケットを全て破棄する。したがって、ルータは、発信元(IPc、Pc1)からポート番号[Pb1]を宛先として送信されたパケットを宅内端末Aへと転送するが、発信元(IPc、Pc2)及び発信元(IPd、Pd1)からポート番号[Pb1]へと送信されたパケットを全て破棄する。
以下においては、上記のAS NAT及びPS NATを総称して、「Symmetric NAT」という。
また、上述したCone NATやSymmetric NATとは別に、宅内端末の発信元ポート番号と同じポート番号を用いてNATの設定を行う性質を有するルータが知られている。
図19Aは、Port Reuse特性の概略を説明するための図である。
図19Aに示されるように、ルータは、宅内端末Aのポート番号[Pa]を発信元とするパケットにポート番号[Pa]を割り当て、宅内端末Aのポート番号[Pb]を発信元とするパケットにポート番号[Pb]を割り当て、宅内端末Aのポート番号[Pc]を発信元とするパケットにポート番号[Pc]を割り当てる。このように、通信装置が、ある発信元ポート番号を含むパケットに、当該発信元ポート番号と同一のポート番号を割り当てる特性のことを、「Port Reuse」という。
Port Reuseは、上記のNAT特性とは異なる特性である。したがって、Port Reuse特性を有する通信装置は、必ず上述のNAT特性のいずれかを備える。
図19Bは、Port Reuse特性を有するルータの機能を説明するための図である。
図19Bに示されるルータが「Port Reuse特性及びFull Cone NAT特性」を備える場合、発信元IPアドレス及び発信元ポート番号に(IPa、Pa)が設定されたパケットに対して、ルータは、常にポート番号[Pa]を割り当て、当該パケットを外部ネットワークへと送出する。また、ルータは、外部ネットワークに接続された宅外端末が宛先(IPb、Pa)へと発信した全てのパケットを宅内端末Aに転送する。
次に、ルータのNATを越えてP2P通信路を確立するために、STUNを利用する方法について説明する。
各々がルータを介して異なるプライベートネットワークに接続される2つの通信端末の間にP2P通信路を確立するためには、各端末は、パケットに、宛先IPアドレスと宛先ポート番号とを設定することが必要である。しかしながら、上述のように、ルータが有するNAT特性に応じて、アドレス変換方法が異なるので、通信端末は、ルータのNAT特性を考慮した上で、パケットの宛先を設定する必要がある。
そこで、P2P通信路を確立するためには、まず、STUNに規定される方法に従って、通信端末が接続されているルータのNAT特性が調査される。より詳細には、STUNにおいては、通信端末は、異なるIPアドレスを有する2つのサーバの各々へとテスト用パケットを送信する。そして、ルータが当該テスト用パケットの各々に割り当てたポート番号が一致するか否かを判断することによって、ルータのNAT特性がCone NATであるか、または、Symmetric NATであるかが判断される。
以下、図20A〜図20B及び図21を参照しながら、STUNによるNAT特性の調査方法を説明する。
図20Aは、STUN−TestIの概略を示す図である。
TestIにおいては、宅内端末Aは、発信元が(IPa、Pa)であるパケットを、サーバ1(IPc、Pc1)へと送信する。サーバ1は、宅内端末Aから発信されたパケットを参照して、発信元ポート番号に[Pc1]が設定され、かつ、宛先ポート番号にルータが割り当てた[Pb]が設定されたパケットを送信する。
図20Bは、STUN−TestIIの概略を示す図である。
TestIIにおいては、宅内端末Aは、発信元を(IPa、Pa)とし、宛先をサーバ1の(IPc、Pc1)とするパケットを送信する。これに対して、サーバ2が、発信元に(IPd、Pd1)が設定され、かつ、宛先ポート番号にルータが割り当てた[Pb]が設定されたパケットを送信する。
図20Cは、STUN−TestIIIの概略を示す図である。
TestIIIにおいては、宅内端末Aは、発信元を(IPa、Pa)とし、宛先をサーバ1の(IPc、Pc1)とするパケットを送信する。サーバ1は、発信元ポート番号に[Pc1]とは異なる[Pc2]が設定され、かつ、宛先ポート番号にポート番号[Pb]が設定されたパケットを送信する。
図21は、STUNによってNAT特性を調査するためのフローチャートである。
まず、宅内端末Aは、上記のTestIを実行する(ステップS2501)し、サーバ1から応答を受信したか否かを判断する(ステップS2502)。宅内端末Aは、サーバ1からの応答を受信した場合には、ステップS2504に進み、それ以外の場合は、宅内端末Aは、サーバ1とのUDP通信が不能であると判断する(ステップS2503)。
宅内端末Aがサーバ1からの応答を受信した場合(ステップS2501でYes)、宅内端末Aは、受信した応答パケットに含まれるアドレス変換後のIPアドレス[IPb]と、自身のIPアドレス[IPa]が一致するか否かを判断する(ステップS2504)。宅内端末Aは、応答パケットに含まれるIPアドレス[IPb]と、自身のIPアドレス[IPa]とが一致する場合には、ステップS2505に進み、それ以外の場合には、ステップS2909へ進む。IPアドレス[IPb]及び[IPa]が一致することは、宅内端末Aがルータを介さずに外部ネットワークに接続されており、宅内端末A及びサーバ1の間でNATが行われていないことを示す。
ステップS2504でYesである場合、宅内端末Aは、TestIIを実行する(ステップS2505)し、サーバ2からの応答を受信したか否かを判断する(ステップS2506)。宅内端末Aは、サーバ2からの応答を受信した場合には(ステップS2506でYes)、送信先端末(サーバ1)以外の通信端末からもパケットを受信することが可能、すなわち、ネットワークに対してオープンであると判断する(ステップS2508)。一方、宅内端末Aは、サーバ2からの応答を受信しない場合(ステップS2506でNo)、宅内端末Aは、UDPファイアウォールによってパケットの送受信が制限されていると判断する(ステップS2507)。
TestIの結果、IPアドレス[IPb]及び[IPa]が一致しない場合には(ステップS2504でNo)、宅内端末Aは、TestIIを実行し(ステップS2509)、パケットの宛先とは異なるサーバ2からの応答を受信したか否かを判断する(ステップS2510)。宅内端末Aがサーバ2からの応答を受信した場合には(ステップS2510でYes)、宅内端末Aが接続されるルータは、Full Cone NAT特性を有すると判断する(ステップS2511)。一方、宅内端末Aがサーバ2からの応答を受信しなかった場合には(ステップS2510でNo)、宅内端末Aは、サーバ2に対してTestIを実行する(ステップS2512)。ここで、宅内端末Aからの送信パケットにルータが割り当てるポート番号を[Pb’]とする。宅内端末Aは、ステップS2512においてサーバ2から受信した応答パケットに含まれ、NATによって設定されたIPアドレスとポート番号との組み合わせ(IPb、Pb’)と、ステップS2501においてサーバ1から受信した応答パケットに含まれ、NATによって設定されたIPアドレスとポート番号との組み合わせ(IPb、Pb)とが一致するか否かを判断する(ステップS2513)。宅内端末Aは、(IPb、Pb’)が(IPb、Pb)と一致すると判断した場合には(ステップS2513でYes)、ステップS2515へ進む。宅内端末Aは、(IPb、Pb’)及び(IPb、Pb)が一致しないと判断した場合には(ステップS2513でNo)、自身が接続されるルータがSymmetric NAT特性を有すると判断する(ステップS2514)。
ステップS2513においてYesである場合、宅内端末Aは、TestIIIを実行し(ステップS2515)、サーバ1から応答を受信したか否かを判断する(ステップS2516)。宅内端末Aは、サーバ1から応答を受信した場合(ステップS2516でYes)、自身が接続されるルータがR NAT特性を有すると判断し(ステップS2517)、それ以外の場合には、自身が接続されるルータがPR NAT特性を有すると判断する(ステップS2518)。
上述のように、STUNに規定された方法においては、図21に示される処理フローに従い、図20A〜図20Cに示される3種類のテストを実行することによって、NATの特性が調査される。
また、STUNによってNAT特性を調査した結果、2つの通信端末が共にCone NAT特性を有するルータに接続されている場合、更に当該2つの通信端末間にP2P通信路を確立する手法も知られている。以下、図22を参照しながら、STUNを利用するP2P通信路確立手法について説明する。
図22は、STUNを利用するP2P通信路確立方法を示すシーケンス図である。
まず、端末1は、IPアドレス及びポート番号の登録を要求するためのIP/ポート登録要求パケットを、ルータ1を介してサーバへ送信する(ステップS201)。ルータ1は、端末1から受信したパケットの発信元を(IPL1、LP1)から(IPG1、GP1)へとアドレス変換し、アドレス変換されたパケットをサーバ1へ送信する。サーバは、ルータ2から受信したパケットに含まれる発信元IPアドレスIPG1及び発信元ポート番号GP1を登録する(ステップS202)。
同様に、端末2は、IP/ポート登録要求パケットを、ルータ2を介してサーバへ送信する(ステップS203)。ルータ2は、端末2から受信したパケットの発信元を(IPL2、LP2)から(IPG2、GP2)へとアドレス変換し、アドレス変換されたパケットをサーバ2へ送信する。サーバは、ルータ2から受信したパケットに含まれる発信元IPアドレスIPG1及び発信元ポート番号GP1を登録する(ステップS204)。
次に、端末2は、端末1とP2P通信するために、端末1にアクセスするためのIP/ポート取得要求をサーバへ送信する(ステップS205)。サーバは、端末2からのIP/ポート取得要求に応答して、ルータ1が端末1の発信元(IPL1、LP1)に割り当てたIPアドレス及びポート番号の組み合わせ(IPG1、GP1)を含むIP/ポート取得応答パケットを端末2へ返送する(ステップS206)。
端末2は、サーバから受信したパケットを参照して、端末1にアクセスするためのIPアドレス及びポート番号(IPG1、GP1)を取得する。そこで、端末2は、(IPG1、GP1)を宛先とするP2P開始要求パケットを送信する(ステップS207)。
ここで、端末2から送信されたP2P開始要求パケットへのルータ1の対応は、ルータ1が備えるNAT特性に応じて異なる。
まず、ルータ1がFull Cone NAT(図18A)を実行する場合、ルータ1が端末2から送信されたP2P要求パケットを端末1へと転送することによって、端末1と端末2との間にP2P通信路が確立する。
次に、ルータ1がR NAT(図18B)またはPR NAT(図18C)を実行する場合、ルータ1は、端末2から送信されたP2P開始要求パケットを破棄する。したがって、当該P2P開始要求パケットは、端末1(IPL1、LP1)へ転送されることはない。
ここで注目すべきは、Cone NAT特性を有するルータ2は、発信元に(IPL2、LP2)が設定され、かつ、宛先に(IPG1、GP1)が設定されたパケットをルータ1へと転送することによって、ルータ1からの応答パケットを受け付けることができるようにNATを設定する点である。すなわち、ルータ2がFull Cone NATを実行する場合には、ルータ2は、全ての宅外端末がルータ2(IPG2、GP2)へと発信したパケットを端末2(IPL2、LP2)に転送するようにNATを設定する。ルータ2がR NAT特性を有する場合には、ルータ2は、発信元IPアドレスが[IPG1]であるパケットを端末2(IPL2、LP2)に転送するようにNATを設定する。ルータ2がPR NAT特性を有する場合には、発信元IPアドレス及び発信元ポート番号が(IPG1、GP1)であるパケットを端末2(IPL2、LP2)に転送するようにNATを設定する。この結果、次に、発信元IPアドレス及び発信元ポート番号が(IPG1、GP1)であるパケットをルータ2が受信すれば、ルータ2は、当該パケットを端末2に転送することができ、よって、端末1及び端末2の間にP2P通信路が確立される。
そこで、端末1は、端末2にアクセスするためのパケットを、IP/ポート取得要求としてサーバへ送信する(ステップS208)。サーバは、端末1からのIP/ポート取得要求に応答して、ルータ2が端末1の発信元(IPL1、LP1)に割り当てたIPアドレス及びポート番号(IPG2、GP2)を含むパケットを、IP/ポート取得応答として端末2に返信する(ステップS209)。
端末1は、サーバから受信したIP/ポート取得応答を参照して、端末2のIPアドレス及びポート番号(IPL2、PL2)に割り当てられているルータ2のIPアドレス及びポート番号(IPG2、GP2)を取得する。
次に、端末1は、発信元が(IPL1、LP1)に設定されたP2P開始要求パケットを端末2へと送信する(ステップS210)。上述したように、この段階においては、ルータ2は、発信元IPアドレス及び発信元ポート番号が(IPL1、LP1)であるパケットを破棄することなく、端末2へと転送する。一方、ルータ1は、発信元に(IPL1、LP1)が設定されたパケットを、ルータ2へと転送することによって、ルータ2からの応答パケットを受け付けることができるようにNATを設定することができる。すなわち、ルータ1がR NATを実行する場合には、ルータ1は、発信元IPアドレスが[IPG2]であるパケットを端末1(IPL1、LP1)に転送するように設定する。ルータ1がPR NATを実行する場合には、発信元IPアドレス及び発信元ポート番号が(IPG2、GP2)であるパケットを端末2(IPL2、LP2)に転送するように設定する。
したがって、端末2が、端末1からのP2P開始要求パケットに応答して、P2P開始応答パケットを端末1に送信すると(ステップS211)、端末1及び端末2の間にP2P通信路が確立される。
上記のような手法によれば、異なるプライベートネットワークに接続される2つの通信端末が共にCone NAT特性を有するルータに接続されている場合には、当該2つの通信端末間にP2P通信路を確立することが可能である。
しかしながら、2つの通信端末がSymmetric NATを介して接続されている場合には、STUNを利用する手法によって、P2P通信路を確立することができない。以下、この理由を説明する。
図23は、Symmetric NAT特性を有するルータを介して接続される2つの通信端末に、STUNを利用するP2P通信路確立方法を適用した場合の処理手順を示すシーケンス図である。より特定的には、図23に示される例においては、あるプライベートネットワークに接続される端末1は、Symmetric NATを実行するルータ1を介して外部ネットワークに接続されている。
まず、ステップS301〜S304において、図22に示されるステップS201〜S204と同様に、端末1及び端末2の各々は、サーバへとIP/ポート登録要求パケットを送信することによって、IPアドレス及びポート番号をサーバに登録する。
次に、端末2は、端末1とP2P通信するために用いるIPアドレス及びポート番号を取得するために、IP/ポート取得要求パケットをサーバへ送信する(ステップS305)。サーバは、端末2からのIP/ポート取得要求に応答して、ルータ1によって発信元IPアドレス及び発信元ポート番号(IPL1、LP1)に割り当てられたIPアドレス及びポート番号(IPG1、GP1)を含むIP/ポート取得応答パケットを端末2へ返送する(ステップS306)。
端末2は、サーバから受信したパケットを参照して、端末1にアクセスするためのIPアドレス及びポート番号(IPG1、GP1)を取得する。そこで、端末2は、(IPG1、GP1)を宛先とするパケットを、P2P開始要求として送信する(ステップS207)。
ここで、ルータ1がSymmetric NAT特性を有する場合、ルータ1は、P2P開始要求パケットを端末1(IPL1、LP1)に転送することなく破棄する。また、上述したように、Cone NATを実行するルータ2は、発信元に(IPL2、LP2)が設定され、かつ、宛先に(IPG1、GP1)が設定されたパケットをルータ1へと転送することによって、ルータ1からの応答パケットを受け付けることができるようにNATを設定する。
次に、端末1は、端末2にアクセスするためのパケットを、IP/ポート取得要求としてサーバへ送信する(ステップS308)。サーバは、端末1からのIP/ポート取得要求に応答して、ルータ2が端末2の発信元IPアドレス及び発信元ポート番号(IPL2、LP2)に割り当てたIPアドレス及びポート番号(IPG2、GP2)を含むパケットを、IP/ポート取得応答として端末2に返信する(ステップS309)。
端末1は、サーバから受信したIP/ポート取得応答を参照して、端末2のIPアドレス及びポート番号(IPL2、PL2)に割り当てられているルータ2のIPアドレス及びポート番号(IPG2、GP2)を取得する。
次に、端末1は、発信元を(IPL1、LP1)とするパケットを、P2P開始要求として、端末2へと送信する(ステップS310)。しかしながら、ルータ1は、Symmetric NAT特性を有するため、パケットの宛先毎に異なるポート番号を割り当てる。したがって、ルータ1は、端末1から受信したP2P開始要求パケットには、[GP1]とは異なるポート番号[GP3]を割り当て、当該パケットをルータ2へと転送する。
ここで、ルータ2がFull Cone NAT特性またはR NAT特性を有する場合には、ルータ2は、受信したP2P開始要求パケットを端末2(IPL2、LP2)に転送するので、端末1及び端末2の間にP2P通信路が確立される。
しかしながら、ルータ2がPR NATまたはSymmetric NAT特性を有する場合には、ルータ2は、受信したP2P開始要求パケットを端末2に転送することなく破棄するため、端末1及び端末2の間におけるP2P通信路の確立に失敗する。
図24は、Symmetric NAT特性を有するルータを介して接続される2つの通信端末に、STUNを利用するP2P通信路確立方法を適用した場合の処理手順を示すシーケンス図である。より特定的には、図24に示される例においては、あるプライベートネットワークに接続される端末2は、Symmetric NATを実行するルータ2を介して外部ネットワークに接続されている。
まず、ステップS401〜S404において、図22に示されるステップS201〜S204と同様に、端末1及び端末2の各々は、サーバへとIP/ポート登録要求パケットを送信することによって、IPアドレス及びポート番号をサーバに登録する。
次に、端末2は、端末1とP2P通信するためのIPアドレス及びポート番号を取得するために、IP/ポート取得要求パケットをサーバへ送信する(ステップS405)。サーバは、端末2からのIP/ポート取得要求に応答して、ルータ1によって発信元IPアドレス及び発信元ポート番号(IPL1、LP1)に割り当てられたIPアドレス及びポート番号(IPG1、GP1)を含むIP/ポート取得応答パケットを端末2へ返送する(ステップS406)。
端末2は、サーバから受信したパケットを参照して、端末1にアクセスするためのIPアドレス及びポート番号(IPG1、GP1)を取得する。そこで、端末2は、(IPG1、GP1)を宛先とするパケットを、P2P開始要求として送信する(ステップS407)。
ここで、ステップS407において端末2から送信されたP2P開始要求パケットの宛先は、ステップS403において端末2から送信されたIP/ポート登録要求パケットの宛先と異なる。したがって、Symmetric NATを実行するルータ2は、当該P2P開始要求パケットに、ポート番号[GP2]とは異なるポート番号[GP3]を割り当てる。すなわち、ルータ2は、ルータ2(IPG2、GP3)を宛先として端末1が送信したパケットを、端末2(IPL2、LP2)へと転送するように設定する。
それ故に、端末1がサーバから端末2へアクセスするためのIPアドレス及びポート番号(IPG2、GP2)を取得した後に(ステップS408〜S409)、宛先IPアドレス及び宛先ポート番号(IPG2、GP2)を宛先とするP2P開始要求パケットを送信しても、ルータ2は、当該P2P開始要求パケットを破棄する。したがって、端末1及び端末2の間におけるP2P通信路の確立に失敗する。
以上説明したように、ルータ1またはルータ2の少なくとも一方がSymmetric NATを実行する場合、STUNを利用するP2P通信路確立方法が成功する可能性は高いとは言い難い。
上記のSTUNの問題点に対し、従来、Symmetric NATを含む全てのNATの中で、任意の2つのNATの組み合わせに対して、P2P通信路を確立する方法が知られている(例えば、特許文献1参照)。
特許文献1に記載されているP2P通信路確立方法においては、ある通信端末は、P2P通信の接続先となる通信端末がP2P開始要求パケットを送信する際に使用するルータのポート番号を複数予測する。当該ある通信端末は、予測したポート番号を宛先ポートとするパケットを複数送信する。当該ある通信端末が接続されるルータは、接続先通信端末から送信されるパケットを受信することができるポート番号を複数を設定するため、P2P通信路の確立が成功する可能性を向上することができる。以下、更なる詳細について説明する。
図25は、上記特許文献に記載されている従来のP2P通信路確立方法を示すシーケンス図である。図25に示される例においては、ルータ1及びルータ2は共に、Symmetric NAT特性を有する。
まず、ステップS501〜S504において、図22に示されるステップS201〜S204と同様に、端末1及び端末2の各々は、サーバへとIP/ポート登録要求パケットを送信することによって、IPアドレス及びポート番号をサーバに登録する。
次に、端末2は、端末1とP2P通信するために、P2P通信要求パケットをサーバに送信する(ステップS505)。ステップS505において、端末2は、発信元ポート番号を、ステップS503においてIP/ポート登録要求パケットの送信に使用したポート番号[LP2]からポート番号[LP2+a]へと変更する(ただし、aは、任意の整数である)。端末2が新たなポート番号[LP2+a]を発信元ポートとして使用する理由は、発信元ポート番号の変更に伴って、ルータ2が発信元(IPL2、LP2+a)に新たなポート番号[GP2+b]を割り当てると予測されるからである(ただし、bは、任意の整数であって、かつ、ルータ2において定められている増分値である)。
サーバは、P2P通信要求パケットを受信すると、受信したパケットを参照して、ルータ2が発信元(IPL2、LP2+a)に割り当てたIPアドレス及びポート番号(IPG2、GP2+b)を含むパケットを、IP/ポート通知として端末1に送信する(ステップS506)。
端末1は、サーバから送信されたIP/ポート通知パケットを受信すると、端末2にP2P通信を許可するか否かを判断し、判断結果をサーバに通知する(ステップS507)。ステップS507において、端末1は、発信元ポート番号を、ステップS501でIP/ポート登録要求パケットの送信に使用した[LP1]から[LP1+c]へと変更する(ただし、cは、任意の整数である)。端末1が新たなポート番号[LP1+c]を発信元ポートとして使用する理由は、ルータ1が発信元(IPL、LP1+c)に新たなポート番号[GP1+d]を割り当てると予測されるからである(ただし、dは、任意の整数であって、ルータ1において定められている増分値である)。
続いて、端末1は、受信したIP/ポート通知パケットから取得したIPアドレス及びポート番号(IPG2、GP2+b)に基づき、宛先に(IPG2、GP2+b+n)が設定されたP2P開始要求パケットをサーバに送信する(ステップS508)。ただし、nは、任意の整数である。
端末1は、ステップS507及びS508の各々において、きわめて短時間の間に連続してパケットを送信する。したがって、ステップS507において送信されたパケットの発信元ポート番号[LP1+c]が[GP1+d]へと変換される場合、ルータ1におけるNATの設定に従い、ステップS508において送信されたパケットの発信元ポート番号[LP1+c+1]は、[GP1+d+1]へと変換される。
更に、ステップS508において端末1がパケットを送信した結果、ルータ1は、応答パケットを受信することができるように設定を変更する。すなわち、ルータ2が端末1から送信されたパケットの発信元(IPL1、LP1+c+1)を(IPG1、GP1+d+1)に変換して、当該パケットをルータ2(IPG2、GP2+b+n)へと転送した後には、ルータ1は、送信元が(IPG2、GP2+b+n)であるパケットを端末1(IPL1、LP1+c+1)へと転送することができる。尚、端末1が、取得した宛先ポート番号から任意の整数値nだけインクリメントされたポート番号へとパケットを送信する理由については後述する。
一方、サーバは、ステップS507において端末1から送信されたP2P通信許可パケットを受信すると、ルータ1のIPアドレス及びポート番号(IPG1、GP1+d)を含む通信許可パケットを端末2に送信する(ステップS509)。
次に、端末2は、端末1にアクセスするためのIPアドレス及びポート番号(IPG1、GP1+d)を受信するとすぐに、端末1へとP2P開始要求パケットを送信する(ステップS510)。ステップS510において、端末2は、発信元ポート番号を[LP1+a+1]から1ずつインクリメントしながら、ルータ1のポート番号[GP1+d+1]を宛先ポートとするn個のP2P開始要求パケットを送出する。ルータ2は、端末2から送信されたn個のP2P開始要求パケットの各々の発信元ポート番号を、それぞれ、[GP2+b+m]〜[GP2+m+n−1]に変換する。ここで、nは、ステップS508〜S510が実行される間の若干の経過時間において、ルータ1に接続される他の端末(図示せず)から送信されるパケットによってNATの設定が変更される可能性を考慮して定められる値である。また、mは、n以下の整数である。
結果として、ステップS508において端末1から送信されたパケットの宛先ポート番号[GP2+b+n]は、[GP2+b+m]〜[GP2+b+m+n−1]のいずれか1つと一致する。それ故に、ルータ1は、受信したn個のP2P開始要求パケットの1つを端末1へと転送する(ステップS510−2)。図25においては、ポート番号[GP2+b+n]及び[GP2+b+m+2]が一致した場合の例が示されている。
端末1は、ルータ1から転送されたP2P開始要求パケットを受信すると、P2P開始応答パケットを返信する(ステップS511)。ステップS510−2においてNATの設定が調整されたルータ2は、端末1から送信されたP2P開始応答パケットを端末2へと転送すると、端末1と端末2の間にP2P通信路が確立される。
特開2004−180003号公報
図1は、本発明の実施形態に係る通信システムの全体構成を示すブロック図である。
グローバルネットワーク00及びプライベートネットワーク01は、グローバルIPアドレス[IPG1]を有するルータ101を介して接続されている。また、グローバルネットワーク00及びプライベートネットワーク02は、グローバルIPアドレス[IPG2]を有するルータ201を介して接続されている。グローバルネットワーク00には、グローバルIPアドレス[IPS]を有するサーバ001が接続されている。プライベートネットワーク01には、ローカルIPアドレス[IPL1]を有する端末100が接続されている。プライベートネットワーク02には、ローカルIPアドレス[IPL2]を有する端末200が接続されている。
図2Aは、図1に示される端末100の概略構成を示すブロック図である。
端末100は、アドレス情報調査要求送信部1001と、アドレス情報受信部1002と、直接通信準備要求送信部1003と、中継特性判断部1004と、中継情報送信部1005と、中継情報受信部1006と、通信制御部1007と、通信部1008とを備える。
アドレス情報調査要求送信部1001は、ルータ101のNAT機能によって、端末100から送信されるパケットに設定されるポート番号を調査するために、ポート番号調査要求パケットをサーバ001に送信する。より詳細には、アドレス情報調査要求送信部1001は、宛先ポート番号が異なる少なくとも2つのパケットを送信する第1の送信処理と、発信元ポート番号が第1の送信処理で使用されたものとは異なる少なくとも1つのパケットを送信する第2の送信処理とを実行する。第1の送信処理において、アドレス情報調査要求送信部1001は、発信元ポートが同一であり、かつ、宛先ポート番号が相違する2つのパケットを送信することがより好ましい。また、第1及び第2の送信処理の実行順序は、任意で良い。
アドレス情報受信部1002は、ポート番号調査要求パケットに応答してサーバ001から返送されるポート番号調査応答パケットをサーバ001から受信する。ポート番号調査応答パケットは、ルータ101のNAT機能によって設定されたポート番号をデータ部に含む。
直接通信準備要求送信部1003は、P2P通信に使用するポートをルータ101上に用意するために、第1及び第2の送信処理の一方が実行されてから他方が実行されるまでの間に、グローバルネットワーク00に接続される他の端末にP2P通信準備パケットを送信する。
中継特性判断部1004は、アドレス情報受信部1002によって受信されたポート番号調査応答パケットのデータ部に含まれているポート番号に基づいて、ルータ101のNAT特性を判別する。
中継情報送信部1005は、中継特性判断部1004によって判断されたルータ101のNAT特性をサーバ経由で接続先の端末200に通知するために、NAT情報通知パケットをサーバに送信する。
中継情報受信部1006は、接続先装置によって送信されたNAT情報通知パケットを受信する。受信されたNAT情報通知パケットは、接続先の端末200に接続されているルータ201のNAT特性を特定するために必要な情報を含んでいる。
通信制御部1007は、端末100が接続されているルータ101のNAT特性と、通信先の端末200が接続されているルータ201のNAT特性との組み合わせに基づいて、予め用意された複数のシーケンスから、P2P通信を確立するための最適なシーケンスを選択し実行する。
通信部1008は、上記の各部において生成されたパケットをプライベートネットワーク01へと送出し、また、端末100宛てのパケットをプライベートネットワーク01経由で受信する。
図2Bは、図1に示される端末200の概略構成を示すブロック図である。
端末200は、アドレス情報調査要求送信部2001と、アドレス情報受信部2002と、直接通信準備要求送信部2003と、中継特性判断部2004と、中継情報送信部2005と、中継情報受信部2006と、通信制御部2007と、通信部2008とを備える。アドレス情報調査要求送信部2001〜通信部2008の各々の機能は、図2Aに示されるアドレス情報調査要求送信部1001〜通信部1008の各々の機能と同様であるので、ここでは、説明を繰り返さない。
図2Cは、図1に示されるサーバ001の概略構成を示すブロック図である。
サーバ001は、アドレス情報調査部0011と、アドレス情報送信部0012と、中継情報転送部0013と、通信部0014を備える。
アドレス情報調査部0011は、端末100及び200の各々からポート番号調査要求パケットを受信すると、受信したパケットのヘッダに含まれる発信元ポート番号を取り出す。アドレス情報調査部0011が取り出した発信元ポート番号は、ルータ101または201のNAT機能によって設定された値である。アドレス情報調査部0011は、取り出されたポート番号をアドレス情報送信部0012に出力する。
アドレス情報送信部0012は、アドレス情報調査部0011から受け取ったポート番号をデータ部に含むポート番号調査応答パケットを生成し、生成したパケットを端末に返信する。
中継情報転送部0013は、2つの端末の一方からNAT情報通知パケットを受信すると、受信したNAT情報通知パケットを他方の端末に転送する。
通信部0014は、各部において生成されたパケットをグローバルネットワーク00へと送出し、また、サーバ001宛てのパケットをグローバルネットワーク00経由で受信する。
ここで、本実施形態に係る通信システムにおける制御シーケンスについて説明する。
図3は、本実施形態に係る通信システムがP2P通信路を確立するために実行する処理の概略を示すシーケンス図である。
図3に示されるように、本実施形態に係るP2P通信路確立方法は、4つのフェーズ、すなわち、NAT特性調査フェーズS801、準備フェーズS802、情報交換フェーズS803及びP2P通信路確立フェーズから構成される。
NAT特性調査フェーズS801において、端末100は、サーバ001と通信し、端末100に接続されているルータ101のNAT特性(例えば、Cone NATまたはSymmetric NAT)を調査する。また、端末100は、ルータ101がPort Reuse特性を有しているか否かを調査する。同様に、端末200は、サーバ001と通信し、ルータ101のNAT特性と、Port Reuse特性の有無とを調査する。
準備フェーズS802において、端末100は、自身が接続されているルータ101にパケットを送信し、端末200と通信するために使用するルータ101のポートを開く。同様に、端末200は、ルータ201にパケットを送信し、端末100と通信するために使用するルータ201のポートを開く。
情報交換フェーズS803において、端末100及び200の各々は、NAT特性調査フェーズにおいて判別したNAT特性と、P2P通信路を確立するために必要な情報とを、サーバ001経由で交換する。
P2P通信路確立フェーズS804において、端末100及び200の各々は、情報交換フェーズS803において取得した情報に基づいて、相互にパケットを送信し、P2P通信路を確立する。
尚、図3においては、図示の都合上、NAT特性調査フェーズS801及び準備フェーズS802の順序が特定されているが、NAT特性調査フェーズS801及び準備フェーズS802は、情報交換フェーズS803の前に完了していれば良い。
以下、上記4つのフェーズについて、更に詳細に説明する。
<NAT特性調査フェーズおよび準備フェーズ>
図4Aは、図3に示されるNAT特性調査フェーズ及び準備フェーズにおける処理の詳細を示すシーケンス図である。
まず、端末100は、ポート番号調査要求1をサーバ001へ送信する(ステップS901)。より詳細には、アドレス情報調査要求送信部1001は、発信元ポート番号に端末100のポート番号[LP1]が設定され、かつ、宛先ポート番号にサーバ001のポート番号[SP0]が設定されたポート番号調査要求パケット1を送信する。
次に、サーバ001は、端末100から送信されたポート番号調査要求1に応答して、ポート番号調査応答1を端末に返送する(ステップS902)。より詳細には、通信部0014は、ポート番号調査要求パケット1を受信し、受信したパケットをアドレス情報調査部0011へと転送する。アドレス情報調査部0011は、転送されたパケットのヘッダを参照して、発信元ポート番号、すなわち、ルータ101によって設定されたポート番号[GP11]を取り出し、取り出した発信元ポート番号[GP11]をアドレス情報送信部0012へ出力する。
アドレス情報送信部0012は、アドレス情報調査部から受け取ったルータ101のポート番号[GP11]を含むポート番号調査応答パケット1を生成し、生成したパケットを通信部0014に出力する。通信部0014は、アドレス情報送信部0012から受け取ったパケットを端末100へと返送する。端末100において、通信部1008は、ポート番号調査応答パケット1を受信すると、受信したパケットをアドレス情報受信部1002へ転送する。
次に、端末100は、ポート番号調査要求2をサーバ001へ送信する(ステップS903)。より詳細には、アドレス情報調査要求送信部1001は、端末100のポート番号[LP1]が発信元ポート番号に設定され、かつ、サーバ001のポート番号[SP1]を宛先ポート番号に設定されたポート番号調査要求パケット2を送信する。
次に、サーバ001は、端末100から送信されたポート番号調査要求2に応答して、ポート番号調査応答2を端末に返送する(ステップS904)。より詳細には、通信部0014は、ポート番号調査要求パケット2を受信し、受信したパケットをアドレス情報調査部0011へと転送する。アドレス情報調査部0011は、転送されたパケットのヘッダを参照して、発信元ポート番号、すなわち、ルータ101のポート番号[GP12]を取り出し、取り出した発信元ポート番号[GP12]をアドレス情報送信部0012へ出力する。
次に、端末100は、P2P通信準備パケットを端末200に送信する(ステップS905)。より詳細には、端末100は、端末200とP2P通信する際に使用するポート番号[GP13]を用意するために、端末200のIPアドレス及びポート番号を宛先とするパケットをルータ101へ送信する。端末100は、端末200のIPアドレス及びポート番号を予め取得していても良い。また、サーバ001がポート番号調査応答パケット1または2に端末200のIPアドレス及びポート番号を設定し、端末100は、受信したポート番号調査応答パケットを参照して、端末200のIPアドレス及びポート番号を取得しても良い。
ここで、端末100が送信するパケットの宛先ポート番号は、実際にルータ201が使用しているポート番号(例えば、端末200がサーバ001と通信している際に、ルータ201が端末200のパケットに割り当てているポート番号)であることが好ましい。というのも、ルータ201が侵入検知機能を有する場合、ルータ201が通信に使用していないポート番号が宛先ポート番号に設定されたP2P通信準備パケットを端末100から受信すると、当該パケットを不正アクセスパケットであると誤検知する可能性がある。ルータ201は、不正アクセスパケットを検知すると、端末100から送信された後続のパケットを全て破棄するため、端末100は、端末200と通信不能となる虞がある。
あるいは、端末100は、P2P通信準備パケットがルータ201に届かないように当該パケットのTTL(Time To Live)の値を調整しても良い。端末100がP2P通信準備パケットを送信するのは、自身が接続されるルータ101に、端末200とのP2P通信のためのポート番号を用意するためであり、必ずしもルータ201にP2P通信準備パケットが届く必要はない。そこで、端末100は、P2P通信準備パケットがルータ101に到達し、かつ、ルータ201に到達しないように、TTLの値を調整すれば良い。
ステップS905において、ルータ101は、端末200からルータ201を介してルータ101(IPG1、GP13)へと送信されたパケットを受け付けることができるように、NATを設定する。ルータ101がNATを設定する方法は、NAT特性(図18A〜図18E)に応じて異なるが、ここでの説明を省略する。
次に、端末100は、ポート番号調査要求3をサーバ001へ送信する(ステップS906)。より詳細には、アドレス情報調査要求送信部1001は、端末100のポート番号[LP2]が発信元ポート番号に設定され、かつ、サーバ001のポート番号[SP0]を宛先ポート番号に設定されたパケットを、ポート番号調査要求3として送信する。
サーバ001は、端末100から送信されたポート番号調査要求3に応答して、ポート番号調査応答3を端末100に返送する(ステップS907)。より詳細には、通信部0014は、ポート番号調査要求パケット2を受信し、受信したパケットをアドレス情報調査部0011へと転送する。アドレス情報調査部0011は、転送されたパケットのヘッダを参照して、発信元ポート番号、すなわち、ルータ101のポート番号[GP14]を取り出し、取り出した発信元ポート番号[GP14]をアドレス情報送信部0012へ出力する。
端末100は、ポート番号調査応答パケット1〜3を受信すると、ルータ101のNAT特性を判断する(ステップS908)。より詳細には、端末100において、中継特性判断部1004は、ポート番号調査応答パケット1〜3に含まれるルータ101の3つのポート番号[GP11]、[GP12]及び[GP14]に基づいて、次の処理フローに従ってルータ101のNAT特性を判断する。
図4Bは、図4Aに示されるステップS908の処理の詳細を示すフローチャートである。
中継特性判断部1004は、まず、取得したポート番号[GP11]と[GP12]とが一致するか否かを判断する(ステップS909)。ポート番号[GP11]が[GP12]に一致する場合(ステップS909でYes)、中継特性判断部1004は、ステップS911へ進む。一方、ポート番号[GP11]が[GP12]に一致しない場合(ステップS909でNo)、中継特性判断部1004は、ルータ101のNATがPS NATであると判断し(ステップS910)、ステップS914へ進む。
[GP11]が[GP12]に一致する場合(ステップS909でYes)、中継特性判断部1004は、取得したポート番号[GP12]と[GP14]との差の絶対値βを算出し、βが1であるか否かを判断する(ステップS911)。中継特性判断部1004は、βが1である場合には、ルータ101のNATがCone NATとであると判断し(ステップS912)、ステップS914へ進む。それ以外の場合には、中継特性判断部1004は、ルータ101のNATがCone若しくはAS NAT特性のいずれかを有すると判断し(ステップS913)、ステップS914へ進む。
更に、中継特性判断部1004は、ステップS902で取得したルータ101のポート番号[GP11]が、ステップS901で送信したポート番号調査要求パケット1の発信元ポート番号[LP1]に一致するか否かを判断する(ステップS914)。[GP11]が[LP1]に一致する場合(ステップS914)、中継特性判断部1004は、ルータ101がPort Reuse特性を有すると判断し(ステップS915)、NAT特性判断処理を終了する。それ以外の場合には、中継特性判断部1004は、NAT特性判断処理を終了する。
尚、ルータ101がPort Reuseを有するか否かを厳密に判断するために、中継特性判断部1004は、更に、ポート番号[GP14]が[LP2]に一致するか否かを判断しても良い。この場合、中継特性判断部1004は、[GP11]が[LP1]に一致し、かつ、[GP14]が[LP2]に一致する場合に、ルータ101がPort Reuse特性を有していると判断する。また、ルータ101がPort Reuse特性を有するか否かを緩やかに判断するために、[GP11]が[LP1]に一致すること、あるいは、[GP14]が[LP2]に一致することのいずれか一方を確認した場合に、中継特性判断部1004は、ルータ101がPort Reuse特性を有すると判断しても良い。また、ステップS914〜S915においてPort Reuse特性を判断する処理を、ステップS909の前に行っても良い。
以上のNAT特性判断処理を通じて、端末100は、ルータ101のNAT特性を調査することができる。
ここで、上記のNAT機能特性判断処理の具体例を説明する。
図5Aは、図4Aに示されるステップS910を説明するための図である。
中継特性判断部1004が、ステップS909においてNoと判断すること、すなわち、「GP11]が[GP12]と異なることは、宛先ポート番号[SP0]及び[SP1]の各々に対応して、ルータ101が異なるポート番号を割り当てたことを示す。したがって、中継特性判断部1004は、ルータ101がPS NAT特性を有すると判断することができる。
図5Bは、図4Aに示されるステップS912を説明するための図である。
中継特性判断部1004が、ステップS911においてYesと判断すること、すなわち、[GP12]と[GP14]との差の絶対値βが1であると判断することは、P2P通信準備パケットの宛先ポート番号にルータが割り当てたポート番号[GP13]が、[GP11]及び[GP12]に一致することを示す。したがって、中継特性判断部1004は、ルータ101がCone NAT特性を有すると判断することができる。
図5C及び図5Dの各々は、図4Aに示されるステップS913を説明するための図である。
中継特性判断部1004が、ステップS911においてNoと判断する場合、すなわち、[GP12]と[GP14]との差の絶対値βが1でないと判断する場合、P2P通信準備パケットの宛先ポート番号にルータが割り当てたポート番号[GP13]が、[GP11]及び[GP12]に一致する場合(図5C)と、一致しない場合(図5D)とがある。したがって、中継特性判断部1004は、ルータ101がCone若しくはAS NAT特性のいずれかを有すると判断する。
尚、端末200は、図4A及び図4Bに示されるものと同様の手順に従って、ルータ201のNAT特性を調査し、ルータ201は、P2P通信で使用するためのポートを開く。
また、図4Aは、説明の便宜上、NAT特性調査フェーズ(ステップS901〜S904、ステップS906〜S908)と準備フェーズ(ステップS902)とを併せて示しているが、NAT特性調査フェーズと、準備フェーズとが互いに分離されていても良い。
更に、ステップS913において、中継特性判断部1004が、βが1でない場合に、Cone NATとAS NATとを区別していないのは、後述するP2P通信路確立フェーズにおいて、両者を区別することなく処理することが可能であるからである。しかしながら、端末100は、Cone NATとAS NATとを区別するために、次に示す処理を更に実行しても良い。
まず、端末100において、アドレス情報調査要求送信部1001は、サーバ001のIPアドレス[IPS]とは異なるIPアドレスが宛先アドレスに設定され、かつ、ポート番号[LP1]が発信元アドレスに設定されたパケットを、ポート番号調査要求として更に送信する。アドレス情報受信部は、ポート番号調査要求パケットに対する応答パケットを受信し、ルータ101がポート番号調査要求パケットに割り当てたポート番号[GP15]が[GP11]と一致するか否かを判断する。中継特性判断部1004は、[GP15]が[GP11]に一致する場合は、ルータ101がCone NAT特性を有すると判断することができ、それ以外の場合は、ルータ101がAS NAT特性を有すると判断することができる。
更に、NAT特性調査フェーズ及び準備フェーズは、必ずしも本実施形態に示される順序で実行される必要はない。したがって、端末100及び200は、後続の情報交換フェーズの前に、NAT特性調査フェーズ及び準備フェーズを完了していれば、本実施形態と異なる順序で各ステップを実行しても良い。
<情報交換フェーズ>
図6は、図3に示される情報交換フェーズにおける処理の詳細を示すシーケンス図である。
まず、端末200は、自身が接続されているルータ201のNAT特性を示すNAT情報をサーバ001へ通知する(ステップS1001)。より詳細には、中継情報送信部2005は、NAT特性調査フェーズにおいて取得したルータ201のNAT特性を示すNAT情報をデータ部に含むパケットを生成し、生成したパケットを通信部2008を介してサーバ001へ送信する。
NAT情報は、(a)Cone NAT特性、(b)Cone若しくはAS NAT特性、(c)PS NAT特性のいずれであるかを示す情報と、(d)Port Reuse特性の有無を示す情報とを含んでいる。
また、NAT情報は、NAT特性に応じて、下記に示すパラメータを更に含む。
(a)NAT特性がConeである場合、NAT情報は、ポート番号[GP22](=[GP24])の値を少なくとも含む。
(b)NAT特性がCone若しくはASである場合、NAT情報は、ポート番号[GP22]及び[GP24]の値を少なくとも含む。
(c)NAT特性がPSである場合、NAT情報は、ポート番号[GP21]及び[GP22]との差αと、ポート番号[GP24]を少なくとも含む。
(d)上記(a)〜(c)に加えて、NATがPort Reuse特性を有する場合、端末200が次のP2P通信路確立フェーズで新たに開くことを予定するポート番号[LP4]を少なくとも含む。ルータ201がSymmetric NAT特性を有する場合には、ポート番号[LP4]は、新たな番号である必要があるが、ルータ201がCone NAT特性を有する場合は、ポート番号[LP4]は、[GP21]〜[GP24]のいずれかであっても良い。
サーバ001は、NAT情報通知パケットを受信すると、受信したNAT情報通知パケットを端末100へと転送する(ステップS1002)。より詳細には、サーバ001において、中継情報転送部0013は、端末200から送信されたNAT情報通知パケットを通信部0014を介して受信し、受信したNAT情報通知パケットを通信部0014を介して端末100へ送信する。
次に、端末100は、自身が接続されているルータ101のNAT特性を示すNAT情報をサーバ001へ通知する(ステップS1003)。より詳細には、中継情報送信部1005は、NAT特性調査フェーズにおいて取得したルータ101のNAT特性を示すNAT情報を含むパケットを生成し、生成したパケットを通信部1008を介してサーバ001へ送信する。端末100がサーバ001へと送信するNAT情報は、端末200がサーバ001へと送信するものと同様であるので、ここでの説明を繰り返さない。
サーバ001は、NAT情報通知パケットを受信すると、受信したNAT情報通知パケットを端末200へと転送する(ステップS1004)。より詳細には、サーバ001において、中継情報転送部0013は、端末100から送信されたNAT情報通知パケットを通信部0014を介して受信し、受信したNAT情報通知パケットを通信部0014を介して端末200へ送信する。
尚、本実施形態においては、端末100及び200の各々は、NAT特性と、当該NAT特性に応じたパラメータとをNAT情報としてサーバ001へ通知しているが、3つのポート番号(ポート番号[GP11]、[GP12]及び[GP14]、または、ポート番号[GP21]、[GP22]及び[GP24])をサーバ001へ通知しても良い。この場合、端末100及び200の各々は、サーバ001から取得した3つのポート番号に基づいて、図4Bに示される処理フローに従って、ルータ101及び201のそれぞれのNAT特性を判断し、かつ、αの値を計算すれば良い。あるいは、サーバ001が、端末100及び200の各々から取得した3つのポート番号に基づいて、図4Bに従って、ルータ101及び201の各々のNAT特性をそれぞれ判断し、判断されたルータ101及び201のNAT特性をそれぞれ端末200及び100に通知しても良い。
また、上記の説明において、NAT情報は、項目(a)〜(d)に例示される情報を含んでいるが、他の情報を含んでいても良い。例えば、NAT情報は、Δ1=|[GP12]−[GP11]|と、Δ2=|[GP14]−[GP12]|によって規定される2つの値を含んでも良い。この場合、中継特性判断部は、Δ1及びΔ2の値を取得して、Δ1=0かつΔ2=0が満たされる場合に、ルータがCone NAT特性を有すると判断し、Δ2>1が満たされる場合に、ルータがAS NAT特性を有すると判断し、Δ1≠0が満たされる場合に、ルータがPS NAT特性を有すると判断しても良い。
また、NAT情報は、端末100、端末200及びサーバ001の少なくとも1つがルータのNAT特性を判別するために有用な情報であれば、上述される以外の情報を含んでいても良い。
更に、本実施形態においては、端末200が先にNAT情報通知パケットを送信しているが、端末100が先にNAT情報通知パケットを送信しても良い。
<P2P通信路確立フェーズ>
図7は、図3に示されるP2P通信路確立フェーズにおいて、端末100が実行する処理を示すフローチャートである。P2P通信路確立フェーズにおいて、端末100及び200は、情報交換フェーズにおいて取得したパラメータを用いて、P2P通信路の確立を図る。
まず、通信制御部1007は、ルータ201がCone NAT特性を有するか否かを判断する(ステップS1201)。通信制御部1007は、ルータ201がCone NAT特性を有すると判断する場合には(ステップS1201でYes)、後述するステップS1207へ進み、ルータ201のポート番号[GP22]が宛先ポート番号に設定されたP2P開始要求パケットを送信する。
ルータ201がCone NAT特性を有しない場合(ステップS1201でNo)、通信制御部1007は、ルータ201がCone若しくはAS NAT特性の両方の可能性があるか否かを判断する(ステップS1202)。通信制御部1007は、ルータ201がCone若しくはAS NATの両方の可能性があると判断する場合には(ステップS1202でYes)、後述するステップS1208へ進み、[GP22]以上かつ[GP24]未満の範囲の値が宛先ポート番号に設定された複数のP2P通信開始要求パケットを送信する。
ルータ201がCone若しくはAS NAT特性のいずれも有していない場合(ステップS1202でNo)、通信制御部1007は、ルータ201がPort Reuse特性を有するか否かを判断する(ステップS1203)。ルータ201がPort Reuse特性を有する場合(ステップS1203でYes)、通信制御部1007は、ルータ201のNATの特性を考慮することなく、ポート番号[LP4]が宛先ポート番号に設定されたP2P開始要求パケットを送信する。ルータ201がPort Reuse特性を有しない場合(ステップS1203でNo)、通信制御部1007は、ステップS1204へ進む。
通信制御部1007がステップS1204に到達するのは、ルータ201がCone NAT特性及びAS NAT特性のいずれも備えていない場合、すなわち、ルータ201がPS NAT特性を有する場合である。ルータ201がPS NATである場合、端末100は、以下に示すように、自身が接続されるルータ101の特性を考慮して、処理を選択する必要がある。
通信制御部1007は、ルータ101がCone NAT特性を有すると特定されるか否かを判断する(ステップS1204)。ルータ101がCone NAT特性を有する場合(ステップS1204でYes)、通信制御部1007は、後述するステップS1210へ進み、ポート番号[GP24+α2]が宛先ポート番号に設定されたP2P開始要求パケットを送信する。
ルータ101がCone NAT特性を有すると特定されない場合(ステップS1204でNo)、通信制御部1007は、ルータ101がCone若しくはAS NAT特性のいずれかを有しているか否かを判断する(ステップS1205)。ルータ101がCone若しくはAS NAT特性のいずれかを有する場合(ステップS1205でYes)、通信制御部1007は、後述するステップS1211へ進み、[GP24+α2]以上かつ[GP24+(n−1)×α2]未満の範囲の値が宛先ポート番号に設定された複数のP2P開始要求パケットを送信する(ただし、nは任意の正の整数である)。
ルータ101がCone NAT特性及びAS NAT特性のいずれも有していない場合(ステップS1205でNo)、通信制御部1007は、ルータ101がPS NAT特性を有しているか否かを判断する(ステップS1206)。ルータ101がPS NAT特性を有している場合(ステップS1206でYes)、通信制御部1007は、後述するステップS1212へ進み、ポート番号[GP24+α2]が宛先ポート番号に設定されたP2P通信開始パケットを送信する。ルータ101がPS NAT特性を有していない場合には、リターンする。
尚、P2P通信路確立フェーズにおいて、端末200の通信制御部2007が実行する処理は、端末200が実行する処理と同様であるので、詳細な説明を省略する。
また、図7に示されるシーケンス図においては、各判断処理の順序が一例として特定されているが、各判断処理は、図7に示される以外の順序で実行されても良い。例えば、ルータがPort Reuse特性を有しているか否かの判断(ステップS1203)を最初に実行しても良い。
以下、上述したステップS1207〜S1212の各々の詳細を説明する。
<接続シーケンス1:ルータ201がCone NATである場合>
図8は、図7に示される接続シーケンス1の詳細を示す図である。尚、図8においては、説明の簡略化のために、ルータ101がCone NAT特性を有する場合を想定する。
上述したように、端末100は、情報交換フェーズ(図6)のステップS1001及びS1002において端末200から通知された情報に基づき、端末200が接続されるルータ201がCone NAT特性を有することと、NAT特性調査フェーズ及び準備フェーズにおいて、ルータ201が開いたポート番号[GP22]及び[GP24]とを把握する。ルータ201がCone NAT特性を有するので、端末100は、端末200がP2P通信に使用するルータ201のポート番号が[GP22]であると予測することができる。
そこで、通信制御部1007は、発信元ポート番号に[LP1]が設定され、かつ、宛先ポート番号に[GP22]が設定されたパケットを、P2P開始要求として送信する(ステップS1301)。尚、ルータ101は、端末100から送信されたパケットにポート番号[GP13]を割り当てる。
この段階では、ルータ201は、端末100から送信された宛先ポート番号が[GP22]に設定されたパケットを転送するようにNATを設定していないため、ルータ201は、ステップS1301において送信されたP2P開始要求パケットを破棄し、端末200に転送しない。この段階において、ルータ101は、発信元ポート番号にルータ201のポート番号[GP22]が設定され、かつ、宛先IPアドレス及び宛先ポート番号に(IPG1、GP13)が設定されたパケットを、端末100(IPL1、LP1)へ転送するようにNATを設定する。
一方、端末200は、情報交換フェーズにおいて端末100から通知された情報に基づき、端末100が接続されるルータ101がCone NAT特性を有することを示す情報と、NAT特性調査フェーズ及び準備フェーズにおいて、ルータ101が開いたポート番号[GP12]及び[GP14]とを示す情報とを取得する。端末200は、ルータ101のNAT特性に関する情報を取得すると、ルータ101がCone NAT特性を有することに基づき、ルータ101がP2P通信に使用するポート番号が[GP12]であることを予測し、すぐに、発信元ポート番号に[LP1]が設定され、宛先ポート番号に[GP12]が設定されたパケットを、P2P開始要求として送信する(ステップS1302)。尚、ルータ101は、Cone NAT特性を有するため、ポート番号[GP12]は、[GP13]と同じである。
ルータ101は、端末200から送信されたP2P開始要求パケットを端末100に転送する。端末100において、通信制御部1007は、ルータ101から転送されたP2P開始要求パケットに応答して、通信部1008を介して、P2P開始応答パケットを端末200へ送信する(ステップS1303)。
ルータ201がCone NAT特性を有する場合、上記の処理手順に従って、端末100及び200の間にP2P通信路を確立することができる。
<接続シーケンス2:ルータ201がCone若しくはAS NAT特性のいずれかを有する場合>
図9Aは、図7に示される接続シーケンス2の詳細を示す図であり、図9Bは、図9Aに示されるポート番号を示す図である。尚、図9Aにおいては、説明の簡略化のために、ルータ101がCone NAT特性を有する場合を想定する。
まず、前述の図5Aに示される状況を端末200に適用すると、ルータ201がCone NAT特性を有する場合、ルータ201がP2P通信に割り当てるポート番号は、[GP22]であることが予測される。
次に、前述の図5Dに示される状況を端末200に適用すると、ルータ201がAS NAT特性を有する場合、ルータ201がP2P通信に割り当てるポート番号は、[GP22]と[GP24]との間のいずれか1つのポート番号である。
そこで、端末100において、通信制御部1007は、発信元ポート番号に[LP1]が設定され、かつ、宛先ポート番号に[GP22]以上かつ[GP24]未満であるポート番号がそれぞれ設定された複数のP2P開始要求パケットを送信する(ステップS1401)。ルータ101は、準備フェーズにおいて用意したポート番号[GP13]を全てのP2P開始要求パケットに割り当てる。
ステップS1401においてP2P開始要求パケットが送信された時点では、ルータ201は、宛先ポート番号に[GP22]以上[GP24−1]以下の各々のポート番号が設定されたパケットを受信するようにNATを設定していない。したがって、この段階においては、ルータ201は、受信したP2P開始要求パケットの各々を破棄し、端末200へと転送しない。尚、ルータ101は、宛先に(IPG1、GP13)が設定され、かつ、発信元ポート番号に[GP22]〜[GP24−1]の範囲の各ポート番号が設定されたパケットの各々を、端末100(IPL1、LP1)へ転送するようにNATを設定する。
一方、端末200は、情報交換フェーズにおいて端末100から通知された情報に基づき、端末100が接続されるルータ101がCone NAT特性を有することを示す情報と、NAT特性調査フェーズ及び準備フェーズにおいて、ルータ101が開いたポート番号[GP12]及び[GP14]とを示す情報とを取得している。
端末200は、ルータ101のNAT特性に関する情報を取得すると、ルータ101がCone NAT特性を有することに基づき、ルータ101がP2P通信に使用するポート番号が[GP12]であることを予測し、すぐに、発信元ポート番号に[LP1]が設定され、宛先ポート番号に[GP12]が設定されたパケットを、P2P開始要求として送信する(ステップS1402)。尚、ルータ101は、Cone NAT特性を有するため、ポート番号[GP12]は、[GP13]と同じである。
ルータ101は、上述したステップS1401において、P2P開始要求パケットを送信することによって、発信元ポート番号が[GP22+n]であるパケットを受け付けることができるように既にNATを設定している(ここで、[GP22]≦[GP22+n]<[GP24]、かつ、[GP22+n]=[GP23]の関係が成立する)。
したがって、ルータ101は、端末200から送信されたP2P開始要求パケットを端末100に転送する。端末100において、通信制御部1007は、ルータ101から転送されたP2P開始要求パケットに応答して、通信部1008を介して、P2P開始応答パケットを端末200へ送信する(ステップS1403)。
ルータ201がCone若しくはAS NAT特性のいずれか特定されない場合には、上記の処理手順に従って、端末100及び200の間にP2P通信路を確立することができる。
尚、変形例として、上記のステップS1401の代わりに、次のような処理を実行しても良い。
図10は、ルータのポート番号割り当て間隔を説明するための図である。
上記の図9Aに示される例においては、端末100は、宛先ポート番号を[GP22]以上かつ[GP24]未満の範囲内で1ずつインクリメントしながら、P2P開始要求パケットを送信しているが、次の理由により、宛先ポート番号の増分は、1でなくても良い。
例えば、ある種のルータは、受信したパケットの宛先ポート番号が、予め定められたポート番号割り当て規則に適合するか否かを判定することによって、不正侵入を検知する機能を有する。仮に、ルータ201がこの種の侵入検知機能を有する場合、ルータ201が端末100から宛先ポート番号を1ずつインクリメントしながら送信されたP2P開始要求パケットを受信すると、侵入検知機能が作動する可能性がある。侵入検知機能の作動によって、端末100が端末200と通信が通信不能に陥ることが考えられる。
そこで、ルータ201が侵入検知機能を有する場合を考慮して、端末200が、ルータ201に割り当てられるポート番号の差分を予め取得しておくことが考えられる。
より詳細には、図10に示されるように、NAT特性調査フェーズにおいて、ルータ201がCone若しくはAS NAT特性のいずれかを有すると判断した場合に、アドレス情報調査要求送信部2001は、宛先ポート番号にサーバ001のあるポート番号(例えば[SP0])が設定された2以上のポート番号調査要求パケットを、発信元ポート番号を1ずつインクリメントしながら、送信する。
サーバ001は、受信したポート番号調査要求パケットの各々に応答して、ルータ201によって変換された発信元ポート番号を含む応答パケットを端末200に送信する。端末200において、中継情報送信部2005は、サーバ001から送信された応答パケットの各々を参照して、ルータ201によってポート番号調査応答パケットの各々に割り当てられたポート番号の増分を調べる。端末200は、ポート番号の増分の最小値を、ポート割り当て間隔(Δ)として、NAT情報通知パケットによって端末100に送信する。
端末100の通信制御部1007は、ステップS1401において、宛先ポート番号を、[GP22]以上[GP24]未満の範囲で、ポート割り当て間隔Δずつインクリメントしながら複数のP2P開始要求パケットを送信すれば良い。
<接続シーケンス3:ルータ201がPort Reuse特性を有する場合>
図11は、図7に示される接続シーケンス3の詳細を示す図である。尚、図11においては、説明の簡略化のために、ルータ101もまたPort Reuse特性を有する場合を想定する。
上述したように、端末100は、情報交換フェーズ(図6)のステップS1001及びS1002において端末200から通知された情報に基づき、端末200が接続されるルータ201がPort Reuse特性を有することと、NAT特性調査フェーズ及び準備フェーズにおいて、ルータ201がP2P通信のために開く予定のポート番号[LP4]を示す情報を取得している。ルータ201は、Port Reuse特性を有するため、発信元ポート番号に[LP4]が設定されたパケットを端末100が送信すると、ルータ201は、当該パケットの転送のためにポート番号[LP4]を割り当てることが予想される。
そこで、通信制御部1007は、ステップS1003及びS1004において端末200に通知したポート番号[LP3]が発信元ポート番号に設定され、宛先ポート番号に[LP4]が設定されたP2P開始要求パケットを送信する(ステップS1501)。ルータ101は、Port Reuse特性を有するので、P2P開始要求パケットの発信ポート番号[LP3]と同一のポート番号を、P2P開始要求パケットに割り当てる。
ステップS1501においてP2P開始要求パケットが送信された時点では、ルータ201は、宛先ポート番号に[LP4]が設定されたパケットを端末200に転送することができるようにNATを設定していない。したがって、ルータ201は、P2P開始要求パケットを破棄し、当該パケットを端末200に転送しない。一方、ルータ101は、P2P開始要求パケットを転送することによって、宛先に(IPG1、LP3)が設定され、かつ、宛先ポート番号に[LP4]が設定されたパケットを、端末100(IPL1、LP3)に転送するようにNATを設定する。
一方、端末200は、情報交換フェーズにおいて端末100から通知された情報に基づき、端末100が接続されるルータ101がPort Reuse特性を有することを示す情報と、端末100のポート番号[LP3]を示す情報とを取得している。
端末200は、ルータ101のNAT特性に関する情報を取得するとすぐに、通信制御部2007は、宛先ポート番号に[LP3]が設定されたP2P開始要求パケットを送信する(ステップS1502)。
ルータ101は、端末200から送信されたP2P開始要求パケットを端末100に転送する。端末100において、通信制御部1007は、ルータ101から転送されたP2P開始要求パケットに応答して、通信部1008を介して、P2P開始応答パケットを端末200へ送信する(ステップS1503)。
ルータ201がPort Reuse特性を有する場合、上記の処理手順に従って、端末100及び200の間にP2P通信路を確立することができる。
尚、図11に示されるシーケンス図においては、端末100が端末200より先にP2P開始要求を送信しているが、端末200が端末100より先にP2P開始要求を送信しても良い。
また、P2P通信路確立フェーズにおいて、P2P通信路の確立に成功する可能性を向上させるために、情報交換フェーズにおいて、端末100及び200は、複数のポート番号を相互に通知しても良い。
<接続シーケンス4:ルータ201がPS NAT特性を有し、かつ、ルータ101がCone NAT特性を有する場合>
図12Aは、図7に示される接続シーケンス4の詳細を示す図であり、図12Bは、図12Aに示されるポート番号を示す図である。
上述したように、端末100は、情報交換フェーズ(図6)のステップS1001及びS1002において、端末200が接続されるルータ201がPS NAT特性を有することと、ルータ201が開いたポート番号[GP24]と、ルータ201のポート割り当て間隔αの値とを含むNAT特性情報を取得する。PS NATにおいては、新たにポートを開くたびに、ポート番号がαずつ増加するので、端末100は、ルータ201がP2P通信に使用するポートが[GP24+α]であることを予測することができる。
そこで、端末100の通信制御部1007は、宛先ポート番号に[GP24+α]が設定され、かつ、発信元ポート番号に[LP1]が設定されたP2P開始要求パケットを送信する(ステップS1601)。ルータ101は、Cone NAT特性を有するので、P2P通信開始パケットに、準備フェーズにおいて用意したポート番号[GP13]を割り当てる。
ステップS1601においてP2P開始要求パケットが送信された時点では、ルータ201は、宛先ポート番号に[GP24+α]が設定されたパケットを端末200に転送するようにNATを設定していないので、ルータ201は、受信したパケットを破棄し、端末200に転送しない。一方、ルータ101は、宛先に(IPG1、GP13)が設定され、かつ、発信元ポート番号に[GP24+α]が設定されたパケットを、端末100(IPL1、LP1)に転送するようにNATを設定する。
一方、端末200は、情報交換フェーズにおいて、端末100が接続されるルータ101がCone NAT特性を有することと、ルータ101が開いたポートの番号[GP12]及び[GP14]とを含むNAT特性情報を取得している。
端末200は、ルータ101のNAT特性に関する情報を取得すると、ルータ101がCone NAT特性を有することに基づき、ルータ101がP2P通信に使用するポート番号が[GP12]であることを予測し、すぐに、発信元ポート番号に[LP1]が設定され、かつ、宛先ポート番号に[GP12]が設定されたP2P開始要求パケットを送信する(ステップS1602)。尚、ルータ101は、Cone NAT特性を有するため、ポート番号[GP12]は、[GP13]と同じである。
ルータ101は、端末200から送信されたP2P開始要求パケットを端末100に転送する。端末100において、通信制御部1007は、ルータ101から転送されたP2P開始要求パケットに応答して、通信部1008を介して、P2P開始応答パケットを端末200へ送信する(ステップS1603)
ルータ201がPS NAT特性を有し、かつ、ルータ101がCone NAT特性を有する場合、上記の処理手順に従って、端末100及び200の間にP2P通信路を確立することができる。
尚、本実施形態においては、端末100は、宛先ポート番号が[GP24+α]である1つのP2P開始要求パケットを送信しているが、複数のP2P開始要求パケットを送信しても良い。例えば、NAT情報通知フェーズにおいて、端末100が端末200と情報を交換している間に、端末200の他のアプリケーションが先にルータ201のポート番号[GP24+α]を占有する可能性が考えられる。この可能性を考慮して、P2P通信路確立の確実性を向上させるために、[GP24+α]に加えて、[GP24+2α]及び[GP24+3α]のように、αずつインクリメントされた宛先ポート番号を有する複数のP2P開始要求パケットを送信しても良い。
また、ステップS1601における処理に、次のような変形例を適用しても良い。
図12Cは、端末及びルータ間のポート番号の関係を示す図である。
図12Cに示されるように、端末100は、[GP24]から意図的に大きくずらされた[GP24+nα](ただし、nは整数である)が発信ポート番号に設定されたP2P通信開始要求を送信する。例えば、nは、5に設定されている。その後、端末200は、宛先ポート番号に[GP12]が設定されたn個の要求パケットを送信する。端末200から送信されたn個の要求パケットのうち、発信元ポート番号が[GP24+nα]に変換された1つのパケットがルータ101によって端末100に転送され、これにより、P2P通信路が確立する。
<接続シーケンス5:ルータ201がPS NAT特性を有し、かつ、ルータ101がCone若しくはAS NAT特性のいずれを有するか特定されない場合>
図13Aは、図7に示される接続シーケンス5の詳細を示す図であり、図13Bは、図13Aに示されるポート番号を示す図である。
端末100は、情報交換フェーズにおいて、ルータ201がPS NATであることと、ルータ201のポート割り当て間隔αの値と、ルータ201のポート番号[GP24]とを含むNAT特性情報を取得している。
ルータ101がCone若しくはAS NAT特性のいずれかを有する場合、前述の理由により端末200の通信制御部2007は、宛先ポート番号に[GP12]以上[GP14]未満の範囲に含まれるポート番号の各々が設定されるn個のP2P開始要求パケットを送信すると考えられる。ルータ201は、PS NAT特性を有するので、端末200がP2P開始要求パケットを送信するたびに、ルータ201は、パケットの各々にポート割り当て間隔αずつインクリメントされたポート番号を割り当てる。つまり、ルータ201は、P2P開始要求パケットの各々の送信元ポート番号を、[GP24+α]〜[GP24+nα]に変換する。このような理由により、端末100の通信制御部1007は、宛先ポート番号に[GP24+α]〜[GP24+nα]の各々が設定されたn個のP2P開始要求パケットを送信する(ステップS1701)。この時、ルータ101は、準備フェーズにおいて用意したポート番号[GP13]を全てのP2P開始要求パケットに割り当てる。
ステップS1701においてP2P開始要求パケットが送信された時点では、ルータ201は、宛先ポート番号に[GP24+α]〜[GP24+nα]に設定されたパケットを端末200に転送するようにNATを設定していない。したがって、ルータ201は、宛先ポート番号に[GP24+α]〜[GP24+nα]が設定されたn個のP2P開始要求パケットを破棄し、当該パケットを端末200に転送しない。一方、ルータ101は、n個のP2P開始要求パケットを転送することによって、宛先に(IPG1、GP13)が設定され、かつ、発信元ポート番号に[GP24+α]〜[GP24+nα]のいずれかが設定されたパケットを端末100(IPL1、LP1)に転送するようにNATを設定する。
一方、端末200は、情報交換フェーズにおいて、ルータ101がCone若しくはAS NAT特性のいずれかであることと、端末100がNAT特性調査フェーズおよび準備フェーズにおいて開いたポートの番号[GP12]及び[GP14]とを含むNAT特性情報を取得している。
端末200の通信制御部2007は、宛先ポート番号に[LP1]が設定され、かつ、発信元ポート番号に[GP12]以上[GP14]未満の値が設定されたn個のP2P開始要求パケット(ただし、n=[GP14]―[GP12])を送信する(ステップS1702)。
ルータ101は、端末200から送信されたn個のP2P開始要求パケットのうち、ルータ201のNATによって宛先ポート番号にポート番号[GP13]が設定されたパケットのみを端末100に転送する。端末100は、ルータ101によって転送されたP2P開始要求パケットを受信すると、P2P開始応答パケットを端末200に送信する(ステップS1703)。
ルータ201がPS NAT特性を有し、かつ、ルータ101がCone若しくはAS NAT特性のいずれを有するか特定されない場合には、上述の処理にしたがって、端末100及び200の間にP2P通信路を確立することができる。
尚、本実施形態においては、端末100は、n個(すなわち、[GP14]―[GP12])のP2P開始要求パケットを送信しているが、端末100が送信するP2P開始要求パケットの数は、n個でなくても良い。例えば、NAT特性調査フェーズにおいて、ルータ201がポート[GP24]を開いた後、端末100及び200が相互にNAT情報を交換している間に、端末200上の他のアプリケーションが、[GP24+α]以上[GP24+nα]以下の範囲にある複数のポートのうちいくつかを占有する可能性が考えられる。この可能性を考慮し、P2P通信路確立の確実性を高めるために、端末100は、ルータ201のポート番号[GP24+α]〜[GP24+(n+m)α]を宛先ポート番号に設定した(n+m)個のP2P開始要求パケット(ただし、mは整数である)を送信しても良い。
<接続シーケンス6:ルータ101及び201の両方がPS NAT特性を有する場合の接続シーケンス>
図14Aは、図7に示される接続シーケンス6の詳細を示す図であり、図14Bは、図14Aに示されるポート番号を示す図である。
端末100は、情報交換フェーズにおいて、ルータ201がPS NATであることと、ルータ201のポート割り当て間隔α2の値と、ルータ201のポート番号[GP24]とを含むNAT特性情報を取得している。
PS NATは、パケットにポート番号を割り当てるたびに、ポート割り当て間隔αずつインクリメントする。したがって、端末100は、端末200がP2P通信のために使用するポート番号が[GP24+α2]であると予測することができる。
そこで、通信制御部1007は、宛先ポート番号に[GP24+α2]が設定され、かつ、発信元ポート番号に[LP1]が設定されたP2P開始要求パケットを送信する(ステップS1801)。ルータ101もまたPS NAT特性を有するため、ルータ101は、P2P開始要求パケットにポート番号[GP14+α1]を割り当てる(ただし、α1は、ルータ101のポート割り当て間隔である)。
ステップS1801においてP2P開始要求パケットが送信された時点では、ルータ201は、宛先ポート番号に[GP24+α2]が設定されたパケットを端末200に転送するようにNATを設定していない。したがって、ルータ201は、P2P開始要求パケットを破棄し、当該パケットを端末200に転送しない。一方、ルータ101は、宛先に(IPG1、GP14+α1)が設定され、発信元ポート番号に[GP24+α2]が設定されたパケットを、端末100(IPL1、LP1)に転送するようにNATを設定する。
一方、端末200は、情報交換フェーズにおいて、ルータ101がPS NAT特性を有し手いることと、ポート割当て間隔α1の値と、ポート番号[GP14]とを含むNAT特性情報を取得している。端末200は、ルータ101がP2P通信に使用するポート番号が[GP14+α1]であると予測し、宛先ポート番号に[GP14+α1]が設定され、発信元ポート番号に[LP1]が設定されたP2P開始要求パケットを送信する(ステップS1802)。
ルータ101は、端末200から送信されたP2P開始要求パケットを端末100に転送する。端末100は、ルータ101によって転送されたP2P開始要求パケットを受信すると、P2P開始応答パケットを端末200に送信する(ステップS1803)。
ルータ101及び201が共にPS NAT特性を有する場合には、上述の処理にしたがって、端末100及び200の間にP2P通信路を確立することができる。
尚、本実施の形態においては、端末100は、宛先ポート番号に[GP24+α2]が設定された1つP2P開始要求パケットを送信しているが、端末100は、複数のP2P開始要求パケットを送信しても良い。端末100は、P2P通信路確立に成功する可能性を高めるために、例えば[GP24+2×α2]及び[GP24+3×α2]のように、α2ずつインクリメントされたポート番号が宛先ポート番号に設定された複数のP2P開始要求パケットを送信しても良い。
また、本実施形態においては、パケットにポートを割り当てる度に、割り当てられるポート番号が増加するルータが示されているが、本発明は、パケットにポートを割り当てる度に、割り当てられるポートが減少するルータにも同様に適用することができることは、言うまでもない。この場合、ポート番号割り当て間隔は、2つのポート番号の差の絶対値を算出することによって得られる。
(その他の変形例)
上述の実施形態に係る通信システムは、次のように構成されても良い。
端末100及び200は、最初にP2P通信路を確立した際に判断したNAT特性を記憶しておき、記憶されるNAT特性を再利用することによって、2回目以降にP2P通信路を確立する際に、NAT特性調査フェーズを省略しても良い。また、端末100及び200は、NAT調査フェーズの処理を実行することなくP2P通信路確立処理を進め、P2P通信路の確立に失敗したときに初めて、NAT特性調査フェーズの処理を実行しても良い。
このような構成によれば、端末100及び200がNAT特性を調査する回数が低減されるので、2回目以降のP2P通信路確立処理を効率的に実行することができる。
更に、端末100及び200が一旦調査されたルータのNAT特性を記憶する場合、端末100及び200は、次のような手順に従って、記憶されているNAT特性が変化していないことを確認すれば良い。端末100及び200の各々は、P2P通信路確立フェーズの期間または端末100及び200がP2P通信している期間に、接続先装置のポート番号を含むパケットを当該接続先装置に送信する。また、サーバ001は、サーバ001との通信のためにルータ101が使用するポート番号含むパケットを、端末100及び200の各々に送信する。端末100及び200は、接続先装置から通知されたポート番号と、サーバ001との通信のためにされるルータのポート番号とを比較することによって、NAT特性を確認することができる。
更に、端末装置100及び200は、NAT特性調査フェーズにおいて、自身が接続されるルータがCone若しくはAS NAT特性のいずれかを有すると判断した場合、Cone NAT特性またはAS NAT特性のいずれを有するかを特定しても良い。以下、P2P通信路確立フェーズにおいて、端末100及び200の各々が、自身のルータがConeまたはAS NAT特性のいずれを有するかを判断するための処理について説明する。
図15Aは、ルータ101のNAT特性がCone若しくはAS NAT特性のいずれであるかを特定する処理を含む接続シーケンス図であり、図15Bは、図15Aに示されるポート番号を示す図である。
端末100は、情報交換フェーズにおいて、ルータ201がCone NAT特性を有することと、ルータ201のポート番号[GP22]を含むNAT特性情報を取得している。ルータ201がCone NAT特性を有するので、端末100は、端末200がP2P通信に使用するルータ201のポート番号が[GP22]であると予測することができる。
そこで、通信制御部1007は、発信元ポート番号に[LP1]が設定され、かつ、宛先ポート番号に[GP22]が設定されたパケットを、P2P開始要求として送信する(ステップS2001)。尚、ルータ101は、端末100から送信されたパケットにポート番号[GP13]を割り当てる。
ステップS2001においてP2P開始要求パケットが送信された段階では、ルータ201は、ルータ201は、端末100から送信された宛先ポート番号が[GP22]に設定されたパケットを転送するようにNATを設定していない。したがって、ルータ201は、受信したP2P開始要求パケットを破棄し、当該パケットを端末200に転送しない。この段階において、ルータ101は、発信元ポート番号にルータ201のポート番号[GP22]が設定され、かつ、宛先IPアドレス及び宛先ポート番号に(IPG1、GP13)が設定されたパケットを、端末100(IPL1、LP1)へ転送するようにNATを設定する。
一方、端末200は、情報交換フェーズにおいて、端末100が接続されるルータ101がCone若しくはAS NAT特性のいずれかを有することを示す情報と、NAT特性調査フェーズ及び準備フェーズにおいて、ルータ101が開いたポート番号[GP12]及び[GP14]とを示すNAT特性情報を取得している。
端末200は、ルータ101のNAT特性に関する情報を取得すると、発信元ポート番号に[LP1]が設定され、かつ、宛先ポート番号に[GP12]以上[GP14]未満の値が設定された複数のP2P開始要求パケットを送信する(ステップS2002)。
端末200から送信された複数のP2P開始要求パケットのうち、ルータ101は、ルータ201によって宛先ポート番号に[GP13]に設定された1つのパケットのみを端末100に転送する。端末100は、ルータ101によって転送されたP2P開始要求パケットを受信すると、P2P開始応答パケットを端末200に送信する(ステップS2003)。
ルータ101がCone若しくはAS NAT特性のいずれかを有し、かつ、ルータ201がCone NAT特性を有する場合には、上述の処理にしたがって、端末100及び200の間にP2P通信路を確立することができる。
次に、端末200の通信制御部2007は、端末100からP2P開始応答パケットを受信すると、当該パケットの発信元ポート番号、すなわち、ルータ101のポート番号[GP13]を取り出し、取り出したポート番号[GP13]を含む通知パケットを端末100に送信する(ステップS2004)。
端末100の中継特性判断部1004は、端末200から送信された通知パケットを参照して、ルータ101のポート番号[GP13]と、NAT特性調査フェーズにおいて調査したポート番号[GP12]とを比較する(ステップS2005)。比較した結果、中継特性判断部1004は、[GP13]が[GP12]に等しい場合には(ステップS2005でYes)、ルータ101がCone NAT特性を有すると判断する(ステップS2006)。それ以外の場合には(ステップS2005)、中継特性判断部1004は、ルータ101がAS NAT特性を有すると判断する(ステップS2006)。
次に、中継特性判断部1004は、ポート番号[GP13]と[GP12]との差を、ルータ101のポート割り当て間隔Δとして、所定の記憶部に格納する(ステップS2008)。
図16は、一旦調査されたNAT特性が記憶されている場合における処理を示す接続シーケンス図である。
端末100は、ルータ101を既に調査したので、NAT特性調査フェーズにおける処理を省略し、準備フェーズにおける処理を実行する。
<準備フェーズ>
まず、端末100において、アドレス情報調査要求送信部1001は、発信元ポート番号に端末100のポート番号[LP1]が設定され、かつ、宛先ポート番号にサーバ001のポート番号[SP0]が設定されたポート番号調査要求パケットを送信する(ステップS2101)。
サーバ001において、アドレス情報調査部0011は、ポート番号調査要求パケットの発信元ポート番号、すなわち、ルータ101のポート番号[GP11]を含むポート番号調査応答パケットを、通信部0014を介して送信する(ステップS2102)。
次に、端末100において、直接通信準備要求送信部1003は、宛先に端末200のIPアドレス及びポート番号が設定されたP2P通信準備パケットを送信することによって、端末200とP2P通信するために使用するポート番号[GP12]をルータ101上に準備する(ステップS2103)。ルータ101は、端末200からルータ101(IPG1、GP12)に送信されたパケットを受け付けることができるようにNATを設定する。
同様に、端末200は、NAT特性調査フェーズにおける処理を省略して、準備フェーズにおける処理(ステップS2104〜S2106)を実行する。ルータ201は、端末100からルータ201(IPG1、GP22)に送信されたパケットを受け付けることができるようにNATを設定する。
<情報交換フェーズ>
次に、端末200は、ルータ201のNAT特性についての情報を含むNAT情報通知パケットをサーバ001に送信する(ステップS2107)。NAT情報は、ルータ201がPort Reuse特性を有するか否かに応じて、下記のように、異なる情報を含む。
(e)ルータ201がPort Reuse特性を有していない場合、NAT情報は、ルータ201のNAT特性と、ルータ201のポート番号[GP21]とを少なくとも含む。また、前回のP2P通信の際に、ルータ201がAS NAT特性を有すると判断された場合には、NAT情報は、中継特性判断部2004が記憶したポート割り当て間隔Δの値を更に含む。
(f)ルータ201がPort Reuse特性を有する場合、NAT情報は、端末200が次のP2P通信路確立フェーズで新たに開くことを予定するポート番号[LP4]を少なくとも含む。
次に、サーバ100において、中継情報転送部0013は、端末200から送信されたNAT情報通知パケットを受信すると、受信したNAT情報通知パケットを、通信部0014を介して、端末100に転送する(ステップS2108)。
同様に、端末100において、中継情報送信部1005は、ルータ101のNAT特性についての情報を含むNAT情報通知パケットをサーバ001に送信する(ステップS2109)。NAT情報は、ルータ101がPort Reuse特性を有するか否かに応じて、下記のように、異なる情報を含む。
(g)ルータ101がPort Reuse特性を有していない場合、NAT情報は、ルータ101のNAT特性と、ルータ101のポート番号[GP11]とを少なくとも含む。また、前回のP2P通信の際に、ルータ101がAS NAT特性を有すると判断された場合には、NAT情報は、中継特性判断部1004が記憶したポート割り当て間隔Δの値を更に含む。
(h)ルータ101がPort Reuse特性を有する場合、NAT情報は、端末100が次のP2P通信路確立フェーズで新たに開くことを予定するポート番号[LP3]を少なくとも含む。
次に、サーバ100において、中継情報転送部0013は、端末100から送信されたNAT情報通知パケットを受信すると、受信したNAT情報通知パケットを、通信部0014を介して、端末200に転送する(ステップS2110)。
尚、本実施形態においては、端末200が端末100より先にNAT情報通知パケットを送信しているが、端末100が端末200より先にNAT情報通知パケットを送信しても良い。
<接続フェーズ>
以下においては、説明の簡略化のために、ルータ101がCone NAT特性を有し、かつ、ルータ201がAS NAT特性を有する場合を想定する。
端末100の通信制御部1007は、ルータ201がAS NAT特性を有することと、ルータ201のポート番号[GP21]と、ルータ201のポート割り当て間隔Δとを含むNAT情報通知パケットに基づいて、端末200が端末100とP2P通信する際に、ルータが使用するポート番号が[GP21+Δ]であることを予測する。通信制御部1007は、通信部1008を介して、宛先ポート番号に[GP21+Δ]が設定されたP2P開始要求パケットをルータ201に送信する(ステップS2111)。尚、ルータ101は、P2P開始要求パケットにポート番号[GP12]を割り当てる。
ステップS2111においてP2P開始要求パケットが送信された時点では、ルータ201は、宛先ポート番号に[GP21+Δ]が設定されたパケットを端末200に転送するようにNATを設定していない。したがって、ルータ201は、受信したP2P開始要求パケットを破棄し、当該パケットを端末200に転送しない。一方、ルータ101は、P2P開始要求パケットを転送することによって、宛先に(IPG1、GP12)が設定され、かつ、発信元ポート番号に[GP21+Δ]が設定されたパケットを端末100(IPL1、LP1)に転送するようにNATを設定する。
一方、端末200は、情報交換フェーズにおいて、ルータ101がCone NAT特性を有していることと、ルータ101のポート番号[GP11]とを含むNAT特性情報を取得している。端末200は、ルータ101がP2P通信に使用するポート番号が[GP11]であると予測し、宛先ポート番号に[GP11]が設定され、発信元ポート番号に[LP1]が設定されたP2P開始要求パケットを送信する(ステップS2112)。尚、ルータ101は、Cone NAT特性を有するので、[GP12]は、[GP11]と同一である。
ルータ101は、端末200から送信されたP2P開始要求パケットを端末100に転送する。端末100は、ルータ101によって転送されたP2P開始要求パケットを受信すると、P2P開始応答パケットを端末200に送信する(ステップS2113)。
尚、P2P通信路確立フェーズ(ステップS2111〜S2113)において、端末100及び200がP2P通信路の確立に失敗した場合、端末100及び200の各々は、NAT特性調査フェーズから再度接続処理を繰り返せば良い。
また、図7に示されるフローチャートにおいて、2つの端末のうちの一方は、他方の端末に接続されているルータがPS NAT特性を有する場合(ステップS1204〜S1206)にのみ、自身に接続されているルータのNAT情報通知パケット情報特性を判断しているが、常に、自身に接続されているルータのNAT特性を判断しても良い。この場合、2つの端末の各々は、NAT特性の組み合わせ毎に、接続シーケンスを選択すれば良い。
尚、本実施形態においては、説明の簡略化のために、端末100及びサーバ001が1台のルータ101によって接続されている例を中心に示したが、端末100及びサーバ001は、複数のルータを介して接続されていても良い。また、端末200及びサーバ001間に配置されるルータの数も同様である。この点を以下に説明する。
図17Aは、端末が3つのルータを介してグローバルネットワークに接続されている例を示す図である。
図17Aに示されるように、端末100は、Cone NAT特性を有するルータ1〜3を介してグローバルネットワーク00に接続されている。端末100が発信元ポート番号に[LP1]が設定されたパケットを送信すると、当該パケットは、ルータ1のポートRP11、ルータ2のポートRP21、ルータ3のポートRP31を通って、ネットワーク00に到達する。この場合、グローバルネットワーク00に接続されるサーバは、見かけ上、端末100が1台のCone NAT特性を有するルータを介して自身に接続されていると見なすことができる。
図17Bは、端末が3つのルータを介してグローバルネットワークに接続されている他の例を示す図である。
図17Bに示されるように、端末100は、Cone NAT特性を有するルータ1と、PS NAT特性を有するルータ2と、Cone NAT特性を有するルータ3とを介してグローバルネットワーク00に接続されている。端末100が発信元ポート番号に[LP1]が設定されたパケットを送信すると、当該パケットは、ルータ1のポートPR11を通じてルータ2に到達する。ルータ2は、PS NAT特性を有するので、受信したパケットに異なるポートRP21、RP22及びRP23を割り当て、パケットをルータ3に転送する。ルータ3がCone NAT特性を有する場合であっても、送信元ポート番号が異なるパケットの各々は、ルータ3の異なるポートを通じてグローバルネットワークに転送されるので、グローバルネットワーク00に接続されるサーバは、見かけ上、端末100が1台のPS NAT特性を有するルータを介して自身に接続されていると見なすことができる。
このように、端末及びサーバが複数のルータを介して接続されていても、グローバルネットワーク00から見える見かけ上のNAT特性に基づいて、接続シーケンスを選択することによって、2台の端末間にP2P通信路を確立することができる。
尚、上記の実施形態に係る通信装置の機能ブロック(図2A及び図2B)は、記憶装置(ROM、RAM、ハードディスク等)に格納された上述の処理手順をコンピュータに実行させることができるプログラムを、コンピュータに実行させることによっても実現できる。このコンピュータは、携帯端末装置に組み込まれたコンピュータを含む概念である。この場合、当該プログラムは、記録媒体を介して記憶装置内に格納された後に実行されても良いし、記憶媒体から直接実行されても良い。また、上記の実施形態に係る通信装置の機能ブロックは、集積回路として実現されても良い。