特許第6331421号(P6331421)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ヤマハ株式会社の特許一覧

<>
  • 特許6331421-通信システム及びサーバ 図000002
  • 特許6331421-通信システム及びサーバ 図000003
  • 特許6331421-通信システム及びサーバ 図000004
  • 特許6331421-通信システム及びサーバ 図000005
  • 特許6331421-通信システム及びサーバ 図000006
  • 特許6331421-通信システム及びサーバ 図000007
  • 特許6331421-通信システム及びサーバ 図000008
  • 特許6331421-通信システム及びサーバ 図000009
  • 特許6331421-通信システム及びサーバ 図000010
  • 特許6331421-通信システム及びサーバ 図000011
  • 特許6331421-通信システム及びサーバ 図000012
  • 特許6331421-通信システム及びサーバ 図000013
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6331421
(24)【登録日】2018年5月11日
(45)【発行日】2018年5月30日
(54)【発明の名称】通信システム及びサーバ
(51)【国際特許分類】
   H04L 12/749 20130101AFI20180521BHJP
   H04L 12/46 20060101ALI20180521BHJP
【FI】
   H04L12/749
   H04L12/46 A
【請求項の数】6
【全頁数】26
(21)【出願番号】特願2014-13497(P2014-13497)
(22)【出願日】2014年1月28日
(65)【公開番号】特開2015-142217(P2015-142217A)
(43)【公開日】2015年8月3日
【審査請求日】2016年11月22日
(73)【特許権者】
【識別番号】000004075
【氏名又は名称】ヤマハ株式会社
(74)【代理人】
【識別番号】110000213
【氏名又は名称】特許業務法人プロスペック特許事務所
(72)【発明者】
【氏名】原 貴洋
【審査官】 宮島 郁美
(56)【参考文献】
【文献】 特開2005−117587(JP,A)
【文献】 特開2004−180003(JP,A)
【文献】 特開2007−181122(JP,A)
【文献】 特開2011−166569(JP,A)
【文献】 米国特許出願公開第2011/0075668(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
H04L12/00−12/28,12/44−12/955
(57)【特許請求の範囲】
【請求項1】
第1NATルータの配下にある第1端末と、第2NATルータの配下にある第2端末と、NATルータの配下にないサーバとから成り、前記第1端末及び前記第2端末が前記第1NATルータ及び前記第2NATルータを介して互いに通信する通信システムにおいて、
前記第1端末は、送信元ポート番号を前記サーバを介して前記第2端末に通知するために、前記第1NATルータを介して前記サーバにデータを送信する第1送信手段を備え、
前記第2端末は、送信元ポート番号を前記サーバを介して前記第1端末に通知するために、前記第2NATルータを介して前記サーバにデータを送信する第2送信手段を備え、
前記サーバは、
前記第1送信手段及び前記第2送信手段によって前記サーバへそれぞれ送信されたデータを受信するデータ受信手段と、
前記データ受信手段によって受信された前記第1送信手段によるデータの送信に使われた送信元ポート番号から前記第1端末に関する第1推測ポート番号を推測して、前記推測した第1推測ポート番号を前記第2NATルータを介して前記第2端末に通知するとともに、前記データ受信手段によって受信された前記第2送信手段によるデータの送信に使われた送信元ポート番号から前記第2端末に関する第2推測ポート番号を推測して、前記推測した第2推測ポート番号を前記第1NATルータを介して前記第1端末に通知するポート番号推測手段とを備え、
前記第1端末は、さらに、
前記ポート番号推測手段によって通知された前記第2推測ポート番号を受信する第1ポート番号受信手段と、
前記第1送信手段による前記サーバへのデータの送信に使われた送信元ポート番号と同じ送信元ポート番号を使い、前記第1ポート番号受信手段により受信した第2推測ポート番号に基づく第2試行ポート番号であって、前記第2送信手段による前記サーバへのデータの送信に使われた送信元ポート番号とは、送信元ポート番号がNATルータによって変更されるときの送信元ポート番号の変更分だけ異なる第2試行ポート番号を宛先ポート番号として、前記第1NATルータ及び前記第2NATルータを介して前記第2端末にデータを送信することにより前記第2端末への接続を試行し、かつ
前記第2試行ポート番号を宛先ポート番号とする前記第2端末への接続の試行後、さらに、前記第1送信手段による前記サーバへのデータの送信に使われた送信元ポート番号と同じ送信元ポート番号を使い、前記第1ポート番号受信手段により受信した第2推測ポート番号に基づく第4試行ポート番号であって、前記第2送信手段による前記サーバへのデータの送信に使われた送信元ポート番号と等しい第4試行ポート番号を宛先ポート番号として、前記第1NATルータ及び前記第2NATルータを介して前記第2端末にデータを送信することにより前記第2端末への接続を試行する第1試行手段とを備え、
前記第2端末は、さらに、
前記ポート番号推測手段によって通知された前記第1推測ポート番号を受信する第2ポート番号受信手段と、
前記第2送信手段による前記サーバへのデータの送信に使われた送信元ポート番号と同じ送信元ポート番号を使い、前記第2ポート番号受信手段により受信した第1推測ポート番号に基づく第1試行ポート番号であって、前記第1送信手段による前記サーバへのデータの送信に使われた送信元ポート番号とは、送信元ポート番号がNATルータによって変更されるときの送信元ポート番号の変更分だけ異なる第1試行ポート番号を宛先ポート番号として、前記第2NATルータ及び前記第1NATルータを介して前記第1端末にデータを送信することにより前記第1端末への接続を試行し、かつ
前記第1試行ポート番号を宛先ポート番号とする前記第1端末への接続の試行後、さらに、前記第2送信手段による前記サーバへのデータの送信に使われた送信元ポート番号と同じ送信元ポート番号を使い、前記第2ポート番号受信手段により受信した第1推測ポート番号に基づく第3試行ポート番号であって、前記第1送信手段による前記サーバへのデータの送信に使われた送信元ポート番号と等しい第3試行ポート番号を宛先ポート番号として、前記第2NATルータ及び前記第1NATルータを介して前記第1端末にデータを送信することにより前記第1端末への接続を試行する第2試行手段とを備えたことを特徴とする通信システム。
【請求項2】
請求項1に記載の通信システムにおいて、
前記第1推測ポート番号は、前記第1送信手段による前記サーバへのデータの送信に使われた送信元ポート番号とは、送信元ポート番号がNATルータによって変更されるときの送信元ポート番号の変更分だけ異なるポート番号であり、かつ
前記第2推測ポート番号は、前記第2送信手段による前記サーバへのデータの送信に使われた送信元ポート番号とは、送信元ポート番号がNATルータによって変更されるときの送信元ポート番号の変更分だけ異なるポート番号であることを特徴とする通信システム。
【請求項3】
請求項1又は2に記載の通信システムにおいて、
前記送信元ポート番号がNATルータによって変更されるときの送信元ポート番号の変更分は、「+1」であり、
前記第1推測ポート番号は、前記第1送信手段による前記サーバへのデータの送信に使われた送信元ポート番号よりも「+1」だけ大きなポート番号であり、かつ
前記第2推測ポート番号は、前記第2送信手段による前記サーバへのデータの送信に使われた送信元ポート番号よりも「+1」だけ大きなポート番号である通信システム。
【請求項4】
第1NATルータの配下にある第1端末と、第2NATルータの配下にある第2端末と、NATルータの配下にないサーバとから成り、前記第1端末及び前記第2端末が前記第1NATルータ及び前記第2NATルータを介して互いに通信する通信システムにおける通信方法において、前記第1端末及び前記第2端末が互いに通信する前に、
前記第1端末は、送信元ポート番号を前記サーバを介して前記第2端末に通知するために、前記第1NATルータを介して前記サーバにデータを送信し、
前記第2端末は、送信元ポート番号を前記サーバを介して前記第1端末に通知するために、前記第2NATルータを介して前記サーバにデータを送信し、
前記サーバは、
前記第1端末から前記サーバに送信されたデータを受信するとともに、前記第2端末から前記サーバに送信されたデータを受信し、
前記受信した前記第1端末によるデータの送信に使われた送信元ポート番号から前記第1端末に関する第1推測ポート番号を推測して、前記推測した第1推測ポート番号を前記第2NATルータを介して前記第2端末に通知するとともに、前記受信した前記第2端末によるデータの送信に使われた送信元ポート番号から前記第2端末に関する第2推測ポート番号を推測して、前記推測した第2推測ポート番号を前記第1NATルータを介して前記第1端末に通知し、
前記第1端末は、さらに、
前記サーバから通知された第2推測ポート番号を受信し、
前記送信元ポート番号を第2端末に通知するためのサーバへのデータの送信に使われた送信元ポート番号と同じ送信元ポート番号を使い、前記受信した第2推測ポート番号に基づく第2試行ポート番号であって、前記送信元ポート番号を第1端末に通知するための第2端末からサーバへのデータの送信に使われた送信元ポート番号とは、送信元ポート番号がNATルータによって変更されるときの送信元ポート番号の変更分だけ異なる第2試行ポート番号を宛先ポート番号として、前記第1NATルータ及び前記第2NATルータを介して前記第2端末にデータを送信することにより前記第2端末への接続を試行し、かつ
前記第2試行ポート番号を宛先ポート番号とする前記第2端末への接続の試行後、さらに、前記第1送信手段による前記サーバへのデータの送信に使われた送信元ポート番号と同じ送信元ポート番号を使い、前記第1ポート番号受信手段により受信した第2推測ポート番号に基づく第4試行ポート番号であって、前記第2送信手段による前記サーバへのデータの送信に使われた送信元ポート番号と等しい第4試行ポート番号を宛先ポート番号として、前記第1NATルータ及び前記第2NATルータを介して前記第2端末にデータを送信することにより前記第2端末への接続を試行し、
前記第2端末は、さらに、
前記サーバから通知された第1推測ポート番号を受信し、
前記送信元ポート番号を第1端末に通知するためのサーバへのデータの送信に使われた送信元ポート番号と同じ送信元ポート番号を使い、前記受信した第1推測ポート番号に基づく第1試行ポート番号であって、前記送信元ポート番号を第2端末に通知するための第1端末からサーバへのデータの送信に使われた送信元ポート番号とは、送信元ポート番号がNATルータによって変更されるときの送信元ポート番号の変更分だけ異なる第1試行ポート番号を宛先ポート番号として、前記第2NATルータ及び前記第1NATルータを介して前記第1端末にデータを送信することにより前記第1端末への接続を試行し、かつ
前記第1試行ポート番号を宛先ポート番号とする前記第1端末への接続の試行後、さらに、前記第2送信手段による前記サーバへのデータの送信に使われた送信元ポート番号と同じ送信元ポート番号を使い、前記第2ポート番号受信手段により受信した第1推測ポート番号に基づく第3試行ポート番号であって、前記第1送信手段による前記サーバへのデータの送信に使われた送信元ポート番号と等しい第3試行ポート番号を宛先ポート番号として、前記第2NATルータ及び前記第1NATルータを介して前記第1端末にデータを送信することにより前記第1端末への接続を試行することを特徴とする通信方法。
【請求項5】
第1NATルータの配下にある第1端末と、第2NATルータの配下にある第2端末と、NATルータの配下にないサーバとから成り、前記第1端末及び前記第2端末が前記第1NATルータ及び前記第2NATルータを介して互いに通信する通信システムであって、
前記第1端末及び前記第2端末が互いに通信する前に、
前記第1端末は、
送信元ポート番号を前記サーバを介して前記第2端末に通知するために前記サーバにデータを送信するとともに、
前記サーバから通知された前記第2端末に関する第2推測ポート番号を受信し、
前記サーバへのデータの送信に使われた送信元ポート番号と同じ送信元ポート番号を使い、前記サーバから通知された第2推測ポート番号と等しい第2試行ポート番号を宛先ポート番号として前記第1NATルータ及び前記第2NATルータを介して前記第2端末にデータを送信するとともに、その後に少なくとも、前記受信した第2推測ポート番号と、送信元ポート番号がNATルータによって変更されるときの送信元ポート番号の変更分とを用いて、前記第2端末による前記サーバへのデータの送信に使われた送信元ポート番号と等しい第4試行ポート番号を導出し、前記導出した第4試行ポート番号を宛て先ポート番号として前記第1NATルータ及び前記第2NATルータを介して前記第2端末にデータを送信することにより前記第2端末への接続を試行し、かつ
前記第2端末は、
送信元ポート番号を前記サーバを介して前記第1端末に通知するために前記サーバにデータを送信するとともに、
前記サーバから通知された前記第1端末に関する第1推測ポート番号を受信し、
前記サーバへのデータの送信に使われた送信元ポート番号と同じ送信元ポート番号を使い、前記サーバから通知された第1推測ポート番号と等しい第1試行ポート番号を宛先ポート番号として前記第2NATルータ及び前記第1NATルータを介して前記第1端末にデータを送信するとともに、その後に少なくとも、前記受信した第1推測ポート番号と、送信元ポート番号がNATルータによって変更されるときの送信元ポート番号の変更分とを用いて、前記第1端末による前記サーバへのデータの送信に使われた送信元ポート番号と等しい第3試行ポート番号を導出し、前記導出した第3試行ポート番号を宛て先ポート番号として前記第2NATルータ及び前記第1NATルータを介して前記第1端末にデータを送信することにより前記第1端末への接続を試行する通信システムにおけるサーバであって、
前記第1端末から前記サーバに送信されたデータを受信するとともに、前記第2端末から前記サーバに送信されたデータを受信するデータ受信手段と、
前記データ受信手段によって受信されたデータの送信に使われた前記第1端末及び前記第2端末の送信元ポート番号とは、それぞれ送信元ポート番号がNATルータによって変更されるときの送信元ポート番号の変更分だけ異なるポート番号を前記第1推測ポート番号及び前記第2推測ポート番号として推測して、前記第1推測ポート番号を前記第2端末に通知するとともに、前記第2推測ポート番号を前記第1端末に通知するポート番号推測手段とを備えたことを特徴とするサーバ。
【請求項6】
第1NATルータの配下にある第1端末と、第2NATルータの配下にある第2端末と、NATルータの配下にないサーバとから成り、前記第1端末及び前記第2端末が、前記第1NATルータ及び前記第2NATルータを介して互いに通信する通信システムであって、
前記第1端末及び前記第2端末が互いに通信する前に、
前記第1端末は、
送信元ポート番号を前記サーバを介して前記第2端末に通知するために前記サーバにデータを送信するとともに、
前記サーバから通知された前記第2端末に関する第2推測ポート番号を受信し、
前記サーバへのデータの送信に使われた送信元ポート番号と同じ送信元ポート番号を使い、前記サーバから通知された第2推測ポート番号と等しい第2試行ポート番号を宛先ポート番号として前記第1NATルータ及び前記第2NATルータを介して前記第2端末にデータを送信するとともに、その後に少なくとも、前記受信した第2推測ポート番号と、送信元ポート番号がNATルータによって変更されるときの送信元ポート番号の変更分とを用いて、前記第2端末による前記サーバへのデータの送信に使われた送信元ポート番号と等しい第4試行ポート番号を導出し、前記導出した第4試行ポート番号を宛て先ポート番号として前記第1NATルータ及び前記第2NATルータを介して前記第2端末にデータを送信することにより前記第2端末への接続を試行し、かつ
前記第2端末は、
送信元ポート番号を前記サーバを介して前記第1端末に通知するために前記サーバにデータを送信するとともに、
前記サーバから通知された前記第1端末に関する第1推測ポート番号を受信し、
前記サーバへのデータの送信に使われた送信元ポート番号と同じ送信元ポート番号を使い、前記サーバから通知された第1推測ポート番号と等しい第1試行ポート番号を宛先ポート番号として前記第2NATルータ及び前記第1NATルータを介して前記第2端末にデータを送信するとともに、その後に少なくとも、前記受信した第1推測ポート番号と、送信元ポート番号がNATルータによって変更されるときの送信元ポート番号の変更分とを用いて、前記第1端末による前記サーバへのデータの送信に使われた送信元ポート番号と等しい第3試行ポート番号を導出し、前記導出した第3試行ポート番号を宛て先ポート番号として前記第2NATルータ及び前記第1NATルータを介して前記第1端末にデータを送信することにより前記第1端末への接続を試行する通信システムにおけるサーバに適用されるコンピュータプログラムであって、
前記第1端末から前記サーバに送信されたデータを受信するとともに、前記第2端末から前記サーバに送信されたデータを受信するデータ受信ステップと、
前記データ受信ステップによって受信されたデータの送信に使われた前記第1端末及び前記第2端末の送信元ポート番号とは、それぞれ送信元ポート番号がNATルータによって変更されるときの送信元ポート番号の変更分だけ異なるポート番号を前記第1推測ポート番号及び前記第2推測ポート番号として推測して、前記第1推測ポート番号を前記第2端末に通知するとともに、前記第2推測ポート番号を前記第1端末に通知するポート番号推測ステップとを有することを特徴とするコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
この発明は、インターネットのような広域通信ネットワークに接続された別々のNATルータの配下にある端末装置の間で直接通信を行う通信システム及びサーバに関する。
【背景技術】
【0002】
従来より、インターネットなどの広域通信ネットワークを介した楽器の演奏(合奏)やデュエット等の合唱などの音楽的なセッションを可能としたネットワークセッションシステムは知られている。このセッションシステムは、自端末での演奏に基づく演奏情報を広域通信ネットワークを介して他端末に送信し合って各端末で両端末の演奏楽音を発音させようというものであるが、各端末が夫々のNAT(Network Address Translation)ルータの配下(ローカル側)にある場合に、複数の端末間で、サーバを介することなく、直接、演奏情報を交信するには、NATルータを超えなければならないという問題がある。
【0003】
NAT技術については、下記非特許文献1の「RFC4787」に記載されている。RFC4787は、IETF( Internet Engineering Task Force)が公表する技術仕様であり、ユニキャストUDPでのNAT越えに関連するNAT特性について解説されている。NATルータの振舞いとしては、エンドポイント非依存マッピング、アドレス依存マッピング及びアドレス&ポート番号依存マッピングという3つのパターンが、一般的によく知られている。ここで、これら3つのNATルータの振舞いのパターンについて説明しておく。図1A乃至図1Cは、NATルータの振舞いパターンを説明するための図であり、上述した3つのNATルータの内部では、このNATルータの配下にあるPC(パーソナルコンピュータ)などの送信元端末から、同じ「送信元アドレス:192.168.0.1」及び「送信元ポート番号:5000」の組を使って送信した場合、図1A乃至図1Cのように、送信元アドレスと送信元ポート番号が変換される。
【先行技術文献】
【非特許文献】
【0004】
【非特許文献1】http://www.ietf.org/rfc/rfc4787.txt
【0005】
図1Aのパターン1は、NATルータの配下から同じ送信元アドレス及び送信元ポート番号を使ってパケットを送信する場合には、どの宛先アドレス及び宛先ポート番号に送信しても、同じポート番号変換を行うタイプのNATルータの振舞いを示しており、RFC4787では「エンドポイント非依存マッピング」と定義されている。このパターン1では、図示左側の場合には、「送信元アドレス:192.168.0.1」及び「送信元ポート番号:5000」を使って、「宛先アドレス:2.2.2.2」及び「宛先ポート番号:5000」にパケット1を送信することにより、PC1からサーバにパケット1を送信した例を示している。図示中央の場合には、「送信元アドレス:192.168.0.1」及び「送信元ポート番号:5000」を使って、「宛先アドレス:2.2.2.2」及び「宛先ポート番号:5001」にパケット2を送信することにより、PC1からサーバにパケット2を送信した例を示している。図示右側の場合には、「送信元アドレス:192.168.0.1」及び「送信元ポート番号:5000」を使って、「宛先アドレス:3.3.3.3」及び「宛先ポート番号:5000」にパケット3を送信することにより、PC1からPC2にパケット3を送信した例を示している。これらの場合、PC1を配下とするNATルータは、宛先アドレス及び宛先ポート番号が異なっていても、同じ送信元アドレス及び送信元ポート番号を使っているために、同じ送信元ポート番号の変換を行い、全てのパケット1〜3の送信において、例えば「送信元アドレス:192.168.0.1」及び「送信元ポート番号:5000」は、「送信元アドレス:1.1.1.1及び送信元ポート番号:20000」にそれぞれ変換される。なお、「送信元アドレス:192.168.0.1」及び「送信元ポート番号:5000」はローカルアドレスであり、「送信元アドレス:1.1.1.1」及び「送信元ポート番号:20000」、「宛先アドレス:2.2.2.2」及び「宛先ポート番号:5000」、「宛先アドレス:2.2.2.2」及び「宛先ポート番号:5001」、並びに「宛先アドレス:3.3.3.3」及び「宛先ポート番号:5000」はグローバルアドレスである。ローカルアドレス及びグローバルアドレスに関しては、後述する場合も同様である。
【0006】
図1Bのパターン2は、NATルータの配下から同じ送信元アドレス及び送信元ポート番号を使ってパケットを送信する場合、宛先アドレスが変わると、異なるポート番号変換を行うタイプのNATルータの振舞いを示しており、RFC4787では「アドレス依存マッピング」と定義されている。この場合、送信元ポート番号は、シーケンシャルに変換される(すなわち、一つ前の変換結果に「+1」が加算される)。このパターン2では、図示左側の場合には、「送信元アドレス:192.168.0.1」及び「送信元ポート番号:5000」を使って、「宛先アドレス:2.2.2.2」及び「宛先ポート番号5000」にパケット1を送信することにより、PC1からサーバにパケット1を送信した例を示している。図示中央の場合には、「送信元アドレス:192.168.0.1」及び「送信元ポート番号:5000」を使って、「宛先アドレス:2.2.2.2」及び「宛先ポート番号:5001」にパケット2を送信することにより、PC1からサーバにパケット2を送信した例を示している。図示右側の場合には、「送信元アドレス:192.168.0.1」及び「送信元ポート番号:5000」を使って、「宛先アドレス:3.3.3.3」及び「宛先ポート番号:5000」にパケット3を送信することにより、PC1からPC2にパケット3を送信した例を示している。これらの場合、PC1を配下とするNATルータは、宛先アドレスが異なると、同じ送信元アドレス及び送信元ポート番号を使っていても、異なる送信元ポート番号の変換を行い、例えば、パケット1,2の送信においては「送信元アドレス:192.168.0.1」及び「送信元ポート番号:5000」は「送信元アドレス:1.1.1.1及び送信元ポート番号:20000」にそれぞれ変換され、パケット3の送信においては「送信元アドレス:192.168.0.1」及び「送信元ポート番号:5000」は「送信元アドレス:1.1.1.1及び送信元ポート番号:20001」に変換される。
【0007】
図1Cのパターン3は、NATの配下から同じ送信元アドレスと送信元ポート番号を使って送信する場合、宛先アドレス及び宛先ポート番号の一方のみが変わるだけで、異なるポート番号変換を行うタイプのNATルータの振舞いを示しており、RFC4787では「アドレス&ポート番号依存マッピング」と定義されている。この場合も、送信元ポート番号は、シーケンシャルに変換される(すなわち、一つ前の変換結果に「+1」が加算される)。このパターン3では、図示左側の場合には、「送信元アドレス:192.168.0.1」及び「送信元ポート番号:5000」を使って、「宛先アドレス:2.2.2.2」及び「宛先ポート番号5000」にパケット1を送信することにより、PC1からサーバにパケット1を送信した例を示している。図示中央の場合には、「送信元アドレス:192.168.0.1」及び「送信元ポート番号:5000」を使って、「宛先アドレス:2.2.2.2」及び「宛先ポート番号:5001」にパケット2を送信することにより、PC1からサーバにパケット2を送信した例を示している。図示右側の場合には、「送信元アドレス:192.168.0.1」及び「送信元ポート番号:5000」を使って、「宛先アドレス:3.3.3.3」及び「宛先ポート番号:5000」にパケット3を送信することにより、PC1からPC2にパケット3を送信した例を示している。これらの場合、PC1を配下とするNATルータは、宛先アドレス及び宛先ポート番号の一方が異なると、同じ送信元アドレス及び送信元ポート番号を使っていても、異なる送信元ポート番号の変換を行い、例えば、パケット1の送信においては「送信元アドレス:192.168.0.1」及び「送信元ポート番号:5000」は「送信元アドレス:1.1.1.1及び送信元ポート番号:20000」に変換され、パケット2の送信においては「送信元アドレス:192.168.0.1」及び「送信元ポート番号:5000」は「送信元アドレス:1.1.1.1及び送信元ポート番号:20001」に変換され、パケット3の送信においては「送信元アドレス:192.168.0.1」及び「送信元ポート番号:5000」は「送信元アドレス:1.1.1.1及び送信元ポート番号:20002」に変換される。なお、前記パターン2及びパターン3のようなシーケンシャルに変更される送信元ポート番号の変更分(前記例では「+1」)が、本発明における、送信元ポート番号がNATルータによって変更されるときの送信元ポート番号の変更分に対応する。
【0008】
ところで、このようにNATルータの配下にある2つの端末同士で直接の通信を行おうとすると、上述した夫々のNATルータによる送信元アドレス及び送信元ポート番号の変換の影響を受けて、変換後のアドレス及びポート番号を何らかの方法で知らなければ両端末の接続を行うことができない。
【0009】
例えば、NATルータ1の配下にある端末PC1及びNATルータ2の配下にある端末PC2が、お互いの外部(グローバル)の「IPアドレス:3.3.3.3;1.1.1.1」を知っており、「ポート番号:5000」での通信を行おうとして、図2のように、同じ「送信元アドレス:192.168.0.1」及び「送信元ポート番号:5000」を使うとともに、PC1からは「宛先アドレス:3.3.3.3」及び「宛先ポート番号:5000」にパケットを送信し、PC2からは「宛先アドレス:1.1.1.1」及び「宛先ポート番号:5000」にパケットを送信して通信しようとしても、NATルータ1,2で変換された「送信元ポート番号:20000,30000」は、それぞれ、NATルータ2,1の「宛先ポート番号:5000」と一致しないので、NATルータ2,1を通過することができない。
【0010】
このような場合、一般的に「UDPホールパンチング」として知られる手法を使うことで、パターン1及びパターン2での通信を行うことができるようになる。例えば、NATルータの配下にないサーバを用意し、PC1,PC2は、NATルータ1,2を通じてこのサーバへ通信を行うと、サーバは、それぞれのNATルータ1,2で変換された後のアドレス及びポート番号を知ることができるので、PC1には「PC2のアドレスと変換後のポート番号は3.3.3.3の30000番です」と、PC2には「PC1のアドレスと変換後のポート番号は、1.1.1.1の20000番です」というように、PC1,PC2に通知する。NATルータ1,2がパターン1のルータであれば、PC1,PC2は、サーバから通知された相手PC2,PC1側のアドレス及びポート番号を宛先にして送信すると、NATルータを通過することができる。なお、図2中のPC1のアドレスとPC2のアドレスは共に「192.168.0.1」であるが、これらのアドレスはローカルアドレスであるので同じであってもよいし、異なっていてもよい。この点に関しては、他の図面においても同様である。
【0011】
また、NATルータ1,2がパターン2のルータである場合には、サーバから通知されたポート番号を使っても通過できないが、NATによる変換後の送信元ポート番号は、多くの場合、「30000」→「30001」のようなシーケンシャルな変化なので、ポート番号スキャンのように前後のポート番号を連続的に試すことで通過することができる。前述の例では、PC1は、「30000」が駄目であると「30001」を試し、PC2は、「20000」が駄目であると「20001」を試すことで通過することができる。つまり、パターン2のルータでは、同じ宛先アドレスに対してであれば、次のように、宛先ボート番号を変化させても送信元ポート番号は変わらないので、前後のポート番号を試すことにより、そのうち通過する組み合わせが現れることが期待できる。
(PC1側)NAT変換後の送信元ポート番号 あて先ポート番号
20001 → 30000
20001 → 30001 ◎
20001 → 30002
… …
(PC2側)NAT変換後の送信元ポート番号 あて先ポート番号
30001 → 20000
30001 → 20001 ◎
30001 → 20002
… …
【0012】
このように、UDPホールパンチング手法を使うことによって、図1Aのようなパターン1及び図1Bのようなパターン2のタイプのNATルータでの通信を行うことができるようになる。しかしながら、図1Cのように、NATルータ1,2が共にパターン3のルータの場合、即ち、同じ送信元アドレス及び送信元ポート番号から同じ宛先アドレスに送信されていても、宛先ポート番号が変わるだけで異なるポート変換をするタイプのNATルータである場合には、それらのNATルータへの対応はできない。つまり、前記パターン2のように前後のポート番号を連続的に試しても、今度は試すたびにNATルータによるポート変換後の送信元ポート番号が変化してしまうため、次のように、いつまでたっても追いつけず、通過することができない。なお、NATルータ1,2の一方がパターン1又はパターン2であれば、パターン1又はパターン2のNATルータによる変換後の送信元ポート番号は変化しないので、前記UDPホールパンチング手法を使うことにより、通信を行うことができる。
(PC1側)NAT変換後の送信元ポート番号 あて先ポート番号
20001 → 30000
20002 → 30001
20003 → 30002
20004 → 30003
… …
(PC2側)NAT変換後の送信元ポート番号 あて先ポート番号
30001 → 20000
30002 → 20001
30003 → 20002
30004 → 20003
… …
【発明の概要】
【発明が解決しようとする課題】
【0013】
この発明は、このような事情に鑑み、別々のNATルータ配下にある2つの端末の間で、送信元アドレス、送信元ポート番号、宛先アドレス及び宛先ポート番号を使って通信を行う際に、宛先ポート番号が変わっただけで異なる送信元ポート番号の変換を行うNATルータが介在しても、両端末間で直接通信を行うことができる通信システム、サーバなどを提供することを目的とする。なお、下記本発明の各構成要件の記載においては、本発明の理解を容易にするために、実施形態の対応箇所の符号を括弧内に記載しているが、本発明の構成要件は、実施形態の符号によって示された対応箇所の構成に限定解釈されるべきものではない。
【課題を解決するための手段】
【0014】
本発明の特徴は、第1NATルータ(NRa)の配下にある第1端末(TMa)と、第2NATルータ(NRb)の配下にある第2端末(TMb)と、NATルータの配下にないサーバ(SV)とから成り、第1端末及び第2端末が第1NATルータ及び第2NATルータを介して互いに通信する通信システムにおいて、第1端末は、送信元ポート番号をサーバを介して第2端末に通知するために、第1NATルータを介してサーバにデータを送信する第1送信手段(C3)を備え、第2端末は、送信元ポート番号をサーバを介して第1端末に通知するために、第2NATルータを介してサーバにデータを送信する第2送信手段(C3)を備え、サーバは、第1送信手段及び第2送信手段によってサーバへそれぞれ送信されたデータを受信するデータ受信手段(S4)と、データ受信手段によって受信された第1送信手段によるデータの送信に使われた送信元ポート番号から第1端末に関する第1推測ポート番号を推測して、前記推測した第1推測ポート番号を第2NATルータを介して第2端末に通知するとともに、データ受信手段によって受信された第2送信手段によるデータの送信に使われた送信元ポート番号から第2端末に関する第2推測ポート番号を推測して、前記推測した第2推測ポート番号を第1NATルータを介して第1端末に通知するポート番号推測手段(S5)とを備え、第1端末は、さらに、ポート番号推測手段によって通知された第2推測ポート番号を受信する第1ポート番号受信手段(C4)と、第1送信手段によるサーバへのデータの送信に使われた送信元ポート番号と同じ送信元ポート番号を使い、第1ポート番号受信手段により受信した第2推測ポート番号に基づく第2試行ポート番号であって、第2送信手段によるサーバへのデータの送信に使われた送信元ポート番号とは、送信元ポート番号がNATルータによって変更されるときの送信元ポート番号の変更分だけ異なる第2試行ポート番号を宛先ポート番号として、第1NATルータ及び第2NATルータを介して第2端末にデータを送信することにより第2端末への接続を試行し、かつ第2試行ポート番号を宛先ポート番号とする第2端末への接続の試行後、さらに、第1送信手段によるサーバへのデータの送信に使われた送信元ポート番号と同じ送信元ポート番号を使い、第1ポート番号受信手段により受信した第2推測ポート番号に基づく第4試行ポート番号であって、第2送信手段によるサーバへのデータの送信に使われた送信元ポート番号と等しい第4試行ポート番号を宛先ポート番号として、第1NATルータ及び第2NATルータを介して第2端末にデータを送信することにより第2端末への接続を試行する第1試行手段(C5)とを備え、第2端末は、さらに、ポート番号推測手段によって通知された第1推測ポート番号を受信する第2ポート番号受信手段(C4)と、第2送信手段によるサーバへのデータの送信に使われた送信元ポート番号と同じ送信元ポート番号を使い、第2ポート番号受信手段により受信した第1推測ポート番号に基づく第1試行ポート番号であって、第1送信手段によるサーバへのデータの送信に使われた送信元ポート番号とは、送信元ポート番号がNATルータによって変更されるときの送信元ポート番号の変更分だけ異なる第1試行ポート番号を宛先ポート番号として、第2NATルータ及び第1NATルータを介して第1端末にデータを送信することにより第1端末への接続を試行し、かつ第1試行ポート番号を宛先ポート番号とする第1端末への接続の試行後、さらに、第2送信手段によるサーバへのデータの送信に使われた送信元ポート番号と同じ送信元ポート番号を使い、第2ポート番号受信手段により受信した第1推測ポート番号に基づく第3試行ポート番号であって、第1送信手段によるサーバへのデータの送信に使われた送信元ポート番号と等しい第3試行ポート番号を宛先ポート番号として、第2NATルータ及び第1NATルータを介して第1端末にデータを送信することにより第1端末への接続を試行する第2試行手段(C5)とを備えたことにある。
【0015】
この場合、例えば、第1推測ポート番号は、第1送信手段によるサーバへのデータの送信に使われた送信元ポート番号とは、送信元ポート番号がNATルータによって変更されるときの送信元ポート番号の変更分だけ異なるポート番号であり、かつ第2推測ポート番号は、第2送信手段によるサーバへのデータの送信に使われた送信元ポート番号とは、送信元ポート番号がNATルータによって変更されるときの送信元ポート番号の変更分だけ異なるポート番号である。
また、送信元ポート番号がNATルータによって変更されるときの送信元ポート番号の変更分は、「+1」であり、第1推測ポート番号は、第1送信手段によるサーバへのデータの送信に使われた送信元ポート番号よりも「+1」だけ大きなポート番号であり、かつ第2推測ポート番号は、第2送信手段によるサーバへのデータの送信に使われた送信元ポート番号よりも「+1」だけ大きなポート番号である
【0016】
前記のように構成した本発明においては、第1試行手段は、第1送信手段によるサーバへのデータの送信に使われた送信元ポート番号と同じ送信元ポート番号を使い、第2試行ポート番号、すなわち第2送信手段によるサーバへのデータの送信に使われた送信元ポート番号とは、送信元ポート番号がNATルータによって変更されるときの送信元ポート番号の変更分だけ異なる第2試行ポート番号(例えば、第2送信手段によるサーバへのデータの送信に使われた送信元ポート番号よりも「+1」だけ大きな第2試行ポート番号)を宛先ポート番号として、第1NATルータ及び第2NATルータを介して第2端末にデータを送信することにより第2端末への接続を試行する。一方、第2試行手段は、第2送信手段によるサーバへのデータの送信に使われた送信元ポート番号と同じ送信元ポート番号を使い、第1試行ポート番号、すなわち第1送信手段によるサーバへのデータの送信に使われた送信元ポート番号とは前記変更分だけ異なる第1試行ポート番号(例えば、第1送信手段によるサーバへのデータの送信に使われた送信元ポート番号よりも「+1」だけ大きな第1試行ポート番号)を宛先ポート番号として、第2NATルータ及び第1NATルータを介して第1端末にデータを送信することにより第1端末への接続を試行する。この場合、第1試行手段及び第2試行手段によるデータの送信における宛先アドレスは、第1送信手段及び第2送信手段によるサーバへのデータの送信における宛先アドレスとは異なるので、第1端末及び第2端末における送信元ポート番号は第1送信手段及び第2送信手段によるデータの送信時における送信元ポート番号とは前記変更分だけ異なる(例えば、前記データの送信時における送信元ポート番号よりも「+1」だけそれぞれ増加する)。したがって、第1NATルータ及び第2NATが前述したパターン2又はパターン3のルータであれば、第1NATルータ及び第2NATを介した第1端末及び第2端末間における相互に通信可能な接続が確立される。
【0017】
ただし、第1NATルータ又は第2NATルータが前述したパターン1であれば、第1NATルータ及び第2NATルータを介した第1端末及び第2端末間における相互に通信可能な接続は確立されない。しかし、この場合には、前記試行における第1端末及び第2端末に関する送信元ポート番号が変更されなければ、パターン1である第1NATルータ又は第2NATルータによって送信元ポート番号は変更されない。前記のように構成した本発明においては、第1試行手段は、さらに、第2試行ポート番号を宛先ポート番号とする試行に加えて、第4試行ポート番号、すなわち第2送信手段によるサーバへのデータの送信に使われた送信元ポート番号と等しいポート番号を宛先ポート番号とする試行を実行する。一方、第2試行手段は、第1試行ポート番号を宛先ポート番号とする試行に加えて、第3試行ポート番号、すなわち第1送信手段によるサーバへのデータの送信に使われた送信元ポート番号と等しいポート番号を宛先ポート番号とする試行を実行する。この場合、前述のように、試行における第1端末及び第2端末に関する送信元ポート番号が変更されなければ、パターン1である第1NATルータ又は第2NATによって送信元ポート番号は変更されない。したがって、第1NATルータ又は第2NATルータがパターン1のルータであっても、第1NATルータ及び第2NATを介した第1端末及び第2端末間における相互に通信可能な接続が確立される。その結果、本発明によれば、第1及び第2端末を支配する第1NATルータ及び第2NATルータがどのようなタイプであっても、第1NATルータ及び第2NATルータのタイプを判定する処理も必要とせず、第1及び第2端末は、簡単に、互いに直接通信ができるようになる。
【0022】
また、本発明を他の観点から見ると、本発明の特徴は、第1NATルータ(NRa)の配下にある第1端末(TMa)と、第2NATルータ(NRb)の配下にある第2端末(TMb)と、NATルータの配下にないサーバ(SV)とから成り、第1端末及び第2端末が第1NATルータ及び第2NATルータを介して互いに通信する通信システムであって、 第1端末及び第2端末が互いに通信する前に、第1端末は、送信元ポート番号をサーバを介して第2端末に通知するためにサーバにデータを送信するとともに(C3)、サーバから通知された第2端末に関する第2推測ポート番号を受信し(C4)、サーバへのデータの送信に使われた送信元ポート番号と同じ送信元ポート番号を使い、サーバから通知された第2推測ポート番号と等しい第2試行ポート番号を宛先ポート番号として第1NATルータ及び第2NATルータを介して第2端末にデータを送信するとともに、その後に少なくとも、前記受信した第2推測ポート番号と、送信元ポート番号がNATルータによって変更されるときの送信元ポート番号の変更分とを用いて、第2端末によるサーバへのデータの送信に使われた送信元ポート番号と等しい第4試行ポート番号を導出し、前記導出した第4試行ポート番号を宛て先ポート番号として第1NATルータ及び第2NATルータを介して第2端末にデータを送信することにより第2端末への接続を試行し(C5)、かつ第2端末は、送信元ポート番号をサーバを介して第1端末に通知するためにサーバにデータを送信するとともに(C3)、サーバから通知された第1端末に関する第1推測ポート番号を受信し(C4)、サーバへのデータの送信に使われた送信元ポート番号と同じ送信元ポート番号を使い、サーバから通知された第1推測ポート番号と等しい第1試行ポート番号を宛先ポート番号として第2NATルータ及び第1NATルータを介して第1端末にデータを送信するとともに、その後に少なくとも、前記受信した第1推測ポート番号と、送信元ポート番号がNATルータによって変更されるときの送信元ポート番号の変更分とを用いて、第1端末によるサーバへのデータの送信に使われた送信元ポート番号と等しい第3試行ポート番号を導出し、前記導出した第3試行ポート番号を宛て先ポート番号として第2NATルータ及び第1NATルータを介して第1端末にデータを送信することにより第1端末への接続を試行する(C5)通信システムにおけるサーバであって、第1端末からサーバに送信されたデータを受信するとともに、第2端末からサーバに送信されたデータを受信するデータ受信手段(S4)と、データ受信手段によって受信されたデータの送信に使われた第1端末及び第2端末の送信元ポート番号とは、それぞれ送信元ポート番号がNATルータによって変更されるときの送信元ポート番号の変更分だけ異なるポート番号を第1推測ポート番号及び第2推測ポート番号として推測して、第1推測ポート番号を第2端末に通知するとともに、第2推測ポート番号を前記第1端末に通知するポート番号推測手段(S5)とを備えたことにある。
【0023】
この本発明の他の特徴においても、前述したように、第1NATルータ及び第2NATルータがパターン1〜3のいずれのパターンのルータであっても、第1端末及び第2端末は第2NATルータ及び第1NATルータを介して互いに直接通信できるようになる。そして、この場合も、第1端末及び第2端末に宛先ポート番号を順次変更する前記機能(例えば、UDPホールパンチング手法による機能)が備わっていれば、第1端末及び第2端末側の処理機能を変更することなく、サーバ側の機能を変更するだけで、第1NATルータ及び第2NATルータを介した第1端末及び第2端末間における相互に通信可能な接続が確立される。その結果、本発明の他の特徴によれば、多くの端末の機能を変更する必要がなくなり、通信システムが簡単に改善される。
【0024】
さらに、本発明の実施にあたっては、通信システム及びサーバの発明に限定されることなく、通信システムに適用される通信方法の発明、サーバに適用される方法及びコンピュータプログラムの発明としても実施し得るものである。
【図面の簡単な説明】
【0025】
図1A】NATルータの振舞いパターンのうちのパターン1であるエンドポイント非依存マッピングの一例を説明するための図である。
図1B】NATルータの振舞いパターンのうちのパターン2であるアドレス依存マッピングの一例を説明するための図である。
図1C】NATルータの振舞いパターンのうちのパターン3であるアドレス&ポート番号依存マッピングの一例を説明するための図である。
図2】NATルータの配下にある2つの端末間の通信における問題点を説明するための図である。
図3】この発明の一実施形態によるネットワークセッションシステムの構成例を示す。
図4A】PC1,PC2(クライアントA,B)からサーバへの通信態様を示す。
図4B】サーバからPC1,PC2(クライアントA,B)への通信態様を示す。
図4C】前記パターン2,3のNATルータを介したPC1,PC2(クライアントA,B)間の接続可能例を示す。
図4D】前記パターン1のNATルータを介したPC1,PC2(クライアントA,B)間の接続不能例を示す。
図4E】前記パターン1のNATルータを介したPC1,PC2(クライアントA,B)間の接続可能例を示す。
図5】この発明の一実施形態によるクライアント端末の接続動作例を示すフローチャートである。
図6】この発明の一実施形態によるサーバの接続援助動作例を示すフローチャートである。
【発明を実施するための形態】
【0026】
〔システム構成の概要〕
図3は、この発明の一実施形態によるネットワークセッションシステムの構成を示す。このネットワークセッションシステムは、セッション管理サーバ(単にサーバともいう)SVと、複数のNATルータNR:NRa〜NRd(記号“NR”はNATルータを代表的に表わす)と、各NATルータNRの配下にある各セッション端末TM:TMa〜TMd(記号“TM”はセッション端末を代表的に表わす)とで構成される通信システムである。これらのセッション管理サーバSV、複数のNATルータNR:NRa〜NRd、及び複数のセッション端末TM:TMa〜TMdは、インターネットのような広域通信ネットワークCNを介して通信可能に接続されている。
【0027】
セッション管理サーバSVは、NAT配下にはなく、メンバーとなるセッション端末TM間の接続支援、例えば、セッションの開始に先立って行われる各セッション端末TM同士の接続手続きなどを行う。各セッション端末TM間、例えば、セッション端末TMa〜TMd間で接続が成立した後は、セッション管理サーバSVを介することなく、NAT配下のこれらセッション端末TMa〜TMd間において、直接、オーディオデータなどの演奏情報が送受信される。
【0028】
NATルータNRは、図示されたセッション端末TMの外に、複数のホスト機器を配下に備え、これらの機器で構成されるローカルネットワークと広域通信ネットワークCNとの間でデータを中継し、両ネットワーク間でアドレス及びポート番号を変換するNAT機能を備える。すなわち、NATルータNRは、適当に割り振られ各ローカルネットワークでのみ通用するローカルなアドレス及びポート番号と、広域通信ネットワークCN上のグローバルなアドレス及びポート番号とを自動的に相互変換する。このNAT機能のタイプは、図1A図1Cで説明したように、パターン1〜3の3つが知られている。
【0029】
ネットワーク音楽セッションのメンバーとなる複数のセッション端末TMa〜TMdは、クライアント端末又は単にクライアントとも呼ばれ、それぞれ、楽器演奏及び/又はカラオケが可能な電子音楽装置である。つまり、各セッション端末TMは、電子的な音楽情報処理機能を有する一種のコンピュータであり、電子楽器や音楽情報処理アプリケーションがインストールされたパーソナルコンピュータ(PC)のような電子音楽装置を用いることができる。また、セッション端末TMとして電子楽器を使用しカラオケを行わない場合があり、セッション端末TMとして音楽情報処理アプリケーション付きPCを使用してカラオケのみを行う場合もある。なお、セッション端末TMの数(メンバー数)は、図3には4つ例示されているが、これに限らず、4つより多くてもよいし、少なくてもよい。
【0030】
〔変換後のアドレス・ポート番号の取得までの手順〕
この発明の一実施形態による通信システムは、異なるNATルータNRa〜NRdの配下にある複数のセッション端末(以下、「クライアント端末」又は単に「クライアント」若しくは「端末」という)TMa〜TMdと、NAT配下にないセッション管理サーバ(以下、単に「サーバ」という)SVとから成り、各クライアント端末TMa〜TMdは、送信元アドレス、送信元ポート番号、宛先アドレス及び宛先ポート番号を使って、それぞれのNATルータNRa〜NRdを介して直接通信が行われる。しかしながら、図2を用いて説明したように、或るクライアント端末TMが属するNATルータNRが、宛先ポート番号が変わっただけで異なる送信元ポート番号の変換を行うパターン3(アドレス&ポート番号依存マッピング)のタイプ(図1C参照)であっても、端末TMa〜TMd間では、通信(接続)を確立させる必要がある。図4A乃至図4Eは、この発明の一実施形態による2クライアント端末間の交信に到るまでの手順及び動作例を示す。なお、以下においては、クライアント(A)TMaとクライアント端末(B)TMbとの間で接続を確立する場合を例にして説明する。また、下記説明では、クライアント(A)TMaをPC1とし、クライアント端末(B)TMbをPC2として説明する。
【0031】
PC1,PC2間の直接通信に先立って、まず、図4Aに示すように、PC1は、「送信元アドレス:192.168.0.1」及び「送信元ポート番号:5000」を使って、「宛先アドレス:2.2.2.2」及び「宛先ポート番号:5000」すなわちサーバSVにパケット(データ)を送信する。PC2も、「送信元アドレス:192.168.0.1」及び「送信元ポート番号:5000」を使って、「宛先アドレス:2.2.2.2」及び「宛先ポート番号:5000」すなわちサーバSVにパケットを送信する。サーバSVは、PC1,PC2からのパケットを受け取り、PC1を配下とするNATルータによる変換結果である「送信元アドレス:1.1.1.1」及び「送信元ポート番号:30000」を確認するともに、PC2を配下とするNATルータによる変換結果である「送信元アドレス:3.3.3.3」及び「送信元ポート番号:40000」を確認する。
【0032】
次に、サーバSVは、図4Bに示すように、確認したPC1に関する「送信元アドレス:1.1.1.1」をPC1のアドレスとして決定するとともに、確認したPC1に関する「送信元ポート番号:30000」に「+1」を加算した「ポート番号:30001」をPC1のポート番号として推測する。そして、サーバSVは,PC2に対して、「PC1のアドレスは『1.1.1.1』であり、PC1のポート番号はおそらく『30001』である」ことを通知する。また、サーバSVは、確認したPC2に関する「送信元アドレス:3.3.3.3」をPC2のアドレスとして決定するとともに、確認したPC2に関する「送信元ポート番号:40000」に「+1」を加算した「ポート番号:40001」をPC2のポート番号として推測する。そして、サーバSVは,PC1に対して、「PC2のアドレスは『3.3.3.3』であり、PC2のポート番号はおそらく『40001』である」ことを通知する。PC1,PC2は、これらの通知をそれぞれ受け取る。
【0033】
次に、図4C乃至4Eを用いてPC1,PC2間の接続動作について説明する。図4Cは、PC1,PC2をそれぞれ支配する両NATルータが「アドレス依存マッピング」として定義されるパターン2のタイプのルータ又は「アドレス&ポート番号依存マッピング」として定義されるパターン3のタイプのルータである場合におけるPC1,PC2(クライアントA,B)間の接続可能例を示している。図4Dは、両NATルータが共に「エンドポイント非依存マッピング」として定義されるパターン1のタイプのルータである場合におけるPC1,PC2間の接続不能例を示す。図4Eは、両NATルータが共に前記パターン1のタイプのルータである場合におけるPC1,PC2間の接続可能例を示す。
【0034】
本実施形態では、PC1,PC2は、それぞれ次の第1接続試行及び第2接続試行をこの順に実行する。第1接続試行では、PC1,PC2は、前述したサーバにパケットを送信したときに使われた送信元アドレス及び送信元ポート番号と同じ送信元アドレス及び送信元ポート番号をそれぞれ使い、サーバから通知されたPC2,PC1に関する宛先アドレス及び宛先ポート番号にパケットをそれぞれ送信する。第2接続試行では、PC1,PC2は、前述したサーバにパケットを送信したときに使われた送信元アドレス及び送信元ポート番号と同じ送信元アドレス及び送信元ポート番号をそれぞれ使い、サーバから通知されたPC2,PC1に関する宛先アドレス及び前記サーバから通知されたPC2,PC1に関する宛先ポート番号から「+1」を減算した宛先ポート番号にパケットをそれぞれ送信する。
【0035】
まず、第1接続試行について具体的に説明する。この場合、PC1は、図4Cに示すように、前述したサーバにパケットを送信したときと同じ「送信元アドレス:192.168.0.1」及び「送信元ポート番号:5000」を使って、サーバから通知された「宛先アドレス:3.3.3.3」及び「宛先ポート番号:40001」に対して、すなわちPC2にパケットを送信する。一方、PC2も、前述したサーバにパケットを送信したときと同じ「送信元アドレス:192.168.0.1」及び「送信元ポート番号:5000」を使って、サーバから通知された「宛先アドレス:1.1.1.1」及び「宛先ポート番号:30001」に対して、すなわちPC1にパケットを送信する。
【0036】
まず、PC1,PC2を配下とする両NATルータがパターン2又はパターン3のタイプのルータである場合について説明する。この場合、宛先アドレスは前述したサーバにパケットを送信した際の宛先アドレスとは異なるので、今回変換される送信元ポート番号は、前回変換された送信元ポート番号(サーバにパケットを送信した際に変換された「送信元ポート番号:30000,40000」)からシーケンシャルに変更される(前回の変換結果に「+1」が加算される)。すなわち、この第1接続試行では、PC1に関する送信元ポート番号は「30001」に変換され、PC2に関する送信元ポート番号は「40001」に変換される。なお、両NATルータによって変換されるPC1,PC2に関する送信元アドレスは変更されない。したがって、PC1からPC2へのパケットの送信における「宛先ポート番号:40001」は、PC2からPC1へのパケットの送信における「送信元ポート番号:40001」と一致する。また、PC2からPC1へのパケットの送信における「宛先ポート番号:30001」は、PC1からPC2へのパケットの送信における「送信元ポート番号:30001」と一致する。その結果、両NATルータを介したPC1,PC2間の相互に通信可能な接続が確立される。
【0037】
次に、PC1,PC2を配下とする両NATルータが共にパターン1のタイプのルータである場合について説明する。この場合、宛先アドレスが前述したサーバにパケットを送信した際の宛先アドレスとは異なっていても、又は宛先ポート番号が前述したサーバにパケットを送信した際の宛先ポート番号とは異なっていても、図4Dに示すように、今回変換される送信元ポート番号は、前回変換された送信元ポート番号(サーバにパケットを送信した際に変換された「送信元ポート番号:30000,40000」)と同じである。すなわち、この第1接続試行では、PC1に関する送信元ポート番号は「30000」に変換され、PC2に関する送信元ポート番号は「40000」に変換される。なお、この場合も、両NATルータによって変換されるPC1,PC2に関する送信元アドレスは変更されない。したがって、PC1からPC2へのパケットの送信における「宛先ポート番号:40001」は、PC2からPC1へのパケットの送信における「送信元ポート番号:40000」とは一致しない。また、PC2からPC1へのパケットの送信における「宛先ポート番号:30001」は、PC1からPC2へのパケットの送信における「送信元ポート番号:30000」とは一致しない。その結果、両NATルータを介したPC1,PC2間の相互に通信可能な接続は確立されない。
【0038】
また、PC1を配下とするNATルータがパターン1のタイプのルータであり、PC2を配下とするNATルータがパターン2又はパターン3のタイプのルータである場合について説明する。この場合、PC2に関する送信元ポート番号は「40001」に変換されるので、前述の場合と同様に、PC1からPC2へのパケットの送信における「宛先ポート番号:40001」は、PC2からPC1へのパケットの送信における「送信元ポート番号:40001」と一致する。しかし、PC1に関する送信元ポート番号は「30000」に変換されるので、前述の場合と同様に、PC2からPC1へのパケットの送信における「宛先ポート番号:30001」は、PC1からPC2へのパケットの送信における「送信元ポート番号:30000」とは一致しない。その結果、両NATルータを介したPC1,PC2間の相互に通信可能な接続は確立されない。
【0039】
さらに、PC1を配下とするNATルータがパターン2又はパターン3のタイプのルータであり、PC2を配下とするNATルータがパターン1のタイプのルータである場合について説明する。この場合、PC1に関する送信元ポート番号は「30001」に変換されるので、前述の場合と同様に、PC2からPC1へのパケットの送信における「宛先ポート番号:30001」は、PC1からPC2へのパケットの送信における「送信元ポート番号:30001」と一致する。しかし、PC2に関する送信元ポート番号は「40000」に変換されるので、前述の場合と同様に、PC1からPC2へのパケットの送信における「宛先ポート番号:40001」は、PC2からPC1へのパケットの送信における「送信元ポート番号:40000」とは一致しない。その結果、両NATルータを介したPC1,PC2間の相互に通信可能な接続は確立されない。
【0040】
次に、前記PC1,PC2間の相互に通信可能な接続が確立されない状態を解決する第2接続試行について具体的に説明する。この場合、PC1は、図4Eに示すように、前述したサーバにパケットを送信したときと同じ「送信元アドレス:192.168.0.1」及び「送信元ポート番号:5000」を使って、サーバから通知された「宛先アドレス:3.3.3.3」及びサーバから通知された「宛先ポート番号:40001」から「+1」を減算した「宛先ポート番号:40000」に対して、すなわちPC2にパケットを送信する。一方、PC2も、前述したサーバにパケットを送信したときと同じ「送信元アドレス:192.168.0.1」及び「送信元ポート番号:5000」を使って、サーバから通知された「宛先アドレス:1.1.1.1」及びサーバから通知された「宛先ポート番号:30001」から「+1」を減算した「宛先ポート番号:30000」、すなわちPC1にパケットを送信する。
【0041】
まず、PC1,PC2を配下とする両NATルータが共にパターン1のタイプのルータである場合について説明する。この場合、図4Eに示すように、PC1,PC2間の両送信における宛先ポート番号が前記第1接続試行でパケットを送信した際の宛先ポート番号とは共に異なるが、PC1,PC2の両者に関し、今回変換される送信元ポート番号は、前記第1接続試行で変換された送信元ポート番号とそれぞれ同じである。すなわち、この第2接続試行でも、PC1に関する送信元ポート番号は「30000」に変換され、PC2に関する送信元ポート番号は「40000」に変換される。なお、この場合も、両NATルータによって変換されるPC1,PC2に関する送信元アドレスは変更されない。したがって、PC1からPC2へのパケットの送信における「宛先ポート番号:40000」は、PC2からPC1へのパケットの送信における「送信元ポート番号:40000」と一致する。また、PC2からPC1へのパケットの送信における「宛先ポート番号:30000」は、PC1からPC2へのパケットの送信における「送信元ポート番号:30000」と一致する。その結果、両NATルータを介したPC1,PC2間の相互に通信可能な接続が確立されることになる。
【0042】
また、PC1を配下とするNATルータがパターン1のタイプのルータであり、PC2を配下とするNATルータがパターン2又はパターン3のタイプのルータである場合について説明する。この場合も、PC1,PC2間の両送信における宛先ポート番号が前記第1接続試行でパケットを送信した際の宛先ポート番号とは共に異なるが、PC1に関しては、今回変換される送信元ポート番号は、前記第1接続試行で変換された送信元ポート番号と同じである。すなわち、この第2接続試行でも、PC1に関する送信元ポート番号は「30000」に変換される。なお、この場合も、両NATルータによって変換されるPC1,PC2に関する送信元アドレスは変更されない。したがって、PC2からPC1へのパケットの送信における「宛先ポート番号:30000」は、PC1からPC2へのパケットの送信における「送信元ポート番号:30000」と一致する。すなわち、前記第1接続試行では不一致の関係にあったPC2による宛先ポート番号とPC1の送信元ポート番号が一致する。その結果、この第2接続試行により、前記第1接続試行では確立されていなかった両NATルータを介したPC1,PC2間の相互に通信可能な接続が確立されることになる。
【0043】
さらに、PC1を配下とするNATルータがパターン2又はパターン3のタイプのルータであり、PC2を配下とするNATルータがパターン1のタイプのルータである場合について説明する。この場合も、PC1,PC2間の両送信における宛先ポート番号が前記第1接続試行でパケットを送信した際の宛先ポート番号とは異なるが、PC2に関しては、今回変換される送信元ポート番号は、前記第1接続試行で変換された送信元ポート番号と同じである。すなわち、この第2接続試行でも、PC2に関する送信元ポート番号は「40000」に変換される。なお、この場合も、両NATルータによって変換されるPC1,PC2に関する送信元アドレスは変更されない。したがって、PC1からPC2へのパケットの送信における「宛先ポート番号:40000」は、PC2からPC1へのパケットの送信における「送信元ポート番号:40000」と一致する。すなわち、前記第1接続試行では不一致の関係にあったPC1による宛先ポート番号とPC2の送信元ポート番号が一致する。その結果、この第2接続試行により、前記第1接続試行では確立されていなかった両NATルータを介したPC1,PC2間の相互に通信可能な接続が確立されることになる。
【0044】
このように、PC1を配下とするNATルータ又はPC2を配下とするNATルータがパターン1のタイプのルータであって、前記第1接続試行では、両NATルータを介したPC1,PC2間の相互に通信可能な接続が確立されていなくても、第2接続試行により、両NATルータを介したPC1,PC2間の相互に通信可能な接続が確立される。
【0045】
〔動作例〕
次に、具体的な動作例について説明する。図5はこの発明の一実施形態によるクライアント端末TMの接続動作例を示し、図6はこの発明の一実施形態によるサーバSVの接続援助動作例を示す。言い換えれば、図5は、クライアント端末TMのCPUによって実行される、接続動作例に係るコンピュータプログラムのフローチャートを示している。図6は、サーバSVのCPUによって実行される、接続援助動作例に係るコンピュータプログラムのフローチャートを示している。
【0046】
まず、ユーザ操作による接続開始の指示があると、クライアント端末TM(制御部であるCPU)は、図5に示すプログラムの実行を開始し、ステップC1にてサーバSVに対して接続を行うことを通知する。次に、クライアント端末TMは、ステップC2にてサーバSVから接続開始の指示が届いたか否か、すなわち、他の参加者が現れたかどうかを判定する。サーバSVから接続開始の指示が届いていない場合には、クライアント端末TMは、ステップC2にて「No」と判定し、ステップC2の処理を繰り返し実行して接続開始の指示の到着を待つ。なお、前記説明では、一つのクライアント端末TMのサーバSVに対する接続の通知について説明したが、この状態では、相互に通信する他のクライアント端末TMも、前記ステップC1,C2の処理を行っている。以降のクライアント端末TMの動作においても、相互に通信する複数のクライアント端末TMが図5に示すプログラム処理をそれぞれ実行する。
【0047】
一方、サーバSVは、図6に示すプログラムの実行を開始し、ステップS1にて、前記ステップC1の処理によるクライアント端末TMから接続の通知が届いたか否かを判定する。接続の通知が届いていない状態では、サーバSVは、ステップS1にて「No」と判定して、クライアント端末TMからの接続の通知を待つ。そして、一つのクライアント端末TMから接続の通知が届くと、サーバSVは、ステップS1にて「Yes」と判定して、ステップS2に進む。サーバSVは、ステップS2にて、接続待ちのクライアント端末TMが2つ以上存在するか否か(他の参加者が現れたどうか)を判定する。接続待ちのクライアント端末TMが2つ以上存在しなければ、サーバSVは、ステップS2にて「No」と判定して、前記ステップS1に戻って、他のクライアント端末TMからの接続の通知を再び待つ。そして、このようなステップS1,S2の処理を繰返す。なお、この場合、2つのクライアント端末TMからの接続の通知が届いた時点で、ステップS2にて「Yes」と判定される。しかし、3つ以上のクライアント端末TMが存在することもあるので、サーバSVは、一つのクライアント端末TMからの接続の通知からステップS2にて「Yes」と判定するまでに多少の時間を待つようにするとよい。そして、この待ち時間の間、サーバSVは、ステップS2にて「No」と判定し続けて、ステップS1,S2の処理を繰り返す。
【0048】
そして、接続待ちのクライアント端末TMが2つ以上存在して、前記ステップS2にて「Yes」と判定されると、サーバSVは、ステップS3にて、接続待ちの全てのクライアント端末TMに対して接続開始の指示を送信する。前記ステップS3の処理後、サーバSVは、ステップS4にて、接続開始を指示した全てのクライアント端末TMからポート番号P1へのパケットを受信したか否かを判定する。全てのクライアント端末TMからポート番号P1へのパケットを受信しない状態では、サーバSVは、ステップS4にて「No」と判定して、前記パケットの受信を待つ。
【0049】
一方、接続開始の指示待ちの各クライアント端末TMは、前記ステップC2の待機中、サーバSVからの接続開始の指示が送信されると、ステップC2にて接続開始の指示を受信して「Yes」と判定し、ステップC3に進む。ステップC3においては、各クライアント端末TMは、所定の送信元アドレス及び送信元ポート番号を使って、サーバSVに対してポート番号P1宛てにパケットを送信する。前記ステップC3の処理後、各クライアント端末TMは、ステップC4にてサーバSVから接続先の推測ポート番号と接続先アドレスの通知が届いたかを判定する。そして、接続先の推測ポート番号と接続先アドレスの通知が届くまで、各クライアント端末TMは、ステップC4にて「No」と判定し続けて、接続先の推測ポート番号と接続先アドレスの通知を待つ。
【0050】
前記パケートの受信を待っているサーバSVは、ステップS4にて、クライアント端末TMからのパケットの送信があるごとに、送信されたパケットを受信する。そして、サーバSVは、接続が通知された全てのクライアント端末TMからポート番号P1へのパケットを受信すると、ステップS4にて「Yes」と判定して、ステップS5に進む。ステップS5においては、サーバSVは、全てのクライアント端末TMに相手の推測ポート番号と接続先アドレスの通知を送信する。具体的には、サーバSVは、各クライアント端末TMから受信したパケットの送信元ポート番号に「+1」を加算することにより推測ポート番号を求めるとともに、前記受信したパケットの送信元アドレスを接続先アドレスとする。そして、通信相手となる各クライアント端末に関する推測ポート番号及び接続先アドレスを全てのクライアント端末TMに送信する。
【0051】
次に、サーバSVは、ステップS6にて、クライアント端末TMから、「接続完了」、「接続のリトライ通知」及び「接続失敗」の何れかのパケットが届いたか否かを判定する。前記パケットが届いていなければ、サーバSVはステップS6にて「No」と判定して、前記パケットが届くのを待つ。なお、このステップS6の判定における「接続完了」に関しては、ステップS5の処理により接続開始の指示を送信した全てのクライアント端末TMから通知があったかを判定するのに対して、「接続のリトライ通知」及び「接続失敗」に関しては前記全てのクライアント端末TMのうちのいずれか一つのクライアント端末TMからの通知があったかを判定する。
【0052】
一方、接続先の推測ポート番号と接続先アドレスの通知を待っている各クライアント端末TMは、サーバSVからの推測ポート番号と接続先アドレスが届くと、ステップC4にて、推測ポート番号と接続先アドレスを受信して「Yes」と判定して、ステップC5に進む。ステップC5においては、サーバSVから通知された相手クライアント端末TMの推測ポート番号及び接続先アドレスを第1の宛先ポート番号及び宛先アドレスとしてセットするとともに、前記推測ポート番号から「+1」を減算したポート番号及び前記接続先アドレスを第2の宛先ポート番号及び宛先アドレスとしてセットする。そして、クライアント端末TMは、前記ステップC3の場合と同じ所定の送信元ポート番号及び送信元アドレスを使い、前記セットした第1の宛先ポート番号及び宛先アドレスと、前記セットした第2の宛先ポート番号及び宛先アドレスに対して、この順に試行パケット(試行データ)を送信することにより、相手クライアント端末TMとの接続を試行する。なお、第1の宛先ポート番号及び宛先アドレスへの試行パケットの送信が前述した第1接続試行に対応し、第2の宛先ポート番号及び宛先アドレスへの試行パケットの送信が前述した第2接続試行に対応する。
【0053】
なお、クライアント端末TMは、前記のように第1の宛先ポート番号及び宛先アドレスに対する試行パケットの送信と、第2の宛先ポート番号及び宛先アドレスに対する試行パケットの送信に加えて、第1の宛先ポート番号の前後の複数のポート番号及び前記通知された接続先アドレスをそれぞれ使って3回以上の接続を試行してもよい。前後のポート番号とは、例えば、第1の宛先ポート番号(サーバSVから通知された推測ポート番号)に「+1」、「+2」、「+3」・・・をそれぞれ加算した数個のポート番号及び第1の宛先ポート番号から「+2」、「+3」・・・をそれぞれ減算した数個のポート番号である。なお、この場合も、クライアント端末TMは、前記ステップC3の場合と同じ所定の送信元ポート番号及び送信元アドレスを使い、試行パケットの送信を行う。これは、次の理由による。相手クライアント端末TMを支配するNATルータが上述したパターン1〜3のうちのいずれかのパターンであっても、相手クライアント端末TMを支配するNATルータのあるポートがたまたま使用中である場合には、NATルータNRは、送信元ポート番号を、使用中でなくてサーバSVから通知された推測ポート番号及びそれより「+1」だけ小さなポート番号の前後のポートに変更することがある。したがって、この場合には、前記第1及び第2の宛先ポート番号の試行では、試行パケットは相手クライアント端末TMに届かないこともあるからである。
【0054】
前記ステップC5の処理後、各クライアント端末TMは、ステップC6にて、接続しようとする相手クライアント端末TMからの試行パケットが届いたか否かを判定する。相手クライアント端末TMからの試行パケットが届かない状態では、各クライアント端末TMは、ステップC6にて「No」とそれぞれ判定して、ステップC7に進む。ステップC7においては、前記クライアント端末TMは、相手クライアント端末TMからのパケットを待つ所定の最大時間が経過したか否かを判定する。そして、最大時間が経過していない間は、前記クライアント端末TMは、ステップC7にて「No」と判定して、ステップC6に戻り、相手クライアント端末TMからの試行パケットが届くまで或いは最大時間が経過するまで、ステップC6,C7の処理を繰返し実行する。
【0055】
前記ステップC6,C7の循環処理中、試行パケットが届くと、各クライアント端末TMは、ステップC6にて「Yes」と判定して、ステップC8に進む。ステップC8においては、各クライアント端末TMは、サーバSVに接続完了したことを通知する。これにより、相手クライアント端末TMから試行パケットを受け取ったクライアント端末TMは、相手クライアント端末TMとの直接的な接続が確立し、この接続動作を終了する。なお、受け取った試行パケットは相手クライアント端末TMに関する送信元アドレス及び送信元ポート番号を含むので、試行パケットを受け取ったクライアント端末TMは相手クライアント端末TMのアドレスとポート番号を認識できる。以後、クライアント端末TMは、相手クライアント端末TMとの音楽セッション動作(合奏)に移行する。
【0056】
一方、相手クライアント端末TMからの試行パケットが届かない状態で、最大時間が経過すると、各クライアント端末TMは、ステップC7にて「Yes」と判定して、ステップC9に進む。ステップC9においては、各クライアント端末TMは、ステップC5の処理によるパケット送信の試行を所定の最大試行回数行ったか否かを判定する。最大試行回数行っていないときには、クライアント端末TMは、ステップC9にて「No」と判定して、ステップC10に進む。ステップC10においては、各クライアント端末TMは、サーバSVに接続のリトライを通知して、ステップC2に戻り、前述したステップC2〜C7,C9,C10からなる接続の再試行を繰返し実行する。そして、パケット送信の試行を最大試行回数行ったときには、各クライアント端末TMは、ステップC9にて「Yes」と判定して、ステップC11にてサーバSVに接続失敗したことを通知して接続を断念し、この接続動作を終了する。この場合、各クライアント端末TMは相手クライアント端末TMと接続ができなかったことになる。
【0057】
一方、前記ステップS6の繰り返し処理中のサーバSVは、クライアント端末TMから、「接続完了」、「接続のリトライ通知」及び「接続失敗」の何れかのパケットが届くと、ステップS6にて「Yes」と判定して、ステップS7に進む。ステップS7においては、サーバSVは、クライアント端末TMから届いた「接続完了」、「接続のリトライ通知」又は「接続失敗」に応じて分岐処理を実行する。
【0058】
この場合、「接続完了」のパケットを受信したときは、サーバSVは、ステップS8に進み、接続完了とし、パケットを受信したクライアント端末TMを接続待ちのクライアント端末TMから削除する。また、「接続のリトライ通知」のパケットを受信したときは、サーバSVは、ステップS3に戻って、前述したステップS3〜S7の処理を繰り返す。さらに、「接続失敗」のパケットを受信したときは、サーバSVは、ステップS9に進み、接続失敗とし、パケットを受信したクライアント端末TMを接続待ちのクライアント端末TMから削除する。そして、ステップS8,S9の処理後は、元の待機状態に戻る。
【0059】
以上説明したように、上記実施形態においては、サーバSVは、ステップS4にて各クライアント端末TMから送信された試行パケットを受信し、ステップS5にて前記試行パケットの送信に使われた送信元ポート番号よりも「+1」だけ大きなポート番号を推測ポート番号として相手方のクライアント端末TMにそれぞれ通知するようにした。そして、各クライアント端末TMは、ステップC5の第1接続試行で、サーバSVへの試行パケットの送信に使われた送信元ポート番号と同じ送信元ポート番号を使い、サーバSVから通知された推測ポート番号を宛先ポート番号として、相手のクライアント端末TMに対する接続を試行するようにした。この第1接続試行においては、各クライアント端末TMを支配するNATルータNRが前述したパターン2又はパターン3のルータであれば、サーバSVのアドレスは相手方のクライアント端末TMのアドレスとは異なるので、各クライアント端末TMに関する送信元ポート番号はステップC3におけるサーバSVへの試行パケットの送信に使われた送信元ポート番号よりも「+1」だけそれぞれ増加する。したがって、各クライアント端末TMを支配するNATルータNRが前述したパターン2又はパターン3のルータであれば、各クライアント端末TMは互いに通信可能に接続されるようになる。
【0060】
ただし、相手方のクライアント端末TMを支配するNATルータNRが前述したパターン1のタイプのルータである場合には、相手方の送信元ポート番号はステップC3におけるサーバSVへの試行パケットの送信に使われた送信元ポート番号と同じポート番号に保たれるので、パターン1のタイプのNATルータNRの支配下にある相手方のクライアント端末TMへの接続は確立されない。しかし、各クライアント端末TMは、ステップC5の第2接続試行で、サーバSVへの試行パケットの送信に使われた送信元ポート番号と同じ送信元ポート番号を使い、サーバSVから通知された推測ポート番号よりも「+1」だけ小さなポート番号を宛先ポート番号として、相手のクライアント端末TMに対する接続を試行するようにした。この場合、パターン1であるNATルータNRによって送信元ポート番号は変更されないので、各クライアント端末TMは、パターン1のNATルータNRの支配下にある相手方のクライアント端末TMへの接続を確立させることができる。その結果、上記実施形態によれば、クライアント端末TMを支配するNATルータNRがパターン1〜3のどのようなタイプであっても、NATルータNRのタイプを判定する処理も必要とせず、直接通信ができるようになる。
【0061】
また、上記実施形態のように、各クライアント端末TMがサーバSVから通知された推測ポート番号及びそれより「+1」だけ小さなポート番号を宛先ポート番号として順次変更する機能(例えば、UDPホールパンチング手法による機能)が備わっていれば、各クライアント端末TM側の処理機能を変更することなく、サーバSV側の機能を変更するだけで、クライアント端末TMを支配するNATルータNRがパターン1〜3のどのようなタイプであっても、直接通信ができるようになる。これによれば、多くのクライアント端末TMの機能を変更する必要がなくなり、通信システムが簡単に改善される。
【0062】
〔変形例〕
上記実施形態においては、図4B及び図6のステップS5において、サーバSVは、クライアント端末TMから送信されるとともにNATルータNRで変換されたクライアント端末TMの送信元ポート番号に「+1」を加算して推測ポート番号を導出し、前記導出した推測ポート番号を相手方のクライアント端末TMに通知するようにした。しかし、サーバSVは、クライアント端末TMから送信されるとともにNATルータNRで変換されたクライアント端末TMの送信元ポート番号そのものを推測ポート番号として相手方のクライアント端末TMに送信するようにしてもよい。この場合、各クライアント端末TMは、サーバSVから送信された推測ポート番号(送信元ポート番号そのもの)に「+1」を加算したポート番号を第1の宛先ポート番号として第1接続試行を行い、その後に、サーバSVから送信された推測ポート番号(送信元ポート番号そのものであって、第1の宛先ポート番号よりも「+1」だけ小さなポート番号)を第2の宛先ポート番号として第2接続試行を行うようにすればよい。
【0063】
また、サーバSVは、前記送信元ポート番号に「+1」を加算した推測ポート番号及び前記送信元ポート番号そのものでもなく、予め決められたルールを用いて変換された推測ポート番号をクライアント端末TMに通知するようにしてもよい。そして、クライアント端末TMは、前記ルールに従って通知された推測ポート番号を変換したポート番号を第1の宛先ポート番号として第1接続試行を行うとともに、第1の宛先ポート番号よりも「+1」だけ小さなポート番号を第2の宛先ポート番号として第2接続試行を行うようにしてもよい。要は、サーバSVは、各クライアント端末TMにより送信されたパケットを受信し、前記パケットの送信に使われた送信元ポート番号から前記送信元ポート番号を直接的又は間接的に表す推測ポート番号を推測して、通信相手となるクライアント端末TMに関する推測ポート番号を各クライアント端末TMに通知すればよい。一方、各クライアント端末は、前記サーバSVから通知された推測ポート番号を用いて、通信相手のクライアント端末TMによるサーバSVへのパケットへのデータの送信に使われた送信元ポート番号より「+1」だけ大きなポート番号を導出して、前記導出したポート番号を第1の宛先ポート番号として第1接続試行を行い、第1の宛先ポート番号よりも「+1」だけ小さなポート番号を第2の宛先ポート番号として第2接続試行を行うようにすればよい。なお、各クライアント端末TMによる通信相手のクライアントTMへの前記第1接続試行及び第2接続試行においては、サーバSVへのパケットの送信に使われた送信元ポート番号と同じ送信元ポート番号を使う。
【0064】
また、上記実施形態においては、サーバSVは、クライアント端末TMからサーバSVへパケットを送る際にNATルータNRで変換されて使われた送信元ポート番号に「+1」を加算したポート番号を推測ポート番号として決定して相手クライアント端末TMに通知するようにした。しかし、これに代えて、サーバSVは、NATルータNRの振舞い(送信元番号の変換態様)に応じて、「+1」以外の値である推測ポート番号の増減値(例えば、「+2」、「+3」・・・又は「−2」、「−3」・・・など)を決定するようにしてもよい。そして、クライアント端末TMから送られた送信元ポート番号に前記決定した増減値を加算したポート番号、又は前記送信元ポート番号から前記決定した増減値を減算したポート番号を推測ポート番号として決定して、相手クライアント端末TMに通知するようにしてもよい。これは、あるNATルータがシーケンシャルに送信元ポート番号を変換しないことも考えられるからである。
【0065】
このようなサーバSVによる送信元ポート番号の変換がシーケンシャルに行われる場合と、前記変換がシーケンシャルに行われない場合の両者を考慮すると、図6のステップS5にて、ステップS4で受信したデータの送信に使われた相手方のクライアント端末の送信元ポート番号とは、それぞれ送信元ポート番号がNATルータによって変更されるときの送信元ポート番号の変更分(前記増減値に対応)だけ異なるポート番号を推測ポート番号として推測して、各クライアント端末TMに通知するようにすればよい。そして、この場合には、各クライアント端末TMは、第1接続試行において、サーバSVから通知された相手方の推測ポート番号を宛先ポート番号として相手方のクライアント端末TMにパケットを送信する。次の第2接続試行においては、各クライアント端末は、前記サーバSVから通知された相手方の推測ポート番号(第1接続試行における宛先ポート番号と同じ)と、前記送信元ポート番号の変更分とを用いて、ステップS4で受信したデータの送信に使われた相手方のクライアント端末の送信元ポート番号と等しいポート番号を導出し、前記導出したポート番号を宛て先ポート番号として相手方のクライアント端末TMにパケットを送信する。
【0066】
また、前記変形例で説明したように、サーバSVが、クライアント端末TMから送信されるとともにNATルータNRで変換されたクライアント端末TMの送信元ポート番号そのものを推測ポート番号として相手方のクライアント端末TMに送信することもできる。この変形例においても、前述した送信元ポート番号の変換がシーケンシャルに行われる場合と、前記変換がシーケンシャルに行われない場合とを考慮すると、各クライアント端末TMは、第1接続試行及び第2接続試行を次のようにして行う。第1接続試行では、サーバSVから通知された推測ポート番号(すなわち、サーバへのパケットの送信時の相手方のクライアント端末に関する送信元ポート番号)と、送信元ポート番号がNATルータによって変更されるときの送信元ポート番号の変更分(前記増減値に対応)とを用いて、NATルータによって変更された際における相手方のクライアント端末TMの送信元ポート番号を宛先ポート番号として導出し、前記導出した宛先ポート番号を用いて相手方のクライアント端末TMにパケットを送信する。また、第2接続試行では、サーバSVから通知された推測ポート番号(すなわち、サーバへのパケットの送信時の相手方のクライアント端末に関する送信元ポート番号)を宛先ポート番号として、相手方のクライアント端末TMにパケットを送信する。
【0067】
さらに、上記実施形態においては、図4B及び図6のステップS5にて、サーバSVは、接続先アドレス及び接続先の推測ポート番号を、全てのクライアント端末TMに同時に通知するようにした。しかし、サーバSVは、接続先アドレスに関しては、両クライアント端末TMに推測ポート番号とは別に通知するようにしてもよい。また、全てのクライアント端末TMが互いに接続先アドレスを事前に認識している場合には、図4B及び図6のステップS5にて、サーバSVは、接続先の推測ポート番号のみを全てのクライアント端末TMに通知するようにしてもよい。
【符号の説明】
【0068】
NR:NRa〜NRd…NATルータ、TM:TMa〜TMd…セッション端末(クライアント端末)、SV…セッション管理サーバ、CN…広域通信ネットワーク
図1A
図1B
図1C
図2
図3
図4A
図4B
図4C
図4D
図4E
図5
図6