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