JP2016201579A - 通信装置及び送信帯域制御方法 - Google Patents

通信装置及び送信帯域制御方法 Download PDF

Info

Publication number
JP2016201579A
JP2016201579A JP2013168106A JP2013168106A JP2016201579A JP 2016201579 A JP2016201579 A JP 2016201579A JP 2013168106 A JP2013168106 A JP 2013168106A JP 2013168106 A JP2013168106 A JP 2013168106A JP 2016201579 A JP2016201579 A JP 2016201579A
Authority
JP
Japan
Prior art keywords
bandwidth
connection
communication
band
transmission
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.)
Pending
Application number
JP2013168106A
Other languages
English (en)
Inventor
隆史 磯部
Takashi Isobe
隆史 磯部
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.)
Hitachi Ltd
Original Assignee
Hitachi 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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2013168106A priority Critical patent/JP2016201579A/ja
Priority to PCT/JP2014/065670 priority patent/WO2015022809A1/ja
Publication of JP2016201579A publication Critical patent/JP2016201579A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/64Hybrid switching systems
    • H04L12/6418Hybrid transport

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

【課題】通信量の多い通信と、通信量の少ない通信が、同一の通信回線を共有する場合でも、通信量の少ない通信の帯域を確保しつつ、通信量の多い通信が残りの帯域を公平に使い切ることができるようする。【解決手段】バッファは、第一の装置からネットワークを介して第二の装置に送信されるパケットをコネクション毎に蓄積する。帯域制御部1015は、設定される各コネクションの制御帯域に応じて、各コネクションの送信帯域を制御する。帯域制御部1015は、各コネクションについて、バッファに蓄積された各コネクションのパケットの蓄積量と、各コネクションの通信遅延時間とに基づいて、制御帯域の上限を制限する。【選択図】図10

Description

本発明は、通信装置及び送信帯域制御方法に係り、特に、端末間の通信帯域を制御する通信装置及び送信帯域制御方法に関する。
クラウド等に用いられる拠点間の通信網として、IP−VPN(Internet Protocol− Virtual Private Network)技術等を用いたWAN(Wide Area Network)を用いることが、一般的になっている。
或る拠点に存在する端末が、別の拠点に存在する端末と通信する場合は、自拠点LANとWANを接続する回線と、WANと別拠点LANを接続する回線とを経由して通信が行われる。これらの回線は、契約帯域によって、使用可能な帯域幅が制限されている。
端末間の通信では、TCPを用いるのが一般的である。TCP通信では、送信端末が送信したデータに対して、受信端末が受信済みデータの位置を送信端末にフィードバック通知する。送信端末は、フィードバック通知される受信済みデータの位置が増加しなくなると、廃棄検出と判定する。
さらに、送信端末は、輻輳ウィンドウサイズ(受信したことを受信端末から通知されなくても送信可能なデータサイズ)と呼ばれるパラメータを管理しており、RTT(Round Trip Time)や廃棄検出の有無に応じて、輻輳ウィンドウサイズを変化させる。
廃棄検出時やRTT増加時にネットワークが混雑していると判定して、ウィンドウサイズを減少させることで、送信帯域を間接的に減少させて、ネットワークの混雑を回避する。また、廃棄が無い時やRTT減少時にネットワークが空いていると判定して、ウィンドウサイズを増加させることで、送信帯域を間接的に増加させて、ネットワークの回線帯域を有効利用する。
RTTが大きいほど、ウィンドウサイズが増加しにくくなり、RTTの異なる2つ以上の通信が1つの回線を共有する際に、割り当てられる帯域に不公平が生じる場合がある。
通信装置の中継コネクションの送信レートを、中継中のコネクション数に応じて制御する技術もある(特許文献1)。
国際公開05/006664号
中継コネクションの送信レートをコネクション数に応じて制御すると、通信量の多寡やRTTが考慮されていないために、通信量の少ない通信が割当てられた帯域を使いきれず、通信量の多い通信が余剰の帯域を使えない課題があった。
本発明は、以上の点に鑑み、通信量の多い通信と、通信量の少ない通信が、同一の通信回線を共有する場合でも、通信量の少ない通信の帯域を確保しつつ、通信量の多い通信が残りの帯域を使い切ることができるようにし、回線帯域を有効に活用することが可能な通信装置及び送信帯域制御方法を提供することを目的とする。
上記課題を解決するために、本願発明の一態様では、
第一の装置からネットワークを介して第二の装置に送信されるパケットをコネクション毎に蓄積するバッファと、
設定される各コネクションの制御帯域に応じて、各コネクションの送信帯域を制御する帯域制御部と
を備え、
前記帯域制御部は、各コネクションについて、前記バッファに蓄積された各コネクションのパケットの蓄積量と、各コネクションの通信遅延時間とに基づいて、前記制御帯域の上限を制限する通信装置が提供される。
上述の態様により、通信量の多い通信と、通信量の少ない通信が、同一の通信回線を共有する場合でも、通信量の少ない通信の帯域を確保しつつ、通信量の多い通信が残りの帯域を使い切ることができるようにし、回線帯域を有効に活用することが可能となる。
また、本願発明の他の一態様では、
第一の装置からネットワークを介して第二の装置に送信されるパケットをコネクション毎に蓄積するステップと、
設定される各コネクションの制御帯域に応じて、各コネクションの送信帯域を制御するステップと
各コネクションについて、前記バッファに蓄積された各コネクションのパケットの蓄積量と、各コネクションの通信遅延時間とに基づいて、前記制御帯域の上限値を求めるステップと
を含む送信帯域制御方法が提供される。
本願発明のさらに他の一態様では、
第一の装置からネットワークを介して第二の装置に送信されるパケットをコネクション毎に蓄積するバッファと、
帯域制御部と
を備え、
前記帯域制御部は、
前記バッファに蓄積されたパケットのデータサイズが予め定められた閾値以上のコネクションの数に基づいて各コネクションの上限帯域を制限する、又は、
前記第一の装置からネットワークを介して前記第二の装置に送信されるパケットに関する送信帯域を所定のインターバル毎に管理し、インターバルの送信帯域が予め定められた閾値以上のコネクションの数に基づいて各コネクションの上限帯域を制限する通信装置が提供される。
本発明によると、通信量の多い通信と、通信量の少ない通信が、同一の通信回線を共有する場合でも、通信量の少ない通信の帯域を確保しつつ、通信量の多い通信が残りの帯域を使い切ることができるようにし、回線帯域を有効に活用することが可能となる。
本実施の形態における装置を有するシステム構成図。 本実施の形態における装置200のブロック図。 帯域等分割の説明図。 通信量を考慮した帯域分割の説明図。 バッファのポインタの説明図。 パケットのフォーマット図。 状態テーブルのフォーマット図。 状態テーブルが保持する値の意味を説明する概念図。 プロキシ部のブロック図。 TCP部(WAN側)のブロック図。 TCP部(LAN側)のブロック図。 廃棄率の変化率を用いた輻輳制御の説明図。 制御帯域を更新する上位の(概念的な)フローチャート図。 制御帯域を増加させる部分のフローチャート図。 制御帯域を更新する詳細なフローチャート図。 通信量の重みを計算するフローチャート図。 通信量の重みに基づいて各コネクションの上限帯域を計算するフローチャート図。 状態テーブルの他のフォーマット図。
本発明を実施するための代表的な形態は、下記の通りである。実施例1には基本的な一形態を、記載する。
まず、図1と図3を用いて、本発明が解決しようとする課題について説明する。
図1には、本実施の形態の通信装置を適用した中継システムの構成図を示す。
通信装置(中継装置ともいう。以下、単に装置と記す)200A〜Cは、複数の拠点内のLAN110、120、130とWAN140を接続する通信回線上に設置される。装置200A〜CとWAN140は、アクセス回線191、192、193で接続されている。各拠点のLAN110、120、130には、複数の端末111〜113、121〜123、131〜133が接続している。また、端末、装置及びネットワークの数は図示以外にも適宜の数を備えても良い。
図3には、通信量の多い通信と、通信量の少ない通信とが、同一の回線を共有する場合の帯域分割の説明図を示す。
端末111と端末112は、装置200Aを経由して通信を行う。端末111からWAN140に向かう通信の通信量が多く、端末112からWAN140に向かう通信の通信量が少ない場合、通信量の多い端末111の通信と、通信量の少ない端末112の通信が、アクセス回線191を共有することになる。
このような時に、装置200Aが各通信に最大帯域300の半分の帯域を割り当てると、通信量の多い端末111の通信は割り当てられた帯域302を全て使いきれる一方で、通信量の少ない端末112の通信が割り当てられた帯域を使い切ることができず(301)、多くの未使用帯域303を発生させてしまい、帯域を有効に活用できないケースがあった。
本発明は、装置200A〜Cにおける送信帯域の制御に関するものであり、通信量の多い通信と、通信量の少ない通信が、同一の通信回線を共有する場合でも、通信量の少ない通信の帯域を確保しつつ、通信量の多い通信が残りの帯域を使い切ることができるようにし、回線帯域を有効に活用することを目的とする。
図2には、本実施の形態の装置200A〜Cのブロック図を示す。
装置200は、例えば、外部のWAN/LANネットワークとのパケットの送受信を行うWAN側及びLAN側のネットワークインターフェース(201/211)と、高速化非対象のTCPパケットやTCP以外のUDPパケットやARPパケット等を素通しさせるためのフィルタ(202/210)と、WAN側のTCP通信のための制御を行うTCP処理部1000と、LAN側のTCP通信のための制御を行うTCP処理部1100と、WAN側のTCP処理部1000の管理するN個の送信バッファ511およびN個の受信バッファ501と、LAN側のTCP処理部1100の管理するN個の送信バッファ510およびN個の受信バッファ500と、送受信バッファ間でデータの乗せ換えを行うプロキシ900と、N個のエントリを備えた状態テーブル(状態記憶領域)700と、外部の端末240との間で、状態テーブル700の内容などの情報をやり取りするためのインターフェース230とを備える。なお、上述のN個は、それぞれ異なる数でもよい。例えば、送信バッファ、受信バッファは、端末間のパケットをコネクション毎に蓄積する。
TCP処理部1000、1100、プロキシ900については、後に詳述しここでは概略を述べる。
LAN側のTCP処理部1100は、送信履歴更新部1105と、パケット再送部1104と、受信履歴更新部1106と、振分部1108と、集約部1113とを備える。受信履歴更新部1106は、受信したパケットデータを、LAN側受信バッファ500に蓄積する。更に、受信履歴更新部1106は、蓄積したデータに応じて、状態テーブル700のバッファ管理ポインタ(709〜711)の情報を更新する。更に、受信履歴更新部1106は、受信したデータの位置を記載したACKパケットを集約部1113経由で返信する。パケット再送部1104は、受信したACKパケットのACK番号に応じて、パケットを再送すると共に、状態テーブル700のバッファ管理ポインタ(715〜717)の情報を更新する。送信履歴更新部1105は、LAN側送信バッファ510から読み出した送信データをパケットにして送信すると共に、読み出したデータに応じて、状態テーブル700のバッファ管理ポインタ(715〜717)の情報を更新する。
WAN側のTCP処理部1000は、送信帯域制御部1015と、送信履歴更新部1005と、パケット再送部1004と、受信履歴更新部1006と、振分部1016と、集約部1012とを備える。受信履歴更新部1006は、受信したパケットデータを、WAN側受信バッファ501に蓄積する。更に、受信履歴更新部1006は、蓄積したデータに応じて、状態テーブル700のバッファ管理ポインタ(722〜724)の情報を更新する。更に、受信履歴更新部1006は、受信したデータの位置を記載したACKパケットを集約部1012経由で返信する。パケット再送部1004は、受信したACKパケットのACK番号に応じて、パケットを再送すると共に、状態テーブル700のバッファ管理ポインタ(728〜730)の情報を更新する。送信帯域制御部1015は、送信帯域と再送帯域とACK受信数の情報を状態テーブル700に蓄積する。送信履歴更新部1005は、WAN側送信バッファ511から読み出した送信データをパケットにして送信すると共に、読み出した送信データサイズに応じて、状態テーブル700のバッファ管理ポインタ(728〜730)の情報を更新する。
プロキシ900は、データ読出し部(901、906)と、データ加工部(902、905)と、データ書込部(903、904)を備える。データ読出部(901、906)は、受信バッファ(500、501)から読み出したデータサイズに応じて、状態テーブル700のバッファ管理ポインタ(709〜711、722〜724)の情報を更新する。データ書込部(903、904)は、送信バッファ(510、511)に書き込んだデータサイズに応じて、状態テーブル700のバッファ管理ポインタ(715〜717、728〜730)の情報を更新する。
図5には、送受信バッファ管理用のポインタの説明図を表す。本図では、データを左から右に書き込んでいき、左から右に読み出していくものとする。
受信バッファ500,501は、受信したデータの先頭を示すポインタright_recv(711,724)と、整列済みデータと未整列データの境界を示すポインタleft_recv(710,723)と、プロキシ900がすでに読出し済のデータとまだ読出していないデータの境界を示すleft_rbuf(709,722)と、を管理する。
受信したデータの先頭を示すポインタright_recv(711,724)は、ロスの発生が無く、前から順番にデータを受信すると、受信したデータサイズ分増えて、右へ移動する。受信できずに歯抜けになっているデータ箇所(ロスセグメント)が存在する状態で、再送パケットを受信して、ロスセグメントが消滅すると、整列済みデータと未整列データの境界を示すポインタleft_recv(710,723)は、最も小さなロスセグメントの左端まで移動する。プロキシ900は、読出済データと未読出データの境界を示すleft_rbuf(709,722)から右へ向かって順番にデータを読み出し、読み出したデータサイズ分、left_rbuf(709,722)を右へ移動させる。読み出せるデータサイズの最大値は、left_recv(710,723)とleft_rbuf(709,722)の差である。
送信バッファ510,511は、プロキシ900が書込済みで送信可能な状態となっているデータの先頭を表すポインタright_sbuf(717,730)と、すでに送信済みのデータの先頭を示すポインタright_send(716,729)と、受信側から確認応答を受信済みのデータの先頭を示すポインタleft_send(715,728)と、を管理する。
プロキシ900が書込済みで送信可能な状態となっているデータの先頭を表すポインタright_sbuf(717,730)は、プロキシ900がデータを書き込む毎に、書き込んだデータサイズ分増加し、右へ移動する。送信済みデータの先頭を示すポインタright_send(716,729)を始点として右に向かって新たなデータが送信され、right_send(716,729)は、送信されたデータサイズ分増加し、右へ移動する。受信側から、left_send(715,728)よりも大きな受信シーケンス番号を持つ確認応答パケットを受信すると、left_send(715,728)は、確認応答パケットに記載された受信シーケンス番号へと増加し、右へ移動する。
図6には、装置が送受信するパケットのフォーマット図を表す。パケットは、MACヘッダ600、IPヘッダ610、TCPヘッダ620、TCPオプションヘッダ630、ペイロード650を含む。MACヘッダ600は、宛先MACアドレスを表すDMAC601と、送信元MACアドレスを表すSMAC602と、MACフレームタイプを表すType603を含む。IPヘッダ610は、MACヘッダを除くパケット長を表すIP length611と、プロトコル番号を表すprotocol612と、送信元IPアドレスを表すSIP613と、宛先IPアドレスを現すDIP614とを含む。TCPヘッダ620は、送信元ポート番号を表すsrc.port621と、宛先ポート番号を表すdst.port622と、送信シーケンス番号を表すSEQ623と、受信シーケンス番号を表すACK624と、TCPフラグ番号を表すflag625と、TCPのヘッダ長を表すtcp hlen626とを含む。TCPオプションヘッダ630は、オプション種別を表すoption kind631と、オプション長を表すoption length632と、どこからどこまで部分的に受信できたかデータ箇所の位置を送信端末に通知するために用いられるleft_edge_1〜4(633、635、637、639)、right_edge_1〜4(634、636、638、640)を含む。left_edge_1〜4(633、635、637、639)、right_edge_1〜4(634、636、638、640)は、部分的に受信できなかったデータ箇所の位置を通知するために用いられるケースもある。更に、TCPオプションヘッダ630は、TCP通信を開始するときに、装置間の情報交換などに使用するケースもある。
例えば、MSS(Maximum Segment Size:最大セグメントサイズ)オプションは、TCP通信を開始するときに、自装置の受信可能なMSSのサイズを対向装置に通知するために用いられる。SACK(Selective Acknowledgments)オプションは、TCP通信を開始するときに、自装置がSACKオプションに対応可能であることを対向装置に通知するために用いられるだけでなく、通信中に廃棄が検出されたときに部分的に受信出来た箇所を対向装置に通知するためにも用いられる。タイムスタンプオプションは、通信中の自装置の受信時刻を対向装置に通知するために用いられる。このように、TCPオプションは、通信開始時および通信中に、自装置の対応可能な機能や情報を対向装置に伝えるために用いられる。
図7には、状態テーブル700のフォーマット図を示す。
装置200の状態テーブル700は、例えばTCPコネクション毎の状態を記録するためのn個のエントリ701と、通信が確立しているコネクション数を表すconnect_num765と、実際にデータを送信中のコネクション数を表すactive_snd_num766と、装置全体の上限帯域を定めたmax_speed767と、各コネクションの通信量の重み総和を表すweight_sum768と、を有する。TCPの3−Way−Handshakeの終了した通信を、通信が確立しているコネクションであるとみなす。更に、LAN側の受信バッファとWAN側の送信バッファにデータが一定量蓄積されていたり、直近の送信帯域が一定値以上のコネクションを、実際にデータを送信中であるコネクションと見なす。各コネクションの通信量の重みの計算方法は、後述する。なお、上限帯域は、対向拠点(対向装置)毎に定めてもよく、max_speed1〜n(767−1〜n)として複数の対向拠点1〜n毎に異なる値を有しても良い。図18に、対向装置毎に上限帯域max_speed1〜n(767−1〜n)を有する状態テーブル700−2の例を示す。この場合、図16、17に示す計算には、該当するコネクションに対応する対向装置の上限帯域max_speed767が用いられる。
各エントリ701は、例えば、エントリが使用中であるか否かを記載するVLD702と、LANまたはWAN側のコネクションが確立中であるか否かを記載するconnect_state703と、LAN側の端末のIPアドレスを表すLIP704と、WAN側の端末のIPアドレスを表すWIP705と、LAN側の端末のTCPポート番号を表すLport706と、WAN側の端末のTCPポート番号を表すWport707と、LAN側のTCP通信の状態を表すlan_state708と、LAN側の受信バッファ管理用のポインタを表すlan_left_rbuf709、lan_left_recv710、lan_right_recv711と、LAN側のウィンドウスケールオプションの値を表すlan_ws712と、LAN側の平均RTTを表すlan_rtt713と、LAN側の受信バッファから読み出され加工中のデータサイズを表すlan_wan714と、LAN側の送信バッファ管理用のポインタを表すlan_left_send715、lan_right_send716、lan_right_sbuf717と、LAN側の輻輳ウィンドウサイズを表すLcwnd718と、LAN側の受信ウィンドウサイズを表すLrwnd719と、LAN側の最大セグメントサイズ(MSS)のサイズを表すLmss720と、WAN側のTCP通信の状態を表すwan_state721と、WAN側の受信バッファ管理用のポインタを表すwan_left_rbuf722、wan_left_recv723、wan_right_recv724と、WAN側のウィンドウスケールオプションの値を表すwan_ws725と、WAN側の平均/初期RTTを表すwan_rtt726と、WAN側の受信バッファから読み出され加工中のデータサイズを表すwan_lan727と、WAN側の送信バッファ管理用のポインタを表すwan_left_send728、wan_right_send729、wan_right_sbuf730と、WAN側の輻輳ウィンドウサイズを表すWcwnd731と、WAN側の受信ウィンドウサイズを表すWrwnd732と、WAN側の最大セグメントサイズMSSを表すWmss733と、前回の更新時刻におけるACK受信済み箇所を表すold_wan_left_send734と、パケットを送信する帯域を制御するための制御帯域token738と、前回の更新時刻における制御帯域を表すold_token739と、前々回の更新時刻における制御帯域を表すold_old_token740と、パケットを送信するために確保する最低限の帯域を表すmin_token741と、輻輳が検出されない状態になった直近の制御帯域を表すt_token742と、直近の定期更新時の制御帯域を表すc_token743と、制御帯域を増加させ始めた直近の時刻を表すinc_time744と、現在時刻での送信帯域を表すsnd745と、前回更新時の送信帯域を表すold_snd746と、前々回の更新時刻の送信帯域を表すold_old_snd747と、現在時刻での再送帯域または廃棄帯域を表すrts748と、前回更新時の再送帯域または廃棄帯域を表すold_rts749と、現在時刻での受信帯域を表すrcv750と、前回更新時の受信帯域を表すold_rcv751と、制御帯域を更新した直近の更新時刻を表すrenewed_time752と、現在時刻での再送率または廃棄率を表すloss_ratio753と、前回更新時の再送率または廃棄率を表すold_loss_ratio754と、制御帯域を更新した前々回の更新時刻を表すold_renewed_time755と、現在時刻での送信バイト積算値を表すsnd_byte756と、現在時刻での再送バイト積算値を表すrts_byte757と、現在時刻での受信バイト積算値を表すack_byte758と、廃棄率の変化率と比較することで輻輳を検出するための閾値K759と、輻輳が発生していないときに一定期間の間は線形増加させるための閾値T760と、必要な通信帯域を記載した通信量重みweight764とを有する。
図9は、プロキシ900のブロック図を示す。
プロキシ900は、LAN側の受信バッファrbuf500からデータを読出すデータ読出し部901と、読み出したデータに対して圧縮・解凍・暗号化・復号・削除・複製・追記などの加工を行うデータ加工部902と、加工済みデータをWAN側の送信バッファsbuf511へ書き込むデータ書き込み部903と、WAN側の受信バッファrbuf501からデータを読み出すデータ読出し部906と、読み出したデータに対して圧縮・解凍・暗号化・復号・削除・複製・追記などの加工を行うデータ加工部905と、加工済みデータをLAN側の送信バッファsbuf510へ書き込むデータ書き込み部904とを有する。データ加工部902とデータ加工部905との間で、データのやり取りをしてもよい。データの加工は上述の例以外でもよい。
データ読出し部901は、lan_left_rbuf709からlan_left_recv710までの間に蓄積されている整列済みデータから読み出した先頭データから、読み出すべきデータサイズと、データ加工後のデータサイズを推定する。先頭データとしては、TLS(Transport Layer Security)/SSL(Secure Socket Layer)ヘッダ、SMB(Server Message Block)ヘッダ、等などを使用してもよい。TLS/SSLヘッダに記載された値からは、復号後のチェックサムやヘッダを除いた平文データサイズを推定することができる。SMBヘッダからは、新規コマンドの作成や付加コマンドのプリフェッチ等を行った後のコマンドデータサイズを推定することができる。推定した加工後のデータサイズを、wan_right_sbuf730とwan_left_send728の差、すなわち未送信データとACK確認待ちデータの合計値に加算しても、WAN側の送信バッファサイズwan_sbuf_sizeを超えない場合は、データを読み出して、データ加工部902へ転送する。更に、推定した読み出すべきデータサイズと、データ加工後のデータサイズのうち、大きい方を状態テーブル700のlan_wan714へ記載する。
もう一つのデータ読出し部906は、wan_left_rbuf722からwan_left_recv723までの間に蓄積されている整列済みデータから読み出した先頭データから、読み出すべきデータサイズと、データ加工後のデータサイズを推定する。先頭データとしては、TLS(Transport Layer Security)/SSL(Secure Socket Layer)ヘッダ、SMB(Server Message Block)ヘッダ、等などを使用してもよい。推定した加工後のデータサイズを、lan_right_sbuf717とlan_left_send715の差、すなわち未送信データとACK確認待ちデータの合計値に加算しても、LAN側の送信バッファサイズlan_sbuf_sizeを超えない場合は、データを読み出して、データ加工部905へ転送する。更に、推定した読み出すべきデータサイズと、データ加工後のデータサイズのうち、大きい方を状態テーブル700のwan_lan727へ記載する。
図10には、WAN側のTCP処理部1000のブロック図を示す。
TCP通信を実現するTCP処理部1000は、受信処理を行うRX部(受信部)1002と、送信処理を行うTX部(送信部)1001を有する。
RX部1002は、受信パケットを、SYN,FINなどのフラグが付いたTCP制御パケットとデータ付パケットとACKパケットに分離するパケット振分部1016と、TCP制御パケットに記載されているフラグ番号に基づいて状態テーブル700内のTCP状態(lan_state708、wan_state721)を変更するTCP制御部1007と、受信したデータパケットの送信シーケンス番号SEQ623と受信シーケンス番号ACK624とに基づいて、状態テーブル700内のバッファ管理ポインタを変更してACKパケットを返信する受信履歴更新部1006を有する。
TX部1001は、状態テーブル700内のTCP状態lan_state708、wan_state721を用いてTCP制御パケットを送信するTCP制御部1003と、受信したACKパケットに基づいて状態テーブル700内のバッファ管理ポインタを変更し、受信したACKパケット記載の部分的確認応答left_edge_1〜4(633、635、636、639)、right_edge_1〜4(634、636、638、640)を用いて、送信バッファsbuf511からデータを読み出してパケットを再送すると共に、再送ビット長とACK受信数を送信帯域制御部1015に通知するパケット再送部1004と、送信バッファsbuf511から読み出したデータを載せたパケットを送信して、状態テーブル700内のバッファ管理ポインタを変更すると共に、送信ビット長を送信帯域制御部1015に通知する送信履歴更新部1005と、再送パケットとデータパケットを受け取り、バッファ1〜n(1009−1〜n)に振り分ける振分部1008と、現在時刻を生成して送信帯域制御部1015に通知するタイマ1013と、インターバル時間(予め定めた固定値、または計測した平均RTTなど)を保存して送信帯域制御部1015に通知するインターバル格納部1014と、状態テーブル700を制御して、各TCPコネクションのトークンサイズをトークン更新部1017に通知する送信帯域制御部1015と、TCPコネクション毎にトークンバケツを管理して、送信可能なコネクションをマルチプレクサ1012に通知するトークン更新部1017と、ACKパケット、TCP制御パケット、再送パケット、データパケットをFIFOで集約して、出力するマルチプレクサ1012およびバッファ1009,1010,1011とを有する。
本実施例において、TX部1001の各ブロックのうち、各TCP通信の制御帯域(最大送信帯域)に従いデータを送信するブロック(例えば、トークン更新部1017、マルチプレクサ1012、バッファ1009等)をまとめて送信制御部と称することもある。
図11には、LAN側のTCP処理部1100のブロック図を示す。
TCP通信を実現するTCP処理部1100は、受信処理を行うRX部(受信部)1102と、送信処理を行うTX部(送信部)1101を有する。
受信処理を行うRX部(受信部)1102は、フィルタ202からの受信パケットをTCP制御パケットとデータ付パケットとACKパケットに分離するパケット振分部1108と、受信したTCP制御パケットに基づいて状態テーブル700内のTCP状態lan_state708、wan_state721を変更するTCP制御部1107と、受信したデータパケットの送信シーケンス番号SEQ623と受信シーケンス番号ACK624とに基づいて、状態テーブル700内のバッファ管理ポインタを変更してACKパケットを返信し、データパケットのデータを受信バッファrbuf500へ蓄積する受信履歴更新部1106と、を有する。
送信処理を行うTX部(送信部)1101は、状態テーブル700内のTCP状態lan_state708、wan_state721を用いて、TCP制御パケットを送信するTCP制御部1103と、受信したACKパケットに基づいて状態テーブル700内のバッファ管理ポインタを変更し、受信したACKパケット記載の部分的確認応答left_edge_1〜4(633、635、636、639)、right_edge_1〜4(634、636、638、640)を用いて送信バッファsbuf510からデータを読み出してパケットを再送するパケット再送部1104と、送信バッファsbuf510から読み出したデータを載せたパケットを送信して、状態テーブル700内のバッファ管理ポインタを変更する送信履歴更新部1105と、ACKパケット、TCP制御パケット、再送パケット、データパケットをFIFOで集約して、出力するマルチプレクサ1113およびバッファ1109〜1112とを有する。
WAN側TCP処理部1000の送信帯域制御部1015は、状態テーブル700内に、制御帯域を更新した直近の更新時刻を表すrenewed_time752と、制御帯域を更新した前々回の更新時刻を表すold_renewed_time755と、を管理している。直近の更新時刻renewed_time752と、タイマ1013の現在時刻との差が、インターバル格納部1014のインターバル時間よりも大きくなると、直近の更新時刻renewed_time752にインターバル時間を加算して新たな直近の更新時刻renewed_time752とする。加算前の直近の更新時刻renewed_time752は、前々回の更新時刻を表すold_renewed_time755となる。すなわち、直近の更新時刻renewed_time752の一つ前に使用していた直近の更新時刻renewed_time752は、前々回の更新時刻を表すold_renewed_time755となる。インターバル時間には、計測した平均RTTや初期RTT(wan_rtt519)を用いることもあれば、固定値を用いることもある。
図2を用いて、LAN側からデータ付きパケットを受信した際の、装置200におけるパケットの流れを説明する。
LAN側から到着したデータ付きパケットは、LAN側TCP処理部1100に入り、受信履歴更新部1106に到着する。受信履歴更新部1106は、ACKパケットを集約部1113経由でLAN側に返信し、パケットに記載されたデータをLAN側受信バッファrbuf500へと蓄積する。更に、蓄積データサイズに基づいて状態テーブル700のポインタを更新する。データ読出し部901は、LAN側受信バッファrbuf500に蓄積された整列済みデータを読出し、データ加工部902へ転送する。更に、読み出したデータサイズに基づいて状態テーブル700のポインタを更新する。データ加工部902は、データを加工して、データ書き込み部903へ転送する。更に、加工中のデータサイズに基づいて状態テーブル700の加工中データサイズを更新する。データ書き込み部903は、加工済みデータをWAN側送信バッファsbuf511へと書き込む。更に、書き込んだデータサイズに基づいて状態テーブル700のポインタを更新する。WAN側送信バッファsbuf511に書き込まれたデータは、WAN側TCP処理部1000の送信履歴更新部1005から読み出されて、WAN側へデータ付きパケットとして送信される。
受信履歴更新部1106についてさらに説明すると、LAN側の受信バッファの最大値から、lan_right_recv711とlan_left_rbuf709との差分を引くことで、受信バッファの残存量を計算する。ペイロード650のサイズが、受信バッファの残存量以下のときは、ペイロード650に記載されたデータ全てを受信バッファに格納する。ペイロード650のサイズが、受信バッファの残存量よりも大きい場合は、ペイロード650の先頭から受信バッファの残存量に相当するサイズのデータだけを受信バッファに格納する。格納データサイズが0よりも大きいときは、データ付きパケットのTCPヘッダ620に記載されたSEQ623の値と、格納データサイズに基づいて、受信バッファ管理用ポインタの更新を行う。例えば、パケットヘッダ記載のSEQ623に格納データサイズを加算した値が、lan_right_recv711よりも大きい場合は、lan_right_recv711を、SEQ623に格納データサイズを加算した値に変更する。更に、受信データの最後尾がlan_right_recv711となるように、受信データをLAN側の受信バッファに記載する。その後、受信バッファ管理ポインタの1つlan_left_recv710をTCPヘッダ620のACK624に記載したACKパケットを、LAN側へ返信する。
また、送信履歴更新部1005について更に説明すると、wan_right_send729から右方向に、最大wan_right_sbuf730までのデータを、WAN側送信バッファsbuf511から読み出す。wan_right_send729は、読み出したデータサイズ分、増加して、右に移動する。更に、読み出したデータをペイロード650に記載し、wan_right_send729をSEQ623に記載したTCPヘッダ620を追加したデータ付きパケットを、WAN側へ送信する。
(WAN側に出て行くデータの送信帯域の制御に使用する変数)
送信帯域制御部1015は、状態テーブル700が管理する変数を用いて、各TCP通信のWAN側に出て行くデータの送信帯域を制御する。
送信帯域制御部1015が管理する状態テーブル700の変数を説明する。状態テーブル700は、コネクション毎に、制御帯域を更新した直近の更新時刻を表すrenewed_time752と、制御帯域を更新した前々回の更新時刻を表すold_renewed_time755と、直近の更新時刻renewed_time752から現在時刻までの送信バイト積算値snd_byte756・再送バイト積算値rts_byte757・受信バイト積算値ack_byte758・制御帯域token738・送信帯域snd745・受信帯域rcv750・再送帯域または廃棄帯域rts748・再送率または廃棄率loss_ratio753と、前々回の更新時刻old_renewed_time755から直近の更新時刻renewed_time752までの制御帯域old_token739・送信帯域old_snd746・受信帯域old_rcv751・再送帯域または廃棄帯域old_rts749・再送率または廃棄率old_loss_ratio754と、前々回の更新時刻old_renewed_time755前の制御帯域old_old_token740・送信帯域old_old_snd747と、直近の更新時刻renewed_time752におけるACK受信済み箇所old_wan_left_send734と、パケットを送信するために確保する最低限の帯域を表すmin_token741と、輻輳が検出されない状態になった直近の制御帯域を表すt_token742と、直近の定期更新時の制御帯域を表すc_token743と、制御帯域を増加させ始めた直近の時刻を表すinc_time744と、を記録する。
直近の更新時刻renewed_time752後の制御帯域token738は、現在時刻における制御帯域を表す(本実施例では、tokenまたはトークンと表す)。直近の更新時刻renewed_time752後の送信帯域は、現在時刻における送信帯域を表し(本実施例では、sndと表す)、直近の更新時刻renewed_time752後の送信ビット積算値を、現在時刻と直近の更新時刻renewed_time752の差分で除算することで求められる。直近の更新時刻renewed_time752後の再送帯域は、現在時刻における再送帯域を表し(本実施例では、rtsと表す)、直近の更新時刻renewed_time752後の再送ビット積算値を、現在時刻と直近の更新時刻renewed_time752の差分で除算することで求められる。直近の更新時刻renewed_time752後の受信帯域は、現在時刻における受信帯域を表し(本実施例では、rcvと表す)、直近の更新時刻renewed_time752以降のACK受信数にWAN側のMSSと8を積算した値を、現在時刻current_timeと直近の更新時刻renewed_time752の差分で除算することで求められる。直近の更新時刻renewed_time752前の制御帯域・送信帯域・受信帯域・再送帯域は、前々回の更新時刻old_renewed_time755から直近の更新時刻renewed_time752までの制御帯域・送信帯域・受信帯域・再送帯域の平均値を表す(本実施例では、old_token、old_snd、old_rcv、old_rtsと表す)。前々回の更新時刻old_renewed_time755の制御帯域・送信帯域は、前々回の更新時刻old_renewed_time755の直前までの制御帯域・送信帯域を表す(本実施例では、old_old_token、old_old_snd、と表す)。直近の更新時刻renewed_time752前の再送率/廃棄率old_loss_ratioは、old_rts/old_old_snd、または、1−old_rcv/old_old_sndで求められる。また、直近の更新時刻renewed_time752後の現在時刻の再送率/廃棄率loss_ratioは、rts/old_snd、または、1−rcv/old_sndで求められる。インターバル時間として、固定値を用いることもあれば、状態テーブル700記載のwan_rtt726を用いる場合もある。
図8には、前々回の更新時刻old_renewed_time755・直近の更新時刻renewed_time752・現在時刻と、その前後の制御帯域token・送信帯域snd・受信帯域rcv・再送帯域rts・再送率/廃棄率loss_ratioの関係を表す。
直近の更新時刻renewed_time752と前々回の更新時刻old_renewed_time755との差は、インターバル時間である。前々回の更新時刻old_renewed_time755前におけるインターバル時間の制御帯域・送信帯域の平均値は、old_old_token、old_old_sndと表す(801)。前々回の更新時刻old_renewed_time755から直近の更新時刻renewed_time752までの間の制御帯域・送信帯域・受信帯域・再送帯域・再送率/廃棄率の平均値は、old_token、old_snd、old_rcv、old_rts、old_loss_ratioと表す(802)。直近の更新時刻renewed_time752から現在時刻current_timeまでの制御帯域・送信帯域・受信帯域・再送帯域・再送率/廃棄率の平均値は、token、snd、rcv、rts、loss_ratioと表す(801)。
送信帯域制御部1015は、状態テーブル700に記載された上述の値を用いて、廃棄率/再送率(loss_ratio753とold_loss_ratio754)を計算する。現在時刻current_timeの廃棄率/再送率loss_ratio753は、rts/old_tokenまたはrts/old_sndまたは1−rcv/old_tokenまたは1−rcv/old_sndで計算される。直近の更新時刻の廃棄率/再送率old_loss_ratio754は、old_rts/old_old_tokenまたはold_rts/old_old_sndまたは1−old_rcv/old_old_tokenまたは1−old_rcv/old_old_sndで計算される。更に、廃棄率/再送率の変化(old_loss_ratio754とloss_ratio753の比率)に基づいて、制御帯域(tokenまたはトークン)を決定し、トークン更新部1017へ伝える。更に、状態テーブル700を更新する。制御帯域(tokenまたはトークン)の更新方法の詳細は、図12〜図18に後述する。
トークン更新部1017は、送信帯域制御部1015から伝えられた制御帯域(tokenまたはトークン)の値に基づいて、TCPコネクション毎にトークンバケツを管理して、送信可能なコネクションをマルチプレクサ1012に通知する。
(制御帯域tokenの更新処理)
図12の説明図と、図13〜図18のフローチャートを用いて、送信帯域制御部1015が制御帯域(tokenまたはトークン)を更新する方法の詳細を説明する。
図12には、独自TCPによる通信を行っている装置の送信側の送信帯域1201、廃棄率1202、廃棄率の変化率1203の時間遷移を示したグラフを示す。本実施の形態では、一例として独自TCPによる通信を用いる例を説明するが、以下に説明する例に限らず、TCP通信及びTCP通信をベースに修正した適宜のプロトコルを適用してもよい。
独自TCPによる通信の送信帯域の増減には、大きく3つのフェーズが存在する。フェーズ1は送信帯域を増加させるステップ、フェーズ2は送信帯域を減少させるステップ、フェーズ3は送信帯域を一定にするステップ、となる。
まず、フェーズ1で送信帯域が増加していき(1204)、ある時にボトルネック帯域を超過する(1213)。送信帯域がボトルネック帯域を超過すると、パケット廃棄が発生するが、廃棄箇所が受信側から送信側に通知されるまでにRTT以上かかる(1215)。そのため、送信帯域がボトルネック帯域を超過したことが、廃棄率の増加となって現れるのは、RTT以上後となる(1214)。廃棄率は、直近の再送帯域をRTT前の送信帯域で除算することで求められる。送信帯域がボトルネック帯域よりも小さい間は、他のトラフィックとの競合による確率的な廃棄しかおきないため、廃棄率はほぼ一定となる(1210)。送信帯域がボトルネック帯域を超過してからRTT以上経過すると、確率的な廃棄に加えて、使い過ぎによる廃棄(1211)が加わるようになるため、廃棄率が増加しはじめる(1212)。廃棄率が増加しはじめると、廃棄率の変化率は1から急激に増加し、閾値kを超過する(1209)。
独自TCPによる通信では、上記のように、廃棄率の変化率が急激に増加し、閾値kを超過したときに、ネットワークに輻輳が発生したと判断する。
ネットワークに輻輳が発生したと判断すると、RTT前の送信帯域から、現在の再送帯域を引いた値を、新たな送信帯域とする(1218)。RTT前の送信帯域を用いて新たな送信帯域を計算する理由は、送信帯域がボトルネック帯域を超過した時間がRTT以上前だからである。廃棄率の増加はしばらく継続するため(1212)、その間は送信帯域が減少し続ける。この送信帯域を減少させるステップがフェーズ2となる(1205)。
送信帯域が減少していきボトルネック帯域よりも小さくなると、廃棄率が減少しはじめる(1219)。廃棄率の変化率が1よりも小さくなり、閾値kを下回ると(1220)、ネットワークに輻輳が発生しなくなったと判断される。
ネットワークに輻輳が発生しなくなったと判断された後も、廃棄パケットの再送処理は継続している。受信確認済みのデータ箇所がRTT前と比較して増加していない場合は、廃棄パケットの再送処理は継続していると判断して、ACK受信数に応じて、送信帯域を一定とする。この送信帯域を一定とするステップがフェーズ3となる(1206)。
受信確認済みのデータ箇所がRTT前と比較して増加している場合は、廃棄パケットの再送処理が一通り完了したと判断して、再び送信帯域を増加させる(フェーズ1)。
最初は、送信帯域をゆっくりと、例えば、線形的に増加させていく(1207)。一定の期間T、輻輳が検出されないと、その後、送信帯域を急激に(例えば、非線形的に)増加させていく(1208)。非線形的に増加させるときは、RTT毎にα倍するなど、指数的に増加させてもよい(1216)。最初の送信帯域をゆっくりと(例えば、線形的に)増加させていく期間Tは、RTTとトークン(token:制御帯域)によって定めても良いし、これらの積に比例させてもよい(1221)。また、最初の送信帯域をゆっくりと(例えば、線形的に)増加させていく間は、送信帯域をRTT毎にMSS/RTTに比例する速度で線形的に増加させてもよいし、送信帯域をRTT毎にMSS/RTTに比例する速度で線形的に増加させる場合の比例係数αを1よりも小さい値にしてもよい(1217)。
上述の送信帯域の制御方法により、ネットワークの輻輳が検出されず、尚且つ、受信確認済みのデータ箇所が更新中の状態になってから一定の期間は、前記TCP通信の送信帯域を線形的に増加させ、その後、送信帯域を非線形的に増加させる通信装置が実現される。更に、廃棄率や再送率の変化率を用いて、ネットワークの輻輳を検出する通信装置と、送信帯域と再送帯域とACK受信数の過去の履歴を用いて、廃棄率または再送率とそれらの変化率を推定する通信装置と、輻輳を検出したときに、送信帯域と再送帯域とACK受信数の過去の履歴を用いて、送信帯域を減少させる通信装置が実現される。
ネットワークの輻輳が検出されず、尚且つ、受信確認済みのデータ箇所が更新中の状態になってから一定の期間は、送信帯域を通常のTCP通信よりも緩やかに(例えば線形的に)増加させることで、通常のTCP通信と競合したときでも、通常のTCP通信の帯域を圧迫することを防ぎ、通常のTCP通信が帯域を確保しやすくなる。また、一定時間が経過した後に、急激に(例えば指数的に)送信帯域を増加させることで、通常のTCP通信との競合が無い時に、送信帯域がボトルネック帯域へ到達してトップスピードになる時間を短くすることが出来る。更に、廃棄率や再送率の変化率を用いて、ネットワークの輻輳を検出することで、他のトラフィックと競合することで確率的に発生する廃棄と、帯域の使い過ぎによる廃棄を区別することができ、確率的な廃棄に影響されずに、送信帯域がボトルネック帯域に到達してトップスピードになるまで、送信帯域を増加させ続けることが可能となり、回線帯域を使い切ることが出来るようになる。更に、帯域の使い過ぎによる廃棄だと判定したときに、過去の送信帯域と現在の再送帯域を用いて帯域を減少させることで、輻輳の規模に応じて帯域を減少させることができる。
図13〜図17には、送信帯域制御部1015が制御帯域(tokenまたはトークン)を更新する方法の詳細を説明するためのフローチャートを示す。
図13〜図15には、独自TCPにおける帯域制御の詳細を、図16〜図17には、独自TCPによる通信が通信量に応じて最大帯域を分割する方法の詳細を示す。
図13には、送信帯域制御部1015が制御帯域(tokenまたはトークン)を更新する際の概念的なフローチャートを表す。独自TCPでは、送信帯域制御部1015が、本フローチャートに従い処理を実行することで、再送率に基づく帯域制御を実現し、RTTと廃棄率に依存せず、回線帯域を使い切ることができる。図13の各ステップは、送信帯域制御部1015により実行される。
送信帯域制御部1015において、制御帯域の更新処理がスタートすると(ステップ1301)、ACK確認済み箇所が一定期間増加していないかどうかを判定する(ステップ1302)。ACK確認済み箇所が一定期間増加している場合は、再送に失敗していると判定し、ACK受信数に応じて制御帯域を一定にする(ステップ1306)。例えば、制御帯域token738を受信帯域rcv750とする。ACK確認済み箇所が増加している場合は、パケット再送率(=rts/old_tokenまたはrts/old_sndまたは1−rcv/old_tokenまたは1−rcv/old_sndで計算される値)の増加率が、予め定められた閾値を超過したか否かを判定する(ステップ1303)。パケット再送率の増加率が、予め定められた閾値を超過した場合は、現在の再送帯域(rts)と、過去の(基準時刻より前の)制御帯域(old_token739)または過去の(基準時刻より前の)送信帯域(old_snd746)を用いて、制御帯域(token738)を更新する(ステップ1304)。例えば、過去の(直近の更新時刻renewed_time752より前の)制御帯域を、現在の再送帯域に応じた量減らし、現在時刻の制御帯域とする。一方、ステップ1303において、パケット再送率の増加率が、予め定められた閾値を超過しなかった場合は、制御帯域を増加させる(ステップ1305)。ステップ1304やステップ1305やステップ1306のあとに、各コネクションの最小帯域(min_token741)に基づき、制御帯域(token738)を更新する(ステップ1307)。更に、各コネクションの重みweight764に基づいて、制御帯域tokenを更新する(ステップ1308)。各コネクションの重みweight764の計算方法は後述する。制御帯域(token738)を変更することで、トークンバケツに蓄積されるトークンの量が変わり、それによりパケットの送信レートを変更することが可能となる。
廃棄率や再送率の変化率を用いて、ネットワークの輻輳を検出することで、他のトラフィックと競合することで確率的に発生する廃棄と、帯域の使い過ぎによる廃棄を区別することができ、確率的な廃棄に影響されずに、送信帯域がボトルネック帯域に到達してトップスピードになるまで、送信帯域を増加させ続けることが可能となり、回線帯域を使い切ることが出来るようになる。更に、帯域の使い過ぎによる廃棄だと判定したときに、過去の送信帯域と現在の再送帯域を用いて帯域を減少させることで、輻輳の規模に応じて帯域を減少させることができる。
図14には、送信帯域制御部1015が制御帯域(token738またはトークン)を増加させる際のステップ1305の詳細なフローチャートを示す。
現在時刻current_timeと制御帯域を増加させ始めた直近の時刻を表すinc_time744の差が、閾値T760未満か否かを判定する(ステップ1401)。閾値T760未満の場合は、制御帯域token738をゆっくりと増加させる(ステップ1403)。例えば、係数αとして、token=token+α×MSS×8/RTTのように線形増加させる。閾値T760以上のときは、制御帯域tokenを急激に増加させる(ステップ1402)。例えば、係数αとして、token=α×tokenのように指数増加させる。
図15には、送信帯域制御部1015が制御帯域(token738またはトークン)を更新する際の詳細なフローチャートを表す。図15は、その一部が図13の処理に相当する。
各ステップは、送信帯域制御部1015により実行される。独自TCPでは、送信帯域制御部1015が、本フローチャートに従い処理を実行することで、再送率に基づく帯域制御を実現し、RTTと廃棄率に依存せず、回線帯域を使い切ることができる。
制御帯域(token)の更新処理がスタートすると(ステップ1501)、送信帯域制御部1015が、タイマ1013の出力する現在時刻current_timeと、状態テーブル700記載の直近の更新時刻renewed_time752との差が、インターバル格納部1014の出力するインターバル時間以上であるか否かを判定する(ステップ1502)。インターバル時間として、計測したRTTの平均値や初期値等を記録した状態テーブル700のwan_rtt726等を使用してもよい。ステップ1502において真と判断された場合は、直近の更新時刻renewed_time752後の現在の制御帯域tokenの値をtmpに退避させておく(ステップ1503)。更に、ACK確認済み箇所が一定期間で増加したかどうかを判定する。具体的には、ACK確認済み箇所wan_left_sendが、直近の更新時刻renewed_time752におけるACK確認済み箇所old_wan_left_send734よりも大きいか否かを判定する(ステップ1504)。増加している場合は、パケット再送率の増加率が閾値を超過したかどうかを判定する。具体的には、状態テーブル700に記憶された直近の更新時刻renewed_time752から現在時刻current_timeまでの再送帯域または廃棄帯域rts748を、前々回の更新時刻old_renewed_time755から直近の更新時刻renewed_time752までの送信帯域old_snd746または制御帯域old_token739で割ることで求められる現在時刻curent_timeにおける廃棄率loss_ratio753が、前々回の更新時刻old_renewed_time755から直近の更新時刻renewed_time752までの再送帯域または廃棄帯域old_rts749を、前々回の更新時刻old_renewed_time755以前の送信帯域old_old_snd747または制御帯域old_old_token740で割ることで求められる直近の更新時刻renewed_time752における旧再送率old_loss_ratio754のK倍(K:予め定められた1以上の係数)よりも大きいか否かを判定する(ステップ1505)。パケット再送率の増加率が閾値を超過した場合は、ネットワークに輻輳が発生したと判断して、制御帯域token738を減少させる(ステップ1506)。図12を用いて説明したフェーズ2に相当する。具体的には、前々回の更新時刻old_renewed_time755から直近の更新時刻renewed_time752までの制御帯域old_token739から、直近の更新時刻renewed_time752から現在時刻までの再送帯域rts748を減算した値を、新たな制御帯域token738とする。更に、輻輳が検出されない状態になった直近の制御帯域を表すt_token742を新たな制御帯域token738で上書きし、制御帯域を増加させ始めた直近の時刻を表すinc_time744を現在時刻current_timeで上書きする。
ステップ1505にて、パケット再送率の増加率が閾値を超過しなかった場合は、ネットワークに輻輳が発生していないと判断して、制御帯域token738を増加させる(ステップ1507)。図12を用いて説明したフェーズ1に相当する。具体的には、係数αとして、token=token+α×MSS×8/RTTのように線形増加させたり、係数αとして、token=α×tokenのように指数増加させたりする。ステップ1504において、ACK確認済み箇所が一定期間で増加しなかった場合は、パケットの再送が継続中であると判断して、ACK受信数に応じて制御帯域token738を一定に保つ(ステップ1508)。図12を用いて説明したフェーズ3に相当する。具体的には、制御帯域token738を、直近の更新時刻renewed_time752から現在時刻current_timeまでの受信帯域rcv750とする。更に、輻輳が検出されない状態になった直近の制御帯域を表すt_token742を新たな制御帯域token738で上書きし、制御帯域を増加させ始めた直近の時刻を表すinc_time744を現在時刻current_timeで上書きする。
ステップ1506〜1508の処理が終了すると、状態テーブル700の管理する値を更新する。例えば、前々回の更新時刻old_renewed_time755における送信帯域old_old_snd747=前回の更新時刻renewed_time752における送信帯域old_snd746、前回の更新時刻renewed_time752における送信帯域old_snd746=現在時刻current_timeにおける送信帯域snd745、前回の更新時刻renewed_time752における再送帯域old_rts749=現在時刻current_timeにおける再送帯域rts748、前々回の更新時刻old_renewed_time755=前回更新時刻renewed_time752、前回更新時刻renewed_time752=前回更新時刻renewed_time752+インターバルinterval、送信バイト積算値snd_byte756=0、再送バイト積算値rts_byte757=0、受信バイト積算値ack_byte758=0、前々回の更新時刻old_renewed_time755における制御帯域old_old_token740=前回更新時刻renewed_time752における制御帯域old_token739、前回更新時刻renewed_time752における制御帯域old_token739=tmp、前回の更新時の制御帯域c_token743=新たな制御帯域token748、などと更新し、状態テーブル700に記録する(ステップ1509)。その後、ステップ1512に移る。
一方、ステップ1502で、偽と判定された場合は、ACK確認済データ末尾を表すポインタwan_left_send728が、前回の更新時刻renewed_time752におけるACK確認済データ末尾を表すポインタold_wan_left_send734よりも増加しており、尚且つ、パケット廃棄率や再送率の変化率(loss_ratio753÷old_loss_ratio754)が、予め定められた閾値K759を超過しているか否かを判定する(ステップ1510)。Kの値は、固定としてもよいし、tokenの値に応じて変化してもよい。ステップ1510において真と判定した場合は、ネットワークに輻輳が発生していると判断して、ステップ1506と同様に、前回更新時刻renewed_time752における制御帯域old_token739の値よりも小さくなるように、新たな制御帯域token738の値を決定する(ステップ1511)。例えば、再送/廃棄帯域rts748を用いて減少させる。例えば、新たな制御帯域token738=前回更新時刻renewed_time752における制御帯域old_token739−再送帯域または廃棄帯域rts748などとする(ステップ1511)。ステップ1510において偽と判定した場合は、何もしない。これらのステップにより、インターバル時間が経過しなくても、再送率の増加からネットワークの輻輳を即座に検出し、制御帯域を減少させることができる。これらのステップの後、ステップ1512に移る。
ステップ1512では、制御帯域token738が、各TCP通信の最低保証帯域min_token741よりも小さい場合は、制御帯域token738を各TCP通信の最低保証帯域min_token741に変更する(ステップ1512)。すなわち図15のステップ1512で示す2つの式で定まるtokenのうちいずれか小さいほうをとる。なお、ステップ1512におけるtoken738やmin_token741などのデータは、状態テーブル700を参照して読み出すことができる。このステップの後、ステップ1513に移る。
ステップ1513では、制御帯域token738が、各TCP通信の通信量重みweight764により定まる最大帯域max_token770よりも大きい場合は、制御帯域token738を最大帯域max_token770に変更する(ステップ1513)。通信量重みweight764により定まる最大帯域max_token770は、後述するフローチャートで決定する。
図15に記載したフローチャートに基づいて制御帯域token738を変更することで、トークンバケツに蓄積されるトークンの量が変わり、それによりパケットの送信レートを変更することが可能となる。更に、廃棄率または再送率に基づく帯域制御を行うことで、バースト的なトラフィックとの競合により確率的に発生する廃棄の影響を受けずに、送信帯域がボトルネック帯域に到達してトップスピードになるまで、送信帯域を増加させることが出来るようになる。これにより、独自TCPは、RTTと廃棄率に依存せずに、回線帯域を使い切ることが出来る。
図16には、送信帯域制御部1015が、各TCP通信の通信量重みweight764を計算するためのフローチャートを示す。本フローチャートは、図15のステップS1513の前の適宜のタイミングで実行される。例えば、インターバル毎に実行されてもよいし、他の適宜のタイミングで実行されてもよい。
通信量重み(weight764)の更新処理がスタートすると(ステップ1600)、送信帯域制御部1015は、LAN側の受信バッファとWAN側の送信バッファに蓄積されたデータのビット量である(wan_right_sbuf730−wan_left_send728+lan_right_recv711−lan_left_rbuf709)×8を、WAN側のRTTであるwan_rtt726で割った値を、weight764に代入する(ステップ1601)。これは、装置200に滞留したデータを1RTTで送り切れる値を必要な帯域と見なす考えに基づいている。次に、送信帯域制御部1015は、装置200の最大帯域であるmax_speed767を、実際にデータを送信中のコネクション数を表すactive_snd_num766で割った値よりも、通信量重みweight764が大きいか否かを判定する(ステップ1602)。なお、LAN側の受信バッファとWAN側の送信バッファに蓄積されたデータのバイト量(wan_right_sbuf730−wan_left_send728+lan_right_recv711−lan_left_rbuf709)が一定値以上のコネクションや、現在時刻current_timeにおける送信帯域snd745が一定値以上のコネクションを、実際にデータを送信中であるコネクションと見なす。ステップ1602において真と判定した場合は、送信帯域制御部1015は、装置の最大帯域max_speed767をデータ送信中のコネクション数active_snd_num766で等分割した値を、通信量重みweight764に代入する(ステップ1603)。
上記のフローチャートを用いて、通信量重みweight764を、公平分配したときの帯域以下に制限することで、通信量の多い通信が帯域を使い過ぎるのを防ぐことが可能となる。
図17には、送信帯域制御部1015が、各TCP通信の最大帯域max_token770を、通信量重みweight764を用いて計算するためのフローチャートを示す。
各TCP通信の最大帯域(max_token770)の更新処理がスタートすると(ステップ1700)、装置200の最大帯域max_speed767をデータ送信中のコネクション数active_snd_num766で等分割した値を、通信量重みweight764の総和Σweight(weight_sum768)で割った値に、装置200の最大帯域max_speed767を掛けた値を、各TCP通信の最大帯域max_token770に代入する(ステップ1701)。これは、通信量重みweight764の総和Σweightのうち、通信量重みweight764の取り得る最大値分を、各通信の最大値として割り当てることを意味する。通信量重みweight764の総和Σweightが、装置200の最大帯域max_speed767をデータ送信中のコネクション数active_snd_num766で等分割した値よりも小さい場合(ステップ1702)、通信量の少ない通信ばかりで、装置200の最大帯域max_speed767を使い切れないケースと考えて、各TCP通信の最大帯域max_token770を、装置200の最大帯域max_speed767とする(ステップ1703)。
図4には、図15〜図17のフローチャートに従い制御帯域token738を変更することで、通信量の少ない1つの通信と、通信量の多い2つの通信が同時に行われる時に、装置200の最大帯域max_speed767がどのように分割されるかを示す。
通信量の少ない通信401は、通信量の多い2つの通信402、403に帯域を圧迫されずに、必要な帯域を使用できる。一方、通信量の多い2つの通信402、403は、通信量の少ない通信401の余らせた帯域を等分割しつつ使い切ることができる。
なお、装置200は、状態テーブル700内のtoken738やsnd745などの値を用いることで、インターフェース230を経由して、図4に示したような通信毎のスループットの時間推移を、外部の端末240に表示させてもよい。
このように、図15〜図17のフローチャートに従い、通信量重みweight764を用いて、各TCP通信の最大帯域max_token770を決定し、制御帯域token738を各TCP通信の最大帯域max_token770以下に制限することで、通信量の少ない通信の帯域を保護しつつ、通信量の多い通信が残された帯域を公平に分割しつつ使い切ることが可能となる。
なお、上述の例ではRTT(往復遅延時間)を用いて計算したが、これ以外の通信遅延時間を用いてもよい。
ここで、制御帯域の上限を制限することで、図4のように通信量の多い通信が余剰の帯域を使うことができる点について補足して説明する。図12及び図14を参照して述べたフェーズ1では、通信量の少ない通信(コネクション)でも制御帯域(token)が増加していく(図12:1204、1207、1208。図15:1507)。この制御帯域の上限は、図15のステップS1513で制限される。仮に図16及び図17を省略すると、最大帯域をコネクション数で分割したものを上限とし、図3の状態となる場合がある。
本実施の形態では、通信量の多い通信(コネクション)が他にあると、通信量重みweightが大きくなるので、各コネクションの最大制御帯域max_tokenが従来より小さくなる。従って、通信量の少ない通信の制御帯域は、従来よりも上限が制限され、送信帯域が制限される。通信量の多い通信のバッファ蓄積データ量が多いほどmax_tokenは小さくなり、RTTが小さいほどmax_tokenは小さくなる。
よって、通信量の少ない通信の最低帯域はステップ1512で確保されつつも、通信量の多い通信のバッファ蓄積データ量が多いほど、またRTTが小さいほど、通信量の少ない通信の最大制御帯域は制限され、結果として通信量の多い通信が帯域を使うことができる。
(構成例)
通信装置の一形態は、第一の通信装置からネットワークを介して第二の通信装置に送信されるパケットに関する帯域をインターバル毎に管理し、インターバルの送信帯域が一定値以上のコネクションの数に基づいて各コネクションの上限帯域を制限する。
通信装置の他の形態は、第一の通信装置からネットワークを介して第二の通信装置に送信されるパケットをコネクション毎に蓄積するバッファを備え、バッファに蓄積されたパケットのデータサイズが一定値以上のコネクションの数に基づいて各コネクションの上限帯域を制限する。
上述の各通信装置において、前記装置から送信されるパケットの最大帯域を定めて、前記最大帯域を前記コネクションの数で割った値に基づいて各コネクションの上限帯域を制限してもよい。
上述の各通信装置において、対向装置毎に定めた最大帯域を前記コネクションの数で割った値に基づいて各コネクションの上限帯域を制限してもよい。
上述の通信装置において、コネクション毎に往復遅延時間を計測し、各コネクションのバッファ蓄積量を往復遅延時間で割った値に基づいて各コネクションの上限帯域を制限してもよい。
上述の通信装置において、最大帯域をコネクション数で割った値と、各コネクションのバッファ蓄積量を往復遅延時間で割った値の、いずれか大きい値に基づいて各コネクションの上限帯域を制限してもよい。
上述の通信装置において、各コネクション毎に計測した廃棄率とその変化に基づいて、各コネクションの送信帯域を制御してもよい。
上述の通信装置において、各コネクション毎に計測した過去のインターバルの制御帯域と直近のインターバルの再送帯域・廃棄帯域に基づいて各コネクションの送信帯域を制御してもよい。
本実施の形態の一態様によると、
LAN側とWAN側の複数のTCP通信を中継する通信装置が、
各TCP通信の送信帯域を制御する帯域制御部と、
各TCP通信のLAN側から受信したデータを蓄積する受信バッファと、
各TCP通信のWAN側へ送信するデータを蓄積する送信バッファと、
各TCP通信の受信確認済みのデータ箇所の履歴を記録する状態テーブルと、
各TCP通信における送信帯域と制御帯域と受信帯域と再送帯域の過去の履歴を記録する帯域テーブルと、
を有し、
帯域制御部が、
状態テーブルに記載の送信帯域と制御帯域と受信帯域と再送帯域の過去の履歴と、状態テーブルに記載の受信確認済みのデータ箇所の履歴と基づいて、TCP通信の輻輳の有無と、受信確認済みのデータ箇所が更新中か否かを判定し、輻輳が検出されず、受信確認済みのデータ箇所が更新中のときは、TCP通信の送信帯域を増加させ、輻輳が検出されたときはTCP通信の送信帯域を減少させ、
送信バッファと受信バッファに蓄積されたデータ量が一定値以上のコネクション数、あるいは、過去の送信帯域が一定値以上のコネクション数と、送信バッファと受信バッファに蓄積されたデータ量を往復遅延時間で割った値と、に基づいて各コネクションの上限帯域を制限する通信装置が提供される。
本発明は、例えば端末間の通信を中継する通信装置に利用可能である。
200 通信装置
110、120、130 ネットワーク
111、121、131 端末
191、192、193 回線
1000、1100 処理部
1015 送信帯域制御部
500、501 受信バッファ
510、511 送信バッファ
900 プロキシ
700 状態テーブル
502、503、504 ポインタ
600 ヘッダデータ
701 エントリ

Claims (15)

  1. 第一の装置からネットワークを介して第二の装置に送信されるパケットをコネクション毎に蓄積するバッファと、
    設定される各コネクションの制御帯域に応じて、各コネクションの送信帯域を制御する帯域制御部と
    を備え、
    前記帯域制御部は、各コネクションについて、前記バッファに蓄積された各コネクションのパケットの蓄積量と、各コネクションの通信遅延時間とに基づいて、前記制御帯域の上限を制限する通信装置。
  2. 請求項1の通信装置において、
    各コネクションについて、前記バッファに蓄積されたパケットの蓄積量を、通信遅延時間で割った値に基づいて前記制御帯域の上限を制限する通信装置。
  3. 請求項1の通信装置において、
    送信したパケットに対する受信確認を受領済みのデータ箇所を記憶する状態テーブル
    をさらに備え、
    前記帯域制御部は、
    所定のコネクションにおいて輻輳が検出されず、かつ、前記状態テーブルの受信確認済みのデータ箇所が所定時間内に更新されているときは、該コネクションの送信帯域を増加させ、
    輻輳が検出されたときは該コネクションの送信帯域を減少させる通信装置。
  4. 請求項3の通信装置において、
    前記帯域制御部が、
    予め定められた最大帯域と、前記バッファに蓄積されたデータ量が予め定められた閾値以上のコネクションの数、又は、過去の送信帯域が予め定められた閾値以上のコネクションの数と、前記バッファに蓄積されたパケットの蓄積量を通信遅延時間で割った値と、に基づいて前記制御帯域の上限を制限する通信装置。
  5. 請求項3の通信装置において、
    前記バッファに蓄積された各コネクションのパケットの蓄積量と、各コネクションの通信遅延時間とに基づいて、少なくとも通信量が他のコネクションよりも少ないコネクションについて、制御帯域の上限を、予め定められた最大帯域をコネクション数で割った値よりも小さくして送信帯域を制限し、他のコネクションが予め定められた最大帯域をコネクション数で割った値より大きな帯域を利用可能にする通信装置。
  6. 請求項4の通信装置において、
    前記バッファに蓄積されたパケットの蓄積量を通信遅延時間で割った値が、前記最大帯域を前記コネクションの数で割った値より大きい場合、前記最大帯域を前記コネクションの数で割った値に基づいて前記制御帯域の上限を制限する通信装置。
  7. 請求項1の通信装置において、
    前記第一の装置からネットワークを介して前記第二の装置に送信されるパケットに関する過去の送信帯域をインターバル毎に管理し、インターバルの送信帯域が予め定められた閾値以上のコネクションの数と、前記バッファに蓄積されたパケットの蓄積量を通信遅延時間で割った値と、に基づいて各コネクションの制御帯域の上限を制限する通信装置。
  8. 請求項1の通信装置において、
    前記バッファに蓄積されたデータ量が予め定められた閾値以上のコネクションの数と、前記バッファに蓄積されたパケットの蓄積量を通信遅延時間で割った値と、に基づいて各コネクションの制御帯域の上限を制限する通信装置。
  9. 請求項1の通信装置において、
    前記最大帯域が対向装置毎に定められ、該対向装置に対応するコネクションについて、該対向装置に対する最大帯域をコネクションの数で割った値に基づいて、該対向装置に対応する各コネクションの制御帯域の上限を制限する通信装置。
  10. 請求項1の通信装置において、
    前記帯域制御部が、コネクション毎に計測した廃棄率とその変化に基づいて、各コネクションの送信帯域を制御する通信装置。
  11. 請求項1の通信装置において、
    前記帯域制御部が、コネクション毎に計測した過去のインターバルの制御帯域と、直近のインターバルの再送帯域及び廃棄帯域とに基づいて各コネクションの送信帯域を制御する通信装置。
  12. 第一の装置からネットワークを介して第二の装置に送信されるパケットをコネクション毎に蓄積するステップと、
    設定される各コネクションの制御帯域に応じて、各コネクションの送信帯域を制御するステップと
    各コネクションについて、前記バッファに蓄積された各コネクションのパケットの蓄積量と、各コネクションの通信遅延時間とに基づいて、前記制御帯域の上限値を求めるステップと
    を含む送信帯域制御方法。
  13. 第一の装置からネットワークを介して第二の装置に送信されるパケットをコネクション毎に蓄積するバッファと、
    帯域制御部と
    を備え、
    前記帯域制御部は、
    前記バッファに蓄積されたパケットのデータサイズが予め定められた閾値以上のコネクションの数に基づいて各コネクションの上限帯域を制限する、又は、
    前記第一の装置からネットワークを介して前記第二の装置に送信されるパケットに関する送信帯域を所定のインターバル毎に管理し、インターバルの送信帯域が予め定められた閾値以上のコネクションの数に基づいて各コネクションの上限帯域を制限する通信装置。
  14. 請求項13の通信装置において、
    前記通信装置から送信されるパケットの最大帯域が予め定められ、前記最大帯域を前記コネクションの数で割った値に基づいて各コネクションの上限帯域を制限する通信装置。
  15. 請求項14の通信装置において、
    前記通信装置から送信されるパケットの最大帯域が対向装置毎に定められ、コネクションに対応する対向装置との最大帯域を、該対向装置とのコネクションの数で割った値に基づいて各コネクションの上限帯域を制限する通信装置。
JP2013168106A 2013-08-13 2013-08-13 通信装置及び送信帯域制御方法 Pending JP2016201579A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2013168106A JP2016201579A (ja) 2013-08-13 2013-08-13 通信装置及び送信帯域制御方法
PCT/JP2014/065670 WO2015022809A1 (ja) 2013-08-13 2014-06-13 通信装置及び送信帯域制御方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013168106A JP2016201579A (ja) 2013-08-13 2013-08-13 通信装置及び送信帯域制御方法

Publications (1)

Publication Number Publication Date
JP2016201579A true JP2016201579A (ja) 2016-12-01

Family

ID=52468199

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013168106A Pending JP2016201579A (ja) 2013-08-13 2013-08-13 通信装置及び送信帯域制御方法

Country Status (2)

Country Link
JP (1) JP2016201579A (ja)
WO (1) WO2015022809A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020162208A1 (ja) * 2019-02-07 2020-08-13 日本電信電話株式会社 通信制御装置、および、通信制御方法

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110273550B (zh) * 2019-05-22 2020-10-27 中联重科股份有限公司 泵送设备的配对自控方法及控制装置

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4636510B2 (ja) * 2006-08-24 2011-02-23 Kddi株式会社 通信放送連携システムにおける端末のレート制御方法、端末、システム及びプログラム
JP5258938B2 (ja) * 2011-07-26 2013-08-07 株式会社日立製作所 通信装置
JP5264966B2 (ja) * 2011-07-26 2013-08-14 株式会社日立製作所 通信装置

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020162208A1 (ja) * 2019-02-07 2020-08-13 日本電信電話株式会社 通信制御装置、および、通信制御方法
JP2020129710A (ja) * 2019-02-07 2020-08-27 日本電信電話株式会社 通信制御装置、および、通信制御方法
JP7063285B2 (ja) 2019-02-07 2022-05-09 日本電信電話株式会社 通信制御装置、および、通信制御方法

Also Published As

Publication number Publication date
WO2015022809A1 (ja) 2015-02-19

Similar Documents

Publication Publication Date Title
JP5816718B2 (ja) 通信装置、通信システム、およびデータ通信の中継方法
JP5651805B2 (ja) 通信装置
JP5258938B2 (ja) 通信装置
JP5521060B2 (ja) 端末間の通信を高速化する通信装置および通信システム
US8681617B2 (en) Communication device
JP4998687B2 (ja) 通信システム、トンネリング装置、通信方法、およびプログラム
JP5832335B2 (ja) 通信装置および通信システム
WO2015022809A1 (ja) 通信装置及び送信帯域制御方法
CA2940077C (en) Buffer bloat control
JP6010502B2 (ja) パケット処理方法及びパケット処理装置
JP2014135575A (ja) 通信装置、及び、送信帯域の制御方法