JP2011239343A - クライアント装置、及びプログラム - Google Patents

クライアント装置、及びプログラム Download PDF

Info

Publication number
JP2011239343A
JP2011239343A JP2010111300A JP2010111300A JP2011239343A JP 2011239343 A JP2011239343 A JP 2011239343A JP 2010111300 A JP2010111300 A JP 2010111300A JP 2010111300 A JP2010111300 A JP 2010111300A JP 2011239343 A JP2011239343 A JP 2011239343A
Authority
JP
Japan
Prior art keywords
tunnel
packet
time
client
server
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2010111300A
Other languages
English (en)
Other versions
JP5535757B2 (ja
Inventor
Toshihiro Motoda
敏浩 元田
Kaoru Mihashi
薫 三橋
Nobuhiro Sakai
伸啓 酒井
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NTT Communications Corp
DIT Co Ltd
Original Assignee
NTT Communications Corp
DIT Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NTT Communications Corp, DIT Co Ltd filed Critical NTT Communications Corp
Priority to JP2010111300A priority Critical patent/JP5535757B2/ja
Publication of JP2011239343A publication Critical patent/JP2011239343A/ja
Application granted granted Critical
Publication of JP5535757B2 publication Critical patent/JP5535757B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

【課題】アプリケーションの改造をほとんどすることなく、クライアント装置にトンネリング機能を備える。
【解決手段】トンネルサーバ装置との間のトンネルを介して、通信相手装置とデータ通信を行うクライアント装置において、前記トンネルを構築し、当該トンネルを経由してパケットの送受信を行うトンネル機能手段と、通信ネットワークを介してデータ送受信を行うためのデータ通信手段と、前記データ通信手段を経由するパケットを監視し、当該パケットの通信情報に基づき、当該パケットが、前記クライアント装置が備えるアプリケーション部から出力されたパケットであると判定した場合に、当該パケットを前記トンネル機能手段に渡すパケット制御手段とを備え、前記トンネル機能手段は、前記パケット制御手段から受け取った前記パケットを、前記トンネルを経由して前記通信相手装置に向けて送信する。
【選択図】図4

Description

本発明は、通信ネットワークにおけるトンネリング技術に関するものである。
企業内ネットワークや家庭内ネットワーク等のプライベートネットワークと、インターネット等の外部ネットワークとの間には、通信のセキュリティを確保するためのファイアウォール装置(NAT装置等も含む)が設置されるのが一般的である。
このようなファイアウォール装置では、ネットワーク管理のポリシーに応じて、通信を許可するプロトコルが設定されるが、例えば、多くの場合、プライベートネットワーク内のクライアント装置からの要求に係るHTTP/HTTPS通信は許容されている。
そこで、プライベートネットワーク内のクライアント装置と、外部の装置との間で、IP電話や映像会議等の通信を行うために、HTTPのように通信が許容されているプロトコルのヘッダで、目的とする通信のパケットをカプセリングすることにより、仮想的な通信路であるトンネルを形成し、当該トンネルを通して、IP電話や映像会議等の目的とする通信を行うトンネリング技術が用いられている。
一般に、トンネリング技術では、トンネリング機能を備えたクライアント装置と、外部ネットワークに設置されたトンネルサーバ装置との間でトンネルを形成し、通信を行う。
ここで、クライアント装置(PC等)をトンネリング対応とするための従来技術の1つとして図1に示すようなライブラリ方式がある。この方式では、トンネリング処理を行うソフトウェアをライブラリとして備えるとともに、当該トンネリング用のライブラリに対応したアプリケーションを備える。
また、クライアント装置をトンネリング対応とするための他の従来技術として、図2に示すように、OS上に仮想的なネットワークインタフェースを設けて、そこにIPアドレスを付与することにより、当該仮想ネットワークインタフェースを経由して通信する部分をトンネリング経由にする方式もある。この方式では、あたかも仮想ネットワークインタフェースが、トンネリングサーバの存在する遠隔のネットワーク上に存在するかのように動作する。なお、本願に関連する先行技術文献の1つとして、特許文献1がある。
特開2008-187686号公報
しかしながら、上記の従来技術におけるライブラリ方式では、使用するアプリケーションの改造が必要となる。また、仮想的なネットワークインタフェースを設ける方式では、アドレスの消費やセキュリティの面で問題が生じる可能性があった。より詳細には下記のとおりである。
ライブラリ方式によりトンネリングを実現する場合、アプリケーションのソケットAPI部分についてアプリケーションの改造を要する。また、TCP等のソケットAPIを模擬しようとすると、プロトコル処理をライブラリ側で行う必要があり、アプリケーションが元々有しているプロトコル処理との互換性上の問題で、アプリケーションの動作に影響が出る可能性があった。また、アプリケーションをトンネリング対応に改造しようとする場合において、第三者が作成したライブラリ等のオブジェクトを利用する場合などソースコードがない場合には、そもそも改造が困難であった。
また、仮想ネットワークインタフェースを作成し、パケットをルーティングすることでトンネリングする方式では、基本的に全てのパケットが相互に外部と疎通してしまうため、セキュリティ上問題が生じる可能性があった。更に、仮想ネットワークインタフェースが出来てしまうことによる、複数インタフェース間のルーティング設定の煩雑化、あるいはそれに起因する通信障害等のトラブルの発生率が上昇する問題があった。また、一般に、対外的な通信を担うことから、仮想インタフェースに対してグローバルアドレスを割り当てることになるため、IPv4のようにアドレス空間が限られている環境で、貴重なグローバルアドレスを1台のクライアントで1つ占有してしまう問題もある。
ところで、トンネルを通じたデータ送信に当たって、制御パケットと、データパケットを区別する等のためのヘッダを付けたパケットをトンネル経由で送信し、受信側において、ヘッダからパケット種別を判別して受信処理を行う従来技術がある。そのような従来技術では、受信パケットが破損していた場合に、次のヘッダまで、パケットを読み飛ばし、次のパケットで受信処理行っている。
しかし、このような従来技術では、任意のデータの中において、上記次のヘッダを識別できるようにするために、ヘッダをある程度の大きさを持ったサイズとしなければならず、通信のオーバーヘッドが大きくなるという問題があった。
また、トンネリングを用いた通信を行う場合に、ファイアウォール装置の機能により、長時間無通信の場合に、強制的に切断させられてしまう場合や、切断状態にならないのに、信号が疎通しなくなっている、いわゆるトンネルが詰まった状態が生じる場合がある。このようなことを回避するために、クライアント装置と、トンネルサーバ装置との間で、生存確認要求/生存確認要求応答の送受信を一定時間間隔で行うことが一般に行われている。
しかし、このような疎通確認技術では、生存確認要求の送信間隔が短いと、本来の通信パケット以外の無駄なパケットが増加し、無通信クライアントを含む多数のクライアントのトラフィックが集中するトンネルサーバ装置やそのネットワークにおいて、処理負荷が増加し、性能低下を招く恐れがある。逆に、送信間隔を長くしてしまうと、詰まり状態を長時間検出できず、通信が長時間途切れたりする問題が生じる。つまり、処理負担軽減と異常状態検出時間の短縮という相反する条件を、生存確認要求の送信周期の調整でもって同時に満たすことは困難であった。
本発明は上記の問題点に鑑みてなされたものであり、アプリケーションの改造をほとんどすることなく、クライアント装置にトンネリング機能を備えることを可能とした技術を提供することを目的とする。
また、本発明は、パケットに付するヘッダを短くし、効率的な通信を実現する技術を提供することも目的としている。更に、本発明は、処理負担軽減と異常状態検出時間の短縮という相反する条件を満たすことを可能とした、生存確認の技術を提供することも目的としている。
上記の課題を解決するために、本発明は、トンネルサーバ装置との間に構築されたトンネルを介して、通信相手装置とデータ通信を行うクライアント装置であって、前記トンネルサーバ装置との間で前記トンネルを構築し、当該トンネルを介してパケットの送受信を行うトンネル機能手段と、通信ネットワークを介してデータ送受信を行うためのデータ通信手段と、前記データ通信手段を経由するパケットを監視し、当該パケットの通信情報に基づき、当該パケットが、前記クライアント装置が備えるアプリケーション部から出力されたパケットであると判定した場合に、当該パケットを前記トンネル機能手段に渡すパケット制御手段とを備え、前記トンネル機能手段は、前記パケット制御手段から受け取った前記パケットを、前記トンネルを経由して前記通信相手装置に向けて送信することを特徴とするクライアント装置として構成される。
また、前記クライアント装置において、前記パケット制御手段は、前記トンネル機能手段から、前記トンネルを経由して受信したパケットを受け取り、当該パケットを前記データ通信手段を介して前記アプリケーション部に送出する。
前記トンネル機能手段が前記トンネルを経由して受信するパケットには、ヘッダが付されており、前記トンネル機能手段は、前記ヘッダの情報に基づき、前記パケットが破損しているか否かを判定し、当該パケットが破損していると判定した場合に、前記トンネルを切断し、その後に、前記トンネルサーバ装置との間にトンネルを再構築する破損処理手段を備えることとしてもよい。
また、前記トンネル機能手段は、前記トンネルサーバ装置から、当該トンネルサーバ装置のアドレスとポート番号であるサーバアドレスとサーバポート番号を受け取り、当該サーバアドレスとサーバポート番号とを、前記アプリケーション部に対応するクライアントポート番号に対応付けて記憶手段に格納し、前記パケット制御手段から、前記クライアントポート番号を発ポート番号として含むパケットを受け取った場合に、前記記憶手段を参照することにより、前記パケットにおける発アドレスを前記サーバアドレスに変換し、前記パケットにおける発ポート番号を前記サーバポート番号に変換し、当該変換を施したパケットを前記トンネルを経由して送出するように構成してもよい。
また、前記トンネル機能手段は、前記トンネルを経由して、前記サーバアドレスを宛先アドレスとして含み、前記サーバポート番号を宛先ポート番号として含むパケットを受信した場合に、前記記憶手段を参照することにより、前記パケットにおける宛先アドレスを前記クライアント装置のアドレスに変換し、前記パケットにおける宛先ポート番号を前記クライアントポート番号に変換し、当該変換を施したパケットを、前記パケット制御手段を介して前記アプリケーション部に送出するように構成してもよい。
また、前記トンネルサーバ装置は、前記クライアント装置からパケットを受信する度に、当該パケットの受信時刻を最終受信時刻として記憶手段に保持し、データパケットを送信する場合には、当該データパケットの送信時刻の前記最終受信時刻からの経過時間を算出し、当該経過時間をサーバ側経過時間として前記データパケットに含めて送信してもよく、この場合、前記トンネル機能手段は、パケットを前記トンネルサーバ装置に送信する度に、当該パケットの送信時刻を最終送信時刻として記憶手段に保持し、前記トンネルサーバ装置から、前記データパケットを受信した場合に、当該データパケットの受信時刻の前記最終送信時刻からの経過時間をクライアント側経過時間として算出し、前記データパケットから取得したサーバ側経過時間と、前記クライアント側経過時間とに基づき、前記トンネルサーバ装置に対して生存確認要求を送信するか否かを決定するように構成してもよい。
また、上記構成において、前記トンネル機能手段は、前記クライアント側経過時間が、所定の時間以上である場合には、前記サーバ側経過時間が前記クライアント側経過時間より大きい場合に、生存確認要求を送信し、前記クライアント側経過時間が、前記所定の時間未満である場合には、前記サーバ側経過時間が、パケットの送信時刻から算出される平均送信間隔の所定数倍以上である場合に、生存確認要求を送信することとしてよい。
前記所定の時間は、例えば、前記クライアント装置と前記トンネルサーバ装置間におけるラウンドトリップ時間の2倍の時間であり、前記所定数は、例えば、4である。
また、前記トンネル機能手段は、前記トンネルサーバ装置からデータパケットを受信した後、その後にパケットを受信することなく、所定のタイマー時間が経過した場合に、生存確認要求を送信するように構成してもよい。
本発明によれば、アプリケーションの改造をほとんどすることなく、クライアント装置にトンネリング機能を備えることが可能になる。また、本発明によれば、パケットの読み飛ばし処理が不要になるため、パケットに付するヘッダを短くすることができ、効率的な通信を実現することが可能となる。更に、本発明によれば、処理負担軽減と異常状態検出時間の短縮という相反する条件を満たすことを可能とした、生存確認の技術を提供することが可能となる。
従来のトンネリング方式を示す図である。 従来のトンネリング方式を示す図である。 本発明の実施の形態におけるシステム構成図である。 第1の実施の形態におけるクライアント装置1の機能構成図である。 第1の実施の形態におけるクライアント装置1の機能をプロトコルスタックで表現した図である。 第1の実施の形態におけるトンネルサーバ装置1の機能構成図である。 第1の実施の形態におけるシーケンスチャートである。 第1の実施の形態におけるクライアント装置1のパケット送信時のフローチャートである。 第1の実施の形態におけるクライアント装置1のパケット受信時のフローチャートである。 第1の実施の形態におけるトンネルサーバ装置2のパケット受信時のフローチャートである。 破損データ受信時の処理の概念を示す図である。 第2の実施の形態におけるクライアント装置1のトンネル機能部12の機能構成図である。 第2の実施の形態におけるトンネルサーバ装置2の機能構成図である。 第2の実施の形態におけるクライアント装置1のテーブル情報格納部124に格納されるテーブル例を示す図である。 第2の実施の形態におけるトンネルサーバ装置2のテーブル情報格納部23に格納されるテーブル例を示す図である。 第2の実施の形態におけるトンネリング通信例を説明するための図である。 第2の実施の形態におけるシーケンスチャートである。 第2の実施の形態におけるクライアント装置1のトンネル接続処理のフローチャートである。 第2の実施の形態におけるトンネルサーバ装置2のトンネル接続時処理のフローチャートである。 第2の実施の形態におけるクライアント装置1のポートマップ要求処理のフローチャートである。 第2の実施の形態におけるトンネルサーバ装置2のポートマップ要求時処理のフローチャートである。 第2の実施の形態におけるクライアント装置1のポートマップ解除要求処理のフローチャートである。 第2の実施の形態におけるトンネルサーバ装置2のポートマップ解除要求時処理のフローチャートである。 第2の実施の形態におけるクライアント装置1のパケット送信処理のフローチャートである。 第2の実施の形態におけるクライアント装置1のパケット受信処理のフローチャートである。 第2の実施の形態におけるトンネルサーバ装置2のパケット送信処理のフローチャートである。 第2の実施の形態におけるトンネルサーバ装置2のパケット受信処理のフローチャートである。 第2の実施の形態におけるクライアント装置1のトンネル切断処理のフローチャートである。 第2の実施の形態におけるクライアント装置1のトンネル再接続処理のフローチャートである。 第3の実施の形態におけるクライアント装置1のトンネル機能部12の機能構成図である。 第3の実施の形態におけるトンネルサーバ装置2の機能構成図である。 第3の実施の形態における処理の概要を説明するための図である。 第3の実施の形態におけるクライアント装置1の制御パケット受信時の処理を示すフローチャートである。 第3の実施の形態におけるクライアント装置1のパケット送信時処理のフローチャートである。 IPパケットの例を示す図である。 第3の実施の形態におけるクライアント装置1のデータパケット受信時処理のフローチャートである。 第3の実施の形態における生存確認動作シーケンス例である。 第3の実施の形態における生存確認動作シーケンス例である。
以下、図面を参照して本発明の実施の形態を説明する。
<第1の実施の形態>
(システム構成)
図3に、第1の実施の形態におけるシステムの全体構成を示す。図3に示すように、本実施の形態のシステムは、インターネット5と、企業内ネットワーク等のプライベートネットワーク6との境界に設置されるファイアフォール装置4、ファイアウォール装置4配下にあるクライアント装置1、トンネルサーバ装置2、及び、クライアント装置1と通信を行う通信相手装置3とを含む。本実施の形態では、トンネルサーバ装置2と、通信相手装置3は、インターネット5に接続されている。
クライアント装置1は、一般的なOS(オペレーティングシステム)と、IP電話や映像会議等の目的の通信を行うアプリケーションと、本発明に係るトンネル処理機能を備えるコンピュータ(PC、携帯端末等)である。
トンネルサーバ装置2は、クライアント装置1からの要求を受けてクライアント装置1との間にトンネルを形成し、クライアント装置1とトンネルを介した通信を行う機能を備えた装置である。ファイアウォール装置4は、当該トンネルの通信を許容するファイアウォール装置4である。なお、本実施の形態では、ファイアウォール装置4での通信が許容されているトンネルであれば、トンネルのプロトコルの種類はどのようなものでもよい。
本実施の形態における通信相手装置3は、例えばSIPサーバや、その他のアプリケーションサーバであり、クライアント装置1と通信を行う。もちろん、通信相手装置3は、同一または他のプライベートネットワーク内に備えられた他のクライアント装置であってもよい。
図4に、クライアント装置1の機能構成図を示す。図4に示すように、クライアント装置1は、データ通信部11、トンネル機能部12、アプリケーション部13を備える。データ通信部11は、パケット捕捉・放流部14(パケット制御手段と称してもよい)を備える。
データ通信部11は、通信ネットワークを介してデータ通信を行うための機能部であり、アプリケーション部13から出力されるデータをIPパケットにしたり、その逆の処理を行う機能、IPパケットを入出力するネットワークインターフェースの機能等を含むものである。データ通信部11が備えるパケット捕捉・放流部14の機能については後述する。
アプリケーション部13は、目的の通信サービス(例えば映像会議通信)を提供するためのアプリケーションに対応する機能部であり、例えば、SIP等の制御通信を行う機能、音声/映像等のメディア通信を行う機能等を含む。
トンネル機能部12は、トンネルサーバに対応するトンネリングクライアントアプリケーションに相当し、トンネル処理部121と、破損データ処理部122を有している。トンネル処理部121は、パケット捕捉・放流部14から受け取ったパケット(IPパケット)を、トンネル経由で送出する機能、及び、トンネル経由でパケットを受信したりする機能部である。より具体的には、トンネル処理部121は、受け取ったパケットを、例えばHTTPヘッダ等を用いてカプセリングし、カプセリングした後のパケットをデータ通信部11を介して送出する機能や、トンネルヘッダでカプセリングされているパケットを受け取った場合に、トンネルヘッダのカプセリングをはずして中身のパケットを取り出し、当該パケットを、出力する機能等を有する。なお、本明細書において、「トンネル経由で送信する」等の表現や、「トンネル経由で受信する」等との表現は、実際には、上記のようにカプセリング/デカプセリングを行うことを意味している。
更に、本実施の形態においては、トンネル処理部121は、トンネルに送出するパケットの種別(制御パケット、データパケットの種別等)を示す識別子と、パケットの長さとからなるヘッダを付加したパケットを生成し、当該ヘッダ付きパケットをトンネルに送出する機能を有している。
破損データ処理部122は、トンネルから受信したパケットが破損しているか否かを調べ、破損していた場合に、トンネル接続を一旦切断するとともに、トンネルを再接続する等の破損データ処理機能を有している。
パケット捕捉・放流部14は、データ通信部11を流れるパケットを監視し、例えばトンネル機能部12から指定される特定のIPアドレス及びポート番号、もしくは特定のポート番号(これらを通信情報と呼ぶことにする)を有するパケットを検知した場合には、当該パケットを取得(捕捉)し、トンネル機能部12に渡す等の機能を有する。
本実施の形態では、アプリケーション部13から送出されるパケットは、パケット捕捉・放流部14で捕捉され、トンネル機能部12に渡される。また、パケット捕捉・放流部14は、トンネル機能部12によりデカプセリングされたパケットを受け取り、それをアプリケーション部13に向けて送出(放流)する。
なお、指定された特定の通信情報を有するパケット以外のパケットについては、データ通信部11の機能により、パケットの種類・宛先等に応じて、アプリケーション部13に渡されたり、外部に送出される。
図5は、図4に示す構成をソフトウェア(プログラムモジュール)のスタックイメージで表記した図である。図5において、図4との対応を分かりやすくするために、図4において対応する機能部に付された参照符号を付している。図5の記載位置からわかるように、パケット捕捉・放流部14は、デバイスドライバにより実現することができる。なお、トンネルクライアントプログラムと、当該デバイスドライバは、コンピュータをトンネル機能部12及びパケット捕捉・放流部14として機能させるプログラムである。
図6に、トンネルサーバ装置2の機能構成図を示す。図6に示すように、本実施の形態におけるトンネルサーバ装置2は、トンネル処理部21と破損データ処理部22を有する。トンネル処理部21は、クライアント装置1におけるトンネル処理部121に対応するトンネルサーバ処理を行う機能部である。また、破損データ処理部22は、クライアント装置1における破損データ処理部122と同様にして、受信パケットの破損データ検知を行って、トンネル切断処理等を行う機能部である。
本実施の形態に係るクライアント装置1及びトンネルサーバ装置2のそれぞれは、CPU、記憶装置等を有するコンピュータに上記の各機能を実現するためのプログラムを実行させることにより実現できる。当該プログラムは可搬メモリ等の記録媒体からコンピュータにインストールすることとしてもよいし、ネットワーク上のサーバからダウンロードすることとしてもよい。
クライアント装置1を、上記のような構成としたことにより、トンネリングに係る処理は、アプリケーション部13に対して隠蔽される。つまり、アプリケーション部13は、トンネリングを意識することなく、トンネリング機能部がない場合と同様の通常の通信処理を行いながら、トンネリングを実現できる。
(システムの動作について)
次に、本実施の形態に係るシステムの動作概要について、図7のシーケンスチャートを参照して説明する。
まず、クライアント装置1におけるトンネル機能部12が、トンネルサーバ装置2にトンネル接続要求を送信することにより、トンネルの設定(トンネル接続)を行う(ステップ1)。すなわち、トンネルサーバ装置2と、クライアント装置1のトンネル機能部12とにおいて、トンネル通信を行うために必要な設定がなされる。なお、トンネル機能部12は、例えば、アプリケーション部13からの要求に基づき、トンネル接続を行ってよい。
その後、アプリケーション部13からパケットが送出される。より詳細には、アプリケーション部13から出力されるデータが、データ通信部11によりIPパケット化されるが、ここでは便宜上、アプリケーション部13からパケットが送出されると表現することにする(ステップ2)。
パケットは、パケット捕捉・放流部14を経由して、トンネル機能部12に届けられ、トンネル機能部12において、パケットの種別を示す識別子と、パケットの長さ情報とをヘッダとして付加し、ヘッダ付きパケットをトンネル経由で送出する(ステップ3)。
送出されたヘッダ付きパケットは、トンネルを経由してトンネルサーバ装置2が受信する。トンネルサーバ装置2では、パケットの破損チェックが行われる。破損がなければ、ヘッダを取り外したパケットが、通信相手装置3に送信される。
また、通信相手装置3から送出されたパケットを受信したトンネルサーバ装置2は(ステップ5)、パケットにヘッダ(識別子と長さ)を付加し、ヘッダ付きパケットをトンネル経由で送出する(ステップ6)。
クライアント装置1におけるトンネル機能部12は、トンネル経由でヘッダ付きパケットを受信し、破損チェックを行う。破損がなければ、ヘッダを取り外したパケットが、パケット捕捉・放流部14を介してアプリケーション部13に渡される(ステップ7)。
トンネルサーバ装置2もしくはクライアント装置1において、パケットの破損を検出した場合には、トンネルが切断され(ステップ8)、すぐにトンネルの再接続が行われ(ステップ9)、以降、ステップ2〜ステップ7と同様にしてパケット通信が行われる。
次に、各フローチャートを参照して、主要な処理について詳細に説明する。
まず、アプリケーション部13からデータが送出される場合におけるクライアント装置1の動作を図8のフローチャートを参照して説明する。
アプリケーション部13から送出されたデータは、データ通信部11において通信情報が付加されたパケットにされる。そして、パケット捕捉部・放流部14は、パケットにおける通信情報が、指定された通信情報と一致するか否かを調べる(ステップ11)。一例として、より具体的には、、指定された通信情報は、OSが管理するソケット管理テーブルのようにメモリ等に格納されているものであり、パケット捕捉部・放流部14は、発アドレスがクライアント装置1のアドレスであり、プロトコル種別および発ポート番号がアプリケーション部13が所有するソケットに対応するものであるか否かの一致確認を行う。
監視しているパケットの通信情報が、指定された通信情報と一致する場合、パケット捕捉部・放流部14は、当該パケットを捕捉し、捕捉したパケットをトンネル機能部12に渡す。トンネル機能部12は、パケット捕捉・放流部14から受け取ったパケットに、識別子(IDとする)と長さ情報からなるヘッダを付加したヘッダ付きパケットを生成し、当該ヘッダ付きパケットをトンネル経由で送出する(ステップ12)。
ステップ11において、パケットにおける通信情報が、指定された通信情報と一致しない場合、パケットは、適切な宛先に転送されることになる。
次に、クライアント装置1におけるトンネル機能部12が、トンネル経由でヘッダ付きパケットを受信した場合の動作を、図9のフローチャートを参照して説明する。
トンネル機能部12は、例えば、ヘッダの識別子が予め定めた値と一致するかどうか、長さ情報が、実際のパケットの長さと一致するかどうか、等のチェックを行うことにより、パケットが破損しているか否かの判定を行う(ステップ21)。パケットが破損していないと判定した場合、パケット機能部12は、ヘッダを取り外したパケットを、パケット捕捉・放流部14を介してアプリケーション部13側に送出(放流)する(ステップ22)。
ステップ21において、パケットが破損していると判定された場合には、パケット機能部12は、トンネル接続を一旦切断し(ステップ23)、再び、トンネルサーバへ接続要求を送信することにより、トンネル接続を再開する(ステップ24)。
次に、トンネルサーバ装置2が、トンネル経由でヘッダ付きパケットを受信した場合の動作を、図10のフローチャートを参照して説明する。
トンネルサーバ装置2は、クライアント装置1のトンネル機能部12と同様に、パケットが破損しているか否か判定する(ステップ31)。パケットが破損していなければ、ヘッダを取り外したパケットをネットワークに送出する(ステップ32)。ステップ31において、パケットの破損が検出された場合には、トンネル接続を切断する。なお、このとき、クライアント装置1のトンネル機能部12は、トンネルが切断されたことを検知し、再接続処理を行うことになる。
図11に、トンネルサーバ装置2もしくはクライアント装置1における破損パケット受信時の処理の概念図を示す。図11に示すように、トンネル経由で送信されるパケットに破損が検出されなければ、ヘッダを取り外したパケットが送出されるが、破損が検出された場合には、切断後、再接続されたトンネルにてヘッダ付きパケットが送信される。
このような処理を行うのは、パケットが破損している可能性が非常に低いことに基づく。そして、上記のように、パケット破損時に、切断/再接続を行うこととしたため、従来のように、パケットを読み飛ばして次のヘッダを検知する処理が不要になるので、ヘッダ(識別子等)の長さを従来に比べて非常に短くすることができる。その結果、通信のオーバーヘッドを、従来に比べて低減できる。
<第2の実施の形態>
次に、本発明の第2の実施の形態について説明する。第2の実施の形態では、ポートマッピングが行われる。
(システム構成)
本実施の形態における全体のシステム構成については、図3に示した第1の実施の形態でのシステム構成と同じである。以下では、主に、第1の実施の形態と異なる点を中心に説明する。
図12に、本実施の形態におけるクライアント装置1のトンネル機能部12の機能構成図を示す。図12に示すように、本実施の形態に係るトンネル機能部12は、破損データ処理部122、トンネル処理部121に加えて、アドレス・ポートの取得処理、管理、変換処理を行うアドレス・ポート処理部123、及び、テーブル情報格納部124を備える。
図13に、本実施の形態におけるトンネルサーバ装置2の機能構成図を示す。図13に示すように、本実施の形態におけるトンネルサーバ装置2は、破損データ処理部22、トンネル処理部21に加えて、アドレス/ポート情報の管理や払い出し等に係る処理を行うアドレス・ポート処理部24、及びテーブル情報格納部23を有する。
図14に、クライアント装置1のテーブル情報格納部124に格納されるテーブルの例を示す。図14に示すとおり、クライアント装置1のテーブル情報格納部124には、クライアント装置1のトンネル接続、セッションID、及びサーバアドレスを対応付けて記録するクライアント接続管理テーブルと、セッションID、マップしたポートのプロトコル種別、サーバポート番号、及びクライアントポート番号を対応付けて記録するクライアントポートマップテーブルと、クライアントアドレスを記録するクライアントアドレステーブルとを格納する。もちろん、クライアント装置1のテーブル情報格納部124等の記憶手段には、クライアント装置1のアドレスが格納されている。
図15に、トンネルサーバ装置2のテーブル情報格納部23に格納されるテーブルの例を示す。図15に示すとおり、トンネルサーバ装置2のテーブル情報格納部23には、サーバ接続管理テーブルと、サーバポートマップテーブルと、サーバ空きポートリストが格納される。
サーバ接続管理テーブルは、トンネル接続の識別子と、セッションIDとを対応付けて記録する。サーバポートマップテーブルは、セッションID、マップしたポートのプロトコル種別、及びポート番号を記録する。サーバ空きポートリストは、プロトコル種別毎に、トンネルサーバ装置2における空きポート番号を記録する。
(システムの動作)
まず、図16を参照して、本実施の形態におけるトンネリング通信例について説明する。本例では、各装置に、図16に示すとおりのアドレスが割り当てられているものとする。また、図16には、トンネルを介して送受信されるパケットのヘッダ(通信情報)の中の情報も示されている。図16の例において、クライアント装置1のトンネル機能部12におけるテーブル情報格納部124には、トンネルサーバ装置1のアドレス(12.23.45.78)及びポート番号(1235)が、アプリケーション部13が使用するポート番号であるクライアントポート番号(5534)及びクライアント装置1のアドレス(10.10.9.8)と対応付けて格納されている。
まず、アプリケーション部13から、上りパケットが送信されると、パケット捕捉・放流部14により、発アドレス(SRC_ADDR:10.10.9.8)がクライアント装置1のアドレス(10.10.9.8)と一致し、プロトコル種別(PROTOCOL:UDP)および発ポート番号(SRC_PORT:5534)がクライアントポートマップテーブルに存在することが確認され、当該上りパケットは、トンネル機能部12に渡される。トンネル機能部12では、上りパケットの発ポート番号(SRC_PORT:5534)に基づき、テーブル情報格納部124を検索し、当該発ポート番号に対応する発アドレス(SRC_ADDR:12.23.45.78)と、発ポート番号(SRC_PORT:1235)とを取得し、上りパケットにおける発アドレスと発ポート番号とを、上記取得した発アドレス(SRC_ADDR:12.23.45.78)と発ポート番号(SRC_PORT:1235)に変換する。そして、トンネル機能部12は、変換を行った上りパケットをトンネル経由で送出する。
上りパケットをトンネル経由で受信したトンネルサーバ装置2は、上りパケットを通信相手装置3に送出する。
上りパケットには、発アドレス及び発ポート番号として、トンネルサーバ装置2のアドレス及びポート番号が設定してあるので、上りパケットを受信した通信相手装置3は、当該パケットは、トンネルサーバ装置2から送出されたものであると認識する。
その後、通信相手装置3は、宛先アドレス及び宛先ポート番号を、トンネルサーバ装置2のものに設定した下りパケットを送信する。下りパケットを受信したトンネルサーバ装置2は、当該下りパケットをトンネルを経由してクライアント装置1に送出する。
トンネルから下りパケットを受け取ったクライアント装置1のトンネル機能部12は、テーブル情報格納部124を参照することにより、下りパケットにおける宛先アドレスと宛先ポート番号とを、クライアント装置1のアドレス(10.10.9.8)とポート番号(5534)に変換し、変換を行ったパケットを、パケット捕捉・放流部14を介してアプリケーション部13に送出する。
次に、図17を参照して本実施の形態における処理のシーケンスを示す。このシーケンスに沿ってまずは処理の概要を説明する。
まず、アプリケーション部13が、トンネル機能部12に対して初期化要求を行うと(ステップ41)、トンネル機能部12は、初期化処理を行うとともに、トンネル接続要求をトンネルサーバ装置2に対して送信することにより、トンネルを設定する(ステップ42)。ここでの初期化処理では、例えば、クライアントポートマップテーブル、及びクライアント接続管理テーブルのエントリを全てクリアする処理が行われる。
トンネル接続要求を受信したトンネルサーバ装置2は、トンネルを接続する。また、ここでトンネルサーバ装置2は、図15に示すサーバ接続管理テーブルに、接続識別子とセッションIDを記録する。。
そして、トンネルサーバ装置2は、トンネルサーバ装置2のアドレスと、セッションIDとを含むトンネル接続応答を、クライアント装置1のトンネル機能部12に返し、トンネル機能部12は、アプリケーション部13に対して初期化結果応答を返す。
上記の処理より、トンネルが設定され、以降のトンネルサーバ装置2とクライアント装置1間の通信は、トンネルを介して行われる。
その後、アプリケーション部13は、ポートマップ要求をトンネル機能部12に対して送信し(ステップ45)、トンネル機能部12は、ポートマップ要求をトンネルサーバ装置2に送信する(ステップ46)。このポートマップ要求には、アプリケーション部13が用いるプロトコル種別が含まれる。なお、ポートマップ解除要求も行うことが可能であるため、図17においては、両方を含む意味で、ポート要求と記述している。
トンネルサーバ装置2は、空きのポート番号から1つのポート番号を払い出して、ポート要求結果に含めて、クライアント装置1のトンネル機能部12に送信する(ステップ47)。ポート番号を受信したトンネル機能部12は、ポート番号をテーブル情報格納部124に格納するとともに、アプリケーション部13に、ポート要求の結果応答を返す(ステップ48)。
その後、図16で説明したようなパケット通信が行われる(ステップ49〜ステップ54)。また、第2の実施の形態でも、第1の実施の形態と同様に、トンネルを経由して送受信されるパケットには、ヘッダ(識別子+長さ)が付され、第1の実施の形態と同様にして、破損チェックが行われる。
破損が検出された場合等には、トンネルが切断され(ステップ55)、トンネル再接続が行われる(ステップ56)。このときのトンネル接続要求には、セッションIDが付加され、トンネルサーバ装置2からの応答には、セッションIDが含められる(ステップ57)。これにより、トンネル切断後も、トンネル切断前と同じセッションIDのセッションを継続できる。
次に、各フローチャートを参照して、シーケンスに示した処理における主要な処理をより詳細に説明する。
図18に、クライアント装置1におけるトンネル接続処理を示す。図18に示すように、クライアント装置1のトンネル機能部12は、トンネルサーバ装置1に接続を行った後(ステップ71)、サーバアドレスとセッションIDをトンネルサーバ装置1から受信する(ステップ72)。そして、トンネル機能部12は、クライアント接続管理テーブル及びクライアントポートマップテーブルにエントリを追加する(ステップ73)。
図19に、トンネルサーバ装置2におけるトンネル接続時の処理を示す。図19に示すように、トンネル接続要求を受信したトンネルサーバ装置2は、まず、トンネル接続要求にセッションIDが付加されているか否かをチェックする(ステップ81)。
セッションIDがなければ、トンネルサーバ装置2は、擬似乱数からセッションIDを生成し(ステップ82)、正常完了応答、サーバアドレス、及びセッションIDをトンネル経由でクライアント装置1に返す(ステップ86)。
ステップ81において、セッションIDがトンネル接続要求に含まれていた場合、トンネルサーバ装置2は、サーバ接続管理テーブルにおいて当該セッションIDが存在するかどうかをチェックし、存在しなければエラーを返す(ステップ84)。存在する場合、サーバ接続管理テーブルのセッションIDに該当するエントリの接続識別子を更新し、ステップ86に進む。
図20に、クライアント装置1側でのポートマップ要求処理を示し、図21に、トンネルサーバ装置2でのポートマップ要求時の処理を示す。
図20に示すように、クライアント装置1側でのポートマップ要求処理においては、まず、トンネル機能部12が、アプリケーション部13からの要求に基づき、ポートマップ要求と、要求するプロトコル種別をトンネル経由でトンネルサーバ装置2に送信する(ステップ91)。
正常終了応答が返ってきた場合に、トンネル機能部12は、クライアント接続管理テーブルからセッションIDを取得し(ステップ94)、クライアントポートマップテーブルに、セッションID、プロトコル種別、サーバポート番号、クライアントポート番号を追加する(ステップ95)。
続いて、図21を参照して、トンネルサーバ装置2側でのポートマップ要求に係る処理を説明する。
ポートマップ要求を受信したトンネルサーバ装置2は、サーバ空きポートリストから、要求に対応するプロトコル種別のエントリ(プロトコル種別、ポート番号)を取得するとともに、当該エントリをリストから削除する(ステップ101、103)。そして、サーバポートマップテーブルにエントリ(プロトコル種別、ポート番号、セッションID)を追加するとともに(ステップ104)、正常完了応答と、払い出したポート番号をトンネル経由でクライアント装置1に送信する(ステップ105)。なお、要求に対応するプロトコル種別のエントリがない場合にはエラーが返される(ステップ102)。
本実施の形態では、ポートマップによる通信が終了した場合等において、ポートマップ解除処理を行う。図22に、クライアント装置1側のポートマップ解除処理を示し、図23に、トンネルサーバ装置2側のポートマップ解除処理を示す。
まず、図22を参照して、クライアント装置1側のポートマップ解除処理を説明する。アプリケーション部13から、ポートマップ解除要求を受信したトンネル機能部12は、アプリケーション部13に対応する解除対象ポート番号が、クライアントポートマップテーブルに存在するかどうかをチェックし、存在しなければエラーを返す(ステップ111、112)。
解除対象ポート番号が存在する場合、トンネル機能部12は、ポートマップ解除要求、解除するプロトコル種別、及び解除するポート番号(サーバポート番号)をトンネルサーバ装置2にトンネルを経由して送信する(ステップ113)。
その後、正常終了応答が返却されれば、トンネル機能部12は、クライアント接続管理テーブルからセッションIDを取得し(ステップ115)、クライアントポートマップテーブルから、セッションIDに対応するエントリを削除する(ステップ116)。
次に、図23を参照して、トンネルサーバ装置2側でのポートマップ解除要求に係る処理を説明する。
ポートマップ解除要求を受信したトンネルサーバ装置2は、要求に係るプロトコル種別とポート番号との組み合わせがサーバポートマップテーブルに存在するか否かをチェックし、存在しなければエラーを返し(ステップ121、122)、存在すればステップ123に進む。ステップ123において、トンネルサーバ装置2は、サーバポートマップテーブルから解除対象エントリを削除し(ステップ123)、空きポートリストにエントリを追加し(ステップ124)、正常完了をトンネルを経由してクライアント装置1に送信する(ステップ125)。
図24に、クライアント装置1におけるパケット送信の際の処理を示し、図25にクライアント装置におけるパケット受信の際の処理を示す。
まず、図24を参照して、パケット送信の際の処理を説明する。パケット捕捉・放流部14は、データ通信部11を流れる個々のパケットを監視し、パケットにおける通信情報が、指定された通信情報と一致するか否かを調べる(ステップ131)。本実施形態では、発アドレスがクライアント装置1のアドレスであり、プロトコル種別および発ポート番号がクライアントポートマップテーブルに存在するプロトコル種別およびクライアントポート番号である場合に、パケットをトンネル機能部13に渡す(トンネル送信する)ことが指定されており、パケット捕捉・放流部14は、パケットの通信情報が上記条件に合致すること判定した場合に、パケットをトンネル機能部12に渡す。
トンネル機能部12は、図16を参照して説明したとおりに、パケットの発アドレスをサーバアドレスに書き換え、発ポート番号をサーバポート番号に書き換える(ステップ132)。そして、トンネル機能部12は、識別子と長さ情報からなるヘッダを付加したヘッダ付きパケットを生成し、当該ヘッダ付きパケットをトンネル経由で送出する(ステップ133)。
次に、クライアント装置1におけるトンネル機能部12が、トンネル経由でヘッダ付きパケットを受信した場合の動作を図25のフローチャートを参照して説明する。
まず、パケットを受信したトンネル機能部12は、それが切断通知か否か判定する(ステップ141)。切断通知である場合には、トンネル切断処理を行う(ステップ142)。
切断通知でない場合、第1の実施の形態と同様にして、トンネル機能部12は、パケットが破損しているか否かの判定を行う(ステップ143)。パケットが破損していないと判定した場合、パケット機能部12は、パケットからヘッダを取り外し(ステップ144)、宛先アドレスをローカルアドレスに、宛先ポート番号をローカルポート番号に書き換え、書き換えたパケットをパケット捕捉・放流部14を介してアプリケーション部13側に送出する(ステップ145)。
ステップ143において、パケットが破損していると判定された場合には、パケット機能部12は、トンネル再接続処理を行う(ステップ146)。
図26に、トンネルサーバ装置2において、通信相手装置3から受信したパケットをトンネルに送信する際の処理を示し、図27にトンネルサーバ装置2においてトンネルからパケットを受信する際の処理を示す。
トンネルサーバ装置2は、通信相手装置3から受信したパケットの宛先ポート番号を参照し、まず、サーバポートマップテーブルから、当該ポート番号(サーバポート番号)に対応するセッションIDを探し(ステップ151)、無ければパケットを廃棄し(ステップ152)、あればセッションIDを取得する(ステップ153)。そして、セッションIDに対応する接続識別子を取得し、パケットにヘッダ(識別子+長さ)を付し、ヘッダ付きパケットを、接続識別子に対応付けて設定してあるトンネル経由で送信する(ステップ154)。
次に、図27を参照して、トンネルサーバ装置2においてトンネルからパケットを受信する際の処理を説明する。
トンネルサーバ装置2は、受信したパケットが切断通知であるかどうかをチェックし(ステップ161)、切断通知である場合、サーバ接続管理テーブル、及びポートマップテーブルの該当エントリをクリアし、トンネル接続を切断する(ステップ165、163)。
受信したパケットが切断通知でない場合、クライアント装置のトンネル機能部と同様に、パケットが破損しているか否か判定する。パケットが破損していなければ、ヘッダを取り外したパケットをネットワークに送出する(ステップ162、164)。ステップ162において、パケットの破損が検出された場合には、トンネル接続を切断する(ステップ163)。
なお、このとき、クライアント装置1のトンネル機能部12は、トンネルが切断されたことを検知し、再接続処理を行うことになる。
次に、図28を参照して、クライアント装置1側での、アプリケーション部13からの指示に基づくトンネル切断処理を説明する。
アプリケーション部13から、トンネル切断要求を受けたトンネル機能部12は、トンネルサーバ装置2に対して切断通知を送信し(ステップ171)、トンネルサーバ装置1との接続を切断する(ステップ172)。そして、トンネル機能部12は、セッションIDをクライアント接続管理テーブルから取得し(ステップ173)、セッションIDをキーとして、クライアントポートマップテーブル、及びクライアント接続管理テーブルのエントリをクリアする(ステップ174)。
次に、図29を参照して、クライアント装置1側におけるトンネル再接続処理(パケット破損時等)を説明する。
まず、トンネル機能部12は、トンネルサーバ装置2との接続を一旦切断する(ステップ181)。そして、トンネル機能部12は、トンネルサーバ装置182に接続し(ステップ182)、切断前に接続していたトンネル接続のセッションIDをトンネルサーバ装置2に送信し(ステップ183)、トンネルサーバ装置2からサーバアドレスとセッションIDを受信する(ステップ184)。なお、サーバ側でパケット破損があった場合等、意図しないトンネル切断があった場合は、ステップ182から開始する。
トンネル機能部12は、送信したセッションIDと受信したセッションIDとが同一であるか否かを確認し(ステップ185)、同一であればここでの処理を終了する。つまり、この場合、切断前のセッションIDにてトンネル通信が行われることになる。
ステップ185にて、送信したセッションIDと受信したセッションIDとが同一でなかった場合、旧セッションIDのテーブルエントリがクリアされ、新セッションIDでのエントリが追加される(ステップ186、187)。その後は、新セッションIDにてトンネル通信が行われる。
つまり、本実施の形態では、切断と再接続の場合に、セッションIDを使用して、既に行われているポートマッピングの状態を保持することとしている。
<第3の実施の形態>
次に第3の実施の形態について説明する。本実施の形態における全体のシステム構成については、図3に示した第1の実施の形態でのシステム構成と同じである。また、クライアント装置1とトンネルサーバ装置2は、第1及び第2の実施の形態で説明した機能を含むものとする。以下、第1及び第2の実施の形態と異なる点を中心に説明する。
図30に、本実施の形態におけるクライアント装置1のトンネル機能部12の機能構成図を示す。図30に示すように、本実施の形態におけるクライアント装置1のトンネル機能部12は、第2の実施の形態での構成に加えて、生存確認処理部125及び時間情報格納部126を有する。
生存確認処理部125は、後述する生存確認に係る処理を行う機能とともに、当該処理ためのタイマーとして、(従来と同様の)生存確認要求を送信するタイミング決定用のタイマー1(一例として30秒程度)、受信途切れ検出用のタイマー2(一例として一秒程度)、及び、切断検出時間計測用のタイマー3(一例として3秒程度)を備えている。時間情報格納部126には、後述するRTT、最終送信時刻、平均送信間隔、要求送信時刻等の時間情報が格納されるとともに、受信予測フラグの情報も格納される。
図31に、本実施の形態におけるトンネルサーバ装置2の機能構成図を示す。図31に示すように、本実施の形態におけるトンネルサーバ装置2は、第2の実施の形態での構成に加えて、生存確認のための処理を行う生存確認処理部25及び時間情報格納部26を有する。時間情報格納部26には、後述する最終受信時刻等が格納される。
次に、図32、及び各フローチャートを適宜参照して、本実施の形態における処理を説明する。図32におけるトンネルサーバ装置2と、クライアント装置1(トンネル機能部12)間の通信はトンネルを介した通信である。
まず、クライアント装置1のトンネル機能部12は、初期化処理を行う。初期化処理では、RTT値を0に設定し、現在時刻を最終送信時刻にセットする。そして、タイマー1をスタートさせ、受信予測フラグをクリアする(例えば0にする)。なお、受信予測フラグは、データパケットの受信途切れを検知するためのフラグであり、データパケットを受信した場合にセットされ、当該フラグがセットされた状態で、タイマー2が満了した場合に、生存確認要求が送信される。
トンネル機能部12は、ポートマップ要求等の制御パケット(アプリケーション部13から送信されるデータを含むデータパケット以外のパケット)を送信する場合に、送信する時刻を「要求送信時刻」として記録しておく。
特に、制御パケットとして生存確認要求を送信する場合には、送信する時刻を「要求送信時刻」として記録しておくとともに、生存確認要求応答待ち時間満了(つまり、切断)を検知するためのタイマー3を始動させる。タイマー3がタイムアウトした場合は、現在のトンネル接続を切断し、トンネル再接続を実行することになる。
トンネル機能部12が、制御パケットに対する応答を受信した場合には、当該受信時刻に基づき、パケットがトンネルサーバ装置2とクライアント装置1との間を往復する時間であるRTT(Round Trip Time)を決定し、それを時間情報格納部126に格納する。
図33は、制御パケット受信時におけるトンネル機能部12の処理をより詳細に示した図である。図33を参照して、制御パケット受信時の処理をより具体的に説明する。
図33に示すように、制御パケットのうち、生存確認要求応答を受信した場合には、タイマー1を始動させ(既に始動していた場合には一旦停止し再始動させ)、タイマー3を停止する(ステップ191)。その後、ステップ192に進む。生存確認要求応答以外の制御パケットの場合は、ステップ192から開始する。
ステップ192において、トンネル機能部12は、受信予測フラグをクリアし、タイマー2を停止する。そして、現在時刻−要求送信時刻を算出し、それを応答時間とし、応答時間が現在のRTT値より大きいかどうかをチェックし、大きくなければ処理を終了し、大きければ、当該応答時間をRTT値として時間情報格納部126に格納する。すなわち、ここでの処理により、セッションの中での最大のRTTが、記録されることになる。
図32に戻り、クライアント装置1は、パケット(制御パケットパケットを含む全ての種類のパケット)を送信する度に、当該パケットの送信時刻を「最終送信時刻」として、時間情報格納部126に格納し、当該「最終送信時刻」に基づき、「平均送信間隔」を計算し、それを時間情報格納部126に格納しておく。
より具体的には、図34のフローチャートに示すように、トンネル機能部12は、まず、現在時刻−最終送信時刻を、送信間隔とする。そして、時間情報格納部126に格納されている平均送信間隔を取得し、当該平均送信間隔を用いて、α×送信間隔+(1−α)×平均送信間隔を計算し、これを新たな平均送信間隔として時間情報格納部126に格納する。αは、0から1の間の定数であり、事前に定めておくものである。
そして、トンネル機能部12は、現在時刻を、「最終送信時刻」として時間情報格納部126に格納する。
図32に戻り、トンネルサーバ装置2は、クライアント装置1からパケット(制御パケットパケットを含む全ての種類のパケット)を受信する度に、受信時刻を「最終受信時刻」として時間情報格納部26に格納しておき、データパケット(制御パケットでないデータのIPパケット)の送信時に、当該データパケットの送信時刻の「最終受信時刻」からの経過時間を、IPパケットヘッダの所定の領域(本実施形態ではチェックサム欄)に上書きして送信する。図35に、チェックサム欄を含むIPパケットの構成を示す。
クライアント装置1のトンネル機能部12が、トンネルサーバ装置1からデータパケットを受信した際の処理は、図36に示すとおりである。
図36に示すように、トンネル機能部12が、データパケットを受信すると、まず、受信予測フラグをセットして(ステップ211)、タイマー2を始動する(ステップ212)。
また、トンネル機能部12は、パケットを受信した時刻(「現在時刻」)の「最終送信時刻」からの経過時間(現在時刻−最終送信時刻)を算出し、当該経過時間が2×RTT以上である場合には、「チェックサム欄」が(「現在時刻」−「最終送信時刻」)より大きい場合にのみ生存確認要求をトンネルサーバ装置1に送信する(ステップ213、214、215)。
上記経過時間が、2×RTT未満の場合には、「チェックサム欄」が「平均送信間隔」×4よりも大きい場合にのみ、生存確認要求を送信する(ステップ213、216、215)。
すなわち、クライアント装置1から前回のパケットを送信した時刻(最終送信時刻)から、今回のデータパケットを受信した時刻までの経過時間がRTTと比較してある程度長い場合(本実施形態では、RTTの2倍以上)、生存確認の役割を果たすべき、クライアント装置から送信するパケットの時間間隔が長くなっている可能性を予想できる。
そこで、この場合、サーバ側での経過時間(チェックサム欄)と、クライアント側での経過時間を比較し、サーバ側での経過時間のほうが短い場合には、クライアント装置1から送ったパケットがサーバに届いており、生存確認の役割を果たしていると判断できるため、生存確認要求を送出しない。一方、サーバ側での経過時間のほうが長い場合には、クライアント装置1から前回送信したパケットが正常にトンネルサーバに届いていないことを想定できるため、前回送信したパケットが生存確認の役割を果たしていないと推定でき、生存確認要求を送信することとしている。
一方、クライアント装置1から前回のパケットを送信した時刻(最終送信時刻)から、データパケットを受信した時刻までの経過時間がRTTと比較してある程度短い場合(本実施形態では、RTTの2倍未満)、前回送信したパケットに対応するデータパケットではなく、それ以前の送信パケットに対応するデータパケットを受信したこと等を想定できる。
そこで、この場合は、サーバ側での経過時間が、平均送信間隔よりもある程度長いか否か(本実施形態では、平均送信間隔×4より長いか否か)をチェックしている。サーバ側での経過時間が、平均送信間隔よりもある程度長くないのであれば、クライアント装置1が受信したデータパケットを送信したサーバにおいて、前回受信されたパケットにて、生存確認が成立していると判断できるので、生存確認要求送信は行われない。
一方、サーバ側での経過時間が、平均送信間隔よりもある程度長い場合には、サーバにおいて、前回受信されたパケットによる生存確認以降、クライアント装置1からの生存確認の役割を果たすパケット送信が行われていないことを推定できるため、生存確認要求を送信することとしている。
一方、上記のチェックと並行して、クライアント装置1は、データパケット受信時にタイマー2を起動した後、パケットを受信せずに、タイマー2の時間が経過した場合に生存確認要求を送信する。つまり、受信途切れを検出した場合に、生存確認要求を送信している。
また、クライアント装置1は、タイマー1を用いて、タイマー1が満了する度に、一定時間間隔で生存確認要求送出を行っている。
図37は、生存確認動作概念の一例を示す図である。図37に示す例は、データパケットの送受信が全く行われていなかった場合の例であり、この場合、タイマー1のタイムアウト毎に、定期的に生存確認要求送信が行われることになる。
図38は、生存確認動作概念の他の例を示す図である。図38に示す例において、前述したとおり、クライアント装置1には、トンネルサーバ装置2での最終受信時刻からの経過時間をチェックサム欄に含むデータパケットが届けられる。そして、前述したロジックで、パケット毎にRTTや平均送信間隔の値から異常判定を行うことにより、生存確認要求送出要否が判定される。更に、データパケット受信時に起動するタイマー2により、データパケットの受信途切れをチェックし、受信途切れを検知した場合には、その都度生存確認要求を送信することとしている。
本方式により、データが途切れることなく送受信されている場合には、送受信データ自身が生存確認の役割を果たすため、生存確認要求を行わず、一方、図36に示したロジックで異常を検知した場合や、タイマー2でデータの途切れを検知した場合には、生存確認要求を送信することとしているので、従来技術に比べて、生存確認要求自身の送信に係る負担を減らしながら、データ通信中は、比較的短時間で異常を検出でき、効率的なデータ通信が可能になる。
<実施の形態のまとめ、効果について>
本発明の実施の形態では、アプリケーション部13が、通常の通信ライブラリを使用して送受信するパケットを、ネットワークインタフェースの直前に設けたパケット捕捉・放流部14により捕捉し、トンネルを使って送信する。逆に、トンネルから送られてきたパケットを、パケット捕捉・放流部14から放流し、OSのプロトコルスタックを経由してアプリケーション部13に引き渡している。
また、破損データ対応では、ヘッダを短くし、パケットをトンネルから受信する段階で、破損データを発見した場合には、そもそもトンネル処理が破綻しているとみなし、トンネルを切断し、再接続を行うことで、破損データの読み飛ばし処理を省略している。
また、本発明の実施の形態では、トンネル機能部12は、トンネルの利用開始に先立ち、トンネルサーバ装置2が持つアドレスを取得する。そして、アプリケーション部13は、自らが通信に利用するポート番号をトンネル機能部12に対して予め宣言し予約すると同時に、トンネル機能部12は、トンネルサーバ装置2側に、対応するポート番号を割り当ててもらい、トンネル機能部12は、そのポート番号を受信する。
その結果、宣言したポートのパケットのみがトンネルを通じて送受信され、また、送受信に際してはIPアドレス及びポート番号変換が行われる。また、トンネル接続の際は、再接続に備えて、セッションIDをトンネルサーバが払い出し、再接続が発生した場合に、セッションIDを提示することで、ポートマッピング状態を引き継ぐこととしている。
また、本発明の実施の形態では、トンネル接続が正常動作するか否かを確認するための生存確認要求以外に、データパケットや、データパケット以外の制御パケットの応答時間等を利用して効率的に生存確認要求を行っている。具体的には、トンネル機能部12が、トンネルサーバ装置2からデータパケットを受信した際には、最終送信時刻からの経過時間を調べ、それが2×RTT以上の場合であって、チェックサム欄>現在時刻−最終送信時刻の場合には、生存確認要求を送信し、2×RTT未満の場合には、「チェックサム欄」>平均送信間隔×4の場合に、生存確認要求を送信する。更に、データパケット受信時に、前述したタイマー2を起動し、データパケットが途切れてタイマー2の時間が経過した場合にも、生存確認要求を送信する。
本実施の形態で説明した技術を用いることにより、アプリケーションの改造等が少なく、効率の良く安定(かつセキュアな)した通信経路を提供することが可能となる。より具体的には以下のとおりである。
トンネル機能を実現するために、ネットワークインタフェースの直前に、パケット捕捉・放流部14を設けた。これにより、アプリケーション部13は、OSが提供するプロトコルスタックをそのまま使用することができるため、改造が不要あるいは小規模で済む。これは、オブジェクト形式で提供される既存ソフトウェアやライブラリを使用しなければならない場合に特に有用である。また、OSが提供するプロトコルスタックをそのまま使用するため、自前でのプロトコル処理が不要となり、OSのプロトコルスタックとの仕様の差分による不安定要因を持たずに済む上、トンネル機能部13の実装が小規模で済む。
破損データ対応では、ヘッダを短くすることにより、パケット送信毎に必要だったオーバーヘッドを省略することができ、結果として伝送効率を向上させることができる。特に、トンネル接続として、HTTPSのように接続が暗号化され途中ノードで復号されない場合、通常はトンネルデータが破損することはなく、ヘッダ短縮の効果がより大きくなる。更に、伝送路のMTU(Message Transfer Unit)サイズに上限がある場合に、トンネリングのためのオーバーヘッドでそれを越えやすくなってしまうが、本実施の形態による技術では、ヘッダ長が短いために、同じMTUの中でより大きなパケットを伝送できる。
第2の実施の形態で説明したポートマッピング方式では、予めアプリケーション部13等から指定された特定ポートのパケットのみを伝送する方式とした。これにより、アプリケーション部13が使用する必要最低限のポートのみが外部に対して開かれることになり、外部からの侵入や攻撃、あるいはトロイの木馬等による内部からの情報流出のリスクを最小化することができる。
また、アドレス・ポート変換を行うことにより、トンネルサーバ側に割り当てられたIPアドレスを複数のトンネルクライアントでポート単位に分割して利用できるため、枯渇が心配されているIPv4のグローバルIPアドレス等を節約して利用することができる。また、従来技術の複数の仮想ネットワークアダプタが存在する方式に比べて、ルーティングが単純なままで通信することができるため、ルーティングに起因するトラブルを未然に防止することができる。
また、第3の実施の形態として説明した技術によれば、無通信の場合は、単純な生存確認要求を送付する場合と同程度の間隔で生存確認要求を実現できる。また、データパケットによる通信が行われている場合には、データパケット毎に応答悪化を検出可能な点に加えて、定常的なデータパケットの受信が途切れた段階で、生存確認要求を送付することとしているので、通信中の異常検出を短時間で実施することができる。
また、データパケットがIPパケットである場合、受信時のポート書き換えで再計算しなければならず、伝送が無意味なIPパケットのチェックサム欄を利用することで、適宜発せられる生存確認要求パケットを除き、本実施の形態に係る通信オーバーヘッドは無いことになる。
本発明は、上記の実施の形態に限定されることなく、特許請求の範囲内において、種々変更・応用が可能である。
1 クライアント装置
2 トンネルサーバ装置
3 通信相手装置
4 ファイアフォール装置
5 インターネット
6 プライベートネットワーク
11 データ通信部
12 トンネル機能部
13 アプリケーション部
14 パケット捕捉・放流部
21 トンネル処理部
22 破損データ処理部
23 テーブル情報格納部
24 アドレス・ポート処理部
25 生存確認処理部
26 時間情報格納部
121 トンネル処理部
122 破損データ処理部
123 アドレス・ポート処理部
124 テーブル情報格納部
125 生存確認処理部
126 時間情報格納部

Claims (10)

  1. トンネルサーバ装置との間に構築されたトンネルを介して、通信相手装置とデータ通信を行うクライアント装置であって、
    前記トンネルサーバ装置との間で前記トンネルを構築し、当該トンネルを経由してパケットの送受信を行うトンネル機能手段と、
    通信ネットワークを介してデータ送受信を行うためのデータ通信手段と、
    前記データ通信手段を経由するパケットを監視し、当該パケットの通信情報に基づき、当該パケットが、前記クライアント装置が備えるアプリケーション部から出力されたパケットであると判定した場合に、当該パケットを前記トンネル機能手段に渡すパケット制御手段とを備え、
    前記トンネル機能手段は、前記パケット制御手段から受け取った前記パケットを、前記トンネルを経由して前記通信相手装置に向けて送信する
    ことを特徴とするクライアント装置。
  2. 前記パケット制御手段は、前記トンネル機能手段から、前記トンネルを経由して受信したパケットを受け取り、当該パケットを前記データ通信手段を介して前記アプリケーション部に送出することを特徴とする請求項1に記載のクライアント装置。
  3. 前記トンネル機能手段が前記トンネルを経由して受信するパケットには、ヘッダが付されており、
    前記トンネル機能手段は、
    前記ヘッダの情報に基づき、前記パケットが破損しているか否かを判定し、当該パケットが破損していると判定した場合に、前記トンネルを切断し、その後に、前記トンネルサーバ装置との間にトンネルを再構築する破損処理手段を備える
    ことを特徴とする請求項1又は2に記載のクライアント装置。
  4. 前記トンネル機能手段は、
    前記トンネルサーバ装置から、当該トンネルサーバ装置のアドレスとポート番号であるサーバアドレスとサーバポート番号を受け取り、当該サーバアドレスとサーバポート番号とを、前記アプリケーション部に対応するクライアントポート番号に対応付けて記憶手段に格納し、
    前記パケット制御手段から、前記クライアントポート番号を発ポート番号として含むパケットを受け取った場合に、前記記憶手段を参照することにより、前記パケットにおける発アドレスを前記サーバアドレスに変換し、前記パケットにおける発ポート番号を前記サーバポート番号に変換し、当該変換を施したパケットを前記トンネルを経由して送出する
    ことを特徴とする請求項1ないし3のうちいずれか1項に記載のクライアント装置。
  5. 前記トンネル機能手段は、
    前記トンネルを経由して、前記サーバアドレスを宛先アドレスとして含み、前記サーバポート番号を宛先ポート番号として含むパケットを受信した場合に、前記記憶手段を参照することにより、前記パケットにおける宛先アドレスを前記クライアント装置のアドレスに変換し、前記パケットにおける宛先ポート番号を前記クライアントポート番号に変換し、当該変換を施したパケットを、前記パケット制御手段を介して前記アプリケーション部に送出する
    ことを特徴とする請求項4に記載のクライアント装置。
  6. 前記トンネルサーバ装置は、前記クライアント装置からパケットを受信する度に、当該パケットの受信時刻を最終受信時刻として記憶手段に保持し、データパケットを送信する場合には、当該データパケットの送信時刻の前記最終受信時刻からの経過時間を算出し、当該経過時間をサーバ側経過時間として前記データパケットに含めて送信し、
    前記トンネル機能手段は、
    パケットを前記トンネルサーバ装置に送信する度に、当該パケットの送信時刻を最終送信時刻として記憶手段に保持し、
    前記トンネルサーバ装置から、前記データパケットを受信した場合に、当該データパケットの受信時刻の前記最終送信時刻からの経過時間をクライアント側経過時間として算出し、
    前記データパケットから取得したサーバ側経過時間と、前記クライアント側経過時間とに基づき、前記トンネルサーバ装置に対して生存確認要求を送信するか否かを決定する
    ことを特徴とする請求項1ないし5のうちいずれか1項に記載のクライアント装置。
  7. 前記トンネル機能手段は、
    前記クライアント側経過時間が、所定の時間以上である場合には、前記サーバ側経過時間が前記クライアント側経過時間より大きい場合に、生存確認要求を送信し、
    前記クライアント側経過時間が、前記所定の時間未満である場合には、前記サーバ側経過時間が、パケットの送信時刻から算出される平均送信間隔の所定数倍以上である場合に、生存確認要求を送信する
    ことを特徴とする請求項6に記載のクライアント装置。
  8. 前記所定の時間は、前記クライアント装置と前記トンネルサーバ装置間におけるラウンドトリップ時間の2倍の時間であり、前記所定数は4であることを特徴とする請求項7に記載のクライアント装置。
  9. 前記トンネル機能手段は、前記トンネルサーバ装置からデータパケットを受信した後、その後にパケットを受信することなく、所定のタイマー時間が経過した場合に、生存確認要求を送信することを特徴とする請求項6ないし8のうちいずれか1項に記載のクライアント装置。
  10. コンピュータを、請求項1ないし9のうちのいずれか1項に記載のクライアント装置におけるトンネル機能手段、及びパケット制御手段として機能させるためのプログラム。
JP2010111300A 2010-05-13 2010-05-13 クライアント装置、及びプログラム Active JP5535757B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010111300A JP5535757B2 (ja) 2010-05-13 2010-05-13 クライアント装置、及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010111300A JP5535757B2 (ja) 2010-05-13 2010-05-13 クライアント装置、及びプログラム

Publications (2)

Publication Number Publication Date
JP2011239343A true JP2011239343A (ja) 2011-11-24
JP5535757B2 JP5535757B2 (ja) 2014-07-02

Family

ID=45326793

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010111300A Active JP5535757B2 (ja) 2010-05-13 2010-05-13 クライアント装置、及びプログラム

Country Status (1)

Country Link
JP (1) JP5535757B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016184795A (ja) * 2015-03-25 2016-10-20 Necプラットフォームズ株式会社 通信制御装置、通信制御プログラム及びpppセッションの復旧方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006101431A (ja) * 2004-09-30 2006-04-13 Toshiba Corp 通信方法および通信システム

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006101431A (ja) * 2004-09-30 2006-04-13 Toshiba Corp 通信方法および通信システム

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016184795A (ja) * 2015-03-25 2016-10-20 Necプラットフォームズ株式会社 通信制御装置、通信制御プログラム及びpppセッションの復旧方法

Also Published As

Publication number Publication date
JP5535757B2 (ja) 2014-07-02

Similar Documents

Publication Publication Date Title
US10855654B2 (en) Session identifier for a communication session
JP5378494B2 (ja) リレーサーバを利用したデータ伝送システム及び方法
CN108601043B (zh) 用于控制无线接入点的方法和设备
JP5097620B2 (ja) マルチパス通信システム
US8984114B2 (en) Dynamic session migration between network security gateways
US10951742B1 (en) Methods, systems, and computer program products for sharing information for detecting at least one time period for a connection
JP2008098813A (ja) 情報通信装置、情報通信方法、及びプログラム
WO2014019451A1 (zh) 一种快速通知cgn异常的方法、设备及系统
CN108111509B (zh) 数据传输方法
JP2006229985A (ja) イーサネット・ベースのネットワーク内の擬似ワイヤ・ピア・アドレスの自動検出
JP2011188358A (ja) Vpn装置及びip通信装置
JP2011124770A (ja) Vpn装置、vpnネットワーキング方法、プログラム、及び記憶媒体
US8462952B2 (en) Synchronizing management signaling in a network
JP2006203575A (ja) 通信方法
WO2021244262A1 (zh) 一种报文处理方法、设备及系统
US10075565B1 (en) Methods, systems, and computer program products for sharing information for detecting an idle TCP connection
JP5535757B2 (ja) クライアント装置、及びプログラム
JP5025449B2 (ja) 中継通信システム
JP2011239277A (ja) Vpn装置、vpnネットワーキング方法、プログラム、及び記憶媒体
JP5889122B2 (ja) 制御ノード及び通信制御方法
JP2011160286A (ja) 呼制御サーバ、中継サーバ、vpn装置、vpn通信システム、vpnネットワーキング方法、プログラム、及び記憶媒体
US11310310B2 (en) Communication device for peer-to-peer communication and a communication network using the same
JP4796883B2 (ja) Nat管理システム
KR101410510B1 (ko) Sctp를 이용한 데이터 전송 방법 및 장치
JP4480559B2 (ja) ブロードバンドルータおよびそのポートマッピング情報更新方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130130

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20131011

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20131022

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20131224

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20140401

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140423

R150 Certificate of patent or registration of utility model

Ref document number: 5535757

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250