[本発明の第1の実施形態]
[構成]
図1は、本発明の第一の実施形態に係る通信システム100の構成を示す図である。図1に示すように、通信システム100は、ユーザに携帯される移動機10と、管轄する無線エリア内の移動機10と無線ネットワーク(無線区間)を介して通信可能な基地局20と、基地局20が接続されるコアネットワーク(有線ネットワーク、有線区間)30に接続されるサーバ装置40を有する。移動機10は、基地局20及びコアネットワーク30を介して、サーバ装置40と通信可能である。
本実施形態に係る通信システム100は、IMT-2000(International Mobile Telecommunications-2000)に準拠しており、移動機10及び基地局20は、HSDPA方式の通信機能を実装する。移動機10、基地局20及びサーバ装置40の数は、それぞれ、1以上の任意の数である。
なお、本実施形態では、サーバ装置40は、コアネットワーク30に直接接続されているが、サーバ装置40は、インターネットに接続され、インターネットとコアネットワーク30を接続するゲートウェイ装置を介してコアネットワーク30に接続されてもよい。かかる場合、ゲートウェイ装置が、TCPを終端する機能を有する場合には、本発明は、サーバ装置40の代わりにゲートウェイ装置に適用される。
図2は、本実施形態に係る通信システム100の通信プロトコル構成を示す図である。図2に示すように、トランスポート層以上の層での通信は、移動機10及びサーバ装置40のみで終端され、ネットワーク層以下の層での通信は、通信システム100を構成する全ての装置(例えば、サーバ装置40、基地局30及び移動機10)で終端される。ただし、基地局20は、後述のように、トランスポート層のデータユニットを操作することができる。
本実施形態に係る通信システム100は、無線区間にてビット誤りに対処するための通信処理を行うため、無線区間の伝送遅延が有線区間の伝送遅延よりも大きいという通信特性を有する。また、本実施形態に係る通信システム100は、無線帯域幅が有線帯域幅と比較して狭く動的に変動するという通信特性を有する。
以降の説明のために、ここで、いくつかの変数を定義する。本実施形態において、サーバ装置40と基地局20との間のRTTを「Dwired」とし、基地局20と移動機10との間のRTTを「Dwireless」とする。前述のように、Dwired<Dwirelessである。また、最大無線帯域変動幅を「Bmax」とする。
図3は、基地局20の構成を示すブロック図である。基地局20は、有線インタフェースを介してサーバ装置(送信機)40と接続されており、無線インタフェースを介して移動機(受信機)10と接続されている通信装置である。
図3から明らかなように、基地局20は、一般的なコンピュータと同様に、CPU21が、不揮発性メモリ22に記憶されているプログラムを、RAM23をワークエリアとして実行することによって、各種処理を行う構成となっている。
また、不揮発性メモリ22には、後述の転送通知処理を行わせるための転送通知プログラム221と、トランスポート層よりも下位の通信処理を行わせるプログラム(図示せず)と、プログラムの実行制御を行わせる制御プログラム(図示せず)とが記憶されている。CPU21は、図示しない電源が投入されると不揮発性メモリ22から上記の制御プログラムを読み出して実行する。
無線部24は、移動機10との間で無線信号を送受信するものであり、CPU21から送信すべきデータが供給されると、この送信データにより変調された搬送波を無線区間へ送出し、無線区間を伝播してきた搬送波からデータを復調すると、この受信データをCPU21に供給する。この無線部24及びCPU21により、移動機10との間でのデータの送受信が行われる。
通信インタフェース25は、コアネットワーク30との間で信号を送受信するものであり、CPU21から送信すべきデータが供給されると、この送信データにより変調された信号をコアネットワーク30へ送出し、コアネットワーク30から供給された信号からデータを復調すると、この受信データをCPU21に供給する。この通信インタフェース25及びCPU21により、サーバ装置40との間でのデータの送受信がコアネットワーク30を介して行われる。
CPU21は、データリンク層にて「RLC(Radio Link Control)」に従って、移動機10との間の通信処理を行う。図4は、RLCの「AM(Acknowledge Mode)モード」での送信データの流れを表している。
図4に示すように、上位層から供給されたデータユニット(SDU:Service Data Unit)は、まずSDUバッファ231に格納される。SDUは、送信用キュー232に十分な空きがあれば、SDUバッファ231から取り出され、より小さなデータ単位(PDU:Protocol Data Unit)に分割された後、送信用キュー232に格納される。PDUは、下位層が送信可能ならば、送信用キュー232から取り出され、下位層に送出されるとともに、その複製が、再送用キュー233に格納される。これらの処理は、移動機単位で行われる。
CPU21は、転送通知処理では、SDUバッファ231から取り出されたSDUを監視し、SDUに格納されるTCPセグメントが、無線リンクに送出されたこと、すなわち、有線ネットワーク内から抜けたことをサーバ装置40に通知する。
具体的には、CPU21は、SDUにTCPセグメントが格納されている場合、TCPセグメントのデータの最初と最後のシーケンス番号を取得し、新しく生成した転送通知メッセージにそれらを格納してサーバ装置40へ送信する。
これにより、サーバ装置40は、通知されたシーケンス番号の範囲のデータが有線ネットワーク内から抜けたことが分かる。なお、TCPセグメントの送信に必要なポート番号やIPアドレスなどの情報は、取り出されたSDUに格納されるTCP及びIPヘッダから取得できる。
また、SDUバッファ231のサイズは、無線帯域のいかなる変動に対してもバッファ溢れが起こらないように設定される。また、後述のように、サーバ装置40は、基地局20からの転送通知メッセージを受信すると、通知されたデータ量だけ新たにデータを送信する。これにより、TCPセグメントの送信速度を、基地局20にてTCPセグメントが無線リンクに送出される速度と一致させることができる。
しかし、実際には、無線帯域の変化が送信速度に反映されるまでには、基地局20からサーバ装置40までの伝送遅延時間を要し、さらに、その送信速度で基地局20にTCPセグメントが到着するまでには、サーバ装置40から基地局20までの伝送遅延時間がかかる。すなわち、無線帯域の変化が、基地局20へのTCPセグメントの到着速度に反映されるまでには、サーバ装置40と基地局20との間のRTTの時間を要する。
従って、基地局20は、バッファ溢れを回避するために、RTTの間、TCPセグメントの到着速度と無線帯域とのギャップを、送信バッファにて吸収する必要がある。
図5は、時刻「t=t0」において、無線帯域が「B1」から「B2(B1>B2)」に減少した場合の状況を表している。図5に示すように、基地局20は、時刻「t0」から「t0+Dwired」までの間、無線リンクへ送出することのできないデータ量、すなわち、図中の斜線部分に相当するデータ量「(B1−B2)・Dwired」をバッファリングする必要があることが分かる。
基地局20は、いかなる無線帯域変動に対してもバッファ溢れを回避するために、SDUバッファ231のサイズを無線リンクの最大無線帯域変動幅「Bmax」とサーバ装置40と基地局20との間のRTT「Dwired」の積「Bmax・Dwired」以上に設定する。例えば、SDUバッファ231のサイズは「α・Bmax・Dwired」と設定される(ここで、α≧1である)。
上述のように、本実施形態において、基地局20は、通信インタフェース(有線インタフェース)25を介してサーバ装置(送信機)40から送信されたSDU(データユニット)を、無線部(無線インタフェース)24を介して移動機(受信機)10に転送する転送部(通信プログラム)を具備している。
また、基地局20は、無線区間を介して移動機(受信機)10に転送されたデータユニットの識別情報(例えば、TCPセグメントのシーケンス番号、又は、TCPセグメントを構成するデータのシーケンス番号)を、サーバ装置(送信機)40に対して通知する通知部(転送通知プログラム)を具備する。
さらに、基地局20は、サーバ装置(送信機)40との間の伝送遅延(例えば、RTT「Dwired」)と無線部(無線インタフェース)24における最大帯域変動幅(例えば「Bmax」)とに基づいて算出された容量(例えば「(B1−B2)・Dwired」)のデータユニットを蓄積することができる蓄積部(送信バッファ)を具備する。
図6は、サーバ装置40の構成を示すブロック図である。図6から明らかなように、サーバ装置40は、一般的なコンピュータと同様に、CPU41が不揮発性メモリ42に記憶されているプログラムを、RAM43をワークエリアとして実行し、これにより各種処理を行う構成となっている。
また、不揮発性メモリ42には、一般的なTCPに従う通信処理と、後述の輻輳制御処理とをトランスポート層にて行わせるための通信プログラム421と、トランスポートよりも下位の通信処理を行わせるプログラム(図示せず)と、プログラムの実行制御を行わせる制御プログラム(図示せず)とが記憶されている。CPU41は、図示しない電源が投入されると不揮発性メモリ42から上記の制御プログラムを読み出して実行する。
通信インタフェース44は、コアネットワーク30との間で信号を送受信するものであり、CPU41から送信すべきデータが供給されると、この送信データにより変調された信号をコアネットワーク30へ送出し、コアネットワーク30から供給された信号からデータを復調すると、この受信データをCPU41に供給する。通信インタフェース44及びCPU41により、移動機10との間でのデータの送受信がコアネットワーク30を介して行われる。
制御プログラムを実行中のCPU41は、移動機10からの要求に応じて、通信プログラム421を不揮発性メモリ42から読み出して実行する。これにより、CPU41は、トランスポート層にて一般的なTCPに従う通信処理と、以下に述べる輻輳制御処理を行う。
CPU41は、輻輳制御処理では、有線区間(有線ネットワーク)内に滞留する移動機10宛てのデータ量を推定し、当該データの滞留量が一定になるように制御する。CPU41は、基地局20からの転送通知メッセージに基づいて、当該データの滞留量の推定を行う。
サーバ装置40は、転送通知メッセージにより通知された基地局20から移動機10に転送されたデータユニットの識別情報(TCPセグメントを構成するデータのシーケンス番号)を、RAM43の状態領域431内のテーブルにて管理する。
具体的には、図7に示すように、かかるRAM43の状態領域431内のテーブルは、TCPセグメントを構成するデータのシーケンス番号(「HighACK」から「HighDate」まで)と、かかるデータの状態とを関連付けて記憶するものである。
ここで、「HighACK」は、移動機10において受信確認されたデータ(ACKが送信されたデータ)の最大シーケンス番号に「1」を加えたシーケンス番号を表す。また、「HighDate」は、サーバ装置40から送信された移動機10宛てのデータの最大シーケンス番号を表す。また、転送通知メッセージによって通知されたシーケンス番号の状態が「F」と記される。
図7の例では、「HighACK」=10000であり、「HighDate」=24999である。シーケンス番号10000乃至11999、13000乃至14999、16000乃至19999のデータが、既に基地局20から無線ネットワークに転送されて有線ネットワークから抜けたことを示している。
CPU41は、輻輳制御処理において、基地局20からの転送通知メッセージを受信すると、上述のテーブルをスキャンして、状態が「F」でないデータ量をカウントし、カウントされたデータ量を有線ネットワークにおける移動機10あてに送信されたデータの滞留量と推定する。
推定されたデータの滞留量Tが、予め設定された輻輳ウィンドウサイズWよりも小さければ、CPU41は、W−Tの量のデータを新たに送信する。これにより、CPU41は、有線ネットワーク内に滞留するデータ量を一定量に制御することが可能となる。
輻輳ウィンドウサイズWは、無線帯域のいかなる変動に対しても無線リンクのスループットが低下しないように設定される。
図8は、時刻「t=t0」において、無線帯域が「B1」から「B2(B1<B2)」に増加した場合の状況を表している。図8に示すように、TCPセグメントの到着速度が無線帯域「B2」に一致するまで、サーバ装置40と基地局20との間のRTT「Dwired」がかかり、その間、「B2−B1」の無線帯域が未使用となる。
ここで、無線リンクの利用率を低下させないためには、未使用分のデータ量、すなわち、図中の斜線部分に相当するデータ量「(B2−B1)・Dwired」を予め有線区間に滞留させておく必要がある。
いかなる無線帯域変動に対しても無線リンクの利用率を低下させないために、輻輳ウィンドウサイズWを無線リンクの最大帯域変動幅「Bmax」と、サーバ装置40と基地局20との間のRTT「Dwired」との積「Bmax・Dwired」以上に設定する。すなわち、W=β・Bmax・Dwiredとする(ここで、1≦β≦αである)。
上述の輻輳制御処理は、標準的なTCPに実装されるフロー・輻輳制御処理とは独立に行われる。ただし、サーバ装置40は、上述の輻輳制御処理によってTCPセグメントの送信が許可された場合でも、標準的なTCPに実装されるフロー・輻輳制御処理によって送信が制限されるときには、TCPセグメントの送信を行わない。
本実施形態において、サーバ装置40は、基地局(通信装置)20から移動機(受信機)10に転送されたデータユニットの識別情報(TCPセグメントを構成するデータのシーケンス番号)を取得する識別情報取得部を具備する。
また、サーバ装置40は、基地局20から転送通知メッセージによって取得したデータユニットの識別情報(TCPセグメントを構成するデータのシーケンス番号)に応じて、通信インタフェース(有線インタフェース)44が接続されている有線ネットワーク(有線区間)における基地局(通信装置)20に対して送信されたデータユニット(TCPセグメント)の滞留量を推定する滞留量推定部を具備する。
また、サーバ装置40は、推定されたデータユニットの滞留量に応じて、基地局(通信端末)20に対してデータユニット(TCPセグメント)を送信するタイミングを制御するタイミング制御部を具備する。
具体的には、かかるタイミング制御部は、基地局(通信装)20との間の伝送遅延(例えば、RTT「Dwired」)と、基地局20における無線部(無線インタフェース)24の最大帯域変動幅(例えば「Bmax」)とに基づいて算出された容量(例えば「(B1−B2)・Dwired」)に、上述の有線ネットワークにおける基地局(通信装置)20に対して送信されたデータユニットの滞留量を制限するように、基地局(通信端末)20に対してデータユニットを送信するタイミングを制御する。
[動作]
図9乃至図11を参照して、上述した構成の通信システム100の動作について説明する。ただし、移動機10とサーバ装置40との間には、基地局20を中継装置としてTCPコネクションが確立されているものとする。
よって、以降の説明において、基地局20のCPU21は、既に不揮発性メモリ22から制御プログラム及び転送通知プログラム221を読み出して実行しており、サーバ装置40のCPU41は、既に不揮発性メモリ42から制御プログラム及び通信プログラム421を読み出して実行しているものとする。
また、以降の動作例では、通信システム100の有線区間及び無線区間のRTTを、それぞれ10msec及び50msecに、最大無線帯域及び最小無線帯域を、それぞれ1.6Mbps及び160kbpsに想定した。これらの値は、説明の容易さから選んだもので、IMT-2000に準拠した移動通信システムで実際に用いられる値とは異なる。
通信システム100の特性から、基地局20のSDUバッファサイズ及びサーバ装置40の輻輳ウィンドウサイズ「W」は、共に2Kbyte(≧{(1,600,000−160,000)×0.01}/8)に設定される。
また、本実施形態では、TCPの初期シーケンス番号(iss)を「0」とし、最大セグメントサイズ(MSS)を「1Kbyte」とし、初期輻輳ウィンドウサイズを「1Kbyte」ととし、TCPコネクションの送受信バッファは、十分に大きく、TCPセグメントの送信は、標準的なTCPに実装されるフロー制御処理によっては制限されないものとした。
まず、以降の説明において参照する新たな図面について説明する。図9は、転送通知プログラム221を実行中のCPU21により行われる転送通知処理の流れを示すフローチャートである。図10は、通信プログラム421を実行中のCPU41により行われる輻輳制御処理の流れを示すフローチャートである。図11は、通信システム100により行われる通信の一例を示すシーケンス図である。
図11において、サーバ装置40側には、括弧外に下線無しで表記されている「有線ネットワーク内に送信されるTCPセグメントのシーケンス番号」と、括弧外に下線付きで表記されている「転送通知メッセージにより通知されたデータのシーケンス番号」と、括弧内の左側に表記されている「転送通知メッセージ受信後又はデータ送信後の有線ネットワークに送信可能なデータ量「W−T」の値」と、括弧内の右側に表記されている「標準的なTCPの輻輳ウィンドウサイズ」とが記載されている。
また、移動機10側には、サーバ装置40から送信されたデータユニットを受信した旨を通知する確認応答ACKの番号が記載されている。また、基地局20側には、送信バッファに蓄積されているTCPセグメントのシーケンス番号が記載されている。
また、図11に示すように、通信システム100の無線帯域は、時刻「t1」において「160Kbps」から「1.6Mbps」に変動し、時刻「t2」において「1.6Mbps」から「160Kbps」に変動する。
以下、図11に示す通信システム100により行われる通信について、図9に示す基地局20の動作及び図10に示すサーバ装置40の動作を参照しながら説明する。
サーバ装置40のCPU41は、移動機10からの要求によりTCPコネクションを確立すると、有線ネットワークにおける移動機10宛てに送信されたデータの滞留量「T」を「0」と設定し、輻輳ウィンドウ「W」を初期輻輳ウィンドウ「W0(=2Kbyte)」と設定するとともに、RAM43内の状態領域431におけるテーブルを初期化する(図10のステップSB1)。
CPU41は、有線ネットワーク内に送信可能なデータ量「W−T」が最大セグメントサイズ(MSS)以上であるか否かを判定する(図10のステップSB4)。
ここで、「W−T(=2000)」≧「MSS(=1000)」であるから、CPU41は、標準的なTCPのフロー・輻輳制御処理がデータの送信を許可しているか否かを判定する(図10のステップSB5)。
標準的なTCPに実装される輻輳制御処理の初期ウィンドウサイズは「1Kbyte」であり、フロー制御処理は、いかなる場合もデータの送信を制限しないと想定しているため、CPU41は、シーケンス番号「0」、データサイズ「1Kbyte」のTCPセグメントを送信する(図10のステップSB6、図11のサーバ装置40側における「0(1000,1000)」)。
また、CPU41は、送信したTCPセグメントを構成するデータのシーケンス番号「0乃至999」を示す状態データをRAM42内の状態領域421におけるテーブルに書き込むとともに、上述のデータの滞留量「T」を「1000」に更新する。ここで、TCPセグメントを構成する各データのデータ量は「1byte」であるものとする(図10のステップSB6)。
さらに、CPU41は、次のTCPセグメントが送信可能であるか否か、すなわち、送信可能なデータ量「W−T」が最大セグメントサイズ「MSS」以上であるか否かを判定する(図10のステップSB4)。
ここで、「W−T(=1000)」≧1000であるから、CPU41は、標準的なTCPのフロー・輻輳制御処理がデータの送信を許可しているか否かを判定する(図10のステップSB5)。
標準的なTCPに実装される輻輳制御処理の初期ウィンドウサイズは「1Kbyte」であり、1Kbyteのデータ(TCPセグメント)が既に送信されているため、CPU41は、かかるTCPセグメント(シーケンス番号「1000」)の送信を見送る。
一方、基地局20のCPU21は、SDUとして供給されたシーケンス番号「0」のTCPセグメントをSDUバッファ231に格納する。
CPU21は、SDUバッファ231には、先に格納された送信待ちのSDUがないため、直ちにSDUを取り出し(図9のステップSA1)、SDUに格納されているデータユニットがTCPセグメントか否かを判定する(図9のステップSA2)。
ここで、SDUに格納されているデータユニットは、TCPセグメント(シーケンス番号「0」)であるため、CPU21は、かかるTCPセグメントに格納されているデータの最初のシーケンス番号「0」及び最後のシーケンス番号「999」を取得し、かかるシーケンス番号が格納された転送通知メッセージを新しく生成してサーバ装置40に送信する(図9のステップSA3)。
また、CPU21は、SDUバッファ231から取り出されたSDUを複数のPDUに分割し、送信用キュー232に格納する。さらに、CPU21は、送信用キュー232に格納されたPDUを、順に下位層に送出する(図11の「PDU(0)」)。CPU21がPDUを下位層に送出することは、PDUを無線リンクに送出することに等しい。
サーバ装置40のCPU41は、基地局20からの転送通知メッセージを受信すると、RAM43の状態領域431に記録されているテーブルにおいて、当該転送通知メッセージによって通知されたデータのシーケンス番号「0乃至999」に対応する状態を「F」に上書きする(図10のステップSB2、図11のサーバ装置40側における「0-999(2000,1000)」)。
CPU41は、更新されたテーブルをスキャンして、TCPセグメントの有線ネットワークにおける滞留量「T」が「0」であることを推定し(図10のステップSB3)、有線ネットワークに送信可能なデータ量「W−T」が「MSS」以上であるか否かを判定する(図10のステップSB4)。
ここで、「W−T(=2000)」≧「1000」であるから、CPU41は、標準的なTCPのフロー・輻輳制御処理がデータの送信を許可しているか否かを判定する(図10のステップSB5)。
ここで、標準的なTCPに実装される輻輳制御処理のウィンドウサイズは「1Kbyte」であり、1Kbyteのデータが既に送信されているため、CPU41は、次のTCPセグメント(シーケンス番号「1000」)の送信を見送る。
図11に示すように、移動機10は、シーケンス番号「0」のTCPセグメント(複数のPDU(0))を受信すると、直ちに、サーバ装置40から送信されたデータユニットを受信した旨を通知する確認応答ACKを返送する。かかるACKに係るACK番号には、次に受信を期待するTCPセグメントのシーケンス番号「1000」が記される。
ACKは、基地局20により転送され、サーバ装置40に到着する。サーバ装置40のCPU41は、ACK番号「1000」のACKを受信すると、標準的なTCPの輻輳制御処理に基づいて輻輳ウィンドウを「2000」に増加させる。
また、CPU41は、ACKにより受信確認されたシーケンス番号「0乃至999」とその状態「F」を示す状態とからなるレコードを、RAM43の状態領域431内のテーブルから削除する(図10のステップSB2)。
CPU41は、かかるテーブルをスキャンして、TCPセグメントの有線ネットワーク内の滞留量「T」が「0」であると推定し(図10のステップSB3)、有線ネットワークに送信可能なデータ量「W−T」が「MSS」以上であるか否かを判定する(図10のステップSB4)。
ここで、「W−T(=2000)」≧「1000」であるから、CPU41は、標準的なTCPフロー・輻輳制御処理がデータの送信を許可しているか否かを判定する(図10のステップSB5)。
標準的なTCPに実装される輻輳制御処理のウィンドウサイズは「2000」であり、先に送信したシーケンス番号「0」のTCPセグメントは受信確認されているため、CPU41は、シーケンス番号「1000」のTCPセグメントを新たに送信する(図10のステップSB6、図11のサーバ装置40側における「1000(1000,2000)」)。
また、CPU41は、送信したシーケンス番号「1000乃至1999」のデータに係るレコードを、RAM43の状態領域431内のテーブルに書き込むとともに、有線ネットワーク内のデータの滞留量「T」を「1000」に更新する(図10のステップSB6、図11のサーバ装置40側における「1000-1999(1000,2000)」)。
さらに、CPU41は、次のTCPセグメント(シーケンス番号「2000」)が送信可能か否か、すなわち、送信可能なデータ量「W−T」が「MSS」以上であるか否かを判定する(図10のステップSB4)。
ここで、「W−T(=1000)」≧「1000」であるから、CPU41は、標準的なTCPのフロー・輻輳制御処理がデータの送信を許可しているか否かを判定する(図10のステップSB5)。
ここで、標準的なTCPに実装される輻輳制御処理のウィンドウサイズは「2000」であり、先に送信されたTCPセグメントのデータ量は「1Kbyte」であるため、CPU41は、シーケンス番号「2000」のTCPセグメントを送信する(図10のステップSB6、図11のサーバ装置40側における「2000(0,2000)」)。
また、CPU41は、送信したシーケンス番号「2000乃至2999」のデータに係るレコードを、RAM43の状態領域431内のテーブルに書き込むとともに、有線ネットワークにおけるデータの滞留量「T」を「2000」に更新する(図10のステップSB6)。
さらに、CPU41は、送信可能なデータ量「W−T」が「MSS」以上であるか否かを判定する(図10のステップSB4)。ここで、「W−T(=0)」<「1000」であるから、CPU41は、次のTCPセグメント(シーケンス番号「3000」)の送信を中止する。
基地局20のCPU21は、SDUとして供給されたシーケンス番号「1000」のTCPセグメントをSDUバッファ231に格納する。SDUバッファ231には、先に格納された送信待ちのSDUがないため、CPU21は、直ちにSDUを取り出し(図9のステップSA1)、SDUに格納されているデータユニットがTCPセグメントか否かを判定する(図9のステップSA2)。
ここで、SDUに格納されているデータユニットは、TCPセグメントであるため、CPU21は、TCPセグメントに格納されているデータの最初のシーケンス番号「1000」及び最後のシーケンス番号「1999」を取得し、かかるシーケンス番号が格納された転送通知メッセージを新しく生成してサーバ装置40に送信する(図9のステップSA3)。
また、CPU21は、SDUバッファ231から取り出されたSDUを複数のPDUに分割し、送信用キュー232に格納する。さらに、CPU21は、送信用キュー232に格納されたPDUを、順に下位層に送出する(図11のPDU(1000))。
さらに、基地局20のCPU21は、SDUとして供給されたシーケンス番号「2000」のTCPセグメントをSDUバッファ231に格納する。ただし、今回は、先のシーケンス番号「1000」のTCPセグメントを格納するSDUが送信中であるため、CPU21は、SDUを取り出さない。すなわち、シーケンス番号「2000」のTCPセグメントを格納するSDUは、SDUバッファ231にて送信待ちの状態となる(図11の基地局20側における「2000」)。
以上のようにして、サーバ装置40のCPU41は、シーケンス番号「13000」のTCPセグメントまでを順次送信し、輻輳ウィンドウを「12000」まで増加させる。
ただし、有線ネットワーク内に滞留するデータ量は、輻輳制御処理により輻輳ウィンドウサイズ「W(=2000)」以下に維持され、無線帯域が小さい状況でも、基地局20におけるバッファ溢れが回避されている。
移動機10が、シーケンス番号「11000」のTCPセグメント(複数のPDU(11000))を受信し、ACK番号「12000」のACKを返送した後、時刻「t1」において、無線帯域が「160Kbps」から「1.6Mbps」に増加する。
基地局20のCPU21は、時刻「t=t1」において、シーケンス番号「12000」のTCPセグメントを格納するSDUをSDUバッファ231から取り出し(図9のステップSA1)、SDUに格納されているデータユニットがTCPセグメントか否かを判定する(図9のステップSA2)。
SDUに格納されるデータユニットは、TCPセグメントであるため、CPU21は、TCPセグメントに格納されるデータの最初シーケンス番号「12000」及び最後のシーケンス番号「12999」を取得し、かかるシーケンス番号が格納された転送通知メッセージを新しく生成してサーバ装置40に送信する(図9のステップSA3)。
また、CPU21は、SDUバッファ231から取り出されたSDUをPDUに分割し、送信用キュー232に格納する。さらに、送信用キュー232に格納されたPDUを、順に下位層に送出する。PDUは、以前の10倍の速さで無線リンクに送出される。
サーバ装置40のCPU41は、基地局20からの転送通知メッセージを受信すると、RAM43の状態領域431に記録されているテーブルにおいて、当該転送通知メッセージによって通知されたデータのシーケンス番号「12000乃至12999」に対応する状態を「F」に上書きする(図10のステップSB2、図11のサーバ装置40側における12000-12999(1000,12000))。
次に、CPU41は、更新されたテーブルをスキャンして、TCPセグメントのネットワーク内のデータの滞留量「T」を「1000」と推定し(図10のステップSB3)、有線ネットワークに送信可能なデータ量「W−T」が「MSS」以上であるか否かを判定する(図10のステップSB4)。
ここで、「W−T(=1000)」≧「1000」であるから、CPU41は、標準的なTCPのフロー・輻輳制御処理がデータの送信を許可しているか否かを判定する(図10のステップSB5)。
標準的なTCPに実装される輻輳制御処理のウィンドウサイズは「12000」であり、これまでに送信したデータのうち、受信確認されていないのは、シーケンス番号「11000」、「12000」及び「13000」のTCPセグメントにて送信された「3Kbyte」のデータであるため、CPU41は、シーケンス番号「14000」のTCPセグメントを新たに送信する(図10のステップSB6、図11のサーバ装置40側における14000(0,12000))。
また、CPU41は、送信したシーケンス番号「14000乃至14999」のデータに係るレコードを、RAM43の状態領域431内のテーブルに書き込むとともに、有線ネットワークにおけるデータの滞留量「T」を「2000」に更新する(図10のステップSB6)。
これ以上、有線ネットワークに送信可能なデータはないため、CPU41は、次のTCPセグメント(シーケンス番号「15000」)の送信を中止する(図10のステップSB4:NO)。
基地局20のCPU21は、シーケンス番号「14000」のTCPセグメントを受信する前に、シーケンス番号「13000」のTCPセグメントを格納するSDUを無線リンクへ送出し、SDUの格納するTCPセグメントに対する転送通知メッセージをサーバ装置40へ送信する(図9のステップSA1、ステップSA2:YES,ステップSA3)。
サーバ装置40のCPU41は、基地局20からの転送通知メッセージを受信すると、RAM43の状態領域431に記憶されているテーブルにおいて、当該転送通知メッセージによって通知されたシーケンス番号「13000乃至13999」に対応する状態を「F」に上書きし(図10のステップSB2)、更新されたテーブルをスキャンして推定した有線ネットワーク内のデータの滞留量「T(=1000)」に基づいて、有線ネットワークに送信可能なデータ量「W−T」が「MSS」以上であるか否かを判定する(図10のステップSB3、ステップSB4)。
ここで、「W−T(=1000)」≧「1000」であるから、CPU41は、標準的なTCPのフロー・輻輳制御処理がデータの送信を許可しているか否かを判定する(図10のステップSB5)。
標準的なTCPに実装される輻輳制御処理によってTCPセグメントの送信は制限されていないため、CPU41は、シーケンス番号「15000」のTCPセグメントを新たに送信する(図10のステップSB6、図11のサーバ装置40側の15000(0,12000))。
また、CPU14は、送信したシーケンス番号「15000乃至15999」のデータに係るレコードを、RAM43の状態領域431内のテーブルに書き込むとともに、有線ネットワーク内のデータの滞留量「T」を「2000」に更新する(図10のステップSB6)。
これ以上、有線ネットワークに送信可能なデータはないため、CPU41は、次のTCPセグメント(シーケンス番号「16000」)の送信を中止する(図10のステップSB4:NO)。
基地局20のCPU21は、シーケンス番号「13000」のTCPセグメントを格納するSDUを無線リンクへ送出した直後に、シーケンス番号「14000」のTCPセグメントを格納したSDUを受け取る。
そして、CPU21は、かかるSDUに格納されていたTCPセグメント(シーケンス番号「13000」)に対する転送通知メッセージをサーバ装置40に送信すると共に、受け取ったSDU(TCPセグメント「14000」)を移動機10に送信する(図9のステップSA1、ステップSA2:YES、ステップSA3)。
以上のようにして、サーバ装置40のCPU41は、基地局20からの転送通知メッセージの受信を契機として、シーケンス番号「30000」のTCPセグメントまで高速に送信する。これにより、無線帯域の急激な増加にもかかわらず、無線リンクの利用率は「1」に維持されている。
サーバ装置40のCPU41が、シーケンス番号「29000」のTCPセグメントを送信した後、時刻「t=t2」において、無線帯域が「1.6Mbps」から「160Kbps」に減少する。
図11に示すように、サーバ装置40のCPU41は、シーケンス番号「30000」のTCPセグメントを送信した後(図11のサーバ装置40側における30000(0,20000))、ACK番号「20000」のACKを受信する。
かかる場合、CPU41は、標準的なTCPの輻輳制御処理のウィンドウサイズを「21000」に増加させる(図10のステップSB2、図11のサーバ装置40側における(0,21000))。
また、CPU41は、ACKにより受信確認されたシーケンス番号「19000乃至19999」にかかるレコード(その状態は「F」)を、RAM43の状態領域431内のテーブルから削除する(図10のステップSB2)。
この時点で、RAM43の状態領域431内のテーブルには、シーケンス番号「20000乃至30999」のレコードが書き込まれている。なお、シーケンス番号20000乃至28999」に対応する状態は「F」である。
次に、CPU41は、かかるテーブルをスキャンして、TCPセグメントのネットワーク内に置ける滞留量「T」が「0」であると推定し(図10のステップSB3)、有線ネットワークに送信可能なデータ量「W−T」が「MSS」以上であるか否かを判定する(図10のステップSB4)。
ここで、「W−T(=0)」<「1000」であるから、CPU41は、次のTCPセグメント(シーケンス番号「31000」)の送信を行わない。
以上のようにして、サーバ装置40のCPU41は、ACK番号「28000」までのACKを受信し、標準的なTCPの輻輳制御処理のウィンドウサイズを「29000」まで増加させる(図11のサーバ装置40側に置ける(0,29000))。
また、ACKにより受信確認されたシーケンス番号「20000乃至27999」に係るレコードを、RAM43の状態領域431内のテーブルから削除する(図10のステップSB2)。
ここで、有線ネットワークに送信可能なデータ量「W−T」は「0」のままであるから、CPU41は、次のTCPセグメント(シーケンス番号「31000」)の送信を行わない(図10のステップSB3,ステップSB4:NO)。
基地局20のCPU21は、ACK番号「28000」のACKをサーバ装置40へ転送した後、シーケンス番号「29000」のTCPセグメントを格納するSDUを無線リンクへ送出し、このTCPセグメントに対する転送通知メッセージをサーバ装置40へ送信する(図9のステップSA1、ステップSA2:YES、ステップSA3)。
サーバ装置40のCPU41は、シーケンス番号「29000」のTCPセグメントに対する転送通知メッセージを受信すると、RAM43の状態領域431に記録されるテーブルにおいて、当該転送通知メッセージによって通知されたシーケンス番号「29000乃至29999」に対応する状態を「F」に上書きする(図10のステップSB2)。
これにより、データの有線ネットワーク内における滞留量「T」は「1000」となり、新たに「1Kbyte」のデータ送信が可能となる(図10のステップSB3、ステップSB4:YES、ステップSB5:YES、図11のサーバ装置40側における29000-29999(1000,30000))。
CPU41は、シーケンス番号「31000」のTCPセグメントを送信し(図11のサーバ装置40側における31000(0,30000))、送信したシーケンス番号「31000乃至31999」のデータに係るレコードを、RAM43の状態領域431内のテーブルに書き込むとともに、有線ネットワーク内のデータの滞留量「T」を「2000」に更新する(図10のステップSB6)。
これ以上、有線ネットワークに送信可能なデータはないため、CPU41は、次のTCPセグメント(シーケンス番号「32000」)の送信を中止する(図10のステップSB4:NO)。
CPU41が、次にデータの送信が可能となるのは、基地局20からシーケンス番号「30000」のTCPセグメントに対する転送通知メッセージを受信した後である。
以上のように、サーバ装置40のCPU41は、TCPセグメントの送信速度をすばやく絞ることにより、無線帯域の急激な減少にもかかわらず、基地局20におけるバッファ溢れを回避することができる。上述のように、基地局20のSDUバッファ231に格納されるSDUの数は、高々2つであることが分かる。
以上の実施形態から、本発明により、データユニットの送信速度が、動的に変動する無線帯域に合わせて迅速に制御され、無線リンクの利用率低下、及び基地局20におけるバッファ溢れが回避されるという効果が実現されていることが分かる。
本実施形態にかかる通信システムによれば、無線部(無線インタフェース)24を介して移動機(受信機)10に転送したデータユニットの識別情報(TCPセグメントを構成するデータのシーケンス番号)をサーバ装置(送信機)40に対して通知することによって、サーバ装置40において、有線ネットワークにおける移動機10宛てのデータユニットの滞留量「T」を把握することができ、移動機10宛てのデータユニットの送信速度を無線帯域変動に合わせて迅速に制御することができる。
また、本実施形態にかかる通信システムによれば、無線帯域が急激に変動した場合であっても、サーバ装置40において送信速度が変更されるまでの間、移動機10宛てのデータユニット(TCPセグメント)を蓄積することができ、バッファ溢れの発生及び無線リンクの利用率の低下を回避することができる。
また、本実施形態にかかる通信システムによれば、推定された有線ネットワークにおける移動機10宛てのデータユニットの滞留量「T」に応じて当該データユニットの送信タイミングを制御することによって、無線帯域が急激に変動した場合であっても、有線ネットワーク内に滞留するデータユニットを一定に維持することができ、高スループットを実現することができる。
[本発明の第2の実施形態]
[構成]
図12は、本発明の第2の実施形態に係る通信システム200の構成を示す図である。本実施形態に係る通信システム200が上述の第1の実施形態に係る通信システム100と異なる点は、基地局20に代えて基地局50を有する点である。基地局50の通信プロトコル構成は、基地局20と同一である。
図13は、基地局50の構成を示すブロック図である。基地局50の構成が基地局20の構成と異なる点は、不揮発性メモリ22が転送通知プログラム221に代えて転送通知プログラム521を記憶している点と、RAM23に状態領域531が確保されている点である。
以下では、主として、転送通知プログラム521を実行中のCPU21が行う転送通信処理のうち、転送通知プログラム221を実行中のCPU21が行う転送通知処理と異なる部分について説明する。
転送通知プログラム521を実行中のCPU21は、サーバ装置40に対して送信する転送通知メッセージによるトラフィックを低減するために、移動機10からサーバ装置40へ送信されるACK(移動機(受信機)10がデータユニット(PDU)を受信した旨を通知する確認応答)を利用して、無線部24を介して移動機10に対して転送したデータユニットの識別情報(例えば、TCPセグメントを構成するデータのシーケンス番号)の通知を行う。
CPU21は、TCPセグメントを格納するSDUをSDUバッファ231から取り出すと、SDUに格納されるTCPセグメントを構成するデータの最初のシーケンス番号及び最後のシーケンス番号を取得し、かかるシーケンス番号を示す状態データをRAM23の状態領域531に書き込む。
また、CPU21は、移動機10からサーバ装置40宛てに送信されたACKを受信すると、RAM23の状態領域531から、上述のシーケンス番号を示す状態データを読み取り、かかるシーケンス番号をACKに書き込んでサーバ装置40へ送信すると同時に、RAM23の状態領域531からかかるシーケンス番号を削除する。
CPU21は、移動機10からACKを受信したとき、RAM23の状態領域531にシーケンス番号を示す状態データが蓄積されていなければ、かかるACKの転送を一定時間遅延させ、次の処理を行う。
また、CPU21は、先に受信されて送信を待つACKが既にN個ある場合に、移動機10からACKを受信したとき、最も前に受信されたACKをサーバ装置40へ送信する。すなわち、基地局20の保持するACKの数を最大N個に制限する。
また、CPU21は、一定時間(第1の所定期間)経過する前に、TCPセグメントが無線リンクに送出された場合、かかるTCPセグメントを構成するデータの最初のシーケンス番号及び最後のシーケンス番号を、最も前に受信されたACKに書き込んでサーバ装置40へ転送する。それ以外の場合、CPU21は、一定時間(第1の所定期間)経過後、ACKをサーバ装置40へ送信する。
本実施形態では、基地局20は、所定数のACK(確認応答)が受信された場合に、又は、第1の所定期間が経過した場合に、無線部24によって移動機10に転送されたデータユニットの識別情報(TCPセグメントを構成するデータの最初と最後のシーケンス番号)を含むACK(例えば、最も早く受信したACK)をサーバ装置(送信機)40に対して送信するように構成されている。
また、基地局20は、第2の所定期間経過した場合で、かつ、移動機10からのACKを受信していない場合、無線部24によって移動機10に転送されたデータユニットの識別情報(TCPセグメントを構成するデータの最初と最後のシーケンス番号)を含む転送通知メッセージを生成して送信機に送信するように構成されている。
[動作]
図14乃至図18を参照して、上述した構成の通信システム200の動作のうち、上述の第1の実施形態にかかる通信システムの動作と大きく異なる点について、主として説明する。
図14乃至図17は、転送通知プログラム521を実行中のCPU21により行われる転送通知処理の流れを示すフローチャートである。これら4つのフローチャートに示される処理は、CPU21により並行に実行されている。図18は、通信システム200により行われる通信の一例を示すシーケンス図である。
なお、この動作説明における前提は、無線区間のRTTが「45msec」と「55msec」との間を変動する点を除いて、上述の第1の実施形態における動作説明の前提と同様である。また、基地局50の転送通知メッセージを送信するための転送通知メッセージ送信用タイマ及びACKを送信のためのACK送信用タイマを共に「10msec」とし、ACKの最大保持数「N」を「1」とした。
以下、図18に示す通信システム200により行われる通信について、図14乃至図17に示す基地局50の動作を参照しながら説明する。
基地局50のCPU21は、SDUとして格納されたシーケンス番号「0」のTCPセグメントをSDUバッファに231に格納した後、直ちに取り出し(図14のステップSA1)、SDUに格納されるデータユニットがTCPセグメントか否か判定する(図14のステップSA2)。
ここで、SDUに格納されるデータユニットは、TCPセグメントであるため、CPU21は、かかるTCPセグメントに格納されるデータの最初のシーケンス番号「0」及び最後のシーケンス番号「999」を取得し(図14のステップSC1)、RAM23の状態領域531に、ACKを示す状態データがあるか否かを判定する(図14のステップSC2)。
ACKを示す状態データが蓄積されてないため、CPU21は、取得したシーケンス番号を示す状態データを、RAM23の状態領域531に書き込み(図14のステップSC4)、転送通知メッセージ送信用タイマが既に設定されているか否かを判定する(図14のステップSC5)。
ここで、転送通知メッセージ送信用タイマが設定されていないため、CPU21は、かかる転送通知メッセージ送信用タイマを「10msec(第2の所定期間)」に設定する(図14のステップSC6)。また、CPU21は、SDUバッファ231から取り出されたSDUを無線リンクに送出する。
転送通知メッセージ送信用タイマが切れると、すなわち、第2の所定期間が経過すると、基地局50のCPU21は、RAM23の状態領域531に蓄積されている状態データから読み出したシーケンス番号を、転送通知メッセージによってサーバ装置40へ通知する。CPU21は、また、RAM23の状態領域531から、かかるシーケンス番号を示す状態データを全て削除する(図16のステップSE1、ステップSE2)。
基地局50のCPU21は、移動機10からサーバ装置40宛てに送信されたACK番号「1000」のACKを受信すると、RAM23の状態領域531にシーケンス番号を示す状態データがあるか否かを判定する(図15のステップSD1、ステップSD2)。
ここで、シーケンス番号を示す状態データは蓄積されていないため、CPU21は、次に、先に到着して送信を待つACKが「N(=1)」個あるか否かを判定する(図15のステップSD4)。
ここで、RAM23の状態領域531にACKを示す状態データは蓄積されていないため、CPU21は、受信したACKを示す状態データをRAM23の状態領域531に書き込み、ACK送信用タイマを「10msec(第1の所定期間)」に設定する(図15のステップSD6)。
ACK送信のためのタイマが切れると、すなわち、第1の所定期間が経過すると、基地局50のCPU21は、RAM23の状態領域531に蓄積されている状態データから読み出したACKをサーバ装置40へ送信する(図17のステップSF1、ステップSF2)。
基地局50のCPU21は、ACK番号「2000」のACKを受信すると、当該ACKを示す状態データをRAM24の状態領域531に書き込み、ACK送信用タイマを「10msec」に設定する(図15のステップSD1、ステップSD2:NO,ステップSD4:NO,ステップSD6)。
その後、CPU21は、シーケンス番号「2000」のTCPセグメントを格納するSDUをSDUバッファ231から取り出し(図14のステップSA1)、SDUに格納されるデータユニットがTCPセグメントか否かを判定する(図14のステップSA2)。
SDUに格納されるデータユニットは、TCPセグメントであるため、CPU21は、TCPセグメントに格納されるデータの最初シーケンス番号「2000」と最後のシーケンス番号「2999」を取得し(図14のステップSC1)、RAM23の状態領域531に、ACKを示す状態データがあるか否かを判定する(図14のステップSC2)。
ここで、RAM23の状態領域531に、ACKを示す状態データが蓄積されているため、CPU21は、取得したシーケンス番号「2000」及び「2999」をACKに書き込みサーバ装置40へ送信する(図14のステップSC3)。また、CPU21は、SDUバッファ231から取り出されたSDUを無線リンクに送出する。
基地局50のCPU21は、シーケンス番号「3000」のTCPセグメントを受信した後、シーケンス番号「3000」のTCPセグメントを格納するSDUをSDUバッファ231から取り出し(図14のステップSA1)、SDUに格納されるデータユニットがTCPセグメントか否かを判定する(図14のステップSA2)。
ここで、SDUに格納されるデータユニットは、TCPセグメントであるため、CPU21は、TCPセグメントに格納されるデータの最初のシーケンス番号「3000」と最後のシーケンス番号「3999」を取得し(図14のステップSC1)、RAM23の状態領域531にACKを示す状態データがあるか否かを判定する(図14のステップSC2)。
ここで、ACKを示す状態データはないため、CPU21は、取得したシーケンス番号を示す状態データをRAM23の状態領域531に書き込み(図14のステップSC4)、転送通知メッセージ送信用タイマが既に設定されているか否かを判定する(図14のステップSC5)。
ここで、転送通知メッセージ送信用タイマが設定されていないため、CPU21は、転送通知メッセージ送信用タイマを「10msec」に設定する(図14のステップSC6)。また、CPU21は、SDUバッファ231から取り出されたSDUを無線リンクに送出する。
基地局50のCPU21は、ACK番号「3000」のACKを受信すると、RAM23の状態領域531にシーケンス番号を示す状態データがあるか否かを判定する(図15のステップSD1、ステップSD2)。
ここで、RAM23の状態領域531に、シーケンス番号を示す状態データがあるため、かかる状態データを読み取り、かかる状態データの示すシーケンス番号を、当該ACKに書き込みサーバ装置40へ送信する(図15のステップSD3)。
また、CPU21は、転送通知メッセージ送信用タイマをキャンセルするとともに、RAM23の状態領域531から当該シーケンス番号を示す状態データを全て削除する。
以上のように、本発明により、移動機10からサーバ装置40宛てに送信されたACKを利用して、基地局20から移動機10に転送されたデータユニットの識別情報が通知され、転送通知メッセージのオーバヘッドが軽減されている。
本実施形態にかかる通信システムによれば、データユニットの識別情報(TCPセグメントを構成するデータのシーケンス番号)をサーバ装置40に通知するために必要なトラフィックを低減することができる。