(57)【特許請求の範囲】
【請求項１】
通信システムを構成するコンピュータに、
ＮＡＰＴ機能を有するルータを介して、第１信号をサーバに送信するステップと、
前記第１信号に対する第１返答を、前記サーバから受信するステップと、
受信した前記第１返答に基づいて、前記第１信号の送信時に前記ルータが用いた第１ポート番号を特定するステップと、
前記第１ポート番号と所定数異なる第２ポート番号に対応したＵＰｎＰによるポートフォワーディングを、前記ルータに設定するステップと、
前記ポートフォワーディングを用いて、第２信号を前記サーバに送信するステップと、
前記第２信号に対する第２返答を、前記サーバから受信するステップと、
前記第２返答を受信した場合、前記第２ポート番号に対応したＵＰｎＰによるポートフォワーディングを用いて、前記通信システムを構成する他のコンピュータと通信するステップとを実行させる、プログラム。
【請求項２】
前記ポートフォワーディングを設定するステップでは、前記第１ポート番号よりも前記所定数大きい前記第２ポート番号に対応した第１ポートフォワーディングと、前記第１ポート番号よりも前記所定数小さい第３ポート番号に対応した第２ポートフォワーディングとを、前記ルータに設定し、
前記第２信号を送信するステップでは、前記第１ポートフォワーディングを用いて前記第２信号を送信すると共に、前記第２ポートフォワーディングを用いて第３信号を送信し、
前記第２返答を受信するステップでは、前記第２返答と、前記第３信号に対する第３返答とのうち少なくともいずれかを受信し、
前記通信するステップでは、
前記第２返答を受信した場合、前記第２ポート番号に対応するポートフォワーディングを用いて前記他のコンピュータと通信し、
前記第３返答を受信した場合、前記第３ポート番号に対応するポートフォワーディングを用いて前記他のコンピュータと通信する、請求項１に記載のプログラム。
【請求項３】
前記ポートフォワーディングを設定するステップでは、前記第１ポートフォワーディングと前記第２ポートフォワーディングとを並列に設定する、請求項２に記載のプログラム。
【請求項４】
前記通信するステップでは、前記ルータに設定済みの前記ポートフォワーディングを引き続き用いて、前記他のコンピュータと通信する、請求項１〜３のいずれか１項に記載のプログラム。
【請求項５】
前記プログラムは、前記コンピュータに、ローカルポート番号をランダムに決定するステップをさらに実行させ、
前記ポートフォワーディングを設定するステップでは、前記ローカルポート番号および前記第２ポート番号に対応したポートフォワーディングを設定する、請求項１〜４のいずれか１項に記載のプログラム。
【請求項６】
前記プログラムは、前記コンピュータに、前記第２ポート番号と同一のローカルポート番号を決定するステップをさらに実行させ、
前記ポートフォワーディングを設定するステップでは、前記ローカルポート番号および前記第２ポート番号に対応したポートフォワーディングを設定する、請求項１〜４のいずれか１項に記載のプログラム。
【請求項７】
通信システムを構成する通信装置であって、
ＮＡＰＴ機能を有するルータを介して、第１信号をサーバに第１送信部と、
前記第１信号に対する第１返答を、前記サーバから受信する第１受信部と、
受信した前記第１返答に基づいて、前記第１信号の送信時に前記ルータが用いた第１ポート番号を特定する特定部と、
前記第１ポート番号と所定数異なる第２ポート番号に対応したＵＰｎＰによるポートフォワーディングを、前記ルータに設定する設定部と、
前記ポートフォワーディングを用いて、第２信号を前記サーバに送信する第２送信部と、
前記第２信号に対する第２返答を、前記サーバから受信する第２受信部と、
前記第２返答を受信した場合、前記第２ポート番号に対応したＵＰｎＰによるポートフォワーディングを用いて、前記通信システムを構成する他の通信装置と通信する通信部とを備えている、通信装置。
【請求項８】
通信システムを構成するコンピュータが実行する通信方法であって、
ＮＡＰＴ機能を有するルータを介して、第１信号をサーバに送信するステップと、
前記第１信号に対する第１返答を、前記サーバから受信するステップと、
受信した前記第１返答に基づいて、前記第１信号の送信時に前記ルータが用いた第１ポート番号を特定するステップと、
前記第１ポート番号と所定数異なる第２ポート番号に対応したＵＰｎＰによるポートフォワーディングを、前記ルータに設定するステップと、
前記ポートフォワーディングを用いて、第２信号を前記サーバに送信するステップと、
前記第２信号に対する第２返答を、前記サーバから受信するステップと、
前記第２返答を受信した場合、前記第２ポート番号に対応したＵＰｎＰによるポートフォワーディングを用いて、前記通信システムを構成する他のコンピュータと通信するステップとを含む、通信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム、通信装置、および通信方法に関する。
【背景技術】
【０００２】
特許文献１に、端末装置が他の通信相手とルータ装置越しにＰ２Ｐ（Pear to Pear）通信する際に、通信に用いるＩＰアドレスとポート番号を適切に処理する通信システム等の一例が開示される。この技術は、いわゆるＵＰｎＰ（Universal Plug and Play）通信以外の技術によって、簡易にＮＡＴ（Network Address Translation）／ＮＡＰＴ（Network Address Port Translation）を超えるＰ２Ｐ通信を実行する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００７−２６６８６３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
異なる端末間でのＰ２Ｐ通信には、ＵＰｎＰによるポートフォワーディングを用いた通信が適している。しかし、近年、ルータに割り当てられるポートに制限が生じるようになったことから、固定値のポート番号を用いる従来の手法では、ＵＰｎＰによるポートフォワーディングをルータに適切に設定できない場合が生じてきた。さらには、ＵＰｎＰによるポートフォワーディングを前提としたＰ２Ｐ通信が正常に行えない場合も生じてきた。この問題は、Ｐ２Ｐ通信以外の通信でも生じ得る。
【０００５】
本発明のいくつかの態様は、ＵＰｎＰによるポートフォワーディングを適切に設定し、他のコンピュータと正常に通信するプログラム、通信装置、および通信方法を提供することを目的の一つとする。
【課題を解決するための手段】
【０００６】
上述した課題を解決するために、本発明の一態様は、通信システムを構成するコンピュータに、ＮＡＰＴ機能を有するルータを介して、第１信号をサーバに送信するステップと、前記第１信号に対する第１返答を、前記サーバから受信するステップと、受信した前記第１返答に基づいて、前記第１信号の送信時に前記ルータが用いた第１ポート番号を特定するステップと、前記第１ポート番号と所定数異なる第２ポート番号に対応したＵＰｎＰによるポートフォワーディングを、前記ルータに設定するステップと、前記ポートフォワーディングを用いて、第２信号を前記サーバに送信するステップと、前記第２信号に対する第２返答を、前記サーバから受信するステップと、前記第２返答を受信した場合、前記第２ポート番号に対応したＵＰｎＰによるポートフォワーディングを用いて、前記通信システムを構成する他のコンピュータと通信するステップとを実行させる、プログラムである。
【０００７】
また、本発明の一態様は、通信システムを構成する通信装置であって、ＮＡＰＴ機能を有するルータを介して、第１信号をサーバに送信する第１送信部と、前記第１信号に対する第１返答を、前記サーバから受信する第１受信部と、受信した前記第１返答に基づいて、前記第１信号の送信時に前記ルータが用いた第１ポート番号を特定する特定部と、前記第１ポート番号と所定数異なる第２ポート番号に対応したＵＰｎＰによるポートフォワーディングを、前記ルータに設定する設定部と、前記ポートフォワーディングを用いて、第２信号を前記サーバに送信する第２送信部と、前記第２信号に対する第２返答を、前記サーバから受信する第２受信部と、前記第２返答を受信した場合、前記第２ポート番号に対応したＵＰｎＰによるポートフォワーディングを用いて、前記通信システムを構成する他の通信装置と通信する通信部とを備えている、通信装置である。
【０００８】
また、本発明の一態様は、通信システムを構成するコンピュータが実行する通信方法であって、ＮＡＰＴ機能を有するルータを介して、第１信号をサーバに送信するステップと、前記第１信号に対する第１返答を、前記サーバから受信するステップと、受信した前記第１返答に基づいて、前記第１信号の送信時に前記ルータが用いた第１ポート番号を特定するステップと、前記第１ポート番号と所定数異なる第２ポート番号に対応したＵＰｎＰによるポートフォワーディングを、前記ルータに設定するステップと、前記ポートフォワーディングを用いて、第２信号を前記サーバに送信するステップと、前記第２信号に対する第２返答を、前記サーバから受信するステップと、前記第２返答を受信した場合、前記第２ポート番号に対応したＵＰｎＰによるポートフォワーディングを用いて、前記通信システムを構成する他のコンピュータと通信するステップとを含む、通信方法である。
【図面の簡単な説明】
【０００９】
【図１】本発明の第１実施形態に係るゲームシステムの構成の一例を示すブロック図である。
【図２】本発明の第１実施形態に係るユーザ端末のハードウェア構成の一例を示す図である。
【図３】本発明の第１実施形態に係るゲームサーバのハードウェア構成の一例を示す図である。
【図４】本発明の第１実施形態に係るユーザ端末の機能構成の一例を示すブロック図である。
【図５】本発明の第１実施形態に係るゲームサーバの機能構成の一例を示すブロック図である。
【図６】本発明の第１実施形態に係るユーザ端末が実行する通信方法の処理手順を示すフローチャートである。
【図７】本実施形態に係るユーザ端末が実行する他の通信方法の処理手順を示すフローチャートである。
【図８】本発明の第２実施形態に係るゲームシステムＡの構成の一例を示すブロック図である。
【発明を実施するための形態】
【００１０】
〔実施形態１〕
（ゲームシステム１の構成）
図１は、本実施形態に係るゲームシステム１の構成の一例を示すブロック図である。ゲームシステム１（通信システム）は、ユーザ端末１０−１（コンピュータ、通信装置）、ユーザ端末１０−２、ユーザ端末１０−３（他のコンピュータ、他の通信装置）、ゲームサーバ３０、ルータ５０−１、ルータ５０−２、およびＳＴＵＮサーバ７０（サーバ）を備えている。これらの装置は、インターネットを含むネットワークＮＷを介して接続される。ユーザ端末１０−１、ユーザ端末１０−２、およびユーザ端末１０−３は、同様の構成であるため、特に区別しない場合には、「−１」、「−２」等の記載を省略してユーザ端末１０として説明する。ここでは３台のユーザ端末１０を図示しているが、任意の台数のユーザ端末１０がゲームサーバ３０に接続されてもよい。ルータ５０−１およびルータ５０−２は、同様の構成であるため、特に区別しない場合には、「−１」、「−２」等の記載を省略してルータ５０として説明する。ここでは２台のルータ５０を図示しているが、任意の台数のルータ５０がゲームサーバ３０に接続されてもよい。
【００１１】
ユーザ端末１０は、ユーザが利用するコンピュータである。ユーザ端末１０の例として、ＰＣ（Personal Computer）、タブレットＰＣ、スマートフォンおよびフィーチャーフォン等の携帯電話機、携帯情報端末（ＰＤＡ：Personal Digital Assistant）、据え置き型ゲーム機、および携帯ゲーム機等が挙げられる。
【００１２】
ゲームサーバ３０は、ユーザ端末１０にゲームを提供するための、サーバ機能を有するコンピュータ（装置）である。ゲームサーバ３０は、ユーザ端末１０に、ゲームサーバ３０と通信しながら進行するゲームを提供する。ゲームは、ユーザ端末１０に予めインストールされたゲームであればよい。あるいは、ゲームは、ゲームを実行するための専用のプログラムをユーザ端末１０にインストールすることが不要なブラウザゲームであってもよい。ブラウザゲームは、ユーザ端末１０においてウェブブラウザを実行することによりウェブブラウザ上に表示されるゲーム画面でプレイすることが可能なゲームのことである。ゲームサーバ３０は、ユーザ端末１０に対するユーザの操作入力に基づいてゲームの各種の処理を実行し、ゲームの進行に応じてゲーム画面をユーザ端末１０に表示させる。
【００１３】
ルータ５０は、ユーザ端末１０と、ゲームサーバ３０およびＳＴＵＮサーバとの通信を仲介するルーティング装置である。ルータ５０は、ＮＡＰＴ（Network Address Port Translation）機能を有するルータである。図１では、ルータ５０−１およびルータ５０−２は、それぞれ別のユーザの自宅に設置される。また、ユーザ端末１０−１および１０−２がルータ５０−１に接続され、ユーザ端末１０−３がルータ５０−３に接続される。
【００１４】
ＳＴＵＮサーバ７０は、ＳＴＵＮ（Session Traversal Utilities for NAT）のプロトコルに対応した、サーバ機能を有するコンピュータ（装置）である。ＳＴＵＮサーバ７０は、当該プロトコルに基づいて、ネットワークＮＷを介して受信したＳＴＵＮパケットの送信元アドレスおよび送信元ポート番号を記憶する。ＳＴＵＮサーバ７０は、さらに、受信したＳＴＵＮパケットの送信元に対して、記憶した送信元アドレスおよび送信元ポート番号を含むＳＴＵＮパケットを返送する。
【００１５】
（ユーザ端末１０のハード構成）
図２は、本実施形態に係るユーザ端末１０のハードウェア構成の一例を示す図である。ユーザ端末１０は、例えば、ＣＰＵ（Central Processing Unit）１１、通信部１２、入力部１３、表示部１４、および記憶部１５を備え、ネットワークＮＷを介して接続されたゲームサーバ３０および他の装置等と通信部１２を介して通信する。これらの構成要素は、バス１６を介して相互に通信可能に接続されている。ＣＰＵ１１は、記憶部１５に記憶された各種プログラムを実行し、ユーザ端末１０の各部を制御する。
【００１６】
通信部１２は、例えば、イーサネット（登録商標）ポートやＵＳＢ等のデジタル入出力ポート、ＷｉＦｉ（登録商標）等の無線通信等を含んで構成される。入力部１３は、例えば、タッチパネルとしてディスプレイと一体に構成されており、ユーザの操作により各種の指示が入力される。また、入力部１３は、キーボードやマウス、タッチパッドや、音声により各種の指示が入力されるマイクロホンなど、その他の入力装置であってもよい。
【００１７】
表示部１４は、画像やテキスト等の情報を表示するディスプレイであり、例えば、液晶ディスプレイパネルまたは有機ＥＬ（Electro Luminescence）ディスプレイパネルなどを含んで構成される。
【００１８】
記憶部１５は、例えば、ＨＤＤ（Hard Disk Drive）、ＳＳＤ（Solid State Drive）、ＥＥＰＲＯＭ（Electrically Erasable Programmable Read-Only Memory）、ＲＯＭ（Read Only Memory）、およびＲＡＭ（Random Access Memory）などを含み、ユーザ端末１０が処理する各種情報および画像、ならびにプログラム（ゲーム制御プログラムを含む）等を記憶する。なお、記憶部１５は、ユーザ端末１０に内蔵されるものに限らず、ＵＳＢ等のデジタル入出力ポート等によって接続された外付け型の記憶装置でもよい。また、ユーザ端末１０は、不図示のスピーカ、音声出力端子、カメラ、ジャイロセンサ、ＧＰＳ（Global Positioning System）受信モジュールなどのハードウェア構成を含んで構成されてもよい。
【００１９】
（ゲームサーバ３０のハードウェア構成）
図３は、本実施形態に係るゲームサーバ３０のハードウェア構成の一例を示す図である。ゲームサーバ３０は、例えば、ＣＰＵ３１、通信部３２、入力部３３、および記憶部３４を備え、ネットワークＮＷを介して接続された複数のユーザ端末１０および他の装置等と通信部３２を介して通信する。これらの構成要素は、バス３５を介して相互に通信可能に接続されている。ＣＰＵ３１は、記憶部３４に記憶されたゲーム制御プログラムを実行し、複数のユーザ端末１０でプレイ可能なゲームを提供する。
【００２０】
通信部３２は、例えば、イーサネット（登録商標）ポートやＵＳＢ等のデジタル入出力ポート、ＷｉＦｉ（登録商標）等の無線通信等を含んで構成され、ＣＰＵ３１による制御に基づいて、ネットワークＮＷを介して複数のユーザ端末１０や他の装置と通信を行う。
【００２１】
入力部３３は、例えば、キーボードやマウス、タッチパッドや、音声により各種の指示が入力されるマイクロホンなど、その他の入力装置である。
【００２２】
記憶部３４は、例えば、ＨＤＤ、ＥＥＰＲＯＭ、ＲＡＭなどを含み、ゲーム制御プログラム、アプリケーションプログラム、ゲームに必要な各種設定情報および履歴情報などを記憶する。なお、記憶部３４は、ゲームサーバ３０に内蔵されるものに限らず、ＵＳＢ等のデジタル入出力ポート等によって接続された外付け型の記憶装置でもよい。また、記憶部３４は、ゲームサーバ３０とは物理的に離れた外部の記憶装置であってもよく、ゲームサーバ３０とインターネットなどの通信網を介して接続されてもよい。また、ゲームサーバ３０は、不図示の表示部、スピーカ、音声出力端子などのハードウェア構成を含んで構成されてもよい。
【００２３】
（ユーザ端末１０の機能構成）
図４は、本実施形態に係るユーザ端末１０の機能構成の一例を示すブロック図である。図４に示すように、ユーザ端末１０は、記憶部１５に記憶されているゲーム制御プログラムをＣＰＵ１１が実行することにより実現される機能構成として、入力受付部１１０、表示制御部１２０、ゲーム管理部１３０、および通信制御部１４０（通信部、第１受信部、第２受信部、第１送信部、第２送信部）を備えている。通信制御部１４０は、ポート番号決定部１４１（特定部）およびポートフォワーディング設定部１４２（設定部）を備えている。
【００２４】
入力受付部１１０は、入力部１３に対するユーザの操作を受け付ける。例えば、入力受付部１１０は、表示部１４に表示されるゲーム画面に対してプレイするユーザの操作を、入力部１３を介して受け付ける。また、入力受付部１１０は、受け付けたユーザの操作に基づく操作情報を、通信部１２を介してゲームサーバ３０へ送信する。操作情報には、コントローラなどの入力部３から出力された信号そのもの（例えば、所定のボタンが押下されたことを示す情報）が含まれる。操作情報には、他にも、入力部３から出力された信号そのものから、ゲームの状況に応じて加工された、ゲーム内で用いられる情報が含まれる。このような情報として、例えば、例えば所定のボタンの押下がキャラクタに所定の動作を実行させることを規定した情報が挙げられる。
【００２５】
表示制御部１２０は、ゲーム管理部１３０が生成した各種のゲーム画像を表示部１４に表示させる。
【００２６】
ゲーム管理部１３０は、ユーザ端末１０において実行されるゲームに関する処理を管理する。
【００２７】
通信制御部１４０は、ユーザ端末１０とゲームサーバ３０との間の通信を制御する。通信制御部１４０は、例えば、入力受付部１１０が受け付けた操作に基づく操作情報を、通信部１２を介してゲームサーバ３０へ送信する。入力受付部１１０は、他にも、ゲームをプレイするユーザのユーザ情報、および、ゲーム処理の実行結果を示す情報なども、通信部１２を介してゲームサーバ３０へ送信する。ユーザ情報として、ユーザを識別するための識別情報（例えば、ユーザＩＤ）、パスワード、およびユーザ名（ゲーム内でのユーザの名称）等が挙げられる。また、通信制御部１４０は、ユーザ端末１０でプレイされるゲームに関する情報を、通信部１２を介してゲームサーバ３０から取得する。通信制御部１４０は、さらに、ユーザ端末１０とＳＴＵＮサーバ７０との間の通信を制御する。
【００２８】
ポート番号決定部１４１は、ユーザ端末１０のローカルポート番号、およびルータ５０のポート番号をそれぞれ決定する。ポートフォワーディング設定部１４２は、ＮＡＰＴに基づくポートフォワーディングを、ルータ５０に設定する。ポートフォワーディングの詳細は後述する。
【００２９】
（ゲームサーバ３０の機能構成）
図５は、本実施形態に係るゲームサーバ３０の機能構成の一例を示すブロック図である。図５に示すように、ゲームサーバ３０は、記憶部３４に記憶されているゲーム制御プログラムをＣＰＵ３１が実行することにより実現される機能構成として、ゲーム管理部３１０、マッチング部３２０、および通信制御部３３０を備えている。
【００３０】
ゲーム管理部３１０は、ゲームサーバ３０において実行されるゲームに関する処理を管理する。マッチング部３２０は、複数のユーザのなから、対戦ゲームにおける対戦相手である２名のユーザをマッチングする。通信制御部３３０は、ゲームサーバ３０とユーザ端末１０との間の通信を制御する。通信制御部３３０は、例えば、ユーザ端末１０から送信された操作情報を、通信部３２を介して受信する。通信制御部３３０は、さらに、受信した操作情報に基づいてゲーム処理した結果を示す、ゲームの状況情報を、通信部３２を介してユーザ端末１０に送信する。状況情報として、例えば、ゲームがサッカーゲームである場合、得点情報、および選手の現在位置情報などが挙げられる。
【００３１】
（ネットワーク接続形態の詳細）
本実施形態では、ゲームサーバ３０、ルータ５０、およびＳＴＵＮサーバ７０には、ネットワークＮＷにおいて一意に識別されるグローバルＩＰアドレスがそれぞれ割り当てられている。本実施形態では、ゲームサーバ３０にＩＰアドレス「１１．１１．１１．１」が割り当てられ、ＳＴＵＮサーバ７０にＩＰアドレス「１１．１１．１１．２」が割り当てられる。ゲームサーバ３０は、例えばポート番号「１０００」を使ってゲームサーバ３０上でプロセスとして実行されるゲームサービスを、各ユーザ端末１０に提供する。ＳＴＵＮサーバ７０は、例えばポート番号「８０」を使ってＳＴＵＮサーバ７０上でプロセスとして実行されるＳＴＵＮサービスを、各ユーザ端末１０に提供する。本実施形態では、さらに、ルータ５０−１にＩＰアドレス「２２．２２．２２．１」が割り当てられ、ルータ５０−２にＩＰアドレス「２２．２２．２２．２」が割り当てられる。
【００３２】
ユーザ端末１０は、これらのグローバルＩＰアドレスを必要に応じて参照することができる。本実施形態では、ユーザ端末１０−１および１０−２は、ゲームサーバ３０、ルータ５０−１、およびＳＴＵＮサーバ７０の各ＩＰアドレスを、事前に参照済みである。また、ユーザ端末１０−３は、ゲームサーバ３０、ルータ５０−２、およびＳＴＵＮサーバ７０の各ＩＰアドレスを、事前に参照済みである。
【００３３】
ユーザ端末１０には、ユーザ端末１０が接続されるプライベートネットワークにおいて一意に識別されるプライベートＩＰアドレスが割り当てられる。図１では、ユーザ端末１０−１にＩＰアドレス「１９２．１６８．１０．１」が割り当てられ、ユーザ端末１０−２にＩＰアドレス「１９２．１６８．１０．２」が割り当てられる。ユーザ端末１０−３にＩＰアドレス「１９２．１６８．１０．１」が割り当てられる。これらのＩＰアドレスはプライベートネットワークの内側においてのみ有効なアドレスであるため、プライベートネットワークの外側に配置されるゲームサーバ３０およびＳＴＵＮサーバ７０が参照することはできない。
【００３４】
以下では、ユーザ端末１０−１を操作するユーザと、ユーザ端末１０−３を操作する他のユーザとがオンラインゲームで対戦する際の、ユーザ端末１０−１とユーザ端末１０−３と間で行われるＰ２Ｐ通信について説明する。
【００３５】
（通信方法の詳細）
図６は、本実施形態に係るユーザ端末１０が実行する通信方法の処理手順を示すフローチャートである。図６に示す一連の処理が開始される前に、ユーザ端末１０−１のユーザは、ゲームのオンライン対戦をプレイするための操作をユーザ端末１０−１に入力する。入力受付部１１０は、この入力を受け付けると、Ｐ２Ｐ通信のための準備処理の実行を通信制御部１４０に指示する。通信制御部１４０は、この指示に基づいて、ルータ５０−１を介して、ＳＴＵＮパケット（第１信号）を、ＳＴＵＮサーバ７０に送信する（Ｓ１０１）。その際、通信制御部１４０は、ＳＴＵＮパケットを、ルータ５０−１によって設定されるポートフォワーディングを用いて送信する。
【００３６】
ＳＴＵＮパケット送信は、次のようにして実現される。まず、ポート番号決定部１４１が、ユーザ端末１０−１のポート番号を決定する。このポート番号は、ユーザ端末１０−１がルータ５０−１と通信するために用いるローカルポート番号である。図６では、ポート番号決定部１４１は、固定のポート番号「５０００」を決定する。通信制御部１４０は、決定されたポート番号「５０００」を用いてＳＴＵＮパケットをルータ５０−１に送信することによって、ルータ５０−１を介してＳＴＵＮパケットをＳＴＵＮサーバ７０に送信するようにルータ５０−１に要求する。
【００３７】
ルータ５０−１は、ユーザ端末１０−１からＳＴＵＮパケットを受信すると、ＮＡＰＴに基づくポートフォワーディングをルータ５０−１に設定する。ここでは、ルータ５０−１は、ＵＰｎＰによって設定されないポートフォワーディングを、第１セッションとしてルータ５０−１に自動的に設定する。ここでいう「自動的に設定」とは、ルータ５０−１がユーザ端末１０−１からの指示を受けることなく、自らルータ５０−１にポートフォワーディングを設定することを意味する。詳細には、ルータ５０−１は、まず、ルータ５０−１のポート番号「２０００」（第１ポート番号）を決定する。このポート番号は、ルータ５０−１がＳＴＵＮサーバ７０などの外部装置とネットワークＮＷを介して通信するために用いるグローバルポート番号である。ここでは、ルータ５０−１は、ルータ５０−１が利用可能な空きポート番号のうちのポート番号「２０００」を、ＳＴＵＮパケット送信用のポート番号として決定する。
【００３８】
次に、ルータ５０−１は、ユーザ端末１０−１から受信したＳＴＵＮパケットの送信元アドレスおよび送信元ポート番号を、ユーザ端末１０−１のＩＰアドレス「１９２．１６８．１０．１」およびポート番号「５０００」から、ルータ５０−１のＩＰアドレス「２２．２２．２２．１」およびポート番号「２０００」に変換するように設定する。ルータ５０−１は、変換後のＳＴＵＮパケットを、パケットの送信先（ＳＴＵＮサーバ７０）に転送する。
【００３９】
ルータ５０−１はさらに、ルータ５０−１のポート番号「２０００」宛に届いたＳＴＵＮパケットの送信先アドレスおよびポート番号を、ルータ５０−１のＩＰアドレス「２２．２２．２２．１」およびポート番号「２０００」から、ユーザ端末１０−１のＩＰアドレス「１９２．１６８．１０．１」およびポート番号「５０００」に変換するように設定する。これにより、ルータ５０−１は、変換後のＳＴＵＮパケットを、パケットの送信先（ユーザ端末１０−１）に転送する。
【００４０】
言い換えれば、ルータ５０−１は、ユーザ端末１０−１がポート番号「５０００」を用いてＳＴＵＮサーバ７０に送信しようとしたＳＴＵＮパケットを、ルータ５０−１がポート番号「２０００」を用いてＳＴＵＮサーバ７０に送信したＳＴＵＮパケットとしてＳＴＵＮサーバ７０に転送するように設定する。さらに、ルータ５０−１のポート番号「２０００」宛に届いたＳＴＵＮパケットを、ポート番号「５０００」を用いるユーザ端末１０−１に転送するように設定する。
【００４１】
ルータ５０−１は、第１セッションとして設定されるポートフォワーディングを用いて、ルータ５０−１から送信要求されたＳＴＵＮパケットを、ＳＴＵＮサーバ７０に転送する。これにより、これにより、通信制御部１４０は、ルータ５０−１を介してＳＴＵＮパケットをＳＴＵＮサーバ７０に送信することができる。また、ＳＴＵＮサーバ７０は、送信元アドレスとしてＩＰアドレス「２２．２２．２２．１」およびポート番号「２０００」を含むＳＴＵＮパケットをルータ５０−１から受信する。ＳＴＵＮサーバ７０は、受信したＳＴＵＮパケットに含まれるＩＰアドレス「２２．２２．２２．１」およびポート番号「２０００」を記憶する。ＳＴＵＮサーバ７０は、さらに、記憶したＩＰアドレス「２２．２２．２２．１」およびポート番号「２０００」を含むＳＴＵＮパケット（第１返答）を、ルータ５０−１のポート番号「２０００」宛に送信する。
【００４２】
通信制御部１４０は、ＳＴＵＮサーバ７０から送信されたＳＴＵＮパケットを受信する（Ｓ１０２）。詳細には、ＳＴＵＮサーバ７０から送信されたＳＴＵＮパケットは、ルータ５０−１のポート番号「２０００」宛に届く。ルータ５０−１は、第１セッションとして設定されたポートフォワーディングを用いて、ＳＴＵＮサーバ７０から受信したＳＴＵＮパケットを、ユーザ端末１０−１のポート番号「５０００」に転送する。これにより、通信制御部１４０は、ルータ５０−１を介してＳＴＵＮパケットをＳＴＵＮサーバ７０から受信することができる。
【００４３】
ポート番号決定部１４１は、受信したＳＴＵＮパケットに含まれるルータ５０−１のポート番号「２０００」を、ＳＴＵＮパケットから特定する（Ｓ１０４）。これにより、通信制御部１４０は、ルータ５０−１がポート番号「２０００」を使用可能であることを把握することができる。
【００４４】
以上の処理と並行して、ルータ５０−１に接続されるユーザ端末１０−２が、シングルプレイゲームを開始するための開始要求を、ゲームサーバ３０に対して送信する。その際、ユーザ端末１０−２は、固定のポート番号「６０００」を用いて、開始要求をルータ５０−１に送信することによって、ルータ５０−１を介して開始要求をゲームサーバ３０に送信するようにルータ５０−１に要求する。
【００４５】
ルータ５０−１は、ユーザ端末１０−２から開始要求を受信すると、ＮＡＰＴに基づくポートフォワーディングをルータ５０−１に設定する。ここでは、ルータ５０−１は、ＵＰｎＰによって設定されないポートフォワーディングを、第２セッションとしてルータ５０−１に自動的に設定する。詳細には、ルータ５０−１は、まず、ルータ５０−１のポート番号「２０２０」を決定する。このポート番号は、ルータ５０−１がゲームサーバ３０などの外部装置とネットワークＮＷを介して通信するために用いるグローバルポート番号である。ここでは、ルータ５０−１は、ルータ５０−１が利用可能な空きポート番号のうちのポート番号「２０２０」を、開始要求送信用のポート番号として決定する。第２セッションは、第１セッションとは独立して、ルータ５０−１が自動的にルータ５０−１に設定するものである。
【００４６】
次に、ルータ５０−１は、ユーザ端末１０−２から受信した開始要求の送信元アドレスおよび送信元ポート番号を、ユーザ端末１０−２のＩＰアドレス「１９２．１６８．１０．２」およびポート番号「６０００」から、ルータ５０−１のＩＰアドレス「２２．２２．２２．１」およびポート番号「２０２０」に変換するように設定する。ルータ５０−１は、変換後の開始要求を、開始要求の送信先であるゲームサーバ３０に転送する。
【００４７】
ルータ５０−１はさらに、ルータ５０−１のポート番号「２０２０」宛に届いたゲームサーバ３０からパケットの送信先アドレスおよびポート番号を、ルータ５０−１のＩＰアドレス「２２．２２．２２．１」およびポート番号「２０２０」から、ユーザ端末１０−２のＩＰアドレス「１９２．１６８．１０．２」およびポート番号「６０００」に変換するように設定する。これにより、ルータ５０−１は、変換後のパケットを、パケットの送信先であるユーザ端末１０−２に転送する。
【００４８】
以上のように、ルータ５０−１は、ルータ５０−１宛に届いたパケットを、ルータ５０−１に設定した各セッションに基づいて、ユーザ端末１０−１およびユーザ端末１０−２のうちいずれか振り分けて転送する。すなわち、ルータ５０−１のポート番号「２０００」宛に届いたパケットは、ポート番号「２０００」に対応する第１セッションに基づいてユーザ端末１０−１に転送し、ルータ５０−１のポート番号「２０２０」宛に届いたパケットは、ポート番号「２０２０」に対応する第２セッションに基づいてユーザ端末１０−２に転送する。このようにして、ルータ５０−１は、ユーザ端末１０−１またはユーザ端末１０−２宛のパケットを、正しい送信先に転送することができる。
【００４９】
ユーザ端末１０−１およびユーザ端末１０−２は、通常、ルータ５０−１が自動的にセッションを設定することを把握することはない。ユーザ端末１０−１またはユーザ端末１０−２がパケットの送信をルータ５０−１に要求すれば、ルータ５０−１は、自動的にセッションを設定することによって、この送信要求に対応する。また、ルータ５０−１に自動的に設定された第１セッションおよび第２セッションには有効期限があるため、第１セッションおよび第２セッションは、設定後に所定時間が過ぎると消滅する。これにより、第１セッションおよび第２セッションの設定時に用いた各ポート番号が開放される。したがって、ルータ５０−１は、開放されたポート番号を他の通信に用いることができるので、少ないポート番号を有効活用することができる。
【００５０】
本実施形態では、ユーザ端末１０−１は、第１セッションおよび第２セッションが自動的に設定された後、ユーザ端末１０−３とＰ２Ｐ通信するための第３セッションをルータ５０−１に設定する。まず、ポート番号決定部１４１は、ＳＴＵＮパケットから特定したポート番号「２０００」と所定数異なるポート番号を決定する。ここでは、所定数は１である。したがって、ポート番号決定部１４１は、ポート番号「２０００」よりも１つ大きいルータ５０−１のポート番号「２００１」（第２ポート番号）を特定する（Ｓ１０６）。
【００５１】
ポートフォワーディング設定部１４２は、特定されたポート番号「２００１」に対応するＵＰｎＰによるポートフォワーディングを、第３セッションとしてルータ５０−１に設定する（Ｓ１０８）。すなわち、ポートフォワーディング設定部１４２は、ＵＰｎＰのプロトコルに従って、ＳＯＡＰメッセージを介してポートフォワーディングをルータ５０−１に設定する。この設定は、次のようにして実現される。まず、ポート番号決定部１４１は、ルータ５０−１のポート番号「２００１」に対応するルータ５０−１の新たなローカルポート番号を決定する。ここでは、「５０００」よりも１つ大きいポート番号「５００１」を特定する。これにより、ルータ５０−１は、ユーザ端末１０−１のポート番号「５００１」およびルータ５０−１のポート番号「２００１」に対応したポートフォワーディングを、ルータ５０−１に設定する。
【００５２】
詳細には、ポートフォワーディング設定部１４２は、ユーザ端末１０−１がポート番号「５００１」を用いてルータ５０−１に送信要求したＳＴＵＮパケットの送信元アドレスおよび送信元ポート番号を、ユーザ端末１０−１のＩＰアドレス「１９２．１６８．１０．１」およびポート番号「５００１」から、ルータ５０−１のＩＰアドレス「２２．２２．２２．１」およびポート番号「２００１」に変換するように、ルータ５０−１に設定する。ポートフォワーディング設定部１４２は、さらに、ルータ５０−１のポート番号「２００１」宛に届いたＳＴＵＮパケットの送信先アドレスおよびポート番号を、ルータ５０−１のＩＰアドレス「２２．２２．２２．１」およびポート番号「２００１」から、ユーザ端末１０−１のＩＰアドレス「１９２．１６８．１０．１」およびポート番号「５００１」に変換するように、ルータ５０−１に設定する。
【００５３】
言い換えれば、ポートフォワーディング設定部１４２は、ユーザ端末１０−１がポート番号「５００１」を用いてＳＴＵＮサーバ７０に送信しようとしたＳＴＵＮパケットを、ルータ５０−１がポート番号「２００１」を用いてＳＴＵＮサーバ７０に送信したＳＴＵＮパケットとしてＳＴＵＮサーバ７０に転送するように、ルータ５０−１に設定する。さらに、ルータ５０−１のポート番号「２００１」宛に届いたＳＴＵＮパケットを、ポート番号「５００１」を用いるユーザ端末１０−１に転送するように、ルータ５０−１に設定する。
【００５４】
通信制御部１４０は、第３セッションとしてルータ５０−１に設定したポートフォワーディングを用いて、ＳＴＵＮパケット（第２信号）をＳＴＵＮサーバ７０に送信する（Ｓ１１０）。ルータ５０−１には第３セッションが設定済みであるため、ルータ５０−１は、新たなセッションを設定することなく、ユーザ端末１０−１から送信要求されたＳＴＵＮパケットを、ルータ５０−１のポート番号「２００１」から送信されたＳＴＵＮパケットとして、ＳＴＵＮサーバ７０に転送する。これにより、通信制御部１４０は、第３セッションに対応するポートフォワーディングを用いて、ＳＴＵＮパケットをＳＴＵＮサーバ７０に送信することができる。また、ＳＴＵＮサーバ７０は、送信元アドレスとしてＩＰアドレス「２２．２２．２２．１」およびポート番号「２００１」を含むＳＴＵＮパケットから受信する。ＳＴＵＮサーバ７０は、受信したＳＴＵＮパケットに含まれるＩＰアドレス「２２．２２．２２．１」およびポート番号「２００１」を記憶する。ＳＴＵＮサーバ７０は、さらに、記憶したＩＰアドレス「２２．２２．２２．１」およびポート番号「２００１」を含むＳＴＵＮパケット（第２返答）を、ルータ５０−１のポート番号「２００１」宛に送信する。
【００５５】
通信制御部１４０は、ＳＴＵＮサーバ７０から送信されたＳＴＵＮパケットを受信する（Ｓ１１２）。詳細には、ＳＴＵＮサーバ７０から送信されたＳＴＵＮパケットは、ルータ５０−１のポート番号「２００１」宛に届く。ルータ５０−１は、第３セッションとして設定されたポートフォワーディングを用いて、ＳＴＵＮサーバ７０から受信したポート番号「２００１」宛のＳＴＵＮパケットを、ユーザ端末１０−１のポート番号「５００１」に転送する。これにより、通信制御部１４０は、ルータ５０−１を介してＳＴＵＮパケットをＳＴＵＮサーバ７０から受信することができる。
【００５６】
ポート番号決定部１４１は、受信したＳＴＵＮパケットに、ルータ５０−１のポート番号「２００１」が含まれるか否かを判定する（Ｓ１１４）。判定結果が偽である場合、図６に示す処理は終了する。この場合、通信制御部１４０は、第３セッションが正しく設定されなかったことを確認する。一方、判定結果が真の場合、通信制御部１４０は、第３セッションを用いて送信したＳＴＵＮパケットに対する返答であるＳＴＵＮパケットの受信に成功したことを特定する（Ｓ１１６）。これにより、通信制御部１４０は、第３セッションが正しくルータ５０−１に設定されたこと、すなわちルータ５０−１がポート番号「２００１」を利用可能であることを確認する。言い換えれば、通信制御部１４０は、第３セッションを用いてＳＴＵＮパケットをサーバ７０に送信した後、ポート番号「２００１」を含むＳＴＵＮパケットをサーバ７０から受信した場合、ポート番号「２００１」に対応したＵＰｎＰによるポートフォワーディングがルータ５０−１に正しく設定されたことを確認する。
【００５７】
この後、通信制御部１４０は、Ｐ２Ｐ通信のための準備処理が完了したことを、ゲーム管理部１３０に通知する。ゲーム管理部１３０は、この通知に基づいて、対戦ゲームのマッチング要求をＳＴＵＮサーバ７０に送信するように、通信制御部１４０に指示する。通信制御部１４０は、この指示に基づいて、ポート番号「２００１」に対応したポートフォワーディングを用いて、対戦ゲームのマッチング要求をゲームサーバ３０に送信する（Ｓ１１８）。第３セッションに有効期限はないため、ルータ５０−１またはユーザ端末１０−１が明示的に第３セッションを開放しない限り、永続的にルータ５０−１に設定され続ける。そこで、通信制御部１４０は、第３セッションとしてゲームサーバ３０に設定済みのポートフォワーディングを用いて、マッチング要求を送信する。これにより、ルータ５０−１は、ユーザ端末１０−１から受信したマッチング要求の送信元アドレスおよび送信元を、ユーザ端末１０−１のＩＰアドレス「１９２．１６８．１０．１」およびポート番号「５００１」から、ルータ５０−１のＩＰアドレス「２２．２２．２２．１」およびポート番号「２００１」に変換する。その結果、ルータ５０−１は、送信元アドレスおよびポート番号としてルータ５０−１のＩＰアドレス「２２．２２．２２．１」およびポート番号「２００１」を含むマッチング要求を、ゲームサーバ３０に転送する。このようにして、通信制御部１４０は、ルータ５０−１を介してマッチング要求をゲームサーバ３０に送信することができる。
【００５８】
本実施形態では、ユーザ端末１０−３が、上述した手順と同様の手順に従って、Ｐ２Ｐ通信のための準備処理を完了するものとする。その際、ユーザ端末１０−３は、ルータ５０−２のポート番号「４００１」に対応したＵＰｎＰによるポートフォワーディングを、ルータ５０−２に設定する。ユーザ端末１０−３は、さらに、ＵＰｎＰによるポートフォワーディングを用いて、ルータ５０−２を介してマッチング要求をゲームサーバ３０に送信する。これによりルータ５０−２は、送信元アドレスおよびポート番号としてルータ５０−２のＩＰアドレス「２２．２２．２２．２」およびポート番号「４００１」を含むマッチング要求を、ゲームサーバ３０に転送する。
【００５９】
ゲームサーバ３０において、通信制御部３３０が、ユーザ端末１０−１から送信されたマッチング要求と、ユーザ端末１０−３から送信されたマッチング要求とを、それぞれ受信する。通信制御部１４０は、受信した各マッチング要求をマッチング部３２０に通知する。マッチング部３２０は、通知受領後の所定のタイミングで、対戦ゲームのマッチング処理を実行する。ここでは、ユーザ端末１０−１のユーザと、ユーザ端末１０−３のユーザとを、対戦ゲームにおける対戦者としてマッチングしたものとする。
【００６０】
通信制御部３３０は、ユーザ端末１０−３から受信したマッチング要求に含まれるＩＰアドレス「２２．２２．２２．２」およびポート番号「４００１」を、ユーザ端末１０−３宛に送信されるデータの送信先アドレスおよび送信先ポート番号として特定する。そして、通信制御部３３０は、ＩＰアドレス「２２．２２．２２．２」およびポート番号「４００１」を含むパケットを、ルータ５０−１のポート番号「２００１」に送信する。同様に、通信制御部３３０は、ユーザ端末１０−１から受信したマッチング要求に含まれるＩＰアドレス「２２．２２．２２．１」およびポート番号「２００１」を、ユーザ端末１０−１宛に送信されるデータの送信先アドレスおよび送信先ポート番号として特定する。そして、通信制御部１４０は、ＩＰアドレス「２２．２２．２２．１」およびポート番号「２００１」を含むパケットを、ルータ５０−２のポート番号「４００１」に送信する。
【００６１】
ルータ５０−１は、ＳＴＵＮサーバ７０からルータ５０−１のポート番号「２００１」宛に届いたパケットを、ポート番号「２００１」に対応したポートフォワーディングを用いることによって、ユーザ端末１０−１のポート番号「５００１」に転送する。これにより、ユーザ端末１０−１の通信制御部１４０は、マッチング相手であるユーザ端末１０−３に送信されるデータの送信先アドレスおよび送信先ポート番号を含むパケットを、ゲームサーバ３０から受信する（Ｓ１２０）。並行して、ルータ５０−１は、ＳＴＵＮサーバ７０からルータ５０−１のポート番号「４００１」宛に届いたパケットを、ポート番号「４００１」に対応したポートフォワーディングを用いることによって、ユーザ端末１０−３のポート番号「５００１」に転送する。これにより、ユーザ端末１０−３の通信制御部１４０は、マッチング相手であるユーザ端末１０−１に送信されるデータの送信先アドレスおよび送信先ポート番号を含むパケットを、ゲームサーバ３０から受信する。
【００６２】
通信制御部１４０は、受信したパケットをゲーム管理部１３０に通知する。これにより、ゲーム管理部１３０は、ユーザ端末１０−２のユーザを対戦相手としたオンライン対戦ゲームを開始する。ゲーム管理部１３０は、対戦ゲームの実行中に、対戦ゲームに関する各種のゲームデータを、随時、通信制御部１４０に出力する。通信制御部１４０は、ポート番号「２００１」に対応したＵＰｎＰによるポートフォワーディングを用いて、ユーザ端末１０−３とＰ２Ｐ通信する（Ｓ１２２）。この際、通信制御部１４０は、対戦ゲームのゲームデータを、ルータ５０−１を介して、ルータ５０−２のポート番号「４００１」に送信する。ルータ５０−２は、「４００１」に対応したポートフォワーディングによって、ポート番号「４００１」宛のゲームデータを、ユーザ端末１０−３のポート番号「６００１」に転送する。これにより、ユーザ端末１０−３は、対戦ゲームに関するゲームデータを、ユーザ端末１０−１からＰ２Ｐ通信によって正しく受信することができる。その結果、ユーザ端末１０−３のゲーム管理部１３０は、受信したゲームデータに基づいて、ユーザ端末１０−３において対戦ゲームを正常に進行させることができる。
【００６３】
並行して、ユーザ端末１０−３のゲーム管理部１３０は、対戦ゲームの実行中に、対戦ゲームに関する各種のゲームデータを、随時、ユーザ端末１０−３の通信制御部１４０に出力する。ユーザ端末１０−３の通信制御部１４０は、ポート番号「４００１」に対応したＵＰｎＰによるポートフォワーディングを用いて、ユーザ端末１０−１とＰ２Ｐ通信する。この際、ユーザ端末１０−３の通信制御部１４０は、対戦ゲームのゲームデータを、ルータ５０−２を介して、ルータ５０−１のポート番号「２００１」に送信する。ルータ５０−１は、「２００１」に対応したポートフォワーディングによって、ポート番号「２００１」宛に届いたゲームデータを、ユーザ端末１０−１のポート番号「５００１」に転送する。これにより、ユーザ端末１０−１は、対戦ゲームに関するゲームデータを、ユーザ端末１０−３からＰ２Ｐ通信によって正しく受信することができる。その結果、ユーザ端末１０−１のゲーム管理部１３０は、受信したゲームデータに基づいて、ユーザ端末１０−１において対戦ゲームを正常に進行させることができる。
【００６４】
（主要な作用効果）
本実施形態に係るユーザ端末１０−１は、ルータ５０−１がＳＴＵＮパケットの送信時に用いたポート番号から所定数離れたポート番号を特定し、特定したポート番号に対応したＵＰｎＰによるポートフォワーディングをルータ５０−１に設定する。ルータ５０−１に割り当てられるポート番号群は、一定の連続した番号群であるため、このような番号特定によって、ルータが実際に利用可能なポート番号を特定できる可能性を高められる。さらに、ルータ５０−１が使用済みのポート番号「２０００」と同じポート番号に対応したポートフォワーディングを設定せずに済むので、ポートフォワーディングを適切にルータ５０−１に設定することができる。また、設定したポートフォワーディングを用いたＳＴＵＮパケットの送信後、それに対する返答であるＳＴＵＮパケットを受信した場合に、すなわちルータ５０−１がポート番号「２００１」を正常に用いることができることを確認できた場合に、初めてＰ２Ｐ通信を実行する。したがって、ルータが実際の利用可能なポート番号「２００１」に対応したポートフォワーディングを用いて、他のユーザ端末１０−３と正常にＰ２Ｐ通信することができる。
【００６５】
なお、ポートフォワーディング設定部１４２は、ルータ５０−１がポート番号「２００１」を使用できない場合、ポートフォワーディングの設定に失敗する。しかし、ＮＡＰＴ機能を有するルータ５０−１は、ポートフォワーディングの設定が失敗しても、ユーザ端末１０−１に何もエラーを通知しない場合がほとんどである。したがって、ユーザ端末１０−１は、ルータ５０−１がポート番号「２００１」を実際に使用できるか否かを、ルータ５０−１の挙動に基づいて直接把握することができない。そこで、上述したように、ポート番号「２００１」に対応したポートフォワーディングが実際に機能するか否かをテストすることが有効である。
【００６６】
本実施形態では、上述した所定数が１であるため、ユーザ端末１０−１は、ルータが実際に用いたポート番号「２０００」の隣のポート番号「２００１」を特定する。ルータ５０−１に割り当てられるポート番号群は、一定の連続した番号群であるため、ポート番号「２０００」が使用可能である場合、その隣のポート番号「２００１」も同様に使用可能である可能性が高い。したがって、ユーザ端末１０−１は、ルータ５０−１が実際に使えるポート番号を特定できる可能性を最大限に高めることができる。
【００６７】
本実施形態では、ユーザ端末１０−１は、ルータ５０−１に設定済みのポートフォワーディングを引き続き用いて、ユーザ端末１０−３とＰ２Ｐ通信する。これにより、Ｐ２Ｐ通信のために、新たなポートフォワーディングを設定せずに済むので、処理負荷を下げると共に、Ｐ２Ｐ通信開始前の通信ラグを減らすことができる。
【００６８】
〔変形例〕
本実施形態は、以下のように変形することができる。これらの変形例は、後述する実施形態２にも等しく適用される。
【００６９】
（通信の他の例）
通信制御部１４０は、ルータ５０−１のポート番号「２００１」に対応したポートフォワーディングを用いて、通信システム１を構成する各種のサーバ（他のコンピュータ）と通信してもよい。例えば、通信制御部１４０は、ポート番号「２００１」ポートフォワーディングを用いて、ゲームサーバ３０（他のコンピュータ）と通信してもよい。この場合、ゲームのシングルプレイのための通信を、安定的に実行することができる。あるいは、通信制御部１４０は、ポート番号「２００１」に対応したポートフォワーディングを用いて、各種のウェブサーのビスを提供するウェブサーバ（他のコンピュータ、不図示）と通信してもよい。このように、ポート番号「２００１」に対応したポートフォワーディングを用いた通信は、Ｐ２Ｐ通信に限らず、任意の形態の通信であり得る。
【００７０】
なお、ユーザ端末１０−１が、ＴＣＰ（Transmission Control Protocol）に従う通信を実行する場合、通信時にユーザ端末１０−１と通信相手とのコネクションが確立されることが前提となる。したがって、ユーザ端末１０−１が通信相手に対してパケットを送信した場合、その送信が成功したか否かに関わらず、ユーザ端末１０−１に対して通信相手からの応答が必ずある。一方、Ｐ２Ｐ通信は、ＵＤＰ（User Datagram Protocol）に従う通信であるため、通信時にユーザ端末１０−１と通信相手とのコネクションは確立していない。そのため、ユーザ端末１０−１が通信相手に対してパケットを送信した場合、ユーザ端末１０−１に対して通信相手からの応答があるとは限らないため、Ｐ２Ｐ通信の安定した継続が望めない恐れがある。しかし、本実施形態の手法に従ってポートフォワーディングを設定すれば、当該ポートフォワーディングを用いることによって安定したＰ２Ｐ通信を行うことができるので、通信相手からの応答の有無を考慮することなくＰ２Ｐ通信を正常に継続できる。このように、本実施形態の手法によりポートフォワーディングを設定することは、特にＰ２Ｐ通信に対して効果が高い。
【００７１】
（所定数の他の例）
上述した所定数は、１に限らず、任意の数であり得る。例えば、２〜１０までのいずれかの数であってもよい。所定数が１以外の数であっても、ユーザ端末１０−１は、ルータ５０−１が実際に用いたポート番号「２０００」に近いポート番号（たとえば２００５）を特定することができる。したがって、ポート番号として、ルータが実際に利用可能な番号を特定できる可能性を高められることに変わりない。
【００７２】
また、ユーザ端末１０−１は、ルータが実際に用いたポート番号「２０００」よりも所定数小さいポート番号（例えば１９９９または１９９５）を特定してもよい。この場合でも、ユーザ端末１０−１は、ルータ５０−１が実際に用いたポート番号「２０００」に近いポート番号を特定することができるので、ポート番号として、ルータが実際に利用可能な番号を特定できる可能性を高められることに変わりない。
【００７３】
（ローカルポート番号のランダム決定）
ポート番号決定部１４１は、第３セッションを設定するためのローカルポート番号を、ランダムに決定してよい。本実施形態では、ポート番号決定部１４１は、１０２５〜６５５３６までのいずれかの番号のうちの任意の空き番号を、ローカルポート番号として用いることができる。例えば、ポート番号決定部１４１は、ポート番号「１０４２５」をランダムに決定したとする。この場合、ポート番号決定部１４１は、ルータ５０−１のポート番号「２００１」およびユーザ端末１０−１のポート番号「１０４２５」に対応するＵＰｎＰによるポートフォワーディングを、ルータ５０−１に設定する。これにより、ユーザ端末１０−１のポート番号が、ルータ５０−１に接続される他の装置のポート番号と競合する可能性を低減することができる。
【００７４】
例えば、ユーザ端末１０−１およびユーザ端末１０−２に加えて、通信機能を有する他の電子機器が、ルータ５０−１に接続されているとする。さらに、他の電子機器は、固定のポート番号「５００１」を用いる仕様の機器であるとする。この場合、ポート番号決定部１４１が、第３セッション用のポート番号として上述した固定のポート番号「５００１」を決定すると、他の電子機器が用いる固定のポート番号「５００１」と競合してしまう。ポート番号決定部１４１が、ユーザ端末１０−１のポート番号をランダムに決定すれば、ポート番号が「５００１」決定される確率は１／（６５５３６−１０２５）となるため、他の電子機器と同一のポート番号「５００１」が決定される可能性は大幅に低減することになる。
【００７５】
（ローカルポート番号決定の他例）
上述したようにローカルポート番号をランダムに決定する例では、１／（６５５３６−１０２５）の確率で、ユーザ端末１０−２と同一のポート番号が決定される可能性がある。したがって、ポート番号が競合する可能性は僅かながら残される。そこで、ポート番号決定部１４１は、ルータ５０−１のポート番号「２００１」を決定した後、これと同一のローカルポート番号「２００１」を決定してもよい。この場合、ポートフォワーディング設定部１４２は、ルータ５０−１のポート番号「２００１」およびユーザ端末１０−１のポート番号「２００１」に対応するＵＰｎＰによるポートフォワーディングを、ルータ５０−１に設定する。
【００７６】
例えば、ユーザ端末１０−１およびユーザ端末１０−２が、いずれも、ＵＰｎＰによるポートフォワーディングをルータ５０−１に設定することを想定する。この際、ユーザ端末１０−１は、ルータ５０−１のポート番号「２００１」を特定し、ユーザ端末１０−２は、ルータ５０−１のポート番号「２０２１」を特定するものとする。これらのポート番号は、ルータ５０−１が実際に用いた異なるポート番号「２０００」および「２０２０」と所定数異なる番号としてそれぞれ特定されるので、互いに相違することが保証される。
【００７７】
本例では、ユーザ端末１０−１は、ルータ５０−１のポート番号「２００１」と同一のローカルポート番号「２００１」を決定し、ユーザ端末１０−２は、ルータ５０−１のポート番号「２０２１」と同一のローカルポート「２０２１」を決定する。このように、ユーザ端末１０−１およびユーザ端末１０−２が、ルータ５０−１の互いに異なるポート番号を特定しているので、ユーザ端末１０−１およびユーザ端末１０−２が、互いに相違するローカルポート番号が決定することが保証される。これにより、ユーザ端末１０−１がＵＰｎＰによるポートフォワーディングを設定するために用いるポート番号が、同一のルータ５０−１に接続されるユーザ端末１０−２がＵＰｎＰによるポートフォワーディングを設定するために用いるポート番号と競合することを、回避することができる。さらには、ローカルポート番号を決定するための所定のアルゴリズムに基づく処理（例えばランダムに決定）の実行が不要になるため、プログラム容量を削減したり、通信処理を高速化したりすることが可能になる。
【００７８】
（通信方法の他の例）
図７は、本実施形態に係るユーザ端末１０が実行する他の通信方法の処理手順を示すフローチャートである。本実施形態に係るユーザ端末１０は、図７に示す一連の処理を実行することもできる。図７のＳ１１００〜Ｓ１１０４までの各処理は、図６のＳ１００〜Ｓ１０４までの各処理と同一であるため、詳細な説明を省略する。
【００７９】
図７の例では、ユーザ端末１０−１は、第１セッションおよび第２セッションが自動的に設定された後、ユーザ端末１０−３とＰ２Ｐ通信するための第３セッションおよび第４セッションをルータ５０−１に設定する。まず、ポート番号決定部１４１は、ＳＴＵＮパケットから特定したポート番号「２０００」よりも所定数大きいポート番号と、所定数小さいポート番号とをそれぞれ決定する。ここでは所定数は１である。したがって、ポート番号決定部１４１は、ポート番号「２０００」よりも１つ大きいルータ５０−１のポート番号「２００１」と、ポート番号「２０００」よりも１つ小さいポート番号「１９９９」（第３ポート番号）とを特定する（Ｓ１１０６）。
【００８０】
ポートフォワーディング設定部１４２は、特定されたポート番号「２００１」に対応する第１ポートフォワーディングと、特定されたポート番号「１９９９」に対応する第２ポートフォワーディングとを、それぞれルータ５０−１に並列に設定する（Ｓ１０８）。ここでは、第１ポートフォワーディングを第３セッションとして設定し、第２ポートフォワーディングを第４セッションとして設定する。第１ポートフォワーディングの設定は、図６におけるポートフォワーディングの設定と同一であるため、詳細な説明は省略する。
【００８１】
第２ポートフォワーディングの設定は、次のようにして実現される。まず、ポート番号決定部１４１は、ルータ５０−１のポート番号「１９９９」に対応するルータ５０−１の新たなローカルポート番号を決定する。ここでは、「５０００」よりも１つ小さいポート番号「４９９９」を特定する。これにより、ルータ５０−１は、ユーザ端末１０−１のポート番号「４９９９」およびルータ５０−１のポート番号「１９９９」に対応した第２ポートフォワーディングを、ルータ５０−１に設定する。
【００８２】
詳細には、ポートフォワーディング設定部１４２は、ユーザ端末１０−１がポート番号「４９９９」を用いてルータ５０−１に送信要求したＳＴＵＮパケットの送信元アドレスおよび送信元ポート番号を、ユーザ端末１０−１のＩＰアドレス「１９２．１６８．１０．１」およびポート番号「４９９９」から、ルータ５０−１のＩＰアドレス「２２．２２．２２．１」およびポート番号「１９９９」に変換するように設定する。ポート番号決定部１４１は、さらに、ルータ５０−１のポート番号「１９９９」宛に届いたＳＴＵＮパケットの送信先アドレスおよびポート番号を、ルータ５０−１のＩＰアドレス「２２．２２．２２．１」およびポート番号「１９９９」から、ユーザ端末１０−１のＩＰアドレス「１９２．１６８．１０．１」およびポート番号「４９９９」に変換するように設定する。
【００８３】
言い換えれば、ポートフォワーディング設定部１４２は、ユーザ端末１０−１がポート番号「４９９９」を用いてＳＴＵＮサーバ７０に送信しようとしたＳＴＵＮパケットを、ルータ５０−１がポート番号「１９９９」を用いてＳＴＵＮサーバ７０に送信したＳＴＵＮパケットとしてＳＴＵＮサーバ７０に転送するようにルータ５０−１に設定する。さらに、ルータ５０−１のポート番号「１９９９」宛に届いたＳＴＵＮパケットを、ポート番号「４９９９」を用いるユーザ端末１０−１に転送するようにルータ５０−１に設定する。
【００８４】
通信制御部１４０は、設定した各ポートフォワーディングを用いて、各ＳＴＵＮパケットをＳＴＵＮサーバ７０に送信する（Ｓ１１１０）。詳細には、第３セッションとしてルータ５０−１に設定した第１ポートフォワーディングを用いて、ＳＴＵＮパケット（第２信号）をＳＴＵＮサーバ７０に送信すると共に、第４セッションとしてルータ５０−１に設定した第２ポートフォワーディングを用いて、他のＳＴＵＮパケット（第３信号）をＳＴＵＮサーバ７０に送信する。
【００８５】
ルータ５０−１には第３セッションおよび第４セッションが設定済みであるため、ルータ５０−１は、新たなセッションを設定することなく、ユーザ端末１０−１から送信要求された各ＳＴＵＮパケットを、ルータ５０−１のポート番号「２００１」から送信されたＳＴＵＮパケットおよびポート番号「１９９９」から送信されたＳＴＵＮパケットとして、ＳＴＵＮサーバ７０に転送する。これにより、通信制御部１４０は、第３セッションに対応する第１ポートフォワーディングを用いてＳＴＵＮパケットをＳＴＵＮサーバ７０に送信すると共に、第４セッションに対応する第２ポートフォワーディングを用いてＳＴＵＮパケットをＳＴＵＮサーバ７０に送信することができる。
【００８６】
ＳＴＵＮサーバ７０は、送信元アドレスとしてＩＰアドレス「２２．２２．２２．１」およびポート番号「２００１」を含むＳＴＵＮパケットと、送信元アドレスとしてＩＰアドレス「２２．２２．２２．１」およびポート番号「１９９９」を含むＳＴＵＮパケットとを、ルータ５０−１から受信する。ＳＴＵＮサーバ７０は、受信した一方のＳＴＵＮパケットに含まれるＩＰアドレス「２２．２２．２２．１」およびポート番号「２００１」と、他方のＳＴＵＮパケットに含まれるＩＰアドレス「２２．２２．２２．１」およびポート番号「１９９９」とを、それぞれを記憶する。ＳＴＵＮサーバ７０は、さらに、記憶したＩＰアドレス「２２．２２．２２．１」およびポート番号「２００１」を含むＳＴＵＮパケット（第２返答）を、ルータ５０−１のポート番号「２００１」宛に送信する。ＳＴＵＮサーバ７０は、さらに、記憶したＩＰアドレス「２２．２２．２２．１」およびポート番号「１９９９」を含む他のＳＴＵＮパケット（第３返答）を、ルータ５０−１のポート番号「１９９９」宛に送信する。
【００８７】
通信制御部１４０は、ＳＴＵＮサーバ７０から送信された各ＳＴＵＮパケットを受信する（Ｓ１１１２）。詳細には、ＳＴＵＮサーバ７０から送信された一方のＳＴＵＮパケットは、ルータ５０−１のポート番号「２００１」宛に届く。ルータ５０−１は、第３セッションとして設定されたポートフォワーディングを用いて、ＳＴＵＮサーバ７０から受信したポート番号「２００１」宛のＳＴＵＮパケットを、ユーザ端末１０−１のポート番号「５００１」に転送する。また、ＳＴＵＮサーバ７０から送信された他方のＳＴＵＮパケットは、ルータ５０−１のポート番号「１９９９」宛に届く。
【００８８】
ルータ５０−１は、第３セッションとして設定されたポートフォワーディングを用いて、ＳＴＵＮサーバ７０から受信したポート番号「２００１」宛のＳＴＵＮパケットを、ユーザ端末１０−１のポート番号「５００１」に転送する。ルータ５０−１は、さらに、第４セッションとして設定されたポートフォワーディングを用いて、ＳＴＵＮサーバ７０から受信したポート番号「１９９９」宛のＳＴＵＮパケットを、ユーザ端末１０−１のポート番号「４９９９」に転送する。これにより、通信制御部１４０は、ルータ５０−１を介して各ＳＴＵＮパケットをＳＴＵＮサーバ７０から受信することができる。
【００８９】
なお、通信制御部１４０は、ルータ５０−１のポート番号「２００１」宛のＳＴＵＮパケットと、ルータ５０−１のポート番号「１９９９」宛のＳＴＵＮパケットとのうち少なくともいずれかを受信すればよい。
【００９０】
ポート番号決定部１４１は、受信した一方のＳＴＵＮパケットに、ルータ５０−１のポート番号「２００１」が含まれるか否かを判定する（Ｓ１１１４）。判定結果が真の場合、通信制御部１４０は、第３セッションを用いて送信したＳＴＵＮパケットに対する返答であるＳＴＵＮパケットの受信に成功したことを特定する（Ｓ１１１６）。これにより、通信制御部１４０は、第３セッションが正しくルータ５０−１に設定されたこと、すなわちルータ５０−１がポート番号「２００１」を利用可能であることを確認する。言い換えれば、通信制御部１４０は、第３セッションを用いてＳＴＵＮパケットをサーバ７０に送信した後、ポート番号「２００１」を含むＳＴＵＮパケットをサーバ７０から受信した場合、ポート番号「２００１」に対応したＵＰｎＰによるポートフォワーディングがルータ５０−１に正しく設定されたことを確認する。
【００９１】
この後実行されるＳ１１１８〜Ｓ１１２２までの処理は、図６のＳ１１８〜Ｓ１２２までの処理と同一であるため、詳細な説明を省略する。以上のように、通信制御部１４０は、ポート番号「２００１」を含むＳＴＵＮパケットを受信した場合、ポート番号「２００１」に対応する第１ポートフォワーディングを用いて、ユーザ端末１０−３とＰ２Ｐ通信することができる。
【００９２】
一方、Ｓ１１１４の判定結果が偽である場合、通信制御部１４０は、第３セッションが正しく設定されなかったことを確認する。そこで、ポート番号決定部１４１は、受信した他方のＳＴＵＮパケットに、ルータ５０−１のポート番号「１９９９」が含まれるか否かを判定する（Ｓ１１２４）。判定結果が偽である場合、図７に示す処理は終了する。この場合、通信制御部１４０は、第４セッションが正しく設定されなかったことを確認する。一方、判定結果が真の場合、通信制御部１４０は、第４セッションを用いて送信したＳＴＵＮパケットに対する返答であるＳＴＵＮパケットの受信に成功したことを特定する（Ｓ１１２６）。これにより、通信制御部１４０は、第４セッションが正しくルータ５０−１に設定されたこと、すなわちルータ５０−１がポート番号「１９９９」を利用可能であることを確認する。言い換えれば、通信制御部１４０は、第４セッションを用いてＳＴＵＮパケットをサーバ７０に送信した後、ポート番号「１９９９」を含むＳＴＵＮパケットをサーバ７０から受信した場合、ポート番号「１９９９」に対応したＵＰｎＰによるポートフォワーディングがルータ５０−１に正しく設定されたことを確認する。
【００９３】
この後実行されるＳ１１２８〜Ｓ１１３２までの処理は、通信制御部１４０が、ゲームサーバ３０との通信およびユーザ端末１０−３とのＰ２Ｐ通信のために、ポート番号「１９９９」に対応する第２ポートフォワーディングを用いる点を除き、本質的にＳ１１１８〜Ｓ１１２２までの処理と同一であるため、詳細な説明は省略する。以上のように、通信制御部１４０は、ポート番号「１９９９」を含むＳＴＵＮパケットを受信した場合、ポート番号「１９９９」に対応する第２ポートフォワーディングを用いて、ユーザ端末１０−３とＰ２Ｐ通信することができる。
【００９４】
図７の例では、ユーザ端末１０−１は、ルータのポート番号「２０００」よりも大きいポート番号「２００１」と、ポート番号「２０００」よりも小さいポート番号「１９９９」とをそれぞれ特定するため、ルータが実際に使えるポート番号を特定できる可能性をより高めることができる。例えばポート番号「２０００」が、ルートが利用可能な番号群のうち最も大きい番号である場合、ポート番号「２００１」はルータが使えない番号になるが、ポート番号「１９９９」は使える可能性がある。この際、「２００１」以外のポート番号として、ポート番号「２００１」よりも大きい番号（例えば２００２）を特定した場合、ポート番号「２００１」が使えなければポート番号「２００２」も必ず使えないため、ポートフォワーディングに用いるルータのポート番号の特定のやり直しが生じることになり、非効率である。本例では、このような問題の発生を未然に避けることができる。
【００９５】
また、図７の例では、ユーザ端末１０−１は、第１ポートフォワーディングおよび第２ポートフォワーディングをルータ５０−１に並列に設定するため、各ポートフォワーディングが有効であるか否かを、並行して確認することができる。したがって、ポート番号「２００１」およびポート番号「１９９９」のうちいずれをルータが利用できるのかを、より素早く特定することができる。
【００９６】
なお、ポートフォワーディング設定部１４２は、第１ポートフォワーディングと、第２ポートフォワーディングとを、個別にかつ順番にルータ５０−１に設定してもよい。この場合、通信制御部１４０は、まず例えばポート番号「２００１」に対応する第１ポートフォワーディングのみをルータ５０−１に設定し、それからポート番号「２００１」を含むＳＴＵＮパケットの受信に成功するか否かを判定する。成功した場合、すなわちポート番号「２００１」を含むＳＴＵＮパケットを受信した場合、第１ポートフォワーディングを用いてユーザ端末１０−３とＰ２Ｐ通信する。したがって、第２ポートフォワーディングをルータ５０−１に設定せずに済むので、処理負荷を下げることができる。通信制御部１４０は、第１ポートフォワーディングを用いたＳＴＵＮパケットの送受信に失敗した場合、次にポート番号「１９９９」に対応した第２ポートフォワーディングをルータ５０−１に設定し、それからポート番号「１９９９」を含むＳＴＵＮパケットの送受信が成功するか否かを判定する。成功した場合、すなわちポート番号「１９９９」を含むＳＴＵＮパケットを受信した場合、第２ポートフォワーディングを用いてユーザ端末１０−３とＰ２Ｐ通信する。
【００９７】
図７の例では、通信制御部１４０は、ポート番号「２００１」を含むＳＴＵＮパケットの受信と、ポート番号「１９９９」を含むＳＴＵＮパケットの受信とを両方とも受信した場合、第１ポートフォワーディングおよび第２ポートフォワーディングのうち所望のいずれかを用いてユーザ端末１０−３とＰ２Ｐ通信すればよい。
【００９８】
〔実施形態２〕
図８は、本発明の第２実施形態に係るゲームシステム１Ａの構成の一例を示すブロック図である。ゲームシステム１Ａは、ユーザ端末１０−１、ユーザ端末１０−２、ユーザ端末１０−３、ゲームサーバ３０、ルータ５０−１、ルータ５０−２、ＳＴＵＮサーバ７０、リレールータ９０−１、およびリレールータ９０−２を備えている。これらの装置は、ネットワークＮＷを介して接続される。リレールータ９０−１およびリレールータ９０−２は同様の構成であるため、特に区別しない場合には、「−１」、「−２」等の記載を省略してリレールータ９０として説明する。
【００９９】
リレールータ９０は、通信事業者の設備に設置され、かつＩＰｖ４−ＩＰｖ６変換機能を有するルータである。図８では、リレールータ９０−１は、ユーザ端末１０−１のユーザが契約する通信事業者の設備に設置され、リレールータ９０−２は、ユーザ端末１０−３のユーザが契約する通信事業者の設備に設置される。ルータ５０−１は、リレールータ９０−１を介してネットワークＮＷに接続され、ルータ５０−２は、リレールータ９０−２を介してネットワークＮＷに接続される。
【０１００】
図８では、ユーザ端末１０とルータ５０との通信はＩＰｖ４を用いて行われ、ルータ５０とリレールータ９０との通信は、ＩＰｖ６を用いて行われ、ネットワークＮＷを介したリレールータ９０と他の装置（ＳＴＵＮサーバ７０など）との通信は、ＩＰｖ４を用いて行われる。ルータ５０は、ＮＡＰＴ機能に加えて、ＩＰｖ４−ＩＰｖ６変換機能をさらに有する。したがって、ＵＰｎＰに対応したポートフォワーディングが設定されるのは、リレールータ９０ではなく、ＮＡＰＴ機能を有するルータ５０の方である。
【０１０１】
上述したＩＰｖ４−ＩＰｖ６変換機能として、例えば、ＭＡＰ−Ｅ（Mapping of Address and Port Encapsulation）が挙げられる。この例では、ルータ５０は、ユーザ端末１０から受信したＩＰｖ４のパケットを、ＩＰｖ６のパケットでカプセル化することによって、ＩＰｖ６のネットワークを通過可能なＩＰｖ６のパケットに変換する。ルータ５０は、変換後のＩＰｖ６のパケットをリレールータ９０に転送する。リレールータ９０は、ルータ５０から受信したＩＰｖ６のパケットのカプセル化を解除することによって、ネットワークＮＷを通過可能なＩＰｖ４のパケットに変換する。これにより、リレールータ９０は、変換後のＩＰｖ４のパケットを、ＳＴＵＮサーバ７０などの送信先に正しく転送することができる。
【０１０２】
また、リレールータ９０は、ＳＴＵＮサーバ７０などの送信元から受信したＩＰｖ４のパケットを、ＩＰｖ６のパケットでカプセル化することによって、ＩＰｖ６のネットワークを通過可能なＩＰｖ６のパケットに変換する。リレールータ９０は、変換後のＩＰｖ６のパケットをルータ５０に転送する。ルータ５０は、リレールータ９０から受信したＩＰｖ６のパケットのカプセル化を解除することによって、ユーザ端末１０−１接続される配プライベートネットワークを通過可能なＩＰｖ４のパケットに変換する。これにより、ルータ５０−１は、変換後のＩＰｖ４のパケットを、ユーザ端末１０に正しく転送することができる。
【０１０３】
図８に示すようなＩＰｖ４およびＩＰｖ６が共存した通信システム１では、１つのリレールータ９０に対して複数のルータ５０が接続される。さらに、それぞれのルータ５０には、同一のグローバルＩＰアドレスが割り当てられると共に、各ルータ５０に対して一定数のポート番号が割り当てられる。したがって、ルータ５０が利用可能なポート番号が制限される。換言すれば、ルータ５０が利用可能なポート番号の数は、実施形態１の場合に比べて大幅に少なくなる。また、ＩＰｖ４およびＩＰｖ６が共存下では、各ルータ５０に対して、一定数の連続したまとまった数のポート番号が割り当てられる。
【０１０４】
本実施形態では、ユーザ端末１０−１が実行する通信方法は、実施形態１における通信方法と基本的に同一である。したがって、ユーザ端末１０−１は、ルータ５０が利用可能なポート番号が制限される場合であっても、受信したＳＴＵＮパケットに含まれるルータ５０のポート番号と所定数異なるポート番号を特定することによって、ルータ５０が実際に用いることができるポート番号を特定できる可能性を高めることができる。これにより、実施形態１と同様に、ＵＰｎＰによるポートフォワーディングをルータ５０に正しく設定できる可能性を高めることができる。さらに、実施形態１と同様に、ルータが実際に利用可能なポート番号に対応したポートフォワーディングを用いて、ゲームサーバ３０と通信したり、他のユーザ端末１０−３と正常にＰ２Ｐ通信したりすることができる。
【０１０５】
なお、ＩＰｖ４−ＩＰｖ６変換機能は、ＭＡＰ−Ｅに限らず、ＭＡＰ−Ｔ（Mapping of Address and Port Translation）であってもよい。
【０１０６】
〔まとめ〕
以上に例示した形態から、例えば以下の構成が把握される。なお、各態様の理解を容易にするために、以下では、図面の参照符号を便宜的に括弧書で付記するが、本発明を図示の態様に限定する趣旨ではない。
【０１０７】
本発明の一態様に係るプログラムは、通信システム（１）を構成するコンピュータ（１０−１）に、ＮＡＰＴ機能を有するルータ（５０−１）を介して、第１信号をサーバ（７０）に送信するステップ（Ｓ１００）と、前記第１信号に対する第１返答を、前記サーバ（７０）から受信するステップ（Ｓ１０２）と、受信した前記第１返答に基づいて、前記第１信号の送信時に前記ルータ（５０−１）が用いた第１ポート番号を特定するステップ（Ｓ１０４）と、前記第１ポート番号と所定数異なる第２ポート番号に対応したＵＰｎＰによるポートフォワーディングを、前記ルータ（５０−１）に設定するステップ（Ｓ１０８）と、前記ポートフォワーディングを用いて、第２信号を前記サーバ（７０）に送信するステップ（Ｓ１１０）と、前記第２信号に対する第２返答を、前記サーバ（７０）から受信するステップ（Ｓ１１２）と、前記第２返答を受信した場合、前記第２ポート番号に対応したＵＰｎＰによるポートフォワーディングを用いて、前記通信システム（１）を構成する他のコンピュータ（１０−３）と通信するステップ（Ｓ１２２）とを実行させる。
【０１０８】
前記の構成によれば、コンピュータは、ルータが第１信号の送信時に用いた第１ポート番号から所定数離れた第２ポート番号を特定し、第２ポート番号に対応したＵＰｎＰによるポートフォワーディングをルータに設定する。ルータに割り当てられるポート番号群は、一定の連続した番号群であるため、このような特定の手法により、第２ポート番号として、ルータが実際に利用可能な番号を特定できる可能性を高められる。さらに、第１ポート番号と同じポート番号に対応したポートフォワーディングを設定せずに済むので、ポートフォワーディングを適切にルータに設定することができる。また、設定したポートフォワーディングを用いた第２信号の送信後、それに対する第２返答を受信した場合に、すなわちルータが第２ポート番号を正常に用いることができることを確認できた場合に、初めて通信を実行する。したがって、ルータが実際の利用可能な第２ポート番号に対応したポートフォワーディングを用いて、他のコンピュータと正常に通信することができる。
【０１０９】
上述したプログラムにおいて、前記ポートフォワーディングを設定するステップ（Ｓ１１０８）では、前記第１ポート番号よりも前記所定数大きい前記第２ポート番号に対応した第１ポートフォワーディングと、前記第１ポート番号よりも前記所定数小さい第３ポート番号に対応した第２ポートフォワーディングとを、前記ルータ（５０−１）に設定し、前記第２信号を送信するステップ（Ｓ１１１０）では、前記第１ポートフォワーディングを用いて前記第２信号を送信すると共に、前記第２ポートフォワーディングを用いて第３信号を送信し、前記第２返答を受信するステップ（Ｓ１１１２）では、前記第２返答と、前記第３信号に対する第３返答とのうち少なくともいずれかを受信し、前記通信するステップ（Ｓ１１２２，Ｓ１１３２）では、前記第２返答を受信した場合、前記第２ポート番号に対応するポートフォワーディングを用いて前記他のコンピュータ（５０−３）と通信し、前記第３返答を受信した場合、前記第３ポート番号に対応するポートフォワーディングを用いて前記他のコンピュータ（５０−３）と通信することが好ましい。
【０１１０】
前記の構成によれば、コンピュータは、第１ポート番号よりも大きい第２ポート番号と、第１ポート番号よりも小さい第３ポート番号とをそれぞれ特定するため、ルータが実際に使えるポート番号を特定できる可能性をより高めることができる。例えば第１ポート番号が、ルートが利用可能な番号群のうち最も大きい番号である場合、第２ポート番号はルータが使えない番号になるが、第３ポート番号は使える可能性がある。この際、もし第３ポート番号として、第２ポート番号よりも大きい番号を特定した場合、第２ポート番号が使えなければ第３ポート番号も必ず使えないため、ポート番号の特定のやり直しが生じることになり、非効率である。本構成ではこうした不具合が生じないため、効率的にポート番号を特定することができる。
【０１１１】
上述したプログラムにおいて、前記ポートフォワーディングを設定するステップ（Ｓ１０８）では、前記第１ポートフォワーディングと前記第２ポートフォワーディングとを並列に設定することが好ましい。
【０１１２】
前記の構成によれば、コンピュータは、第２ポート番号および第３ポート番号のうちいずれをルータが利用できるのかを、より素早く特定することができる。
【０１１３】
上述したプログラムにおいて、前記通信するステップ（Ｓ１２２）では、前記ルータに設定済みの前記ポートフォワーディングを引き続き用いて、前記他のコンピュータ（５０−３）と通信することが好ましい。
【０１１４】
前記の構成によれば、コンピュータは、他のコンピュータとの通信のために、新たなポートフォワーディングを設定せずに済むので、処理負荷を下げると共に、通信開始前の通信ラグを減らすことができる。さらには、プライベートＩＰアドレスが設定されている他のコンピュータと通信することができる。
【０１１５】
上述したプログラムにおいて、前記プログラムは、前記コンピュータ（５０−１）に、ローカルポート番号をランダムに決定するステップをさらに実行させ、前記ポートフォワーディングを設定するステップでは、前記ローカルポート番号および前記第２ポート番号に対応したポートフォワーディングを設定することが好ましい。
【０１１６】
前記の構成によれば、コンピュータがルータに第２信号を送信する際の用いるローカルポート番号が、同じルータに接続される他の装置が用いるローカルポート番号と競合する可能性を低減することができる。
【０１１７】
上述したプログラムにおいて、前記プログラムは、前記コンピュータに、前記第２ポート番号と同一のローカルポート番号を決定するステップをさらに実行させ、前記ポートフォワーディングを設定するステップでは、前記ローカルポート番号および前記第２ポート番号に対応したポートフォワーディングを設定することが好ましい。
【０１１８】
前記の構成によれば、各コンピュータが用いるローカルポート番号が競合することを回避することができる。
【０１１９】
本発明の一態様に係る通信装置は、通信システム（１）を構成する通信装置（１０−１）であって、ＮＡＰＴ機能を有するルータ（５０−１）を介して、第１信号をサーバ（７０）に送信する第１送信部（１４０）と、前記第１信号に対する第１返答を、前記サーバ（７０）から受信する第１受信部（１４０）と、受信した前記第１返答に基づいて、前記第１信号の送信時に前記ルータ（５０−１）が用いた第１ポート番号を特定する特定部（１４１）と、前記第１ポート番号と所定数異なる第２ポート番号に対応したＵＰｎＰによるポートフォワーディングを、前記ルータ（５０−１）に設定する設定部（１４２）と、前記ポートフォワーディングを用いて、第２信号を前記サーバ（７０）に送信する第２送信部（１４０）と、前記第２信号に対する第２返答を、前記サーバ（７０）から受信する第２受信部（１４０）と、前記第２返答を受信した場合、前記第２ポート番号に対応したＵＰｎＰによるポートフォワーディングを用いて、前記通信システム（１）を構成する他の通信装置（１０−３）と通信する通信部（１４０）とを備えている。
【０１２０】
前記の構成によれば、上述したプログラムと同様の作用効果を奏する。
【０１２１】
また、本発明の一態様に係る通信方法は、通信システム（１）を構成するコンピュータ（１０−１）が実行する通信方法であって、ＮＡＰＴ機能を有するルータ（３０−１）を介して、第１信号をサーバ（７０）に送信するステップ（Ｓ１００）と、前記第１信号に対する第１返答を、前記サーバ（７０）から受信するステップ（Ｓ１０２）と、受信した前記第１返答に基づいて、前記第１信号の送信時に前記ルータ（７０）が用いた第１ポート番号を特定するステップ（Ｓ１０４）と、前記第１ポート番号と所定数異なる第２ポート番号に対応したＵＰｎＰによるポートフォワーディングを、前記ルータ（７０）に設定するステップ（Ｓ１０８）と、前記ポートフォワーディングを用いて、第２信号を前記サーバ（７０）に送信するステップ（Ｓ１１０）と、前記第２信号に対する第２返答を、前記サーバ（７０）から受信するステップ（Ｓ１１２）と、前記第２返答を受信した場合、前記第２ポート番号に対応したＵＰｎＰによるポートフォワーディングを用いて、前記通信システム（１）を構成する他のコンピュータ（１０−３）と通信するステップとを含む。
【０１２２】
前記の構成によれば、上述したプログラムと同様の作用効果を奏する。
【０１２３】
〔ソフトウェアまたはハードウェアによる実現例〕
上述した実施形態および各変形例では、ユーザ端末１０の機能構成が、ソフトウェアにより実現される例について説明した。すなわち、本発明の目的を達成するためにユーザ端末１０によって実行されるプログラムが、図２に示したユーザ端末１０の記憶部１５に記憶され、ユーザ端末１０のＣＰＵ１１が当該プログラムを読み取って実行することにより、ユーザ端末１０の機能構成が実現される。
【０１２４】
なお、この場合、プログラムを記憶する記憶部１５としては、「一時的でない有形の媒体」、例えば、ＲＯＭ（Read Only Memory）等の他、テープ、ディスク、カード、半導体メモリ、プログラマブルな論理回路などを用いることができる。
【０１２５】
また、プログラムは、該プログラムを伝送可能な任意の伝送媒体（通信ネットワークや放送波等）を介して前記コンピュータに供給されてもよい。また、本発明の一態様は、プログラムが電子的な伝送によって具現化された、搬送波に埋め込まれたデータ信号の形態でも実現され得る。
【０１２６】
なお、ユーザ端末１０の機能構成は、ソフトウェアによる実現に限らず、集積回路（ＩＣチップ）等に形成された論理回路（ハードウェア）によって実現されてもよい。
【０１２７】
本開示は上述した各実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能であり、異なる実施形態にそれぞれ開示された技術的手段を適宜組み合わせて得られる実施形態についても本開示の技術的範囲に含まれる。さらに、各実施形態にそれぞれ開示された技術的手段を組み合わせることにより、新しい技術的特徴を形成できる。
【符号の説明】
【０１２８】
１、１Ａ  ゲームシステム
１０、１０−１、１０−２、１０−３  ユーザ端末
１１、３１  ＣＰＵ
１２、３２  通信部
１３、３３  入力部
１４  表示部
１５、３４  記憶部
３０  ゲームサーバ
５０、５０−１、５０−２、５０−３  ルータ
７０  ＳＴＵＮサーバ
９０、９０−１、９０−２  リレールータ
１１０  入力受付部
１２０  表示制御部
１３０  ゲーム管理部
１４０、３３０  通信制御部
１４１  ポート番号決定部
１４２  ポートフォワーディング設定部
３２０  マッチング部
【要約】
【課題】ＵＰｎＰによるポートフォワーディングを適切に設定し、他のコンピュータと正常に通信する。
【解決手段】プログラムは、ルータが用いた第１ポート番号と所定数異なる第２ポート番号に対応したＵＰｎＰによるポートフォワーディングを、ルータに設定するステップ（Ｓ１０８）と、設定されたポートフォワーディングを用いて、ＳＴＵＮパケットをサーバに送信するステップ（Ｓ１１０）と、ＳＴＵＮパケットを、前記サーバから受信するステップ（Ｓ１１２）と、ＳＴＵＮパケットを受信した場合、第２ポート番号に対応したＵＰｎＰによるポートフォワーディングを用いて、他のユーザ端末とＰ２Ｐ通信するステップ（Ｓ１２２）とを実行させる。
【選択図】図６【図１】
0006671676.tif 000002
【図２】
0006671676.tif 000003
【図３】
0006671676.tif 000004
【図４】
0006671676.tif 000005
【図５】
0006671676.tif 000006
【図６】
0006671676.tif 000007
【図７】
0006671676.tif 000008
【図８】
0006671676.tif 000009