(57)【要約】【課題】  ルータのＮＡＴ機能に手を加えなくとも、ホストどうしの直接通信が可能となる通信方法を提供する。【解決手段】  コントローラは、第１および第２ルータのＩＰアドレスを取得し、第１および第２ホストに、相手方ルータのＩＰアドレスを送信する。第１および第２ホストは、各々のルータを介して、コントローラにパケットを送信する。コントローラは、受信したパケットに基づいて、両ルータにおける送信元ポートを検知し、さらに、一方のルータの送信元ポートを他方ホストに、かつ他方ルータの送信元ポートを一方のホストに通知する。ついで、第１ホストは、第２ルータの送信元ポートに向けてパケットを送信する。これにより、第１ルータに、第１ホストと第１ルータと第２ルータとにおけるＩＰアドレスおよびポートのマッピングテーブルを生成する。ついで、第２ホストから、第１ルータのＩＰアドレスおよびポートを指定したパケットを送信する。【選択図】図２
2005045678.tif 000002
【特許請求の範囲】
【請求項１】
第１ルータと、この第１ルータを介してネットワークに接続された第１ホストと、第２ルータと、この第２ルータを介して前記ネットワークに接続された第２ホストと、前記ネットワークに接続されたコントローラとを用いており、前記第１および第２ルータは、ＮＡＴ機能およびＩＰマスカレード機能を有しており、さらに以下のステップを備える通信方法：
（１）前記コントローラが、前記第１および第２ルータ自体のＩＰアドレスを取得するステップ；
（２）前記第１ホストが、前記コントローラから前記第２ルータのＩＰアドレスを取得し、かつ、前記第２ホストが、前記コントローラから前記第１ルータのＩＰアドレスを取得するステップ；
（３）前記第１および第２ホストが、前記第１および第２ルータにおける前記ＮＡＴ機能およびＩＰマスカレード機能を用いて、前記コントローラにそれぞれパケットを送信するステップ；
（４）前記コントローラは、前記ステップ（３）において送信されたパケットの解析に基づいて、前記第１および第２ルータにおける送信元ポートを検知し、さらに、前記第１および第２ルータのうち一方のルータにおける前記送信元ポートを表すデータを、他方のルータに接続された前記ホストに通知し、かつ、他方のルータにおける前記送信元ポートを表すデータを、一方のルータに接続された前記ホストに通知するステップ；
（５）前記第１ホストから前記第２ルータの前記送信元ポートに向けてパケットを送信することによって、前記第１ルータに、前記第１ホストと前記第１ルータと前記第２ルータとにおけるＩＰアドレスおよびポートのマッピングテーブルを生成するステップ；
（６）前記第２ホストから、前記第１ルータの前記ＩＰアドレスおよび前記送信元ポートを宛先として指定したパケットを送信することにより、前記第１ホストにこのパケットを届けるステップ。
【請求項２】
第１ルータと、この第１ルータを介してネットワークに接続された第１ホストと、第２ルータと、この第２ルータを介して前記ネットワークに接続された第２ホストと、前記ネットワークに接続されたコントローラとを用いており、前記第１および第２ルータは、ＮＡＴ機能およびＩＰマスカレード機能を有しており、さらに以下のステップを備える通信方法：
（１）前記コントローラが前記第１および第２ルータ自体のＩＰアドレスを取得するステップ；
（２）前記第１ホストが、前記コントローラから前記第２ルータのＩＰアドレスを取得し、かつ、前記第２ホストが、前記コントローラから前記第１ルータのＩＰアドレスを取得するステップ；
（３）前記第１および第２ホストが、前記第１および第２ルータにおける前記ＮＡＴ機能およびＩＰマスカレード機能を用いて、前記コントローラにそれぞれパケットを送信するステップ；
（４）前記コントローラは、前記ステップ（３）において送信されたパケットの解析に基づいて、前記第１および第２ルータにおける送信元ポートを検知し、さらに、前記第１および第２ルータのうち一方のルータにおける前記送信元ポートを表すデータを、他方のルータに接続された前記ホストに通知し、かつ、他方のルータにおける前記送信元ポートを表すデータを、一方のルータに接続された前記ホストに通知するステップ；
（５）前記第１ホストから前記第２ルータの前記送信元ポートに向けてパケットを送信することによって、前記第１ルータに、前記第１ホストと前記第１ルータと前記第２ルータとにおけるＩＰアドレスおよびポートのマッピングテーブルを生成し、
これと同時にまたは前後して、前記第２ホストから前記第１ルータの前記送信元ポートに向けてパケットを送信することによって、前記第２ルータに、前記第２ホストと前記第２ルータと前記第１ルータとにおけるＩＰアドレスおよびポートのマッピングテーブルを生成するステップ；
（６）前記第１または第２ホストのうち一方のホストから、他方のホストが接続されたルータの前記ＩＰアドレスおよび前記送信元ポートを宛先として指定したパケットを送信することにより、他方のホストにこのパケットを届けるステップ。
【請求項３】
第１ルータと、この第１ルータを介してネットワークに接続された第１ホストと、第２ルータと、この第２ルータを介して前記ネットワークに接続された第２ホストと、前記ネットワークに接続されたコントローラとを用いており、前記第１および第２ルータは、ＮＡＴ機能およびＩＰマスカレード機能を有しており、さらに以下のステップを備える通信方法：
（１）前記コントローラが前記第１および第２ルータ自体のＩＰアドレスを取得するステップ；
（２）前記第１ホストが、前記コントローラから前記第２ルータのＩＰアドレスを取得し、かつ、前記第２ホストが、前記コントローラから前記第１ルータのＩＰアドレスを取得するステップ；
（３）前記第１および第２ホストが、前記第１および第２ルータにおける前記ＮＡＴ機能およびＩＰマスカレード機能を用いて、前記コントローラにそれぞれパケットを送信するステップ；
（４）前記コントローラが、前記ステップ（３）において送信されたパケットの解析に基づいて、前記第１ルータの送信元ポートを検知し、この送信元ポートを表すデータを、前記第２ホストに通知するステップ；
（５）前記第２ホストから、前記第１ルータの前記ＩＰアドレスおよび前記送信元ポートを宛先として指定したパケットを送信することにより、前記第１ホストにこのパケットを届けるステップ。
【請求項４】
前記ステップ（３）および（４）における前記パケットは複数であることを特徴とする請求項１〜３に記載の通信方法。
【請求項５】
前記ステップ（５）において送信されるパケットは、宛先のルータに届かないようにＴＴＬが調節されることを特徴とする請求項１または２に記載の通信方法。
【請求項６】
前記ＴＴＬの調節は、前記ルータから、当該ルータの内側に接続された前記ホストまでのホップ数に基づいて行われることを特徴とする請求項５記載の通信方法。
【請求項７】
第１ルータと、この第１ルータを介してネットワークに接続された第１ホストと、第２ルータと、この第２ルータを介して前記ネットワークに接続された第２ホストと、前記ネットワークに接続されたコントローラと前記第１ホストに接続された第１クライアントと、前記第２ホストに接続された第２クライアントとを用いており、前記第１および第２ルータは、ＮＡＴ機能およびＩＰマスカレード機能を有しており、さらに以下のステップを備える通信方法：
（１）前記コントローラが、前記第１および第２ルータ自体のＩＰアドレスを取得するステップ；
（２）前記第１ホストが、前記コントローラから前記第２ルータのＩＰアドレスを取得し、かつ、前記第２ホストが、前記コントローラから前記第１ルータのＩＰアドレスを取得するステップ；
（３）前記第１および第２ホストが、前記第１および第２ルータにおける前記ＮＡＴ機能およびＩＰマスカレード機能を用いて、前記コントローラにそれぞれパケットを送信するステップ；
（４）前記コントローラが、前記ステップ（３）において送信されたパケットの解析に基づいて、前記第１および第２ルータにおける送信元ポートを検知し、さらに、前記第１および第２ルータのうち一方のルータにおける前記送信元ポートを表すデータを、他方のルータに接続された前記ホストに通知し、かつ、他方のルータにおける前記送信元ポートを表すデータを、一方のルータに接続された前記ホストに通知するステップ；
（５）前記第１ホストから前記第２ルータの前記送信元ポートに向けてパケットを送信することによって、前記第１ルータに、前記第１ホストと前記第１ルータと前記第２ルータとにおけるＩＰアドレスおよびポートのマッピングテーブルを生成するステップ；
（６）前記マッピングテーブルが生成された後、前記第２クライアントが、前記第１クライアントのポートを宛先として指定したパケットを、前記第２ホストに送信するステップ；
（７）前記第２ホストが、前記ステップ（６）における前記パケットを受信した後、前記パケットのペイロードの全部または一部を含むパケットを、前記第１ルータの前記ＩＰアドレスおよび前記送信元ポートを宛先として指定して送信することによって、前記第１ホストにこのパケットを届けるステップ；
（８）前記第１ホストが、前記ステップ（７）において送信されたパケットのペイロードの全部または一部を含むパケットを、前記第１クライアントにおける、前記ステップ（６）で宛先とされたポートに向けて送信するステップ。
【請求項８】
第１ルータと、この第１ルータを介してネットワークに接続された第１ホストと、第２ルータと、この第２ルータを介して前記ネットワークに接続された第２ホストと、前記ネットワークに接続された前記コントローラとを用いており、前記第１および第２ルータは、ＮＡＴ機能およびＩＰマスカレード機能を有するものである通信システムにおいて用いられる前記コントローラであって、さらに、以下のステップを実行する前記コントローラ：
（１）前記第１および第２ルータ自体のＩＰアドレスを取得するステップ；
（２）前記第１ホストに、前記第２ルータのＩＰアドレスを送信し、かつ、前記第２ホストに、前記第１ルータのＩＰアドレスを送信するステップ；
（３）前記第１および第２ホストから送信され、かつ、前記第１および第２ルータにおける前記ＮＡＴ機能およびＩＰマスカレード機能によって送信元アドレスおよび送信元ポートが変換されたパケットをそれぞれ受信するステップ；
（４）前記ステップ（３）において送信されたパケットの解析に基づいて、前記第１および第２ルータにおける送信元ポートを検知し、さらに、前記第１および第２ルータのうち一方のルータにおける前記送信元ポートを表すデータを、他方のルータに接続されたホストに通知し、かつ、他方のルータにおける前記送信元ポートを表すデータを、一方のルータに接続されたホストに通知するステップ。
【請求項９】
第１ルータと、この第１ルータを介してネットワークに接続された第１ホストと、第２ルータと、この第２ルータを介して前記ネットワークに接続された第２ホストと、前記ネットワークに接続された前記コントローラとを用いており、前記第１および第２ルータは、ＮＡＴ機能およびＩＰマスカレード機能を有するものである通信システムにおいて用いられる前記第２ホストであって、さらに以下のステップを実行する前記第２ホスト：
（１）前記コントローラにパケットを送ることにより、前記第２ルータ自体のＩＰアドレスを前記コントローラに取得させるステップ；
（２）前記コントローラから、前記第１ルータのＩＰアドレスを取得するステップ；
（３）前記第１ルータにおける送信元ポートを表すデータを、前記コントローラから受信するステップ；
（４）前記第１ルータに、前記第１ホストと前記第１ルータと前記第２ルータとにおけるＩＰアドレスおよびポートのマッピングテーブルが生成された後、前記第１ルータの前記ＩＰアドレスおよび前記送信元ポートを宛先として指定したパケットを送信するステップ。
【請求項１０】
第１ルータと、この第１ルータを介してネットワークに接続された第１ホストと、第２ルータと、この第２ルータを介して前記ネットワークに接続された第２ホストと、前記ネットワークに接続された前記コントローラとを用いており、前記第１および第２ルータは、ＮＡＴ機能およびＩＰマスカレード機能を有するものである通信システムにおいて用いられる前記第１ホストであって、さらに以下のステップを実行する前記第１ホスト：
（１）前記コントローラにパケットを送ることにより、前記第１ルータ自体のＩＰアドレスを前記コントローラに取得させるステップ；
（２）前記コントローラから、前記第２ルータのＩＰアドレスを取得するステップ；
（３）前記第１ルータにおける前記ＮＡＴ機能およびＩＰマスカレード機能を用いて、前記第１ホストから前記コントローラにパケットを送信するステップ；
（４）前記コントローラから前記第２ルータの送信元ポートの情報を受け取った後、前記第２ルータの前記送信元ポートに向けてパケットを送信することによって、前記第１ルータに、前記第１ホストと前記第１ルータと前記第２ルータとにおけるＩＰアドレスおよびポートのマッピングテーブルを生成させるステップ；
（５）前記第２ホストから、前記第１ルータのＩＰアドレスおよびポートを指定して前記第１ルータに送信されたパケットを、前記第１ルータを介して受信するステップ。
【請求項１１】
請求項８に記載のコントローラと、請求項１０記載の第１ホストと、請求項９記載の第２ホストとを備えたことを特徴とする通信システム。
【請求項１２】
第１ルータと、この第１ルータを介してネットワークに接続された第１ホストと、第２ルータと、この第２ルータを介して前記ネットワークに接続された第２ホストと、前記ネットワークに接続された前記コントローラとを備えた通信システムであって、
前記第１および第２ルータは、ＮＡＴ機能およびＩＰマスカレード機能を有するものであり、
さらに、以下のステップを実行する通信システム：
（１）前記コントローラが前記第１および第２ルータ自体のＩＰアドレスを取得するステップ；
（２）前記第１ホストが、前記コントローラから前記第２ルータのＩＰアドレスを取得し、かつ、前記第２ホストが、前記コントローラから前記第１ルータのＩＰアドレスを取得するステップ；
（３）前記第１および第２ホストが、前記第１および第２ルータにおける前記ＮＡＴ機能およびＩＰマスカレード機能を用いて、前記コントローラにそれぞれパケットを送信するステップ；
（４）前記コントローラが、前記ステップ（３）において送信されたパケットの解析に基づいて、前記第１および第２ルータにおける送信元ポートを検知し、さらに、第１および第２ルータのうち一方のルータにおける前記送信元ポートを表すデータを、他方のルータに接続された前記ホストに通知し、かつ、他方のルータにおける前記送信元ポートを表すデータを、一方のルータに接続された前記ホストに通知するステップ；
（５）前記第１ホストから前記第２ルータの前記送信元ポートに向けてパケットを送信することによって、前記第１ルータに、前記第１ホストと前記第１ルータと前記第２ルータとにおけるＩＰアドレスおよびポートのマッピングテーブルを生成するステップ；
（６）前記第２ホストから、前記第１ルータの前記ＩＰアドレスおよび前記送信元ポートを宛先として指定したパケットを送信することにより、前記第１ホストにこのパケットを届けるステップ。
【請求項１３】
第１ルータと、この第１ルータを介してネットワークに接続された第１ホストと、第２ルータと、この第２ルータを介して前記ネットワークに接続された第２ホストと、前記ネットワークに接続されたコントローラとを備えた通信システムであって、
前記第１および第２ルータは、ＮＡＴ機能およびＩＰマスカレード機能を有するものであり、
さらに以下のステップを実行する通信システム：
（１）前記コントローラが前記第１および第２ルータ自体のＩＰアドレスを取得するステップ；
（２）前記第１ホストが、前記コントローラから前記第２ルータのＩＰアドレスを取得し、かつ、前記第２ホストが、前記コントローラから前記第１ルータのＩＰアドレスを取得するステップ；
（３）前記第１および第２ホストが、前記第１および第２ルータにおける前記ＮＡＴ機能およびＩＰマスカレード機能を用いて、前記コントローラにそれぞれパケットを送信するステップ；
（４）前記コントローラが、前記ステップ（３）において送信されたパケットの解析に基づいて、前記第１および第２ルータにおける送信元ポートを検知し、さらに、第１および第２ルータのうち一方のルータにおける前記送信元ポートを表すデータを、他方のルータに接続された前記ホストに通知し、かつ、他方のルータにおける前記送信元ポートを表すデータを、一方のルータに接続された前記ホストに通知するステップ；
（５）前記第１ホストから前記第２ルータの前記送信元ポートに向けてパケットを送信することによって、前記第１ルータに、前記第１ホストと前記第１ルータと前記第２ルータとにおけるＩＰアドレスおよびポートのマッピングテーブルを生成し、
これと同時にまたは前後して、前記第２ホストから前記第１ルータの前記送信元ポートに向けてパケットを送信することによって、前記第２ルータに、前記第２ホストと前記第２ルータと前記第１ルータとにおけるＩＰアドレスおよびポートのマッピングテーブルを生成するステップ；
（６）前記第１または第２ホストのうち一方のホストから、他方のホストが接続されたルータの前記ＩＰアドレスおよび前記送信元ポートを宛先として指定したパケットを送信することにより、他方のホストにこのパケットを届けるステップ。
【請求項１４】
第１ルータと、この第１ルータを介してネットワークに接続された第１ホストと、第２ルータと、この第２ルータを介して前記ネットワークに接続された第２ホストと、前記ネットワークに接続されたコントローラとを備えた通信システムであって、
前記第１および第２ルータは、ＮＡＴ機能およびＩＰマスカレード機能を有するものであり、
さらに以下のステップを実行する通信システム：
（１）前記コントローラが前記第１および第２ルータ自体のＩＰアドレスを取得するステップ；
（２）前記第１ホストが、前記コントローラから前記第２ルータのＩＰアドレスを取得し、かつ、前記第２ホストが、前記コントローラから前記第１ルータのＩＰアドレスを取得するステップ；
（３）前記第１および第２ホストが、前記第１および第２ルータにおける前記ＮＡＴ機能およびＩＰマスカレード機能を用いて、前記コントローラにそれぞれパケットを送信するステップ；
（４）前記コントローラが、前記ステップ（３）において送信されたパケットの解析に基づいて、前記第１ルータの送信元ポートを検知し、この送信元ポートを表すデータを、前記第２ホストに通知するステップ；
（５）前記第２ホストから、前記第１ルータの前記ＩＰアドレスおよび前記送信元ポートを宛先として指定したパケットを送信することにより、前記第１ホストにこのパケットを届けるステップ。
【請求項１５】
第１ルータと、この第１ルータを介してネットワークに接続された第１ホストと、第２ルータと、この第２ルータを介して前記ネットワークに接続された第２ホストと、前記ネットワークに接続されたコントローラと、前記第１ホストに接続された第１クライアントと、前記第２ホストに接続された第２クライアントとを備えた通信システムであって、
前記第１および第２ルータは、ＮＡＴ機能およびＩＰマスカレード機能を有しており、さらに以下のステップを実行する通信システム：
（１）前記コントローラが、前記第１および第２ルータ自体のＩＰアドレスを取得するステップ；
（２）前記第１ホストが、前記コントローラから前記第２ルータのＩＰアドレスを取得し、かつ、前記第２ホストが、前記コントローラから前記第１ルータのＩＰアドレスを取得するステップ；
（３）前記第１および第２ホストが、前記第１および第２ルータにおける前記ＮＡＴ機能およびＩＰマスカレード機能を用いて、前記コントローラにそれぞれパケットを送信するステップ；
（４）前記コントローラが、前記ステップ（３）において送信されたパケットの解析に基づいて、前記第１および第２ルータにおける送信元ポートを検知し、さらに、前記第１および第２ルータのうち一方のルータにおける前記送信元ポートを表すデータを、他方のルータに接続された前記ホストに通知し、かつ、他方のルータにおける前記送信元ポートを表すデータを、一方のルータに接続された前記ホストに通知するステップ；
（５）前記第１ホストから前記第２ルータの前記送信元ポートに向けてパケットを送信することによって、前記第１ルータに、前記第１ホストと前記第１ルータと前記第２ルータとにおけるＩＰアドレスおよびポートのマッピングテーブルを生成するステップ；
（６）前記マッピングテーブルが生成された後、前記第２クライアントが、前記第１クライアントのポートを宛先として指定したパケットを、前記第２ホストに送信するステップ；
（７）前記第２ホストが、前記ステップ（６）における前記パケットを受信した後、前記パケットのペイロードの全部または一部を含むパケットを、前記第１ルータの前記ＩＰアドレスおよび前記送信元ポートを宛先として指定して送信することによって、前記第１ホストにこのパケットを届けるステップ；
（８）前記第１ホストが、前記ステップ（７）において送信されたパケットのペイロードの全部または一部を含むパケットを、前記第１クライアントにおける、前記ステップ（６）で宛先とされたポートに向けて送信するステップ。
【請求項１６】
請求項１〜７のいずれか１項に記載の方法をコンピュータに実行させることを特徴とするコンピュータプログラム。
【請求項１７】
請求項８に記載の各ステップを前記コントローラに実行させることを特徴とするコンピュータプログラム。
【請求項１８】
請求項９に記載の各ステップを前記第２ホストに実行させることを特徴とするコンピュータプログラム。
【請求項１９】
請求項１０に記載の各ステップを前記第１ホストに実行させることを特徴とするコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークを介したホスト間の通信方法に関するものである。
【背景技術】
【０００２】
グローバルＩＰアドレスを有効に利用するため、最近では、ＮＡＴ機能およびＩＰマスカレード機能を備えたルータが使われている。このルータ（つまりＮＡＴ）の内側は、その外側とは異なるネットワークアドレス空間を持つ。ＮＡＴは、１つの外側ネットワークＩＰアドレス（通常はグローバルＩＰアドレス）と、内側ネットワークＩＰアドレス（通常はプライベートＩＰアドレス）とを相互変換する。これにより、グローバルＩＰアドレスを持たないホストが、ルータを介して、ルータの外側にあるネットワークに接続できる。
【０００３】
ルータの内側に複数のホストがある場合でも、ＩＰマスカレード機能を用いることにより、それぞれのホストは、外側のネットワークに接続できる。この機能では、ホストから外部ネットワークにパケットが送られたときに、ルータのポートを当該ホストに割り当てる。割り当てられたポートは、送信元ポートとして外側ネットワークに送られる。外側ネットワークからは、ルータのＩＰアドレスと宛先ポートを指定してルータにパケットを送る。このとき、宛先ボートは、先に取得した送信元ポートとしておく。ルータは、宛先ポートを参照することにより、パケットがどのホスト宛かを判別でき、パケットを当該ホストに届けることができる。
【０００４】
ところで、このようなアドレス変換機能を用いると、ルータの外側からは、ルータ内側のＩＰアドレスは隠蔽される。すると、外側のホストから内側のホストに直接に通信を行うことは困難である。もし、ルータの特定のポートに内側のホストを静的に割り当てることができれば、外側ネットワークからそのポートを介して内側ホストに直接の通信ができる。ホストどうしが直接通信する為には、それぞれのホストが属するルータ双方に対してこの割り当てを行う必要がある。しかしながら、この方法は、次のような問題がある。
（１）利用者が自分でルータのＮＡＴを設定できる必要がある。これは、当該のＮＡＴが家庭用ルータなど自分の管轄下のノードにあるならば可能であるが、サービスプロバイダのルータなどのように、自分の管轄外にあるＮＡＴについては、設定は困難である。
（２）そのルータが相手のルータと通信可能なＩＰアドレスを持たなくてはならない。仮に、外側ネットワークに接続されたルータの下に、さらに、ＮＡＴ機能を有するルータが接続され、そのルータはプライベートＩＰアドレスのみ持っていたとすると、このルータは、相手のルータと直接には通信できない。つまり、このような場合は、直接の通信ができない。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明は、前記の事情に鑑みてなされたものである。本発明の目的は、ルータのＮＡＴ機能に手を加えなくとも、ホストどうしの直接通信が可能となる通信方法を提供することである。
【課題を解決するための手段】
【０００６】
本発明に係る通信方法は、第１ルータと、この第１ルータを介してネットワークに接続された第１ホストと、第２ルータと、この第２ルータを介して前記ネットワークに接続された第２ホストと、前記ネットワークに接続されたコントローラとを用いる。前記第１および第２ルータは、ＮＡＴ機能およびＩＰマスカレード機能を有する。この方法は、さらに以下のステップを備える：
（１）前記コントローラが、前記第１および第２ルータ自体のＩＰアドレスを取得するステップ；
（２）前記第１ホストが、前記コントローラから前記第２ルータのＩＰアドレスを取得し、かつ、前記第２ホストが、前記コントローラから前記第１ルータのＩＰアドレスを取得するステップ；
（３）前記第１および第２ホストが、前記第１および第２ルータにおける前記ＮＡＴ機能およびＩＰマスカレード機能を用いて、前記コントローラにそれぞれパケットを送信するステップ；
（４）前記コントローラは、前記ステップ（３）において送信されたパケットの解析に基づいて、前記第１および第２ルータにおける送信元ポートを検知し、さらに、前記第１および第２ルータのうち一方のルータにおける前記送信元ポートを表すデータを、他方のルータに接続された前記ホストに通知し、かつ、他方のルータにおける前記送信元ポートを表すデータを、一方のルータに接続された前記ホストに通知するステップ；
（５）前記第１ホストから前記第２ルータの前記送信元ポートに向けてパケットを送信することによって、前記第１ルータに、前記第１ホストと前記第１ルータと前記第２ルータとにおけるＩＰアドレスおよびポートのマッピングテーブルを生成するステップ；
（６）前記第２ホストから、前記第１ルータの前記ＩＰアドレスおよび前記送信元ポートを宛先として指定したパケットを送信することにより、前記第１ホストにこのパケットを届けるステップ。
【０００７】
本発明に係る通信方法は、次のようなものでも良い。すなわち、この方法は、第１ルータと、この第１ルータを介してネットワークに接続された第１ホストと、第２ルータと、この第２ルータを介して前記ネットワークに接続された第２ホストと、前記ネットワークに接続されたコントローラとを用いる。前記第１および第２ルータは、ＮＡＴ機能およびＩＰマスカレード機能を有する。この方法は、さらに以下のステップを備える：
（１）前記コントローラが前記第１および第２ルータ自体のＩＰアドレスを取得するステップ；
（２）前記第１ホストが、前記コントローラから前記第２ルータのＩＰアドレスを取得し、かつ、前記第２ホストが、前記コントローラから前記第１ルータのＩＰアドレスを取得するステップ；
（３）前記第１および第２ホストが、前記第１および第２ルータにおける前記ＮＡＴ機能およびＩＰマスカレード機能を用いて、前記コントローラにそれぞれパケットを送信するステップ；
（４）前記コントローラは、前記ステップ（３）において送信されたパケットの解析に基づいて、前記第１および第２ルータにおける送信元ポートを検知し、さらに、前記第１および第２ルータのうち一方のルータにおける前記送信元ポートを表すデータを、他方のルータに接続された前記ホストに通知し、かつ、他方のルータにおける前記送信元ポートを表すデータを、一方のルータに接続された前記ホストに通知するステップ；
（５）前記第１ホストから前記第２ルータの前記送信元ポートに向けてパケットを送信することによって、前記第１ルータに、前記第１ホストと前記第１ルータと前記第２ルータとにおけるＩＰアドレスおよびポートのマッピングテーブルを生成し、
これと同時にまたは前後して、前記第２ホストから前記第１ルータの前記送信元ポートに向けてパケットを送信することによって、前記第２ルータに、前記第２ホストと前記第２ルータと前記第１ルータとにおけるＩＰアドレスおよびポートのマッピングテーブルを生成するステップ；
（６）前記第１または第２ホストのうち一方のホストから、他方のホストが接続されたルータの前記ＩＰアドレスおよび前記送信元ポートを宛先として指定したパケットを送信することにより、他方のホストにこのパケットを届けるステップ。
【０００８】
本発明に係る通信方法は、次のようなものであっても良い。この方法は、第１ルータと、この第１ルータを介してネットワークに接続された第１ホストと、第２ルータと、この第２ルータを介して前記ネットワークに接続された第２ホストと、前記ネットワークに接続されたコントローラとを用いる。前記第１および第２ルータは、ＮＡＴ機能およびＩＰマスカレード機能を有する。この方法は、さらに以下のステップを備える：
（１）前記コントローラが前記第１および第２ルータ自体のＩＰアドレスを取得するステップ；
（２）前記第１ホストが、前記コントローラから前記第２ルータのＩＰアドレスを取得し、かつ、前記第２ホストが、前記コントローラから前記第１ルータのＩＰアドレスを取得するステップ；
（３）前記第１および第２ホストが、前記第１および第２ルータにおける前記ＮＡＴ機能およびＩＰマスカレード機能を用いて、前記コントローラにそれぞれパケットを送信するステップ；
（４）前記コントローラが、前記ステップ（３）において送信されたパケットの解析に基づいて、前記第１ルータの送信元ポートを検知し、この送信元ポートを表すデータを、前記第２ホストに通知するステップ；
（５）前記第２ホストから、前記第１ルータの前記ＩＰアドレスおよび前記送信元ポートを宛先として指定したパケットを送信することにより、前記第１ホストにこのパケットを届けるステップ。
【０００９】
前記各発明におけるステップ（３）および（４）におけるパケットは、複数とすることができる。
【００１０】
前記ステップ（５）において送信されるパケットは、宛先のルータに届かないようにＴＴＬが調節されていることが好ましい。
【００１１】
前記ＴＴＬの調節は、例えば、ルータから、当該ルータの内側に接続されたホストまでのホップ数に基づいて行われる。
【００１２】
本発明に係る通信方法は、次のようなものであっても良い。この方法は、第１ルータと、この第１ルータを介してネットワークに接続された第１ホストと、第２ルータと、この第２ルータを介して前記ネットワークに接続された第２ホストと、前記ネットワークに接続されたコントローラと前記第１ホストに接続された第１クライアントと、前記第２ホストに接続された第２クライアントとを用いる。前記第１および第２ルータは、ＮＡＴ機能およびＩＰマスカレード機能を有する。この方法は、さらに以下のステップを備える：
（１）前記コントローラが、前記第１および第２ルータ自体のＩＰアドレスを取得するステップ；
（２）前記第１ホストが、前記コントローラから前記第２ルータのＩＰアドレスを取得し、かつ、前記第２ホストが、前記コントローラから前記第１ルータのＩＰアドレスを取得するステップ；
（３）前記第１および第２ホストが、前記第１および第２ルータにおける前記ＮＡＴ機能およびＩＰマスカレード機能を用いて、前記コントローラにそれぞれパケットを送信するステップ；
（４）前記コントローラが、前記ステップ（３）において送信されたパケットの解析に基づいて、前記第１および第２ルータにおける送信元ポートを検知し、さらに、前記第１および第２ルータのうち一方のルータにおける前記送信元ポートを表すデータを、他方のルータに接続された前記ホストに通知し、かつ、他方のルータにおける前記送信元ポートを表すデータを、一方のルータに接続された前記ホストに通知するステップ；
（５）前記第１ホストから前記第２ルータの前記送信元ポートに向けてパケットを送信することによって、前記第１ルータに、前記第１ホストと前記第１ルータと前記第２ルータとにおけるＩＰアドレスおよびポートのマッピングテーブルを生成するステップ；
（６）前記マッピングテーブルが生成された後、前記第２クライアントが、前記第１クライアントのポートを宛先として指定したパケットを、前記第２ホストに送信するステップ；
（７）前記第２ホストが、前記ステップ（６）における前記パケットを受信した後、前記パケットのペイロードの全部または一部を含むパケットを、前記第１ルータの前記ＩＰアドレスおよび前記送信元ポートを宛先として指定して送信することによって、前記第１ホストにこのパケットを届けるステップ；
（８）前記第１ホストが、前記ステップ（７）において送信されたパケットのペイロードの全部または一部を含むパケットを、前記第１クライアントにおける、前記ステップ（６）で宛先とされたポートに向けて送信するステップ。
【００１３】
本発明に係るコントローラは、第１ルータと、この第１ルータを介してネットワークに接続された第１ホストと、第２ルータと、この第２ルータを介して前記ネットワークに接続された第２ホストと、前記ネットワークに接続されたコントローラとを用いており、前記第１および第２ルータは、ＮＡＴ機能およびＩＰマスカレード機能を有するものである通信システムにおいて用いられるものである。このコントローラは、以下のステップを実行する：
（１）前記第１および第２ルータ自体のＩＰアドレスを取得するステップ；
（２）前記第１ホストに、前記第２ルータのＩＰアドレスを送信し、かつ、前記第２ホストに、前記第１ルータのＩＰアドレスを送信するステップ；
（３）前記第１および第２ホストから送信され、かつ、前記第１および第２ルータにおける前記ＮＡＴ機能およびＩＰマスカレード機能によって送信元アドレスおよび送信元ポートが変換されたパケットをそれぞれ受信するステップ；
（４）前記ステップ（３）において送信されたパケットの解析に基づいて、前記第１および第２ルータにおける送信元ポートを検知し、さらに、前記第１および第２ルータのうち一方のルータにおける前記送信元ポートを表すデータを、他方のルータに接続されたホストに通知し、かつ、他方のルータにおける前記送信元ポートを表すデータを、一方のルータに接続されたホストに通知するステップ。
【００１４】
本発明に係る第２ホストは、第１ルータと、この第１ルータを介してネットワークに接続された第１ホストと、第２ルータと、この第２ルータを介して前記ネットワークに接続された第２ホストと、前記ネットワークに接続された前記コントローラとを用いており、前記第１および第２ルータは、ＮＡＴ機能およびＩＰマスカレード機能を有するものである通信システムにおいて用いられるものである。この第２ホストは、以下のステップを実行する：
（１）前記コントローラにパケットを送ることにより、前記第２ルータ自体のＩＰアドレスを前記コントローラに取得させるステップ；
（２）前記コントローラから、前記第１ルータのＩＰアドレスを取得するステップ；
（３）前記第１ルータにおける送信元ポートを表すデータを、前記コントローラから受信するステップ；
（４）前記第１ルータに、前記第１ホストと前記第１ルータと前記第２ルータとにおけるＩＰアドレスおよびポートのマッピングテーブルが生成された後、前記第１ルータの前記ＩＰアドレスおよび前記送信元ポートを宛先として指定したパケットを送信するステップ。
【００１５】
本発明に係る第１ホストは、第１ルータと、この第１ルータを介してネットワークに接続された第１ホストと、第２ルータと、この第２ルータを介して前記ネットワークに接続された第２ホストと、前記ネットワークに接続された前記コントローラとを用いており、前記第１および第２ルータは、ＮＡＴ機能およびＩＰマスカレード機能を有するものである通信システムにおいて用いられるものである。この第１ホストは、以下のステップを実行する：
（１）前記コントローラにパケットを送ることにより、前記第１ルータ自体のＩＰアドレスを前記コントローラに取得させるステップ；
（２）前記コントローラから、前記第２ルータのＩＰアドレスを取得するステップ；
（３）前記第１ルータにおける前記ＮＡＴ機能およびＩＰマスカレード機能を用いて、前記第１ホストから前記コントローラにパケットを送信するステップ；
（４）前記コントローラから前記第２ルータの送信元ポートの情報を受け取った後、前記第２ルータの前記送信元ポートに向けてパケットを送信することによって、前記第１ルータに、前記第１ホストと前記第１ルータと前記第２ルータとにおけるＩＰアドレスおよびポートのマッピングテーブルを生成させるステップ；
（５）前記第２ホストから、前記第１ルータのＩＰアドレスおよびポートを指定して前記第１ルータに送信されたパケットを、前記第１ルータを介して受信するステップ。
【００１６】
本発明に係る通信システムは、前記した本発明に係るコントローラと第１ホストと第２ホストとを備えている。
【００１７】
本発明に係る通信システムは、次のようなものであっても良い。この通信システムは、第１ルータと、この第１ルータを介してネットワークに接続された第１ホストと、第２ルータと、この第２ルータを介して前記ネットワークに接続された第２ホストと、前記ネットワークに接続された前記コントローラとを備えている。前記第１および第２ルータは、ＮＡＴ機能およびＩＰマスカレード機能を有する。このシステムは、以下のステップを実行する：
（１）前記コントローラが前記第１および第２ルータ自体のＩＰアドレスを取得するステップ；
（２）前記第１ホストが、前記コントローラから前記第２ルータのＩＰアドレスを取得し、かつ、前記第２ホストが、前記コントローラから前記第１ルータのＩＰアドレスを取得するステップ；
（３）前記第１および第２ホストが、前記第１および第２ルータにおける前記ＮＡＴ機能およびＩＰマスカレード機能を用いて、前記コントローラにそれぞれパケットを送信するステップ；
（４）前記コントローラが、前記ステップ（３）において送信されたパケットの解析に基づいて、前記第１および第２ルータにおける送信元ポートを検知し、さらに、第１および第２ルータのうち一方のルータにおける前記送信元ポートを表すデータを、他方のルータに接続された前記ホストに通知し、かつ、他方のルータにおける前記送信元ポートを表すデータを、一方のルータに接続された前記ホストに通知するステップ；
（５）前記第１ホストから前記第２ルータの前記送信元ポートに向けてパケットを送信することによって、前記第１ルータに、前記第１ホストと前記第１ルータと前記第２ルータとにおけるＩＰアドレスおよびポートのマッピングテーブルを生成するステップ；
（６）前記第２ホストから、前記第１ルータの前記ＩＰアドレスおよび前記送信元ポートを宛先として指定したパケットを送信することにより、前記第１ホストにこのパケットを届けるステップ。
【００１８】
本発明に係る通信システムは、次のようなものであっても良い。このシステムは、第１ルータと、この第１ルータを介してネットワークに接続された第１ホストと、第２ルータと、この第２ルータを介して前記ネットワークに接続された第２ホストと、前記ネットワークに接続されたコントローラとを備える。前記第１および第２ルータは、ＮＡＴ機能およびＩＰマスカレード機能を有する。このシステムは、以下のステップを実行する：
（１）前記コントローラが前記第１および第２ルータ自体のＩＰアドレスを取得するステップ；
（２）前記第１ホストが、前記コントローラから前記第２ルータのＩＰアドレスを取得し、かつ、前記第２ホストが、前記コントローラから前記第１ルータのＩＰアドレスを取得するステップ；
（３）前記第１および第２ホストが、前記第１および第２ルータにおける前記ＮＡＴ機能およびＩＰマスカレード機能を用いて、前記コントローラにそれぞれパケットを送信するステップ；
（４）前記コントローラが、前記ステップ（３）において送信されたパケットの解析に基づいて、前記第１および第２ルータにおける送信元ポートを検知し、さらに、第１および第２ルータのうち一方のルータにおける前記送信元ポートを表すデータを、他方のルータに接続された前記ホストに通知し、かつ、他方のルータにおける前記送信元ポートを表すデータを、一方のルータに接続された前記ホストに通知するステップ；
（５）前記第１ホストから前記第２ルータの前記送信元ポートに向けてパケットを送信することによって、前記第１ルータに、前記第１ホストと前記第１ルータと前記第２ルータとにおけるＩＰアドレスおよびポートのマッピングテーブルを生成し、
これと同時にまたは前後して、前記第２ホストから前記第１ルータの前記送信元ポートに向けてパケットを送信することによって、前記第２ルータに、前記第２ホストと前記第２ルータと前記第１ルータとにおけるＩＰアドレスおよびポートのマッピングテーブルを生成するステップ；
（６）前記第１または第２ホストのうち一方のホストから、他方のホストが接続されたルータの前記ＩＰアドレスおよび前記送信元ポートを宛先として指定したパケットを送信することにより、他方のホストにこのパケットを届けるステップ。
【００１９】
本発明に係る通信システムは、次のようなものであっても良い。このシステムは、第１ルータと、この第１ルータを介してネットワークに接続された第１ホストと、第２ルータと、この第２ルータを介して前記ネットワークに接続された第２ホストと、前記ネットワークに接続されたコントローラとを備える。前記第１および第２ルータは、ＮＡＴ機能およびＩＰマスカレード機能を有する。このシステムは、以下のステップを実行する：
（１）前記コントローラが前記第１および第２ルータ自体のＩＰアドレスを取得するステップ；
（２）前記第１ホストが、前記コントローラから前記第２ルータのＩＰアドレスを取得し、かつ、前記第２ホストが、前記コントローラから前記第１ルータのＩＰアドレスを取得するステップ；
（３）前記第１および第２ホストが、前記第１および第２ルータにおける前記ＮＡＴ機能およびＩＰマスカレード機能を用いて、前記コントローラにそれぞれパケットを送信するステップ；
（４）前記コントローラが、前記ステップ（３）において送信されたパケットの解析に基づいて、前記第１ルータの送信元ポートを検知し、この送信元ポートを表すデータを、前記第２ホストに通知するステップ；
（５）前記第２ホストから、前記第１ルータの前記ＩＰアドレスおよび前記送信元ポートを宛先として指定したパケットを送信することにより、前記第１ホストにこのパケットを届けるステップ。
【００２０】
本発明に係る通信システムは、次のようなものであっても良い。このシステムは、第１ルータと、この第１ルータを介してネットワークに接続された第１ホストと、第２ルータと、この第２ルータを介して前記ネットワークに接続された第２ホストと、前記ネットワークに接続されたコントローラと、前記第１ホストに接続された第１クライアントと、前記第２ホストに接続された第２クライアントとを備える。前記第１および第２ルータは、ＮＡＴ機能およびＩＰマスカレード機能を有する。このシステムは、以下のステップを実行する：
（１）前記コントローラが、前記第１および第２ルータ自体のＩＰアドレスを取得するステップ；
（２）前記第１ホストが、前記コントローラから前記第２ルータのＩＰアドレスを取得し、かつ、前記第２ホストが、前記コントローラから前記第１ルータのＩＰアドレスを取得するステップ；
（３）前記第１および第２ホストが、前記第１および第２ルータにおける前記ＮＡＴ機能およびＩＰマスカレード機能を用いて、前記コントローラにそれぞれパケットを送信するステップ；
（４）前記コントローラが、前記ステップ（３）において送信されたパケットの解析に基づいて、前記第１および第２ルータにおける送信元ポートを検知し、さらに、前記第１および第２ルータのうち一方のルータにおける前記送信元ポートを表すデータを、他方のルータに接続された前記ホストに通知し、かつ、他方のルータにおける前記送信元ポートを表すデータを、一方のルータに接続された前記ホストに通知するステップ；
（５）前記第１ホストから前記第２ルータの前記送信元ポートに向けてパケットを送信することによって、前記第１ルータに、前記第１ホストと前記第１ルータと前記第２ルータとにおけるＩＰアドレスおよびポートのマッピングテーブルを生成するステップ；
（６）前記マッピングテーブルが生成された後、前記第２クライアントが、前記第１クライアントのポートを宛先として指定したパケットを、前記第２ホストに送信するステップ；
（７）前記第２ホストが、前記ステップ（６）における前記パケットを受信した後、前記パケットのペイロードの全部または一部を含むパケットを、前記第１ルータの前記ＩＰアドレスおよび前記送信元ポートを宛先として指定して送信することによって、前記第１ホストにこのパケットを届けるステップ；
（８）前記第１ホストが、前記ステップ（７）において送信されたパケットのペイロードの全部または一部を含むパケットを、前記第１クライアントにおける、前記ステップ（６）で宛先とされたポートに向けて送信するステップ。
【００２１】
本発明に係るコンピュータプログラムは、前記したいずれかの通信方法をコンピュータに実行させる構成となっている。
【００２２】
本発明に係る他のコンピュータプログラムは、前記した本発明に係るコントローラに、前記コントローラにおける各ステップを実行させる構成となっている。
【００２３】
本発明に係る他のコンピュータプログラムは、前記した本発明に係る第２ホストに、前記第２ホストにおける各ステップを実行させる構成となっている。
【００２４】
本発明に係る他のコンピュータプログラムは、前記した本発明に係る第１ホストに、前記第１ホストにおける各ステップを実行させる構成となっている。
【発明の効果】
【００２５】
本発明によれば、ルータのＮＡＴ機能に手を加えなくとも、ホストどうしの直接通信が可能となる通信方法を提供することができる。
【発明を実施するための最良の形態】
【００２６】
（第１実施形態）
（ネットワークの構成）
本発明の第１実施形態に係る通信方法を以下に説明する。まず、この方法に用いる通信システムの概要を図１に基づいて説明する。このシステムは、ネットワーク１と、第１ルータＣと、この第１ルータＣを介してネットワーク１に接続された第１ホストＡと、第２ルータＤと、この第２ルータＤを介してネットワーク１に接続された第２ホストＢと、ネットワーク１に接続されたコントローラ２とを備えている。
【００２７】
ネットワーク１は、インターネットプロトコル（ＩＰ）を用いるものであればよい。トランスポートプロトコルとしては、例えば、ＴＣＰやＵＤＰを使用することができる。物理層の構成に制約はない。通信路としては、有線でも無線でもよく、通信媒体としては、光でも電磁波でもその他の媒体でも良い。
【００２８】
第１ルータＣおよび第２ルータＤは、ＮＡＴ（Network Address Translator）機能およびＩＰマスカレード機能を有している。ＮＡＴ機能とは、ルータの内側に位置するホストのプライベートなＩＰアドレスを、ルータの外側用のＩＰアドレス（例えばグローバルＩＰアドレス）に変換する機能である。ＩＰマスカレード機能は、ＮＡＰＴ（Network Address Port Translator）とも呼ばれる。この機能は、ホストからルータの外部のネットワークにパケットを送るときに、ルータのポートを当該ホストに割り当てることで、外側ネットワークからホストへの通信を可能とするものである。ＮＡＴ機能やＮＡＰＴ機能自体は周知なのでこれ以上詳細な説明は省略する。
【００２９】
第１ルータＣおよび第２ルータＤは、その下に接続されたホストから送られたパケットが最後に通過する、ＮＡＴ機能を有するルータ（以下「最後のルータ」という）となっている。
【００３０】
第１ホストＡおよび第２ホストＢは、例えば、ＣＰＵや記憶装置を備えたコンピュータである。また、第１ホストＡおよび第２ホストＢは、これらの機能（後述）をそれぞれ実行するコンピュータソフトウエアを備えている。第１ホストＡや第２ホストＢとしては、ネットワークに接続できる家電製品やＰＤＡ端末や携帯電話であってもよい。
【００３１】
また、この実施形態では、各ルータの下に一つのホストのみを配置しているが、複数のホストがルータの下に存在していても良いことは当然である。
【００３２】
コントローラ２は、例えば、ＣＰＵや記憶装置を備えている。また、コントローラ２は、その機能（後述）を実行するコンピュータソフトウエアを備えている。コントローラ２は、要するに、後述する機能を実行するサーバである。
【００３３】
さらに、この実施形態では、各ノード（ルータやホスト等）に対して、次のようにＩＰアドレスが割り当てられているものとする。
【表１】
2005045678.tif 000003
これらのＩＰアドレスは、例えば、３２ビットの２進数である（ＩＰｖ４の場合）。ただし、３２ビットのＩＰアドレスを８ビットずつ区切って１０進数で表記することもできる。具体的には、一つのＩＰアドレスは、１０進数を使って、192.168.0.1のように表せる。
【００３４】
この実施形態では、各ホストには、プライベートな（つまりグローバルでない）ＩＰアドレスが割り当てられ、各ルータおよびコントローラには、グローバルなＩＰアドレスが割り当てられているものとする。
【００３５】
（通信方法）
（図２のステップ２−１）
つぎに、本発明に係る通信方法を、図２〜図７を参照しながら説明する。まず、第１ホストＡおよび第２ホストＢは、コントローラ２にパケットを送る（図３参照）。例えば、第２ホストＢから送られたパケットには、送信元ＩＰアドレスとしてＩｂが格納される。この送信元ＩＰアドレスは、第２ルータＤを通過するときに、ＮＡＴ機能によって、第２ルータのＩＰアドレスＩｄに書き換えられる。このパケットがコントローラ２に到着すると、コントローラ２は、第２ルータＤ自体のＩＰアドレス（送信元ＩＰアドレス）を取得することができる。取得されたＩＰアドレスは、コントローラ２の記憶手段（例えばメモリやハードディスク）に格納される。同様にして、コントローラ２は、第１ルータＣ自体のＩＰアドレスを取得して記憶手段に格納することができる。このようにして取得された各ルータのＩＰアドレスは、「最後のルータのＩＰアドレス」である。なお、この実施形態では、最後のルータのＩＰアドレスを、ネットワークを介して取得している。ただし、グローバルＩＰアドレスが予め静的にルータに割り当てられているなどの特別な場合には、ネットワークを介さないで（つまりＩＰアドレスが格納されたデータベースなどを用いて）ルータのＩＰアドレスを取得することも理論的には可能である。
【００３６】
（図２のステップ２−２）
ついで、コントローラ２は、前記のようにして取得した各ルータ（最後のルータ）のＩＰアドレスを、相手側の各ホストに送る（図４参照）。したがって、第１ホストＡは、第２ルータＤのＩＰアドレスを取得する。第２ホストＢは、第１ルータＣのＩＰアドレスを取得する。さらに、コントローラ２は、各ホストに対して、自分側にある最後のルータのＩＰアドレスも送る。取得されたこれらのアドレスは、各ホストの記憶手段に格納される。
【００３７】
（図２のステップ２−３）
ついで、両ホストＡおよびＢは、自分からのパケットが最後に通過したルータ（ＮＡＴ機能を有するもの）までのホップ数を計測する（図５参照）。このルータは、当該ホストから外側ネットワークに至る経路において最後のルータということになる。
【００３８】
ホップ数の計測は、例えばＩＣＭＰ（Internet Control Message Protocol）を用いて次のようにして行うことができる。なお、この手順は、tracerouteとして良く知られているツールにおける手順と同様である。
【００３９】
まず、ホストから、ＵＤＰパケットを、そのＴＴＬを１から順に増やしながら、ルータに対して送信する。各ホストは、前記ステップ２−２において、自分側ルータのＩＰアドレスを取得している。もし、送信元ホストに対し、ルータを送信元とするＩＣＭＰ宛先到達不能メッセージ（例えばICMP port unreachable）が返ってきたら、そのときのＴＴＬが当該ルータまでのホップ数ということになる。例えば、ＴＴＬ＝１のパケットに対してルータから宛先到達不能メッセージが返れば、１ホップということになる。
【００４０】
ホップ数の計測には、ＩＣＭＰパケットを用いることもできる。この場合も、ＵＤＰパケットを用いる場合と同様に、ＴＴＬを１ずつ増やしながら、ICMP Echo Requestパケットをルータ宛に送信する。パケットに対してICMP Echo Reply が返ってきたら、その時のＴＴＬがルータまでのホップ数ということになる。
【００４１】
（図２のステップ２−４）
ついで、第２ホストＢは、単一のポートよりコントローラ２の複数のポートに対してパケットを送信する。送信されたパケットは、第２ルータＤにおけるＮＡＴ機能およびＩＰマスカレード機能により、アドレス変換がなされる。図６を参照しながらこの動作をさらに詳しく説明する。
【００４２】
例えば、第２ホストＢの送信ポートＰｂからコントローラ２のポートＰｓにパケットを送るとする。送信ポートＰｂは、例えばコントローラ２により予め指定される。つまり、コントローラ２は、第２ホストＢの送信ポートＰｂを知っているものとする。このとき、第２ホストＢからコントローラ２側の受信ポートＰｓに向けて発信されたパケットにおける送信元ＩＰアドレスおよび送信元ポートは、Ｉｂ，Ｐｂとなる。このように、この明細書では、ＩＰアドレスとポートとの組を、Ｉｂ，Ｐｂのように表す。
【００４３】
このパケットの送信元ＩＰアドレスおよび送信元ポートは、第２ルータＤを通過するときにルータのものに書き換えられて、Ｉｄ，Ｐｄとなる。このパケットがコントローラ２に到着すると、コントローラ２は、送信元ポートＰｂがＰｄに書き換えられたことを知ることができる。
【００４４】
ついで、第２ホストＢは、送信ポートＰｂからコントローラのポートＰｓ２に向けて、前記と同様にして、パケットを送る。すると、コントローラ２は、送信ポートＰｂがＰｄ′（Ｐｄと同じ場合も異なる場合もある）となったことを知ることができる。単一の送信元ポートからの異なる送信先ポートへのパケット送信を試行する回数は、３回以上であってもよい。
【００４５】
第１ホストＡからも、前記した第２ホストＢの場合と同様にして、コントローラ２に向けて複数のパケットを送信する。これにより、コントローラ２は、「第１ルータＣのＮＡＴ機能によって、送信元ポートＰａがＰｃ，Ｐｃ′，…に書き換えられたこと」を知ることができる。
【００４６】
前記した、各ホストからコントローラへのパケット送信は、第２ホストＢおよび第１ホストＡのどちらから先に行ってもよく、また同時でもよい。
【００４７】
（図２のステップ２−５）
コントローラ２は、前記のステップ２−４において受信したパケットを解析する。もちろん、解析自体は他のコンピュータが行っても良い。コントローラ２は、この解析に基づいて、第１ルータＣおよび第２ルータＤが、単一の送信元ポート番号が、送信先ノードが切り替わる際にＩＰマスカレード（ＮＡＰＴ）機能によってどのような送信元ポートに変換されるのかを推測・検知する。
【００４８】
換言すれば、コントローラ２は、第２ホストＢのポートＰｂから発信されたパケットが、第２ルータＤを通過するときの、ポートの変換規則を解析する。具体的には、例えば、
（１）同じポートが使用される場合、つまり、Ｐｄ＝Ｐｄ′＝Ｐｄ′′であった場合は、付されるポート番号Ｐｄ２＝Ｐｄと推測する。
（２）ポートが増加（または減少）していく場合、つまり、Ｐｄ＋２＝Ｐｄ′＋１＝Ｐｄ′′が成り立つときは、Ｐｄ２＝Ｐｄ′′＋１という規則であると解析する。
【００４９】
このようにして、コントローラ２は、「第２ホストＢから次に送られるパケットに対して第２ルータにより付される送信元ポートＰｄ２」を検知する。検知できない場合の対応方法は、第２実施形態として後述する。
【００５０】
コントローラ２は、第１ホストＡから次に送られるパケットに対して第１ルータＣにより付される発信元ポートも、同様の解析（推測）によって検知する。つまり、第１ホストＡのポートＰａから発信されたパケットに付される、第１ルータＣにおける発信元ポートＰｃ２を検知する。
【００５１】
（図２のステップ２−６）
コントローラ２は、このようにして検知されたポートＰｄ２を表すデータ（ポートそれ自体、その暗号化データなどの、ポートを示す情報）を、第１ホストＡに通知する。同様に、コントローラ２は、ポートＰｃ２を表すデータを、第２ホストＢに通知する。つまり、コントローラ２は、一方のホストに、他方の（相手方の）ホストからのパケットが最後に通過するルータ（ＮＡＴ機能付き）が次のパケット送信のために用いる発信元ポートを通知する。第１ホストＡおよび第２ホストＢは、知らされたポートを記憶手段に格納しておく。
【００５２】
（図２のステップ２−７）
ついで、第１ホストＡのポートＰａから第２ルータＤのポートＰｄ２に向けてパケットを送信する（図７参照）。これによって、第１ルータＣに、第１ホストＡと第１ルータＣと第２ルータＤとにおけるＩＰアドレスおよびポートのマッピングテーブルを生成する。つまり、第１ルータＣには、
ホストＡ＜Ｉａ，Ｐａ＞、
ルータＣ＜Ｉｃ，Ｐｃ２＞、
ルータＤ＜Ｉｄ，Ｐｄ２＞
間のマッピングができあがる。これは、Ｉｃ，Ｐｃ２にＩｄ，Ｐｄ２からアクセスがあったらＩａ，Ｐａに転送することを意味している。
【００５３】
なお、このパケットは、相手方ルータに到達しないことが好ましい。相手方ルータにマッピングが形成される前に、ルータの発信元ポートを指定したパケットがルータに到達すると、ＮＡＴの機能によって、そのポートが使用禁止になることがあるからである。
【００５４】
相手方ルータに到達しないパケットは、ＴＴＬの調整により生成することができる。ＴＴＬは、前記したステップ２−６で取得した、ホストからルータ（外側ネットワークに至る経路において最後のもの）までのホップ数を用いて設定する。例えば、当該ホストからルータまでのホップ数をＴＴＬに等しく設定すれば、当該ルータまでは到達するが、相手方ルータには届かないパケットを生成できる。
【００５５】
また、この実施形態では、第２ホストＢからも、前記と同様にして、第１ホストＡに向けてパケットを送信する。これにより、第２ルータＤにおいても、
ホストＢ＜Ｉｂ，Ｐｂ＞、
ルータＤ＜Ｉｄ，Ｐｄ２＞
ルータＣ＜Ｉｃ，Ｐｃ２＞、
間のマッピングを生成することができる。当然のことながら、どちらのマッピングを先に生成してもよい。
【００５６】
なお、多くのルータでは、ＴＣＰやＵＤＰにおけるセッションに時間制限を設けている。特にＵＤＰタイマーはＴＣＰタイマーより短く、一般に３０秒である。もし前記したマッピングテーブルの生成にＵＤＰを用いた場合、そのテーブルはＵＤＰ通信が３０秒間無ければ削除される。したがって、第１ホストＡと第２ホストＢとの間で長時間の接続を維持する為には、セッションの時間制限よりも短い間隔で、接続を維持する為の通信（ＵＤＰ通信）を行なう必要がある。
【００５７】
（図２のステップ２−８）
ついで、相手方ルータのＩＰアドレスおよびポートを指定して、ホストからパケットを送信する。つまり、例えば第２ホストＢから、第１ルータＣのＩＰアドレスおよびポートをＩｃ，Ｐｃ２のように指定したパケットを送信する。第２ルータＤは、そのＮＡＴ機能およびＩＰマスカレード機能によって、パケットの送信元ＩＰアドレスおよび送信元ポートを＜Ｉｄ，Ｐｄ２＞のように変更する。この送信元ポートＰｄ２は、前記ステップ２−５において推測されていたものである。このパケットを受け取った第１ルータＣは、既に形成されているマッピングに従って、このパケットを第１ホストＡに届ける。同様にして、第１ホストＡから、第２ルータＤのＩＰアドレスおよびポートをＩｄ，Ｐｄ２のように指定したパケットを送信することにより、第２ホストＢにパケットを届けることができる。
【００５８】
したがって、本実施形態の通信方法によれば、ルータのＮＡＴ機能に手を加えなくとも、ホストどうしの直接通信が可能となるという利点がある。
【００５９】
また、本実施形態の通信方法では、ホストから最後のルータ（前記したルータＣまたはルータＤ）に至るネットワーク経路中に別のルータがあっても、ホスト間の直接の通信が可能である。最後のルータのＩＰアドレスとポートを指定することにより、内側ホストにパケットを届けることができるからである。なお、この内側のルータは、ＮＡＴ機能やＩＰマスカレード機能を有していても良い。
【００６０】
（第２実施形態）
つぎに、本発明の第２実施形態に係る通信方法を図８〜図１１に基づいて説明する。この方法の説明においては、前記第１実施形態の説明と重複する部分は前記の説明を援用し、相違する部分を説明する。
【００６１】
第２実施形態の通信方法は、前記したステップ２−５における送信元ポートの検知ができない場合に用いられる。例えば、ルータによっては、その送信元ポートに、通信の都度、ランダムなポートを割り当てるものがある。こういう場合は、送信元ポートの検知が困難となる。この場合は、図２のステップ２−５〜２−８に代えて、図８のステップが行われる。
【００６２】
（図８のステップ８−１）
まず、コントローラは、第１または第２ルータＣまたはＤがランダムポート割り当てをしているかどうかを検出する。この検出手順は、図２のステップ２−５の手順と実質的に同じでよい。ただし、ポート検知が不成功であったことをもってランダム割り当てと判断する。ランダム割り当てでなければ、第１実施形態の方法を実施すればよい。
【００６３】
（図８のステップ８−２）
第１または第２ルータＣまたはＤがランダムポート割り当てをしている場合は、このような割り当てをするルータが一方のみかどうかを判断する。これは、前記ステップ８−１での検出（ランダム割り当ての検出）が両方のルータにおいて行われたかどうかをもって行うことができる。
【００６４】
ランダムポート割り当てを行うルータが、第１および第２ルータのうち一方のみであれば、コントローラ２は、一方のルータがランダムポート割り当てを行うことを、例えば所定のフラグを用いて記憶する。さらに、コントローラ２は、送信元ポートの推測（前記ステップ８−１）において他方のルータから受け取ったパケットの送信元ポートＰｎを保存しておく。
【００６５】
ランダムポート割り当てを行うルータが両方であれば、この方法による通信は困難となる。
【００６６】
（図８のステップ８−３）
ランダムポート割り当てを行うルータが一方のみであれば、つぎに、他方のルータが、ポートの衝突を検知するものかどうかを判断する。ルータにおけるポートの衝突検知について図９を用いて説明する。
【００６７】
例えば、ホストXとホストYとで通信が行われると、ルータのＮＡＴ上にはホストX（Ix,Px）・ルータ（In,Pn）・ホストY（Iy,Py）間のマッピングが生成される。ここで、ホストＹ以外（ホストＺ）からルータのＩＰアドレスおよびポート（In,Pn）宛に通信が行われたとする。すると、ルータのＮＡＴ機能は、
（ａ）PnがホストX・Y間のマッピングに使用中であることを検知し、
（ｂ）ホストX・Z間の通信には、前記ホストX・Z間のマッピングの一部であるホストX（Ix,Px）とルータ（In,Pn）間のマッピングを使用しない、
という動作を行う。
【００６８】
これによって、ルータは、ホストＺがホストＸとルータのＩＰアドレスおよびポート（In,Pn）を経由して通信を行うことを阻止する。これがルータにおけるポートの衝突検知である。
【００６９】
（衝突検知の判定手順）
衝突検知をするルータかどうかの判定手順を図１０に基づいて説明する。コントローラ２は、前記ステップ８−２で得た、他方のルータのポートＰｎに対して、パケットを受信したポート以外のポートからパケットを送信する（ステップ１０−１）。
【００７０】
ホストは、このパケットを受信したか否かを確認する（ステップ１０−２）。受信できれば、他方のルータが衝突検知を行わないと判断することができる（ステップ１０−３）。受信できなければ、衝突検知を行うルータであると判断する。このときは、この方法による通信は困難となる。
【００７１】
ステップ８−１からステップ８−３の衝突検知までの一連の作業は、複数回行われても良い。
【００７２】
（図８のステップ８−４）
ついで、一方のルータ（ランダムポートを割り当てるルータ）側のホストから、他方のルータ（衝突検知を行わないルータ）の発信元ポートＰｎに向けて通信を行う（図１１参照）。この通信が始まると、一方のルータでの送信ポートも決定されて、その結果、両ホスト間での直接通信が可能となる。
【００７３】
本実施形態では、前記ステップ８−２において他方のルータに生成されたマッピングテーブルのポートを利用している。しかし、ステップ８−３において他方のルータが衝突検知をしないことを検出した後、あらたに、他方のルータ上にマッピングテーブルを作成しても良い。マッピングテーブルの作成は、例えば、他方のルータに接続されたホストから、一方のルータの任意ポートにパケットを送信することにより行うことができる。
【００７４】
次に、本発明の第３実施形態に係る通信システムおよび通信方法を、図１２を用いて説明する。なお、この実施形態の説明においては、前記第１実施形態と共通する部分は同一符号を付すことで説明を簡略化する。また、この実施形態の説明では、図２を参照しながら、第１実施形態と相違する動作を主に説明する。
【００７５】
第１実施形態の方法では、第１ホストAと第２ホストBとの間で直接の通信ができる。ここで、通信の際に各ホストが送信するパケットの宛先は（Id,Pd2）、（Ic,Pc2）のように、パケットにおける当初の宛先とは異なる値となる。しかしながら、例えばL2TP通信を行いたい場合には、ホストに通常実装されているL2TP機能における使用ポートは1701と固定されている。第１実施形態の方法では、このように使用ポートが固定されている通信を行うことが困難となる。もちろん、実装プログラムを改造すれば通信は可能であるが、これは現実的ではない。
【００７６】
第３実施形態では、ルータ（ＮＡＴ）とホスト（以降の説明ではクライアント）との間に代理ホストを置くことで、任意ポートと特定ポート（例えば1701）とを変換し、特定ポートを用いた直接通信を可能としている。以下詳しく説明する。
【００７７】
以下の説明では各ノードを次のように定義する。
【表２】
2005045678.tif 000004
【００７８】
（ステップ２−１）
この実施形態では、前記表１に示したように、第１ホストＡの下に第１クライアントＥが接続されている（図１２参照）。同様に、第２ホストＢの下に第２クライアントＦが接続されている（図１２参照）第１および第２クライアントＥおよびＦは、ホストと同様に、コンピュータにより構成されている。また、この実施形態では、第１ホストＡ及び第２ホストＢがプロキシサーバとして機能している。
【００７９】
この実施形態の方法では、まず、第２クライアントＦは、第２ホストＢに、送信元ポートＰｆを用いて第１クライアントＥの宛先ポートＰｅと通信したい旨を依頼する。具体的には、第２クライアントＦは、自らが使用する送信ポートＰｆと、宛先である第１クライアントＥの受信ポート（宛先ポート）Ｐｅとを含む情報を第２ホストＢに送る。第２ホストＢは、これらの情報（第２クライアントＦのＩＰアドレスＩｆを含む）を記憶する。一方、第１クライアントＥは、自身の待ち受けポートがＰｅであることを第１ホストＡに送信し、第１ホストＡはこの情報を記憶する。なお、第１および第２クライアントＥおよびＦは、第１クライアントＥの受信ポートＰｅを知っていることが前提である。
【００８０】
ついで、第１ホストＡおよび第２ホストＢは、コントローラ２に対してパケットを送る（図３参照）。例えば、第２ホストＢから送られたパケットには、送信元ＩＰアドレスとしてＩｂが格納される。この送信元ＩＰアドレスは、第２ルータＤを通過するときに、ＮＡＴ機能によって、第２ルータのＩＰアドレスＩｄに書き換えられる。このパケットがコントローラ２に到着すると、コントローラ２は、第２ルータＤ自体のＩＰアドレス（送信元ＩＰアドレス）を取得することができる。取得されたＩＰアドレスは、コントローラ２の記憶手段（例えばメモリやハードディスク）に格納される。同様にして、コントローラ２は、第１ルータＣ自体のＩＰアドレスを取得して記憶手段に格納することができる。このようにして取得された各ルータのＩＰアドレスは、「最後のルータのＩＰアドレス」である。なお、この実施形態では、最後のルータのＩＰアドレスを、ネットワークを介して取得している。ただし、グローバルＩＰアドレスが予め静的にルータに割り当てられているなどの特別な場合には、ネットワークを介さないで（つまりＩＰアドレスが格納されたデータベースなどを用いて）ルータのＩＰアドレスを取得することも理論的には可能である。以降ステップ２−２からステップ２−７までは、前記第１実施形態と同様なので説明を省略する。ステップ２−８は以下のようになる。
【００８１】
（ステップ２−８）
ついで、第２クライアントＦは、第２ホストＢのポートＰｅ（第１クライアントＥのポートＰｅと同じポート、例えば１７０１）に対して、ポートＰｆを送信元とするパケットを送信する。パケットを受けた第２ホストＢは、ステップ２−１で第２クライアントＦから受けた情報（送信元ＩＰアドレスＩｆ、送信元ポートＰｆ、宛先ポートＰｅ）に基づいて、このパケットが第１クライアントＥ宛てであると判断し、パケットのＩＰアドレスおよびポートを、ステップ２−７におけるマッピングテーブル生成に用いた値と入れ替える。すなわち第２ホストＢは、第２クライアントＦからの送信元（Ｉｆ，Ｐｆ）宛先（Ｉｂ，Ｐｅ）のパケットを送信元（Ｉｂ，Ｐｂ）宛先（Ｉｃ，Ｐｃ２）へと置き換える。この時第２ホストＢは、この置き換え情報を記憶する。
【００８２】
ついで、第２ホストＢから、第１ルータＣへ先のパケットを送信する。第２ルータＤは、そのＮＡＴ機能およびＩＰマスカレード機能によって、パケットの送信元ＩＰアドレスおよび送信元ポートを（Ｉｄ，Ｐｄ２）のように変更する。この送信元ポートＰｄ２は、前記ステップ２−５において推測されていたものである。このパケットを受け取った第１ルータＣは、既に形成されているマッピングに従って、このパケットを第１ホストＡに届ける。
【００８３】
パケットを受け取った第１ホストＡは、送信元（Ｉｄ，Ｐｄ２）宛先（Ｉａ，Ｐａ）のパケットを送信元（Ｉａ，Ｐａ）宛先（Ｉｅ，Ｐｅ）へと置き換える。この時第１ホストＡはこの置き換え情報を記憶する。なお、この置き換え処理は、
（１）第１ホストＡが、ステップ２−２で受け取った相手ホスト側の最後のルータのＩＰアドレスと、ステップ２−６で受け取った相手方ルータの発信元ポートから、第１クライアントＥ宛ての通信パケットがどのＩＰアドレスのどのポートから届くかを認識していること、および
（２）ステップ２−１で第１クライアントＥより受け取った待ち受けポートの情報から、そのパケットを第１クライアントＥのどのポートへ届けるのか認識していること
から可能となる。
【００８４】
ついで、第１ホストＡは、第１クライアントＥへ先のパケットを送信する。これによって、第２クライアントＦは、第２ホストＢ、第２ルータＤ，第１ルータＣ、第１ホストＡを介して、第１クライアントＥのポートＰｅへパケットを届けることができる。
第１クライアントＥより第２クライアントＦへ返信する際は、第１クライアントＥは第１ホストＡの送信元ポートＰａへ返信する。パケットを受け取った第１ホストＡは、既に記憶されている置き換え情報に基づいて送信元（Ｉｅ，Ｐｅ）宛先（Ｉａ，Ｐａ）のパケットを送信元（Ｉａ，Ｐａ）宛先（Ｉｄ，Ｐｄ２）へと置き換え、第２ルータＤへ送信する。このパケットを受け取った第１ルータＣは、既に形成されているマッピングに従って、このパケットを第２ルータＤに届ける。このパケットを受け取った第２ルータＤは、既に形成されているマッピングに従って、このパケットを第２ホストＢに届ける。受け取った第２ホストＢは、この送信元（Ｉｃ，Ｐｃ２）宛先（Ｉｂ，Ｐｂ）のパケットを既に記憶されている置き換え情報に基づいて送信元（Ｉｂ，Ｐｂ）宛先（Ｉｆ，Ｐｆ）と置き換え、第２クライアントＦへ届けることができる。
【００８５】
このように、この実施形態の方法およびシステムによれば、ポートが固定されている通信も可能となる。
【００８６】
なお、前記各実施形態の記載は単なる一例に過ぎず、本発明に必須の構成を示したものではない。各部の構成は、本発明の趣旨を達成できるものであれば、上記に限らない。
【００８７】
また、前記した各実施形態における構成要素（ホスト、ルータおよびコントローラを含む）は、機能要素として存在していればよい。一つの機能要素は、他の要素と統合されていてもよく、また、複数の部品やコンピュータソフトウエアによって一つの要素が実現されていてもよい。さらに機能要素の実現方法としては、ハードウエアを用いても、コンピュータソフトウエアを用いてもよい。さらに機能要素相互の接続形態は、ネットワークを介したものであってもよい。つまり、複数の機能要素が互いに離間した位置に存在していても良い。例えば、前記したコントローラが複数のサーバで構成されていても良い。
【図面の簡単な説明】
【００８８】
【図１】本発明の第１実施形態に係る通信方法に用いるシステムの概略的な構成を示すブロック図である。
【図２】第１実施形態における通信方法を説明するためのフローチャートである。
【図３】第１実施形態における通信方法を説明するためのブロック図である。
【図４】第１実施形態における通信方法を説明するためのブロック図である。
【図５】第１実施形態における通信方法を説明するためのブロック図である。
【図６】第１実施形態における通信方法を説明するためのブロック図である。
【図７】第１実施形態における通信方法を説明するためのブロック図である。
【図８】第２実施形態における通信方法を説明するためのフローチャートである。
【図９】第２実施形態における通信方法の前提となるポート衝突検知を説明するためのブロック図である。
【図１０】第２実施形態における通信方法を説明するためのフローチャートである。
【図１１】第２実施形態における通信方法を説明するためのブロック図である。
【図１２】第３実施形態における通信方法を説明するためのブロック図である。
【符号の説明】
【００８９】
Ａ  第１ホスト
Ｂ  第２ホスト
Ｃ  第１ルータ
Ｄ  第２ルータ
Ｅ  第１クライアント
Ｆ  第２クライアント
１  ネットワーク
２  コントローラ
【図１】
2005045678.tif 000005
【図２】
2005045678.tif 000006
【図３】
2005045678.tif 000007
【図４】
2005045678.tif 000008
【図５】
2005045678.tif 000009
【図６】
2005045678.tif 000010
【図７】
2005045678.tif 000011
【図８】
2005045678.tif 000012
【図９】
2005045678.tif 000013
【図１０】
2005045678.tif 000014
【図１１】
2005045678.tif 000015
【図１２】
2005045678.tif 000016