(57)【要約】      （修正有）【課題】別々のＮＡＴルータ配下にある２端末間に、宛て先ポート番号が変わっただけで異なる送信元ポート番号変換を行うＮＡＴルータが介在しても通信可能とするシステム及び方法を提供する。【解決手段】ＮＡＴルータＡ，Ｂ配下のセッション端末Ａ，Ｂは、送信元アドレス及びポート番号、宛て先アドレス及びポート番号を使用し、ＮＡＴルータＡ，Ｂを介して交信する。ＮＡＴ配下にないセッション管理サーバＳＶは、セッション端末Ａから同じ送信元アドレス及び送信元ポート番号を使用しＮＡＴルータＡを介してサーバＳＶの異なるポート番号Ｐ１，Ｐ２宛てに順次送られるデータに基き、ＮＡＴルータＡが宛て先ポート番号が変わっただけで異なる送信元ポート番号変換を行うタイプであると認識した場合、セッション端末ＡからＮＡＴルータＡを介してデータを送るのに使用された送信元ポート番号をもとに算出した最適ポート番号を、セッション端末Ｂに通知する。【選択図】図３
2014131261.tif 000002
【特許請求の範囲】
【請求項１】
それぞれ第１及び第２のＮＡＴルータの配下にある第１及び第２の端末と、ＮＡＴ配下にないサーバとから成り、第１及び第２の端末が、送信元アドレス、送信元ポート番号、宛て先アドレス及び宛て先ポート番号を使用し、第１及び第２のＮＡＴルータを介して互いに通信を行う通信システムであって、
サーバは、
第１の端末から第１のＮＡＴルータを介して順次送られてくる第１及び第２のデータの受信態様に基づいて、第１のＮＡＴルータが、宛て先ポート番号が変わっただけで異なる送信元ポート番号変換を行う所定タイプのＮＡＴルータであることを認識するＮＡＴタイプ認識手段と、
ＮＡＴタイプ認識手段により所定タイプであると認識された第１のＮＡＴルータを介して第１の端末から送られてくるデータを受信したときに、このデータを送るのに使用された送信元ポート番号をもとに算出したポート番号を推測ポート番号に決定するポート番号推測手段と、
ポート番号推測手段により決定された推測ポート番号を第２の端末に通知する推測ポート通知手段と
を具備し、
第１の端末は、同じ送信元アドレス及び送信元ポート番号を使用し、第１のＮＡＴルータを介してサーバの異なるポート番号宛てに第１及び第２のデータを順次送るデータ送信手段を具備し、
第２の端末は、サーバから通知された推測ポート番号を宛て先ポート番号として使用し、第２及び第１のＮＡＴルータを介して第１の端末と直接通信を行う直接通信手段を具備する
ことを特徴とする通信システム。
【請求項２】
それぞれ第１及び第２のＮＡＴルータの配下にある第１及び第２の端末と、ＮＡＴ配下にないサーバとから成る通信システムにおいて、第１及び第２の端末が、送信元アドレス、送信元ポート番号、宛て先アドレス及び宛て先ポート番号を使用し、第１及び第２のＮＡＴルータを介して互いに通信を行う通信方法であって、
第１の端末から、同じ送信元アドレス及び送信元ポート番号を使用し、第１のＮＡＴルータを介してサーバの異なるポート番号宛てに第１及び第２のデータを順次送るデータ送信ステップと、
サーバにおいて、第１の端末から第１のＮＡＴルータを介して順次送られてくる第１及び第２のデータの受信態様に基づいて、第１のＮＡＴルータが、宛て先ポート番号が変わっただけで異なる送信元ポート番号変換を行う所定タイプのＮＡＴルータであることを認識するＮＡＴタイプ認識ステップと、
サーバにおいて、ＮＡＴタイプ認識ステップで所定タイプであると認識された第１のＮＡＴルータを介して第１の端末から送られてくるデータを受信したときに、このデータを送るのに使用された送信元ポート番号をもとに算出したポート番号を推測ポート番号に決定するポート番号推測ステップと、
サーバから、ポート番号推測ステップで決定された推測ポート番号を第２の端末に通知する推測ポート通知ステップと
第２の端末から、サーバから通知された推測ポート番号を宛て先ポート番号として使用し、第２及び第１のＮＡＴルータを介して第１の端末と直接通信を行う直接通信ステップと
から成ることを特徴とする通信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、インターネットのような広域通信ネットワークに接続された別々のＮＡＴルータの配下にある端末の間で直接通信を行う通信システム及び通信方法に関する。
【背景技術】
【０００２】
従来より、インターネットなどの広域通信ネットワークを介した楽器の演奏（合奏）やデュエット等の合唱などの音楽的なセッションを可能としたネットワークセッションシステムが知られている。このセッションシステムは、自端末での演奏に基づく演奏情報を広域通信ネットワークを介して他端末に送信し合って各端末で両端末の演奏楽音を発音させようというものであるが、各端末が夫々のＮＡＴ（ Network Address Translation）ルータの配下（ローカル側）にある場合に、複数の端末間で、サーバを介することなく、直接、演奏情報を交信するには、ＮＡＴを越えなければならないという問題がある。
【０００３】
ＮＡＴ技術については非特許文献１の「ＲＦＣ４７８７」に記載されている。ＲＦＣ４７８７は、ＩＥＴＦ（ Internet Engineering Task Force）が公表する技術仕様であり、ユニキャストＵＤＰでのＮＡＴ越えに関連するＮＡＴ特性について解説されている。ＮＡＴルータの振舞いとしては、エンドポイント非依存マッピング、アドレス依存マッピング及びアドレス＆ポート依存マツピングという３つのパターンが、一般的によく知られている。そこで、これら３つのＮＡＴルータの振舞いのパターンについて触れる。図１及び図２は、ＮＡＴルータの振舞いパターン及び問題点を説明するための図であり、上述した３つのＮＡＴルータの内部では、このＮＡＴルータの配下にあるＰＣ（パーソナルコンピュータ）などの送信元端末から、同じ「送信元アドレス:192.168.0.1と送信元ポート番号：5000」の組を使って送信した場合、図１（１），（２）及び図２（１）のように、送信元アドレスと送信元ポートが変換される。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】htt://www.ietf.org/rfc/rfc4787.txt
【０００５】
図１（１）の「パターン＜１＞」は、ＮＡＴの配下から同じ送信元アドレスと送信元ポート番号の組を使って送信する場合には、どの宛て先アドレス、宛て先ポート番号に送っても同じポート変換をするタイプのＮＡＴルータの振舞いを示しており、ＲＦＣ４７８７では「エンドポイント非依存マッピング」と定義されている。このパターン＜１＞では、送信元が、同じ「送信元アドレス:192.168.0.1と送信元ポート番号：5000」の組を使うと共に、上段の場合は「宛て先アドレス:2.2.2.2、宛て先ポート 20000」を送信し、下段の場合は「宛て先アドレス 3.3.3.3、宛て先ポート 40000」を送信し、２つの場合とも、宛て先は違うが、同じ送信元アドレス・ポートなので、同じポート変換を行い、例えば「送信元アドレス 1.1.1.1、送信元ポート 10000」に変換する。
【０００６】
図１（２）の「パターン＜２＞」は、ＮＡＴの配下から同じ送信元アドレスと送信元ポート番号の組を使って送信する場合にも、宛て先アドレスが変わると別の変換を行い、変換された送信元ポートは、シーケンシャル（一つ前の変換結果から「＋１」される）に変化するタイプのＮＡＴルータの振舞いを示しており、ＲＦＣ４７８７では、「アドレス依存マッピング」と定義されている。このパターン＜２＞では、同じ「送信元アドレス:192.168.0.1と送信元ポート番号：5000」の組を使うと共に、上段の場合は「宛て先アドレス:2.2.2.2、宛て先ポート:20000」を送信し、下段の場合は「宛て先アドレス:3.3.3.3、宛て先ポート:40000」を送信し、２つ場合とも、宛て先は違うので、同じ送信元アドレス・ポートでも、別のポート変換を行い、例えば、上段の場合は「送信元アドレス:1.1.1.1、送信元ポート:10000」に変換し、下段の場合は「送信元アドレス:1.1.1.1、送信元ポート:10001」に変換するというように、一つ前の変換結果から「＋１」する。
【０００７】
図２（１）の「パターン＜３＞」は、ＮＡＴの配下から同じ送信元アドレスと送信元ポート番号の組を使って同じ宛て先に送信されていても、宛て先ポート番号が変わるだけで別の変換を行い、変換された送信元ポートは、シーケンシャル（一つ前の変換結果から「＋１」される）に変化するタイプのＮＡＴルータの振舞いを示しており、ＲＦＣ４７８７では、「アドレス＆ポート依存マッピング」と定義されている。このパターン＜３＞では、同じ「送信元アドレス:192.168.0.1と送信元ポート番号：5000」の組を使うと共に、上段の場合は「宛て先アドレス:2.2.2.2、宛て先ポート:20000」を、下段の場合は「宛て先アドレス:2.2.2.2、宛て先ポート:30000」を送信し、２つの場合とも、宛て先アドレスは同じだが、宛て先ポートが違うので別の変換を行い、例えば、上段の場合は「送信元アドレス:1.1.1.1、送信元ポート:10000」に変換し、下段の場合は「送信元アドレス:1.1.1.1、送信元ポート:10001」に変換するというように、一つ前の変換結果から「＋１」する。
【０００８】
ところで、このようにＮＡＴルータ配下にいる２つの端末同士で直接の通信を行おうとすると、上述した夫々のＮＡＴルータによる送信元アドレス及び送信元ポート番号の変換の影響を受けて、変換後のポート番号、アドレスを何らかの方法で知らなければ両端末の接続を行うことができない。
【０００９】
例えば、ＮＡＴルータ１の配下にある端末ＰＣ１及びＮＡＴルータ２の配下にある端末ＰＣ２が、お互いの外部（グローバル）のＩＰアドレス:3.3.3.3;1.1.1.1を知っており、5000番ポートでの通信を行おうとして、図２（２）のように、同じ「送信元アドレス:192.168.0.1と送信元ポート番号：5000」の組を使うと共に、ＰＣ１からは「宛て先アドレス:3.3.3.3、宛て先ポート：5000」を送信し、ＰＣ２からは「宛て先アドレス:1.1.1.1、宛て先ポート：5000」を送信して通信しようとしても、ＮＡＴルータ１，２で変換された送信元ポート番号:20000,30000は、それぞれ、ＮＡＴルータ２，１の宛て先ポート番号：5000と一致しないので、ＮＡＴルータ２，１を通過することができない。
【００１０】
このような場合、一般的に「ＵＤＰホールパンチング」として知られる手法を使うことで、パターン＜１＞、パターン＜２＞での通信を行うことができるようになる。例えば、ＮＡＴ配下ではないところに設置されたサーバを用意し、各ＰＣ１，２は、ＮＡＴルータ１，２を通じてこのサーバへ通信を行うと、サーバは、それぞれのＮＡＴルータ１，２で変換された後のアドレス及びポート番号を知ることができるので、ＰＣ１には「ＰＣ２のアドレスと変換後のポート番号は3.3.3.3の30000番です」と、ＰＣ２には「ＰＣ１のアドレスと変換後のポート番号は、1.1.1.1の20000番です」というように、お互いに通知する。ＮＡＴルータ１，２がパターン＜１＞のルータであれば、ＰＣ１，２は、サーバから通知された相手ＰＣ２，１側のアドレス及びポート番号を宛て先にして送信すると、ＮＡＴルータを通過することができる。
【００１１】
また、ＮＡＴルータ１，２がパターン＜２＞のルータの場合は、サーバからの通知で教えてもらったポート番号を使用しても通過できないが、ＮＡＴによる変換後の送信元ポート番号は、多くの場合、「30000」→「30001」のようなシーケンシャルな変化なので、ポートスキャンのように前後のポートを連続的に試すことで通過することができる。前述の例では、ＰＣ１は、30000がだめだと30001を試し、ＰＣ２は、20000がだめだと20001を試すことで通過することができる。つまり、パターン＜２＞のルータでは、同じ宛て先アドレスに対してであれば、次のように、宛て先ボート番号を変化させても送信元ポート番号は変わらないので、前後のポート番号を試すことでそのうち通過する組み合わせが現れることが期待できる：
（ＰＣ１側）ＮＡＴ変換後送信元ポート    あて先ポート
２０００１              →  ３００００
２０００１              →  ３０００１  ◎
２０００１              →  ３０００２
…                          …
（ＰＣ２側）ＮＡＴ変換後送信元ポート    あて先ポート
３０００１              →  ２００００
３０００１              →  ２０００１  ◎
３０００１              →  ２０００２
…                          …
【００１２】
このように、ＵＤＰホールパンチング手法を使うことによって、図２のようなパターン＜１＞及びパターン＜２＞のタイプのＮＡＴルータでの通信を行うことができるようになる。しかしながら、図２（１）のように、パターン＜３＞、即ち、同じ送信元アドレス及び送信元ポート番号の組から同じ宛て先アドレスに送信されていても、宛て先ポート番号が変わるだけで別の変換をするタイプのＮＡＴルータへの対応はできない。つまり、パターン＜２＞のように前後のポートを連続的に試しても、今度は試すたびにＮＡＴによる変換後の送信元ポート番号が変化してしまうため、次のように、いつまでたっても追いつけず、通過することができない：
（ＰＣ１側）ＮＡＴ変換後送信元ポート    あて先ポート
２０００１              →  ３００００
２０００２              →  ３０００１
２０００３              →  ３０００２
２０００４              →  ３０００３
…                          …
（ＰＣ２側）ＮＡＴ変換後送信元ポート    あて先ポート
３０００１              →  ２００００
３０００２              →  ２０００１
３０００３              →  ２０００２
３０００４              →  ２０００３
…                          …
【発明の概要】
【発明が解決しようとする課題】
【００１３】
この発明は、このような事情に鑑み、別々のＮＡＴルータ配下にある２つの端末の間で、送信元アドレス、送信元ポート番号、宛て先アドレス及び宛て先ポート番号を使用して通信を行う際に、宛て先ポート番号が変わっただけで異なる送信元ポート番号変換を行うＮＡＴルータが介在しても、両端末間で直接通信を行うことができる通信システム及び通信方法を提供することを目的とする。
【課題を解決するための手段】
【００１４】
この発明の主たる特徴に従うと、それぞれ第１及び第２のＮＡＴルータ（ＮＲａ，ＮＲｂ）の配下にある第１及び第２の端末（ＴＭａ，ＴＭｂ）と、ＮＡＴ配下にないサーバ（ＳＶ）とから成り、第１及び第２の端末（ＴＭａ，ＴＭｂ）が、送信元アドレス、送信元ポート番号、宛て先アドレス及び宛て先ポート番号を使用し、第１及び第２のＮＡＴルータ（ＮＲａ，ＮＲｂ）を介して互いに通信を行う通信システムであって、サーバ（ＳＶ）は、第１の端末（ＴＭａ）から第１のＮＡＴルータ（ＮＲａ）を介して順次送られてくる第１及び第２のデータの受信態様〔図４（ａ）（１），（２）〕に基づいて、第１のＮＡＴルータ（ＮＲａ）が、宛て先ポート番号が変わっただけで異なる送信元ポート番号変換を行う所定タイプ（パターン＜３＞）のＮＡＴルータであることを認識するＮＡＴタイプ認識手段〔図４（ａ）（３），Ｓ４〕と、ＮＡＴタイプ認識手段〔図４（ａ）（３）、Ｓ４〕により所定タイプ（パターン＜３＞）であると認識された第１のＮＡＴルータ（ＮＲａ）を介して第１の端末（ＴＭａ）から送られてくるデータを受信したときに、このデータを送るのに使用された送信元ポート番号をもとに算出（例えば、「＋１」だけ加算）したポート番号を推測ポート番号に決定するポート番号推測手段〔図４（ｂ）、Ｓ４〕と、ポート番号推測手段〔図４（ｂ）、Ｓ４〕により決定された推測ポート番号を第２の端末（ＴＭｂ）に通知する推測ポート通知手段〔図５（ａ），Ｓ６〕とを具備し、第１の端末（ＴＭａ）は、同じ送信元アドレス及び送信元ポート番号を使用し、第１のＮＡＴルータ（ＮＲａ）を介してサーバ（ＳＶ）の異なるポート番号（Ｐ１，Ｐ２）宛てに第１及び第２のデータを順次送るデータ送信手段〔図４（ａ）（１），（２）、Ｓ２〜Ｓ３〕を具備し、第２の端末（ＴＭｂ）は、サーバ（ＳＶ）から通知された推測ポート番号を宛て先ポート番号として使用し、第２及び第１のＮＡＴルータ（ＮＲｂ，ＮＲａ）を介して第１の端末（ＴＭａ）と直接通信を行う直接通信手段〔図５（ｂ）〕を具備する通信システム〔請求項１〕、並びに、それぞれ第１及び第２のＮＡＴルータ（ＮＲａ，ＮＲｂ）の配下にある第１及び第２の端末（ＴＭａ，ＴＭｂ）と、ＮＡＴ配下にないサーバ（ＳＶ）とから成る通信システムにおいて、第１及び第２の端末（ＴＭａ，ＴＭｂ）が、送信元アドレス、送信元ポート番号、宛て先アドレス及び宛て先ポート番号を使用し、第１及び第２のＮＡＴルータ（ＮＲａ，ＮＲｂ）を介して互いに通信を行う通信方法であって、第１の端末（ＴＭａ）から、同じ送信元アドレス及び送信元ポート番号を使用し、第１のＮＡＴルータ（ＮＲａ）を介してサーバ（ＳＶ）の異なるポート番号（Ｐ１，Ｐ２）宛てに第１及び第２のデータを順次送るデータ送信ステップ〔図４（ａ）（１），（２）、Ｃ２〜Ｃ３〕と、サーバ（ＳＶ）において、第１の端末（ＴＭａ）から第１のＮＡＴルータ（ＮＲａ）を介して順次送られてくる第１及び第２のデータの受信態様〔図４（ａ）（１），（２）〕に基づいて、第１のＮＡＴルータ（ＮＲａ）が、宛て先ポート番号が変わっただけで異なる送信元ポート番号変換を行う所定タイプ（パターン＜３＞）のＮＡＴルータであることを認識するＮＡＴタイプ認識ステップ〔図４（ａ）（３）、Ｓ４〕と、サーバ（ＳＶ）において、ＮＡＴタイプ認識ステップ〔図４（ａ）（３）、Ｓ４〕で所定タイプ（パターン＜３＞）であると認識された第１のＮＡＴルータ（ＮＲａ）を介して第１の端末（ＴＭａ）から送られてくるデータを受信したときに、このデータを送るのに使用された送信元ポート番号をもとに算出（例えば、「＋１」だけ加算）したポート番号を推測ポート番号に決定するポート番号推測ステップ〔図４（ｂ）、Ｓ４〕と、サーバ（ＳＶ）から、ポート番号推測ステップ（Ｓ４）で決定された推測ポート番号を第２の端末（ＴＭｂ）に通知する推測ポート通知ステップ〔図５（ａ）、Ｓ６〕と、第２の端末（ＴＭｂ）から、サーバ（ＳＶ）から通知された推測ポート番号を宛て先ポート番号として使用し、第２及び第１のＮＡＴルータ（ＮＲｂ，ＮＲａ）を介して第１の端末（ＴＭａ）と直接通信を行う直接通信ステップ〔図５（ｂ）〕とから成る通信方法〔請求項２〕が提供される。なお、括弧書きは、第１の端末（ＴＭａ）及び第１のＮＡＴルータ（ＮＲａ）を夫々実施例の「セッション端末Ａ」及び「ＮＡＴルータＡ」とし、第２のセッション端末及び第２のＮＡＴルータを夫々実施例の「セッション端末Ｂ」及び「ＮＡＴルータＢ」とした場合における実施例の参照記号や箇所等を表わし、以下においても同様である。
【発明の効果】
【００１５】
この発明による主たる特徴による通信システムは（請求項１，２）、それぞれ第１及び第２のＮＡＴルータ（ＮＲａ，ＮＲｂ）の配下にある第１及び第２の端末（ＴＭａ，ＴＭｂ）と、ＮＡＴ配下にないサーバ（ＳＶ）とから成り、第１及び第２の端末（ＴＭａ，ＴＭｂ）が、送信元アドレス、送信元ポート番号、宛て先アドレス及び宛て先ポート番号を使用し、第１及び第２のＮＡＴルータ（ＮＲａ，ＮＲｂ）を介して互いに通信を行う。両端末（ＴＭａ，ＴＭｂ）の直接通信に先立って、先ず、第１の端末（ＴＭａ）から、同じ送信元アドレス及び送信元ポート番号を使用し、第１のＮＡＴルータ（ＮＲａ）を介してサーバ（ＳＶ）の異なるポート番号（Ｐ１，Ｐ２）宛てに第１及び第２のデータを順次送ると〔図４（ａ）（１），（２）、Ｃ２，Ｃ３〕と、サーバ（ＳＶ）では、順次送られてくる第１及び第２のデータの受信態様〔図４（ａ）（１），（２）〕に基づいて、第１のＮＡＴルータ（ＮＲａ）が、宛て先ポート番号が変わっただけで異なる送信元ポート番号変換を行う所定タイプ（パターン＜３＞）のＮＡＴルータであることを認識する〔図４（ａ）（３）、Ｓ４〕。サーバ（ＳＶ）では、所定タイプ（パターン＜３＞）であると認識された第１のＮＡＴルータ（ＮＲａ）を介して第１の端末（ＴＭａ）から送られてくるデータを受信したときに、このデータを送るのに使用された送信元ポート番号をもとに算出（例えば、「＋１」だけ加算）したポート番号を推測ポート番号に決定し〔図４（ｂ）、Ｓ４〕、決定した推測ポート番号をサーバ（ＳＶ）から第２の端末（ＴＭｂ）に通知する〔図５（ａ）、Ｓ６〕。そして、通知された推測ポート番号を宛て先ポート番号として使用し、第２の端末（ＴＭｂ）から第２及び第１のＮＡＴルータ（ＮＲｂ，ＮＲａ）を介して第１の端末（ＴＭａ）と直接通信を行う〔図５（ｂ）〕。
【００１６】
従って、この発明によれば、別々のＮＡＴルータ配下にある２つの端末の間で、送信元アドレス、送信元ポート番号、宛て先アドレス及び宛て先ポート番号を使用して通信を行う際に、宛て先ポート番号が変わっただけで異なる送信元ポート番号変換を行うＮＡＴルータが介在しても、両端末間で直接通信を行うことができる。
【図面の簡単な説明】
【００１７】
【図１】ＮＡＴルータの振舞いパターンの一例を説明するための図である。
【図２】ＮＡＴルータの振舞いパターンの他の例及びＮＡＴルータの問題点を説明するための図である。
【図３】この発明の一実施例によるネットワークセッションシステムの構成例を示す。
【図４】この発明の一実施例によるＮＡＴタイプの確認手順及びサーバとの通信態様の一部を示す。
【図５】この発明の一実施例によるサーバとの通信態様の他部及び２クライアント端末間の交信態様を示す。
【図６】この発明の一実施例によるクライアント端末の接続動作例を示す。
【図７】この発明の一実施例によるサーバの接続援助動作例を示す。
【発明を実施するための形態】
【００１８】
〔システム構成の概要〕
図３は、この発明の一実施例によるネットワークセッションシステムの構成を示す。このネットワークセッションシステムは、インターネットのような広域通信ネットワークＣＮを介して通信可能に接続されるセッション管理サーバ（単にサーバともいう）ＳＶ及び複数のＮＡＴルータＮＲ：ＮＲａ〜ＮＲｄ（記号“ＮＲ”はＮＡＴルータを代表的に表わす）と、各ＮＡＴルータＮＲの配下にある各セッション端末ＴＭ：ＴＭａ〜ＴＭｄ（記号“ＴＭ”はセッション端末を代表的に表わす）で構成される通信システムである。
【００１９】
セッション管理サーバＳＶは、ＮＡＴ配下にはなく、メンバーとなるセッション端末ＴＭ間の接続支援、例えば、セッションの開始に先立って行われる各セッション端末ＴＭ同士の接続手続きなどを行う。各セッション端末ＴＭ間、例えば、セッション端末ＴＭａ〜ＴＭｄ間で接続が成立した後は、セッション管理サーバＳＶを介することなく、ＮＡＴ配下のこれらセッション端末ＴＭａ〜ＴＭｄ間において、直接、オーディオデータなどの演奏情報が送受信される。
【００２０】
ＮＡＴルータＮＲは、図示されたセッション端末ＴＭの外に、複数のホスト機器を配下に備え、これらの機器で構成されるローカルネットワークと広域通信ネットワークＣＮとの間でデータを中継し、両ネットワーク間でアドレス及びポート番号を変換するＮＡＴ機能を備える。つまり、適当に割り振られ各ローカルネットワークでのみ通用するローカルアドレス及びポート番号を広域通信ネットワークＣＮ上のグローバルアドレス及びポート番号を自動的に相互変換する。このＮＡＴ機能のタイプは、図１〜図２で説明したように、パターン＜１＞〜＜３＞の３つが知られている。
【００２１】
ネットワーク音楽セッションのメンバーとなる複数のセッション端末ＴＭａ〜ＴＭｄは、クライアント端末或いは単にクライアントとも呼ばれ、それぞれ、楽器演奏及び／又はカラオケが可能な電子音楽装置である。つまり、各セッション端末ＴＭは、電子的な音楽情報処理機能を有する一種のコンピュータであり、電子楽器や音楽情報処理アプリケーションがインストールされたパーソナルコンピュータ（ＰＣ）のような電子音楽装置を用いることができる。また、セッション端末ＴＭとして電子楽器を使用しカラオケを行わない場合があり、セッション端末ＴＭとして音楽情報処理アプリケーション付きＰＣを使用しカラオケのみを行う場合もある。なお、セッション端末ＴＭの数（メンバー数）は、図３には４つ例示されているが、これに限らない（多くても少なくてもよい）。
【００２２】
〔タイプの確認から変換後アドレス・ポートの取得までの手順〕
この発明の一実施例による通信システムは、別々のＮＡＴルータＮＲａ〜ＮＲｄの配下にある複数のセッション端末（以下、「クライアント端末」或いは単に「クライアント」又は「端末」という）ＴＭａ〜ＴＭｄと、ＮＡＴ配下にないセッション管理サーバ（以下、単に「サーバ」という）ＳＶとから成り、各クライアント端末ＴＭａ〜ＴＭｄは、送信元アドレス、送信元ポート番号、宛て先アドレス及び宛て先ポート番号を使用して、それぞれのＮＡＴルータＮＲａ〜ＮＲｄを介して直接通信が行われる。しかしながら、図２（２）に関して説明したように、或るクライアント端末ＴＭが属するＮＡＴルータＮＲが、宛て先ポート番号が変わっただけで異なる送信元ポート番号変換を行う「パターン＜３＞」（アドレス＆ポート依存マッピング）のタイプ〔図２（１）参照〕であっても、端末ＴＭａ〜ＴＭｄ間では、通信（接続）を確立させる必要がある。図４及び図５は、この発明の一実施例によるＮＡＴタイプの確認から２クライアント端末間の交信に到るまでの手順を示す。なお、以下においては、クライアント端末（Ａ）ＴＭａとクライアント端末（Ｂ）ＴＭｂとの間で接続を確立する場合を例にして説明する。
【００２３】
クライアントＡ，Ｂ間の直接通信に先立って、先ず、図４（ａ）のＮＡＴタイプの確認を行う。この場合、サーバＳＶでは、予め２つのポート番号Ｐ１，Ｐ２を開いておき、クライアントＡは、ＮＡＴルータＢを介してサーバＳＶに接続するときに、両方のポート番号Ｐ１，Ｐ２にパケットを順次送出する。サーバＳＶは、これらのパケットの受信態様（受信結果）を見て、パターン＜３＞に当てはまるかどうかを判定する。
【００２４】
具体的には、まず、図４（ａ）（１）に示すように、図２（１）と同様に、同じ「送信元アドレス:192.168.0.1と送信元ポート番号：5000」の組を使うと共に、サーバＳＶのアドレスと第１のポート番号Ｐ１＝「7272」を示す「宛て先アドレス:2.2.2.2、宛て先ポート：7272」を持つパケットをクライアントＡからＮＡＴルータＡを介してサーバＳＶに送信する。次いで、図４（ａ）（２）に示すように、宛て先ポート番号のみを第２のポート番号Ｐ２＝「7273」に変更したパケットをサーバＳＶに送信する。その結果、サーバＳＶで始めに第１ポートＰ１＝7272で受信した送信元ポート番号＝ 19998と、後で第２ポート番号Ｐ２＝7273で受信した送信元ポート番号＝ 19999とを比較すると、ポート番号が進んでいる。従って、サーバＳＶは、図４（ａ）（３）に示すように、宛て先ポート番号を変えただけで、ポート変換結果が変わっていることが分り、「ＮＡＴルータＡはパターン＜３＞である」と認識することができる。
【００２５】
また、これと同様のパケットをクライアントＢからサーバＳＶに送ることにより、ＮＡＴルータＢについても、パターン＜３＞であるかどうか調べる。その後は、次に説明するように、通常のＵＤＰホールパンチングと同じであり、ＮＡＴルータＡがこのパターン＜３＞であることが分った場合には、相手クライアントＢには、クライアントＡが使用したポート番号に「＋１」した番号を通知する。
【００２６】
さて、このようにして、クライアントＡ，Ｂが属するＮＡＴルータＡ，Ｂのタイプがパターン＜３＞であるかどうかを調べ終えると（以下においては、ＮＡＴルータＡはパターン＜３＞のタイプであり、ＮＡＴルータＢはパターン＜３＞以外のタイプであるとする）図４（ｂ）のように、両クライアントＡ，ＢからＮＡＴルータＡ，Ｂを介してデータがサーバＳＶに送られる。サーバＳＶは、このデータを送ってくるのに使用されたＮＡＴ変換後の送信元アドレス及びポート番号を知ることができるので、お互いに通知する。
【００２７】
すなわち、所定タイプのパターン＜３＞であると認識したＮＡＴルータＡを介してクライアントＡから送られてくるデータを受信したときは、このデータを送るのに使用された送信元ポート番号に「＋１」だけ加算したポート番号を推測ポート番号に決定し、図５（ａ）のように、「クライアントＡのアドレスと変換後のポート番号は、（パターン＜３＞に当てはまるので） 1.1.1.1の 20001番と推測される」旨を相手クライアントＢに通知する。また、パターン＜３＞でないと判定したＮＡＴルータＢを介してクライアントＢから送られてくるデータを受信したときは、このデータを送るのに使用された送信元ポート番号を推測ポート番号に決定し、［クライアントＢのアドレスと変換後のポート番号は、3.3.3.3の30000番と推測される」旨を相手クライアントＡに通知する。
【００２８】
そして、両クライアントＡ，Ｂは、サーバＳＶから通知された推測ポート番号を宛て先ポート番号に使用すると、クライアントＡ，Ｂは、ＮＡＴルータＡ，Ｂを介して直接通信を行うことができる。つまり、図５（ｂ）に示すように、クライアントＡ，Ｂは、同じ「送信元アドレス:192.168.0.1と送信元ポート番号：5000」の組を使うと共に、サーバＳＶから通知された「3.3.3.3の30000番」或いは「 1.1.1.1の 20001番」を宛て先としてパケットを送信するので、パターン＜３＞のＮＡＴルータＡが送信元ポートを「＋１」変化させても、クライアントＢからの宛て先ポート番号は、サーバＳＶからの通知に従って既に「＋１」させてあるので、ポート番号が一致しパケットが通過でき接続できる。
【００２９】
以上説明したように、この発明の一実施例による通信システムでは、ＮＡＴルータＡ，Ｂの配下にある端末Ａ，Ｂと、ＮＡＴ配下にないサーバＳＶとから成り、端末Ａ，Ｂが、送信元アドレス、送信元ポート番号、宛て先アドレス及び宛て先ポート番号を使用し、ＮＡＴルータＡ，Ｂを介して互いに通信を行う。両端末Ａ，Ｂの直接通信に先立って、端末Ａは、同じ送信元アドレス及び送信元ポート番号を使用し、ＮＡＴルータＡを介してサーバＳＶの異なるポート番号Ｐ１，Ｐ２宛てに第１及び第２のデータを順次送ると〔図４（ａ）（１），（２）〕、サーバＳＶは、順次送られてくる第１及び第２データの受信態様に基づいて、ＮＡＴルータＡが、宛て先ポート番号が変わっただけで異なる送信元ポート番号変換を行う所定タイプ（パターン＜３＞）のＮＡＴルータであるかどうかを調べる〔図４（ａ）（３）〕。ここで、ＮＡＴルータＡが所定タイプ（パターン＜３＞）であると認識された場合、当該ＮＡＴルータＡを介して端末Ａから送られてくるデータを受信したときに、このデータを送るのに使用された送信元ポート番号をもとに算出（例えば、「＋１」だけ加算）したものを端末Ａへの最適なポート番号と推定し、これを端末Ａへの推測ポート番号に決定し、所定タイプでないと認識された場合は、当該ＮＡＴルータＡからデータを送るのに使用された送信元ポート番号を推測ポート番号に決定し〔図４（ｂ）〕、決定した推測ポート番号を端末Ｂに通知する〔図５（ａ）〕。また、端末Ｂについても、同様の手順で、ＮＡＴルータＢが所定タイプ（パターン＜３＞）であるかどうかが調べられ〔図４（ａ）（１），（２）→（３）〕、所定タイプ（パターン＜３＞）であるか否かの認識に応じて端末Ｂへの推測ポート番号が決定され、サーバＳＶから端末Ａに通知される〔図４（ｂ）→図５（ａ）〕。そして、端末Ｂ；Ａは、それぞれ、通知された推測ポート番号を宛て先ポート番号として使用し、ＮＡＴルータＢ，Ａ；Ａ，Ｂを介して端末Ａ；Ｂと直接通信を行う〔図５（ｂ）〕。なお、用語「推測」は「推定」と表現してもよい。
【００３０】
〔動作例〕
図６は、この発明の一実施例によるクライアント端末の接続動作例を示し、図７は、この発明の一実施例によるサーバの接続援助動作例を示す。まず、図６に従って、クライアント端末ＴＭの接続動作を説明する。クライアント端末ＴＭは、ユーザ操作による接続開始の指示があると、クライアント端末ＴＭの制御部（ＣＰＵ）は、サーバＳＶに対して接続を行うことを通知し、次のステップＣ２では、サーバＳＶに対して、ポート番号Ｐ１宛てにパケットを送出し、さらに、ステップＣ３で、サーバＳＶに対して、同じ送信元アドレス・ポート番号から、ポート番号Ｐ２宛てにパケットを送出する。
【００３１】
次のステップＣ４では、サーバＳＶから接続通知が届いたか否か、すなわち、他の参加者が現れたかどうかを判定し、サーバＳＶから接続通知が届いていない場合には（Ｃ４＝ＮＯ）、接続通知の到着を待機し、サーバＳＶから接続通知が到着すると（Ｃ４＝ＹＥＳ）、ステップＣ５に進む。ステップＣ５では、サーバＳＶから通知されたポート番号とアドレスをセットしてパケットの送出を試行する。この場合、通知されたポート番号の前後のポート番号値に対しての送出を行っても良い。
【００３２】
続くステップＣ６では、接続しようとする相手クライアントＴＭからの試行パケットが届いたか否かを判定し、試行パケットが届いたときは（Ｃ６＝ＹＥＳ）、ステップＣ７に進んで、サーバＳＶに接続完了したことを通知し、これにより、相手クライアントＴＭとの直接的な接続が確立し、この接続動作を終了し、以後は、相手クライアントＴＭとの音楽セッション動作（合奏）に移行する。
【００３３】
一方、ステップＣ６で、相手クライアントＴＭからの試行パケットが届いていないと判定したときは（Ｃ６＝ＮＯ）、ステップＣ８に進み、相手クライアントＴＭからのパケットを待つ最大時間が経過したか否かを判定する。ここで、この最大時間が経過していない間は（Ｃ８＝ＮＯ）、ステップＣ６に戻って、相手クライアントＴＭからの試行パケットが届くまで（Ｃ６＝ＹＥＳ）或いは最大時間が経過するまで（Ｃ８＝ＹＥＳ）、ステップＣ６，Ｃ８の試行パケット到着及び最大時間経過を待機し、試行パケットが届くと（Ｃ６＝ＹＥＳ）、上述したステップＣ７の接続確立処理を行ってこの接続動作を終了し、最大時間が経過すると、ステップＣ９に進む。
【００３４】
ステップＣ９では、ステップＣ５でのパケット送出の試行を最大試行回数行ったか否かを判定し、最大試行回数行っていないときは（Ｃ９＝ＮＯ）、ステップＣ１０で、サーバＳＶに接続のリトライを通知すると共に、再度、接続の試行を行った後、ステップＣ４に戻り、ステップＣ４〜Ｃ６，Ｃ８〜Ｃ１０の動作を繰り返す。そして、パケット送出の試行を最大試行回数行ったときは（Ｃ９＝ＹＥＳ）、ステップＣ１１で、サーバＳＶに接続失敗したことを通知して接続を断念し、この接続動作を終了する。
【００３５】
次に、図７に従って、サーバＳＶの接続援助動作を説明する。サーバＳＶの制御部（ＣＰＵ）は、ステップＳ１で、クライアントＴＭから接続開始の通知が来たか否かを判定し、接続開始の通知が来ない間は（Ｓ１＝ＮＯ）接続開始の通知を待ち、接続開始の通知が来ると（Ｓ１＝ＹＥＳ）、ステップＳ２に進んで、クライアントＴＭからポート番号Ｐ１へのパケットを受信したか否かを判定し、ポート番号Ｐ１へのパケットを受信しない間は（Ｓ２＝ＮＯ）当該パケットの受信を待つ。
【００３６】
ポート番号Ｐ１へのパケットを受信すると（Ｓ２＝ＹＥＳ）クライアントＴＭからポート番号Ｐ２へのパケットを受信したか否かを判定し、ポート番号Ｐ２へのパケットを受信しない間は（Ｓ３＝ＮＯ）当該パケットの受信を待つ。そして、ポート番号Ｐ２へのパケットを受信すると（Ｓ３＝ＹＥＳ）、ステップＳ４に進んで、ポート番号Ｐ１、Ｐ２のパケットの送信元ポート番号より、接続時に通知する推測ポート番号を決定し、ステップＳ５に進む。ステップＳ５では、接続待ちのクライアントＴＭが２つ以上存在するか否かを判定し、２つ未満のときは（Ｓ５＝ＮＯ）、ステップＳ１に戻り、接続待ちのクライアントＴＭが２つ未満の間は（Ｓ５＝ＮＯ），ステップＳ１〜Ｓ５の処理を繰り返す。
【００３７】
接続待ちのクライアントＴＭが２つ以上存在すると、（Ｓ５＝ＹＥＳ）、ステップＳ６に進み、それぞれのクライアントＴＭに、相手の接続先アドレスと、推測されたポート番号を含め、接続通知のパケットを送出し、さらに、ステップＳ７に進む。ステップＳ７では、クライアントＴＭから、「接続完了」、「接続のリトライ通知」、「接続失敗」の何れかのパケットが届いたか否かを判定し、届いていなければ（Ｓ７＝ＮＯ）、届くまで待つ。何れかのパケットが届くと（Ｓ７＝ＹＥＳ）、ステップＳ８において、届いたパケットの内容により処理を分岐する。
【００３８】
つまり、「接続のリトライ通知」のパケットを受信したときは（Ｓ８＝リトライ）、ステップＳ６に戻って、ステップＳ６〜Ｓ８の処理を繰り返す。「接続完了」のパケットを受信したときは（Ｓ８＝接続完了）、ステップＳ９に進み、接続完了とし、接続待ちのクライアントＴＭから削除する。また、「接続失敗」のパケットを受信したときは（Ｓ８＝接続失敗）、ステップＳ１０に進み、接続失敗とし、接続待ちのクライアントＴＭから削除する。そして、ステップＳ８，Ｓ９の処理後は、元の待機状態に戻る。
【００３９】
〔変形例〕
図６及び図７の動作例では、推測ポート番号を決定した後、接続待ちのクライアントが自分を含めて２つ以上存在するか（他の参加者が現れた）かを待って、接続通知のパケットを送出するようにしているが、実際には、サーバヘポート番号を通知したときから他の参加者が現れて、２つのクライアント間の接続試行を始めるまでの間に時間が空いてしまうことがある。このような場合には、ＮＡＴルータの変換後のポート番号が大きくずれている可能性がある。
【００４０】
そこで、図６のクライアント側の接続動作において、ステップＣ４：「サーパから接続通知が届いたか（＝他の参加者が現れたかどうか）」（ＹＥＳ）の後に、「もう一度新しいポート番号からサーバにパケットを送出する」処理を加えると共に、図７のサーバ側の動作ステップＳ５：「接続待ちのクライアントが２つ以上存在するか？」（ＹＥＳ）の後に、「クライアントから送出されたバケットの送信元ボート番号を見て、相手に通知する推測ポート番号を決める」プロセスをはさんでも良い。このように、他の参加者が現れた直後に推測ポート番号を決めるようにすれば、変換後のポート番号がずれることはない。最新の状況を通信接続に反映させることができるようになる。
【００４１】
〔種々の実施態様〕
以上、この発明の好適な一実施例について説明したが、これは単なる一例であって、この発明は、発明の精神を逸脱しない範囲で種々の変更が可能であり、種々の態様で実施することができる。例えば、ＮＡＴルータが所定タイプ（パターン＜３＞）であると認識された場合における推測ポート番号の決定、即ち、相手クライアントで使用すべき最適な宛て先ポート番号の推測については、実施例では、サーバ（ＳＶ）がＮＡＴルータタイプをパターン＜３＞であると認識した場合、送信元ポート番号に対して「＋１」の演算で算出したポート番号を推測ポート番号として相手クライアントに通知するようにしたが、送信元ポート番号をもとにした推測ポート番号の算出方法はこれに限らない。
【００４２】
例えば、ＮＡＴルータポート変換の振舞い（送信元ポート番号をどのように変換するか）に応じて、相手クライアントに通知する推測ポート番号を得るため送信元ポート番号に対する増減量（送信元ポート番号に対して「＋２」、「＋３」、…、または、「−１」、「−２」、…の演算を行う、など）を決定するようにしてもよい。また、送信元ポート番号に対する演算は、加減算に限らない。
【００４３】
例えば、サーバがＮＡＴルータタイプを認識するＮＡＴタイプ確認手順〔図４（ａ）〕において、ポート変換結果の差異を検出し、検出した差分だけ送信元ポート番号を増減させたものを推測ポート番号として相手クライアントに通知するようにしてもよい。つまり、検出した差分がＮＡＴルータポート変換の振舞いとして推測することができるので、相手クライアントに通知する推測ポート番号も、その差分だけ送信元ポート番号を増減させたものにすることで、接続を行うことができる。
【符号の説明】
【００４４】
ＮＲ：ＮＲａ〜ＮＲｄ  ＮＡＴルータ、
ＴＭ：ＴＭａ〜ＴＭｄ  セッション端末又はクライアント端末、
ＳＶ：［セッション管理］サーバ、
Ｐ１，Ｐ２  ポート番号。
【図１】
2014131261.tif 000003
【図２】
2014131261.tif 000004
【図３】
2014131261.tif 000005
【図４】
2014131261.tif 000006
【図５】
2014131261.tif 000007
【図６】
2014131261.tif 000008
【図７】
2014131261.tif 000009