以下、図面を参照して本発明の実施の形態を説明する。ただし、以下に説明する実施形態は、あくまでも例示であり、以下に明示しない種々の変形や技術の適用を排除する意図はない。なお、以下の実施形態で用いる図面において、同一符号を付した部分は、特に断らない限り、同一若しくは同様の部分を表す。
クラウド利用の増加とワイヤレスブロードバンドの普及とが相まって、クラウドデータセンタのサーバに移動無線端末からアクセスする利用形態が増えている。クラウドデータセンタは、海外や地理的に遠方に存在することが多いため、通信の往復遅延時間(RTT)が大きくなる傾向にある。一方、無線網では、無線回線の品質によって、データの廃棄や遅延が変動しやすい。RTTが大きい回線を用いてTCP通信を行なう場合、いったん廃棄が発生すると、性能(例えば、スループット)が低下し易い。
そこで、近年、ワイドエリアネットワーク(WAN)高速化装置あるいはWAN最適化装置(WANオプティマイザ:WO)と称される装置をWANの両端に配置することで、エンドデバイス間の平均スループットを改善することが試みられている。
図1にWAN最適化装置を適用した通信システムの一例を示す。図1に示す通信システム1は、例示的に、端末10と、WAN30と、サーバ50と、WAN最適化装置70及び90(WO#1及びWO#2)と、を備える。サーバ50は、例えば、クラウドデータセンタ等に設置されてよい。WAN30は、無線アクセス網を含む概念として捉えてよい(以下、同様)。そのため、以下において、WAN30を無線アクセス網30と表記することがある。
端末10及びサーバ50は、互いに、WAN最適化装置70、90及びWAN30を介して相互に通信することが可能である。例えば、端末10は、アプリケーション(APL)#1によって生成された、サーバ50のAPL#2宛のデータを、サーバ50との間の通信に適した通信プロトコル(例えば、TCP)で送信する。
端末10から送信されたデータは、WAN最適化装置70にて受信、終端され、WAN30への送信に適した(あるいは最適化された)通信プロトコルのデータに変換されてWAN30へ送信される。当該通信プロトコルは、例示的に、TCP通信の平均スループットよりも高速なプロトコルであり、「高速通信プロトコル」と称してもよい。高速通信プロトコルの一例については後述する。
WAN最適化装置70からWAN30へ高速通信プロトコルにて送信されたデータは、対向のWAN高速化装置90にて受信、終端され、サーバ50との間の通信に適した通信プロトコル(例えば、TCP)のデータに変換されてサーバ50へ送信される。
サーバ50のAPLから端末10のAPLへの逆方向の通信ついても上記と同様である。例えば、サーバ50は、APL#2によって生成された端末10のAPL#1宛のデータを、端末10との通信に適した通信プロトコル(例えば、TCP)で送信する。
サーバ50から送信されたデータは、WAN最適化装置90にて受信、終端され、WAN30への送信に適した(あるいは最適化された)通信プロトコルのデータに変換されてWAN30へ送信される。
WAN最適化装置90からWAN30へ高速通信プロトコルにて送信されたデータは、対向のWAN高速化装置70にて受信、終端され、端末10との通信に適した通信プロトコル(例えば、TCP)のデータに変換されて端末10へ送信される。
このように、WAN最適化装置70及び90は、端末10とサーバ50との間のTCPセッションを一旦終端し、高速通信プロトコルに変換して対向のWAN最適化装置90及び70と通信する。対向のWAN高速化装置90及び70では、高速通信プロトコルを元の通信プロトコルに戻してサーバ50及び端末10とそれぞれ通信する。
これにより、エンドデバイス(本例では、端末10及びサーバ50)間の通信の輻輳制御や再送制御を、WAN最適化装置70及び90間の輻輳制御や再送制御に置き換えることが可能となる。したがって、例えば、データの廃棄等が発生しても、WAN最適化装置70及び90間の輻輳制御や再送制御によって、スループットの低下を抑制することが可能である。
WAN最適化装置70及び90間に適用可能な高速通信プロトコルの非限定的な一例としては、TCPベースの通信プロトコルと、UDPベースの通信プロトコルと、が挙げられる。TCPベースの高速通信プロトコルの一例としては、ハイスピードTCPが挙げられる。UDPベースの高速通信プロトコルの一例としては、UDTプロトコルが挙げられる。UDTは、「UDP-based data transfer」の略称であり、UDPに輻輳制御及び再送制御を付加した通信プロトコルに相当する。
無線回線のような遅延が大きくデータの廃棄が生じ易い回線では、TCPベースの通信プロトコルによると、いったん廃棄が発生した場合、スループットが大きく低下し易い。これに対し、UDPベースの通信プロトコルによれば、TCPベースの通信プロトコルよりも平均的に高いスループットを得ることができる。
しかし、UDPベースの通信プロトコルは、オーバヘッドがTCPベースの通信プロトコルよりも大きいため、データの廃棄が少ない場合には、TCPベースの通信プロトコルの方が高いスループットを得ることができる。
このように、TCPベースの通信プロトコルとUDPベースの通信プロトコルとでは、通信品質に応じて良好な性能(例えば、スループット)を得られる領域に違いがある。無線回線では、端末10の移動や、他の電波の干渉等の影響によって通信品質が変化しやすい。
そこで、例えば、2つのWAN最適化装置70及び90の間に、UDPベースの通信プロトコルのパスと、TCPベースの通信プロトコルのパスと、を予め設定しておく。そして、通信回線の品質に応じて適切なパスを選んでデータを転送すれば、効率的なデータ伝送が可能になる。
UDPとTCPとをネットワークの通信品質に応じて動的に切り替える技術については、下記の参考文献にも記載がある。
参考文献:真鍋準次ほか、「ネットワークの状況に応じてTCPとUDPを動的に切替えるファイル転送方式」(信学技報IN2011−12)
ここで、データを伝送する通信路(例えば、パス)を切り替える技術として、「1:1プロテクション」あるいは「1+1プロテクション」等のプロテクション技術が知られている。
「1+1プロテクション」では、現用系及び予備系の双方のパスに同じデータを伝送しておく。そして、パス障害や通信品質低下等の切り替え要因が検出されると、各パスの受信端において、切り替え要因の発生していない方のパスのデータを選択受信する。これに対し、「1:1プロテクション」では、切り替え要因を検出してから、代替的なパスの設定及び有効化を行なう。
しかしながら、「1+1プロテクション」では、現用系及び予備系の双方のパスに同じデータを送信するため、通信の帯域を無駄に使ってしまう。一方、「1:1プロテクション」では、切り替え要因の検出から代替的なパスへの切り替えまでの間に送信されたデータが破棄されてしまうことがある。
例えば、UDPとTCPとを通信品質に応じて動的に切り替えることが可能な送信装置について、TCPのパスを現用系パス、UDPのパスを予備系パスとして、「1:1プロテクション」を適用する場合について検討する。
当該送信装置は、例示的に、TCP(現用系)及びUDP(予備系)のそれぞれに対応した送信バッファを備える。そして、例えば図2に模式的に示すように、通常時には、送信装置は、現用系(TCP)の送信バッファに、送信データ(#4〜#12)を、順次、書き込んでゆく。なお、図2において、送信データ#4〜#6は、TCPの送信バッファから読み出された送信済みのデータを表している。
その後に、TCPでの通信品質の低下等の切り替え要因を検出すると、送信装置は、その後に送信すべき送信データの書き込み先を予備系(UDP)の送信バッファに切り替える。したがって、図2において、送信データ#13〜#15は、UDPの送信バッファに書き込まれることになる。
しかし、切り替え要因発生までにTCPの送信バッファに既に書き込まれた未送信の送信データ#7〜#12については、UDPへの切り替えが実施されたにも関わらず、そのままTCPの送信データとして送信されてしまう。その結果、当該送信データは、受信装置において不適切な通信プロトコルのデータとして破棄されることになる。
TCPからUDPへの切り替えタイミングを切り替え要因の検出タイミングよりも遅らせれば、未送信の送信データ#7〜#12についても切り替え後のUDPでの送信が可能になるかもしれない。
しかし、この場合、プロトコル切り替えにタイムラグが発生するため、プロトコル切り替えによって得られる効果が薄くなる。例えば、送受信装置間の伝送距離が長く遅延が大きいほど、スループット改善のためにより大きな送信バッファを用いることとすると、プロトコル切り替えタイミングの遅延が更に大きくなると考えられる。
そこで、本実施形態では、例えば図3に模式的に示すように、通信品質の低下等の切り替え要因を検出したタイミングで、現用系において未送信の送信データ#7〜#12を予備系で送信できるようにする。
(第1実施形態)
図4は、第1実施形態に係る通信システム1の構成例を示すブロック図である。図4に示す通信システム1は、例示的に、図1に例示した端末10の一例としての無線端末10と、図1に例示したサーバ50及びWAN最適化装置90(WO#2)と、無線基地局100と、を備える。
図4において、図1に例示したWAN最適化装置70(WO#1)は、無線端末10に組み込まれている。例示的に、WO#1は、プログラム(あるいは「ソフトウェア」と称してもよい。)で提供される仮想的(論理的)なアプライアンスとして無線端末10のオペレーティングシステム(OS)やプロットフォーム上にインストールされてよい。
ただし、WO#1は、無線端末10に付属(外付け)の物理的なアプライアンスとして提供されてもよい。WO#2についても同様である。例えば、WO#2は、無線基地局100に付属あるいは内蔵の物理的なアプライアンスとして提供されてもよいし、ソフトウェアで提供される仮想的なアプライアンスとして無線基地局100のOSやプラットフォーム上にインストールされてもよい。
サーバ50、WAN最適化装置90及び無線基地局100は、例示的に、有線によって接続(通信)可能であり、無線端末10は、無線基地局100と無線によって接続(通信)可能である。無線基地局100の非限定的な一例は、WiFi通信が可能な基地局である。当該基地局100は、アクセスポイント(AP)と称してもよい。以下において、無線基地局100を「WiFi基地局100」と称することがある。
WO#1及びWO#2の間には、UDPベースの高速通信プロトコルのパスと、TCPベースの高速通信プロトコルのパスと、が設定可能である。無線端末10のAPL#1とWO#1との間、及び、サーバ50のAPL#2とWO#2との間は、それぞれ、TCP通信が可能である。なお、以下において、UDPベースの高速通信プロトコルを「UDPベースプロトコル」と称し、TCPベースの高速通信プロトコルを「TCPベースプロトコル」と称することがある。
(無線端末構成例)
図5は、図4に例示した無線端末10のWAN最適化装置70(WO#1)に着目した構成例を示すブロック図である。図5に示す無線端末10(WO#1)は、例示的に、入出力インタフェース(IF)71、TCP処理部72、プロキシ処理部73、仮想ソケット処理部74、送信処理部75、受信処理部76、及び、無線IF77を備える。更に、WO#1は、制御部78、プロトコル選択テーブル79A、及び、プロトコル指定テーブル79Bを備える。
入出力IF71は、例示的に、APLとの間のインタフェースを提供し、APLが生成した送信データをTCP処理部72へ送信する。また、入出力力IF71は、TCP処理部72から受信した、APL#1宛のデータをAPL#1へ送信する。
TCP処理部72は、入出力IF71から受信したデータをTCPのパケットデータ(以下「TCPパケット」又は「送信パケット」又は単に「パケット」と称することがある。)に変換してプロキシ処理部73へ送信する。また、TCP処理部72は、プロキシ処理部73から受信したTCPパケットを受信データに変換して入出力IF71へ送信する。
プロキシ処理部73は、TCP処理部72から受信したTCPパケットに対してプロキシ設定を必要に応じて行ない、TCPパケットを仮想ソケット処理部74へ送信する。また、プロキシ処理部73は、TCPパケットとして同期(SYN)パケットを受信すると、仮想ソケット処理部74に対してソケットの生成を要求する。更に、プロキシ処理部73は、仮想ソケット処理部74から受信したTCPパケットをTCP処理部72へ送信する。
仮想ソケット処理部74は、プロキシ処理部73やAPL#1に対してソケットアプリケーションプログラミングインタフェース(ソケットAPI)を提供する。また、仮想ソケット処理部74は、制御部78の指示に応じて、プロキシ処理部73から受信したパケットに対して共通シーケンス番号を付与する。共通シーケンス番号を付与されたパケットは、送信処理部75に備えられた、図6に例示する各ソケットバッファ751U及び751Tのいずれかに書き込まれる。
共通シーケンス番号は、例示的に、UDPベースプロトコル及びTCPベースプロトコル等のプロトコルの相違に依存しないシーケンス番号であり、図6に例示する共通シーケンス番号付与部741によってパケットに付与される。各送信ソケットバッファ751U及び751Tへのデータの書き込みは、共通シーケンス番号で区切られたセグメントを単位に行なってよい。
また、仮想ソケット処理部74は、受信処理部76から受信したパケットをプロキシ処理部73へ送信する。受信処理部76の構成例は、図7により後述するWO#2における受信処理部92と同様でよい。
送信処理部75は、仮想ソケット処理部74から受信した送信データを、UDPベースプロトコル及びTCPベースプロトコルのいずれかのパケットに変換して、無線IF77を通じてWAN30へ送信する。
送信処理部75は、図6に例示するように、UDP送信ソケットバッファ751U、TCP送信ソケットバッファ751T、UDPベースプロトコル送信処理部752U、TCPベースプロトコル送信処理部752T、及び、パケットフィルタ部753を備える。
UDP送信ソケットバッファ751Uは、UDPベースプロトコルで送信すべきパケットを一時的に保持する。当該保持により、UDPベースプロトコル送信処理部752Uのデータ送信レートと、仮想ソケット処理部74によるUDP送信ソケットバッファ751Uへのデータの書き込みレートと、の差を吸収することが可能である。
TCP送信ソケットバッファ751Tは、TCPベースプロトコルで送信すべきTCPパケットを一時的に保持する。当該保持により、TCPベースプロトコル送信処理部752Tのデータ送信レートと、仮想ソケット処理部74によるTCP送信ソケットバッファ751Tへのデータの書き込みレートと、の差を吸収することが可能である。
UDPベースプロトコル送信処理部752Uは、UDP送信ソケットバッファ751Uに書き込まれたパケットをUDPベースプロトコルに応じた所定のレートで送信する処理部の一例である。また、UDPベースプロトコル送信処理部752Uは、例示的に、再送バッファ755Uを備え、送信したパケットに対する確認応答(ACK/NACK)が受信されるまで、一時的に、当該パケットを再送バッファ755Uに蓄積する。例えば、ACKが受信されると、再送バッファ755Uに蓄積されたパケットは破棄される。NACKが受信されると、再送バッファ755Uに蓄積されたパケットが再送される。
更に、UDPベースプロトコル送信処理部752Uは、例示的に、品質計測部756Uを備える。品質計測部756Uは、UDPベースプロトコルを用いて後述の計測パケットを送信したり、データパケットの送信間隔を調整(変化)したりすることで、WAN30の通信品質を測定する。
なお、「通信品質」の非限定的な一例としては、対向のWO#2との間(WAN30)におけるデータの廃棄率や往復遅延時間(RTT)、帯域幅等が挙げられる。また、品質計測部756Uは、図7にて後述する受信側の品質計測部925Uでの測定結果を、例えば制御部78を通じて受信可能である。
TCPベースプロトコル送信処理部752Tは、TCP送信ソケットバッファ751Tに書き込まれたパケットをTCPベースプロトコルに応じた所定のレートで送信する処理部の一例である。また、TCPベースプロトコル送信処理部752Tは、例示的に、再送バッファ755Tを備え、送信したパケットに対する確認応答(ACK/NACK)が受信されるまで、一時的に、当該パケットを再送バッファ755Tに蓄積する。例えば、ACKが受信されると、再送バッファ755Tに蓄積されたパケットは破棄される。NACKが受信されると、再送バッファ755Tに蓄積されたパケットが再送される。
更に、TCPベースプロトコル送信処理部752Tは、例示的に、品質計測部756Tを備える。品質計測部756Tは、TCPベースプロトコルを用いて後述の計測パケットを送信したり、データパケットの送信間隔を調整(変化)したりすることで、WAN30の通信品質を測定する。また、品質計測部756Tは、図7にて後述する受信側の品質計測部925Tでの測定結果を、例えば制御部78を通じて受信可能である。
パケットフィルタ部753は、各プロトコル送信処理部752U及び752Tから受信したパケットに付与された共通シーケンス番号を基に、プロトコル指定テーブル79Bを参照してパケットフィルタリングを行なう。例示的に、パケットフィルタ部753は、共通シーケンス番号に対応付けられたプロトコルの送信パケットは通過させるが、そうでないプロトコルの送信パケットは破棄する。
別言すると、パケットフィルタ部753は、プロトコル指定テーブル79Bで指定(あるいは選択)されないパケットをフィルタする。フィルタ(破棄)されたパケットについて、パケットフィルタ部753は、当該パケットを送信したプロトコル送信処理部752U又は752Tに対し、再送バッファ755U又は755Tに蓄積されたパケットの再送をキャンセルする指示を与える。
図5に例示した無線IF77は、例示的に、無線基地局100との間の無線通信を可能にするIFを提供し、パケットフィルタ部753を通過した送信パケットを無線により無線基地局100へ送信する。
プロトコル選択テーブル79Aは、データの廃棄率やRTT等の通信品質の指標となる情報(パラメータ)を基に、より高い性能(例えば、平均スループット)が得られるプロトコルを決定する制御データの一例である。当該制御データには、例示的に、プロトコルを切り替えるポイントの近傍(以下「クリティカルリージョン(CR)」とも称する。)を判断可能なデータが含まれてよい。CRは、プロトコルの切り替えトリガの発生要因となる通信品質を示すポイントを含む所定の通信品質領域の一例である。プロトコル選択テーブル79Aの詳細については、図10により後述する。
プロトコル指定テーブル79Bは、図11に例示するように、共通シーケンス番号付与部741が付与した共通シーケンス番号をもつパケットを、UDPベース及びTCPベースの各プロトコルのいずれで送信するかを対応付けた制御データの一例である。プロトコル指定テーブル79Bは、例示的に、制御部78によって設定され、既述のように、パケットフィルタ部753によって参照される。
制御部78は、品質計測部752U及び752Tから計測結果を受信し、当該計測結果を基にプロトコル選択テーブル79Aを参照し、各タイミングでの通信品質に適したプロトコルを決定する。また、制御部78は、共通シーケンス番号付与部741が付与した共通シーケンス番号をもつパケットを、UDPベース及びTCPベースの各プロトコルのいずれで送信するかを示した対応関係をプロトコル指定テーブル79Bに設定(登録)する。
非限定的な一例として、図11に例示するプロトコル指定テーブル79Bには、共通シーケンス番号10〜14が付与されたパケット#10〜#14はTCPベースプロトコルで送信し、パケット#15〜#20はUDPベースプロトコルで送信することが指定されている。
なお、パケット#i(iは自然数)は、それぞれ、共通シーケンス番号「i」が付与されたパケットを表す。別言すると、図11のプロトコル指定テーブル79Bにおいて、シーケンス番号14及び15の間が、制御部78においてプロトコルの切り替え要因が検出されたタイミングに相当すると捉えてよい。本実施形態では、当該タイミングで、UDPベース及びTCPベースの各プロトコル間の切り替えを実施可能である。なお、当該タイミングを「プロトコル切り替えタイミング」と称することがある。
更に、制御部78は、通信品質が図10に例示するプロトコル選択テーブル79Aに設定したクリティカルリージョン(CR)に入ったと判断すると、仮想ソケット処理部74に対し冗長書き込みを指示する。例えば、制御部78は、仮想ソケット処理部74に対し、切り替え候補のプロトコルに対応する各送信ソケットバッファ751U及び751Tのそれぞれにパケットを書き込むように指示する。
例示的に、図6には、制御部78において通信品質がCRに入ったと判断されて、仮想ソケット処理部74が、制御部78の指示に応じて、パケット#13〜#18を各ソケットバッファ751U及び751Tの双方に冗長的に(重複して)書き込む様子を模式的に例示している。
したがって、パケットフィルタ部753には、双方の送信ソケットバッファ751U及び751Tに書き込まれたパケット#13〜#18が、それぞれ、UDPベースプロトコル送信処理部752U及びTCPベースプロトコル送信処理部752Tで処理されて入力される。
そして、パケットフィルタ部753は、プロトコル指定テーブル79Bに従って、各プロトコル送信処理部752U及び752Tから入力されたパケット#13〜#18のフィルタリングを行なう。例えば図11のプロトコル指定テーブル79Bに示すように、パケット#10〜#14はTCPベースプロトコルで送信し、パケット#15〜#20はUDPベースプロトコルで送信することが制御部78によって指定されていると仮定する。
この場合、パケットフィルタ部753は、TCPベースプロトコル送信処理部752Tから入力されるパケット#13〜#18のうち、パケット#13及び#14を無線IF77へ通過させ、パケット#15〜#18は破棄する。パケット#15〜#18の破棄に応じて、パケットフィルタ部753は、破棄したパケット#15〜#18の再送をキャンセルする指示をTCPベースプロトコル送信処理部752Tに与える。
また、パケットフィルタ部753は、UDPベースプロトコル送信処理部752Uからのパケット#13〜#18のうち、パケット#13及び#14を破棄し、パケット#15〜#18を無線IF77へ通過させる。パケット#13及び#14の破棄に応じて、パケットフィルタ部753は、破棄したパケット#13及び#14の再送をキャンセルする指示をUDPベースプロトコル送信処理部752Uに与える。
これにより、無線端末10(WO#1)は、プロトコルの切り替え要因が検出されたタイミングで(別言すると、最小限のタイムラグで)プロトコル切り替えを実施して、切り替え後のプロトコルで適切にパケットを送信することが可能となる。
(無線基地局構成例)
次に、図7に、WAN最適化装置90(WO#2)を組み込んだ無線基地局100の構成例を示す。図7に示す無線基地局100は、例示的に、無線端末10との無線通信を可能にする無線IF91と、WAN最適化装置90(WO#2)と、を備える。
WO#2は、例示的に、受信処理部92、送信処理部93、仮想ソケット処理部94、プロキシ処理部95、TCP処理部96、有線IF97、制御部98、プロトコル選択テーブル99A、及び、プロトコル指定テーブル99Bを備える。
受信処理部92は、例えば、無線IF91を通じて無線端末10(WO#1)から受信されたパケットに対して受信処理を行なう。受信処理には、例示的に、UDPベースプロトコルに従った受信処理や、TCPベースプロトコルに従った受信処理等が含まれてよい。
そのため、図7に例示する受信処理部92は、例えば、UDPベースプロトコル受信処理部921Uと、TCPベースプロトコル受信処理部921Tと、UDP受信ソケットバッファ922Uと、及びTCP受信ソケットバッファ922Tと、を備える。
UDPベースプロトコル受信処理部921Uは、無線IF91から受信した、UDPベースプロトコルのパケットを受信処理し、正常に受信できたパケットをUDP受信ソケットバッファ922Uへ書き込む。当該書き込みは、共通シーケンス番号で区切られたセグメントを単位に行なってよい。
なお、正常に受信できなかったパケットは、UDPベースプロトコル受信処理部921Uにおいて廃棄してよい。UDPベースプロトコル受信処理部921Uは、受信パケットの送信元である無線端末10のUDPベースプロトコル送信処理部752Uに対し、例えば、確認応答パケットを用いてパケット廃棄の有無を通知し、廃棄されたパケットの再送を要求する。
TCPベースプロトコル受信処理部921Tは、無線IF91から受信した、TCPベースプロトコルのパケットを受信処理し、正常に受信できたパケットをTCP受信ソケットバッファ922Tへ書き込む。当該書き込みは、共通シーケンス番号で区切られたセグメントを単位に行なってよい。
なお、正常に受信できなかったパケットは、TCPベースプロトコル受信処理部921Tにおいて廃棄してよい。TCPベースプロトコル受信処理部921Tは、受信パケットの送信元である無線端末10のTCPベースプロトコル送信処理部752Tに対し、例えば、確認応答パケットを用いてパケット廃棄の有無を通知し、廃棄されたパケットの再送を要求する。
上述した各プロトコル受信処理部921U及び921Tは、それぞれ、例示的に、品質計測部925U及び925Tを備える。
品質計測部925U及び925Tは、それぞれ、無線端末10(送信側)の品質計測部756U及び756T(図6参照)によって送信された計測パケットやパケットの送信間隔が調整されたデータパケットを監視して、ネットワークの通信品質を計測する。計測結果は、受信パケットの送信元である無線端末10(送信側)の品質計測部132U及び132Tに対して通知される。計測結果の通知は、例示的に、制御部98及び送信処理部93を通じて行なってよい。当該通知には、例えば図18にて後述する計測結果通知メッセージを用いることができる。
UDP受信ソケットバッファ922Uは、UDPベースプロトコル受信処理部921Uに対応して備えられており、UDPベースプロトコル受信処理部921Uで受信されたパケットを一時的に保持する。当該保持により、UDPベースプロトコル受信処理部921Uでのデータ受信レートと、仮想ソケット処理部94を介したプロキシ処理部95によるデータ読み出しレートと、の差を吸収することが可能である。
TCP受信ソケットバッファ922Tは、TCPベースプロトコル受信処理部921Tに対応して備えられており、TCPベースプロトコル受信処理部921Tで受信されたパケットを一時的に保持する。当該保持により、TCPベースプロトコル受信処理部921Tでのデータ受信レートと、仮想ソケット処理部94を介したプロキシ処理部95によるデータ読み出しレートと、の差を吸収することが可能である。
なお、上述したWO#2の受信処理部92と同等の機能が、図5に例示した無線端末10(WO#1)の受信処理部76の一例として備えられてよい。
別言すると、無線端末10(WO#1)は、無線端末10からサーバ50への方向であるアップストリームの通信についての受信処理部92と同等の機能を、逆方向のダウンストリームの通信についての受信処理部76として備えてよい。「ダウンストリーム」及び「アップストリーム」は、それぞれ、「ダウンリンク」及び「アップリンク」と称してもよい。
対称的に、図7に例示する無線基地局100(WO#2)において、ダウンストリームの通信についての送信処理部93は、図6に例示した無線端末10におけるアップストリームの通信についての送信処理部75と同等の機能を有する。
例えば、図7に示す送信処理部93は、仮想ソケット処理部94から受信した、無線端末10宛のデータを、UDPベースプロトコル及びTCPベースプロトコルのいずれかのパケットにて、無線IF91を通じて送信する。
そのため、送信処理部93は、無線端末10の送信処理部75と同様に、例えば、UDP送信ソケットバッファ922Uと、TCP送信パケットバッファ922Tと、を備える。また、送信処理部93は、例示的に、UDPベース及びTCPベースの各プロトコル送信処理部932U及び932Tと、パケットフィルタ部933と、を備える。
UDP送信ソケットバッファ931Uは、UDPベースプロトコルに対応して備えられており、UDPベースプロトコルで送信すべきパケットを一時的に保持する。当該保持により、UDPベースプロトコル送信処理部932Uのデータ送信レートと、仮想ソケット処理部94によるUDP送信ソケットバッファ931Uへのデータの書き込みレートと、の差を吸収することが可能である。
TCP送信ソケットバッファ931Tは、TCPベースプロトコルに対応して備えられており、TCPベースプロトコルで送信すべきTCPパケットを一時的に保持する。当該保持により、TCPベースプロトコル送信処理部932Tのデータ送信レートと、仮想ソケット処理部94によるTCP送信ソケットバッファ931Tへのデータの書き込みレートと、の差を吸収することが可能である。
UDPベースプロトコル送信処理部932Uは、無線端末10におけるUDPベースプロトコル送信処理部752U(図6参照)と同等の機能を提供する。例えば、UDPベースプロトコル送信処理部932Uは、UDP送信ソケットバッファ931Uに書き込まれたパケットをUDPベースプロトコルに応じた所定のレートで送信する処理部の一例である。
なお、図7には図示を省略しているが、UDPベースプロトコル送信処理部932Uは、無線端末10におけるUDPベースプロトコル送信処理部752Uに備えられた再送バッファ755Uと同様の再送バッファを備えてよい。UDPベースプロトコル送信処理部932Uは、送信したパケットに対する確認応答(ACK/NACK)が受信されるまで、一時的に、当該パケットを再送バッファに保存(キャッシュ)する。例えば、ACKが受信されると、再送バッファに保存されたパケットは破棄(削除)される。NACKが受信されると、再送バッファに保存されたパケットが再送される。
更に、UDPベースプロトコル送信処理部932Uは、例示的に、品質計測部935Uを備えてよい。品質計測部935Uは、UDPベースプロトコルを用いて、図14により後述する計測パケットを送信したり、データパケットの送信間隔を調整(変化)したりすることで、WAN30の通信品質を測定する。
ここでの「通信品質」の非限定的な一例としては、例示的に、無線端末10(対向のWO#1)との間(WAN30)におけるデータの廃棄率やRTT、帯域幅等が挙げられる。品質計測部935Uは、無線端末10の受信処理部76にダウンストリームのUDPベースプロトコルに対して備えられた、受信側の品質計測部(図5において図示省略)での計測結果を、例えば制御部98を通じて受信可能である。
TCPベースプロトコル送信処理部932Tは、TCP送信ソケットバッファ931Tに書き込まれたパケットをTCPベースプロトコルに応じた所定のレートで送信する処理部の一例である。また、TCPベースプロトコル送信処理部932Tは、無線端末10のTCPベースプロトコル送信処理部752Tに備えられた再送バッファ755Tと同様の再送バッファを備えてよい。
TCPベースプロトコル送信処理部932Tは、送信したパケットに対する確認応答(ACK/NACK)が受信されるまで、一時的に、当該パケットを再送バッファに蓄積する。例えば、ACKが受信されると、再送バッファに蓄積されたパケットは破棄される。NACKが受信されると、再送バッファに蓄積されたパケットが再送される。
更に、TCPベースプロトコル送信処理部932Tは、例示的に、品質計測部935Tを備えてよい。品質計測部935Tは、TCPベースプロトコルを用いて、図15により後述する計測パケットを送信したり、データパケットの送信間隔を調整(変化)したりすることで、WAN30の通信品質を測定する。また、品質計測部935Tは、無線端末10の受信処理部76にダウンストリームのTCPベースプロトコルに対して備えられた、受信側の品質計測部(図5において図示省略)での計測結果を、例えば制御部98を通じて受信可能である。
パケットフィルタ部933は、無線端末10におけるパケットフィルタ部753と同様の機能を提供する。例えば、パケットフィルタ部933は、各プロトコル送信処理部932U及び932Tから受信した送信パケットに付与された共通シーケンス番号を基にプロトコル指定テーブル99Bを参照して、パケットフィルタリングを行なう。
例示的に、パケットフィルタ部933は、共通シーケンス番号に対応付けられたプロトコルの送信パケットは通過させるが、そうでないプロトコルの送信パケットは破棄する。破棄が生じた場合、パケットフィルタ部933は、破棄したパケットを送信したプロトコル送信処理部932U又は932Tに対し、再送バッファに蓄積されたパケットの再送をキャンセルする指示を与える。
仮想ソケット処理部94は、プロキシ処理部95に対してソケットAPIを提供する。また、仮想ソケット処理部94は、制御部98の指示に応じて、受信パケットの順序制御や、無線端末10宛の送信パケットに対する共通シーケンス番号の付与等を行なう。
そのため、図6に例示する仮想ソケット処理部94は、例えば、共通シーケンス番号付与部941、リオーダリング処理部942、及び、リオーダリングバッファ943を備える。
共通シーケンス番号付与部941は、無線端末10における共通シーケンス番号付与部741と同様の機能を提供する。例えば、共通シーケンス番号付与部941は、制御部98の指示に応じて、プロキシ処理部95から受信したパケットに対して共通シーケンス番号を付与する。共通シーケンス番号を付与されたパケットは、送信処理部93における各送信ソケットバッファ931U及び931Tのいずれかに書き込まれる。
リオーダリング処理部942は、UDPベース及びTCPベースの各プロトコルのパスを通じて受信したパケットの順序が入れ替わった場合に、受信パケットに付与されている共通シーケンス番号を基に、正しい順序にパケットの順序を並べ替える。そのため、各受信ソケットバッファ922U及び922Tからリオーダリング処理部942へ読み出されたパケットは、例えば、リオーダリングバッファ943に一時的に保持される。
なお、図5には図示を省略しているが、上述のアップストリームについてのリオーダリング処理部942及びリオーダリングバッファ943と同様の機能が、無線端末10(WO#1)の仮想ソケット処理部74に備えられてよい。すなわち、無線端末10(WO#1)は、ダウンストリームの受信パケットについて、共通シーケンス番号に基づく順序制御を行なってよい。
プロキシ処理部95は、TCP処理部96から受信したTCPパケットに対してプロキシ設定を必要に応じて行ない、TCPパケットを仮想ソケット処理部94へ送信する。また、プロキシ処理部95は、TCPパケットとして同期(SYN)パケットを受信すると、仮想ソケット処理部94に対してソケットの生成を要求する。更に、プロキシ処理部95は、仮想ソケット処理部94から受信したTCPパケットをTCP処理部96へ送信する。
TCP処理部96は、有線IF97から受信したデータをパケットに変換してプロキシ処理部95へ送信する。また、TCP処理部96は、プロキシ処理部95から受信したTCPパケットを受信データに変換して有線IF97へ送信する。
有線IF97は、例示的に、サーバ50との間の有線通信を可能にする通信インタフェースを提供し、TCP処理部96から受信した、サーバ50宛の送信データをサーバ50へ送信する。また、有線IF97は、サーバ50から受信した、無線端末10宛のデータをTCP処理部96へ送信する。
制御部98は、無線端末10(WO#1)における制御部78(図5及び図6参照)と同様の機能を提供する。例えば、制御部78は、品質計測部935U及び935Tから計測結果を受信し、当該計測結果を基に、プロトコル選択テーブル99Aを参照し、各タイミングでの通信品質に適したプロトコルを決定する。
また、制御部98は、共通シーケンス番号付与部941が付与した共通シーケンス番号をもつパケットを、UDPベース及びTCPベースの各プロトコルのいずれで送信するかを示した対応関係をプロトコル指定テーブル99Bに設定(登録)する。当該プロトコル指定テーブル99Bは、例示的に、ダウンストリームのパケット送信において、パケットフィルタ部933によって参照される。
非限定的な一例として、プロトコル指定テーブル99Bは、WO#1におけるプロトコル指定テーブル79B(図6及び図11参照)と同様のデータ形式を有してよい。例えば、共通シーケンス番号12〜14が付与されたパケット#12〜#14はTCPベースプロトコルで送信し、パケット#15〜#17はUDPベースプロトコルで送信することが指定されてよい。
更に、制御部98は、既述のように計測された通信品質がプロトコル選択テーブル99Aに設定したクリティカルリージョン(CR)に入ったと判断すると、仮想ソケット処理部94に対し冗長書き込みを指示する。例えば、制御部98は、切り替え候補のプロトコルに対応する各送信ソケットバッファ931U及び931Tの双方にパケットを書き込むように指示する。
そして、送信処理部93のパケットフィルタ部933は、プロトコル指定テーブル99Bに従って、各プロトコル送信処理部932U及び932Tから入力されたパケットのフィルタリングを行なう。
これにより、無線基地局100(WO#2)は、アップストリームと同様に、ダウンストリームのプロトコルの切り替え要因が検出されたタイミングで(別言すると、最小限のタイムラグで)プロトコル切り替えを実施できる。したがって、WO#2は、切り替え後のプロトコルで適切にパケットを無線端末10へ送信することが可能となる。
次に、図8を参照して、アップストリームの送信側のWO#1と受信側のWO#2との間の品質計測に着目した動作概要について説明する。ただし、図7は、アップストリームに着目した場合の、送信装置としてのWO#1及び受信装置としてのWO#2の構成例を示しており、ダウンストリームの構成については図示を省略している。
送信装置としてのWO#1における制御部78は、周期的に、各プロトコル送信処理部752U及び752Tにおける品質計測部756U及び756Tへそれぞれ通信品質の測定指示を与える。
各品質計測部756U及び756Tは、それぞれ、UDPベース及びTCPベースの各プロトコルのそれぞれについて複数の計測パケットをアップストリーム(WO#2)へ送信する。
受信装置としてのWO#2では、受信処理部92において、各プロトコルの計測パケットを、対応するプロトコル受信処理部921U及び921Tの品質計測部925U及び925Tにて受信する。品質計測部925U及び925Tは、それぞれ、計測パケットの破棄数を計測し、廃棄率(以下「パケット廃棄率」とも称する。)を計算する。
なお、各プロトコルで送信される計測パケット数は、既知としてよい。例えば、WO#1の制御部78とWO#2の制御部98との間で、ネゴシエーションメッセージを送受信することで、各プロトコルで送信する計測パケット数を互いに通知するようにしてよい。代替的に、計測パケット数は、WO#1及びWO#2において既知の数としてメモリ等に記憶しておいてもよい。
また、品質計測部925U及び925Tは、例えば、受信した計測パケットのパケット間隔を計測することで、空き帯域を計測し、計測結果を制御部98へ通知する。制御部98は、通知された計測結果を、例えば図18に示すような計測結果通知メッセージを用いてWO#1の制御部78へ通知する。
WO#1では、各プロトコルの品質計測部756U及び756Tにおいて、送信したデータパケットに対してWO#2が送信してくる確認応答を受信するまでの時間(RTT)を計測し、計測結果を制御部78へ通知する。
(ハードウェア構成例)
次に、図9に、上述した無線端末10及び無線基地局100のハードウェア構成例を示す。なお、無線端末10及び無線基地局100を、便宜的に「無線装置300」と総称することがある。図9に例示するように、無線装置300は、CPU301と、メモリ302と、ストレージ303と、ネットワークインタフェースカード(NIC)304及び305と、バス309と、を備える。また、無線装置300は、オプションとして、入力装置306、出力装置307、及び、記録媒体ドライブ308を備えてよい。
CPU301、メモリ302、ストレージ303、NIC304及び305は、バス309によって相互通信可能に接続されている。無線装置300に、入力装置306、出力装置307、及び、記録媒体ドライブ308のいずれかが備えられる場合には、当該機器もバス309に接続されてよい。
CPU301は、演算能力を備えたプロセッサの一例であり、無線装置300の全体的な動作を制御する。演算能力を備えたプロセッサは、コンピュータの一例であると捉えてもよい。
例示的に、CPU301が、メモリ302やストレージ303に記憶されたプログラム(あるいはソフトウェア)やデータを適宜に読み取って実行することにより、図5及び図6に例示した無線端末10、あるいは、図7に例示した無線基地局100としての機能が具現される。
例えば、図5及び図6に例示した無線端末10における、TCP処理部72、プロキシ処理部73、仮想ソケット処理部74、送信処理部75、受信処理部76、及び、制御部78は、CPU301の処理として具現される。
また、図7に例示した無線基地局100における、受信処理部92、送信処理部93、仮想ソケット処理部94、プロキシ処理部95、TCP処理部96、及び、制御部98も、CPU301の処理として具現される。
なお、上述のごとくCPU301の処理として具現される、無線端末10(WO#1)及び無線基地局100(WO#2)としての動作(機能)を実現するプログラムは、通信制御プログラム(あるいはソフトウェア)と称してよい。
メモリ302は、例示的に、RAMやROMであり、上述したプログラムやデータを記憶する。データには、CPU301が処理に用いるデータやCPU301による処理の結果であるデータが含まれてよい。既述のプロトコル選択テーブル79A(99A)やプロトコル指定テーブル79B(99B)は、メモリ302において記憶、実現されてよい。
また、既述の各ソケットバッファ751U,751T,922U,922T,931U及び931Tは、仮想的(あるいは論理的)なバッファとして、メモリ302において実現されてよい。更に、既述の再送バッファ755U及び755Tやリオーダリングバッファ943についても、仮想的(あるいは論理的)なバッファとして、メモリ302において実現されてよい。
ストレージ303は、例示的に、ハードディスクドライブ(HDD)等の外部記憶装置であってよく、上述したプログラムやデータを記憶する。ストレージ303に記憶されたプログラムやデータは、例えば、CPU301の指示に応じて、適宜に、メモリ32に展開されて、CPU301による処理に用いられる。
NIC304は、例えば、無線基地局100あるいは無線端末10との間の無線接続を提供し、無線基地局100あるいは無線端末10との間でアンテナ310を通じた無線通信を可能にする。別言すると、NIC304によって、図5に例示した無線端末10の無線IF77、あるいは、図7に例示した無線基地局100の無線IF91が実現される。
NIC305は、例えば、外部機器との有線接続を提供する。例えば、無線基地局100のNIC305は、サーバ50との有線接続を提供する。別言すると、NIC305によって、図7に例示した無線基地局100の有線IF97が実現される。
入力装置306は、例示的に、キーボードやマウス、タッチパネル等であり、出力装置307は、表示装置(ディスプレイやタッチパネル等)や印刷装置等である。
記録媒体ドライブ308は、メモリ302やストレージ303のデータを記録媒体311に出力することができ、また、記録媒体311からプログラムやデータ等を読み出してストレージ303やメモリ302に出力することができる。したがって、無線装置300としての機能を実現するプログラムやデータは、記録媒体311からインストールすることができる。
記録媒体311は、例示的に、フレキシブルディスクや、Magneto-Optical(MO)ディスク、Compact Disc Recordable(CD−R)やDigital Versatile Disk Recordable(DVD−R)等の任意の記録媒体であってよい。なお、無線装置300としての機能を実現するプログラムやデータは、NIC304やNIC305を通じてサーバ50等の外部機器から通信により無線装置300にダウンロード、インストールされてもよい。
(プロトコル選択テーブルの一例)
図5及び図6に例示したWO#1は、プロトコル選択テーブル99Aの一例として、図10に示すような特性データを有する。図10に例示する特性データは、UDPベースプロトコルでの通信及びTCPベースプロトコルでの通信における廃棄率(%)に対する平均スループットの変化を示すデータである。
図10から分かるように、TCPベースプロトコルの方がUDPベースプロトコルよりも高い平均スループットが得られる領域と、これらの関係が逆転する領域と、が存在する。これら2つの領域の境界は、各特性の交点に相当する廃棄率で示される。
したがって、制御部78(又は、98)は、既述の通信品質の計測結果が当該廃棄率を示すポイント(タイミング)でプロトコル切り替えを実施できるように、当該ポイントを含む或る範囲の廃棄率をクリティカルリージョン(CR)として決定する。例示的に、クリティカルリージョンは、プロトコル切り替えポイントの廃棄率p(%)に対して、以下の式(1)で表される範囲に設定してよい。
廃棄率pがCRの範囲外から範囲内に変化したことを検出すると、制御部78(又は、98)は、送信パケットのソケットバッファへの冗長的な書き込み制御を実施する。すなわち、制御部78(又は、98)は、既述のように、仮想ソケット処理部74(又は、94)に指示を与え、各プロトコルの送信ソケットバッファ751U及び751T(又は、931U及び931T)の双方に送信パケットを冗長的に書き込ませる。
(パケットフォーマット例)
次に、図12〜図18に、上述した通信システム1で用いられるパケットあるいはメッセージのフォーマット例を示す。
図12は、UDPベースプロトコルのデータパケットフォーマットの一例を示し、図13は、TCPベースプロトコルのデータパケットフォーマットの一例を示す。また、図14は、UDPベースプロトコルの計測パケットフォーマットの一例を示し、図15は、TCPベースプロトコルの計測パケットフォーマットの一例を示す。
更に、図16及び図17は、ネゴシエーションメッセージのフォーマットの一例を示し、図16は、ネゴシエーション要求メッセージのフォーマットの一例を示し、図17は、ネゴシエーション応答メッセージのフォーマットの一例を示す。また、図18は、既述の品質計測結果の通知に用いられる計測結果通知メッセージのフォーマットの一例を示す。
図12に例示するように、UDPベースプロトコルのデータパケットは、IPヘッダ、DUPヘッダ、及び、UDPペイロードを有する。UDPペイロードは、例示的に、UDPベースプロトコルヘッダと、既述の共通シーケンス番号(例えば、4バイト)と、データ(例えば、可変長)と、を有する。UDPベースプロトコルヘッダは、例示的に、UDPベースプロトコルの種別を示す情報要素(例えば、2バイト)と、グループ識別子(ID)(2バイト)と、UDPベースプロトコルシーケンス番号(4バイト)とを、有する。
なお、前述した品質計測は、送信データパケットが存在する場合には、計測パケットの代わりにデータパケットを用いてもよい。品質計測の際、WO#1とWO#2との間で予め品質計測で送信するパケット数をネゴシエーションした場合、グループ識別子は、例示的に、ネゴシエーションした数のデータパケットを区別するために用いる。ネゴシエーションした数に含まれるパケットには同じ識別子を設定してよい。ネゴシエーションした数のパケットが繰り返し送信される場合には、当該フィールドに異なる値を設定してよい。
一方、図13に例示するように、TCPベースプロトコルのデータパケットは、IPヘッダと、TCPヘッダと、TCPペイロードと、を有する。TCPペイロードは、既述の共通シーケンス番号(例えば、4バイト)と、データ(例えば、可変長)と、を有する。
図12及び図13に例示するパケットフォーマットの共通シーケンス番号が、共通シーケンス番号付与部741(又は、941)によって付与される。
また、図14に例示するように、UDPベースプロトコルの計測パケットは、図12に例示したUDPベースプロトコルのデータパケットに比して、UDPベースプロトコルシーケンス番号に代えて計測用シーケンス番号(例えば、4バイト)を有する点が異なる。また、UDPベースプロトコルの計測パケットは、データとしてダミーデータ(例えば、可変長)を有する。
一方、図15に例示するように、TCPベースプロトコルの計測パケットは、図13に例示したTCPベースプロトコルのデータパケットに比して、TCPオプションヘッダを追加的に有する点が異なる。
TCPオプションヘッダは、例示的に、オプションコード(例えば、1バイト)、TCPオプションヘッダのサイズを示す情報要素(例えば、1バイト)、グループID(例えば、2バイト)、及び、計測用シーケンス番号(例えば、4バイト)を有する。オプションコードには、当該パケットが計測パケットであることを示すコード(非限定的な一例として、16進数で0x8)が設定される。
図14及び図15に例示したフォーマットにおける計測用シーケンス番号を基に、既述のパケット廃棄率やRTT等を計測することが可能になる。
また、図16及び図17に例示するネゴシエーションメッセージは、既述のとおり、制御部78と制御部98との間の通信(通知)に用いられる。図16に例示するネゴシエーション要求メッセージは、例えば、リクエスト識別番号(例えば、4バイト)、既述の共通シーケンス番号(例えば、4バイト)、連続フラグ(例えば、2バイト)、及び、プロトコル種別を示す情報要素(例えば、2バイト)を有する。
リクエスト識別番号は、当該メッセージによって要求する処理を識別する情報要素の一例である。例えば、制御部78(又は、98)は、計測パケットの送信処理の要求を当該ネゴシエーション要求メッセージによって行なうことが可能である。
連続フラグは、例えば、計測パケットを連続的に送信する数を示す情報要素の一例である。
プロトコル種別を示す情報要素は、例示的に、UDPベースプロトコル及びTCPベースプロトコルのいずれかを示す情報要素の一例である。
制御部78(又は、98)は、「プロトコル種別」で指定されたプロトコルの計測パケットを「連続フラグ」で指定された数だけ送信することが可能である。
図17に例示するネゴシエーション応答メッセージは、図16に例示したネゴシエーション要求メッセージを受信した制御部78(又は、98)が、当該要求メッセージによって要求された処理に応じた応答を返信するのに用いられる。ネゴシエーション応答メッセージは、例示的に、どの要求に対する応答であるかを識別する情報要素の一例としてリクエスト識別番号(例えば、4バイト)を有する。
また、図18に例示するように、計測結果通知メッセージは、プロトコル種別を示す情報要素(例えば、2バイト)、グループID(例えば、2バイト)、計測結果(廃棄率)(例えば、4バイト)、及び、計測結果(空き帯域)(4バイト)を有する。プロトコル種別を示す情報要素には、例示的に、UDPベース及びTCPベースの各プロトコルのいずれかを示す情報が設定される。
(動作例)
次に、図19〜図22を参照して、上述した通信システム1の動作例について説明する。図19〜図21は、それぞれ、無線端末10からサーバ50への方向であるアップストリームのパケットの流れに着目した動作シーケンス例を示す。なお、図19〜図21において、TCP通信に関する確認応答等は図示を省略している。図22は、アップストリームの送信元である無線端末10(WO#1)における制御部78の動作例を示すフローチャートである。
まず、無線アクセス網30でのパケット廃棄率が図9に例示したプロトコル切り替えポイントよりも低いため、無線端末10は、TCPベースプロトコルでサーバ50と通信を行なっていたと仮定する。その後、例えば無線端末10の移動に伴ってパケット廃棄率がプロトコル切り替えポイントよりも高くなると、無線端末10は、UDPベースプロトコルに切り替えて通信を行なう。以下では、この場合の動作例について説明する。
(動作シーケンス例)
図19に例示するように、無線端末10は、例えばAPL#1によってサーバ50宛のデータが生成されると、サーバ50に接続するためにTCPソケットを生成し(処理P10)、コネクション設定を開始する。コネクション設定の開始に応じて、無線端末10は、TCPの同期(SYN)パケットを生成する。SYNパケットは、SYNフラグがセットされたパケットである。
SYNパケットは、WO#1によって無線アクセス網30へ中継される。WO#1において、SYNパケットは、入出力71及びTCP処理部72を経由してプロキシ処理部73に転送される(処理P10a)。
プロキシ処理部73は、サーバ50に成り代わってSYNパケットに対する応答である同期確認(SYN/ACK)パケットを無線端末10のAPL#1に返信し、TCPの終端処理を行なう。なお、SYN/ACKパケットは、SYNフラグとACKフラグとをセットしたパケットである。
無線端末10のAPL#1は、SYN/ACKパケットを受信すると、ACKフラグをセットした確認(ACK)パケットを生成する。ACKパケットは、SYNパケットと同様に、WO#1のプロキシ処理部73にて受信される。
したがって、無線端末10は、サーバ50と通信しているつもりになっているが、実際には、WO#1のプロキシ処理部73と通信することになる。なお、以上のような、SYNパケットの送信、SYN/ACKパケットの返信、及び、ACKパケットの送信を含む通信手順は、「3ウェイハンドシェーク」と呼ばれる。
WO#1のプロキシ処理部73は、無線端末10からTCPセッションが設定されると、WO#1の仮想ソケット処理部74にソケットを生成する(処理P100)。仮想ソケット処理部74は、TCPベースプロトコル送信処理部752Tに対し、WO#2との間にTCPベースプロトコルのセッションを設定するよう指示する(処理P110)。
指示を受けたTCPベースプロトコル送信処理部752Tは、WO#2のTCPベースプロトコル受信処理部921Tとの間で、3ウェイハンドシェークを実施し、TCPベースプロトコルのコネクションを設定する。
WO#2のTCPベースプロトコル受信処理部921Tは、WO#2の仮想ソケット処理部94に対してTCPソケットの生成を指示する。指示を受けた仮想ソケット処理部94は、WO#1で生成されたTCPソケットに対応するTCPソケットを生成する(処理P200)。
WO#1及び#2の仮想ソケット処理部74及び94においてTCPソケットがそれぞれ生成されると、仮想ソケット処理部74及び94は、それぞれ、UDPソケットを生成する(処理P111及びP201)。
なお、UDPは、コネクションレスなプロトコルであるため、3ウェイハンドシェークは必要ない。したがって、WO#1の仮想ソケット処理部74は、UDPベースプロトコル送信処理部752Uに対してUDPソケットのアドレスを登録して処理を終了する。同様に、WO#2の仮想ソケット処理部94は、UDPベースプロトコル受信処理部921Uに対してDUPソケットのアドレスを登録して処理を終了する。
WO#2の仮想ソケット処理部94は、WO#2のプロキシ処理部95が設定した待受けソケットに対し、外部から接続があったことを当該プロキシ処理部95に通知する(処理P202)。
WO#2のプロキシ処理部95は、待受けソケットをアクセプト(接続)すると共に(処理P211)、サーバ50との間にTCPのコネクションを設定しサーバ50との接続を確立する(処理P212)。この際、WO#2のプロキシ処理部95とサーバ50との間で3ウェイハンドシェークが実施されるが、図19には図示を省略している。
WO#1及び#2の仮想ソケット処理部74及び94においてUDPソケットがそれぞれ生成されると、WO#1における品質計測部756U及び756Tは、それぞれ、計測パケットを生成してアップストリームへ送信する(処理P112)。例えば、品質計測部756Uは、図14に例示したUDPベースプロトコルの計測パケットを生成し、品質計測部756Tは、図15に例示したTCPベースプロトコルの計測パケットを生成する。
UDPベースプロトコルの計測パケットは、WO#2のUDPベースプロトコル受信処理部921Uにおける品質計測部925Uで受信される。TCPベースプロトコルの計測パケットは、WO#2のTCPベースプロトコル受信処理部921Tにおける品質計測部925Tで受信される。
WO#2の各品質計測部925U及び925Tは、それぞれ、受信した計測パケットを基に、対応するプロトコルでの廃棄数やRTT、空き帯域等幅を計測する。計測結果は、例えば図18に例示した計測結果通知メッセージによってWO#1における品質計測部756U及び756Tへ通知される。以降、計測パケットの送信及び計測結果の通知は、周期的に実施されてよい。
無線端末10は、サーバ50との接続が完了すると、TCPのデータパケットの送信を開始する(処理P11)。データパケットは、WO#1のTCP処理部72を経由してプロキシ処理部73に転送される(処理P12)。WO#1のプロキシ処理部73は、TCPセッションからの受信データパケットを、再度、仮想ソケット処理部74に書き込む(処理P13)。
ここで、測定結果が廃棄率=0.0001%、RTT=150msであったと仮定する。当該測定結果は、例示的に、品質計測部756U及び756Tから制御部78に通知されている。WO#1の制御部78は、当該測定結果を基に、図10に例示したプロトコル選択テーブル79Aを参照する。
この場合、UDPベースプロトコルよりもTCPベースプロトコルの方が高い平均スループットを得られるので、制御部78は、TCPベースプロトコルでデータパケットを送信することに決定し、その旨を仮想ソケット処理部74に通知する。
仮想ソケット処理部74は、プロキシ処理部73から受信した(書き込まれた)データパケットに対して共通シーケンス番号を共通シーケンス番号付与部741によって付与する(処理P113)。共通シーケンス番号を付与されたデータパケットは、TCP送信ソケットバッファ751Tに書き込まれる(処理P114)。
例えば図20には、共通シーケンス番号#10〜#12をもつデータパケット#10〜#12が、TCP送信ソケットバッファ751Tに書き込まれることを表している。なお、仮想ソケット処理部74は、データパケットに付与した共通シーケンス番号を制御部78へ通知する。制御部78は、通知された共通シーケンス番号毎に図10に例示したプロトコル指定テーブル79Aを更新する。
TCP送信ソケットバッファ751Tに書き込まれたデータパケット#10〜#12は、TCPベースプロトコル送信処理部752Tによって読み出され、TCPベースプロトコルのデータパケット(図13参照)に変換されて、パケットフィルタ部753へ転送される。
パケットフィルタ部753は、TCPベースプロトコル送信処理部752Tからデータパケットを受信すると、図11に例示したプロトコル指定テーブル79Bを参照する。ここで、プロトコル指定テーブル79Bにおいて、共通シーケンス番号#10〜#12をもつデータパケット#10〜#12は、TCPベースプロトコルで送信することが指定されているものと仮定する。したがって、パケットフィルタ部753は、データパケット#10〜#12を無線IF77へ通過させて無線アクセス網30へ送信する(処理P120〜P122)。
無線アクセス網30へ送信されたTCPベースプロトコルのデータパケット#10〜#12は、WO#2のTCPベースプロトコル受信処理部921Tで受信される。TCPベースプロトコル受信処理部921Tは、受信したデータパケット#10〜#12を、TCPベースプロトコル変換前のフォーマットに戻して、TCP受信ソケットバッファ922Tに受信した順序で書き込む。
TCP受信ソケットバッファ922Tに書き込まれたデータパケット#10〜#12は、仮想ソケット処理部94によって、書き込み順序どおりに読み出される。仮想ソケット処理部94は、順番に読み出したデータパケット#10〜#12のそれぞれに含まれるデータ(ペイロード)を抽出してプロキシ処理部95に転送する。
プロキシ処理部95は、仮想ソケット処理部94から受信したデータをTCP処理部96に転送し、TCP処理部96は、受信したデータをサーバ50との間に有線IF97を介して確立されたTCPセッションで送信する。
ここで、無線アクセス網30の通信品質が低下し、既述のように周期的に実施されている品質計測の結果、WO#1の制御部78が、廃棄率=0.001%、RTT=150msという測定結果を取得したとする。この場合、図20に例示するように、制御部78は、図10に例示したプロトコル選択テーブル79Aを参照することにより、廃棄率がCRに入ったと判断(検出)する(処理P115)。当該判断に応じて、制御部78は、仮想ソケット処理部74に対して、UDP送信ソケットバッファ751U及びTCPソケットバッファ751Tの双方にデータパケットを書き込むよう指示する。
併せて、制御部78は、以降にデータパケットに付与される共通シーケンス番号毎に、図11に例示したプロトコル指定テーブル79Bを更新する。例えば図11に示すように、制御部78は、共通シーケンス番号#15〜#19が付与されるデータパケット#15〜#19がUDPベースプロトコルで送信されるようプロトコル指定テーブル79Bを更新する。
仮想ソケット処理部74は、プロキシ処理部73から受信したデータパケットに共通シーケンス番号を共通シーケンス番号付与部741によって付与し、当該データパケットを各送信ソケットバッファ751U及び751Tの双方に書き込む(処理P116)。例えば、仮想ソケット処理部74は、共通シーケンス番号#13〜#15を付与したデータパケット#13〜#15を各送信ソケットバッファ751U及び751Tの双方に書き込む。
したがって、各プロトコル送信処理部752U及び752Tは、それぞれ、同じデータパケット#13〜#15を、対応する送信ソケットバッファ751U及び751Tから読み出すことになる。各プロトコル送信処理部752U及び752Tは、それぞれ、読み出したデータパケット#13〜#15を、対応するプロトコルのデータパケット(図12及び図13参照)に変換して、パケットフィルタ部753へ転送する。
パケットフィルタ部753は、各プロトコル送信処理部752U及び752Tから無線IF77へ出力されようとしているデータパケットを、図11に例示したプロトコル指定テーブル79Bを参照してフィルタリングする。
ここで、プロトコル指定テーブル79Bは、データパケット#10〜#14はTCPベースプロトコルで送信し、以降のデータパケット#15〜#19・・・はUDPベースプロトコルで送信するよう更新されている。
したがって、パケットフィルタ部753は、図20及び図21に例示するように、TCPベースプロトコル送信処理部752Tから受信されるデータパケット#13及び#14の通過を許可する(処理P123及びP124)。また、パケットフィルタ部753は、その後にTCPベースプロトコル送信処理部752Tから受信されるデータパケット#15以降のデータパケットを破棄する。
これに対し、UDPベースプロトコル送信処理部752Uから受信されるデータパケット#13及び#14については、パケットフィルタ部753おいて破棄される。また、パケットフィルタ部753は、その後にUDPベースプロトコル送信処理部752Uから受信されるデータパケット#15以降の通過を許可する(処理P125)。
なお、データパケットをパケットフィルタ部753へ送信した各プロトコル送信処理部752U及び752Tは、それぞれ、無線アクセス網30でのパケットロスに備えて再送バッファ755U及び755Tにそれぞれ送信済みのデータパケットを保持している。
当該データパケットについての確認応答がWO#2から一定時間以上経過しても通知されない場合、対応するプロトコル送信処理部752U又は752Tは、送信済みのデータパケットの再送を実施することになる。
しかし、上述したパケットフィルタ部753でのパケットフィルタリングによって破棄されたデータパケットについては、確認応答が通知されないことになるので、無用なデータパケットの再送が実施されてしまうことになる。
このような無用な再送を防ぐために、パケットフィルタ部753は、プロトコル指定テーブル79Bに従って意図的に破棄したデータパケットの送信元(プロトコル送信処理部752U又は752T)に対し、再送をキャンセルする通知を与える。当該通知を受けたプロトコル送信処理部752U又は752Tは、再送バッファ755U又は755Tに保持した該当データパケットを削除する。
さて、上述のごとくWO#1からTCPベースプロトコルで送信されたデータパケット#13及び#14、並びに、UDPベースプロトコルで送信されたデータパケット#15以降のデータパケットは、送信された順序でWO#2にて受信されるはずである。しかし、例えば無線アクセス網30のトラフィック状況によっては受信順序が送信順序と整合しないこともある。
例えば、WO#2の受信処理部92において、データパケット#13が受信された後、データパケット#14よりも先にデータパケット#15が受信されたとする。この場合、仮想ソケット処理部94は、UDPベースプロトコルのデータパケット#15をUDP受信ソケットバッファ922Uから読み出した後、TCPベースプロトコルのデータパケット#14をTCP受信ソケットバッファ922Tから読み出すことになる。
そのため、仮想ソケット処理部94は、リオーダリング処理部942によって、共通シーケンス番号を基に、受信データパケットのプロキシ処理部95への転送順序を制御(修正)する。例えば、リオーダリング処理部942は、データパケット#13を読み出した後に共通シーケンス番号が不連続となるデータパケット#15を読み出すと、当該データパケット#15をリオーダリングバッファ943へいったん格納する(処理P203)。
その後に、データパケット#14がTCP受信ソケットバッファ922Tから読み出されると、リオーダリング処理部942は、当該データパケット#14に含まれるデータ(ペイロード)をプロキシ処理部95へ転送する。続いて、リオーダリング処理部942は、リオーダリングバッファ943に格納したデータパケット#15に含まれるペイロードをプロキシ処理部95へ転送する。このようにして、リオーダリング処理部942は、データパケットのWO#1からの送信順序を保証するようにデータパケットの受信順序を修正する(処理P204)。
プロキシ処理部95は、仮想ソケット処理部94から受信したデータ(ペイロード)をTCP処理部96へ転送し、TCP処理部96は、受信したデータをサーバ50との間に有線IF97を介して確立されたTCPセッションで送信する。
次に、無線アクセス網30の通信品質が更に低下し、既述のように周期的に実施されている品質計測の結果、WO#1の制御部78が、廃棄率=0.01%、RTT=150msという測定結果を取得したとする。
制御部78は、当該計測結果を基に、図10に例示したプロトコル選択テーブル79Aを参照すると、パケット廃棄率が、増加する方向にCRから外れたことを検出する(処理P117)。
この場合、制御部78は、プロトコル選択テーブル79Aから、TCPベースプロトコルよりもUDPベースプロトコルでデータパケットを送信した方が高い平均スループットを得られると判断する。
当該判断に応じて、制御部78は、仮想ソケット処理部74に対し、UDPベースプロトコルに対応するUDP送信ソケットバッファ751Uにデータパケットを書き込むよう指示する。別言すると、データパケットを各プロトコルに対応した送信ソケットバッファ751U及び751Tの双方に書き込むことは停止される。
当該指示に応じて、仮想ソケット処理部74は、プロキシ処理部73から受信したデータパケットに共通シーケンス番号を付与し、UDP送信ソケットバッファ751Uに当該データパケットを書き込む(処理P118)。例えば図21には、共通シーケンス番号#19以降のデータパケットがUDP送信ソケットバッファ751Uに書き込まれることを表している。
UDP送信ソケットバッファ751Uに書き込まれたデータパケットは、UDPベースプロトコル送信処理部752Uによって読み出される。UDPベースプロトコル送信処理部752Uは、読み出したデータパケットをUDPベースプロトコルのデータパケット(図12参照)に変換して、パケットフィルタ部753に転送する。
パケットフィルタ部753は、図11に例示したプロトコル指定テーブル79Bを参照して、プロトコル指定テーブル79Bに従って、UDPベースプロトコル送信処理部752Uから受信したデータパケットのフィルタリングを行なう。
例えば、図11に例示するプロトコル指定テーブル79Bでは、共通シーケンス番号#19以降の共通シーケンス番号をもつデータパケットをUDPベースプロトコルで送信することが指定されている。そのため、パケットフィルタ部753は、データパケット#19以降のデータパケットの送信を許可し、無線IF77へ通過する(処理P127及びP128)。
なお、上述した例では、パケット廃棄率が変化した場合について説明したが、RTTが変化することで平均スループットが変化する場合や、パケット廃棄率及びRTTの双方が変化することで平均スループットが変化する場合にも対応可能である。例えば、パケット廃棄率やRTT等の通信品質の指標となるパラメータに応じたプロトコル選択テーブル120(又は218)を用意すればよい。
また、上述した例は、アップストリームに着目した動作例であるが、ダウンストリームの動作例についても上述した例と同様と考えてよい。例えば、ダウンストリームの動作例は、図19〜図21において、無線端末10及びサーバ50をそれぞれサーバ50及び無線端末10に読み替え、かつ、WO#1及びWO#2をそれぞれWO#2及びWO#1に読み替えた動作に相当すると捉えてよい。
(制御部動作例)
次に、図22を参照して、WO#1における制御部78の動作例について説明する。
WO#1において、仮想ソケット処理部74の共通シーケンス番号付与部741は、プロキシ処理部73からデータパケットを受信する毎に、所定のデータサイズの単位で共通シーケンス番号を付与する。なお、所定のデータサイズは、MTU(Maximum Transmission Unit)から共通シーケンス番号のサイズを除いたサイズとしてよい。
仮想ソケット処理部74は、共通シーケンス番号付与部741が共通シーケンス番号をデータパケットに付与する度に、付与した共通シーケンス番号を制御部78に通知する。制御部78は、仮想ソケット処理部74から当該通知を受けると(処理P51)、品質計測部756U及び756Tが周期的に計測し更新している通信品質の測定結果を参照する(処理P52)。
制御部78は、測定結果を基にプロトコル選択テーブル79Aを参照して、UDPベース及びTCPベースの各プロトコルの推定スループットを求める(処理P53)。また、制御部78は、測定結果(例えば、パケット廃棄率等)がCRに入っているかどうかをチェックする(処理P54)。
測定結果がCRに入っていなければ(処理P54でNoの場合)、制御部78は、UDPベースプロトコルの推定スループットがTCPベースプロトコルの推定スループットよりも大きいか否かを判定する(処理P55)。
判定の結果、UDPベースプロトコルの推定スループットがTCPベースプロトコルの推定スループット以下であったとする(処理P55でNo)。この場合、制御部78は、プロトコル指定テーブル79Bに、仮想ソケット処理部74から通知された共通シーケンス番号のデータパケットをTCPベースプロトコルで送信することを登録する(処理P61)。また、制御部78は、仮想ソケット処理部74に対し、当該共通シーケンス番号のデータパケットを、各送信ソケットバッファ751U及び751Tのうち、TCP送信ソケットバッファ751Tに対してのみ書き込むよう指示する(処理P62)。
一方、処理P55での判定の結果、UDPベースプロトコルの推定スループットがTCPベースプロトコルの推定スループットよりも大きい場合(処理P55でYesの場合)、制御部78は、以下の処理P71及びP72を実施する。
例えば、制御部78は、プロトコル指定テーブル79Bに、仮想ソケット処理部74から通知された共通シーケンス番号のデータパケットをUDPベースプロトコルで送信することを登録する(処理P71)。また、制御部78は、仮想ソケット処理部74に対し、当該共通シーケンス番号のデータパケットを、各送信ソケットバッファ751U及び751Tのうち、UDP送信ソケットバッファ751Uに対してのみ書き込むよう指示する(処理P72)。
これに対し、処理P54において測定結果がCRに入っている場合(処理P54でYesの場合)、制御部78は、UDPベースプロトコルの推定スループットがTCPベースプロトコルの推定スループットよりも大きいか否かを判定する(処理P56)。
判定の結果、UDPベースプロトコルの推定スループットがTCPベースプロトコルの推定スループット以下であった場合(処理P56でNoの場合)、制御部78は、以下の処理P81及びP83を実施する。
例えば、制御部78は、プロトコル指定テーブル79Bに、仮想ソケット処理部74から通知された共通シーケンス番号のデータパケットをTCPベースプロトコルで送信することを登録する(処理P81)。また、制御部78は、仮想ソケット処理部74に対し、当該共通シーケンス番号のデータパケットをUDP送信ソケットバッファ751U及びTCP送信ソケットバッファ751Tの双方に書き込むよう指示する(処理P83)。
これに対し、処理P56での判定の結果、UDPベースプロトコルの推定スループットがTCPベースプロトコルの推定スループットよりも大きい場合(処理P56でYesの場合)、制御部78は、以下の処理P82及びP83を実施する。
すなわち、制御部78は、プロトコル指定テーブル79Bに、仮想ソケット処理部74から通知された共通シーケンス番号のデータパケットをUDPベースプロトコルで送信することを登録する(処理P82)。また、制御部78は、仮想ソケット処理部74に対し、当該共通シーケンス番号のデータパケットをUDP送信ソケットバッファ751U及びTCP送信ソケットバッファ751Tの双方に書き込むよう指示する(処理P83)。
以上のようにして、制御部78は、通信品質の測定結果に応じて、データパケットを書き込む送信ソケットバッファ751U及び751Tを適応的に選択制御する。これにより、無線端末10(WO#1)は、無線アクセス網30の通信品質に応じた適切なプロトコルでデータパケットを送信することができる。したがって、WO#1及びWO#2の間の通信性能(例えば、平均スループット)の向上を図ることができる。
また、CR内では、送信ソケットバッファ751U及び751Tの双方にデータパケットを書き込むので、UDPベース及びTCPベースのプロトコル間の切り替えを最小限のタイムラグで、また、パケットロスを発生させずに実施することが可能である。
なお、上述した例は、アップストリームについてのWO#1における制御部78に着目した動作例であるが、ダウンストリームについてのWO#2における制御部98の動作例も、上述した例と同様でよい。
(第2実施形態)
図23は、第2実施形態に係る通信システム1の構成例を示すブロック図である。図23に例示する通信システム1の構成は、例えば図6及び図8において例示したパケットフィルタ部753を、WO#1に備えず、代替的に、WO#2に備えた構成に相当する。別言すると、第2実施形態では、第1実施形態においてアップストリームの送信側であるWO#1で実施していたパケットフィルタリングを、受信側であるWO#2において実施する。
そのため、第2実施形態のWO#1では、WO#1の仮想ソケット処理部74から各プロトコルに対応した送信ソケットバッファ751U及び751Tの双方に書き込まれたデータパケットが、フィルタリングされずに各プロトコルでWO#2へ送信される。
ただし、第2実施形態では、WO#1の制御部78が、WO#2の制御部98とネゴシエーションメッセージを交換することにより、WO#1におけるプロトコル指定テーブル79Bの内容をWO#2に通知する。
WO#2の制御部98は、通知されたプロトコル指定テーブル79Bの内容に従って、どの共通シーケンス番号をもつデータパケットを通過させ破棄するかをWO#2のパケットフィルタ部753に指示する。
パケットフィルタ部753は、制御部98からの指示に従い、採用しないプロトコルのデータパケットを破棄する。この際、パケットフィルタ部753は、破棄したパケットに対する再送をWO#1に求めないよう、WO#2の各プロトコル受信処理部925U及び925Tに対し通知する。
WO#2の各プロトコル受信処理部925U及び925Tは、パケットフィルタ部753から通知された破棄パケットに対しては、あたかも受信したかのように確認応答パケットをWO#1へ返信する。WO#1の各プロトコル送信処理部752U及び752Tでは、確認応答パケットを受信すると、再送バッファ755U及び755Tに保持した該当データパケットを削除する。これにより、第1実施形態と同様に、WO#2のパケットフィルタ部753で意図的に破棄されたデータパケットについての再送がキャンセルされる。
以上のように、パケットフィルタを受信側で実施することによっても、第1実施形態と同様の作用効果を得ることができる。
なお、他の動作(処理)については、第1実施形態と同様である。また、上述した例は、アップストリームの動作例であるが、ダウンストリームの動作についても上述した例と同様と考えてよい。例えば、ダウンストリームについては、送信側であるWO#2にはパケットフィルタ部を備えず、代替的に、受信側であるWO#1にパケットフィルタ部を備えればよい。
(第3実施形態)
次に、図24を参照して、第3実施形態について説明する。図24は、図10に例示したプロトコル選択テーブル79A(99A)の変形例を示す図である。図10にCRを例示したが、CRの決め方によって、UDPベース及びTCPベースの各プロトコルの送信ソケットバッファ751U及び751Tに書き込み可能なデータ量が決まる。
そのため、CRは、例示的に、送信側のWO#1(又は、WO#2)が搭載するメモリサイズに応じて可変としてよい。例えば、CRは、以下の式(2)に例示するように設計してもよい。なお、式(2)において、pは廃棄率(%)、TはWO#1(又は、WO#2)が搭載する総メモリサイズ(ギガバイト)、NはWO#1(又は、WO#2)が扱う通信セッションの数(別言すると、仮想ソケットの数)、Mは、T/Nで表される、セッションあたりのメモリサイズ(ギガバイト)をそれぞれ表す。
上記の式(2)によると、図24に例示するように、搭載メモリサイズが大きいほどCRが広くなる。なお、図24には、例示的に、搭載メモリサイズが1ギガバイトの場合のCR#1と、搭載メモリサイズが10ギガバイトの場合のCR#2と、を示している。
例えば、無線基地局100と無線端末10とでは、メモリサイズが異なり、また、扱う通信セッションは無線端末10よりも無線基地局100の方が多いと考えられる。したがって、無線基地局100と無線端末10とで、メモリサイズ及び扱う通信セッション数に応じてCRを最適化することが可能となり、それぞれに適したプロトコル切り替えを実現可能である。
(第4実施形態)
CRは、下記の式(3)に例示するように、WO#1(又は、WO#2)のメモリ使用率m(%)に応じて可変にしてもよい。
式(3)において、αは、式(4)で表される、廃棄率pの時間変化(時間微分)を表す。また、式(3)において、Mはセッションあたりのメモリサイズ(ギガバイト)を表す。更に、図25(B)に模式的に例示するように、wは仮想ソケット処理部74(又は、94)による送信ソケットバッファ751U及び751T(又は、931U及び931T)へのデータ書き込みレートを表す。また、sはWAN30へのデータ出力(送信)レートを表す。
ただし、データ書き込みレート(w)は、仮想ソケット処理部74(又は、94)へのデータ入力レートと同じであると仮定している。また、WAN30へのデータ送信レート(s)は、送信ソケットバッファ751U及び751T(又は、931U及び931T)からのデータ読み出しレートと同じであると仮定している。
メモリには、入力レート(w)の入力データに対し、UDP及びTCPそれぞれの送信ソケットバッファ751U及び751T(又は、931U及び931T)に書き込むため2wのレートで書き込むのに対し、レートsでデータが減る。従って、2w−sの割合でメモリにデータが蓄積する。
メモリ使用率をmで表すと、(100−m)Mのメモリが空き容量として利用可能である。2w−sの割合でデータが蓄積するので、t=(100−m)M/(2w−s)秒の間はデータを蓄積できる。ここで、廃棄率pの時間変化がαであるため、α×(100−m)/(2w−s)だけ廃棄率pが変化してもデータをバッファに蓄積可能である。プロトコル切替えポイントpの前後にα×(100−m)/(2w−s)を均等に分配するため、2で割ると、式(3)が得られる。
上記の式(3)によると、図25(A)に例示するように、メモリ使用率(m)が低いほど(別言すると、空きメモリサイズが多いほど)CRが広くなる。なお、図25(A)には、例示的に、空きメモリサイズが1ギガバイトの場合のCR#3と、空きメモリサイズが10ギガバイトの場合のCR#4と、を示している。
したがって、第3実施形態と同様に、無線基地局100と無線端末10とで、それぞれの処理能力及び扱う通信セッション数に応じてCRを最適化することが可能となり、それぞれに適したプロトコル切り替えを実現可能である。
(第5実施形態)
図26は、第5実施形態に係る通信システム1の一例を示すブロック図である。図26に示す通信システム1は、図4に例示した構成に比して、第1の無線基地局の一例であるWiFi基地局100に加え、第2の無線基地局101を備える点が異なる。
第2の無線基地局101の一例は、LTE(Long Term Evolution)やLTE−Advanced等の規格に準拠した無線基地局101である。そのため、以下、無線基地局101を「LTE基地局101」と称することがある。
LTE基地局101は、WAN最適化装置90(WO#2)と例えば有線により通信可能に接続されてよい。LTE基地局101は、無線通信が可能な無線エリアを提供する。無線エリアは、カバレッジあるいはセル等とも称される。セルには、マクロセルやスモールセル(例えば、フェムトセル、ピコセル、マイクロセル)等が含まれてよい。
図26に例示する通信システム1では、無線端末10は、WiFi基地局100が提供する無線エリアとLTE基地局101が提供する無線エリアとの双方に位置する場合、双方の無線基地局100及び101を介してサーバ50にアクセスすることが可能である。別言すると、無線端末10は、WiFi回線とLTE回線との双方を介してサーバ50と通信することが可能である。なお、「回線」は「パス」や「チャネル」と称してもよい。
この場合、WiFi回線とLTE回線とで異なる通信プロトコルを用いることが可能である。例えば、WO#1とWO#2との間の通信に関して、WiFi回線ではUDPベースプロトコルを用い、LTE回線ではTCPベースプロトコルを用いることができる。
ここで、例えば、LTE回線にてTCPベースプロトコルを用いて各WO#1及び#2が通信している時に、無線端末10の移動やLTE回線の障害発生等に伴ってLTE回線が不通になったとする。この場合、無線端末10は、WiFi回線でサーバ50と通信を継続することが可能である。ただし、WO#1及びWO#2は、LTE回線で使用していたTCPベースプロトコルをWiFi回線で使用するUDPベースプロトコルに切り替える。
このような回線切り替えに応じたプロトコル切り替えを実現するWO#1及びWO#2の構成例を図27に示す。ただし、図25には、アップストリームに着目した場合の、送信装置としてのWO#1及び受信装置としてのWO#2の構成例を示しており、ダウンストリームの構成については図示を省略している。
図27に示すWO#1は、既述の各実施形態に比して、UDPベース及びTCPベースの各プロトコル送信処理部752U及び752Tのそれぞれに生存確認(キープアライブ確認)部757U及び757Tを備える点が異なる。
また、図27に示すWO#2は、既述の各実施形態に比して、UDPベース及びTCPベースの各プロトコル受信処理部921U及び921Tのそれぞれに生存確認(キープアライブ確認)部927U及び927Tを備える点が異なる。
更に、図27に示すWO#1及びWO#2は、既述の各実施形態に比して、既述のパケットフィルタ部753及びプロトコル選択テーブル79A(99A)を備えなくてよい点が異なる。
送信装置としてのWO#1の各キープアライブ確認部757U及び757Tは、それぞれ、図28に例示するようなキープアライブメッセージを周期的に受信装置としてのWO#2へ送信する。キープアライブメッセージには、図28に例示するように、メッセージ(リクエスト)を識別する識別番号(例えば、4バイト)と、当該メッセージの送信時刻を示すタイムスタンプ(例えば、4バイト)と、が含まれてよい。
WO#2では、各プロトコル受信処理部921U及び921Tにおいてそれぞれキープアライブメッセージが受信されると、キープアライブ確認部927U及び927Tが、図29に例示するようなキープアライブ応答メッセージをWO#1へ送信する。図28と図29と比較してみれば分かるとおり、キープアライブ確認部927U及び927Tは、それぞれ、受信したキープアライブメッセージの内容をキープアライブ応答メッセージの内容としてコピーして送信してよい。
WO#1におけるキープアライブ確認部757U及び757Tは、それぞれ、キープアライブ応答メッセージがキープアライブメッセージを送信してから所定時間内に受信されないと、その旨を制御部78に通知する。
制御部78は、TCPベース及びUDPベースの各プロトコルのそれぞれについて、キープアライブ応答メッセージの不達通知を監視し、所定回数連続して不達通知を検出すると、対応するプロトコルでの通信が不能であると判断する。
例えば、上述したようにLTE回線が不通になると、TCPベースプロトコルでのキープアライブ応答メッセージが受信されなくなるので、制御部78は、TCPベースプロトコルでの通信が不能であると判断する。なお、通信が不能であると判断される、キープアライブ応答メッセージの連続不達回数は、特に限定されないが、例示的に、5回に設定してよい。
ただし、制御部78は、キープアライブ応答メッセージの不達通知を一度でも受信すると、仮想ソケット処理部74に対し、以降にプロキシ処理部73から受信したデータパケットをUDP送信ソケットバッファ751U及びTCP送信ソケットバッファ751Tの双方に書き込むよう指示を与える。併せて、制御部78は、両送信ソケットバッファ751U及び751Tに書き込み指示を与えたデータパケットはUDPベース及びTCPベースの双方のプロトコルで送信することをプロトコル指定テーブル79Bに登録する。
例えば、TCPベースプロトコル送信処理部752Tにおけるキープアライブ確認部757Tが、共通シーケンス番号#12の付与されたデータパケット#12を送信したところで、キープアライブ応答メッセージの不達が制御部78において検出されたとする。この場合、制御部78は、仮想ソケット処理部74に対し、データパケット#13以降のデータパケットを両送信ソケットバッファ751U及び751Tに書き込むよう指示し、当該指示に応じてプロトコル指定テーブル79Bを更新する。
本実施形態では、WO#1にパケットフィルタ部753が備えられていないので、各送信ソケットバッファ751U及び751Tに書き込まれたデータパケットは、それぞれ、UDPベース及びTCPベースの各プロトコルでWO#2へ送信される。
しかし、上述したようにLTE回線が不通になっている場合、共通シーケンス番号#13以降が付与された、TCPベースプロトコルの各データパケットは全てパケットロスすることになる。
そして、WO#1の制御部78は、キープアライブ応答メッセージの連続不達通知回数が所定回数に達したことを検出すると、TCPベースプロトコルでの通信が不能と判断する。当該判断に応じて、制御部78は、仮想ソケット処理部74に対し、以降にプロキシ処理部73から受信されるデータパケットの書き込み対象をUDP送信ソケットバッファ751Uに切り替える指示を与える。
例えば、キープアライブ応答メッセージの連続不達通知回数が所定回数に達したタイミングが、仮想ソケット処理部74がデータパケット#18を両送信ソケットバッファ751U及び751Tに書き込んだ後であったとする。この場合、仮想ソケット処理部74は、制御部78からの指示に応じて、データパケット#19以降のデータパケットを、両送信ソケットバッファ751U及び751Tのうち、UDP送信ソケットバッファ751Uのみに書き込む。また、制御部78は、データパケット#19以降のデータパケットはUDPベースプロトコルで送信することをプロトコル指定テーブル79Bに登録する。
その一方で、WO#1の制御部78は、WO#2の制御部98に対し、ネゴシエーションメッセージを用いてプロトコル指定テーブル79Bの内容を通知する。別言すると、制御部78は、データパケット#13〜#18についてはUDPベース及びTCPベースの双方のプロトコルで送信し、かつ、データパケット#19以降のパケットについてはUDPベースのプロトコルに切り替えて送信することを通知する。WO#2は、通知されたプロトコル指定テーブル79Bの内容を自装置のプロトコル指定テーブル99Bとして例えばメモリ302(図9参照)に登録する。
WO#2では、TCPベースプロトコルのデータパケット#13以降のパケットロスがTCPベースプロトコル受信処理部921Tにて検出される。しかし、UDPベースプロトコル受信処理部921UにてUDPベースプロトコルでデータパケット#13以降のパケットを受信していれば、WO#1に対して該当パケットの再送要求は実施せずに受信成功と判断する。なお、UDPベースプロトコル受信処理部921UにてUDPベースプロトコルでデータパケット#13以降のパケットを受信しているか否かは、制御部98を通じてTCPベースプロトコル受信処理部921Tに通知してよい。
そして、WO#2の制御部98は、プロトコル指定テーブル99Bを参照することで、共通シーケンス番号#19以降のデータパケットはUDPベースプロトコルで受信されることを認識する。これにより、制御部98は、UDPベースプロトコル受信処理部921Uに対し、データパケット#19以降のパケットから抽出したデータ(ペイロード)をUDP受信ソケットバッファ922Uに書き込むよう指示する。
以上のようにして、無線端末10とサーバ50との間を経由する回線の切り替えに応じたプロトコル切り替えを、既述の各実施形態と同様に、遅滞無く適切に実施することが可能である。
なお、上述した例は、アップリンクに着目したプロトコル切り替え動作であるが、既述の各実施形態でも付言したとおり、ダウンリンクのプロトコル切り替え動作についても、上述した例と同様にして実施可能である。
(第6実施形態)
上述した各実施形態では、プロトコル切り替えを実施するタイミングが、各送信ソケットバッファ751U及び751T(又は、931U及び931T)に書き込まれるデータパケット間の境界(バウンダリ)に一致している場合について説明した。しかし、通信プロトコルによっては、プロトコル切り替えタイミングとデータパケット間の境界とが一致しない場合もある。そのような場合には、制御部78(又は、98)は、プロトコル切り替えタイミングを遅らせる等して補正するようにしてもよい。
プロトコル切り替えタイミングとデータパケット間の境界との不一致が生じ得る通信プロトコルの一例として、送信データに冗長符号を付加し、冗長化したデータを送信するプロトコルが挙げられる。そのような通信プロトコルの非限定的な一例としては、ランダムパリティストリーム(RPS)と呼ばれるプロトコルが挙げられる。
図30に、RPSを用いた通信の概要を模式的に例示する。図30に例示するように、送信装置400は、送信データ(例えば、#1〜#4,…)に対し符号化行列を排他論理和演算(XOR)することで、冗長化データ(例えば、#A〜#E,…)を生成する。この冗長化データは、送信データに対して冗長符号が付加されているため、データサイズが元の送信データのサイズよりも大きくなる。送信装置400は、生成した冗長化データを受信装置500へ送信する。
受信装置500は、受信した冗長化データに対して再度XOR演算を行なうことで、元の送信データを得る。RPSでは、冗長化データの一部がネットワーク(例えば、WAN30)で失われても、他の受信パケットに含まれる冗長化データから送信データを復元できる。
そのため、RPSでは、一定量のパケットロスに対しては再送要求が不要であるというメリットがある。なお、冗長化データを生成するために用いる符号化行列や演算方法は、上記に限定されず、他の行列や演算方法を用いてもよい。
ここで、RPSでは、上述のような冗長符号化を行なうため、送信データのサイズは一定とされる。そのため、例えば第1実施形態において、各送信ソケットバッファ(符号省略)にデータが書き込まれ始めた後、プロトコル切り替えタイミングが到来しても、当該タイミングが送信データの境界(バウンダリ)と一致しないことがある。
例えば図31に示すように、仮想ソケット処理部74が共通シーケンス番号#13のデータパケット#13を受信したタイミングで、制御部78においてパケット廃棄率がCRに入ったことが検出されたとする。なお、図31は、第1実施形態の図8と対応する図であり、図8と同様に、アップストリームに着目した場合の、送信装置としてのWO#1及び受信装置としてのWO#2の構成例を示し、ダウンストリームの構成については図示を省略している。
この場合、仮想ソケット処理部74は、データパケット#13以降のデータパケットを各送信ソケットバッファ751U及び751Tの双方に書き込み始める。
そして、制御部78は、例えばパケット廃棄率がプロトコル切り替えポイント(図10参照)に到達したタイミング(例えば、データパケット#16の書き込みタイミング)でプロトコル切り替えを実施しようとする(図32参照)。
しかし、例えば、データパケット#11〜#14が第1の送信データ#1を成し、データパケット#15〜#18が第2の送信データ#2を成す場合、データパケット#16の書き込みタイミングは、第2の送信データ#2の書き込み途中のタイミングに相当する。
そこで、制御部78は、図32に例示するように、プロトコル切り替えタイミングを例えば第2の送信データ#2を成す最終パケット#18の書き込みが完了するタイミングに補正し、補正したタイミングを例えばプロトコル指定テーブル79Bに設定する。
なお、廃棄率がCRを超えない範囲にある間は、プロトコル切り替えタイミングを補正したタイミング(補正プロトコル切り替えタイミング)に設定してよい。また、送信データをソケットバッファに書き込んでいる途中で廃棄率がCRを外れた場合は、その一連のデータに限り廃棄率がCRを外れていても、一番近いバウンダリまで両ソケットバッファに書き続けるようにしてもよい。
その後、制御部78において、プロトコル選択テーブル79Aに基づき、例えばパケット廃棄率がCRを抜けたことが検出されてプロトコルが選択されると、仮想ソケット処理部74は、選択プロトコルの送信ソケットバッファに書き込み対象を切り替える。この場合も、当該切り替えの際に書き込み途中の送信データがあれば、仮想ソケット処理部74は、書き込み途中の送信データのバウンダリが到来するまで書き込みを継続する。
なお、その他の動作(処理)は、既述の実施形態と同様でよい。また、図31には、アップストリームに着目した動作例を示しているが、既述の各実施形態でも付言したとおり、ダウンストリームについても、上述した例と同様にして実施可能である。
以上のように、本実施形態によれば、例えば1つのデータとして処理されるべき送信データと他の送信データとのバウンダリに応じて、プロトコル切り替えタイミングを補正することができる。したがって、既述の各実施形態と同様の作用効果が得られるほか、1つの送信データの途中でプロトコルが切り替えられてしまって当該送信データが正しく送受信されなくなることを防止できる。
(その他)
上述した各実施形態では、TCPベースプロトコルからUDPベースプロトコルへの切り替えについて説明したが、逆の切り替えについても上述した各実施形態と同様にして実施可能である。また、上述した各実施形態では、TCPベース及びUDPベースというベースの異なるプロトコル間の切り替え動作について説明したが、ベースが同じプロトコル間の切り替え動作についても、上述した各実施形態と同様に実施可能である。
例えば、TCPベースプロトコルを別のTCPベースプロトコルに切り替えることも可能であるし、UDPベースプロトコルを別のUDPベースプロトコルに切り替えることも可能である。更に、上述した各実施形態では、UDPベースとTCPベースの2つのプロトコル間の切り替えについて説明したが、3つ以上のプロトコル間の切り替えも、上述した各実施形態と同様にして実施可能である。