(実施の形態1)
本発明の実施の形態1による通信システムについて、図面を参照しながら説明する。
図1は、本実施の形態による通信システムの構成を示すブロック図である。図1において、本実施の形態による通信システムは、第1の情報処理装置1と、第2の情報処理装置2と、第1の通信制御装置3と、第2の通信制御装置4と、サーバ6とを備える。第1の通信制御装置3、第2の通信制御装置4、およびサーバ6は、有線または無線の通信回線5を介して接続されている。この通信回線5は、例えば、インターネットである。
なお、図1では、第1の通信制御装置3、および第2の通信制御装置4にそれぞれ、第1の情報処理装置1、および第2の情報処理装置2のみが接続されている場合について示しているが、これ以外の装置が、第1の通信制御装置3、および第2の通信制御装置4に接続されていてもよい。
また、本実施の形態では、第1の情報処理装置1が送信側の情報処理装置として動作し、第2の情報処理装置2が受信側の情報処理装置として動作する場合について説明する。ここで、送信側の情報処理装置とは、第1の情報処理装置1と第2の情報処理装置2との間の通信を確立する際における、通信(コネクション)の要求を出す側(言い換えれば、バブルパケットを送信する側)のことである。一方、受信側の情報処理装置とは、その反対側の情報処理装置、すなわち通信の要求を受け取る側(言い換えれば、バブルパケットに対する返信パケット送信する側)の情報処理装置のことである。なお、バブルパケットや返信パケットについては後述する。
図2は、第1の情報処理装置1の構成を示すブロック図である。図2において、第1の情報処理装置1は、通信部11と、基準ポート受付部12と、バブルパケット送信部13と、検出用パケット送信部14と、ポート幅検出用パケット送信部15と、再送信指示受付部16と、返信パケット受付部17と、再返信パケット送信部18と、ポート幅受付部19とを備える。
通信部11は、バブルパケット送信部13等の第1の情報処理装置1の内部の各構成要素と、第1の通信制御装置3との間における通信を行う。
基準ポート受付部12は、基準ポートの位置を示す基準ポート情報を受け付ける。ここで、基準ポートとは、第2の通信制御装置4における所定のポートであり、バブルパケットの送信の対象となるポート(バブルパケット送信対象ポート)の基準となるポートである。この基準ポート情報の受け付けとは、例えば、基準ポート情報を受信することである。なお、バブルパケットについては後述する。
バブルパケット送信部13は、通信部11および第1の通信制御装置3を介して、バブルパケットを第2の通信制御装置4に送信する。このバブルパケットは、基準ポート受付部12が受け付けた基準ポート情報に基づいて送信される。具体的には、第2の通信制御装置4において、基準ポートから所定のポート割り当て後に割り当てられるポートであるバブルパケット送信対象ポートに対してバブルパケットが送信される。このバブルパケット送信対象ポートは、例えば、基準ポートとのポート間隔が、第2の通信制御装置4におけるポート幅のM倍(Mは1以上の整数)であるポートである。ここで、例えば、ポート番号の増加するようにポート割り当てがなされる場合には、バブルパケット送信対象ポートは基準ポートよりもポート番号の大きい方となる。その第2の通信制御装置4におけるポート幅は、後述するポート幅受付部19で受け付けられたポート幅情報によって示される。また、バブルパケットとは、第1の情報処理装置1と第2の情報処理装置2との間における通信を確立するために、第1の通信制御装置3に送信履歴を残すためのパケットである。ここで、通信を確立するとは、第1の情報処理装置1と、第2の情報処理装置2との間において、サーバ6を介さないPeer to Peerの通信を開始することをいう。また、送信履歴を残すとは、第1の通信制御装置3において、後述する返信パケットを受け付けるためのポートを割り当てる(ポートを開く)ことをいう。このバブルパケットには、何らかの情報が含まれていてもよく、何も情報が含まれていなくてもよい。このバブルパケットは、例えば、UDP(User Datagram Protocol)のようなコネクションレス型のプロトコルによって送信される。
検出用パケット送信部14は、ポート検出用パケットをサーバ6に送信する。このポート検出用パケットは、バブルパケット送信ポートの位置を検出するために用いられるものである。ここで、バブルパケット送信ポートとは、バブルパケットの送信で用いられる、第1の通信制御装置3のポートのことである。このポート検出用パケットは、バブルパケットが送信される前に、および/またはバブルパケットが送信された後に、送信される。なお、本実施の形態では、バブルパケットの送信の前後においてポート検出用パケットが送信される場合について説明する。このポート検出用パケットは、例えば、UDPや、TCP(Transmission Control Protocol)によって送信される。このポート幅検出用パケットには、何らかの情報が含まれていてもよく、何も情報が含まれていなくてもよい。
ポート幅検出用パケット送信部15は、第1の通信制御装置3におけるポート幅を検出するために用いられるポート幅検出用パケットを、第1の通信制御装置3を介してサーバ6に送信する。ここで、ポート幅とは、連続して使用される(割り当てられる)ポートの幅(間隔)のことである。例えば、ポート幅が「1」の場合には、ポート番号「20000」のポートの次に使用されるポートは、ポート番号「20001」のポートである。一方、ポート幅が「2」の場合には、ポート番号「20000」のポートの次に使用されるポートは、ポート番号「20002」のポートとなる。このポート幅検出用パケットには、何らかの情報が含まれていてもよく、何も情報が含まれていなくてもよい。
再送信指示受付部16は、再送信指示を受け付ける。ここで、再送信指示とは、バブルパケット、およびポート検出用パケットを再送信する旨の指示である。この再送信指示は、例えば、受信によって受け付けられる。再送信指示受付部16が再送信指示を受け付けた場合には、検出用パケット送信部14、およびバブルパケット送信部13は、それぞれ、ポート検出用パケットと、バブルパケットとを再度送信する。
返信パケット受付部17は、第2の情報処理装置2から第2の通信制御装置4を介して送信された返信パケットを受け付ける。この返信パケットは、バブルパケット送信ポートに対して送信されたものである。この返信パケットは、例えば、受信によって受け付けられる。この返信パケットには、何らかの情報が含まれていてもよく、何も情報が含まれていなくてもよい。
再返信パケット送信部18は、返信パケット受付部17が返信パケットを受け付けた場合に、再返信パケットを送信する。この再返信パケットは、返信パケットの送信で用いられた第2の通信制御装置4のポートに対して送信される。この再返信パケットは、例えば、UDPによって送信される。この再返信パケットには、何らかの情報が含まれていてもよく、何も情報が含まれていなくてもよい。
ポート幅受付部19は、サーバ6から送信されたポート幅情報を受け付ける。ここで、ポート幅情報とは、第2の通信制御装置4におけるポート幅を示す情報である。
図3は、第2の情報処理装置2の構成を示すブロック図である。図3において、第2の情報処理装置2は、通信部21と、基準ポート検出用パケット送信部22と、バブルパケット送信ポート受付部23と、返信パケット送信部24と、再返信パケット受付部25と、ポート幅検出用パケット送信部26とを備える。
通信部21は、通信部11と同様に、基準ポート検出用パケット送信部22等の第2の情報処理装置2の内部の各構成要素と、第2の通信制御装置4との間における通信を行う。
基準ポート検出用パケット送信部22は、基準ポートの位置を検出するための基準ポート検出用パケットをサーバ6に送信する。この基準ポートは、第2の通信制御装置4で割り当てられるポートのうち、基準ポート検出用パケットが送信された時点における最新のポート(最も新しく割り当てられたポート)である。すなわち、この基準ポート検出用パケットを送信することにより、サーバ6は、第2の通信制御装置4で割り当てられた最新のポートの位置を検出することができる。この基準ポート検出用パケットは、例えば、UDPや、TCPによって送信される。この基準ポート検出用パケットには、何らかの情報が含まれていてもよく、何も情報が含まれていなくてもよい。
バブルパケット送信ポート受付部23は、バブルパケット送信ポート情報を受け付ける。ここで、バブルパケット送信ポート情報とは、バブルパケット送信ポートの位置を示す情報であり、例えば、バブルパケット送信ポートのポート番号によって、バブルパケット送信ポートの位置が示される。バブルパケット送信ポート情報は、例えば、受信によって受け付けられる。
返信パケット送信部24は、第1の通信制御装置3におけるバブルパケット送信ポートに対して返信パケットを送信する。そのバブルパケット送信ポートの位置は、バブルパケット送信ポート受付部23が受け付けたバブルパケット送信ポート情報によって示されるものである。この返信パケットは、第2の通信制御装置4の異なるN個(Nは2以上の整数)のポートを用いて送信される。そのN個のポートは、返信パケットの送信時に、第2の通信制御装置4において新たに割り当てられるポートである。ここで、そのNの値は、第2の通信制御装置4における、基準ポートからバブルパケットが送信されたポート(バブルパケット送信対象ポート)までにおいて割り当て可能なポートの数(αとする)である。すなわち、返信パケットの送信時に、バブルパケット送信対象ポートがすでに他の機器によって用いられている場合以外には、α個の返信パケットを送信することによって、バブルパケット送信対象ポートを用いた返信パケットの送信が可能となる。この返信パケットは、例えば、UDPによって送信される。この返信パケットには、何らかの情報が含まれていてもよく、何も情報が含まれていなくてもよい。
再返信パケット受付部25は、第1の情報処理装置1から送信された再返信パケットを受け付ける。この再返信パケットは、返信パケットの送信で用いられた第2の通信制御装置4のポートに対して送信され、第2の情報処理装置2で受信されたたものである。第1の通信制御装置3および第2の通信制御装置4で用いているNATの種類によっては、第1の情報処理装置1が返信パケットを受け付けた時点で第1の情報処理装置1と第2の情報処理装置2との間の通信が確立することもあり得るが、第2の情報処理装置2が再返信パケットを受け付けることによってはじめて、第1の情報処理装置1と第2の情報処理装置2との間の通信が確立することもある。
ポート幅検出用パケット送信部26は、第2の通信制御装置4におけるポート幅を検出するためのポート幅検出用パケットを、第2の通信制御装置4を介してサーバ6に送信する。このポート幅検出用パケットには、何らかの情報が含まれていてもよく、何も情報が含まれていなくてもよい。
第1の通信制御装置3は、第1の情報処理装置1の通信を制御するものであり、いわゆるナット(NAT)を用いて、ローカル側(第1の情報処理装置1側)と、グローバル側(通信回線5側)との通信を制御する。このNATには、F NAT,R NAT,PR
NAT,Sa NAT,AS NAT,Sc NAT,Sd NAT,Se NAT,PS NATがある。
また、第2の通信制御装置4は、第2の情報処理装置2の通信を制御するものであり、第1の通信制御装置3と同様に、NATを用いている。後述するように、本実施の形態による通信システムでは、第1の通信制御装置3と、第2の通信制御装置4で用いているNATのすべての組み合わせにおいて、第1の情報処理装置1と第2の情報処理装置2との間の通信を確立することができ得る。なお、第1の通信制御装置3、および第2の通信制御装置4では、ポートの割り当ては、所定のポート幅ごとに、ポート番号が増大するよう、あるいは減少するように行われるものとする。以下の説明では、ポート番号が増大するように割り当てられる場合について説明する。
図4は、サーバ6の構成を示すブロック図である。図4において、サーバ6は、通信部61と、基準ポート検出部62と、基準ポート送信部63と、ポート幅検出部64と、バブルパケット送信ポート検出部65と、再送信指示送信部66と、バブルパケット送信ポート送信部67と、ポート幅送信部68とを備える。
通信部61は、基準ポート検出部62等のサーバ6の各部と、第1の情報処理装置1や第2の情報処理装置2などとの通信を行う。
基準ポート検出部62は、基準ポート検出用パケットを受け付け、その基準ポート検出用パケットに基づいて基準ポートの位置を検出する。基準ポート検出用パケットの受け付けは、例えば、受信によってなされる。その基準ポート検出用パケットは、第2の情報処理装置2から第2の通信制御装置4を介して送信されたものである。
基準ポート送信部63は、基準ポート情報を第1の情報処理装置1に送信する。この基準ポート情報は、例えば、基準ポートのポート番号によって、基準ポートの位置を示す。
ポート幅検出部64は、第1の通信制御装置3におけるポート幅を検出する。この検出は、第1の情報処理装置1から送信されるポート幅検出用パケットを受け付けることによってなされる。また、ポート幅検出部64は、第2の通信制御装置4におけるポート幅を検出する。この検出は、第2の情報処理装置2から送信されるポート幅検出用パケットを受け付けることによってなされる。なお、第1の通信制御装置3におけるポート幅を検出する第1のポート検出部と、第2の通信制御装置4におけるポート幅を検出する第2のポート検出部とを備えてもよい。それらを1つで実現したのが、ポート幅検出部64である。すなわち、ポート幅検出部64のうち、第1の通信制御装置3におけるポート幅を検出する部分が、第1のポート検出部となり、第2の通信制御装置4におけるポート幅を検出する部分が、第2のポート検出部となる。
バブルパケット送信ポート検出部65は、第1の通信制御装置3におけるバブルパケット送信ポートの位置を検出する。この検出は、第1の情報処理装置1から第1の通信制御装置3を介して送信されたポート検出用パケットを受け付けることによってなされる。このポート検出用パケットの受け付けは、例えば、受信によってなされる。具体的には、バブルパケット送信ポート検出部65は、バブルパケットの送信の前後に送信されたポート検出用パケットを受け付ける。そして、そのポート検出用パケットの送信で用いられた第1の通信制御装置3における2つのポートと、バブルパケット送信ポートとが連続しているかどうか判断する。その判断の結果、それらのポートが連続している場合には、ポート検出用パケットの送信で用いられた第1の通信制御装置3における2つのポートで挟まれるポートの位置をバブルパケット送信ポートの位置として検出する。ここで、連続するとは、第1の通信制御装置3のポート幅の間隔で、その2つのポートとバブルパケット送信ポートが並んでいることをいう。なお、ポート検出用パケットの送信で用いられた第1の通信制御装置3の2つのポートの間隔が、ポート幅検出部64によって検出された第1の通信制御装置3のポート幅の2倍である場合に、連続していると判断することができる。一方、ポート検出用パケットの送信で用いられた第1の通信制御装置3における2つのポートと、バブルパケット送信ポートとが連続していない場合には、バブルパケット送信ポートを検出できないこととなる。
再送信指示送信部66は、バブルパケット送信ポート検出部65がバブルパケット送信ポートの位置を検出できない場合に、再送信指示を第1の情報処理装置1に送信する。ここで、再送信指示とは、バブルパケット、およびポート検出用パケットを再度送信する旨の指示である。バブルパケット送信ポート検出部65は、その再送信指示の送信に応じて再度送信されたポート検出用パケットを用いて、バブルパケット送信ポートの位置を検出する。なお、この再送信指示の送信は、バブルパケット送信ポート検出部65がバブルパケット送信ポートの位置を検出できるまで、あるいは、所定の上限の回数(例えば、10回など)や、所定の時間(例えば、30秒など)等の所定の制限まで繰り返される。
バブルパケット送信ポート送信部67は、バブルパケット送信ポート情報を第2の情報処理装置2に送信する。このバブルパケット送信ポート情報で示されるバブルパケット送信ポートの位置は、バブルパケット送信ポート検出部65によって検出されたものである。
ポート幅送信部68は、ポート幅情報を第1の情報処理装置1に送信する。ここで、ポート幅情報とは、ポート幅検出部64で検出された第2の通信制御装置4におけるポート幅を示す情報である。
次に、本実施の形態による通信システムの動作について説明する。特に、図5のフローチャートを用いて、第1の情報処理装置1と第2の情報処理装置2とが通信を開始するまでの通信方法について説明する。
(ステップS101)第2の情報処理装置2から基準ポート検出用パケットがサーバ6に送信され、その基準ポート検出用パケットに基づいて、基準ポートの位置が検出される。そして、その基準ポートの位置を示す基準ポート情報が、サーバ6から第1の情報処理装置1に送信される。なお、ステップS101の詳細な処理については、後述する。
(ステップS102)第1の情報処理装置1は、基準ポート情報に基づいて、バブルパケットを第2の通信制御装置4に送信する。また、バブルパケット送信ポートの位置の検出に用いられるポート検出用パケットをサーバ6に送信する。なお、ステップS102の詳細な処理については、後述する。
(ステップS103)サーバ6のバブルパケット送信ポート検出部65は、ステップS102で受け付けたポート検出用パケットに基づいて、バブルパケット送信ポートの位置を検出できるかどうか判断する。そして、検出できる場合には、ステップS104に進み、検出できない場合には、再送信指示送信部66が再送信指示を第1の情報処理装置1に送信してステップS102に戻る。その再送信指示は、第1の情報処理装置1の再送信指示受付部16によって受け付けられる。
(ステップS104)サーバ6は、バブルパケット送信ポートの位置を検出し、その位置を示すバブルパケット送信ポート情報を第2の情報処理装置2に送信する。第2の情報処理装置2は、そのバブルパケット送信ポート情報に基づいて、返信パケットを第1の通信制御装置3に送信する。なお、ステップS104の詳細な処理については、後述する。
(ステップS105)第1の情報処理装置1の返信パケット受付部17は、返信パケットを受け付けたかどうか判断する。そして、返信パケットを受け付けた場合には、ステップS106に進み、受け付けていない場合には、ステップS101に戻り、ステップS101からの処理を再度繰り返す。
(ステップS106)第1の情報処理装置1の再返信パケット送信部18は、再返信パケットを第2の通信制御装置4に送信する。
(ステップS107)第2の情報処理装置2の再返信パケット受付部25は、再返信パケットを受け付けたかどうか判断する。そして、再返信パケットを受け付けた場合には、その再返信パケットの送信で用いられた第1の通信制御装置3のいずれかのポートにパケットを送信することによって、第1の情報処理装置1と第2の情報処理装置2との間でのサーバ6を介さない通信を確立することができ、通信の確立の処理は終了される。一方、再返信パケットを受け付けなかった場合には、通信を確立できないこととなるため、ステップS101に戻り、ステップS101からの処理を再度繰り返す。
次に、図5のフローチャートにおけるステップS101の処理について、図6を用いて説明する。図6は、送信側、サーバ、受信側の間における情報のやり取りや処理を説明するための図である。ここで、送信側とは、第1の情報処理装置1および第1の通信制御装置3を含む概念である。また、受信側とは、第2の情報理装置2および第2の通信制御装置4を含む概念である。
(ステップS201)サーバ6は、第2の情報処理装置2に対して、基準ポート検出用パケットの送信要求を送信する。
(ステップS202)第2の情報処理装置2の基準ポート検出用パケット送信部22は、サーバ6から送信された基準ポート検出用パケットの送信要求を受け取ると、基準ポート検出用パケットをサーバ6に送信する。なお、基準ポート検出用パケット送信部22は、その基準ポート検出用パケットが、第2の通信制御装置4において最新に割り当てられたポートを用いて送信されるようにする。例えば、第2の情報処理装置2において新たに割り当てられたポートを用いて基準ポート検出用パケットの送信を行う。
(ステップS203)サーバ6の基準ポート検出部62は、第2の情報処理装置2から送信された基準ポート検出用パケットを受け付ける。そして、基準ポート検出部62は、基準ポート検出用パケットのヘッダに含まれる基準ポートのポート番号を参照することにより、基準ポートの位置を検出する。
(ステップS204)基準ポート送信部63は、基準ポート検出部62によって検出された基準ポートの位置を示す情報である基準ポート情報を第1の情報処理装置1に送信する。その基準ポート情報は、第1の情報処理装置1における基準ポート受付部12で受け付けられる。
(ステップS205)サーバ6は、第2の通信制御装置4のIPアドレスを示すアドレス情報を第1の情報処理装置1に送信する。そのアドレス情報は、通信部11で受信され、バブルパケット送信部13に渡される。
(ステップS206)第1の情報処理装置1のポート幅検出用パケット送信部15は、ポート幅検出用パケットをサーバ6に送信する。ここで、この送信においては、複数のポート幅検出用パケットが通過する第1の通信制御装置3のポートがそれぞれ異なるようにする。このポート幅検出用パケットは、例えば、第1の情報処理装置1におけるポート番号がそれぞれ異なる複数のポートから送信される。図7は、ポート幅検出用パケットの送信について説明するための図である。ポート幅検出用パケット送信部15は、それぞれ異なるポートP205〜P208から順次、サーバ6のポートP200にポート幅検出用パケットを送信する。すると、第1の通信制御装置3において、それらのパケットは、それぞれ異なるポートP201〜P204を通過することとなる。なお、図7では、ポートP205からP208の順番でパケットが送信されたとする。また、第1の情報処理装置1は、ポート幅検出用パケットを送信する以前に、ポートP205〜P208をサーバ6との通信で用いていないものとする。
(ステップS207)サーバ6のポート幅検出部64は、第1の情報処理装置1から送信されたポート幅検出用パケットを受け付け、そのポート幅検出用パケットに基づいて、ポート幅を検出する。このポート幅の検出方法について説明する。ポート幅検出部64は、ポート幅検出用パケットを受け付けることにより、各ポート幅検出用パケットの送信で用いられた第1の通信制御装置3のポートP201〜P204を検出することができる。そして、例えばポートP202と、ポートP201のポート間隔が12であり、ポートP203と、ポートP202のポート間隔が6であり、ポートP204と、ポートP203のポート間隔が18である場合には、一番小さいポート間隔である「6」をポート幅として検出してもよい。一方、それらのポート間隔の最大公約数をポート幅として検出してもよい。例えば、ポートP202と、ポートP201のポート間隔が12であり、ポートP203と、ポートP202のポート間隔が6であり、ポートP204と、ポートP203のポート間隔が9である場合には、それらの最大公約数である「3」をポート幅として検出してもよい。なお、ポート幅の検出方法は、これらに限定されるものではなく、その他の方法によってポート幅を検出してもよい。また、ポート幅を検出するときに送信されるポート幅検出用パケットの数も、4個に限定されるものではなく、ポート幅を検出できる範囲において任意に設定することができる。
(ステップS208)第2の情報処理装置2のポート幅検出用パケット送信部26は、ポート幅検出用パケットをサーバ6に送信する。ここで、ポート幅検出用パケットの送信は、ステップS206と同様にしてなされる。
(ステップS209)サーバ6のポート幅検出部64は、第2の情報処理装置2から送信されたポート幅検出用パケットを受け付け、そのポート幅検出用パケットに基づいて、第2の通信制御装置4におけるポート幅を検出する。このポート幅の検出方法は、ステップS207と同様であり、その説明を省略する。なお、このステップS209におけるポート幅の検出処理では、ステップS207におけるポート幅の検出に比べて、厳密性をあまり要求されない。すなわち、第2の通信制御装置4における実際のポート幅の倍数をポート幅として検出してもよい。このステップS209で検出されたポート幅は、基準ポートから、このステップS209で検出されたポート幅の倍数だけポート間隔の(ポート番号の割り当てが増加方向である場合には、ポート番号の増加する方向に)離れたポートをバブルパケット送信対象ポートと決定するために用いられるものである。その結果、このステップで検出されたポート幅が実際のポート幅の倍数であったとしても、そのようにして決定されたバブルパケット送信対象ポートは、基準ポートから何回かのポート割り当て後に割り当てられるポートとなり、バブルパケット送信対象ポートとしてそのポートを用いることができるからである。したがって、このステップS208、S209におけるポート幅の検出では、少数のポート幅検出用パケットの送信によってポート幅を検出してもよい。
(ステップS210)サーバ6のポート幅送信部68は、ステップS209で検出されたポート幅を示すポート幅情報を第1の情報処理装置1に送信する。
なお、図6において、受信側アドレスの送信(ステップS205)は、どの時点で行われてもよく、例えば、基準ポート情報の送信(ステップS204)や、基準ポート検出用パケットの送信要求(ステップS201)の以前に行ってもよい。また、ポート幅検出用パケットの送信(ステップS208)からポート幅情報の送信(ステップS210)についても、ポート幅検出用パケットの送信(ステップS206)の処理等よりも以前に行ってもよい。このように、図6の処理の順序に関しては、ある程度の任意性がある。
次に、図5のフローチャートにおけるステップS102の処理について、図8を用いて説明する。図8は、送信側、サーバ、受信側の間における情報のやり取りや処理を説明するための図である。
(ステップS301)第1の情報処理装置1の検出用パケット送信部14は、ポート検出用パケットを、第1の通信制御装置3を介してサーバ6に送信する。この送信において、ポート検出用パケットが第1の通信制御装置3において最新に割り当てられるポートを通過するようにパケットの送信を行うものとする。バブルパケット送信ポートの位置を適切に検出できるようにするためである。例えば、検出用パケット送信部14は、第1の情報処理装置1とサーバ6との間の通信でそれまでに用いていない第1の情報処理装置1のポートを用いて、ポート検出用パケットを送信する。このようにして送信されたポート検出用パケットは、サーバ6のバブルパケット送信ポート検出部65において受け付けられる。このバブルパケット送信ポート検出部65は、ポート検出用パケットのヘッダを参照することにより、ポート検出用パケットの送信で用いられた第1の通信制御装置3におけるポートの位置を検出する。
(ステップS302)第1の情報処理装置1のバブルパケット送信部13は、バブルパケットを第2の通信制御装置4に送信する。このバブルパケットは、第2の通信制御装置4において、基準ポートから所定回(α)のポート割り当て後に割り当てられるポートに対して送信される。
(ステップS303)第1の情報処理装置1の検出用パケット送信部14は、ポート検出用パケットを、第1の通信制御装置3を介してサーバ6に送信する。この送信において、ポート検出用パケットが第1の通信制御装置3において最新に割り当てられるポートを通過するようにパケットの送信を行うものとする。例えば、検出用パケット送信部14は、第1の情報処理装置1とサーバ6との間の通信や、ステップS301でのポート検出用パケットの送信、バブルパケットの送信でそれまでに用いていない第1の情報処理装置1のポートを用いて、ポート検出用パケットを送信する。このようにして送信されたポート検出用パケットは、サーバ6のバブルパケット送信ポート検出部65において受け付けられる。このバブルパケット送信ポート検出部65は、ポート検出用パケットのヘッダを参照することにより、ポート検出用パケットの送信で用いられた第1の通信制御装置3におけるポートの位置を検出する。
(ステップS304)サーバ6のバブルパケット送信ポート検出部65は、ステップS301、S303における、2つのポート検出用パケットの送信で用いられた第1の通信制御装置3のポートの位置と、バブルパケット送信ポートとが連続しているかどうかを判断する。
次に、図5のフローチャートにおけるステップS104の処理について、図9を用いて説明する。図9は、送信側、サーバ、受信側の間における情報のやり取りや処理を説明するための図である。
(ステップS401)サーバ6のバブルパケット送信ポート検出部65は、バブルパケット送信ポートの位置を検出する。
(ステップS402)サーバ6のバブルパケット送信ポート送信部67は、バブルパケット送信ポート情報を第2の情報処理装置2に送信する。そのバブルパケット送信ポート情報は、第2の情報処理装置2のバブルパケット送信ポート受付部23によって受け付けられる。
(ステップS403)サーバ6は、第1の通信制御装置3のIPアドレスを示すアドレス情報を第2の情報処理装置2に送信する。そのアドレス情報は、通信部21で受信され、返信パケット送信部24に渡される。
(ステップS404)第2の情報処理装置2の返信パケット送信部24は、ステップS403で受け取ったアドレス情報によって特定される第1の第1の通信制御装置3に対して返信パケットを送信する。この返信パケットは、バブルパケット送信ポート受付部23で受け付けられたバブルパケット送信ポート情報の示すバブルパケット送信ポートに対して送信される。
なお、図9において、バブルパケット送信ポート情報の送信(ステップS402)と、送信側アドレスの送信(ステップS403)との順序は問わない。
次に、本実施の形態による通信システムの動作について、具体例を用いて説明する。この具体例において、第1の通信制御装置3、第2の通信制御装置4、サーバ6のIPアドレス(第1および第2の通信制御装置3,4については、通信回線5側のアドレス)は、それぞれ以下のとおりであるとする。
第1の通信制御装置3:202.132.10.6
第2の通信制御装置4:131.206.10.240
サーバ6:155.32.10.10
以下の具体例においては、具体例1において、第1の通信制御装置3、および第2の通信制御装置4がPS NATを用いている場合について説明する。また、具体例2において、第1の通信制御装置3がSd NATを用いており、第2の通信制御装置4がPS NATを用いている場合について説明する。また、具体例3において、第1の通信制御装置3がSd NATを用いており、第2の通信制御装置4がAS NATを用いている場合について説明する。
(具体例1)
図10〜図13は、具体例1について説明するための図である。この具体例1では、第1の情報処理装置1から接続要求が行われる。図10において、第1の情報処理装置1は、サーバ6のIPアドレス「155.32.10.10」をあらかじめ知っており、そのサーバ6に対して、第1の情報処理装置1の機器ID「1234567890123456」を送信する。ここで、この機器IDとしては、例えば、MACアドレスや、EUI64ベースのアドレスなどのGUID(Global Unique ID)を用いることができる。この機器IDの送信は、第1の情報処理装置1のポートP1から、第1の通信制御装置3で割り当てられたポートP2を介して、サーバ6のポートP3に対して行われる。この送信によって、サーバ6は、第1の情報処理装置1の機器IDと、第1の通信制御装置3のIPアドレス「202.132.10.6」と、第1の通信制御装置3におけるポートP2のポート番号「10034」とを知ることができる。これらの情報は、サーバ6において保持される。
次に、第1の情報処理装置1は、接続を要求する第2の情報処理装置2の機器ID「9876543210123456」をサーバ6に送信することにより、第2の情報処理装置2への接続要求を行う。すると、サーバ6が、その接続要求を受け取り、第2の情報処理装置2がサーバ6にすでにアクセスしているかどうか判断する。この第2の情報処理装置2によるアクセスも、上述の第1の情報処理装置1と同様にして、第2の情報処理装置2の機器IDを送信することによってなされる。したがって、第2の情報処理装置2がサーバ6にアクセスしていた場合には、サーバ6は、第2の情報処理装置2の機器ID「9876543210123456」と、第2の通信制御装置4のIPアドレス「131.206.10.240」と、第2の情報処理装置2とサーバ6の間での情報の送受信で用いられる第2の通信制御装置4のポートP5のポート番号「23495」とを知っており、それらを保持していることとなる。第2の情報処理装置2がサーバ6にすでにアクセスしている場合には、基準ポート情報の受け付けに関する処理(ステップS101)が開始される。一方、第2の情報処理装置2がサーバ6にアクセスしていない場合には、第1の情報処理装置1からの接続要求は、エラーとなり、第1の情報処理装置1と第2の情報処理装置2の間の通信は確立できない。
基準ポート情報の受け付けに関する処理において、サーバ6は、第2の情報処理装置2に、第2の通信制御装置4のポートP5を介して基準ポート検出用パケットを送信する旨の送信要求を行う(ステップS201)。すると、その送信要求が第2の情報処理装置2の基準ポート検出用パケット送信部22において受け付けられる。そして、基準ポート検出用パケット送信部22は、第2の情報処理装置2において、それまでにサーバ6との通信で用いているポートP6とは異なる、新たに割り当てられたポートP8から第2の通信制御装置4を介して基準ポート検出用パケットを送信する(ステップS202)。この基準ポート検出用パケットの送信において、第2の通信制御装置4では、ポートP7(ポート番号「23500」)が新たに割り当てられたとする。この基準ポート検出用パケットは、サーバ6の基準ポート検出部62によって受け付けられる。そして、基準ポートP7の位置として、ポート番号「23500」が検出される(ステップS203)。
基準ポート送信部63は、そのポート番号「23500」を基準ポート検出部62から受け取り、その基準ポートP7のポート番号「23500」を含む基準ポート情報を構成し、その基準ポート情報を第1の情報処理装置1に送信する(ステップS204)。この送信は、第1の通信制御装置3におけるポートP2を介して行われる。第1の情報処理装置1の基準ポート受付部12は、その基準ポート情報を、通信部11を介して受け付け、その基準ポート情報に含まれる基準ポートP7のポート番号「23500」をバブルパケット送信部13に渡す。
また、サーバ6は、第2の通信制御装置4のIPアドレス「131.206.10.240」を示すアドレス情報を第1の情報処理装置1に送信する(ステップS205)。そのアドレス情報は、通信部11で受信され、バブルパケット送信部13に渡される。このようにして、バブルパケット送信部13は、第2の通信制御装置4のIPアドレス「131.206.10.240」を知ることができる。
ポート幅検出用パケット送信部15は、通信部11がアドレス情報を受信したことを検知すると、複数のポート幅検出用パケットを図7で示すようにして送信する(ステップS206)。なお、図10では、ポート幅検出用パケットの送信については明示していない。そのポート幅検出用パケットは、サーバ6のポート幅検出部64で受け付けられ、ポート幅が検出される。この場合、ポート幅は「1」と検出されたとする(ステップS207)。検出されたポート幅は、バブルパケット送信ポート検出部65に渡される。
また、ポート幅検出用パケット送信部26は、サーバ6のポート幅検出部64からの指示により、複数のポート幅検出用パケットを送信する(ステップS208)。なお、図10では、このポート幅検出用パケットの送信についても明示していない。そのポート幅検出用パケットは、サーバ6のポート幅検出部64で受け付けられ、ポート幅が検出される。この場合、ポート幅は「1」と検出されたとする(ステップS209)。その後、ポート幅送信部68は、その検出されたポート幅「1」を、第1の情報処理装置1に送信する(ステップS210)。そして、そのポート幅「1」は、ポート幅受付部19で受け付けられ、バブルパケット送信部13に渡される。
バブルパケット送信部13は、バブルパケットを送信する前に、検出用パケット送信部14に対して、ポート検出用パケットを送信する旨の指示を渡す。すると、検出用パケット送信部14は、それまでにサーバ6との通信で用いておらず、新たに割り当てられたポート(すなわち、第1の情報処理装置1が新たに割り当てたポート)であるポートP9を用いて、サーバ6のポートP15に対してポート検出用パケットを送信する(ステップS301)。ポートP15は、サーバ6から指示されたポートであるとする。このポート検出用パケットは、第1の通信制御装置3において、新たに割り当てられたポートP12(ポート番号「10040」)を用いて送信される。サーバ6のバブルパケット送信ポート検出部65は、このポート検出用パケットを受け付け、第1の通信制御装置3のポートP12のポート番号「10040」を検出する。バブルパケット送信ポート検出部65は、そのポートP12のポート番号「10040」を保持しておく。
検出用パケット送信部14は、ポート検出用パケットの送信後に、ポート検出用パケットを送信した旨をバブルパケット送信部13に伝える。すると、バブルパケット送信部13は、それまでにサーバ6との通信で用いておらず、新たに割り当てられたポートであるポートP10を用いて、IPアドレス「131.206.10.240」の第2の通信制御装置4にバブルパケットを送信する(ステップS302)。このバブルパケットの送信では、基準ポート受付部12から受け取った基準ポートP7のポート番号「23500」から、ポート幅受付部19で受け付けられたポート幅「1」の所定の倍数、すなわち50倍(すなわち、α=50)だけ離れたポート番号「23550」のポートP17に対してバブルパケットを送信するものとする。また、そのバブルパケットは、第1の通信制御装置3のポートP13(ポート番号「10041」)を用いて送信されたとする。バブルパケット送信部13は、バブルパケットの送信後、「α=50」である旨をサーバ6に送信する。すると、サーバ6は、その旨を第2の情報処理装置2に送信する。そして、「α=50」である旨が返信パケット送信部24で受け付けられる。
バブルパケット送信部13は、バブルパケットの送信後に、ポート検出用パケットを送信する旨の指示を検出用パケット送信部14に渡す。すると、検出用パケット送信部14は、それまでにサーバ6との通信で用いておらず、新たに割り当てられたポートであるポートP11を用いて、サーバ6のポート16に対してポート検出用パケットを送信する(ステップS303)。このポート検出用パケットは、第1の通信制御装置3において、新たに割り当てられたポートP14(ポート番号「10042」)を用いて送信される。このように、バブルパケットと、ポート検出用パケットとは、第1の通信制御装置3における異なるポートを用いて送信される。
サーバ6のバブルパケット送信ポート検出部65は、このポート検出用パケットを受け付け、第1の通信制御装置3のポートP14のポート番号「10042」を検出する。そして、バブルパケット送信ポート検出部65は、保持していたポートP12のポート番号「10040」と、検出したポートP14のポート番号「10042」との差が「2」であり、ステップS207で検出したポート幅「1」の2倍であることから、2つのポート検出用パケットの送信で用いられた第1の通信制御装置3におけるポートP12,P14と、バブルパケット送信ポートP13とが連続していると判断する(ステップS304)。その結果、バブルパケット送信ポートの位置を検出できると判断し(ステップS103)、バブルパケット送信ポート検出部65は、バブルパケット送信ポートの位置として、ポートP12とポートP14の真ん中であるポート番号「10041」を検出する(ステップS401)。
バブルパケット送信ポート送信部67は、バブルパケット送信ポート検出部65で検出されたバブルパケット送信ポートP13のポート番号「10041」を含むバブルパケット送信ポート情報を構成し、そのバブルパケット送信ポート情報を、第2の通信制御装置4のポートP5を介して第2の情報処理装置2に送信する(ステップS402)。そのバブルパケット送信ポート情報は、第2の情報処理装置2のバブルパケット送信ポート受付部23において受け付けられる。そして、バブルパケット送信ポート情報に含まれるバブルパケット送信ポートP13のポート番号「10041」が返信パケット送信部24に渡される。
また、サーバ6は、第1の通信制御装置3のIPアドレス「202.132.10.6」を示すアドレス情報を第2の情報処理装置2に送信する(ステップS403)。そのアドレス情報は、通信部21で受信され、返信パケット送信部24に渡される。このようにして、返信パケット送信部24は、第1の通信制御装置3のIPアドレス「202.132.10.6」を知ることができる。
返信パケット送信部24は、IPアドレス「202.132.10.6」の第1の通信制御装置3におけるポート番号「10041」のバブルパケット送信ポートP13に対して、50個の返信パケットを送信する(ステップS404)。この50個というのは、返信パケット送信部24がサーバ6から受け付けたαの値に対応している。返信パケット送信部24は、この50個の返信パケットを、第2の情報処理装置2において新たに割り当てられる(すなわち、それまでのサーバ6との通信等で用いられていない)50個のポートP20〜P21を用いて送信する。したがって、その返信パケットは、第2の通信制御装置4においても、新たに割り当てられる50個のポートP18〜P19を用いて送信されることとなる(図12参照)。なお、第2の通信制御装置4において、基準ポート検出用パケットが送信された時点に割り当てられた最新のポートがポートP7であり、そのポートP7からポート番号が50だけ離れたポートP17にバブルパケットが送信されているため、返信パケットの送信時にすでにポートP17が、第2の情報処理装置2以外の機器によって使用されている場合を除き、50個の返信ポートのいずれかがバブルパケット送信対象ポートP17を用いて第1の通信制御装置3に送信されることとなる。そして、第1の通信制御装置3は、PS NATを用いており、バブルパケットをバブルパケット送信対象ポートP17に対して送信している送信履歴が第1の通信制御装置3に残っているため、バブルパケット送信対象ポートP17を用いて送信された返信パケットのみを受け付けることができる。その返信パケットは、第1の情報処理装置1のポートP10を介して返信パケット受付部17で受け付けられる。
ここで、この具体例1においては、この返信パケットの受け付けにより、第1の情報処理装置1と第2の情報処理装置2との間の通信が確立することとなるが、続けて再返信パケットの送信についても説明する。
第2の情報処理装置2の返信パケット送信部24は、50個の返信パケットの送信後に、返信パケットの送信を終了した旨を、第2の通信制御装置4のポートP5を介してサーバ6に送信する。すると、サーバ6が返信パケットの送信を終了した旨を受け取り、その旨を第1の通信制御装置3のポートP2を介して第1の情報処理装置1に送信する。第1の情報処理装置1の返信パケット受付部17は、その旨を受け付けると、すでに返信パケットを受け付けているため、返信パケット17のヘッダに含まれる返信パケットの送信された第2の通信制御装置4のポートP17のポート番号「23550」を取得し、そのポート番号と、再返信パケットを送信する旨の指示とを、再返信パケット送信部18に渡す(ステップS105)。なお、返信パケット受付部17が返信パケットを受け付けていない場合には、返信パケット受付部17は、返信パケットを受け付けていない旨をサーバ6に送信する。その結果、サーバ6は、再度、第2の情報処理装置2に基準ポート検出用パケットの送信要求を送信し、第1の情報処理装置1と第2の情報処理装置2との接続を確立するための処理が再度行われることとなる(ステップS101〜S104)。
再返信パケット送信部18は、返信パケット受付部17から受け取ったポート番号「23550」のポートP17に対して、再返信パケットを送信する(ステップS106)。その再返信パケットは、第1の通信制御装置3のポートP13、および第2の通信制御装置4のポートP17を用いて第2の情報処理装置2に送信され、第2の情報処理装置2の再返信パケット受付部25で受け付けられる。
また、再返信パケット送信部18は、再返信パケットの送信後に、再返信パケットの送信を終了した旨を、第1の通信制御装置3のポートP2を介してサーバ6に送信する。すると、サーバ6が再返信パケットの送信を終了した旨を受け取り、その旨を第2の通信制御装置4のポートP5を介して第2の情報処理装置2に送信する。第2の情報処理装置2の再返信パケット受付部25は、その旨を受け付ける。この場合には、再返信パケット受付部25が再返信パケットをすでに受け付けているため、第1の情報処理装置1と第2の情報処理装置2との間の通信を確立する処理は終了となる(ステップS107)。なお、再返信パケット受付部25が再返信パケットを受け付けていない場合には、再返信パケット受付部25は、再返信パケットを受け付けていない旨をサーバ6に送信する。その結果、サーバ6は、再度、第2の情報処理装置2に基準ポート検出用パケットの送信要求を送信し、第1の情報処理装置1と第2の情報処理装置2との接続を確立するための処理が再度行われることとなる(ステップS101〜S106)。
その後、第1の情報処理装置1と第2の情報処理装置2との間で、サーバ6を介さない、Peer to PeerのUDPによる通信が、第1の通信制御装置3のポートP13、および第2の通信制御装置4のポートP17を介して行われる。
なお、この具体例1では、ポート検出用パケットと、バブルパケットとが第1の通信制御装置3における連続したポートを用いて送信された場合について説明したが、例えば、ポートP12のポート番号が「10040」であり、ポートP14のポート番号が「10043」である場合のように、ポート検出用パケットと、バブルパケットとが第1の通信制御装置3における連続したポートを用いて送信されていない場合には、バブルパケットと、ポート検出用パケットとの送信が、ポート検出用パケットの送信で用いられた第1の通信制御装置3のポートと、バブルパケット送信ポートとが連続したポートとなるまで繰り返される(ステップS102、S103)。ここで、ポート検出用パケットの送信で用いられた第1の通信制御装置3のポートと、バブルパケット送信ポートとが第1の通信制御装置3における連続したポートとならない理由としては、第1の通信制御装置3のローカル側に第1の情報処理装置1以外の装置(図示せず)が接続されており、ポート検出用パケットの送信からバブルパケットの送信まで、またはバブルパケットの送信からポート検出用パケットの送信までに、その装置に対して、第1の通信制御装置3のポートが割り当てられた、ということがある。
また、この具体例1において、第1の情報処理装置1からの機器IDの送信や、第2の情報処理装置2からの機器IDの送信、また、サーバ6からのアドレス情報の送信等の装置間での情報の送受信については、第1の情報処理装置1等における図示しない制御部によってなされるものとする。このことは、以下の具体例においても同様である。
また、図11において、ポート検出用パケットの送信先ポートP15,P16は、同一のポートであってもよく、また、ポートP3と同一であってもよい。
また、図11において、第1の通信制御装置3がPS NATである場合には、ポートP9,ポートP10,ポートP11が同一のポートであってもよい。ただし、この場合であっても、ポートP9(=ポートP10,P11)は、1回目のポート検出用パケットの送信時に新たに割り当てられたポートである。また、ポートP15とポートP16とは異なる。
(具体例2)
具体例2では、第1の通信制御装置3がSd NATを用いており、第2の通信制御装置4がPS NATを用いている場合について説明する。
この場合であっても、第2の情報処理装置2から第1の通信制御装置3に対して返信パケットを送信するまでは、具体例1と同様であり、その説明を省略する。なお、この具体例2においても、具体例1と同様のポート番号等を用いてバブルパケットの送信等の処理が行われているものとする。この具体例2の場合には、第1の通信制御装置3においてSd NAT、すなわち受信フィルタフールがNoフィルタのNATを用いているため、第2の情報処理装置2から送信された50個の返信パケットは、すべて、第1の情報処理装置1のポートP10を介して返信パケット受付部17で受け付けられる。
返信パケット受付部17は、返信パケットの送信で用いられた第2の通信制御装置4のポート番号を各返信パケットから取得し、そのポート番号を再返信パケット送信部18に渡す。再返信パケット送信部18は、そのポート番号を受け取り、第2の通信制御装置4の受け取った各ポート番号に対して、再返信パケットを送信する(図14参照)。第1の通信制御装置3で用いているSd NATは、送信ポート割り当てルールがPort Sensitiveであるため、第1の通信制御装置3におけるバブルパケット送信ポートP13を用いて第2の通信制御装置4に対して送信を行うことができるのは、第2の通信制御装置4のバブルパケット送信対象ポートP17にパケットを送信した場合のみである。したがって、図14で示されるように、バブルパケット送信対象ポートP17以外に送信された再返信ポートは、第1の通信制御装置3で新たに割り当てられたポートP22〜P23を用いて送信される。第2の通信制御装置4は、PS NATを用いているため、返信パケットを送信した第1の通信制御装置3のポート以外からの再返信パケットを受け付けることはできない。したがって、第2の情報処理装置2の再返信パケット受付部25は、バブルパケット送信対象ポートP17に送信された再返信パケットのみを受け付けることができる。このようにして、第1の情報処理装置1と、第2の情報処理装置2との間での通信が確立されることとなる。
ここで、第1の情報処理装置1から第2の通信制御装置4に対して再返信パケットを送信する意義について説明する。第1の情報処理装置1が返信パケットを受け取ったとしても、その返信パケットの通過したポートを介して、第1の情報処理装置1と第2の情報処理装置2との間の通信が確実に確立するわけではない。上記の具体例2のように、受け取った返信パケットのうち、バブルパケット送信対象ポートP17を介して送信された返信パケットの経路についてのみ、通信を確立することができるからである。また、次のような状況も考えられる。具体例2において、返信パケットがバブルパケット送信対象ポートP17を用いないで送信された場合(例えば、返信パケットの送信までに、他の機器によってバブルパケット送信対象ポートP17が用いられた場合)であっても、第1の情報処理装置1は、すべての返信パケットを受け付けることができる。しかし、第1の情報処理装置1が、その返信パケットに対する再返信パケットを送信したとしても、その再返信パケットは第2の情報処理装置2で受け付けられず、通信は確立されない。このように、再返信パケットの送信により、第1の情報処理装置1と第2の情報処理装置2との間で確立することができ得るPeer to Peerの通信で用いるポートの位置を確認することができ、また、第1の情報処理装置1と第2の情報処理装置2との間での通信を確立できるかどうかを確認することができる。
(具体例3)
具体例3では、第1の通信制御装置3がSd NATを用いており、第2の通信制御装置4がAS NATを用いている場合について説明する。この具体例3では、バブルパケット送信対象ポートを用いない通信が第1の情報処理装置1と第2の情報処理装置2との間で確立される特殊なケースについて説明する。
図15は、第2の情報処理装置2からの返信パケットの送信について説明するための図である。この返信パケットの送信において、バブルパケット送信対象ポートP17がすでに他の機器によって用いられているため、返信パケットは、バブルパケット送信対象ポートP17を含まない第2の通信制御装置4におけるポートP24〜P25を介して送信されたとする。第1の通信制御装置3がNoフィルタのNATを用いているため、第1の情報処理装置1は、このすべての返信パケットを受け付ける。
図16は、再返信パケットの送信について説明するための図である。図16で示されるように、再返信パケット送信部18が第2の通信制御装置4のポートP24〜P25に対して再返信パケット送信したとする。この場合には、第1の通信制御装置3がSd NATを用いているため、新たに割り当てられたポートP26〜P27を用いて再返信パケットが第2の通信制御装置4のポートP24〜P25に対して送信される。第2の通信制御装置4は、AS NAT、すなわち、Address SensitiveフィルタのNATを用いているため、これらの再返信パケットは第2の通信制御装置4で受け付けられ、第2の情報処理装置2のポートP20〜P21に渡される。その後、第2の情報処理装置2は、再返信パケットのうち、いずれか1つ(例えば、最初に届いたものなど)を選択し、その再返信パケットの送信された経路(例えば、第1の通信制御装置3のポートP26、第2の通信制御装置4のポートP24)を介して第1の情報処理装置1との通信を行うことができる。
この具体例3の状況は、第1の通信制御装置3がNoフィルタ、あるいはASフィルタを用いており、第2の通信制御装置4がNoフィルタ、あるいはASフィルタを用いている場合に妥当する。したがって、これらの場合には、バブルパケット送信ポートP13の位置を正確に把握することができれば、第1の情報処理装置1と第2の情報処理装置2との接続を確実に実現することができることとなる。
また、第1の通信制御装置3で用いているNATがNoフィルタである場合には、すべての返信パケットを第1の情報処理装置1で受け付けることができる。また、第1の通信制御装置3で用いているNATがASフィルタである場合にも、第2の通信制御装置4に対して、バブルパケットを送信しているため、すべての返信パケットを第1の情報処理装置1で受け付けることができる。また、第1の通信制御装置3で用いているNATのポート割り当てルールがCone、あるいはAddress Sensitiveである場合には、第1の情報処理装置1は、受け付けた返信パケットに対して、バブルパケット送信ポートP13を用いた再返信パケットの送信を行うことができる。したがって、第1の通信制御装置3で用いているNATのフィルタがNoフィルタかASフィルタであり、ポート割り当てルールがConeかAddress Sensitiveである場合には、第2の通信制御装置4のNATのタイプによらず、バブルパケット送信ポートP13の位置を正確に把握することができれば、第1の情報処理装置1と第2の情報処理装置2との接続を確実に実現することができることとなる。
以上から、図17で示されるように、本実施の形態による通信システムでは、第1の通信制御装置3と第2の通信制御装置4で用いられるNATのタイプによらずに、通信を確立することができる。その結果、第1の通信制御装置3と第2の通信制御装置4で用いられるNATのタイプに関する判断を行うことなく、第1の情報処理装置1と第2の情報処理装置2との間の通信を確立することができ得る。特に、それらのNATの組み合わせが特定ものである場合には、返信パケットがバブルパケット送信対象ポートを用いないで送信されたとしても、バブルパケット送信ポートの位置を正確に検出できているときには、第1の情報処理装置1と第2の情報処理装置2との間の通信を確立することができる(図17の「◎」の場合)。なお、それ以外のとき(図17の「○」の場合)には、バブルパケット送信ポートの位置を正確に検出できたとしても、バブルパケット送信対象ポートを用いて返信パケットを送信しなければ、通信を確立することはできない。したがって、そのときには、バブルパケット送信対象ポートを用いて返信パケットを送信できるまで、通信を確立するための処理が繰り返されることとなる。なお、図17で示されるように、第1の通信制御装置3、および第2の通信制御装置4は、Open NAT(NATを用いない)であってもよい。
(実施の形態2)
本発明の実施の形態2による通信システムについて、図面を参照しながら説明する。本実施の形態による通信システムは、バブルパケット送信ポートの検出や、ポート幅の検出等をサーバではなく、情報処理装置において行うことによって、サーバの処理負荷を軽減するものである。
本実施の形態による通信システムの構成は、第1の情報処理装置1、第2の情報処理装置2、サーバ6に代えて、それぞれ第1の情報処理装置10、第2の情報処理装置20、サーバ60を備える以外、図1と同様であり、その説明を省略する。
図18は、本実施の形態による第1の情報処理装置10の構成を示すブロック図である。図18において、第1の情報処理装置10は、通信部11と、基準ポート受付部12と、バブルパケット送信部13と、検出用パケット送信部14と、ポート幅検出用パケット送信部15と、返信パケット受付部17と、再返信パケット送信部18と、ポート幅受付部19と、検出用ポート情報受付部71と、バブルパケット送信ポート検出部72と、バブルパケット送信ポート送信部73と、ポート幅検出用ポート情報受付部74と、ポート幅検出部75とを備える。なお、検出用ポート情報受付部71、バブルパケット送信ポート検出部72、バブルパケット送信ポート送信部73、ポート幅検出用ポート情報受付部74、ポート幅検出部75以外の構成および動作は、ポート幅受付部19が第2の情報処理装置20からサーバ60を介して送信されたポート幅情報を受け付ける以外、実施の形態1と同様であり、その説明を省略する。
検出用ポート情報受付部71は、サーバ60から送信された検出用ポート情報を、通信部11を介して受け付ける。ここで、検出用ポート情報とは、検出用パケット送信部14によって送信されたポート検出用パケットが通過した第1の通信制御装置3のポートの位置を示す情報である。
バブルパケット送信ポート検出部72は、検出用ポート情報受付部71が受け付けた検出用ポート情報に基づいて、バブルパケット送信ポートの位置を検出する。バブルパケット送信ポート検出部72は、ポート幅検出部75が検出した第1の通信制御装置3におけるポート幅を用いて、バブルパケット送信ポートの位置を検出する。このバブルパケット送信ポートの位置の検出は、実施の形態1におけるバブルパケット送信ポート検出部65と同様に行われるものであり、その説明を省略する。なお、バブルパケット送信ポート検出部72は、バブルパケット送信ポートの位置を検出できなかった場合に、ポート検出用パケットを再度送信する旨の指示を検出用パケット送信部14に渡し、バブルパケットを再度送信する旨の指示をバブルパケット送信部13に渡す。その結果、検出用パケット送信部14は、その指示に応じてポート検出用パケットを再度送信する。また、バブルパケット送信部13も、その指示に応じてバブルパケットを再度送信する。なお、この再送信は、バブルパケット送信ポート検出部72がバブルパケット送信ポートの位置を検出できるまで、あるいは、所定の上限の回数(例えば、10回など)や、所定の時間(例えば、30秒など)等の所定の制限まで繰り返される。
バブルパケット送信ポート送信部73は、バブルパケット送信ポート検出部72が検出したバブルパケット送信ポートの位置を示すバブルパケット送信ポート情報を、サーバ60を介して第2の情報処理装置20に送信する。
ポート幅検出用ポート情報受付部74は、ポート幅検出用ポート情報を受け付ける。ここで、ポート幅検出用ポート情報とは、ポート幅検出用パケット送信部15によって送信されたポート幅検出用パケットが通過した第1の通信制御装置3のポートの位置を示す情報である。このポート幅検出用ポート情報は、サーバ60から送信されたものである。
ポート幅検出部75は、ポート幅検出用ポート情報受付部74が受け付けたポート幅検出用ポート情報に基づいて、第1の通信制御装置3におけるポート幅を検出する。このポート幅の検出は、実施の形態1におけるポート幅検出部64と同様に行われるものであり、その説明を省略する。
図19は、本実施の形態による第2の情報処理装置20の構成を示すブロック図である。図19において、第2の情報処理装置20は、通信部21と、基準ポート検出用パケット送信部22と、バブルパケット送信ポート受付部23と、返信パケット送信部24と、再返信パケット受付部25と、ポート幅検出用パケット送信部26と、ポート幅検出用ポート情報受付部81と、ポート幅検出部82と、ポート幅送信部83とを備える。なお、ポート幅検出用ポート情報受付部81、ポート幅検出部82、ポート幅送信部83以外の構成および動作は、実施の形態1と同様であり、その説明を省略する。
ポート幅検出用ポート情報受付部81は、ポート幅検出用ポート情報を受け付ける。ここで、ポート幅検出用ポート情報とは、ポート幅検出用パケット送信部26によって送信されたポート幅検出用パケットが通過した第2の通信制御装置4のポートの位置を示す情報である。このポート幅検出用ポート情報は、サーバ60から送信されたものである。
ポート幅検出部82は、ポート幅検出用ポート情報受付部81が受け付けたポート幅検出用ポート情報に基づいて、第2の通信制御装置4におけるポート幅を検出する。このポート幅の検出は、実施の形態1におけるポート幅検出部64と同様に行われるものであり、その説明を省略する。
ポート幅送信部83は、ポート幅検出部82が検出した第2の通信制御装置4におけるポート幅を示す情報であるポート幅情報を、サーバ60を介して第1の情報処理装置10に送信する。
図20は、本実施の形態によるサーバ60の構成を示すブロック図である。図20において、サーバ60は、通信部61と、基準ポート検出部62と、基準ポート送信部63と、検出用ポート検出部91と、検出用ポート情報送信部92と、ポート幅検出用ポート検出部93と、ポート幅検出用ポート情報送信部94とを備える。なお、検出用ポート検出部91、検出用ポート情報送信部92、ポート幅検出用ポート検出部93、ポート幅検出用ポート情報送信部94以外の構成および動作は、実施の形態1と同様であり、その説明を省略する。
検出用ポート検出部91は、第1の情報処理装置10から送信されたポート検出用パケットを受け付け、そのポート検出用パケットに基づいてポート検出用パケットが通過した第1の通信制御装置3のポートの位置を検出する。そのポート位置の検出は、ポート検出用パケットに含まれる(例えば、ポート検出用パケットのヘッダに含まれる)ポート検出用パケットが通過した第1の通信制御装置3のポートの位置を取得することによって行われる。
検出用ポート情報送信部92は、検出用ポート検出部91が検出したポートの位置を示す検出用ポート情報を第1の情報処理装置10に送信する。
ポート幅検出用ポート検出部93は、第1の情報処理装置10から第1の通信制御装置3を介して送信されたポート幅検出用パケットを受け付け、そのポート幅検出用パケットに基づいて、そのポート幅検出用パケットが通過した第1の通信制御装置3のポートの位置を検出する。また、ポート幅検出用ポート検出部93は、第2の情報処理装置20から第2の通信制御装置4を介して送信されたポート幅検出用パケットを受け付け、そのポート幅検出用パケットに基づいて、そのポート幅検出用パケットが通過した第2の通信制御装置4のポートの位置を検出する。
ポート幅検出用ポート情報送信部94は、ポート幅検出用ポート検出部93が検出した、ポート幅検出用パケットが通過した第1の通信制御装置3のポートの位置を示すポート幅検出用ポート情報を第1の情報処理装置10に送信する。また、ポート幅検出用ポート情報送信部94は、ポート幅検出用ポート検出部93が検出した、ポート幅検出用パケットが通過した第2の通信制御装置4のポートの位置を示すポート幅検出用ポート情報を第2の情報処理装置20に送信する。
なお、ポート幅検出用パケットが通過した第1の通信制御装置3におけるポートの位置を検出する第1のポート幅検出用ポート検出部と、ポート幅検出用パケットが通過した第2の通信制御装置4におけるポートの位置を検出する第2のポート幅検出用ポート検出部とを備えてもよい。同様に、ポート幅検出用パケットが通過した第1の通信制御装置3におけるポートの位置を示すポート幅検出用ポート情報を第1の情報処理装置10に送信する第1のポート幅検出用ポート情報送信部と、ポート幅検出用パケットが通過した第2の通信制御装置4におけるポートの位置を示すポート幅検出用ポート情報を第2の情報処理装置20に送信する第2のポート幅検出用ポート情報送信部と備えてもよい。それらを1つで実現したのが、ポート幅検出用ポート検出部93、およびポート幅検出用ポート情報送信部94である。すなわち、ポート幅検出用ポート検出部93のうち、ポート幅検出用パケットが通過した第1の通信制御装置3におけるポートの位置を検出する部分が第1のポート幅検出用ポート検出部となり、ポート幅検出用パケットが通過した第2の通信制御装置4におけるポートの位置を検出する部分が第2のポート幅検出用ポート検出部となる。同様に、ポート幅検出用ポート情報送信部94のうち、ポート幅検出用パケットが通過した第1の通信制御装置3におけるポートの位置を示すポート幅検出用ポート情報を第1の情報処理装置10に送信する部分が第1のポート幅検出用ポート情報送信部となり、ポート幅検出用パケットが通過した第2の通信制御装置4におけるポートの位置を示すポート幅検出用ポート情報を第2の情報処理装置20に送信する部分が第2のポート幅検出用ポート情報送信部となる。
次に、本実施の形態による通信システムの動作について説明する。なお、本実施の形態による通信システムが通信を開始するまでの動作は、バブルパケット送信ポートの検出や、バブルパケット等の再送信の指示を第1の情報処理装置10で行う以外、実施の形態1における図5で示される動作と同様であり、その説明を省略する。
次に、図5のフローチャートにおけるステップS101の処理について、図21を用いて説明する。図21は、送信側、サーバ、受信側の間における情報のやり取りや処理を説明するための図である。なお、ステップS201〜S206の処理は、実施の形態1における図6に関する説明と同様であり、その説明を省略する。
(ステップS501)サーバ60のポート幅検出用ポート検出部93は、第1の情報処理装置10から送信されたポート幅検出用パケットを受け付ける。そして、ポート幅検出用ポート検出部93は、ポート幅検出用パケットのヘッダに含まれる、そのポート幅検出用パケットの通過した第1の通信制御装置3のポートの位置を検出する。
(ステップS502)ポート幅検出用ポート情報送信部94は、ポート幅検出用ポート検出部93によって検出された、ポート幅検出用パケットの通過した第1の通信制御装置3のポートの位置を示す情報であるポート幅検出用ポート情報を第1の情報処理装置10に送信する。そのポート幅検出用ポート情報は、第1の情報処理装置10におけるポート幅検出用ポート情報受付部74で受け付けられる。
(ステップS503)ポート幅検出部75は、ポート幅検出用ポート情報受付部74で受け付けられたポート幅検出用ポート情報に基づいて、第1の通信制御装置3のポート幅を検出する。なお、このポート幅の検出は、実施の形態1と同様に行われるものであり、その説明を省略する。
(ステップS504)サーバ60のポート幅検出用ポート検出部93は、第2の情報処理装置20から送信されたポート幅検出用パケットを受け付ける。そして、ポート幅検出用ポート検出部93は、ポート幅検出用パケットのヘッダに含まれる、そのポート幅検出用パケットの通過した第2の通信制御装置4のポートの位置を検出する。
(ステップS505)ポート幅検出用ポート情報送信部94は、ポート幅検出用ポート検出部93によって検出された、ポート幅検出用パケットの通過した第2の通信制御装置4のポートの位置を示す情報であるポート幅検出用ポート情報を第2の情報処理装置20に送信する。そのポート幅検出用ポート情報は、第2の情報処理装置20におけるポート幅検出用ポート情報受付部81で受け付けられる。
(ステップS506)ポート幅検出部82は、ポート幅検出用ポート情報受付部81で受け付けられたポート幅検出用ポート情報に基づいて、第2の通信制御装置4のポート幅を検出する。なお、このポート幅の検出は、実施の形態1と同様に行われるものであり、その説明を省略する。
(ステップS507)ポート幅送信部83は、第2の通信制御装置4のポート幅を示す情報であるポート幅情報を、そのポート幅情報を第1の情報処理装置10に送信する旨の指示と共にサーバ60に送信する。
(ステップS508)サーバ60の通信部61は、ポート幅情報を受信し、そのポート幅情報を第1の情報処理装置10に送信する。そのポート幅情報は、第1の情報処理装置10におけるポート幅受付部19で受け付けられる。
次に、図5のフローチャートにおけるステップS102の処理について、図22を用いて説明する。図22は、送信側、サーバ、受信側の間における情報のやり取りや処理を説明するための図である。なお、ステップS301〜S303の処理は、ポート検出用パケットがサーバ60における検出用ポート検出部91で受け付けられる以外、実施の形態1における図8に関する説明と同様であり、その説明を省略する。
(ステップS601)サーバ60の検出用ポート検出部91は、第1の情報処理装置10から送信されたポート検出用パケットを受け付ける。そして、検出用ポート検出部91は、ポート検出用パケットのヘッダに含まれる、そのポート検出用パケットの通過した第1の通信制御装置3のポートの位置を検出する。
(ステップS602)検出用ポート情報送信部92は、検出用ポート検出部91によって検出された、ポート検出用パケットの通過した第1の通信制御装置3のポートの位置を示す検出用ポート情報を第1の情報処理装置10に送信する。その検出用ポート情報は、第1の情報処理装置10における検出用ポート情報受付部71で受け付けられる。
(ステップS603)サーバ60の検出用ポート検出部91は、第1の情報処理装置10から送信されたポート検出用パケットを受け付ける。そして、検出用ポート検出部91は、ポート検出用パケットのヘッダに含まれる、そのポート検出用パケットの通過した第1の通信制御装置3のポートの位置を検出する。
(ステップS604)検出用ポート情報送信部92は、検出用ポート検出部91によって検出された、ポート検出用パケットの通過した第1の通信制御装置3のポートの位置を示す検出用ポート情報を第1の情報処理装置10に送信する。その検出用ポート情報は、第1の情報処理装置10における検出用ポート情報受付部71で受け付けられる。
(ステップS605)第1の情報処理装置10のバブルパケット送信ポート検出部72は、ステップS301、S303における、2つのポート検出用パケットの送信で用いられた第1の通信制御装置3のポートの位置と、バブルパケット送信ポートとが連続しているかどうかを判断する。なお、具体的な判断手法については、実施の形態1と同様であり、その説明を省略する。
なお、図22のフローチャートにおいて、第1の情報処理装置10がステップS602で送信された検出用ポート情報を受信してからバブルパケットを送信する場合について説明しているが、検出用ポート情報の受信と、バブルパケットの送信との順序はこれに限定されない。例えば、2回目のポート検出用パケットの送信(ステップS303)を行った後に、1回目の検出用ポート情報の送信(ステップS602)、および2回目の検出用ポート情報の送信(ステップS604)を行ってもよい。また、ステップS601,S603で検出したポート位置を示す検出用ポート情報を、まとめて送信してもよい。
次に、図5のフローチャートにおけるステップS104の処理について、図23を用いて説明する。図23は、送信側、サーバ、受信側の間における情報のやり取りや処理を説明するための図である。なお、ステップS403、S404の処理は、実施の形態1における図9に関する説明と同様であり、その説明を省略する。
(ステップS701)第1の情報処理装置10のバブルパケット送信ポート検出部72は、バブルパケット送信ポートの位置を検出する。なお、具体的な判断手法については、実施の形態1と同様であり、その説明を省略する。
(ステップS702)第1の情報処理装置10のバブルパケット送信ポート送信部73は、バブルパケット送信ポート情報を、そのバブルパケット送信ポート情報を第2の情報処理装置20に送信する旨の指示と共にサーバ60に送信する。
(ステップS703)サーバ60の通信部61は、バブルパケット送信ポート情報を受信し、そのバブルパケット送信ポート情報を第2の情報処理装置20に送信する。そのバブルパケット送信ポート情報は、第2の情報処理装置20におけるバブルパケット送信ポート受付部23で受け付けられる。
なお、本実施の形態における通信システムの動作の具体例については、第1の通信制御装置3、および第2の通信制御装置4におけるポート幅の検出を、それぞれ第1の情報処理装置10、および第2の情報処理装置20で行い、バブルパケット送信ポートの位置の検出を第1の情報処理装置10で行い、それらに付随して行われる処理(例えば、バブルパケット送信ポート情報の第1の情報処理装置10から第2の情報処理装置20までの送信など)を行う以外、実施の形態1における具体例と同様であり、その説明を省略する。
以上から、本実施の形態による通信システムでは、実施の形態1と同様の効果に加え、第1の通信制御装置3、および第2の通信制御装置4におけるポート幅の検出や、バブルパケット送信ポートの位置の検出等を第1の情報処理装置10、および第2の情報処理装置20において行うことによって、サーバ60における処理負担を軽減することができる。特に、待ち受けの必要な処理(例えば、1回目のポート検出用パケットが送信された後に、2回目のポート検出用パケットが送信されるのを待つ処理など)は処理負担が大きいため、そのような待ち受けの必要な処理をサーバで行わないことにより、サーバ60における処理負担が大幅に軽減される。
なお、本実施の形態では、第1の通信制御装置3におけるポート幅の検出を第1の情報処理装置10で行う場合について説明したが、第1の情報処理装置10では、バブルパケット送信ポートの検出、およびバブルパケット送信ポートの送信を行い、第1の通信制御装置3におけるポート幅の検出は、実施の形態1と同様にサーバにおいて行ってもよい。同様に、第2の通信制御装置4におけるポート幅の検出、およびバブルパケット送信ポートの位置の検出のいずれかを、実施の形態1と同様にサーバにおいて行ってもよい。
また、本実施の形態では、第2の通信制御装置4におけるポート幅の検出を第2の情報処理装置20で行う場合について説明したが、第2の通信制御装置4におけるポート幅の検出を第1の情報処理装置10において行ってもよい。このようにすることで、第2の情報処理装置20から第1の情報処理装置10に、サーバ60を介してポート幅情報を送信しなくてよくなる。なお、この場合には、第2の情報処理装置20から送信されたポート幅検出用パケットの通過した第2の通信制御装置4におけるポートの位置を示す情報であるポート幅検出用ポート情報は、サーバ60から第1の情報処理装置10に送信されることになる。
また、本実施の形態では、バブルパケット送信ポートの検出を第1の情報処理装置10で行う場合について説明したが、バブルパケット送信ポートの検出を第2の情報処理装置20において行ってもよい。このようにすることで、第1の情報処理装置10から第2の情報処理装置20に、サーバ60を介してバブルパケット送信ポート情報を送信しなくてよくなる。なお、この場合には、第1の情報処理装置10から送信されたポート検出用パケットの通過した第1の通信制御装置3におけるポートの位置を示す情報である検出用ポート情報は、サーバ60から第2の情報処理装置20に送信されることになる。また、この場合には、第1の通信制御装置3におけるポート幅の検出を第2の情報処理装置20において行ってもよい。
また、本実施の形態では、基準ポート情報がサーバ60から第1の情報処理装置10に送信される場合について説明したが、基準ポート情報は、基準ポート検出用パケットを送信した第2の情報処理装置20に送信されてもよい。この場合には、第2の情報処理装置20からサーバ60を介して、第1の情報処理装置10に基準ポート情報が再度、送信されることになる。
また、本実施の形態において、ポート幅検出用パケット、基準ポート検出用パケット、ポート検出用パケットに、それらのパケットが通過した通信制御装置におけるポートの位置を示す情報を送信する情報処理装置を特定するための情報(例えば、機器IDやIPアドレスなど)が含まれており、サーバ60では、その情報に基づいて、検出したポートの位置を示す情報を送信してもよい。例えば、ポート幅検出用パケット送信部15が送信するポート幅検出用パケットに、ポート幅検出用ポート情報の送信先である第1の情報処理装置10の機器IDが含まれており、ポート幅検出用ポート情報送信部94は、その機器IDに対応する第1の情報処理装置10にポート幅検出用ポート情報を送信してもよい。
(実施の形態3)
本発明の実施の形態3による通信システムについて、図面を参照しながら説明する。本実施の形態による通信システムは、片方の情報処理装置が、通信制御装置を介さないで直接通信を行うものである。
図24は、本実施の形態による通信システムの構成を示すブロック図である。図24において、本実施の形態による通信システムは、第1の情報処理装置1と、第2の情報処理装置2と、第1の通信制御装置3と、サーバ6とを備える。なお、この図24で示される本実施の形態による通信システムは、第2の通信制御装置を備えない以外、実施の形態1による通信システムと同様のものである。また、第1の情報処理装置1、第2の情報処理装置2、サーバ6の構成および動作は、実施の形態1と同様であり、その説明を省略する。
ここで、第2の情報処理装置2は、通信制御装置を介さないで通信を行うものであるため、第2の情報処理装置2は、Full Cone NATの通信制御装置を介して通信を行っているように判断される。したがって、本実施の形態における動作は、実施の形態1において第2の通信制御装置4がFull Cone NATである場合と同様の処理となり、第1の情報処理装置1と第2の情報処理装置2との間の通信を確立することができる(図17において、片方のNATがOpen NATである場合が、本実施の形態に対応する)。
以上のように、本実施の形態による通信システムによれば、第2の情報処理装置2が通信制御装置を介さないで通信を行う場合であっても、第1の情報処理装置1と第2の情報処理装置2との間の通信を確立することができる。
なお、本実施の形態では、実施の形態1の通信システムにおいて、第2の通信制御装置を備えない構成について説明したが、実施の形態2の通信システムにおいて、第2の通信制御装置を備えない構成であってもよい。このような、第2の情報処理装置が通信制御装置を介さない場合であっても、第1の情報処理装置と第2の情報処理装置との間の通信を確立することができる。
また、本実施の形態では、第2の情報処理装置2が通信制御装置を介さないで通信を行う場合について説明したが、第2の情報処理装置2は、通信制御装置を介して通信を行い、第1の情報処理装置1が通信制御装置を介さないで通信を行う場合であっても、同様に第1の情報処理装置1と第2の情報処理装置2との間の通信を確立することができる。
なお、上記各実施の形態において、サーバ6,60が情報処理装置に相手方の通信制御装置のIPアドレスを通知する機能を有する場合について説明したが、この機能は、サーバ6等とは別のサーバにおいて実現されてもよい。すなわち、一方の情報処理装置に他方の通信制御装置のアドレスを通知するサーバと、バブルパケット送信ポートを検出する処理等を行うサーバとは別のサーバであってもよい。すなわち、図25で示される通信システムにおいて、第1の情報処理装置1、および第2の情報処理装置2は、第1の通信制御装置3、および第2の通信制御装置4のアドレスをアドレスサーバ6bから取得し、情報処理装置間の通信を確立する処理においては、サーバ6aを用いるようにしてもよい。
また、一方の情報処理装置に他方の通信制御装置(通信制御装置を備えない場合には情報処理装置)のアドレスを通知する処理や、発呼側の情報処理装置が相手方(着呼側)の情報処理装置を呼び出す処理等において、SIP(Session Initiation Protocol)を用いてもよい。
また、上記各実施の形態では、基準ポートが基準ポート検出用パケットの送信時に、最新に割り当てられるポートであると説明したが、この基準ポートは最新に割り当てられるポートでなくてもよい。例えば、第2の通信制御装置4に接続されている機器が第2の情報処理装置2、20のみであり、第2の通信制御装置4で使用されているポートの数を大体把握することができる場合には、サーバ6、60との通信で用いている第2の通信制御装置4のポートを基準ポートとしてもよい。この場合には、基準ポート検出用パケットは、サーバ6、60と通信を行うパケットとなる。
また、上記各実施の形態では、主にポート検出用パケットをバブルパケットの送信の前後で2回送信する場合について説明したが、ポート検出用パケットをバブルパケットの送信の前後のいずれか1回送信するだけでもよい。この場合には、バブルパケット送信ポートと、ポート検出用パケットの送信で用いられた第1の通信制御装置3のポートとが連続していると仮定してバブルパケット送信ポートの検出を行う。もし、その仮定が正しくなかった場合には、再度、基準ポート検出用パケットの送信等を行うこととなる(ステップS101からの処理を繰り返す)。
また、上記各実施の形態では、バブルパケット送信ポート検出部65、72によって、バブルパケット送信ポートの位置を検出できるかどうか判断してから、バブルパケット送信ポートの位置の検出を行う場合について説明したが、所定の場合には、その判断を行わないで、バブルパケット送信ポートの位置の検出を行ってもよい。その所定の場合とは、例えば、第1の通信制御装置3に第1の情報処理装置1、10以外が接続されておらず、バブルパケット送信ポートと、ポート検出用パケットの送信で用いられた第1の通信制御装置3のポートとが連続する可能性が高い場合などがある。もしこの場合に、検出したバブルパケット送信ポートの位置が誤ったものであり、第1の通信制御装置3で用いているNATのタイプが所定のものであれば、返信パケットを第1の情報処理装置1、10が受け付けられないこととなり、再度、基準ポート検出用パケットの送信から繰り返されることとなる。
また、バブルパケット送信ポート検出部65、72において、バブルパケット送信ポートと、ポート検出用パケットの送信で用いられた第1の通信制御装置3のポートとが連続しないと判断された場合には、上記各実施の形態における説明のように再送信指示を第1の情報処理装置1に送信したり、バブルパケット送信装置13等に再送信の指示を行ったりしてもよく、あるいは、通信の確立の処理を終了してもよく、基準ポート検出用パケットの送信からの処理を再度行ってもよい。
また、バブルパケット送信ポート検出部65、72では、バブルパケット送信ポートと、ポート検出用パケットの送信で用いられた第1の通信制御装置3のポートとが連続であるかどうかの判断を、連続である蓋然性が高い場合には連続であると判断することにより行ってもよい。例えば、第1の通信制御装置3のポート幅が「1」と「2」で変化し得る場合(例えば、時間的に変わる場合)には、ポート検出用パケットの送信で用いられた第1の通信制御装置3のポートの間隔が「2」、「3」、「4」であれば連続である可能性があるため、連続であると判断してその後の処理に進むようにしてもよい。なお、この場合でも、例えば、ポート検出用パケットの送信で用いられた第1の通信制御装置3のポートの間隔が「5」であれば、連続でないと判断される。
また、上記各実施の形態では、ポート幅検出部64、75、82によってポート幅を検出する場合について説明したが、このポート幅は、ユーザによる手入力や所定の記録媒体(例えば、CD−ROMや着脱可能なメモリ等)、通信等によってサーバ6、60や第1の情報処理装置1、10に渡されてもよく、あるいは、第1の通信制御装置3等において記憶されているポート幅を取得してもよい。このことは、第1の情報処理装置1、10等が第2の通信制御装置4等のIPアドレスを知ることについてもいえることである。すなわち、IPアドレスが、ユーザの手入力等によって第1の情報処理装置1、10等に入力されてもよい。
また、上記各実施の形態では、第1の情報処理装置1、10がバブルパケット、およびポート検出用パケットを、第1の情報処理装置1、10のそれぞれ新たなポートを用いて送信する場合について説明したが、例えば、第1の情報処理装置1が第1の通信制御装置3がPort Sensitiveのポート割り当てルールであるNATを用いていることを検知した場合には、第1の情報処理装置1、10は、バブルパケット、およびポート検出用パケットを、第1の情報処理装置1、10の同一のポートから送信してもよい。ただし、この場合には、ポート検出用パケットの送信先のポート(サーバ6、60のポート)を異なるものにしておく必要がある。
また、上記各実施の形態では、返信パケットの送信時に新たに割り当てられた第2の通信制御装置4のポートを用いて返信パケットを送信する場合について説明したが、これは一例であって、返信パケットの送信で用いられる第2の通信制御装置4のポートに、それまでに使用されているポート、例えば、基準ポート検出用パケットの送信で用いられたポートなどが含まれていてもよい。
また、基準ポートからバブルパケット送信対象ポートまでにおいて割り当て可能なポートの数(α)を、バブルパケット等の再送を行うごとに、大きくしてもよい。すなわち、バブルパケット送信部13は、バブルパケット等を再送するごとに、より基準ポートから離れたバブルパケット送信対象ポートに対してバブルパケットを送信してもよい。このようにすることで、返信パケットが送信されるまでにバブルパケット送信対象ポートが使用されることを、より回避しやすくなる。
また、上記各実施の形態では、返信パケット送信部24がバブルパケット送信部13から、サーバ6を介して、基準ポートからバブルパケット送信対象ポートまでにおいて割り当て可能なポートの数(α)を受け付ける場合について説明したが、そのαの値は、サーバ6、60から、バブルパケット送信部13と返信パケット送信部24とに送信されてもよく(この場合には、ポート幅情報が第1の情報処理装置1に送信されなくてもよい)、また、第1の情報処理装置1、10、および第2の情報処理装置2、20において、そのαの値があらかじめ設定されていてもよい。
また、上記各実施の形態では、返信パケット送信部24が、基準ポートからバブルパケット送信対象ポートまでにおいて割り当て可能なポートの数(α)だけの返信パケットを送信すると説明したが、返信パケット送信部24は、α以上の返信パケットを送信してもよく、α以下の返信パケットを送信してもよい。例えば、返信パケット送信部24は、αの値をバブルパケット送信部13からサーバ6、60を介して受け取るのではなく、基準ポートとバブルパケット送信対象ポートとのポート番号の差を受け取り、その差の値に対応する数の返信パケットを送信してもよい。この場合には、返信パケット送信部24は、αの倍数の返信パケットを送信することとなる。ここで、図6のステップS209に関する説明で述べたように、ポート幅検出部68、82で検出した第2の通信制御装置4におけるポート幅が、実際のポート幅の倍数である可能性がある場合には、基準ポートとバブルパケット送信対象ポートとのポート番号の差の値を、返信パケットの個数とした方がよい。バブルパケット送信対象ポートを用いた返信パケットの送信を、より確実に行うことができるからである。また、例えば、第2の情報処理装置2、20が、第2の通信制御装置4において基準ポートの割り当ての後に割り当てられたポートの数を知っている場合には、αからそれだけの数を引いた数の返信パケットを送信してもよい。そのようにしても、返信パケットがバブルパケット送信対象ポートを用いて送信されることになるからである(ただし、第2の通信制御装置4のポート幅の検出が正確である必要がある)。したがって、バブルパケット送信対象ポートの1つ前のポートまでが割り当てられているような場合には、返信パケットは1つだけ送信されてもよい。
また、上記各実施の形態では、返信パケットを受け付けた後に、再返信パケットを送信する場合について説明したが、返信パケットの受け付けによって第1の情報処理装置1、10と第2の情報処理装置2、20との間の通信を確立することができる場合には、再返信パケットを送付しなくてもよい。例えば、第1の情報処理装置1、10がバブルパケット送信対象ポートを用いて送信された返信パケットを受け付けた場合には、バブルパケット送信ポート、およびバブルパケット送信対象ポートを介したPeer to Peer通信が可能であるため、再返信パケットを送信しなくてもよい。
また、上記各実施の形態の具体例では、返信パケットを受け付けることができたかどうかを、第2の情報処理装置2、20から返信パケットを送信した旨をサーバ6、60を介して受け取った時に、返信パケットをすでに受け付けているかどうかで判断したが、例えば、バブルパケットを送信してから所定時間(例えば、15秒など)経過しても返信パケットを受け付けない場合には、返信パケットを受け付けることができなかった(すなわち、通信を確立できなかった)と判断してもよい。また、このことは、再返信パケットについても同様であり、返信パケットを送信してから所定時間経過しても再返信パケットを受け付けていない場合には、再返信パケットを受け付けることができなかった(すなわち、通信を確立できなかった)と判断してもよい。
また、上記各実施の形態では、1つのサーバ6、60によって、基準ポート情報の送信や、バブルパケット送信ポートの検出等を行う場合について説明したが、複数のサーバによってそれらの処理を行ってもよい。
(実施の形態4)
本発明の実施の形態4による通信システムについて、図面を参照しながら説明する。本実施の形態による通信システムでは、上記各実施の形態において説明したバブルパケット送信ポートの位置の検出方法を用いて、SIPによる通信を行う場合について説明する。
図26は、本実施の形態による通信システムの構成を示すブロック図である。図26において、本実施の形態による通信システムは、第1の情報処理装置30と、通信制御装置3と、第2の情報処理装置40と、ポート検出サーバ51と、SIPサーバ52とを備える。なお、通信制御装置3は、NAT機能を有しており、アドレスの変換、ポートの割り当て、パケットのフィルタリング等を行うものであり、上記各実施の形態における第1の通信制御装置3と同様のものであるため、その説明を省略する。
図27は、本実施の形態による第1の情報処理装置30の構成を示すブロック図である。図27において、第1の情報処理装置30は、通信部11と、バブルパケット送信部13と、検出用パケット送信部14と、ポート幅検出用パケット送信部15と、検出用ポート情報受付部71と、バブルパケット送信ポート検出部72と、ポート幅検出用ポート情報受付部74と、ポート幅検出部75と、SIP処理部31とを備える。なお、SIP処理部31以外の構成および動作は、実施の形態2と同様のものであり、その説明を省略する。ただし、バブルパケット送信部13は、基準ポート受付部12が受け付けた基準ポート情報の示す基準ポートの位置に基づいてバブルパケットを送信するのではなく、SIP処理部31から受け取ったバブルパケット送信対象ポートの位置を示す情報に基づいて、そのバブルパケット送信対象ポートに対してバブルパケットを送信する。
SIP処理部31は、SIPに関する処理を行う。具体的には、SIPサーバ52との間で、接続要求の送信や、通信相手のアドレス、ポート番号等の取得等の処理を行う。これらの処理については、従来から行われている処理と同様であるため、その説明を省略する。
第2の情報処理装置40は、SIPサーバ52を介して他のクライアント端末とPeer to Peerの音声通信を行う端末装置(例えば、VoIPの電話端末装置)である。第2の情報処理装置40は、第2の情報処理装置40のIPアドレスと、送信ポートの位置と、受信ポートの位置とをSIPサーバ52を介して他のクライアント端末に教えるものであり、また、他のクライアント端末の受信ポートを、SIPサーバ52を介して受け取り、Peer to Peerの音声通信において、パケットの送信先をその受信ポートに設定することができるものである。ここで、あるクライアント端末の送信ポートとは、そのクライアント端末が他のクライアント端末に対して情報を送信するポートである。また、あるクライアント端末の受信ポートとは、そのクライアント端末が他のクライアント端末から情報を受信するポートである。第2の情報処理装置40は、SIPの一般的なクライアント端末であり、その詳細な説明を省略する。
図28は、本実施の形態によるポート検出サーバ51の構成を示すブロック図である。図28において、ポート検出サーバ51は、第1の情報処理装置30から送信されたバブルパケットの通過した通信制御装置3のポートの位置を検出するための処理を行うものである。ポート検出サーバ51は、通信部61と、検出用ポート検出部91と、検出用ポート情報送信部92と、ポート幅検出用ポート検出部93と、ポート幅検出用ポート情報送信部94とを備える。なお、これらの各構成は、実施の形態2と同様であり、その説明を省略する。
SIPサーバ52は、SIPに関する処理を行うサーバである。SIPに関する処理としては、例えば、クライアントからのアドレス通知を受けてアドレスを登録するレジストラの処理や、クライアントのアドレスを管理するロケーション・サービスの処理、クライアントからの発呼要求を受けて、ロケーション・サービスであて先のアドレスを検索し、あて先のクライアントに転送するプロキシサーバの処理などである。なお、このSIPサーバ52の有する各機能は、2以上のサーバによって実現されてもよい。また、このSIPサーバが、第1の情報処理装置30側と、第2の情報処理装置40側とでそれぞれ備えられていてもよい。この場合には、例えば、第1の情報処理装置30、第1のSIPサーバ、第2のSIPサーバ、第2の情報処理装置40という経路によって、第1の情報処理装置30から第2の情報処理装置40までの情報のリレーが行われる。このSIPサーバ52の処理は、従来から行われている処理と同様であるため、その詳細な説明を省略する。
次に、本実施の形態による通信システムの動作について説明する。図29は、発呼側、ポート検出サーバ51、SIPサーバ52、着呼側の間における情報のやり取りや処理を説明するための図である。なお、図29では、第1の情報処理装置30、通信制御装置3を発呼側であるとし、第2の情報処理装置40を着呼側であるとする。
(ステップS801)発呼側の装置である第1の情報処理装置30と、ポート検出サーバ51との間で、所定のパケットの送受信を行うことにより、発呼側の通信制御装置3のポート幅を検出する。このポート幅の検出の具体的な処理については、実施の形態2の図21におけるステップS206、S501、S502、S503と同様であり、その説明を省略する。
(ステップS802)第1の情報処理装置30は、SIPサーバ52に第2の情報処理装置40との通信を要求する旨の通信要求を送信する。この通信要求では、通信先のクライアント(すなわち、第2の情報処理装置40)のIPアドレスと、送信ポートの位置と、受信ポートの位置とを第1の情報処理装置30に送信する旨の指示が含まれているものとする。
(ステップS803)SIPサーバ52は、第1の情報処理装置30から送信された通信要求を、第2の情報処理装置40に中継する。そして、その通信要求は、第2の情報処理装置40で受信される。
(ステップS804)第2の情報処理装置40は、第2の情報処理装置40のIPアドレス、送信ポートの位置、受信ポートの位置を示す情報を含む通信先情報をSIPサーバ52に送信する。
(ステップS805)SIPサーバ52は、第2の情報処理装置40から送信された通信先情報を、第1の情報処理装置30に中継する。そして、その通信先情報は、第1の情報処理装置30のSIP処理部31で受け付けられる。
(ステップS806)第1の情報処理装置30は、ポート検出パケットや、バブルパケットを送信し、それに対して、ポート検出サーバ51から、検出用ポート情報を受信する。このバブルパケット等の送受信の具体的な処理については、実施の形態2の図22の処理と同様であり、その説明を省略する。なお、本実施の形態では、バブルパケットは、SIP処理部31で受け付けられた通信先情報を用いて、第2の情報処理装置40の送信ポートに送信される。すなわち、本実施の形態では、バブルパケット送信対象ポートは、第2の情報処理装置40の送信ポートである。また、連続性の判断(図21のステップS605)においては、ステップS801で検出された通信制御装置3のポート幅が用いられる。
(ステップS807)第1の情報処理装置30のバブルパケット送信ポート検出部72は、バブルパケット送信ポートの位置を検出可能であるかどうか判断する。ステップS806における連続性の判断(図21のステップS605)において、2つのポート検出用パケットの送信で用いられた通信制御装置3のポートと、バブルパケット送信ポートとが連続していると判断された場合には、バブルパケット送信ポートの位置を検出可能であると判断してステップS808に進み、そうでない場合には、バブルパケット送信ポートの位置を検出可能でないと判断してステップS806に戻る。
(ステップS808)バブルパケット送信ポート検出部72は、バブルパケット送信ポートの位置を検出する。このバブルパケット送信ポートの位置が、発呼側における受信ポートの位置となる。
(ステップS809)SIP処理部31は、通信制御装置3のグローバル側のIPアドレスと、ステップS808で検出されたバブルパケット送信ポート(すなわち、受信ポート)の位置とを含む通信要求を、SIPサーバ52に送信する。なお、通信制御装置3のグローバル側のIPアドレスについては、あらかじめ、ポート幅の検出等の処理において取得しておくものとする。
(ステップS810)SIPサーバ52は、第1の情報処理装置30から送信された通信要求を、第2の情報処理装置40に中継する。そして、その通信要求は、第2の情報処理装置40で受信される。
(ステップS811)第2の情報処理装置40は、受信した通信要求に対して、接続準備が完了した旨の応答を送信する。
(ステップS812)SIPサーバ52は、その応答を第1の情報処理装置30に中継する。
(ステップS813)第1の情報処理装置40は、第2の情報処理装置40から受け取った応答に対する確認を送信する。
(ステップS814)SIPサーバ52は、その確認を第2の情報処理装置40に中継する。このようにして、発呼側と着呼側でのPeer to Peerでの接続を行う準備が完了し、第1の情報処理装置30が第2の情報処理装置40の受信ポートに情報を送信し、第2の情報処理装置40が通信制御装置3の受信ポート(バブルパケット送信ポート)に情報を送信することによって、第1の情報処理装置30と、第2の情報処理装置40との間での、SIPサーバ52等のリレーサーバを介さない通信が行われることになる。
なお、図29の各ステップの処理の順序については、ある程度の任意性がある。例えば、ステップS801のポート幅の検出処理は、ステップS806のバブルパケット等の送受信の処理よりも以前に行われるのであれば、通信要求の送信処理(ステップS802)や、通信先情報の送信処理(ステップS804)の後に実行されてもよい。
次に、本実施の形態による通信システムの動作について、具体例を用いて説明する。この具体例において、第1の情報処理装置30、および第2の情報処理装置40は、あらかじめSIPサーバ52に対して、アドレス情報の登録を行っているものとする。また、第1の情報処理装置30の機器IDは、「AAA@abc...com」であり、第2の情報処理装置40の機器IDは、「BBB@abc...com」であるとする。ここで、この具体例は、機器IDが「AAA@abc...com」等である場合について説明するが、機器IDは、メールアドレスや、電話番号などのように、クライアント端末を特定できる情報であれば、その形式を問わず、どのようなものであってもよい。
まず、第1の情報処理装置30は、ポート検出サーバ51に対して、ポート幅検出用パケットを送信することにより、通信制御装置3のポート幅の検出を行う(ステップS801)。この処理の詳細については、実施の形態2と同様であり、その説明を省略する。
次に、第1の情報処理装置30は、通信要求を、図30で示されるポートP1からSIPサーバ52のポートP3に送信する(ステップS802)。この通信要求は、いわゆる「INVITEリクエスト」と呼ばれるものである。この通信要求には、第1の情報処理装置30の機器ID「AAA@abc...com」と、通信を要求する相手先の第2の情報処理装置40の機器ID「BBB@abc...com」とが含まれる。また、この通信要求には、IPアドレスと、送信ポートの位置と、受信ポートの位置を示す情報を送信する旨の指示が含まれている。なお、第2の情報処理装置40が通信要求を受信することにより、IPアドレス等を送信する旨の指示を受信したと判断してもよい。すなわち、通信要求に指示のコマンドが含まれていなくてもよい。
その通信要求は、SIPサーバ52で受信される。そして、SIPサーバ52は、第2の情報処理装置40の機器ID「BBB@abc...com」に対応するIPアドレスとポート番号を検索し、そのIPアドレスのポート番号に対して、通信要求を送信する(ステップS803)。
第2の情報処理装置40は、その通信要求を受信すると、第2の情報処理装置40のIPアドレスと、送信ポートsPortの位置と、受信ポートrPortの位置とを示す情報である通信先情報をSIPサーバ52のポートP3に送信する(ステップS804)。この通信先情報にも、第1の情報処理装置30の機器IDと、第2の情報処理装置40の機器IDとが含まれている。なお、通常のSIPでは、通信先情報には、通信先の送信ポートの位置は含まれない。したがって、通信先情報に通信先の送信ポートの位置が含まれる点については、SIPの拡張である。
その通信先情報は、SIPサーバ52で受信され、通信制御装置3を介して第1の情報処理装置30に送信される(ステップS805)。その通信先情報は、第1の情報処理装置30のSIP処理部31で受け付けられる。SIP処理部31は、その通信先情報に含まれる第2の情報処理装置40のIPアドレスと、送信ポートsPortの位置を示す情報を、バブルパケット送信部13に渡す。
その後、バブルパケットの送信処理等が行われる(ステップS806)。具体的には、検出用パケット送信部14は、ポート検出用パケットを、第1の情報処理装置30において新たに割り当てられたポートP5から、ポート検出サーバ51のポートP11に送信する。そのポート検出用パケットは、ポート検出サーバ51の検出用ポート検出部91で受け付けられ、ポート検出用パケットのヘッダに含まれる通信制御装置3のポートP8のポート番号が検出される。検出用ポート情報送信部92は、そのポートP8のポート番号をペイロードに含む検出用ポート情報を、通信制御装置3のポートP8に送信する。その検出用ポート情報は、通信制御装置3においてアドレス変換され、第1の情報処理装置30のポートP5に送信される。そして、検出用ポート情報受付部71において、その検出用ポート情報が受け付けられる。
そのポート検出用パケットの送信の直後に、バブルパケット送信部13は、バブルパケットを第2の情報処理装置40のポートsPortに送信する。そのバブルパケットは、第1の情報処理装置30のポートP6から送信される。ここで、ポートP6は、ポートP5と異なるポートであり、バブルパケットの送信時に第1の情報処理装置30において新たに割り当てられたポートである。
そのバブルパケットの送信の直後に、検出用パケット送信部14は、再度、ポート検出用パケットを、ポート検出サーバ51のポートP11に送信する。そのポート検出用パケットは、第1の情報処理装置30のポートP7から送信される。ここで、ポートP7は、ポートP5、ポートP6と異なるポートであり、ポート検出用パケットの送信時に第1の情報処理装置30において新たに割り当てられたポートである。そのポート検出用パケットは、ポート検出サーバ51において受信される。また、1回目のポート検出用パケットの場合と同様にして、検出用ポート情報がポート検出サーバ51から第1の情報処理装置30に送信される。
第1の情報処理装置30の検出用ポート情報受付部71は、この検出用ポート情報を受け付け、2つのポート検出用パケットの送信で用いられた通信制御装置3のポートの位置と、バブルパケット送信ポートとが連続しているかどうか判断する。この判断は、ポートP10と、ポートP8との差が、ステップS801で検出された通信制御装置3のポート幅の2倍に等しいかどうかによって判断される。ポートP10と、ポートP8との差が、通信制御装置3のポート幅の2倍であったとすると、バブルパケット送信ポート検出部72は、2つのポート検出用パケットの送信で用いられた通信制御装置3のポートと、バブルパケット送信ポートとが連続していると判断し、バブルパケット送信ポートを検出可能であると判断して(ステップS807)、そのポートP8のポート番号と、ポートP10のポート番号とのちょうど真ん中のポート番号を、バブルパケット送信ポートの位置として検出する(ステップS808)。バブルパケット送信ポート検出部72は、その検出したバブルパケット送信ポートの位置を、SIP処理部31に渡す。
SIP処理部31は、そのバブルパケット送信ポートの位置と、通信制御装置3のグローバル側のアドレスとを含む通信要求を再度、SIPサーバ52に送信する(ステップS809)。この通信要求も、いわゆる「INVITEリクエスト」と呼ばれるものであり、第1の情報処理装置30の機器IDと、第2の情報処理装置40の機器IDとが含まれる。その通信要求は、SIPサーバ52において中継され、第2の情報処理装置40に送信される(ステップS810)。この通信も、ポートP1〜P4を介して行われる。
第2の情報処理装置40は、その通信要求を受信することによって、発呼側のIPアドレスと、受信ポートの位置とを知ることができる。また、第2の情報処理装置40は、通信要求に対する応答をSIPサーバ52に送信する(ステップS811)。この応答にも、第1の情報処理装置30と、第2の情報処理装置40との機器IDが含まれている。その応答は、SIPサーバ52において中継され、通信制御装置3のポートP2を介して第1の情報処理装置30に送信される(ステップS812)。
通信の相手側からの応答に対して、SIPサーバ52経由で、応答に対する確認を送信する(ステップS813、S814)。この確認の送信は、いわゆる「ACK」と呼ばれるものである。その後、図31で示されるように、第1の情報処理装置30からは、第2の情報処理装置40のポートrPortに情報が送信され、第2の情報処理装置40からは、通信制御装置3のポートP9に情報が送信される。通信制御装置3のポートP9に送信された情報は、通信制御装置3においてアドレス変換され、第1の情報処理装置30のポートP6に送信される。このようにして、第1の情報処理装置30と、第2の情報処理装置40との間において、通信が確立され、両者間における通話が行われることになる。
なお、本実施の形態では、図29で示されるシーケンスを用いて説明したが、情報処理装置の間の通信を確立するシーケンスは、図29で示されるものに限定されない。例えば、ステップS811の応答の送信において、第2の情報処理装置40のIPアドレスを示す情報、および受信ポートの位置を示す情報をSIPサーバ52経由で第1の情報処理装置30に送信してもよい。この場合には、第1の情報処理装置30が、そのSIPサーバ52を経由して送信された情報を用いることにより、第1の情報処理装置30と、第2の情報処理装置40との間の通信が確立される。ただし、ステップS811で送信される第2の情報処理装置40のIPアドレスは、ステップS804で送信されたものと同一のものである。また、第2の情報処理装置40は、ステップS804で送信した通信先情報によって示される送信ポートを、第1の情報処理装置30との通信における送信ポートとして用いるものとする。
以上のように、本実施の形態による通信システムによれば、実施の形態1〜3において説明したバブルパケット送信ポートの位置を検出する手法を用いることによって、通信制御装置3がどのような種類のNATを用いていた場合であっても、SIPによる情報処理装置間の通信を確立することができる。このように、バブルパケット送信ポートの位置を検出する手法は、実施の形態1〜3において説明したシステムやシーケンス以外において用いられてもよい。
なお、本実施の形態では、通信制御装置3のポート幅や、バブルパケット送信ポートの位置の検出を、クライアント側で行う場合について説明したが、実施の形態1と同様に、それらの処理のうち、任意の1以上の処理をサーバ側において行ってもよい。
また、本実施の形態では、ポート検出サーバ51と、SIPサーバ52とを別々に備える場合について説明したが、それらを同一のサーバとして構成してもよい。
また、本実施の形態では、SIPを用いて、情報処理装置間での通信を確立する場合について説明したが、情報処理装置間の通信を確立する他のプロトコルを用いてもよい。その場合にも、ポート検出サーバ51を備えることにより、バブルパケット送信ポートの位置を検出することができ、NAT機能を有する通信制御装置を介した通信を行うことが可能となる。
また、例えば実施の形態4で説明したように、上記各実施の形態において、通信システムは、バブルパケットを送信する情報処理装置と、バブルパケット送信ポートの位置を検出するための処理を行うサーバとを備えた通信システムであって、そのバブルパケット送信ポートの位置を検出するためのものであってもよい。すなわち、本発明における通信システムは、以下のような通信システムであってもよい。この通信システムは、情報処理装置と、情報処理装置の通信を制御する通信制御装置と、サーバとを備えた通信システムであって、情報処理装置が、通信制御装置を介して、通信制御装置に送信履歴を残すためのバブルパケットを送信するバブルパケット送信部と、バブルパケットの送信で用いられる、通信制御装置のポートであるバブルパケット送信ポートの位置を検出するために用いられるポート検出用パケットを、バブルパケット送信部がバブルパケットを送信する前後に、サーバに送信する検出用パケット送信部と、を備え、サーバが、情報処理装置から送信されたポート検出用パケットを受け付け、ポート検出用パケットに基づいてバブルパケット送信ポートの位置を検出するバブルパケット送信ポート検出部を備えた、ものである。この通信システムにおいて、サーバにおいて検出されたバブルパケット送信ポートの位置は、送信部によって情報処理装置に送信されてもよく、あるいは、その他の方法によって情報処理装置に渡されてもよい。その他の方法としては、例えば、バブルパケット送信ポートの位置を示す情報を記録媒体に記録し、情報処理装置がその記録媒体から情報を読み出すことであってもよく、あるいは、サーバにおいてバブルパケット送信ポートの位置を示す情報が表示され、その表示を見ることによって、ユーザが情報処理装置にポートの範囲を示す情報を入力することであってもよい。
また、例えば実施の形態4で説明したように、上記各実施の形態において、通信システムは、バブルパケットを送信する情報処理装置と、バブルパケット送信ポートの位置を検出するための処理を行うサーバとを備えた通信システムであって、そのバブルパケット送信ポートの位置を検出するためのものであってもよい。すなわち、本発明における通信システムは、以下のような通信システムであってもよい。この通信システムは、情報処理装置と、情報処理装置の通信を制御する通信制御装置と、サーバとを備えた通信システムであって、情報処理装置が、通信制御装置を介して、通信制御装置に送信履歴を残すためのバブルパケットを送信するバブルパケット送信部と、バブルパケットの送信で用いられる、通信制御装置のポートであるバブルパケット送信ポートの位置を検出するために用いられるポート検出用パケットを、バブルパケット送信部がバブルパケットを送信する前後に、サーバに送信する検出用パケット送信部と、ポート検出用パケットが通過した通信制御装置のポートの位置を示す検出用ポート情報を受け付ける検出用ポート情報受付部と、検出用ポート情報受付部が受け付けた検出用ポート情報に基づいて、バブルパケット送信ポートの位置を検出するバブルパケット送信ポート検出部と、を備え、サーバが、ポート検出用パケットを受け付け、当該ポート検出用パケットが通過した通信制御装置のポートの位置を検出する検出用ポート検出部と、検出用ポート検出部が検出したポートの位置を示す検出用ポート情報を情報処理装置に送信する検出用ポート情報送信部と、を備えた、ものである。このように、バブルパケット送信ポートの位置の検出をサーバではなく、情報処理装置において行ってもよい。この通信システムにおいて、情報処理装置において検出されたバブルパケット送信ポートの位置は、送信部によって他の情報処理装置に送信されてもよく、あるいは、その他の方法によって他の情報処理装置に渡されてもよい。その他の方法としては、例えば、バブルパケット送信ポートの位置を示す情報を記録媒体に記録し、他の情報処理装置がその記録媒体から情報を読み出すことであってもよく、あるいは、情報処理装置においてバブルパケット送信ポートの位置を示す情報が表示され、その表示を見ることによって、ユーザが他の情報処理装置にバブルパケット送信ポートの位置を示す情報を入力することであってもよい。
また、上記各実施の形態では、各情報処理装置が通信制御装置を1つだけ介して通信回線5に接続される場合について説明したが、複数の通信制御装置を介して通信回線5に接続されている場合(すなわち、多段接続のNAT)であっても、情報処理装置間の通信を確立することができ得る。
また、上記各実施の形態では、第1の通信制御装置3、および第2の通信制御装置4がNATの機能を有するものであると説明したが、第1の通信制御装置3、および第2の通信制御装置4は、NATの機能に代えて、あるいはNATの機能と共にパケットフィルタリングのファイアウォール(Firewall)の機能を有するものであってもよい。ここで、パケットフィルタリングとは、例えば、前述の受信フィルタルールに基づいた受信パケットの選択を行うものである。第1の通信制御装置3が、そのような受信フィルタルールに基づいたファイアウォール機能を有する場合、ローカル側(第1の情報処理装置1等の側)からグローバル側(通信回線5)へのバブルパケットの送信によって第1の通信制御装置3に送信履歴を残すことで、バブルパケット送信ポートに送信された返信パケットを受け付けることができるようになる。また、第2の通信制御装置4が、そのような受信フィルタルールに基づいたファイアウォール機能を有する場合、ローカル側(第2の情報処理装置2等の側)からグローバル側へのバブルパケット送信対象ポートを介した返信パケットの送信によって、第1の情報処理装置1等と、第2の情報処理装置2等との間での通信が確立され得ることとなる。
また、第1の情報処理装置、および第2の情報処理装置は、アプリケーションとしてのファイアウォールの機能を実装するものであってもよく、そうでなくてもよい。
また、上記各実施の形態では、サーバ6等をIPアドレスによって特定する場合について説明したが、サーバ6等をドメイン名(例えば、server.pana.netなど)によって特定してもよい。この場合には、そのドメイン名がDNSサーバを用いて、IPアドレスに変換されることにより、サーバを特定することができる。
また、上記各実施の形態における通信で用いられるプロトコルは、IPv4(Internet Protocol version 4)であってもよく、あるいは、IPv6(Internet Protocol version 6)であってもよい。
また、上記各実施の形態において、各処理(各機能)は、単一の装置(システム)によって集中処理されることによって実現されてもよく、あるいは、複数の装置によって分散処理されることによって実現されてもよい。
また、上記各実施の形態において、通信の要求を出す側がバブルパケットを送信する側である場合について説明したが、通信の要求を受け取る側がバブルパケットを送信する側であってもよい。
また、上記各実施の形態において、各構成要素は専用のハードウェアにより構成してもよく、あるいは、ソフトウェアにより実現可能な構成要素については、プログラム制御によるソフトウェアにより構成してもよい。なお、上記各実施の形態における情報処理装置を実現するソフトウェアは、以下のようなプログラムである。つまり、このプログラムは、コンピュータに、第1の情報処理装置の通信を制御する第1の通信制御装置と、第2の情報処理装置の通信を制御する第2の通信制御装置とを介して、第2の情報処理装置と通信する第1の情報処理装置における処理を実行させるためのプログラムであって、第1の通信制御装置に送信履歴を残すために送信されるバブルパケットの送信の対象の基準となる第2の通信制御装置におけるポートである基準ポートの位置を示す基準ポート情報を受け付ける基準ポート受付ステップと、基準ポート情報に基づいて、第1の通信制御装置を介して、バブルパケットを第2の通信制御装置に送信するバブルパケット送信ステップと、バブルパケットの送信で用いられる、第1の通信制御装置のポートであるバブルパケット送信ポートの位置を検出するために、ポート検出用パケットを送信する検出用パケット送信ステップと、バブルパケット送信ポートに対して、第2の情報処理装置から第2の通信制御装置を介して送信された返信パケットを受け付ける返信パケット受付ステップと、を実行させるためのものである。
また、このプログラムでは、基準ポートは、第2の通信制御装置で割り当てられたポートのうち、基準ポートの位置を検出するための基準ポート検出用パケットが第2の情報処理装置から送信された時点における最新のポートであってもよい。
また、このプログラムでは、検出用パケット送信ステップにおいて、バブルパケット送信ステップでバブルパケットを送信する前後に、ポート検出用パケットを送信してもよい。
また、このプログラムでは、バブルパケット、およびポート検出用パケットが、第1の通信制御装置における異なるポートを用いて送信されてもよい。
また、このプログラムでは、バブルパケット、およびポート検出用パケットが、第1の情報処理装置において新たに割り当てられたポートを用いて送信されてもよい。
また、このプログラムでは、コンピュータに、バブルパケット、およびポート検出用パケットを再度送信する旨の再送信指示を受け付ける再送信指示受付ステップをさらに実行させ、検出用パケット送信ステップでは、再送信指示受付ステップで再送信指示を受け付けた場合に、ポート検出用パケットを再度送信し、バブルパケット送信ステップでは、再送信指示受付ステップで再送信指示を受け付けた場合に、バブルパケットを再度送信してもよい。
また、このプログラムでは、コンピュータに、第1の通信制御装置におけるポート幅を検出するためのポート幅検出用パケットを、第1の通信制御装置を介して送信するポート幅検出用パケット送信ステップをさらに実行させてもよい。
また、このプログラムでは、第2の通信制御装置における、バブルパケットを送信する対象のポートであるバブルパケット送信対象ポートが、基準ポートから所定のポート割り当て後に割り当てられるポートであってもよい。
また、このプログラムでは、コンピュータに、第2の通信制御装置におけるポート幅を示す情報であるポート幅情報を受け付けるポート幅受付ステップをさらに実行させ、バブルパケット送信ステップでは、基準ポートとのポート間隔がポート幅情報の示すポート幅のM倍(Mは1以上の整数)であるバブルパケット送信対象ポートに対してバブルパケットを送信してもよい。
また、このプログラムでは、コンピュータに、返信パケット受付ステップで返信パケットを受け付けた場合に、当該返信パケットの送信で用いられた第2の通信制御装置のポートに対して、再返信パケットを送信する再返信パケット送信ステップをさらに実行させてもよい。
また、このプログラムでは、コンピュータに、ポート検出用パケットが通過した第1の通信制御装置のポートの位置を示す検出用ポート情報を受け付ける検出用ポート情報受付ステップと、検出用ポート情報受付ステップで受け付けた検出用ポート情報に基づいて、バブルパケット送信ポートの位置を検出するバブルパケット送信ポート検出ステップと、バブルパケット送信ポート検出ステップで検出したバブルパケット送信ポートの位置を示すバブルパケット送信ポート情報を送信するバブルパケット送信ポート送信ステップと、をさらに実行させてもよい。
また、このプログラムでは、検出用パケット送信ステップで、バブルパケット送信ポート検出ステップにおいてバブルパケット送信ポートの位置を検出できなかった場合に、ポート検出用パケットを再度送信し、バブルパケット送信ステップで、バブルパケット送信ポート検出ステップにおいてバブルパケット送信ポートの位置を検出できなかった場合に、バブルパケットを再度送信してもよい。
また、このプログラムでは、コンピュータに、第1の通信制御装置におけるポート幅を検出するためのポート幅検出用パケットを、第1の通信制御装置を介して送信するポート幅検出用パケット送信ステップと、ポート幅検出用パケットが通過した第1の通信制御装置のポートの位置を示すポート幅検出用ポート情報を受け付けるポート幅検出用ポート情報受付ステップと、ポート幅検出用ポート情報受付部が受け付けたポート幅検出用ポート情報に基づいて、第1の通信制御装置におけるポート幅を検出するポート幅検出ステップと、をさらに実行させ、バブルパケット送信ポート検出ステップで、ポート幅検出ステップで検出した第1の通信制御装置におけるポート幅を用いてバブルパケット送信ポートの位置を検出してもよい。
上記各実施の形態における情報処理装置を実現するソフトウェアは、以下のようなプログラムである。つまり、このプログラムは、コンピュータに、第1の情報処理装置の通信を制御する第1の通信制御装置と、第2の情報処理装置の通信を制御する第2の通信制御装置とを介して、第2の情報処理装置と通信する第1の情報処理装置における処理を実行させるためのプログラムであって、第1の通信制御装置は、第2の情報処理装置から第2の通信制御装置を介して、第2の通信制御装置に送信履歴を残すためのバブルパケットが送信されるものであり、バブルパケットの送信の対象の基準となる第1の通信制御装置におけるポートである基準ポートの位置を検出するための基準ポート検出用パケットを送信する基準ポート検出用パケット送信ステップと、第2の情報処理装置からのバブルパケットの送信で用いられた、第2の通信制御装置のポートであるバブルパケット送信ポートの位置を示すバブルパケット送信ポート情報を受け付けるバブルパケット送信ポート受付ステップと、バブルパケット送信ポート情報の示すバブルパケット送信ポートに対して返信パケットを送信する返信パケット送信ステップと、を実行させるためのものである。
また、このプログラムでは、返信パケット送信ステップにおいて、返信パケットを、第1の通信制御装置の異なるN個(Nは2以上の整数)のポートを用いて送信してもよい。
また、このプログラムでは、N個のポートが、返信パケットの送信時に、第1の通信制御装置において新たに割り当てられるものであってもよい。
また、このプログラムでは、Nが、第1の通信制御装置における、基準ポートからバブルパケットが送信されたポートまでにおいて割り当て可能なポートの数以上であってもよい。
また、このプログラムでは、コンピュータに、返信パケットの送信で用いられた第1の通信制御装置のポートに対して、第2の情報処理装置から送信された再返信パケットを受け付ける再返信パケット受付ステップをさらに実行させてもよい。
また、このプログラムでは、コンピュータに、第1の通信制御装置におけるポート幅を検出するためのポート幅検出用パケットを、第1の通信制御装置を介して送信するポート幅検出用パケット送信ステップをさらに実行させてもよい。
また、このプログラムでは、コンピュータに、ポート幅検出用パケットが通過した第1の通信制御装置のポートの位置を示すポート幅検出用ポート情報を受け付けるポート幅検出用ポート情報受付ステップと、ポート幅検出用ポート情報受付ステップで受け付けたポート幅検出用ポート情報に基づいて、第1の通信制御装置におけるポート幅を検出するポート幅検出ステップと、ポート幅検出ステップで検出した第1の通信制御装置におけるポート幅を示す情報であるポート幅情報を送信するポート幅送信ステップと、をさらに実行させてもよい。
上記実施の形態におけるサーバを実現するソフトウェアは、以下のようなプログラムである。つまり、このプログラムは、コンピュータに、第1の情報処理装置、および第2の情報処理装置が、第1の情報処理装置の通信を制御する第1の通信制御装置、および第2の情報処理装置の通信を制御する第2の通信制御装置を介して行う通信を確立させるサーバにおける処理を実行させるためのプログラムであって、第1の通信制御装置に送信履歴を残すために第1の情報処理装置が送信するバブルパケットの送信の対象の基準となる第2の通信制御装置におけるポートである基準ポートの位置を検出するために、第2の情報処理装置から第2の通信制御装置を介して送信された基準ポート検出用パケットを受け付け、当該基準ポート検出用パケットに基づいて基準ポートの位置を検出する基準ポート検出ステップと、基準ポート検出ステップで検出した基準ポートの位置を示す基準ポート情報を第1の情報処理装置に送信する基準ポート送信ステップと、第1の情報処理装置から第2の通信制御装置へのバブルパケットの送信で用いられる第1の通信制御装置におけるポートであるバブルパケット送信ポートの位置を検出するために、第1の情報処理装置から送信されたポート検出用パケットを受け付け、ポート検出用パケットに基づいてバブルパケット送信ポートの位置を検出するバブルパケット送信ポート検出ステップと、バブルパケット送信ポート検出ステップで検出したバブルパケット送信ポートの位置を示すバブルパケット送信ポート情報を第2の情報処理装置に送信するバブルパケット送信ポート送信ステップと、を実行させるためのものである。
また、このプログラムでは、コンピュータに、バブルパケット送信ポート検出ステップでバブルパケット送信ポートの位置を検出できなかった場合に、バブルパケット、およびポート検出用パケットを再度送信する旨の指示である再送信指示を第1の情報処理装置に送信する再送信指示送信ステップをさらに実行させてもよい。
また、このプログラムでは、バブルパケット送信ポート検出ステップにおいて、バブルパケットの送信の前後に送信されたポート検出用パケットを受け付け、当該ポート検出用パケットの送信で用いられた第1の通信制御装置における2つのポートと、バブルパケット送信ポートとが連続しているかどうか判断し、連続している場合には、2つのポートで挟まれるポートの位置をバブルパケット送信ポートの位置として検出してもよい。
また、このプログラムでは、バブルパケット送信ポート検出ステップにおいて、ポート検出用パケットの送信で用いられた第1の通信制御装置における2つのポートの間隔が、第1の通信制御装置におけるポート幅の2倍である場合に、連続していると判断してもよい。
また、このプログラムでは、コンピュータに、第1の情報処理装置から第1の通信制御装置を介して送信された第1のポート幅検出用パケットを受け付け、当該第1のポート幅検出用パケットに基づいて第1の通信制御装置におけるポート幅を検出する第1のポート幅検出ステップをさらに実行させ、バブルパケット送信ポート検出ステップでは、第1のポート幅検出部が検出したポート幅を用いて判断を行ってもよい。
また、このプログラムでは、コンピュータに、第2の情報処理装置から第2の通信制御装置を介して送信された第2のポート幅検出用パケットを受け付け、当該第2のポート幅検出用パケットに基づいて第2の通信制御装置におけるポート幅を検出する第2のポート幅検出ステップと、第2のポート幅検出ステップで検出したポート幅を示す情報であるポート幅情報を第1の情報処理装置に送信するポート幅送信ステップと、をさらに実行させてもよい。
また、上記実施の形態におけるサーバを実現するソフトウェアは、以下のようなプログラムである。つまり、このプログラムは、コンピュータに、第1の情報処理装置、および第2の情報処理装置が、第1の情報処理装置の通信を制御する第1の通信制御装置、および第2の情報処理装置の通信を制御する第2の通信制御装置を介して行う通信を確立させるサーバにおける処理を実行させるためのプログラムであって、第1の通信制御装置に送信履歴を残すために第1の情報処理装置が送信するバブルパケットの送信の対象の基準となる第2の通信制御装置におけるポートである基準ポートの位置を検出するために、第2の情報処理装置から第2の通信制御装置を介して送信された基準ポート検出用パケットを受け付け、当該基準ポート検出用パケットに基づいて基準ポートの位置を検出する基準ポート検出ステップと、基準ポート検出ステップで検出した基準ポートの位置を示す基準ポート情報を第1の情報処理装置に送信する基準ポート送信ステップと、第1の情報処理装置から第2の通信制御装置へのバブルパケットの送信で用いられる第1の通信制御装置におけるポートであるバブルパケット送信ポートの位置を検出するために、第1の情報処理装置から送信されたポート検出用パケットを受け付け、当該ポート検出用パケットに基づいてポート検出用パケットが通過した第1の通信制御装置のポートの位置を検出する検出用ポート検出ステップと、検出用ポート検出ステップで検出したポートの位置を示す検出用ポート情報を第1の情報処理装置に送信する検出用ポート情報送信ステップと、を実行させるためのものである。
また、上記各実施の形態における情報処理装置を実現するソフトウェアは、以下のようなプログラムである。つまり、このプログラムは、コンピュータに、情報処理装置、情報処理装置の通信を制御する通信制御装置、およびサーバを備える通信システムを構成する情報処理装置における処理を実行させるためのプログラムであって、通信制御装置を介して、通信制御装置に送信履歴を残すためのバブルパケットを送信するバブルパケット送信ステップと、バブルパケットの送信で用いられる、通信制御装置のポートであるバブルパケット送信ポートの位置を検出するために用いられるポート検出用パケットを、バブルパケット送信ステップでバブルパケットを送信する前後に、サーバに送信する検出用パケット送信ステップと、を実行させるためのものである。
また、上記各実施の形態におけるサーバを実現するソフトウェアは、以下のようなプログラムである。つまり、このプログラムは、コンピュータに、情報処理装置、情報処理装置の通信を制御する通信制御装置、およびサーバを備える通信システムを構成するサーバにおける処理を実行させるためのプログラムであって、通信制御装置に送信履歴を残すために情報処理装置が送信するバブルパケットの送信で用いられる通信制御装置におけるポートであるバブルパケット送信ポートの位置を検出するために、バブルパケットの送信の前後に情報処理装置から送信されたポート検出用パケットを受け付けるステップと、ポート検出用パケットに基づいてバブルパケット送信ポートの位置を検出するステップと、を実行させるためのものである。
また、上記各実施の形態におけるサーバを実現するソフトウェアは、以下のようなプログラムである。つまり、このプログラムは、コンピュータに、情報処理装置、情報処理装置の通信を制御する通信制御装置、およびサーバを備える通信システムを構成するサーバにおける処理を実行させるためのプログラムであって、通信制御装置に送信履歴を残すために情報処理装置が送信するバブルパケットの送信で用いられる通信制御装置におけるポートであるバブルパケット送信ポートの位置を検出するために、バブルパケットの送信の前後に情報処理装置から送信されたポート検出用パケットを受け付けるステップと、ポート検出用パケットが通過した通信制御装置のポートの位置を検出するステップと、ポート検出用パケットが通過した通信制御装置のポートの位置を示す検出用ポート情報を情報処理装置に送信するステップと、を実行させるためのものである。
なお、上記プログラムにおいて、情報を送信する送信ステップや、情報を受け付ける受付ステップなどでは、ハードウェアによって行われる処理、例えば、送信ステップにおけるモデムやインターフェースカードなどで行われる処理(ハードウェアでしか行われない処理)は含まれない。
また、このプログラムは、サーバなどからダウンロードされることによって流通してもよく、所定の記録媒体(例えば、CD−ROMなどの光ディスクや磁気ディスク、半導体メモリなど)に記録されることにより流通してもよい。
また、このプログラムを実行するコンピュータは、単数であってもよく、複数であってもよい。すなわち、集中処理を行ってもよく、あるいは分散処理を行ってもよい。