端末装置、通信方法、及び通信プログラム
【課題】端末装置間で通信が開始されるまでの時間が短く、且つ、通信時における遅延が発生し難い端末装置、通信方法、通信プログラムを提供する。
【解決手段】異なるNAT装置の配下にある端末装置9と端末装置10との間で映像データの通信が行われる。はじめに端末装置9は、HTTPサーバ4を介したトンネリング通信によって、端末装置10と通信を開始する(119)。トンネリング通信が実行されている状態で、NAT装置のNAT種別が特定される(121,123)。端末装置9,10間でP2P通信を行うために必要な開始手順の通信が、判定されたNAT種別によって特定され、特定された開始手順に基づいて、端末装置9,10間で通信が行われる(125)。通信後、端末装置9,10間でP2P通信が実行され(127)、次いでトンネリング通信が中止される。
【解決手段】異なるNAT装置の配下にある端末装置9と端末装置10との間で映像データの通信が行われる。はじめに端末装置9は、HTTPサーバ4を介したトンネリング通信によって、端末装置10と通信を開始する(119)。トンネリング通信が実行されている状態で、NAT装置のNAT種別が特定される(121,123)。端末装置9,10間でP2P通信を行うために必要な開始手順の通信が、判定されたNAT種別によって特定され、特定された開始手順に基づいて、端末装置9,10間で通信が行われる(125)。通信後、端末装置9,10間でP2P通信が実行され(127)、次いでトンネリング通信が中止される。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は端末装置、通信方法、及び通信プログラムに関する。より詳細には、異なるNAT装置の配下にある他の端末装置との間で通信を行う端末装置、通信方法、及び通信プログラムに関する。
【背景技術】
【0002】
インターネットを介し、端末装置間で映像や音声の通信を行う場合、NAT(Network Address Translation)機能を備えた装置(以下「NAT装置」という。)が障害となる場合がある。NAT装置は、インターネット側からLAN側に向かう方向のパケットを受信した場合、NAT装置に記憶されているポート番号宛てのパケットのみLAN側に転送し、その他のポート番号宛てのパケットはブロックしてしまうためである。
【0003】
異なるNAT装置の配下の端末装置と通信を行うための方法として、様々な方法が提案されている。例えば、端末装置間でP2P(Peer to Peer)通信を開始するために必要な開始手順としてUPnP(Universal Plug and Play)やUDP Hole Punching等の複数の開始手順から最適な手順を選択して実行し、その後P2P通信を行う方法が提案されている。また例えば特許文献1では、通信データをHTTP(HyperText Transfer Protocol)によってカプセル化し、HTTPトンネリングサーバを中継させることによって通信を行う方法が提案されている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2006−197182号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
端末装置間でP2P通信を行う場合に必要な開始手順は、NAT装置の種類(Cone NAT、Symmetric NATなど)に応じて決定される。ここで、端末装置がサーバを介してNAT装置の種類を判定するためには、多くのテスト用パケットがNAT装置を介してサーバに送信される必要がある。このため、NAT装置の種類を判定して開始手順を特定し、この開始手順に基づいて通信を行ってP2P通信を開始するまでに、時間がかかってしまうという問題点がある。また特許文献1に記載の方法では、HTTPサーバが音声や映像をリアルタイムに中継する必要があるので、サーバに負荷がかかってしまって遅延が発生し易いという問題点がある。
【0006】
本発明は上述の問題点を解決するためになされたものであり、端末装置間で通信が開始されるまでの時間が短く、且つ、通信時における遅延の発生を低減させることのできる端末装置、通信方法、及び通信プログラムを提供することを目的とする。
【課題を解決するための手段】
【0007】
本発明の第一態様に係る端末装置では、外部ネットワークに接続するNAT装置の配下の内部ネットワークに接続され、前記NAT装置とは異なる他の前記NAT装置の配下にある他の端末装置と通信を行う端末装置であって、前記外部ネットワークに接続するサーバであって、前記NAT装置が転送可能な通信プロトコルに基づいてパケットをカプセル化/非カプセル化することによって、前記端末装置間のトンネリング通信を実現するサーバを介し、異なる前記NAT装置の配下の前記内部ネットワークに接続された通信相手の前記端末装置である相手端末装置との間でトンネリング通信を行う第一通信手段と、前記第一通信手段によって前記相手端末装置との間で前記トンネリング通信が行われている状態で、前記NAT装置におけるポートマッピングの方法毎に前記NAT装置を種別した種別情報であって、自身が直接接続する前記NAT装置である自身NAT装置の種別情報と、前記相手端末装置が直接接続する前記NAT装置である相手NAT装置の種別情報とのうち少なくとも一方を、前記外部ネットワークに接続された管理サーバとの通信によって前記管理サーバから取得し特定する第一特定手段と、前記第一特定手段において特定された前記種別情報に基づいて、前記自身NAT装置及び前記相手NAT装置を介して前記相手端末装置とP2P(Peer to Peer)通信を開始させる場合に必要な開始手順を、記憶手段に記憶した手順リストから選択する選択手段と、前記選択手段において選択された前記開始手順に基づいた通信を行うことによって、前記相手端末装置との間で前記P2P通信を開始させ、次いで、前記第一通信手段によって行われている前記トンネリング通信を終了させることによって、前記トンネリング通信を前記P2P通信に切り替える切替手段と、前記切替手段によって前記トンネリング通信から前記P2P通信に切り替えられた後、前記相手端末装置との間で前記P2P通信を行う第二通信手段とを備えている。
【0008】
第一態様に係る端末装置では、P2P通信が開始されるまではトンネリング通信によって通信が行われるので、端末装置間の通信を遅滞なく開始させることができる。選択された開始手順に基づいて通信が行われた後、トンネリング通信がP2P通信に切り替えられるので、サーバにおける処理負荷を極力低減させることができる。P2P通信に切り替えられた後は、よりスループットの大きな通信を行うことができる。
【0009】
また第一態様において、前記第一通信手段において前記トンネリング通信を開始する前に、前記自身NAT装置の種別情報と、前記相手NAT装置の種別情報とのうち少なくとも一方を、前記管理サーバとの通信によって前記管理サーバから取得し特定する第二特定手段と、前記第二特定手段において特定された前記種別情報に基づいて、前記開始手順に基づいた通信を行わなければ前記相手端末装置との前記P2P通信を開始できないか否かを判定する判定手段とを備え、前記第一通信手段は、前記判定手段において前記開始手順に基づいた通信を行わなければ前記相手端末装置との前記P2P通信を開始できないと判断された場合に、前記相手端末装置との間で前記トンネリング通信を行ってもよい。このようにすることで、開始手順に基づいた通信を行わなければP2P通信を開始させることができない場合にのみ、トンネリング通信を行うようにすることができる。
【0010】
また第一態様において、前記トンネリング通信によって前記相手端末装置から受信したパケットである第一パケットに含まれるデータと、前記P2P通信時によって前記相手端末装置から受信したパケットである第二パケットに含まれるデータとの少なくともずれかを出力する出力手段と、前記切替手段において前記トンネリング通信が前記P2P通信に切り替えられる前の状態で、前記第一パケットに含まれるデータを前記出力手段に出力し、前記トンネリング通信が前記P2P通信に切り替えられた後の状態で、前記第二パケットに含まれるデータを前記出力手段に出力する出力制御手段を備え、前記出力制御手段は、前記P2P通信の開始時点において、前記第一パケットよりも前記第二パケットの方が先行している場合には、受信した前記第二パケットに含まれるデータを、所定の第一周期で出力し、前記第二パケットよりも前記第一パケットの方が先行している場合には、受信した前記第一パケットに含まれるデータを、前記第一周期よりも長い第二周期で出力してもよい。このようにすることで、受信した第一パケット及び第二パケットに含まれるデータの表示周期が調整されるので、トンネリング通信からP2P通信に切り替える場合であっても、出力手段に出力させるデータをスムーズに切り替えることができる。
【0011】
また、第二態様に係る端末装置では、外部ネットワークに接続するNAT装置の配下の内部ネットワークに接続され、前記NAT装置とは異なる他の前記NAT装置の配下にある他の端末装置と通信を行う端末装置であって、前記NAT装置におけるポートマッピングの方法毎に前記NAT装置を種別した種別情報であって、自身が直接接続する前記NAT装置である自身NAT装置の種別情報と、通信相手の前記端末装置である相手端末装置が直接接続する前記NAT装置である相手NAT装置の種別情報とのうち少なくとも一方を特定する第三特定手段と、前記第三特定手段において特定された前記種別情報に基づいて、前記自身NAT装置及び前記相手NAT装置を介して前記相手端末装置とP2P(Peer to Peer)通信を開始させる場合に必要な開始手順に基づいた通信を行わなければ、前記相手端末装置との前記P2P通信を開始できないか否かを判定する判定手段と、前記判定手段において前記開始手順に基づいた通信を行わなくても前記相手端末装置との前記P2P通信を開始できると判断された場合に、前記相手端末装置との間でP2P通信を行う第三通信手段とを備えている。
【0012】
第二態様に係る端末装置では、特別な開始手順に基づいて通信を行わなくてもP2P通信を開始させることができると判断された場合には、トンネリング通信を行わずP2P通信を開始させることができる。サーバに負荷をかけることなく、端末装置間で通信を開始させることができる。
【0013】
また、第三態様に係る通信方法は、外部ネットワークに接続するNAT装置の配下の内部ネットワークに接続され、前記NAT装置とは異なる他の前記NAT装置の配下にある他の端末装置と通信を行うための通信方法であって、前記外部ネットワークに接続するサーバであって、前記NAT装置が転送可能な通信プロトコルに基づいてパケットをカプセル化/非カプセル化することによって、前記端末装置間のトンネリング通信を実現するサーバを介し、異なる前記NAT装置の配下の前記内部ネットワークに接続された通信相手の前記端末装置である相手端末装置との間でトンネリング通信を行う第一通信ステップと、前記第一通信ステップによって前記相手端末装置との間で前記トンネリング通信が行われている状態で、前記NAT装置におけるポートマッピングの方法毎に前記NAT装置を種別した種別情報であって、自身が直接接続する前記NAT装置である自身NAT装置の種別情報と、前記相手端末装置が直接接続する前記NAT装置である相手NAT装置の種別情報とのうち少なくとも一方を、前記外部ネットワークに接続された管理サーバとの通信によって前記管理サーバから取得し特定する第一特定ステップと、前記第一特定ステップにおいて特定された前記種別情報に基づいて、前記NAT装置を介して他の通信端末とP2P(Peer to Peer)通信を開始させる場合に必要な開始手順を、記憶手段に記憶した手順リストから選択する選択ステップと、前記選択ステップにおいて選択された前記開始手順に基づいた通信を行うことによって、前記相手通信端末との間で前記P2P通信を開始させ、次いで、前記第一通信ステップによって行われている前記トンネリング通信を終了させることによって、前記トンネリング通信を前記P2P通信に切り替える切替ステップと、前記切替ステップによって前記トンネリング通信から前記P2P通信に切り替えられた後、前記相手端末装置との間で前記P2P通信を行う第二通信ステップとを備えている。
【0014】
第三態様では、P2P通信が開始されるまではトンネリング通信によって通信が行われるので、端末装置間の通信を遅滞なく開始させることができる。選択された開始手順に基づいて通信が行われた後、トンネリング通信がP2P通信に切り替えられるので、サーバにおける処理負荷を極力低減させることができる。P2P通信に切り替えられた後は、よりスループットの大きな通信を行うことができる。
【0015】
また第三態様において、前記第一通信ステップにおいて前記トンネリング通信を開始する前に、前記自身NAT装置の種別情報と、前記相手NAT装置の種別情報とのうち少なくとも一方を、前記管理サーバとの通信によって前記管理サーバから取得し特定する第二特定ステップと、前記第二特定ステップにおいて特定された前記種別情報に基づいて、前記開始手順に基づいた通信を行わなければ前記相手端末装置との前記P2P通信を開始できないか否かを判定する判定ステップとを備え、前記第一通信ステップは、前記判定ステップにおいて前記開始手順に基づいた通信を行わなければ前記相手端末装置との前記P2P通信を開始できないと判断された場合に、前記相手端末装置との間で前記トンネリング通信を行ってもよい。このようにすることで、開始手順に基づいた通信を行わなければP2P通信を開始させることができない場合にのみ、トンネリング通信を行うようにすることができる。
【0016】
また第四態様に係る通信プログラムは、端末装置の各処理手段としてコンピュータを機能させる。これによって通信プログラムは、端末装置の各処理手段としてコンピュータを機能させることができる。
【図面の簡単な説明】
【0017】
【図1】通信システム1の概要を示す模式図である。
【図2】サーバ5の電気的構成を示すブロック図である。
【図3】NAT装置8の電気的構成を示すブロック図である。
【図4】端末装置11の電気的構成を示すフロック図である。
【図5】手順リスト841を示す模式図である。
【図6】端末装置処理を示すフローチャートである。
【図7】端末装置処理を示すフローチャートである。
【図8】UPnP判別処理を示すフローチャートである。
【図9】NAT種別判定処理を示すフローチャートである。
【図10】NAT種別判定処理を示すフローチャートである。
【図11】変更パターン推測処理を示すフローチャートである。
【図12】タイミング調整処理を示すフローチャートである。
【図13】第一同期処理を示すフローチャートである。
【図14】第二同期処理を示すフローチャートである。
【図15】端末装置9,10間の通信を示すシーケンス図である。
【図16】再生パケットが選択される様子を示す図である。
【図17】再生パケットが選択される様子を示す図である。
【図18】変形例における端末装置処理を示すフローチャートである。
【発明を実施するための形態】
【0018】
以下、本発明に係る通信システム1について、図面を参照して説明する。これらの図面は、本発明が採用しうる技術的特徴を説明するために用いられるものである。記載されている端末の構成、各種処理のフローチャートなどは、それのみに限定する趣旨ではなく、単なる説明例である。
【0019】
図1を参照し、通信システム1の概要について説明する。通信システム1は、サーバ5(STUNサーバ2、SIPサーバ3、HTTPサーバ4)、NAT装置6,7(以下、これらを区別しない場合、「NAT装置8」という。)、及び端末装置9,10(以下、これらを区別しない場合、「端末装置11」という。)を少なくとも備えている。サーバ5とNAT装置8とは、インターネット15に接続している。NAT装置8は、配下のLAN12,13(以下、これらを区別しない場合、「LAN14」という。)に接続している。端末装置11は、LAN14に接続している。図1に示す例では、NAT装置6の配下のLAN12に端末装置9が接続している。NAT装置7の配下のLAN13に端末装置10が接続している。
【0020】
STUNサーバ2は、端末装置11と通信を行うことによって、端末装置11間でP2P(Peer to Peer)通信を行うために必要な情報を、端末装置11に対して提供する。SIPサーバ3は、SIP(Session Initiation Protocol)に基づいて、端末装置11間の呼制御を行う。HTTPサーバ4は、HTTP(HyperText Transfer Protocol)に基づいたパケットを転送することによって、端末装置11にWeb情報を配信する制御を行う。またHTTPサーバ4は、パケットをHTTPによってカプセル化することによって、端末装置11間でトンネリング通信を実現させる。端末装置11は、HTTPサーバ4を介して、他の端末装置11とトンネリング通信を行う。また端末装置11は、他の端末装置11との間でP2P通信を行う。端末装置11としては、例えばPC(パーソナルコンピュータ)が使用できる。NAT装置8は、NAT(Network Address Translation)機能を備えた装置である。
【0021】
NAT装置8は、IPアドレスやポート番号の変換方法によって、Full Cone NAT、Address-Restricted Cone NAT、Port-Restricted Cone NAT、及び、Symmetric NATに分類される。所謂「NAT越え」の問題を解消し、端末装置11間でP2P通信を実行するためには、上述したNATの分類(以下「NAT種別」という。)毎に最適な開始手順(例えば、UPnP、UDP Hole Punching、UDP Multi Hole Punchingなど)が選択され、この開始手順に基づいた通信が実行される必要がある。
【0022】
本実施の形態では、NAT装置8のNAT種別が特定され開始手順が実行されることと平行して、端末装置11間でHTTPサーバ4を介したトンネリング通信が実行される。通常、HTTPサーバ4を介した通信は不特定の端末装置11間でも認められ、HTTPサーバ4を介したパケットがNAT装置8によってブロックされることはない。このため、HTTPサーバ4を介したトンネリング通信を行うことによって、端末装置11間の通信が迅速に開始される。一方、NAT装置8のNAT種別が特定され、開始手順に基づいた通信が実行された後は、端末装置11間でP2P通信を行うことが可能な状態となる。この場合、HTTPサーバ4を介したトンネリング通信は中止され、代わって端末装置11間でP2P通信が行われる。P2P通信では、サーバ等を介さず通信が行われるので、通信遅延等の問題を解消できる。
【0023】
図2を参照し、サーバ5の電気的構成について説明する。サーバ5は、CPU21、ROM22、RAM23、HDD24を備えている。CPU21は、NAT装置8や端末装置11との通信を制御する。ROM22には、Bootプログラムや初期設定パラメータが少なくとも記憶される。RAM23には、CPU21の処理時に発生する一時的なデータが少なくとも記憶される。HDD24には、CPU21のプログラムが少なくとも記憶される。CPU21は、ROM22、RAM23、及びHDD24と電気的に接続している。CPU21は、ROM22、RAM23、及びHDD24の記憶領域にアクセスできる。
【0024】
サーバ5は、入力ドライバ25を備えている。入力ドライバ25は、キーボード251を介して入力された情報を検出する。CPU21は、入力ドライバ25と電気的に接続している。入力ドライバ25は、キーボード251と電気的に接続する。CPU21は、キーボード251を介して入力された情報を認識できる。サーバ5は、表示ドライバ26を備えている。表示ドライバ26は、ディスプレイ261に像を表示させるための制御を行う。CPU21は、表示ドライバ26と電気的に接続している。表示ドライバ26は、ディスプレイ261と電気的に接続する。CPU21は、ディスプレイ261に所望の像を表示させることができる。
【0025】
サーバ5は、通信モジュール27を備えている。通信モジュール27は、インターネット15を介した通信を可能とする。CPU21は、通信モジュール27と電気的に接続している。CPU21は、インターネット15を介して通信を行うことができる。サーバ5は、ディスクドライブ28を備えている。ディスクドライブ28は、記憶媒体281に記憶された情報にアクセスする為の駆動装置である。CPU21は、ディスクドライブ28と電気的に接続している。CPU21は、ディスクドライブ28に記憶媒体281が挿入された状態で、記憶媒体281に記憶された情報にアクセスできる。記憶媒体281には、例えば、CPU21が実行するプログラムが記憶される。サーバ5の導入時には、プログラムが記憶媒体281からHDD24にセットアップされる。
【0026】
図3を参照し、NAT装置8の電気的構成について説明する。NAT装置8は、CPU51、ROM52、RAM53、フラッシュメモリ57を備えている。CPU51は、サーバ5や端末装置11との通信を制御する。ROM52には、CPU51のプログラムが少なくとも記憶される。RAM53には、CPU51の処理時に発生する一時的なデータが少なくとも記憶される。フラッシュメモリ57には、ポート番号が履歴情報として記憶される。CPU51は、ROM52、RAM53、及びフラッシュメモリ57と電気的に接続している。CPU51は、ROM52、RAM53、及びフラッシュメモリ57の記憶領域にアクセスできる。
【0027】
NAT装置8は、表示部54を備えている。表示部54は、NAT装置8の状態等を表示することができる。CPU51は、表示部54と電気的に接続している。CPU51は、表示部54に所望の情報を表示させることができる。表示部54としては、例えばLEDが使用できる。NAT装置8は、入力部55を備えている。入力部55は、ユーザによるNAT装置8への入力操作を受け付ける。CPU51は、入力部55と電気的に接続している。CPU51は、入力部55を介して入力された情報を認識できる。入力部55としては、例えばスイッチやタッチセンサが使用できる。
【0028】
NAT装置8は、通信モジュール58を備えている。通信モジュール58は、インターネット15を介した通信を可能とする。CPU51は、通信モジュール58と電気的に接続している。CPU51は、インターネット15を介して通信を行うことができる。NAT装置8は、通信モジュール59を備えている。通信モジュール59は、LAN14を介した通信を可能とする。CPU51は、通信モジュール59と電気的に接続している。CPU51は、LAN14を介して通信を行うことができる。
【0029】
図4を参照し、端末装置11の電気的構成について説明する。端末装置11は、CPU81、ROM82、RAM83、HDD84を備えている。CPU81は、NAT装置8やサーバ5との通信を制御する。ROM82には、Bootプログラムや初期パラメータが少なくとも記憶される。RAM83は、CPU81の処理時に発生する一時的なデータが少なくとも記憶される。HDD84は、CPU81のプログラムや、端末装置11間でP2P通信を開始させる場合の開始手順のリスト(以下「手順リスト」という。)が少なくとも記憶される。CPU81は、ROM82、RAM83、及びHDD84と電気的に接続している。CPU81は、ROM82、RAM83、及びHDD84の記憶領域にアクセスできる。
【0030】
端末装置11は、入力ドライバ85を備えている。入力ドライバ85は、キーボード851を介して入力された情報を検出する。CPU81は、入力ドライバ85と電気的に接続している。入力ドライバ85は、キーボード851と電気的に接続する。CPU81は、キーボード851を介して入力された情報を認識できる。端末装置11は、表示ドライバ86を備えている。表示ドライバ86は、ディスプレイ861に像を表示させるための制御を行う。CPU81は、表示ドライバ86と電気的に接続している。表示ドライバ86は、ディスプレイ861と電気的に接続する。CPU81は、ディスプレイ861に所望の像を表示させることができる。
【0031】
端末装置11は、通信モジュール87を備えている。通信モジュール87は、LAN14を介した通信を可能とする。CPU81は、通信モジュール87と電気的に接続している。CPU81は、LAN14を介して通信を行うことができる。端末装置11は、ディスクドライブ88を備えている。ディスクドライブ88は、記憶媒体881に記憶された情報にアクセスする為の駆動装置である。CPU81は、ディスクドライブ88と電気的に接続している。CPU81は、ディスクドライブ88に記憶媒体881が挿入された状態で、記憶媒体881に記憶された情報にアクセスできる。記憶媒体881には、例えば、CPU81が実行するプログラムが記憶される。端末装置11の導入時には、プログラムが記憶媒体881からHDD84にセットアップされる。
【0032】
図5を参照し、HDD84に記憶されている手順リストの一例である手順リスト841について説明する。手順リスト841には、自身がLANを介して直接接続するNAT装置(「自身NAT装置」という。)のNAT種別と、P2P通信を行う相手方の端末装置11がLANを介して直接接続するNAT装置(「相手NAT装置」という。)のNAT種別とが記憶されている。また、其々のNAT種別の組み合わせに対応する開始手順が記憶されている。後述する端末装置処理では、手順リストに基づいて開始手順が決定される。
【0033】
例えば図5に示す例では、自身NAT装置又は相手NAT装置のいずれかがのNAT種別が、「(NAT装置なし)」「Full Cone NAT」のいずれかである場合、開始手順を必要としないことが記憶されている。また、双方のNAT種別が「Cone NAT」(Address-Restricted Cone NAT、Port-Restricted Cone NATのうちいずれか)である場合、開始手順としてUDP Hole Punchingが記憶されている。また、双方のNAT種別が「Symmetric NAT」である場合、開始手順としてUDP Multi Hole Punching(ポート番号の変更パターンが推測可能な場合のみ)が記憶されている。手順リストの使用形態の詳細については後述する。
【0034】
図6〜図14を参照し、端末装置11のCPU81において実行される端末装置処理について説明する。端末装置処理は、他の端末装置11との間で通信を行うための指示がキーボード851を介してユーザによってなされた場合に、CPU81によって起動され実行される。以下では、端末装置9が端末装置10との間でP2P通信を行う場合に、端末装置9のCPU81において実行される端末装置処理について説明する。
【0035】
図6に示すように、端末装置処理が起動されると、はじめに、端末装置10との間でHTTPサーバ4を介したトンネリング通信を開始させるための通信が実行される(S11)。処理の詳細は後述する。この通信によって端末装置9は、端末装置10との間でトンネリング通信が実行可能となる。トンネリング通信では、HTTPサーバ4においてパケットがHTTPによってカプセル化される。HTTPによってカプセル化されたパケットは、NAT装置6,7においてブロックされることなく、端末装置9,10に到達する。
【0036】
トンネリング通信が可能となった状態で、端末装置9では、端末装置10との間でSIPに基づいた呼制御通信が行われる。これによって、端末装置9は、端末装置10と接続状態となる。接続状態となった端末装置9,10間で、RTP等に基づいたパケットの送受信が開始される(S13)。なお本実施の形態では、端末装置9,10間で映像データの通信が行われるものとする。映像データは端末装置10においてパケット化され、端末装置9は、端末装置10から送信された映像パケットを受信する。
【0037】
次いで、NAT装置6及びNAT装置7がUPnP機能を搭載しているかを判断するUPnP判別処理が実行される(S15)。図8を参照し、UPnP判別処理について説明する。UPnP判別処理では、はじめに、UPnP機能を搭載したNAT装置8を検索する為の検索用パケットが、マルチキャスト送信される(S61)。UPnP機能を搭載したNAT装置は、この検索用パケットを受信した場合に応答パケットを返信する。端末装置9では、送信した検索用パケットに対する応答パケットを受信したかが判断される(S63)。NAT装置6,7の両方から応答パケットを受信できない場合(S63:NO)、NAT装置6、7のうち少なくとも一方は、UPnP機能を搭載していないことになるので、そのままUPnP判別処理を終了して端末装置処理(図6参照)に戻る。
【0038】
一方、NAT装置6,7の両方から応答パケットを受信できた場合(S63:YES)、NAT装置6,7はUPnP機能を搭載しているということになる。続いて、NAT装置6,7に対し、インターネット15側に割り当てられているIPアドレスとポート番号とを要求する要求パケットが送信される(S65)。NAT装置6,7は、要求パケットに対し、IPアドレス及びポート番号を付加した応答パケットを返信する。端末装置9では、この応答パケットを受信したかが判断される(S67)。応答パケットを受信できなかった場合(S67:NO)、NAT装置6,7を介してUPnPに基づいた通信を行うことができないので、そのままUPnP判別処理を終了し、端末装置処理(図6参照)に戻る。
【0039】
一方、要求パケットに対する応答パケットをNAT装置6,7から受信した場合(S67:YES)、端末装置10との間でUPnPに基づいた通信を行うことが可能である。この場合、端末装置9,10は、特別な開始手順を経ることなく、双方間でP2P通信を行うことができる。UPnPに基づいた通信を行うことが可能であることを示すフラグ情報が、RAM83に一時的に記憶される(S69)。そしてUPnP判別処理を終了し、端末装置処理(図6参照)に戻る。
【0040】
図6に示すように、UPnP判別処理(S15)が終了した後、端末装置10との間でUPnPに基づいた通信が可能であるかが判断される(S17)。RAM83に記憶されたフラグ情報が参照される。UPnPに基づいた通信が可能である場合(S17:YES)、特定の開始手順に基づいた通信は不要である。端末装置9は、端末装置10とのP2P通信を開始させることが可能な状態である。P2P通信によって、端末装置9,10間で映像データを含むパケットが送受信される(S27)。そしてS37(図7参照)の処理に進む。
【0041】
これに対し、UPnPに基づいた通信を端末装置9,10間で実行できない場合(S17:NO)、NAT装置6のNAT種別を判別する処理(NAT種別判定処理)が実行される(S19、図9参照)。NAT種別判定処理では、端末装置9がSTUNサーバ2と所定の通信を行うことによって、NAT装置6のNAT種別が特定される。
【0042】
図9を参照し、NAT種別判定処理について説明する。NAT種別判定処理では、はじめに、要求パケットがSTUNサーバ2に対して送信され、応答パケットを自身に対して返信するように要求される。要求パケットは、STUNサーバ2のポート番号(第一ポート)に対して送信される(S71)。次いで、応答パケットを受信したかが判断される(S73)。応答パケットを受信できない場合(S73:NO)、端末装置10との間でP2P通信を行うことができないことになる。P2P通信を行うことができない旨を示すフラグ情報が、RAM83に一時的に記憶される(S83)。そしてNAT種別判定処理を終了し、端末装置処理(図6参照)に戻る。
【0043】
一方、STUNサーバ2から応答パケットを受信した場合(S73:YES)、受信した応答パケットに含まれているIPアドレス及びポート番号であって、NAT装置6におけるインターネット15側のIPアドレス(以下、「NAT IP」という。)とポート番号(以下「NATポート」という。)とが、応答パケットから抽出される。自身が要求パケットを送信した場合の送信元IPアドレスとNAT IPとが一致し、且つ、自身が要求パケットを送信した場合の送信元ポート番号とNATポートとが一致するかが判断される(S75)。一致しない場合(S75:NO)、NAT装置6がSTUNサーバ2との間に介在していることになるので、S85(図10参照)の処理に進む。
【0044】
送信元IPアドレスとNAT IPとが一致し、且つ、送信元ポート番号とNATポートとが一致する場合(S75:YES)、要求パケットがSTUNサーバ2に対して送信され、応答パケットを自身に対して返信するように要求される。要求パケットは、STUNサーバ2の第一ポートに対して送信される。応答パケットは、S71の要求パケットに応じて返信された応答パケットとは別の送信元IPアドレス及び送信元ポート番号から送信するように、STUNサーバ2に要求される(S77)。そして応答パケットを受信したかが判断される(S79)。応答パケットを受信できない場合(S79:NO)、端末装置10との間でP2P通信を行うことができないことになる。P2P通信を行うことができない旨を示すフラグ情報が、RAM83に一時的に記憶される(S83)。そしてNAT種別判定処理を終了し、端末装置処理(図6参照)に戻る。
【0045】
一方、STUNサーバ2から応答パケットを受信した場合(S79:YES)、端末装置10との間にNAT装置は介在していないことになる。この場合端末装置9は、特別な開始手順を経ることなく、端末装置10とP2P通信を行うことができる。NAT装置が介在していないことを示すフラグ情報がRAM83に一時的に記憶される(S81)。そしてNAT種別判定処理を終了し、端末装置処理(図6参照)に戻る。
【0046】
図10のS85の処理では、要求パケットがSTUNサーバ2に対して送信され、応答パケットを自身に対して返信するように要求される。要求パケットは、STUNサーバ2の第一ポートに対して送信される。応答パケットは、S71において送信された要求パケットに対して返信された応答パケットとは別の送信元IPアドレス及び送信元ポート番号から送信するように、STUNサーバ2に要求される(S85)。そして、応答パケットを受信したかが判断される(S87)。応答パケットを受信した場合(S87:YES)、STUNサーバ2との間にNAT装置6が介在しているが、送信元IPアドレス及び送信元ポート番号の異なる応答パケットをいずれもNAT装置6が転送しているので、NAT装置6のNAT種別がFull Cone Natであると特定される。特定されたNAT種別を示すフラグ情報が、RAM83に一時的に記憶される(S89)。そしてNAT種別判定処理を終了し、端末装置処理(図6参照)に戻る。
【0047】
一方、応答パケットを受信できない場合(S87:NO)、要求パケットがSTUNサーバ2に対して送信され、応答パケットを自身に対して返信するように要求される。要求パケットは、STUNサーバ2のポート番号であって第一ポートとは異なるポート番号(第二ポート)に対して送信される(S91)。そして、応答パケットを受信したかが判断される(S92)。応答パケットを受信した場合(S92:YES)、S73(図9参照)において受信された応答パケットのNAT IP及びNATポートと、今回受信した応答パケットのNAT IP及びNATポートとが比較される(S93)。双方が一致する場合(S93:YES)、次いで要求パケットがSTUNサーバ2に対して送信され、応答パケットを自身に対して返信するように要求される。要求パケットは、第一ポートに対して送信される。応答パケットは、S92において受信された応答パケットと同じ送信元IPアドレスであり、且つ、S92において受信された応答パケットとは異なる送信元ポート番号から送信するように、STUNサーバ2に要求される(S95)。そして、応答パケットを受信したかが判断される(S97)。応答パケットを受信した場合(S97:YES)、送信元ポート番号が異なる場合であっても、NAT装置6は応答パケットを転送しているので、NAT装置6のNAT種別がAddress‐Restricted Cone NATであると特定される。特定されたNAT種別を示すフラグ情報が、RAM83に一時的に記憶される(S99)。そしてNAT種別判定処理を終了し、端末装置処理(図6参照)に戻る。一方、応答パケットを受信できない場合(S97:NO)、送信元ポート番号が異なると、NAT装置6は応答パケットを転送しないということになるので、NAT装置6のNAT種別がPort-Restricted Cone NATであると特定される。特定されたNAT種別を示すフラグ情報が、RAM83に一時的に記憶される(S101)。そしてNAT種別判定処理を終了し、端末装置処理(図6参照)に戻る。
【0048】
一方、S92の処理において応答パケットを受信できない場合(S92:NO)や、S93の処理においてIPアドレスとポート番号のうち少なくとも一方が一致しない場合(S93:NO)、NAT装置6のNAT種別がSymmetric NATであると特定される。特定されたNAT種別を示すフラグが、RAM83に一時的に記憶される(S103)。次いで、NAT装置6においてポートマッピングが行われる場合のポート番号の変更パターンを推測するために、変更パターン推測処理(S105、図11参照)が実行される。変更パターン推測処理が終了した場合、NAT種別特定処理を終了して端末装置処理(図6参照)に戻る。
【0049】
変更パターン推測処理について、図11を参照して説明する。変更パターン推測処理では、要求パケットがSTUNサーバ2に対して送信され、応答パケットを自身に対して返信するように要求される。要求パケットは、STUNサーバ2のポート番号であって、第一ポート及び第二ポートとは異なるポート番号(第三ポート)に対して送信される(S111)。そして応答パケットを受信したかが判断される(S113)。応答パケットを受信できない場合(S113:NO)、変更パターンを推測できないので、変更パターンを推測できない旨を示すフラグ情報をRAM83に一時的に記憶する(S123)。そして変更パターン推測処理を終了し、NAT種別判定処理(図10参照)に戻る。
【0050】
一方、応答パケットを受信した場合(S113:YES)、STUNサーバ2に第一ポート〜第三ポート以外のポート番号が準備されているかが判断される(S115)。第一ポート〜第三ポート以外のポート番号が準備されている場合(S115:YES)、S111の処理に戻る。そして、未だ使用されていないポート番号に対して要求パケットを送信するために、上述の処理が繰り返し実行される。
【0051】
STUNサーバ2に準備されている全てのポート番号宛てに要求パケットを送信した場合(S115:NO)、受信した応答パケットのNAT IPやNATポートの変化の様子から、変更パターンが推測される(S117)。例えば、ポート番号が所定のポート幅ずつ加算されている場合には、変更パターンが推測可能であると判断される。変更パターンが推測可能である場合(S119:YES)、推測された変更パターンを示す情報がRAM83に一時的に記憶される(S121)。そして変更パターン推測処理を終了してNAT種別判定処理(図10参照)に戻る。一方、例えばポート番号がランダムに変化している場合には、変更パターンを推測することができない。この場合(S119:NO)、変更パターンを推測できない旨を示す情報をRAM83に一時的に記憶する(S123)。そして変更パターン推測処理を終了し、NAT種別判定処理(図10参照)にもどる。
【0052】
図6に示すように、NAT種別判定処理(S19)が終了した後、NAT装置6のNAT種別と、手順リスト(図5参照)とに基づいて、端末装置10との間でP2P通信を開始させるために必要な開始手順が選択される。
【0053】
NAT種別判定処理においてRAM83に記憶された情報が参照される。以下の(1)又は(2)の条件を満たすかが判断される(S21)。
(1)STUNサーバ2との間にNAT装置が介在していない。
(2)NAT装置6の種別がFull Cone NATである。
(1)又は(2)の条件を満たす場合(S21:YES)、特定の開始手順に基づいた通信を行うことなく、端末装置9は端末装置10との間でP2P通信を行うことが可能である。P2P通信によって、端末装置9と端末装置10との間で映像データの送受信が実行される(S27)。そしてS37(図7参照)の処理に進む。
【0054】
(1)及び(2)のいずれの条件も満たさない場合(S21:NO)、端末装置10に接続するNAT装置7のNAT種別を取得するために、STUNサーバ2との間で通信が行われる。NAT装置7のNAT種別が取得される(S23)。次いで、NAT種別判定処理(S19)において判定されたNAT装置6のNAT種別と、S23において取得されたNAT装置7のNAT種別と、手順リスト(図5参照)とに基づいて、開始手順が選択される。
【0055】
以下の(3)又は(4)の条件を満たすかが判断される(S25)。
(3)STUNサーバ2と端末装置10との間にNAT装置が介在していない。
(4)NAT装置7の種別がFull Cone NATである。
(3)又は(4)の条件を満たす場合(S25:YES)、特定の開始手順に基づいた通信を行うことなく、端末装置9と端末装置10との間でP2P通信を行うことが可能である。P2P通信によって、端末装置9は端末装置10との間で映像データの送受信を実行する(S27)。そしてS37(図7参照)の処理に進む。
【0056】
(3)及び(4)のいずれの条件も満たさない場合(S25:NO)、次いで、(5)〜(7)のうちいずれかの条件を満たすかが判断される(S29)。
(5)NAT装置7のNAT種別が、Address‐Restricted Cone NATである。
(6)NAT装置7のNAT種別がPort-Restricted Cone NATであり、且つ、NAT装置6のNAT種別がAddress‐Restricted Cone NAT又はPort-Restricted Cone NATである。
(7)NAT装置7のNAT種別がSymmetric NATであり、且つ、NAT装置6のNAT種別がAddress‐Restricted Cone NATである。
【0057】
(5)〜(7)のうちいずれかの条件を満たす場合(S29:YES)、開始手順としてUDP Hole Punchingが選択される。UDP Hole Punchingに基づいた通信が実行される(S31)。これによって、端末装置9と端末装置10との間でP2P通信が可能となる。P2P通信によって、端末装置9は端末装置10との間で映像データの送受信を実行する(S27)。そしてS37(図7参照)の処理に進む。
【0058】
(5)〜(7)のいずれの条件も満たさない場合(S29:NO)、次いで、(8)又は(9)の条件を満たし、且つ、端末装置9及び端末装置10におけるポートマッピングの変更パターンが推測可能であるかが判断される(S33)。
(8)NAT装置7のNAT種別がSymmetric NATであり、且つ、NAT装置6のNAT種別がPort-Restricted Cone NAT又はSymmetric NATである。
(9)NAT装置7のNAT種別がPort-Restricted Cone NATであり、且つ、NAT装置6のNAT種別がSymmetric NATである。
【0059】
上述の条件を満たす場合(S33:YES)、開始手順としてUDP Multi Hole Punchingが選択される。UDP Multi Hole Punchingに基づいた通信が実行される(S35)。これによって、端末装置9と端末装置10との間でP2P通信が可能となる。P2P通信が可能となった状態で、端末装置9は端末装置10との間で映像データの通信を実行する(S27)。そしてS37(図7参照)の処理に進む。一方、上述の全ての条件を満たさない場合には(S33:NO)、そのままS37(図7参照)の処理に進む。
【0060】
図7のS37では、上述の処理のうちS27、S31、及びS35(図6参照)の処理によって、端末装置9,10間でP2P通信が開始されたかが判断される(S37)。P2P通信を行うことが不可能であり(例えばS83、図9参照)、P2P通信が行われていない場合には(S37:NO)、HTTPサーバ4を介したトンネリング通信を中止させることができないので、そのまま端末装置処理を終了する。これに対し、P2P通信が実行されている場合(S37:YES)、HTTPサーバ4を介したトンネリング通信からP2P通信に切り替えるために、タイミング調整処理(S41、図12〜図14参照)が実行される。
【0061】
図12〜図14を参照し、タイミング調整処理について説明する。図12に示すように、タイミング調整処理では、はじめに、HTTPサーバ4を介したトンネリング通信によって、端末装置10からパケットを受信しているかが判断される(S131)。受信している場合(S131:YES)、パケットに付加されている連続的な番号(「パケット番号」という。)が変数「nH」としてRAM23に格納される(S133)。nHは、HTTPサーバ4を介して受信したパケットのパケット番号のうち最も新しいパケット番号を管理する変数である。そして、受信したパケットに含まれている映像データをディスプレイ861に表示させ、映像データを再生させる(S135)。ユーザは、ディスプレイ861を介して映像データを視聴することができる。次いで、再生した映像データの基となるパケットのパケット番号(nH)が、変数「nT」としてRAM23に格納される。nTは、最後に再生された映像データの基となるパケットのパケット番号を管理する変数である。そしてS131の処理に戻り、上述の処理が繰り返し実行される。
【0062】
HTTPサーバ4を介してパケットを受信していない場合(S131:NO)、P2P通信によって端末装置10からパケットを受信したかが判断される(S137)。受信していない場合(S137:NO)、S131の処理に戻り、上述の処理が繰り返し実行される。端末装置10からパケットを受信している場合(S137:YES)、受信したパケットのパケット番号が変数「nD」としてRAM23に格納される(S139)。nDは、P2P通信によって端末装置10から受信したパケットのパケット番号のうち最も新しいパケット番号を管理する変数である。
【0063】
次いで、再生する為の映像データが抽出されるパケット(以下「再生パケット」という。)を、HTTPサーバ4を介したトンネリング通信によって受信したパケット(「HTTPパケット」という。)から、P2P通信によって受信したパケット(「直接パケット」という。)に切り替えるための処理が実行される(S141〜S145)。
【0064】
nHとnDとの値が比較される(S141)。nDの方がnHよりも大きい場合(S141:YES)、直接パケットの方がHTTPパケットよりも先行して端末装置9に到達していることになる。この場合、第一同期処理(S143、図13参照)が実行される。第一同期処理では、HTTPパケットを再生パケットとする状態から、直接パケットを再生パケットとする状態に切り替えられる。その後、HTTPサーバ4を介したトンネリング通信が中止される。そしてタイミング調整処理を終了し、端末装置処理(図6参照)に戻る。
【0065】
一方、nDがnH以下である場合(S141:NO)、HTTPパケットの方が直接パケットよりも先行して端末装置9に到達していることになる。この場合、第二同期処理(S145、図14参照)が実行される。第二同期処理では、直接パケットの方がHTTPパケットよりも先行して端末装置9に到達する状態となるまで待機される。その後、HTTPパケットを再生パケットとする状態から、直接パケットを再生パケットとする状態に切り替えられる。その後HTTPサーバ4を介した通信を中止させる。そしてタイミング調整処理を終了し、端末装置処理(図6参照)に戻る。
【0066】
第一同期処理について、図13を参照して説明する。図13に示すように、第一同期処理では、S137(図12参照)において受信した直接パケットを、HDD24に用意されたキューの末尾に記憶する。次いで受信した直接パケットのパケット番号(nD)を、キューの先頭に記憶したパケット番号(一番最初にキューから取り出されるパケット番号)を示す変数「nQ」としてRAM23に記憶する(S161)。
【0067】
次いで、nQが「nH+1」よりも大きいかが判断される(S163)。nQが「nH+1」より大きい(S163:YES)、HTTPパケットをさらに受信しなければ、直接パケットを再生パケットとすることができない。そこで、新たにHTTPパケットを受信したかが判断される(S165)。HTTPパケットを受信した場合(S165:YES)、受信したHTTPパケットのパケット番号がnHとして記憶される(S173)。そして、受信したHTTPパケットに含まれている映像データをディスプレイ861に表示させる(S174)。次いで、映像データを表示させた時刻を、映像データを表示させた場合の時刻を示す変数「t」としてRAM23に記憶する(S175)。そしてS163の処理に戻り、上述の処理が繰り返し実行される。
【0068】
S165の処理でHTTPパケットを受信していない場合(S165:NO)、直接パケットを受信したかが判断される(S167)。受信していない場合(S167:NO)、S165の処理に戻り、継続してHTTPパケット及び直接パケットの受信が監視される。直接パケットを受信している場合(S167:YES)、受信した直接パケットのパケット番号がnDとして記憶される(S169)。次いで、受信した直接パケットをキューの末尾に記憶する(S171)。そしてS165の処理に戻り、上述の処理が繰り返し実行される。
【0069】
上述の処理が繰り返されてnHが更新され、nQが「nH+1」以下となった場合(S163:NO)、HTTPパケットを再生パケットとする状態から、直接パケットを再生パケットとする状態に切り替えることができる。そこで、HTTPサーバ4を介したトンネリング通信を中止させる(S177)。
【0070】
次いで、映像データが断続的にディスプレイ861に表示された場合にユーザが違和感を感じない最小の表示間隔(「Tmin」という。)が、前述したtに加算される。算出された値(t+Tmin)が、タイマ割り込み時間としてセットされ、タイマ割り込みが許可される(S179)。許可されたタイマ割り込みは、時刻「t+Tmin」が到来した場合に割り込みを発生させる。その後、Tmin間隔で周期的に割り込みを発生させる。
【0071】
この状態で、直接パケットを受信したかが判断される(S181)。直接パケットを受信した場合(S181:YES)、受信した直接パケットのパケット番号がnDとして記憶される(S183)。次いで、受信した直接パケットをキューの末尾に記憶する(S185)。そしてS181の処理に戻り、上述の処理が繰り返し実行される。
【0072】
一方、直接パケットを受信していない場合(S181:NO)、S179の処理で設定したタイマ割り込みが発生しているかが判断される(S189)。タイマ割り込みが発生していない場合(S189:NO)、S181の処理に戻り、上述の処理が繰り返し実行される。タイマ割り込みが発生している場合(S189:YES)、キューに直接パケットが記憶されているかが判断される(S191)。キューに直接パケットが記憶されていない場合(S191:YES)、ディスプレイ861に表示させるための直接パケットがないので、特段処理を行うことなく第一同期処理を終了し、タイミング調整処理(図12参照)に戻る。
【0073】
キューに直接パケットが記憶されている場合(S191:NO)、キューに記憶されている直接パケットのうち、パケット番号がnQの直接パケットが取り出される(S193)。取り出された直接パケットに含まれている映像データが、ディスプレイ861に表示される(S195)。表示時刻がtとして記憶される(S197)。nQに1加算され更新される(S199)。そしてS179に戻り、上述の処理が繰り返し実行される。
【0074】
第二同期処理について、図14を参照して説明する。図14に示すように、第二同期処理では、はじめに、映像データが繰り返しディスプレイ861に表示された場合にユーザが違和感を感じない最大の表示間隔(「Tmax」という。)が、前述したtに加算される。算出された値(t+Tmax)は、タイマ割り込み時間としてセットされ、タイマ割り込みが許可される(S211)。許可されたタイマ割り込みは、時刻「t+Tmax」が到来した場合に割り込みを発生させる。その後、Tmax間隔で周期的に割り込みを発生させる。
【0075】
HTTPパケットを受信したかが判断される(S213)。受信した場合(S213:YES)、受信したHTTPパケットのパケット番号がnHとして記憶される(S215)。次いで、受信したHTTPパケットが、HDD24に用意されたキューの末尾に記憶される。受信したHTTPパケットのパケット番号がnQに格納される(S217)。そしてS213の処理に戻り、繰り返しHTTPパケットの受信が監視される。
【0076】
一方、HTTPパケットを受信していない場合(S213:NO)、直接パケットを受信したかが判断される(S219)。受信している場合(S219:YES)、受信した直接パケットのパケット番号が、nDとして記憶される(S221)。次いで、nDとnTとが比較される(S223)。nDがnT以下である場合(S223:NO)、直接パケットを再生パケットとすることができない。そこでS213の処理に戻り、継続してHTTPパケットの受信が監視される。
【0077】
一方、nDがnTよりも大きい場合(S223:YES)、HTTPパケットを再生パケットとする状態から、直接パケットを再生パケットとする状態に切り替えることができる。そこで、HTTPサーバ4を介したトンネリング通信を中止させる(S225)。そして第二同期処理を終了し、タイミング調整処理(図12参照)に戻る。
【0078】
一方、S219の処理で直接パケットを受信していない場合(S219:NO)、S211の処理で設定したタイマ割り込みが発生しているかが判断される(S227)。タイマ割り込みが発生していない場合(S227:NO)、S213の処理に戻り、上述の処理が繰り返し実行される。タイマ割り込みが発生している場合(S227:YES)、キューに記憶されているHTTPパケットのうち、パケット番号がnQのHTTPパケットが取り出される(S229)。取り出されたHTTPパケットに含まれている映像データがディスプレイ861に表示される(S231)。表示させたHTTPパケットのパケット番号(nQ)がnTとして記憶され(S233)、表示時刻がtに格納される(S235)。nQに1加算され更新される(S237)。そしてS211の処理に戻り、上述の処理が繰り返し実行される。
【0079】
図7に示すように、第一同期処理(図13)及び第二同期処理(図14)が終了してタイミング調整処理(図12参照)が終了した後、端末装置処理では、直接パケットを受信したかが判断される(S45)。なおこの状態では、HTTPサーバ4を介したトンネリング通信は中止されているので、HTTPパケットは受信しない。直接パケットを受信している場合(S45:YES)、受信した直接パケットに含まれている映像データがディスプレイ861に表示される(S49)。そしてS45の処理に戻り、継続して直接パケットの受信が監視される。直接パケットを受信していない場合(S45:NO)、端末装置10との通信を中止させるための操作がキーボード851を介してユーザによってなされたかが判断される(S53)。キー操作がなされていない場合(S53:NO)、S45の処理に戻り、継続して直接パケットの受信が監視される。一方、通信を中止させる操作がなされた場合(S53:YES)、端末装置10との通信を中止し、端末装置処理は終了する。
【0080】
図15に示す通信シーケンスについて、上述のフローチャートを参照しつつ説明する。なお図15では、端末装置9,10とサーバ2,3,4との間に接続されるNAT装置6,7は省略されている。
【0081】
はじめに、端末装置9と端末装置10との間でHTTPサーバ4を介したトンネリング通信を開始させる為に、端末装置9からHTTPサーバ4に対して接続要求パケットが送信される(101)。HTTPサーバ4では、トンネリング通信を許可する旨を端末装置9に対して通知するために、許可通知パケットが端末装置9に対して返信される(103)。次いで端末装置9は、SIPに基づいて端末装置10とセッションを確立させるために、接続要求パケット(INVITE)がSIPサーバ3に対して送信される(105)。SIPサーバ3では、受信した接続要求パケット(INVITE)が端末装置10に対して転送される(107)。なお、SIPサーバ3を介した接続要求パケット(INVITE)の通信は、HTTPサーバ4を介したトンネリング通信によって行われる。
【0082】
一方、端末装置10では、SIPサーバ3及びHTTPサーバ4を介して接続要求パケット(INVITE)を受信した場合、HTTPサーバ4を介したトンネリング通信を開始させる為に、HTTPサーバ4に対して接続要求パケットが送信される(109)。HTTPサーバ4では、許可通知パケットが端末装置10に対して返信される(111)。
【0083】
次いで端末装置10は、SIPに基づいて端末装置9とセッションを確立させるために、接続応答パケット(200 OK)がSIPサーバ3に対して送信される(113)。SIPサーバ3では、受信した接続応答パケット(200 OK)が端末装置9に対して転送される(115)。端末装置9では、受信した接続応答パケット(200 OK)に対してACKパケットが送信される(117)。ACKパケットは、SIPサーバ3を介して端末装置10に到達する(118)。なお、SIPサーバ3を介した接続応答パケット(200 OK)及びACKパケットの通信は、HTTPサーバ4を介したトンネリング通信によって行われる。以上の通信によって、端末装置9、10間でHTTPサーバ4を介したトンネリング通信が可能な状態となる(S11、図6参照)。また、SIPに基づいた通信によってセッションが確立し、端末装置9と端末装置10とは接続状態になっている。
【0084】
端末装置9,10の間で、映像データを含むパケットの通信が実行される(119、S13(図6参照))。端末装置9では、受信したHTTPパケットに含まれている映像データがディスプレイ861に表示される(S174(図13参照)、S223(図14参照))。
【0085】
トンネリング通信が行われている状態で、端末装置9,10間でP2P通信を実行するための処理が開始される。はじめに、NAT装置6,7がUPnP機能を搭載しているかが判断される(S15(図6参照))。次いで、STUNサーバ2との通信によって、NAT装置6,7のNAT種別が特定される(121、123、S19(図6参照),S23(図6参照))。UPnP機能の搭載の可否、及び、NAT種別に基づいて、端末装置9,10間でP2P通信を行うために必要となる開始手順の通信が選択される(S17、S21、S25、S29、S33(図6参照))。選択された開始手順に基づいて、端末装置9,10間で通信が実行される(125、S31(図6参照)、S33(図6参照))。これによって、端末装置9,10間でP2P通信が可能な状態となるので、映像データを含むパケットの通信が実行される(127、S27(図6参照))。
【0086】
P2P通信が開始された後、所定のタイミングで、HTTPサーバ4を介したトンネリング通信を終了させる(S177(図13参照)、S225(図14参照))。HTTPパケットを再生パケットとする状態から、直接パケットを再生パケットとする状態に切り替えられる。((S41(図7参照)))。これによって、直接パケットに含まれている映像データが抽出され、ディスプレイ861に表示される(S197(図13参照)、S49(図7参照))。
【0087】
通信を終了させる指示が、端末装置9のキーボード851を介して入力された場合、端末装置9から端末装置10に対して、通信を終了させるための終了パケット(BYE)が送信される(129)。終了パケット(BYE)を受信した端末装置10は、端末装置9に対して応答パケット(200 OK)を返信する(131)。これによって、端末装置9,10間の通信は終了する(S53(図7参照))。
【0088】
図16を参照し、第一同期処理(図13参照)時における映像データの表示タイミングについて、図7、図12、及び図13のフローチャートを参照しつつ説明する。図16では、端末装置10から送信されたパケット(HTTPパケット及び直接パケット)を端末装置9が受信した場合の受信タイミングが示されている。また、再生パケットに含まれる映像データがディスプレイ861に表示されるタイミングが示されている。
【0089】
HTTPサーバ4を介したトンネリング通信が開始されることによって、HTTPパケットの受信が開始される(140、S131(図12参照))。HTTPパケットが受信され(141)、HTTPパケットが再生パケットとされて(143)、再生パケットに含まれている映像データがディスプレイ861に表示される(145、S135(図12参照))。
【0090】
所定の開始手順に基づいて通信が行われた結果、P2P通信が可能となり、P2P通信が開始される(147)。直接パケットが受信される(149、S137(図12参照))。受信した直接パケットのパケット番号は「5」であり、この時点での再生パケットのパケット番号は「2」であるので(S141:YES(図12参照))、第一同期処理(S143(図12参照))が実行される。受信した直接パケットは、キューに記憶される(S161(図13参照))。nQ(=5)の方が「nH+1」(=3)よりも大きいので(S163:YES(図12参照))、受信したHTTPパケットが継続して再生パケットとされ、ディスプレイ861に映像データが表示される(151、153、S174(図13参照))。受信した直接パケットはキューに記憶される(S171(図13参照))。
【0091】
処理が進む中、パケット番号が「7」の直接パケットを受信した場合(155)、nQ(=5)が「nH+1」(=5)以下となるので(S163:NO(図13参照))、HTTPサーバ4を介したトンネリング通信が中止される(157、S177(図13参照))。次いで、キューに記憶された直接パケットが所定の周期(Tmin、159)で取り出される(161、S193(図13参照))。取り出された直接パケットが再生パケットとされ、ディスプレイ861に映像データが表示される(163、165、S195(図13参照))。
【0092】
処理が進む中、キューに記憶されている直接パケットがなくなった場合(S191:YES(図13参照))、直接パケットから抽出される映像データは、直接パケットを受信したタイミング(167)で抽出される(169)。抽出された映像データがディスプレイ861に表示される(171、S49、図7参照)。
【0093】
以上のように、HTTPパケットを再生パケットとする状態から、直接パケットを再生パケットとする状態に切り替えた場合であっても、ディスプレイ861に表示される映像データの表示周期は最短でTminになる。これによって、映像データの表示周期が短すぎることによる違和感をユーザに感じさせることなく、直接パケットを再生パケットとする状態に切り替えることができる。
【0094】
図17を参照し、第二同期処理(図14参照)時における映像データの表示タイミングについて、図7、図12、及び図14のフローチャートを参照しつつ説明する。
【0095】
HTTPサーバ4を介したトンネリング通信が開始されることによって、HTTPパケットの受信が開始される(172、173、S131(図12参照))。受信されたHTTPパケットが再生パケットとされて(174)、再生パケットに含まれている映像データがディスプレイ861に表示される(175、S135(図12参照))。
【0096】
所定の開始手順に基づいて通信が行われた結果、P2P通信が可能となり、P2P通信が開始される(177)。直接パケットが受信される(179、S137(図12参照))。受信した直接パケットのパケット番号は「2」であり、この時点での再生パケットのパケット番号は「3」であるので(S141:NO(図12参照))、第二同期処理(S145(図12参照))が実行される。HTTPパケットを受信した場合(S213:YES(図14参照))、受信されたHTTPパケットはキューに記憶される(S217(図14参照))。
【0097】
直接パケットを受信した場合(181,183、S219:YES(図14参照))、受信した直接パケットのパケット番号「3,4」が、再生パケットのパケット番号「4」以下であるので(S223:NO(図14参照))、HTTPサーバ4を介したトンネリング通信は終了しない。所定の周期(Tmax、184)でキューに記憶されたHTTPパケットが取り出される(185,187、S229(図14参照))。取り出されたHTTPパケットが再生パケットとされ、ディスプレイ861に映像データが表示される(189,191、S231(図14参照))。
【0098】
処理が進む中、受信した直接パケットのパケット番号「7」(193)が、この時点での再生パケットのパケット番号「6」(195)よりも大きくなった場合(S223:YES(図14参照))、HTTPサーバ4を介したトンネリング通信が中止される(197、S225(図14参照))。以後、直接パケットを受信したタイミングで映像データが抽出される(201)。抽出された映像データがディスプレイ861に表示される(203、S49(図7参照))。
【0099】
以上のように、HTTPパケットを再生パケットとする状態から、直接パケットを再生パケットとする状態に切り替えた場合であっても、ディスプレイ861に表示される映像データの表示周期は最長でTmaxになる。映像データの表示周期が長すぎることによる違和感をユーザに感じさせることなく、直接パケットを再生パケットとする状態に切り替えることができる。
【0100】
以上説明したように、通信システム1においては、端末装置9,10間でP2P通信が開始されるまでは、HTTPサーバ4を介したトンネリング通信によって通信が行われる。このため、端末装置9,10間でP2P通信が開始されるまでに必要な時間を短縮することができる。また、所定の開始手順に基づいて通信が行われた後、トンネリング通信がP2P通信に切り替えられるので、トンネリング通信時に発生し易い通信遅延を抑制できる。端末装置9は、端末装置10から送信されたパケットを遅延なく受信し、出力することができる。
【0101】
また端末装置9,10は、トンネリング通信を中止させてP2P通信に切り替えるタイミングの前後で、映像データをディスプレイ861に表示させるタイミングを調整する。このようにして、映像データの表示間隔がTminより小さくならないようにし、且つTmaxより大きくならないようにしている。トンネリング通信とP2P通信とでスループットが大きく異なる場合、端末装置9側に到達するパケットの到達タイミングは、HTTPパケットと直接パケットとで異なる可能性がある。しかしながら本実施の形態では、映像データの表示タイミングを調節するので、到達タイミングの相違が表示態様に及ぼす影響を抑制している。ユーザは、映像データを違和感なく視認できる。
【0102】
なお、図1のHTTPサーバ4が本発明の「サーバ」に相当し、STUNサーバ2が本発明の「管理サーバ」に相当する。図6のS13の処理を行うCPU81が、本発明の「第一通信手段」に相当し、S19及びS23の処理を行うCPU81が、本発明の「第一特定手段」に相当し、S21、S25、S29、S33の処理を行うCPU81が、本発明の「選択手段」に相当する。図12のS143、S145の処理を行うCPU81が、本発明の「切替手段」に相当する。図6のS27の処理を行うCPU81が本発明の「第二通信手段」に相当する。図4のディスプレイ861が本発明の「出力手段」に相当する。図13のS174、S195、図14のS231の処理を行うCPU81が本発明の「出力制御手段」に相当する。
【0103】
図6のS13の処理が、本発明の「第一通信ステップ」に相当し、S19及びS23の処理が、本発明の「第一特定ステップ」に相当し、S21、S25、S29、S33の処理が、本発明の「選択ステップ」に相当する。図12のS143、S145の処理が、本発明の「切替ステップ」に相当する。図6のS27の処理が本発明の「第二通信ステップ」に相当する。
【0104】
なお、本発明は上記実施の形態に限定されるものではなく、種々の変更が可能である。以下、本実施の形態の変形例について説明する。
【0105】
図18を参照し、変形例における端末装置処理について説明する。変形例では、開始手順を経ることなく端末装置10とP2P通信を行うことができる場合、HTTPサーバ4を介したトンネリング通信を行わないこととする。なお、端末装置処理を除く処理については、上述の実施の形態と同一であるので、以下では説明を省略している。また、上述の実施の形態における端末装置処理と同一処理部分については、説明を簡略化している。
【0106】
図18に示すように、端末装置処理が起動されると、はじめに、端末装置9,10間でUPnPに基づいた通信が可能であるかが特定される(S15)。UPnPに基づいた通信が可能である場合(S17:YES)、特定の開始手順に基づいた通信は不要である。端末装置9,10間では、P2P通信によって映像データが送受信される(S27)。そしてS37(図7参照)の処理に進む。
【0107】
UPnPに基づいた通信を端末装置9,10間で実行できない場合(S17:NO)、NAT装置6のNAT種別を判別する処理が実行される(S19)。次いで、判別されたNAT装置6のNAT種別に基づいて、特定の開始手順に基づいた通信を行うことなくP2P通信を行うことが可能であるかが判断される(S21)。特定の開始手順に基づいた通信が不要な場合(S21:YES)、端末装置9,10間では、P2P通信によって映像データが送受信される(S27)。そしてS37(図7参照)の処理に進む。
【0108】
特定の開始手順に基づいた通信が必要な場合(S21:NO)、端末装置9,10間でHTTPサーバ4を介したトンネリング通信を開始させるための通信が実行される(S251)。トンネリング通信が可能となった状態で、端末装置9,10間でパケットの送受信が開始される(S253)。そしてS23の処理に進む。S25、S29、及びS33では、NAT装置6、及びNAT装置7のNAT種別に基づいて、特定の開始手順に基づいた通信が必要であるかが判断される。必要に応じて、所定の開始手順に基づいた通信が実行される(S31、S35)。通信後、端末装置9,10間では、P2P通信によって映像データが送受信される(S27)。そしてS37(図7参照)の処理に進む。
【0109】
以上説明したように、変形例では、NAT装置6のNAT種別に基づいて、特定の開始手順に基づいた通信が可能であるかが判断される。開始手順に基づいた通信が不要であると判断された場合、HTTPサーバ4を介したトンネリング通信は行わず、P2P通信が実行される。これによって、トンネリング通信時に発生し易い通信遅延を発生させることなく、端末装置10との間で迅速にP2P通信を開始させることができる。
【0110】
なお、図18のS19の処理を行うCPU81が本発明の「第二特定手段」「第三特定手段」に相当し、S21の処理を行うCPU81が本発明の「判定手段」に相当する。図6のS27の処理を行うCPU81が本発明の「第三通信手段」に相当する。図18のS19の処理が本発明の「第二特定ステップ」に相当し、S21の処理が本発明の「判定ステップ」に相当する。
【0111】
なお、本発明は上記実施の形態及び変形例に限定されるものではなく、種々の変更が可能である。本実施の形態では、HTTPサーバ4においてパケットがHTTPでカプセル化されることによって、トンネリング通信を実現していた。しかしながら本発明はこの方法に限定されず、他の一般的なトンネリング通信技術を使用することができる。例えば、SSH(Secure SHell)によってカプセル化することによって、トンネリング通信を実現してもよい。
【0112】
本実施の形態では、SIPサーバ2の通信制御によって端末装置9,10間のセッションが確立された後、端末装置9,10間でパケットの送受信が行われていた。しかしながら本発明はこの方法に限定されない。他の通信プロトコル(FTPなど)に基づいた通信がトンネリング通信下で行われてもよい。
【0113】
上述の変形例では、NAT装置6のNAT種別に応じて、所定の開始手順に基づいた通信の要否が判断されていたが、本発明はこの方法に限定されず、NAT装置7のNAT種別や、NAT装置6,7のNAT種別に応じて、所定の開始手順に基づいた通信の要否が判断されてもよい。
【符号の説明】
【0114】
1 通信システム
2 STUNサーバ
3 SIPサーバ
4 HTTPサーバ
6,7,8 NAT装置
9,10,11 端末装置
15 インターネット
12,13,14 LAN
81 CPU
【技術分野】
【0001】
本発明は端末装置、通信方法、及び通信プログラムに関する。より詳細には、異なるNAT装置の配下にある他の端末装置との間で通信を行う端末装置、通信方法、及び通信プログラムに関する。
【背景技術】
【0002】
インターネットを介し、端末装置間で映像や音声の通信を行う場合、NAT(Network Address Translation)機能を備えた装置(以下「NAT装置」という。)が障害となる場合がある。NAT装置は、インターネット側からLAN側に向かう方向のパケットを受信した場合、NAT装置に記憶されているポート番号宛てのパケットのみLAN側に転送し、その他のポート番号宛てのパケットはブロックしてしまうためである。
【0003】
異なるNAT装置の配下の端末装置と通信を行うための方法として、様々な方法が提案されている。例えば、端末装置間でP2P(Peer to Peer)通信を開始するために必要な開始手順としてUPnP(Universal Plug and Play)やUDP Hole Punching等の複数の開始手順から最適な手順を選択して実行し、その後P2P通信を行う方法が提案されている。また例えば特許文献1では、通信データをHTTP(HyperText Transfer Protocol)によってカプセル化し、HTTPトンネリングサーバを中継させることによって通信を行う方法が提案されている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2006−197182号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
端末装置間でP2P通信を行う場合に必要な開始手順は、NAT装置の種類(Cone NAT、Symmetric NATなど)に応じて決定される。ここで、端末装置がサーバを介してNAT装置の種類を判定するためには、多くのテスト用パケットがNAT装置を介してサーバに送信される必要がある。このため、NAT装置の種類を判定して開始手順を特定し、この開始手順に基づいて通信を行ってP2P通信を開始するまでに、時間がかかってしまうという問題点がある。また特許文献1に記載の方法では、HTTPサーバが音声や映像をリアルタイムに中継する必要があるので、サーバに負荷がかかってしまって遅延が発生し易いという問題点がある。
【0006】
本発明は上述の問題点を解決するためになされたものであり、端末装置間で通信が開始されるまでの時間が短く、且つ、通信時における遅延の発生を低減させることのできる端末装置、通信方法、及び通信プログラムを提供することを目的とする。
【課題を解決するための手段】
【0007】
本発明の第一態様に係る端末装置では、外部ネットワークに接続するNAT装置の配下の内部ネットワークに接続され、前記NAT装置とは異なる他の前記NAT装置の配下にある他の端末装置と通信を行う端末装置であって、前記外部ネットワークに接続するサーバであって、前記NAT装置が転送可能な通信プロトコルに基づいてパケットをカプセル化/非カプセル化することによって、前記端末装置間のトンネリング通信を実現するサーバを介し、異なる前記NAT装置の配下の前記内部ネットワークに接続された通信相手の前記端末装置である相手端末装置との間でトンネリング通信を行う第一通信手段と、前記第一通信手段によって前記相手端末装置との間で前記トンネリング通信が行われている状態で、前記NAT装置におけるポートマッピングの方法毎に前記NAT装置を種別した種別情報であって、自身が直接接続する前記NAT装置である自身NAT装置の種別情報と、前記相手端末装置が直接接続する前記NAT装置である相手NAT装置の種別情報とのうち少なくとも一方を、前記外部ネットワークに接続された管理サーバとの通信によって前記管理サーバから取得し特定する第一特定手段と、前記第一特定手段において特定された前記種別情報に基づいて、前記自身NAT装置及び前記相手NAT装置を介して前記相手端末装置とP2P(Peer to Peer)通信を開始させる場合に必要な開始手順を、記憶手段に記憶した手順リストから選択する選択手段と、前記選択手段において選択された前記開始手順に基づいた通信を行うことによって、前記相手端末装置との間で前記P2P通信を開始させ、次いで、前記第一通信手段によって行われている前記トンネリング通信を終了させることによって、前記トンネリング通信を前記P2P通信に切り替える切替手段と、前記切替手段によって前記トンネリング通信から前記P2P通信に切り替えられた後、前記相手端末装置との間で前記P2P通信を行う第二通信手段とを備えている。
【0008】
第一態様に係る端末装置では、P2P通信が開始されるまではトンネリング通信によって通信が行われるので、端末装置間の通信を遅滞なく開始させることができる。選択された開始手順に基づいて通信が行われた後、トンネリング通信がP2P通信に切り替えられるので、サーバにおける処理負荷を極力低減させることができる。P2P通信に切り替えられた後は、よりスループットの大きな通信を行うことができる。
【0009】
また第一態様において、前記第一通信手段において前記トンネリング通信を開始する前に、前記自身NAT装置の種別情報と、前記相手NAT装置の種別情報とのうち少なくとも一方を、前記管理サーバとの通信によって前記管理サーバから取得し特定する第二特定手段と、前記第二特定手段において特定された前記種別情報に基づいて、前記開始手順に基づいた通信を行わなければ前記相手端末装置との前記P2P通信を開始できないか否かを判定する判定手段とを備え、前記第一通信手段は、前記判定手段において前記開始手順に基づいた通信を行わなければ前記相手端末装置との前記P2P通信を開始できないと判断された場合に、前記相手端末装置との間で前記トンネリング通信を行ってもよい。このようにすることで、開始手順に基づいた通信を行わなければP2P通信を開始させることができない場合にのみ、トンネリング通信を行うようにすることができる。
【0010】
また第一態様において、前記トンネリング通信によって前記相手端末装置から受信したパケットである第一パケットに含まれるデータと、前記P2P通信時によって前記相手端末装置から受信したパケットである第二パケットに含まれるデータとの少なくともずれかを出力する出力手段と、前記切替手段において前記トンネリング通信が前記P2P通信に切り替えられる前の状態で、前記第一パケットに含まれるデータを前記出力手段に出力し、前記トンネリング通信が前記P2P通信に切り替えられた後の状態で、前記第二パケットに含まれるデータを前記出力手段に出力する出力制御手段を備え、前記出力制御手段は、前記P2P通信の開始時点において、前記第一パケットよりも前記第二パケットの方が先行している場合には、受信した前記第二パケットに含まれるデータを、所定の第一周期で出力し、前記第二パケットよりも前記第一パケットの方が先行している場合には、受信した前記第一パケットに含まれるデータを、前記第一周期よりも長い第二周期で出力してもよい。このようにすることで、受信した第一パケット及び第二パケットに含まれるデータの表示周期が調整されるので、トンネリング通信からP2P通信に切り替える場合であっても、出力手段に出力させるデータをスムーズに切り替えることができる。
【0011】
また、第二態様に係る端末装置では、外部ネットワークに接続するNAT装置の配下の内部ネットワークに接続され、前記NAT装置とは異なる他の前記NAT装置の配下にある他の端末装置と通信を行う端末装置であって、前記NAT装置におけるポートマッピングの方法毎に前記NAT装置を種別した種別情報であって、自身が直接接続する前記NAT装置である自身NAT装置の種別情報と、通信相手の前記端末装置である相手端末装置が直接接続する前記NAT装置である相手NAT装置の種別情報とのうち少なくとも一方を特定する第三特定手段と、前記第三特定手段において特定された前記種別情報に基づいて、前記自身NAT装置及び前記相手NAT装置を介して前記相手端末装置とP2P(Peer to Peer)通信を開始させる場合に必要な開始手順に基づいた通信を行わなければ、前記相手端末装置との前記P2P通信を開始できないか否かを判定する判定手段と、前記判定手段において前記開始手順に基づいた通信を行わなくても前記相手端末装置との前記P2P通信を開始できると判断された場合に、前記相手端末装置との間でP2P通信を行う第三通信手段とを備えている。
【0012】
第二態様に係る端末装置では、特別な開始手順に基づいて通信を行わなくてもP2P通信を開始させることができると判断された場合には、トンネリング通信を行わずP2P通信を開始させることができる。サーバに負荷をかけることなく、端末装置間で通信を開始させることができる。
【0013】
また、第三態様に係る通信方法は、外部ネットワークに接続するNAT装置の配下の内部ネットワークに接続され、前記NAT装置とは異なる他の前記NAT装置の配下にある他の端末装置と通信を行うための通信方法であって、前記外部ネットワークに接続するサーバであって、前記NAT装置が転送可能な通信プロトコルに基づいてパケットをカプセル化/非カプセル化することによって、前記端末装置間のトンネリング通信を実現するサーバを介し、異なる前記NAT装置の配下の前記内部ネットワークに接続された通信相手の前記端末装置である相手端末装置との間でトンネリング通信を行う第一通信ステップと、前記第一通信ステップによって前記相手端末装置との間で前記トンネリング通信が行われている状態で、前記NAT装置におけるポートマッピングの方法毎に前記NAT装置を種別した種別情報であって、自身が直接接続する前記NAT装置である自身NAT装置の種別情報と、前記相手端末装置が直接接続する前記NAT装置である相手NAT装置の種別情報とのうち少なくとも一方を、前記外部ネットワークに接続された管理サーバとの通信によって前記管理サーバから取得し特定する第一特定ステップと、前記第一特定ステップにおいて特定された前記種別情報に基づいて、前記NAT装置を介して他の通信端末とP2P(Peer to Peer)通信を開始させる場合に必要な開始手順を、記憶手段に記憶した手順リストから選択する選択ステップと、前記選択ステップにおいて選択された前記開始手順に基づいた通信を行うことによって、前記相手通信端末との間で前記P2P通信を開始させ、次いで、前記第一通信ステップによって行われている前記トンネリング通信を終了させることによって、前記トンネリング通信を前記P2P通信に切り替える切替ステップと、前記切替ステップによって前記トンネリング通信から前記P2P通信に切り替えられた後、前記相手端末装置との間で前記P2P通信を行う第二通信ステップとを備えている。
【0014】
第三態様では、P2P通信が開始されるまではトンネリング通信によって通信が行われるので、端末装置間の通信を遅滞なく開始させることができる。選択された開始手順に基づいて通信が行われた後、トンネリング通信がP2P通信に切り替えられるので、サーバにおける処理負荷を極力低減させることができる。P2P通信に切り替えられた後は、よりスループットの大きな通信を行うことができる。
【0015】
また第三態様において、前記第一通信ステップにおいて前記トンネリング通信を開始する前に、前記自身NAT装置の種別情報と、前記相手NAT装置の種別情報とのうち少なくとも一方を、前記管理サーバとの通信によって前記管理サーバから取得し特定する第二特定ステップと、前記第二特定ステップにおいて特定された前記種別情報に基づいて、前記開始手順に基づいた通信を行わなければ前記相手端末装置との前記P2P通信を開始できないか否かを判定する判定ステップとを備え、前記第一通信ステップは、前記判定ステップにおいて前記開始手順に基づいた通信を行わなければ前記相手端末装置との前記P2P通信を開始できないと判断された場合に、前記相手端末装置との間で前記トンネリング通信を行ってもよい。このようにすることで、開始手順に基づいた通信を行わなければP2P通信を開始させることができない場合にのみ、トンネリング通信を行うようにすることができる。
【0016】
また第四態様に係る通信プログラムは、端末装置の各処理手段としてコンピュータを機能させる。これによって通信プログラムは、端末装置の各処理手段としてコンピュータを機能させることができる。
【図面の簡単な説明】
【0017】
【図1】通信システム1の概要を示す模式図である。
【図2】サーバ5の電気的構成を示すブロック図である。
【図3】NAT装置8の電気的構成を示すブロック図である。
【図4】端末装置11の電気的構成を示すフロック図である。
【図5】手順リスト841を示す模式図である。
【図6】端末装置処理を示すフローチャートである。
【図7】端末装置処理を示すフローチャートである。
【図8】UPnP判別処理を示すフローチャートである。
【図9】NAT種別判定処理を示すフローチャートである。
【図10】NAT種別判定処理を示すフローチャートである。
【図11】変更パターン推測処理を示すフローチャートである。
【図12】タイミング調整処理を示すフローチャートである。
【図13】第一同期処理を示すフローチャートである。
【図14】第二同期処理を示すフローチャートである。
【図15】端末装置9,10間の通信を示すシーケンス図である。
【図16】再生パケットが選択される様子を示す図である。
【図17】再生パケットが選択される様子を示す図である。
【図18】変形例における端末装置処理を示すフローチャートである。
【発明を実施するための形態】
【0018】
以下、本発明に係る通信システム1について、図面を参照して説明する。これらの図面は、本発明が採用しうる技術的特徴を説明するために用いられるものである。記載されている端末の構成、各種処理のフローチャートなどは、それのみに限定する趣旨ではなく、単なる説明例である。
【0019】
図1を参照し、通信システム1の概要について説明する。通信システム1は、サーバ5(STUNサーバ2、SIPサーバ3、HTTPサーバ4)、NAT装置6,7(以下、これらを区別しない場合、「NAT装置8」という。)、及び端末装置9,10(以下、これらを区別しない場合、「端末装置11」という。)を少なくとも備えている。サーバ5とNAT装置8とは、インターネット15に接続している。NAT装置8は、配下のLAN12,13(以下、これらを区別しない場合、「LAN14」という。)に接続している。端末装置11は、LAN14に接続している。図1に示す例では、NAT装置6の配下のLAN12に端末装置9が接続している。NAT装置7の配下のLAN13に端末装置10が接続している。
【0020】
STUNサーバ2は、端末装置11と通信を行うことによって、端末装置11間でP2P(Peer to Peer)通信を行うために必要な情報を、端末装置11に対して提供する。SIPサーバ3は、SIP(Session Initiation Protocol)に基づいて、端末装置11間の呼制御を行う。HTTPサーバ4は、HTTP(HyperText Transfer Protocol)に基づいたパケットを転送することによって、端末装置11にWeb情報を配信する制御を行う。またHTTPサーバ4は、パケットをHTTPによってカプセル化することによって、端末装置11間でトンネリング通信を実現させる。端末装置11は、HTTPサーバ4を介して、他の端末装置11とトンネリング通信を行う。また端末装置11は、他の端末装置11との間でP2P通信を行う。端末装置11としては、例えばPC(パーソナルコンピュータ)が使用できる。NAT装置8は、NAT(Network Address Translation)機能を備えた装置である。
【0021】
NAT装置8は、IPアドレスやポート番号の変換方法によって、Full Cone NAT、Address-Restricted Cone NAT、Port-Restricted Cone NAT、及び、Symmetric NATに分類される。所謂「NAT越え」の問題を解消し、端末装置11間でP2P通信を実行するためには、上述したNATの分類(以下「NAT種別」という。)毎に最適な開始手順(例えば、UPnP、UDP Hole Punching、UDP Multi Hole Punchingなど)が選択され、この開始手順に基づいた通信が実行される必要がある。
【0022】
本実施の形態では、NAT装置8のNAT種別が特定され開始手順が実行されることと平行して、端末装置11間でHTTPサーバ4を介したトンネリング通信が実行される。通常、HTTPサーバ4を介した通信は不特定の端末装置11間でも認められ、HTTPサーバ4を介したパケットがNAT装置8によってブロックされることはない。このため、HTTPサーバ4を介したトンネリング通信を行うことによって、端末装置11間の通信が迅速に開始される。一方、NAT装置8のNAT種別が特定され、開始手順に基づいた通信が実行された後は、端末装置11間でP2P通信を行うことが可能な状態となる。この場合、HTTPサーバ4を介したトンネリング通信は中止され、代わって端末装置11間でP2P通信が行われる。P2P通信では、サーバ等を介さず通信が行われるので、通信遅延等の問題を解消できる。
【0023】
図2を参照し、サーバ5の電気的構成について説明する。サーバ5は、CPU21、ROM22、RAM23、HDD24を備えている。CPU21は、NAT装置8や端末装置11との通信を制御する。ROM22には、Bootプログラムや初期設定パラメータが少なくとも記憶される。RAM23には、CPU21の処理時に発生する一時的なデータが少なくとも記憶される。HDD24には、CPU21のプログラムが少なくとも記憶される。CPU21は、ROM22、RAM23、及びHDD24と電気的に接続している。CPU21は、ROM22、RAM23、及びHDD24の記憶領域にアクセスできる。
【0024】
サーバ5は、入力ドライバ25を備えている。入力ドライバ25は、キーボード251を介して入力された情報を検出する。CPU21は、入力ドライバ25と電気的に接続している。入力ドライバ25は、キーボード251と電気的に接続する。CPU21は、キーボード251を介して入力された情報を認識できる。サーバ5は、表示ドライバ26を備えている。表示ドライバ26は、ディスプレイ261に像を表示させるための制御を行う。CPU21は、表示ドライバ26と電気的に接続している。表示ドライバ26は、ディスプレイ261と電気的に接続する。CPU21は、ディスプレイ261に所望の像を表示させることができる。
【0025】
サーバ5は、通信モジュール27を備えている。通信モジュール27は、インターネット15を介した通信を可能とする。CPU21は、通信モジュール27と電気的に接続している。CPU21は、インターネット15を介して通信を行うことができる。サーバ5は、ディスクドライブ28を備えている。ディスクドライブ28は、記憶媒体281に記憶された情報にアクセスする為の駆動装置である。CPU21は、ディスクドライブ28と電気的に接続している。CPU21は、ディスクドライブ28に記憶媒体281が挿入された状態で、記憶媒体281に記憶された情報にアクセスできる。記憶媒体281には、例えば、CPU21が実行するプログラムが記憶される。サーバ5の導入時には、プログラムが記憶媒体281からHDD24にセットアップされる。
【0026】
図3を参照し、NAT装置8の電気的構成について説明する。NAT装置8は、CPU51、ROM52、RAM53、フラッシュメモリ57を備えている。CPU51は、サーバ5や端末装置11との通信を制御する。ROM52には、CPU51のプログラムが少なくとも記憶される。RAM53には、CPU51の処理時に発生する一時的なデータが少なくとも記憶される。フラッシュメモリ57には、ポート番号が履歴情報として記憶される。CPU51は、ROM52、RAM53、及びフラッシュメモリ57と電気的に接続している。CPU51は、ROM52、RAM53、及びフラッシュメモリ57の記憶領域にアクセスできる。
【0027】
NAT装置8は、表示部54を備えている。表示部54は、NAT装置8の状態等を表示することができる。CPU51は、表示部54と電気的に接続している。CPU51は、表示部54に所望の情報を表示させることができる。表示部54としては、例えばLEDが使用できる。NAT装置8は、入力部55を備えている。入力部55は、ユーザによるNAT装置8への入力操作を受け付ける。CPU51は、入力部55と電気的に接続している。CPU51は、入力部55を介して入力された情報を認識できる。入力部55としては、例えばスイッチやタッチセンサが使用できる。
【0028】
NAT装置8は、通信モジュール58を備えている。通信モジュール58は、インターネット15を介した通信を可能とする。CPU51は、通信モジュール58と電気的に接続している。CPU51は、インターネット15を介して通信を行うことができる。NAT装置8は、通信モジュール59を備えている。通信モジュール59は、LAN14を介した通信を可能とする。CPU51は、通信モジュール59と電気的に接続している。CPU51は、LAN14を介して通信を行うことができる。
【0029】
図4を参照し、端末装置11の電気的構成について説明する。端末装置11は、CPU81、ROM82、RAM83、HDD84を備えている。CPU81は、NAT装置8やサーバ5との通信を制御する。ROM82には、Bootプログラムや初期パラメータが少なくとも記憶される。RAM83は、CPU81の処理時に発生する一時的なデータが少なくとも記憶される。HDD84は、CPU81のプログラムや、端末装置11間でP2P通信を開始させる場合の開始手順のリスト(以下「手順リスト」という。)が少なくとも記憶される。CPU81は、ROM82、RAM83、及びHDD84と電気的に接続している。CPU81は、ROM82、RAM83、及びHDD84の記憶領域にアクセスできる。
【0030】
端末装置11は、入力ドライバ85を備えている。入力ドライバ85は、キーボード851を介して入力された情報を検出する。CPU81は、入力ドライバ85と電気的に接続している。入力ドライバ85は、キーボード851と電気的に接続する。CPU81は、キーボード851を介して入力された情報を認識できる。端末装置11は、表示ドライバ86を備えている。表示ドライバ86は、ディスプレイ861に像を表示させるための制御を行う。CPU81は、表示ドライバ86と電気的に接続している。表示ドライバ86は、ディスプレイ861と電気的に接続する。CPU81は、ディスプレイ861に所望の像を表示させることができる。
【0031】
端末装置11は、通信モジュール87を備えている。通信モジュール87は、LAN14を介した通信を可能とする。CPU81は、通信モジュール87と電気的に接続している。CPU81は、LAN14を介して通信を行うことができる。端末装置11は、ディスクドライブ88を備えている。ディスクドライブ88は、記憶媒体881に記憶された情報にアクセスする為の駆動装置である。CPU81は、ディスクドライブ88と電気的に接続している。CPU81は、ディスクドライブ88に記憶媒体881が挿入された状態で、記憶媒体881に記憶された情報にアクセスできる。記憶媒体881には、例えば、CPU81が実行するプログラムが記憶される。端末装置11の導入時には、プログラムが記憶媒体881からHDD84にセットアップされる。
【0032】
図5を参照し、HDD84に記憶されている手順リストの一例である手順リスト841について説明する。手順リスト841には、自身がLANを介して直接接続するNAT装置(「自身NAT装置」という。)のNAT種別と、P2P通信を行う相手方の端末装置11がLANを介して直接接続するNAT装置(「相手NAT装置」という。)のNAT種別とが記憶されている。また、其々のNAT種別の組み合わせに対応する開始手順が記憶されている。後述する端末装置処理では、手順リストに基づいて開始手順が決定される。
【0033】
例えば図5に示す例では、自身NAT装置又は相手NAT装置のいずれかがのNAT種別が、「(NAT装置なし)」「Full Cone NAT」のいずれかである場合、開始手順を必要としないことが記憶されている。また、双方のNAT種別が「Cone NAT」(Address-Restricted Cone NAT、Port-Restricted Cone NATのうちいずれか)である場合、開始手順としてUDP Hole Punchingが記憶されている。また、双方のNAT種別が「Symmetric NAT」である場合、開始手順としてUDP Multi Hole Punching(ポート番号の変更パターンが推測可能な場合のみ)が記憶されている。手順リストの使用形態の詳細については後述する。
【0034】
図6〜図14を参照し、端末装置11のCPU81において実行される端末装置処理について説明する。端末装置処理は、他の端末装置11との間で通信を行うための指示がキーボード851を介してユーザによってなされた場合に、CPU81によって起動され実行される。以下では、端末装置9が端末装置10との間でP2P通信を行う場合に、端末装置9のCPU81において実行される端末装置処理について説明する。
【0035】
図6に示すように、端末装置処理が起動されると、はじめに、端末装置10との間でHTTPサーバ4を介したトンネリング通信を開始させるための通信が実行される(S11)。処理の詳細は後述する。この通信によって端末装置9は、端末装置10との間でトンネリング通信が実行可能となる。トンネリング通信では、HTTPサーバ4においてパケットがHTTPによってカプセル化される。HTTPによってカプセル化されたパケットは、NAT装置6,7においてブロックされることなく、端末装置9,10に到達する。
【0036】
トンネリング通信が可能となった状態で、端末装置9では、端末装置10との間でSIPに基づいた呼制御通信が行われる。これによって、端末装置9は、端末装置10と接続状態となる。接続状態となった端末装置9,10間で、RTP等に基づいたパケットの送受信が開始される(S13)。なお本実施の形態では、端末装置9,10間で映像データの通信が行われるものとする。映像データは端末装置10においてパケット化され、端末装置9は、端末装置10から送信された映像パケットを受信する。
【0037】
次いで、NAT装置6及びNAT装置7がUPnP機能を搭載しているかを判断するUPnP判別処理が実行される(S15)。図8を参照し、UPnP判別処理について説明する。UPnP判別処理では、はじめに、UPnP機能を搭載したNAT装置8を検索する為の検索用パケットが、マルチキャスト送信される(S61)。UPnP機能を搭載したNAT装置は、この検索用パケットを受信した場合に応答パケットを返信する。端末装置9では、送信した検索用パケットに対する応答パケットを受信したかが判断される(S63)。NAT装置6,7の両方から応答パケットを受信できない場合(S63:NO)、NAT装置6、7のうち少なくとも一方は、UPnP機能を搭載していないことになるので、そのままUPnP判別処理を終了して端末装置処理(図6参照)に戻る。
【0038】
一方、NAT装置6,7の両方から応答パケットを受信できた場合(S63:YES)、NAT装置6,7はUPnP機能を搭載しているということになる。続いて、NAT装置6,7に対し、インターネット15側に割り当てられているIPアドレスとポート番号とを要求する要求パケットが送信される(S65)。NAT装置6,7は、要求パケットに対し、IPアドレス及びポート番号を付加した応答パケットを返信する。端末装置9では、この応答パケットを受信したかが判断される(S67)。応答パケットを受信できなかった場合(S67:NO)、NAT装置6,7を介してUPnPに基づいた通信を行うことができないので、そのままUPnP判別処理を終了し、端末装置処理(図6参照)に戻る。
【0039】
一方、要求パケットに対する応答パケットをNAT装置6,7から受信した場合(S67:YES)、端末装置10との間でUPnPに基づいた通信を行うことが可能である。この場合、端末装置9,10は、特別な開始手順を経ることなく、双方間でP2P通信を行うことができる。UPnPに基づいた通信を行うことが可能であることを示すフラグ情報が、RAM83に一時的に記憶される(S69)。そしてUPnP判別処理を終了し、端末装置処理(図6参照)に戻る。
【0040】
図6に示すように、UPnP判別処理(S15)が終了した後、端末装置10との間でUPnPに基づいた通信が可能であるかが判断される(S17)。RAM83に記憶されたフラグ情報が参照される。UPnPに基づいた通信が可能である場合(S17:YES)、特定の開始手順に基づいた通信は不要である。端末装置9は、端末装置10とのP2P通信を開始させることが可能な状態である。P2P通信によって、端末装置9,10間で映像データを含むパケットが送受信される(S27)。そしてS37(図7参照)の処理に進む。
【0041】
これに対し、UPnPに基づいた通信を端末装置9,10間で実行できない場合(S17:NO)、NAT装置6のNAT種別を判別する処理(NAT種別判定処理)が実行される(S19、図9参照)。NAT種別判定処理では、端末装置9がSTUNサーバ2と所定の通信を行うことによって、NAT装置6のNAT種別が特定される。
【0042】
図9を参照し、NAT種別判定処理について説明する。NAT種別判定処理では、はじめに、要求パケットがSTUNサーバ2に対して送信され、応答パケットを自身に対して返信するように要求される。要求パケットは、STUNサーバ2のポート番号(第一ポート)に対して送信される(S71)。次いで、応答パケットを受信したかが判断される(S73)。応答パケットを受信できない場合(S73:NO)、端末装置10との間でP2P通信を行うことができないことになる。P2P通信を行うことができない旨を示すフラグ情報が、RAM83に一時的に記憶される(S83)。そしてNAT種別判定処理を終了し、端末装置処理(図6参照)に戻る。
【0043】
一方、STUNサーバ2から応答パケットを受信した場合(S73:YES)、受信した応答パケットに含まれているIPアドレス及びポート番号であって、NAT装置6におけるインターネット15側のIPアドレス(以下、「NAT IP」という。)とポート番号(以下「NATポート」という。)とが、応答パケットから抽出される。自身が要求パケットを送信した場合の送信元IPアドレスとNAT IPとが一致し、且つ、自身が要求パケットを送信した場合の送信元ポート番号とNATポートとが一致するかが判断される(S75)。一致しない場合(S75:NO)、NAT装置6がSTUNサーバ2との間に介在していることになるので、S85(図10参照)の処理に進む。
【0044】
送信元IPアドレスとNAT IPとが一致し、且つ、送信元ポート番号とNATポートとが一致する場合(S75:YES)、要求パケットがSTUNサーバ2に対して送信され、応答パケットを自身に対して返信するように要求される。要求パケットは、STUNサーバ2の第一ポートに対して送信される。応答パケットは、S71の要求パケットに応じて返信された応答パケットとは別の送信元IPアドレス及び送信元ポート番号から送信するように、STUNサーバ2に要求される(S77)。そして応答パケットを受信したかが判断される(S79)。応答パケットを受信できない場合(S79:NO)、端末装置10との間でP2P通信を行うことができないことになる。P2P通信を行うことができない旨を示すフラグ情報が、RAM83に一時的に記憶される(S83)。そしてNAT種別判定処理を終了し、端末装置処理(図6参照)に戻る。
【0045】
一方、STUNサーバ2から応答パケットを受信した場合(S79:YES)、端末装置10との間にNAT装置は介在していないことになる。この場合端末装置9は、特別な開始手順を経ることなく、端末装置10とP2P通信を行うことができる。NAT装置が介在していないことを示すフラグ情報がRAM83に一時的に記憶される(S81)。そしてNAT種別判定処理を終了し、端末装置処理(図6参照)に戻る。
【0046】
図10のS85の処理では、要求パケットがSTUNサーバ2に対して送信され、応答パケットを自身に対して返信するように要求される。要求パケットは、STUNサーバ2の第一ポートに対して送信される。応答パケットは、S71において送信された要求パケットに対して返信された応答パケットとは別の送信元IPアドレス及び送信元ポート番号から送信するように、STUNサーバ2に要求される(S85)。そして、応答パケットを受信したかが判断される(S87)。応答パケットを受信した場合(S87:YES)、STUNサーバ2との間にNAT装置6が介在しているが、送信元IPアドレス及び送信元ポート番号の異なる応答パケットをいずれもNAT装置6が転送しているので、NAT装置6のNAT種別がFull Cone Natであると特定される。特定されたNAT種別を示すフラグ情報が、RAM83に一時的に記憶される(S89)。そしてNAT種別判定処理を終了し、端末装置処理(図6参照)に戻る。
【0047】
一方、応答パケットを受信できない場合(S87:NO)、要求パケットがSTUNサーバ2に対して送信され、応答パケットを自身に対して返信するように要求される。要求パケットは、STUNサーバ2のポート番号であって第一ポートとは異なるポート番号(第二ポート)に対して送信される(S91)。そして、応答パケットを受信したかが判断される(S92)。応答パケットを受信した場合(S92:YES)、S73(図9参照)において受信された応答パケットのNAT IP及びNATポートと、今回受信した応答パケットのNAT IP及びNATポートとが比較される(S93)。双方が一致する場合(S93:YES)、次いで要求パケットがSTUNサーバ2に対して送信され、応答パケットを自身に対して返信するように要求される。要求パケットは、第一ポートに対して送信される。応答パケットは、S92において受信された応答パケットと同じ送信元IPアドレスであり、且つ、S92において受信された応答パケットとは異なる送信元ポート番号から送信するように、STUNサーバ2に要求される(S95)。そして、応答パケットを受信したかが判断される(S97)。応答パケットを受信した場合(S97:YES)、送信元ポート番号が異なる場合であっても、NAT装置6は応答パケットを転送しているので、NAT装置6のNAT種別がAddress‐Restricted Cone NATであると特定される。特定されたNAT種別を示すフラグ情報が、RAM83に一時的に記憶される(S99)。そしてNAT種別判定処理を終了し、端末装置処理(図6参照)に戻る。一方、応答パケットを受信できない場合(S97:NO)、送信元ポート番号が異なると、NAT装置6は応答パケットを転送しないということになるので、NAT装置6のNAT種別がPort-Restricted Cone NATであると特定される。特定されたNAT種別を示すフラグ情報が、RAM83に一時的に記憶される(S101)。そしてNAT種別判定処理を終了し、端末装置処理(図6参照)に戻る。
【0048】
一方、S92の処理において応答パケットを受信できない場合(S92:NO)や、S93の処理においてIPアドレスとポート番号のうち少なくとも一方が一致しない場合(S93:NO)、NAT装置6のNAT種別がSymmetric NATであると特定される。特定されたNAT種別を示すフラグが、RAM83に一時的に記憶される(S103)。次いで、NAT装置6においてポートマッピングが行われる場合のポート番号の変更パターンを推測するために、変更パターン推測処理(S105、図11参照)が実行される。変更パターン推測処理が終了した場合、NAT種別特定処理を終了して端末装置処理(図6参照)に戻る。
【0049】
変更パターン推測処理について、図11を参照して説明する。変更パターン推測処理では、要求パケットがSTUNサーバ2に対して送信され、応答パケットを自身に対して返信するように要求される。要求パケットは、STUNサーバ2のポート番号であって、第一ポート及び第二ポートとは異なるポート番号(第三ポート)に対して送信される(S111)。そして応答パケットを受信したかが判断される(S113)。応答パケットを受信できない場合(S113:NO)、変更パターンを推測できないので、変更パターンを推測できない旨を示すフラグ情報をRAM83に一時的に記憶する(S123)。そして変更パターン推測処理を終了し、NAT種別判定処理(図10参照)に戻る。
【0050】
一方、応答パケットを受信した場合(S113:YES)、STUNサーバ2に第一ポート〜第三ポート以外のポート番号が準備されているかが判断される(S115)。第一ポート〜第三ポート以外のポート番号が準備されている場合(S115:YES)、S111の処理に戻る。そして、未だ使用されていないポート番号に対して要求パケットを送信するために、上述の処理が繰り返し実行される。
【0051】
STUNサーバ2に準備されている全てのポート番号宛てに要求パケットを送信した場合(S115:NO)、受信した応答パケットのNAT IPやNATポートの変化の様子から、変更パターンが推測される(S117)。例えば、ポート番号が所定のポート幅ずつ加算されている場合には、変更パターンが推測可能であると判断される。変更パターンが推測可能である場合(S119:YES)、推測された変更パターンを示す情報がRAM83に一時的に記憶される(S121)。そして変更パターン推測処理を終了してNAT種別判定処理(図10参照)に戻る。一方、例えばポート番号がランダムに変化している場合には、変更パターンを推測することができない。この場合(S119:NO)、変更パターンを推測できない旨を示す情報をRAM83に一時的に記憶する(S123)。そして変更パターン推測処理を終了し、NAT種別判定処理(図10参照)にもどる。
【0052】
図6に示すように、NAT種別判定処理(S19)が終了した後、NAT装置6のNAT種別と、手順リスト(図5参照)とに基づいて、端末装置10との間でP2P通信を開始させるために必要な開始手順が選択される。
【0053】
NAT種別判定処理においてRAM83に記憶された情報が参照される。以下の(1)又は(2)の条件を満たすかが判断される(S21)。
(1)STUNサーバ2との間にNAT装置が介在していない。
(2)NAT装置6の種別がFull Cone NATである。
(1)又は(2)の条件を満たす場合(S21:YES)、特定の開始手順に基づいた通信を行うことなく、端末装置9は端末装置10との間でP2P通信を行うことが可能である。P2P通信によって、端末装置9と端末装置10との間で映像データの送受信が実行される(S27)。そしてS37(図7参照)の処理に進む。
【0054】
(1)及び(2)のいずれの条件も満たさない場合(S21:NO)、端末装置10に接続するNAT装置7のNAT種別を取得するために、STUNサーバ2との間で通信が行われる。NAT装置7のNAT種別が取得される(S23)。次いで、NAT種別判定処理(S19)において判定されたNAT装置6のNAT種別と、S23において取得されたNAT装置7のNAT種別と、手順リスト(図5参照)とに基づいて、開始手順が選択される。
【0055】
以下の(3)又は(4)の条件を満たすかが判断される(S25)。
(3)STUNサーバ2と端末装置10との間にNAT装置が介在していない。
(4)NAT装置7の種別がFull Cone NATである。
(3)又は(4)の条件を満たす場合(S25:YES)、特定の開始手順に基づいた通信を行うことなく、端末装置9と端末装置10との間でP2P通信を行うことが可能である。P2P通信によって、端末装置9は端末装置10との間で映像データの送受信を実行する(S27)。そしてS37(図7参照)の処理に進む。
【0056】
(3)及び(4)のいずれの条件も満たさない場合(S25:NO)、次いで、(5)〜(7)のうちいずれかの条件を満たすかが判断される(S29)。
(5)NAT装置7のNAT種別が、Address‐Restricted Cone NATである。
(6)NAT装置7のNAT種別がPort-Restricted Cone NATであり、且つ、NAT装置6のNAT種別がAddress‐Restricted Cone NAT又はPort-Restricted Cone NATである。
(7)NAT装置7のNAT種別がSymmetric NATであり、且つ、NAT装置6のNAT種別がAddress‐Restricted Cone NATである。
【0057】
(5)〜(7)のうちいずれかの条件を満たす場合(S29:YES)、開始手順としてUDP Hole Punchingが選択される。UDP Hole Punchingに基づいた通信が実行される(S31)。これによって、端末装置9と端末装置10との間でP2P通信が可能となる。P2P通信によって、端末装置9は端末装置10との間で映像データの送受信を実行する(S27)。そしてS37(図7参照)の処理に進む。
【0058】
(5)〜(7)のいずれの条件も満たさない場合(S29:NO)、次いで、(8)又は(9)の条件を満たし、且つ、端末装置9及び端末装置10におけるポートマッピングの変更パターンが推測可能であるかが判断される(S33)。
(8)NAT装置7のNAT種別がSymmetric NATであり、且つ、NAT装置6のNAT種別がPort-Restricted Cone NAT又はSymmetric NATである。
(9)NAT装置7のNAT種別がPort-Restricted Cone NATであり、且つ、NAT装置6のNAT種別がSymmetric NATである。
【0059】
上述の条件を満たす場合(S33:YES)、開始手順としてUDP Multi Hole Punchingが選択される。UDP Multi Hole Punchingに基づいた通信が実行される(S35)。これによって、端末装置9と端末装置10との間でP2P通信が可能となる。P2P通信が可能となった状態で、端末装置9は端末装置10との間で映像データの通信を実行する(S27)。そしてS37(図7参照)の処理に進む。一方、上述の全ての条件を満たさない場合には(S33:NO)、そのままS37(図7参照)の処理に進む。
【0060】
図7のS37では、上述の処理のうちS27、S31、及びS35(図6参照)の処理によって、端末装置9,10間でP2P通信が開始されたかが判断される(S37)。P2P通信を行うことが不可能であり(例えばS83、図9参照)、P2P通信が行われていない場合には(S37:NO)、HTTPサーバ4を介したトンネリング通信を中止させることができないので、そのまま端末装置処理を終了する。これに対し、P2P通信が実行されている場合(S37:YES)、HTTPサーバ4を介したトンネリング通信からP2P通信に切り替えるために、タイミング調整処理(S41、図12〜図14参照)が実行される。
【0061】
図12〜図14を参照し、タイミング調整処理について説明する。図12に示すように、タイミング調整処理では、はじめに、HTTPサーバ4を介したトンネリング通信によって、端末装置10からパケットを受信しているかが判断される(S131)。受信している場合(S131:YES)、パケットに付加されている連続的な番号(「パケット番号」という。)が変数「nH」としてRAM23に格納される(S133)。nHは、HTTPサーバ4を介して受信したパケットのパケット番号のうち最も新しいパケット番号を管理する変数である。そして、受信したパケットに含まれている映像データをディスプレイ861に表示させ、映像データを再生させる(S135)。ユーザは、ディスプレイ861を介して映像データを視聴することができる。次いで、再生した映像データの基となるパケットのパケット番号(nH)が、変数「nT」としてRAM23に格納される。nTは、最後に再生された映像データの基となるパケットのパケット番号を管理する変数である。そしてS131の処理に戻り、上述の処理が繰り返し実行される。
【0062】
HTTPサーバ4を介してパケットを受信していない場合(S131:NO)、P2P通信によって端末装置10からパケットを受信したかが判断される(S137)。受信していない場合(S137:NO)、S131の処理に戻り、上述の処理が繰り返し実行される。端末装置10からパケットを受信している場合(S137:YES)、受信したパケットのパケット番号が変数「nD」としてRAM23に格納される(S139)。nDは、P2P通信によって端末装置10から受信したパケットのパケット番号のうち最も新しいパケット番号を管理する変数である。
【0063】
次いで、再生する為の映像データが抽出されるパケット(以下「再生パケット」という。)を、HTTPサーバ4を介したトンネリング通信によって受信したパケット(「HTTPパケット」という。)から、P2P通信によって受信したパケット(「直接パケット」という。)に切り替えるための処理が実行される(S141〜S145)。
【0064】
nHとnDとの値が比較される(S141)。nDの方がnHよりも大きい場合(S141:YES)、直接パケットの方がHTTPパケットよりも先行して端末装置9に到達していることになる。この場合、第一同期処理(S143、図13参照)が実行される。第一同期処理では、HTTPパケットを再生パケットとする状態から、直接パケットを再生パケットとする状態に切り替えられる。その後、HTTPサーバ4を介したトンネリング通信が中止される。そしてタイミング調整処理を終了し、端末装置処理(図6参照)に戻る。
【0065】
一方、nDがnH以下である場合(S141:NO)、HTTPパケットの方が直接パケットよりも先行して端末装置9に到達していることになる。この場合、第二同期処理(S145、図14参照)が実行される。第二同期処理では、直接パケットの方がHTTPパケットよりも先行して端末装置9に到達する状態となるまで待機される。その後、HTTPパケットを再生パケットとする状態から、直接パケットを再生パケットとする状態に切り替えられる。その後HTTPサーバ4を介した通信を中止させる。そしてタイミング調整処理を終了し、端末装置処理(図6参照)に戻る。
【0066】
第一同期処理について、図13を参照して説明する。図13に示すように、第一同期処理では、S137(図12参照)において受信した直接パケットを、HDD24に用意されたキューの末尾に記憶する。次いで受信した直接パケットのパケット番号(nD)を、キューの先頭に記憶したパケット番号(一番最初にキューから取り出されるパケット番号)を示す変数「nQ」としてRAM23に記憶する(S161)。
【0067】
次いで、nQが「nH+1」よりも大きいかが判断される(S163)。nQが「nH+1」より大きい(S163:YES)、HTTPパケットをさらに受信しなければ、直接パケットを再生パケットとすることができない。そこで、新たにHTTPパケットを受信したかが判断される(S165)。HTTPパケットを受信した場合(S165:YES)、受信したHTTPパケットのパケット番号がnHとして記憶される(S173)。そして、受信したHTTPパケットに含まれている映像データをディスプレイ861に表示させる(S174)。次いで、映像データを表示させた時刻を、映像データを表示させた場合の時刻を示す変数「t」としてRAM23に記憶する(S175)。そしてS163の処理に戻り、上述の処理が繰り返し実行される。
【0068】
S165の処理でHTTPパケットを受信していない場合(S165:NO)、直接パケットを受信したかが判断される(S167)。受信していない場合(S167:NO)、S165の処理に戻り、継続してHTTPパケット及び直接パケットの受信が監視される。直接パケットを受信している場合(S167:YES)、受信した直接パケットのパケット番号がnDとして記憶される(S169)。次いで、受信した直接パケットをキューの末尾に記憶する(S171)。そしてS165の処理に戻り、上述の処理が繰り返し実行される。
【0069】
上述の処理が繰り返されてnHが更新され、nQが「nH+1」以下となった場合(S163:NO)、HTTPパケットを再生パケットとする状態から、直接パケットを再生パケットとする状態に切り替えることができる。そこで、HTTPサーバ4を介したトンネリング通信を中止させる(S177)。
【0070】
次いで、映像データが断続的にディスプレイ861に表示された場合にユーザが違和感を感じない最小の表示間隔(「Tmin」という。)が、前述したtに加算される。算出された値(t+Tmin)が、タイマ割り込み時間としてセットされ、タイマ割り込みが許可される(S179)。許可されたタイマ割り込みは、時刻「t+Tmin」が到来した場合に割り込みを発生させる。その後、Tmin間隔で周期的に割り込みを発生させる。
【0071】
この状態で、直接パケットを受信したかが判断される(S181)。直接パケットを受信した場合(S181:YES)、受信した直接パケットのパケット番号がnDとして記憶される(S183)。次いで、受信した直接パケットをキューの末尾に記憶する(S185)。そしてS181の処理に戻り、上述の処理が繰り返し実行される。
【0072】
一方、直接パケットを受信していない場合(S181:NO)、S179の処理で設定したタイマ割り込みが発生しているかが判断される(S189)。タイマ割り込みが発生していない場合(S189:NO)、S181の処理に戻り、上述の処理が繰り返し実行される。タイマ割り込みが発生している場合(S189:YES)、キューに直接パケットが記憶されているかが判断される(S191)。キューに直接パケットが記憶されていない場合(S191:YES)、ディスプレイ861に表示させるための直接パケットがないので、特段処理を行うことなく第一同期処理を終了し、タイミング調整処理(図12参照)に戻る。
【0073】
キューに直接パケットが記憶されている場合(S191:NO)、キューに記憶されている直接パケットのうち、パケット番号がnQの直接パケットが取り出される(S193)。取り出された直接パケットに含まれている映像データが、ディスプレイ861に表示される(S195)。表示時刻がtとして記憶される(S197)。nQに1加算され更新される(S199)。そしてS179に戻り、上述の処理が繰り返し実行される。
【0074】
第二同期処理について、図14を参照して説明する。図14に示すように、第二同期処理では、はじめに、映像データが繰り返しディスプレイ861に表示された場合にユーザが違和感を感じない最大の表示間隔(「Tmax」という。)が、前述したtに加算される。算出された値(t+Tmax)は、タイマ割り込み時間としてセットされ、タイマ割り込みが許可される(S211)。許可されたタイマ割り込みは、時刻「t+Tmax」が到来した場合に割り込みを発生させる。その後、Tmax間隔で周期的に割り込みを発生させる。
【0075】
HTTPパケットを受信したかが判断される(S213)。受信した場合(S213:YES)、受信したHTTPパケットのパケット番号がnHとして記憶される(S215)。次いで、受信したHTTPパケットが、HDD24に用意されたキューの末尾に記憶される。受信したHTTPパケットのパケット番号がnQに格納される(S217)。そしてS213の処理に戻り、繰り返しHTTPパケットの受信が監視される。
【0076】
一方、HTTPパケットを受信していない場合(S213:NO)、直接パケットを受信したかが判断される(S219)。受信している場合(S219:YES)、受信した直接パケットのパケット番号が、nDとして記憶される(S221)。次いで、nDとnTとが比較される(S223)。nDがnT以下である場合(S223:NO)、直接パケットを再生パケットとすることができない。そこでS213の処理に戻り、継続してHTTPパケットの受信が監視される。
【0077】
一方、nDがnTよりも大きい場合(S223:YES)、HTTPパケットを再生パケットとする状態から、直接パケットを再生パケットとする状態に切り替えることができる。そこで、HTTPサーバ4を介したトンネリング通信を中止させる(S225)。そして第二同期処理を終了し、タイミング調整処理(図12参照)に戻る。
【0078】
一方、S219の処理で直接パケットを受信していない場合(S219:NO)、S211の処理で設定したタイマ割り込みが発生しているかが判断される(S227)。タイマ割り込みが発生していない場合(S227:NO)、S213の処理に戻り、上述の処理が繰り返し実行される。タイマ割り込みが発生している場合(S227:YES)、キューに記憶されているHTTPパケットのうち、パケット番号がnQのHTTPパケットが取り出される(S229)。取り出されたHTTPパケットに含まれている映像データがディスプレイ861に表示される(S231)。表示させたHTTPパケットのパケット番号(nQ)がnTとして記憶され(S233)、表示時刻がtに格納される(S235)。nQに1加算され更新される(S237)。そしてS211の処理に戻り、上述の処理が繰り返し実行される。
【0079】
図7に示すように、第一同期処理(図13)及び第二同期処理(図14)が終了してタイミング調整処理(図12参照)が終了した後、端末装置処理では、直接パケットを受信したかが判断される(S45)。なおこの状態では、HTTPサーバ4を介したトンネリング通信は中止されているので、HTTPパケットは受信しない。直接パケットを受信している場合(S45:YES)、受信した直接パケットに含まれている映像データがディスプレイ861に表示される(S49)。そしてS45の処理に戻り、継続して直接パケットの受信が監視される。直接パケットを受信していない場合(S45:NO)、端末装置10との通信を中止させるための操作がキーボード851を介してユーザによってなされたかが判断される(S53)。キー操作がなされていない場合(S53:NO)、S45の処理に戻り、継続して直接パケットの受信が監視される。一方、通信を中止させる操作がなされた場合(S53:YES)、端末装置10との通信を中止し、端末装置処理は終了する。
【0080】
図15に示す通信シーケンスについて、上述のフローチャートを参照しつつ説明する。なお図15では、端末装置9,10とサーバ2,3,4との間に接続されるNAT装置6,7は省略されている。
【0081】
はじめに、端末装置9と端末装置10との間でHTTPサーバ4を介したトンネリング通信を開始させる為に、端末装置9からHTTPサーバ4に対して接続要求パケットが送信される(101)。HTTPサーバ4では、トンネリング通信を許可する旨を端末装置9に対して通知するために、許可通知パケットが端末装置9に対して返信される(103)。次いで端末装置9は、SIPに基づいて端末装置10とセッションを確立させるために、接続要求パケット(INVITE)がSIPサーバ3に対して送信される(105)。SIPサーバ3では、受信した接続要求パケット(INVITE)が端末装置10に対して転送される(107)。なお、SIPサーバ3を介した接続要求パケット(INVITE)の通信は、HTTPサーバ4を介したトンネリング通信によって行われる。
【0082】
一方、端末装置10では、SIPサーバ3及びHTTPサーバ4を介して接続要求パケット(INVITE)を受信した場合、HTTPサーバ4を介したトンネリング通信を開始させる為に、HTTPサーバ4に対して接続要求パケットが送信される(109)。HTTPサーバ4では、許可通知パケットが端末装置10に対して返信される(111)。
【0083】
次いで端末装置10は、SIPに基づいて端末装置9とセッションを確立させるために、接続応答パケット(200 OK)がSIPサーバ3に対して送信される(113)。SIPサーバ3では、受信した接続応答パケット(200 OK)が端末装置9に対して転送される(115)。端末装置9では、受信した接続応答パケット(200 OK)に対してACKパケットが送信される(117)。ACKパケットは、SIPサーバ3を介して端末装置10に到達する(118)。なお、SIPサーバ3を介した接続応答パケット(200 OK)及びACKパケットの通信は、HTTPサーバ4を介したトンネリング通信によって行われる。以上の通信によって、端末装置9、10間でHTTPサーバ4を介したトンネリング通信が可能な状態となる(S11、図6参照)。また、SIPに基づいた通信によってセッションが確立し、端末装置9と端末装置10とは接続状態になっている。
【0084】
端末装置9,10の間で、映像データを含むパケットの通信が実行される(119、S13(図6参照))。端末装置9では、受信したHTTPパケットに含まれている映像データがディスプレイ861に表示される(S174(図13参照)、S223(図14参照))。
【0085】
トンネリング通信が行われている状態で、端末装置9,10間でP2P通信を実行するための処理が開始される。はじめに、NAT装置6,7がUPnP機能を搭載しているかが判断される(S15(図6参照))。次いで、STUNサーバ2との通信によって、NAT装置6,7のNAT種別が特定される(121、123、S19(図6参照),S23(図6参照))。UPnP機能の搭載の可否、及び、NAT種別に基づいて、端末装置9,10間でP2P通信を行うために必要となる開始手順の通信が選択される(S17、S21、S25、S29、S33(図6参照))。選択された開始手順に基づいて、端末装置9,10間で通信が実行される(125、S31(図6参照)、S33(図6参照))。これによって、端末装置9,10間でP2P通信が可能な状態となるので、映像データを含むパケットの通信が実行される(127、S27(図6参照))。
【0086】
P2P通信が開始された後、所定のタイミングで、HTTPサーバ4を介したトンネリング通信を終了させる(S177(図13参照)、S225(図14参照))。HTTPパケットを再生パケットとする状態から、直接パケットを再生パケットとする状態に切り替えられる。((S41(図7参照)))。これによって、直接パケットに含まれている映像データが抽出され、ディスプレイ861に表示される(S197(図13参照)、S49(図7参照))。
【0087】
通信を終了させる指示が、端末装置9のキーボード851を介して入力された場合、端末装置9から端末装置10に対して、通信を終了させるための終了パケット(BYE)が送信される(129)。終了パケット(BYE)を受信した端末装置10は、端末装置9に対して応答パケット(200 OK)を返信する(131)。これによって、端末装置9,10間の通信は終了する(S53(図7参照))。
【0088】
図16を参照し、第一同期処理(図13参照)時における映像データの表示タイミングについて、図7、図12、及び図13のフローチャートを参照しつつ説明する。図16では、端末装置10から送信されたパケット(HTTPパケット及び直接パケット)を端末装置9が受信した場合の受信タイミングが示されている。また、再生パケットに含まれる映像データがディスプレイ861に表示されるタイミングが示されている。
【0089】
HTTPサーバ4を介したトンネリング通信が開始されることによって、HTTPパケットの受信が開始される(140、S131(図12参照))。HTTPパケットが受信され(141)、HTTPパケットが再生パケットとされて(143)、再生パケットに含まれている映像データがディスプレイ861に表示される(145、S135(図12参照))。
【0090】
所定の開始手順に基づいて通信が行われた結果、P2P通信が可能となり、P2P通信が開始される(147)。直接パケットが受信される(149、S137(図12参照))。受信した直接パケットのパケット番号は「5」であり、この時点での再生パケットのパケット番号は「2」であるので(S141:YES(図12参照))、第一同期処理(S143(図12参照))が実行される。受信した直接パケットは、キューに記憶される(S161(図13参照))。nQ(=5)の方が「nH+1」(=3)よりも大きいので(S163:YES(図12参照))、受信したHTTPパケットが継続して再生パケットとされ、ディスプレイ861に映像データが表示される(151、153、S174(図13参照))。受信した直接パケットはキューに記憶される(S171(図13参照))。
【0091】
処理が進む中、パケット番号が「7」の直接パケットを受信した場合(155)、nQ(=5)が「nH+1」(=5)以下となるので(S163:NO(図13参照))、HTTPサーバ4を介したトンネリング通信が中止される(157、S177(図13参照))。次いで、キューに記憶された直接パケットが所定の周期(Tmin、159)で取り出される(161、S193(図13参照))。取り出された直接パケットが再生パケットとされ、ディスプレイ861に映像データが表示される(163、165、S195(図13参照))。
【0092】
処理が進む中、キューに記憶されている直接パケットがなくなった場合(S191:YES(図13参照))、直接パケットから抽出される映像データは、直接パケットを受信したタイミング(167)で抽出される(169)。抽出された映像データがディスプレイ861に表示される(171、S49、図7参照)。
【0093】
以上のように、HTTPパケットを再生パケットとする状態から、直接パケットを再生パケットとする状態に切り替えた場合であっても、ディスプレイ861に表示される映像データの表示周期は最短でTminになる。これによって、映像データの表示周期が短すぎることによる違和感をユーザに感じさせることなく、直接パケットを再生パケットとする状態に切り替えることができる。
【0094】
図17を参照し、第二同期処理(図14参照)時における映像データの表示タイミングについて、図7、図12、及び図14のフローチャートを参照しつつ説明する。
【0095】
HTTPサーバ4を介したトンネリング通信が開始されることによって、HTTPパケットの受信が開始される(172、173、S131(図12参照))。受信されたHTTPパケットが再生パケットとされて(174)、再生パケットに含まれている映像データがディスプレイ861に表示される(175、S135(図12参照))。
【0096】
所定の開始手順に基づいて通信が行われた結果、P2P通信が可能となり、P2P通信が開始される(177)。直接パケットが受信される(179、S137(図12参照))。受信した直接パケットのパケット番号は「2」であり、この時点での再生パケットのパケット番号は「3」であるので(S141:NO(図12参照))、第二同期処理(S145(図12参照))が実行される。HTTPパケットを受信した場合(S213:YES(図14参照))、受信されたHTTPパケットはキューに記憶される(S217(図14参照))。
【0097】
直接パケットを受信した場合(181,183、S219:YES(図14参照))、受信した直接パケットのパケット番号「3,4」が、再生パケットのパケット番号「4」以下であるので(S223:NO(図14参照))、HTTPサーバ4を介したトンネリング通信は終了しない。所定の周期(Tmax、184)でキューに記憶されたHTTPパケットが取り出される(185,187、S229(図14参照))。取り出されたHTTPパケットが再生パケットとされ、ディスプレイ861に映像データが表示される(189,191、S231(図14参照))。
【0098】
処理が進む中、受信した直接パケットのパケット番号「7」(193)が、この時点での再生パケットのパケット番号「6」(195)よりも大きくなった場合(S223:YES(図14参照))、HTTPサーバ4を介したトンネリング通信が中止される(197、S225(図14参照))。以後、直接パケットを受信したタイミングで映像データが抽出される(201)。抽出された映像データがディスプレイ861に表示される(203、S49(図7参照))。
【0099】
以上のように、HTTPパケットを再生パケットとする状態から、直接パケットを再生パケットとする状態に切り替えた場合であっても、ディスプレイ861に表示される映像データの表示周期は最長でTmaxになる。映像データの表示周期が長すぎることによる違和感をユーザに感じさせることなく、直接パケットを再生パケットとする状態に切り替えることができる。
【0100】
以上説明したように、通信システム1においては、端末装置9,10間でP2P通信が開始されるまでは、HTTPサーバ4を介したトンネリング通信によって通信が行われる。このため、端末装置9,10間でP2P通信が開始されるまでに必要な時間を短縮することができる。また、所定の開始手順に基づいて通信が行われた後、トンネリング通信がP2P通信に切り替えられるので、トンネリング通信時に発生し易い通信遅延を抑制できる。端末装置9は、端末装置10から送信されたパケットを遅延なく受信し、出力することができる。
【0101】
また端末装置9,10は、トンネリング通信を中止させてP2P通信に切り替えるタイミングの前後で、映像データをディスプレイ861に表示させるタイミングを調整する。このようにして、映像データの表示間隔がTminより小さくならないようにし、且つTmaxより大きくならないようにしている。トンネリング通信とP2P通信とでスループットが大きく異なる場合、端末装置9側に到達するパケットの到達タイミングは、HTTPパケットと直接パケットとで異なる可能性がある。しかしながら本実施の形態では、映像データの表示タイミングを調節するので、到達タイミングの相違が表示態様に及ぼす影響を抑制している。ユーザは、映像データを違和感なく視認できる。
【0102】
なお、図1のHTTPサーバ4が本発明の「サーバ」に相当し、STUNサーバ2が本発明の「管理サーバ」に相当する。図6のS13の処理を行うCPU81が、本発明の「第一通信手段」に相当し、S19及びS23の処理を行うCPU81が、本発明の「第一特定手段」に相当し、S21、S25、S29、S33の処理を行うCPU81が、本発明の「選択手段」に相当する。図12のS143、S145の処理を行うCPU81が、本発明の「切替手段」に相当する。図6のS27の処理を行うCPU81が本発明の「第二通信手段」に相当する。図4のディスプレイ861が本発明の「出力手段」に相当する。図13のS174、S195、図14のS231の処理を行うCPU81が本発明の「出力制御手段」に相当する。
【0103】
図6のS13の処理が、本発明の「第一通信ステップ」に相当し、S19及びS23の処理が、本発明の「第一特定ステップ」に相当し、S21、S25、S29、S33の処理が、本発明の「選択ステップ」に相当する。図12のS143、S145の処理が、本発明の「切替ステップ」に相当する。図6のS27の処理が本発明の「第二通信ステップ」に相当する。
【0104】
なお、本発明は上記実施の形態に限定されるものではなく、種々の変更が可能である。以下、本実施の形態の変形例について説明する。
【0105】
図18を参照し、変形例における端末装置処理について説明する。変形例では、開始手順を経ることなく端末装置10とP2P通信を行うことができる場合、HTTPサーバ4を介したトンネリング通信を行わないこととする。なお、端末装置処理を除く処理については、上述の実施の形態と同一であるので、以下では説明を省略している。また、上述の実施の形態における端末装置処理と同一処理部分については、説明を簡略化している。
【0106】
図18に示すように、端末装置処理が起動されると、はじめに、端末装置9,10間でUPnPに基づいた通信が可能であるかが特定される(S15)。UPnPに基づいた通信が可能である場合(S17:YES)、特定の開始手順に基づいた通信は不要である。端末装置9,10間では、P2P通信によって映像データが送受信される(S27)。そしてS37(図7参照)の処理に進む。
【0107】
UPnPに基づいた通信を端末装置9,10間で実行できない場合(S17:NO)、NAT装置6のNAT種別を判別する処理が実行される(S19)。次いで、判別されたNAT装置6のNAT種別に基づいて、特定の開始手順に基づいた通信を行うことなくP2P通信を行うことが可能であるかが判断される(S21)。特定の開始手順に基づいた通信が不要な場合(S21:YES)、端末装置9,10間では、P2P通信によって映像データが送受信される(S27)。そしてS37(図7参照)の処理に進む。
【0108】
特定の開始手順に基づいた通信が必要な場合(S21:NO)、端末装置9,10間でHTTPサーバ4を介したトンネリング通信を開始させるための通信が実行される(S251)。トンネリング通信が可能となった状態で、端末装置9,10間でパケットの送受信が開始される(S253)。そしてS23の処理に進む。S25、S29、及びS33では、NAT装置6、及びNAT装置7のNAT種別に基づいて、特定の開始手順に基づいた通信が必要であるかが判断される。必要に応じて、所定の開始手順に基づいた通信が実行される(S31、S35)。通信後、端末装置9,10間では、P2P通信によって映像データが送受信される(S27)。そしてS37(図7参照)の処理に進む。
【0109】
以上説明したように、変形例では、NAT装置6のNAT種別に基づいて、特定の開始手順に基づいた通信が可能であるかが判断される。開始手順に基づいた通信が不要であると判断された場合、HTTPサーバ4を介したトンネリング通信は行わず、P2P通信が実行される。これによって、トンネリング通信時に発生し易い通信遅延を発生させることなく、端末装置10との間で迅速にP2P通信を開始させることができる。
【0110】
なお、図18のS19の処理を行うCPU81が本発明の「第二特定手段」「第三特定手段」に相当し、S21の処理を行うCPU81が本発明の「判定手段」に相当する。図6のS27の処理を行うCPU81が本発明の「第三通信手段」に相当する。図18のS19の処理が本発明の「第二特定ステップ」に相当し、S21の処理が本発明の「判定ステップ」に相当する。
【0111】
なお、本発明は上記実施の形態及び変形例に限定されるものではなく、種々の変更が可能である。本実施の形態では、HTTPサーバ4においてパケットがHTTPでカプセル化されることによって、トンネリング通信を実現していた。しかしながら本発明はこの方法に限定されず、他の一般的なトンネリング通信技術を使用することができる。例えば、SSH(Secure SHell)によってカプセル化することによって、トンネリング通信を実現してもよい。
【0112】
本実施の形態では、SIPサーバ2の通信制御によって端末装置9,10間のセッションが確立された後、端末装置9,10間でパケットの送受信が行われていた。しかしながら本発明はこの方法に限定されない。他の通信プロトコル(FTPなど)に基づいた通信がトンネリング通信下で行われてもよい。
【0113】
上述の変形例では、NAT装置6のNAT種別に応じて、所定の開始手順に基づいた通信の要否が判断されていたが、本発明はこの方法に限定されず、NAT装置7のNAT種別や、NAT装置6,7のNAT種別に応じて、所定の開始手順に基づいた通信の要否が判断されてもよい。
【符号の説明】
【0114】
1 通信システム
2 STUNサーバ
3 SIPサーバ
4 HTTPサーバ
6,7,8 NAT装置
9,10,11 端末装置
15 インターネット
12,13,14 LAN
81 CPU
【特許請求の範囲】
【請求項1】
外部ネットワークに接続するNAT装置の配下の内部ネットワークに接続され、前記NAT装置とは異なる他の前記NAT装置の配下にある他の端末装置と通信を行う端末装置であって、
前記外部ネットワークに接続するサーバであって、前記NAT装置が転送可能な通信プロトコルに基づいてパケットをカプセル化/非カプセル化することによって、前記端末装置間のトンネリング通信を実現するサーバを介し、異なる前記NAT装置の配下の前記内部ネットワークに接続された通信相手の前記端末装置である相手端末装置との間でトンネリング通信を行う第一通信手段と、
前記第一通信手段によって前記相手端末装置との間で前記トンネリング通信が行われている状態で、前記NAT装置におけるポートマッピングの方法毎に前記NAT装置を種別した種別情報であって、自身が直接接続する前記NAT装置である自身NAT装置の種別情報と、前記相手端末装置が直接接続する前記NAT装置である相手NAT装置の種別情報とのうち少なくとも一方を、前記外部ネットワークに接続された管理サーバとの通信によって前記管理サーバから取得し特定する第一特定手段と、
前記第一特定手段において特定された前記種別情報に基づいて、前記自身NAT装置及び前記相手NAT装置を介して前記相手端末装置とP2P(Peer to Peer)通信を開始させる場合に必要な開始手順を、記憶手段に記憶した手順リストから選択する選択手段と、
前記選択手段において選択された前記開始手順に基づいた通信を行うことによって、前記相手端末装置との間で前記P2P通信を開始させ、次いで、前記第一通信手段によって行われている前記トンネリング通信を終了させることによって、前記トンネリング通信を前記P2P通信に切り替える切替手段と、
前記切替手段によって前記トンネリング通信から前記P2P通信に切り替えられた後、前記相手端末装置との間で前記P2P通信を行う第二通信手段と
を備えたことを特徴とする端末装置。
【請求項2】
前記第一通信手段において前記トンネリング通信を開始する前に、前記自身NAT装置の種別情報と、前記相手NAT装置の種別情報とのうち少なくとも一方を、前記管理サーバとの通信によって前記管理サーバから取得し特定する第二特定手段と、
前記第二特定手段において特定された前記種別情報に基づいて、前記開始手順に基づいた通信を行わなければ前記相手端末装置との前記P2P通信を開始できないか否かを判定する判定手段と
を備え、
前記第一通信手段は、
前記判定手段において前記開始手順に基づいた通信を行わなければ前記相手端末装置との前記P2P通信を開始できないと判断された場合に、前記相手端末装置との間で前記トンネリング通信を行うことを特徴とする請求項1に記載の端末装置。
【請求項3】
前記トンネリング通信によって前記相手端末装置から受信したパケットである第一パケットに含まれるデータと、前記P2P通信時によって前記相手端末装置から受信したパケットである第二パケットに含まれるデータとの少なくともずれかを出力する出力手段と、
前記切替手段において前記トンネリング通信が前記P2P通信に切り替えられる前の状態で、前記第一パケットに含まれるデータを前記出力手段に出力し、前記トンネリング通信が前記P2P通信に切り替えられた後の状態で、前記第二パケットに含まれるデータを前記出力手段に出力する出力制御手段を備え、
前記出力制御手段は、
前記P2P通信の開始時点において、前記第一パケットよりも前記第二パケットの方が先行している場合には、受信した前記第二パケットに含まれるデータを、所定の第一周期で出力し、前記第二パケットよりも前記第一パケットの方が先行している場合には、受信した前記第一パケットに含まれるデータを、前記第一周期よりも長い第二周期で出力することを特徴とする請求項1又は2に記載の端末装置。
【請求項4】
外部ネットワークに接続するNAT装置の配下の内部ネットワークに接続され、前記NAT装置とは異なる他の前記NAT装置の配下にある他の端末装置と通信を行う端末装置であって、
前記NAT装置におけるポートマッピングの方法毎に前記NAT装置を種別した種別情報であって、自身が直接接続する前記NAT装置である自身NAT装置の種別情報と、通信相手の前記端末装置である相手端末装置が直接接続する前記NAT装置である相手NAT装置の種別情報とのうち少なくとも一方を、前記外部ネットワークに接続された管理サーバとの通信によって前記管理サーバから取得し特定する第三特定手段と、
前記第三特定手段において特定された前記種別情報に基づいて、前記自身NAT装置及び前記相手NAT装置を介して前記相手端末装置とP2P(Peer to Peer)通信を開始させる場合に必要な開始手順に基づいた通信を行わなければ、前記相手端末装置との前記P2P通信を開始できないか否かを判定する判定手段と、
前記判定手段において前記開始手順に基づいた通信を行わなくても前記相手端末装置との前記P2P通信を開始できると判断された場合に、前記相手端末装置との間でP2P通信を行う第三通信手段と
を備えたことを特徴とする端末装置。
【請求項5】
外部ネットワークに接続するNAT装置の配下の内部ネットワークに接続され、前記NAT装置とは異なる他の前記NAT装置の配下にある他の端末装置と通信を行うための通信方法であって、
前記外部ネットワークに接続するサーバであって、前記NAT装置が転送可能な通信プロトコルに基づいてパケットをカプセル化/非カプセル化することによって、前記端末装置間のトンネリング通信を実現するサーバを介し、異なる前記NAT装置の配下の前記内部ネットワークに接続された通信相手の前記端末装置である相手端末装置との間でトンネリング通信を行う第一通信ステップと、
前記第一通信ステップによって前記相手端末装置との間で前記トンネリング通信が行われている状態で、前記NAT装置におけるポートマッピングの方法毎に前記NAT装置を種別した種別情報であって、自身が直接接続する前記NAT装置である自身NAT装置の種別情報と、前記相手端末装置が直接接続する前記NAT装置である相手NAT装置の種別情報とのうち少なくとも一方を、前記外部ネットワークに接続された管理サーバとの通信によって前記管理サーバから取得し特定する第一特定ステップと、
前記第一特定ステップにおいて特定された前記種別情報に基づいて、前記NAT装置を介して他の通信端末とP2P(Peer to Peer)通信を開始させる場合に必要な開始手順を、記憶手段に記憶した手順リストから選択する選択ステップと、
前記選択ステップにおいて選択された前記開始手順に基づいた通信を行うことによって、前記相手通信端末との間で前記P2P通信を開始させ、次いで、前記第一通信ステップによって行われている前記トンネリング通信を終了させることによって、前記トンネリング通信を前記P2P通信に切り替える切替ステップと、
前記切替ステップによって前記トンネリング通信から前記P2P通信に切り替えられた後、前記相手端末装置との間で前記P2P通信を行う第二通信ステップと
を備えたことを特徴とする通信方法。
【請求項6】
前記第一通信ステップにおいて前記トンネリング通信を開始する前に、前記自身NAT装置の種別情報と、前記相手NAT装置の種別情報とのうち少なくとも一方を、前記管理サーバとの通信によって前記管理サーバから取得し特定する第二特定ステップと、
前記第二特定ステップにおいて特定された前記種別情報に基づいて、前記開始手順に基づいた通信を行わなければ前記相手端末装置との前記P2P通信を開始できないか否かを判定する判定ステップと
を備え、
前記第一通信ステップは、
前記判定ステップにおいて前記開始手順に基づいた通信を行わなければ前記相手端末装置との前記P2P通信を開始できないと判断された場合に、前記相手端末装置との間で前記トンネリング通信を行うことを特徴とする請求項5に記載の通信方法。
【請求項7】
請求項1から4のいずれかに記載の端末装置の各処理手段としてコンピュータを機能させるための通信プログラム。
【請求項1】
外部ネットワークに接続するNAT装置の配下の内部ネットワークに接続され、前記NAT装置とは異なる他の前記NAT装置の配下にある他の端末装置と通信を行う端末装置であって、
前記外部ネットワークに接続するサーバであって、前記NAT装置が転送可能な通信プロトコルに基づいてパケットをカプセル化/非カプセル化することによって、前記端末装置間のトンネリング通信を実現するサーバを介し、異なる前記NAT装置の配下の前記内部ネットワークに接続された通信相手の前記端末装置である相手端末装置との間でトンネリング通信を行う第一通信手段と、
前記第一通信手段によって前記相手端末装置との間で前記トンネリング通信が行われている状態で、前記NAT装置におけるポートマッピングの方法毎に前記NAT装置を種別した種別情報であって、自身が直接接続する前記NAT装置である自身NAT装置の種別情報と、前記相手端末装置が直接接続する前記NAT装置である相手NAT装置の種別情報とのうち少なくとも一方を、前記外部ネットワークに接続された管理サーバとの通信によって前記管理サーバから取得し特定する第一特定手段と、
前記第一特定手段において特定された前記種別情報に基づいて、前記自身NAT装置及び前記相手NAT装置を介して前記相手端末装置とP2P(Peer to Peer)通信を開始させる場合に必要な開始手順を、記憶手段に記憶した手順リストから選択する選択手段と、
前記選択手段において選択された前記開始手順に基づいた通信を行うことによって、前記相手端末装置との間で前記P2P通信を開始させ、次いで、前記第一通信手段によって行われている前記トンネリング通信を終了させることによって、前記トンネリング通信を前記P2P通信に切り替える切替手段と、
前記切替手段によって前記トンネリング通信から前記P2P通信に切り替えられた後、前記相手端末装置との間で前記P2P通信を行う第二通信手段と
を備えたことを特徴とする端末装置。
【請求項2】
前記第一通信手段において前記トンネリング通信を開始する前に、前記自身NAT装置の種別情報と、前記相手NAT装置の種別情報とのうち少なくとも一方を、前記管理サーバとの通信によって前記管理サーバから取得し特定する第二特定手段と、
前記第二特定手段において特定された前記種別情報に基づいて、前記開始手順に基づいた通信を行わなければ前記相手端末装置との前記P2P通信を開始できないか否かを判定する判定手段と
を備え、
前記第一通信手段は、
前記判定手段において前記開始手順に基づいた通信を行わなければ前記相手端末装置との前記P2P通信を開始できないと判断された場合に、前記相手端末装置との間で前記トンネリング通信を行うことを特徴とする請求項1に記載の端末装置。
【請求項3】
前記トンネリング通信によって前記相手端末装置から受信したパケットである第一パケットに含まれるデータと、前記P2P通信時によって前記相手端末装置から受信したパケットである第二パケットに含まれるデータとの少なくともずれかを出力する出力手段と、
前記切替手段において前記トンネリング通信が前記P2P通信に切り替えられる前の状態で、前記第一パケットに含まれるデータを前記出力手段に出力し、前記トンネリング通信が前記P2P通信に切り替えられた後の状態で、前記第二パケットに含まれるデータを前記出力手段に出力する出力制御手段を備え、
前記出力制御手段は、
前記P2P通信の開始時点において、前記第一パケットよりも前記第二パケットの方が先行している場合には、受信した前記第二パケットに含まれるデータを、所定の第一周期で出力し、前記第二パケットよりも前記第一パケットの方が先行している場合には、受信した前記第一パケットに含まれるデータを、前記第一周期よりも長い第二周期で出力することを特徴とする請求項1又は2に記載の端末装置。
【請求項4】
外部ネットワークに接続するNAT装置の配下の内部ネットワークに接続され、前記NAT装置とは異なる他の前記NAT装置の配下にある他の端末装置と通信を行う端末装置であって、
前記NAT装置におけるポートマッピングの方法毎に前記NAT装置を種別した種別情報であって、自身が直接接続する前記NAT装置である自身NAT装置の種別情報と、通信相手の前記端末装置である相手端末装置が直接接続する前記NAT装置である相手NAT装置の種別情報とのうち少なくとも一方を、前記外部ネットワークに接続された管理サーバとの通信によって前記管理サーバから取得し特定する第三特定手段と、
前記第三特定手段において特定された前記種別情報に基づいて、前記自身NAT装置及び前記相手NAT装置を介して前記相手端末装置とP2P(Peer to Peer)通信を開始させる場合に必要な開始手順に基づいた通信を行わなければ、前記相手端末装置との前記P2P通信を開始できないか否かを判定する判定手段と、
前記判定手段において前記開始手順に基づいた通信を行わなくても前記相手端末装置との前記P2P通信を開始できると判断された場合に、前記相手端末装置との間でP2P通信を行う第三通信手段と
を備えたことを特徴とする端末装置。
【請求項5】
外部ネットワークに接続するNAT装置の配下の内部ネットワークに接続され、前記NAT装置とは異なる他の前記NAT装置の配下にある他の端末装置と通信を行うための通信方法であって、
前記外部ネットワークに接続するサーバであって、前記NAT装置が転送可能な通信プロトコルに基づいてパケットをカプセル化/非カプセル化することによって、前記端末装置間のトンネリング通信を実現するサーバを介し、異なる前記NAT装置の配下の前記内部ネットワークに接続された通信相手の前記端末装置である相手端末装置との間でトンネリング通信を行う第一通信ステップと、
前記第一通信ステップによって前記相手端末装置との間で前記トンネリング通信が行われている状態で、前記NAT装置におけるポートマッピングの方法毎に前記NAT装置を種別した種別情報であって、自身が直接接続する前記NAT装置である自身NAT装置の種別情報と、前記相手端末装置が直接接続する前記NAT装置である相手NAT装置の種別情報とのうち少なくとも一方を、前記外部ネットワークに接続された管理サーバとの通信によって前記管理サーバから取得し特定する第一特定ステップと、
前記第一特定ステップにおいて特定された前記種別情報に基づいて、前記NAT装置を介して他の通信端末とP2P(Peer to Peer)通信を開始させる場合に必要な開始手順を、記憶手段に記憶した手順リストから選択する選択ステップと、
前記選択ステップにおいて選択された前記開始手順に基づいた通信を行うことによって、前記相手通信端末との間で前記P2P通信を開始させ、次いで、前記第一通信ステップによって行われている前記トンネリング通信を終了させることによって、前記トンネリング通信を前記P2P通信に切り替える切替ステップと、
前記切替ステップによって前記トンネリング通信から前記P2P通信に切り替えられた後、前記相手端末装置との間で前記P2P通信を行う第二通信ステップと
を備えたことを特徴とする通信方法。
【請求項6】
前記第一通信ステップにおいて前記トンネリング通信を開始する前に、前記自身NAT装置の種別情報と、前記相手NAT装置の種別情報とのうち少なくとも一方を、前記管理サーバとの通信によって前記管理サーバから取得し特定する第二特定ステップと、
前記第二特定ステップにおいて特定された前記種別情報に基づいて、前記開始手順に基づいた通信を行わなければ前記相手端末装置との前記P2P通信を開始できないか否かを判定する判定ステップと
を備え、
前記第一通信ステップは、
前記判定ステップにおいて前記開始手順に基づいた通信を行わなければ前記相手端末装置との前記P2P通信を開始できないと判断された場合に、前記相手端末装置との間で前記トンネリング通信を行うことを特徴とする請求項5に記載の通信方法。
【請求項7】
請求項1から4のいずれかに記載の端末装置の各処理手段としてコンピュータを機能させるための通信プログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【公開番号】特開2011−61594(P2011−61594A)
【公開日】平成23年3月24日(2011.3.24)
【国際特許分類】
【出願番号】特願2009−210379(P2009−210379)
【出願日】平成21年9月11日(2009.9.11)
【出願人】(000005267)ブラザー工業株式会社 (13,856)
【Fターム(参考)】
【公開日】平成23年3月24日(2011.3.24)
【国際特許分類】
【出願日】平成21年9月11日(2009.9.11)
【出願人】(000005267)ブラザー工業株式会社 (13,856)
【Fターム(参考)】
[ Back to top ]