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