JP2019054496A - 通信中継装置 - Google Patents

通信中継装置 Download PDF

Info

Publication number
JP2019054496A
JP2019054496A JP2017179201A JP2017179201A JP2019054496A JP 2019054496 A JP2019054496 A JP 2019054496A JP 2017179201 A JP2017179201 A JP 2017179201A JP 2017179201 A JP2017179201 A JP 2017179201A JP 2019054496 A JP2019054496 A JP 2019054496A
Authority
JP
Japan
Prior art keywords
queue
hash value
queues
unit
packet
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2017179201A
Other languages
English (en)
Other versions
JP6895354B2 (ja
Inventor
幹 郡谷
Miki Koritani
幹 郡谷
貴志 琴寄
Takashi Kotoyori
貴志 琴寄
南雲 隆司
Takashi Nagumo
隆司 南雲
隆 宮崎
Takashi Miyazaki
隆 宮崎
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.)
Alaxala Networks Corp
Original Assignee
Alaxala Networks Corp
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 Alaxala Networks Corp filed Critical Alaxala Networks Corp
Priority to JP2017179201A priority Critical patent/JP6895354B2/ja
Publication of JP2019054496A publication Critical patent/JP2019054496A/ja
Application granted granted Critical
Publication of JP6895354B2 publication Critical patent/JP6895354B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

【課題】キュー数以上のフローを収容しつつ、かつ通信品質を守る通信装置を提供する。【解決手段】パケットを中継する通信中継装置であって、パケットを受信し、受信したパケットを出力する受信部と、前記受信部が出力したパケットをハッシュ値に変換し、ハッシュ値とキューとの対応関係にしたがい、変換されたハッシュ値に基づいて、前記受信部が出力したパケットを複数のキューに振り分ける振分部と、前記振分部により振り分けられたパケットを複数のキューに格納するバッファと、前記バッファの複数のキューそれぞれに関する状態の情報を蓄積する学習部と、前記学習部が蓄積したキューそれぞれに関する状態の情報に基づいて、キューに複数のハッシュ値が対応する関係の情報を作成し、前記振分部へ送る学習結果処理部と、前記バッファに格納されたパケットを送信する送信部とを有する。【選択図】図2

Description

本発明は、通信中継装置に関する。
近年、動画や音声といった電子的なコンテンツをネットワーク経由でリアルタイム配信する、いわゆるストリーミング技術が普及している。かかるストリーミングをインターネット経由で実現する場合、多数のユーザ間で同一の回線が共用される。このため、帯域あたりのコストが低く抑えられる。
一方で、通信パケットの廃棄量を抑制することにより、通信品質(QoS:Quality of Service)が確保される。このようなことから、インターネットに接続する中継装置はシェーパを搭載し、一度に多量に送信されるデータを一定レートに平準化して転送する技術が知られている。
特許文献1には、ユーザやサービスに対応したフロー条件を予め構成定義情報として設定しておき、受信した通信パケットを、フローごとに用意したキューに一旦蓄積して、予め定めたシェーピング条件(送出帯域値や優先度)に基づいて通信パケットの転送を行う技術が開示されている。
特開平11−346246号公報
しかしながら、特許文献1の技術は、ユーザやサービスごとにフローを設定する必要があるため、多数のユーザやサービスに対応することが困難である。たとえば、数百万のユーザごとにフローを設定する場合、キューの数をユーザ数と同一数分確保することは困難である。仮に、ユーザ数と同一数分のキューを確保できたとしても、アクティブ率の低いユーザのキューを確保することは非効率である。
本発明は、キュー数以上のフローを収容しつつ、かつ通信品質を守ることを目的とする。
上述の課題を解決するため、本発明に係る代表的な通信装置は、パケットを中継する通信中継装置であって、パケットを受信し、受信したパケットを出力する受信部と、前記受信部が出力したパケットをハッシュ値に変換し、ハッシュ値とキューとの対応関係にしたがい、変換されたハッシュ値に基づいて、前記受信部が出力したパケットを複数のキューに振り分ける振分部と、前記振分部により振り分けられたパケットを複数のキューに格納するバッファと、前記バッファの複数のキューそれぞれに関する状態の情報を蓄積する学習部と、前記学習部が蓄積したキューそれぞれに関する状態の情報に基づいて、キューに複数のハッシュ値が対応する関係の情報を作成し、前記振分部へ送る学習結果処理部と、 前記バッファに格納されたパケットを送信する送信部とを有することを特徴とする。
本発明によれば、キュー数以上のフローを収容しつつ、かつ通信品質を守ることができる。前述した以外の課題、構成および効果は、以下の実施例の説明により明らかにされる。
通信システムの一例を示す図である。 ルータの構成例を示すブロック図である。 振分部の構成例を示す図である。 学習部の構成例を示す図である。 学習結果処理部の構成例を示す図である。 学習結果処理部による作成処理手順の例を示すフローチャートである。 学習結果処理部による更新処理手順の例を示すフローチャートである。
<システム構成例>
図1は、通信システムの一例を示す図である。通信システム100は、たとえば、動画などのコンテンツをストリーミングによってユーザに提供するネットワークシステムである。図示するように、通信システム100は、サーバ111、112と、中継装置であるルータ120、140、161〜163と、ユーザの端末であるパーソナルコンピュータ171〜173とを備えている。
サーバ111、112は、コンテンツを提供するサーバであり、各種コンテンツを記憶する。サーバ111、112は、ルータ120に直接的に接続されている。なお、ルータ120に接続されるサーバの数は、説明を簡単にするために2台として示しているが、3台以上であってもよい。
ルータ120は、ネットワーク130に接続される。ネットワーク130は、たとえば、インターネットである。ただし、ネットワーク130の種類は、特に限定されるものではなく、専用回線などのWAN(Wide Area Network)であってもよいし、LAN(Local Area Network)であってもよい。
また、ルータ140も、ネットワーク130に接続される。サーバ111、112、ルータ120、140は、たとえば、コンテンツ配信サービスを行うISP(Internet Service Provider)により設置される。
ルータ140は、家庭151〜153のそれぞれに設置されたルータ161〜163を介して、パーソナルコンピュータ171〜173にそれぞれ接続される。ルータ140とルータ161〜163との間には、他の中継装置や集線装置が介在してもよい。
パーソナルコンピュータ171〜173は、ユーザの端末であって、汎用のパーソナルコンピュータであるが、これに限定されるものではなく、ルータ161〜163に接続される端末は、サーバ111、112の配信するコンテンツを利用可能なコンピュータであればよく、たとえば、ネットワーク対応テレビなどであってもよい。
また、ルータ161〜163のそれぞれには、図示しない複数の端末が接続されていてもよい。また、ルータ140は、説明を簡単にするために、家庭151〜153のネットワークに接続されるものとしたが、実際には、たとえば、数千や数万の家庭のネットワークに接続される。
通信システム100において、サーバ111、112は、パーソナルコンピュータ171〜173から、コンテンツの利用要求を受け付けると、利用要求されたコンテンツを、利用要求元のパーソナルコンピュータ171〜173に向けて、パケットで配信する。
ルータ120、140は、サーバ111、112が配信するパケットを受信すると、それぞれのパケットを一旦バッファに蓄積し、平準化してパーソナルコンピュータ171〜173に向けて転送する。パーソナルコンピュータ171〜173は、ルータ161〜163を介して転送されたパケットを受信し、予めインストールされたアプリケーションで利用する。
サーバ111、112からパーソナルコンピュータ171〜173に向けて配信されるパケットは、たとえば宛先となるパーソナルコンピュータ171〜173の3台それぞれに応じた通信の3つのフローとなる。ただし、フローはこれに限定されるものではなく、他の情報に基づいて識別されるフローであってもよい。
<ルータの構成例>
図2は、ルータの構成例を示すブロック図である。なお、図1に示したルータ120、140は、本実施例においては同一構成であるので、以下では、特に断る場合を除いて、ルータ120の構成について説明する。
ルータ120は、受信部201、振分部202、学習部203、バッファ204、帯域制御部205、送信部206、および学習結果処理部207を備えている。
受信部201は、外部からパケット250r−1〜250r−f(fは2以上の任意の整数)を受信するインタフェースである。本実施例では、受信部201は、2つの物理ポート(不図示)を備える。この2つの物理ポートには、サーバ111、112が接続される。
受信部201は、サーバ111、112からパケット250r−1〜250r−fを受信して、振分部202に出力する。なお、受信部201は、3つ以上の物理ポートを備えていてもよい。この場合、受信部201は、3台以上のサーバが接続されてもよい。
パケット250r−1〜250r−fのそれぞれは、フロー260r−1〜260r−fに属するパケットである。このため、fはフローの数であって、パケット250r−1〜250r−fが配信される宛先のパーソナルコンピュータの数であってもよい。また、パケット250r−1〜250r−fのそれぞれは、ヘッダ251r−1〜251r−fを含む。
受信部201から振分部202へ出力されるパケットは、受信済みであり、ルータ120の内部の情報であるので、内部の情報であることを示すためにパケット250と表記するが、パケット250の内容はパケット250r−1〜250r−fの任意の1つと同じである。また、これに対応して、ルータ120の内部では、フロー260r−1〜260r−fをフロー260と表記し、ヘッダ251r−1〜251r−fをヘッダ251と表記する。
振分部202は、受信部201から入力したパケット250を、バッファ204に確保されたキュー214−1〜214−n(nは2以上の任意の整数、キュー214−1〜214−nを区別しない場合は、キュー214と表記する)のいずれかへ振り分ける。
ここで、キュー214−1〜214−nのそれぞれは、キューポインタであるQp1〜Qpnで指される。ただし、Qp1〜Qpnは、キュー214−1〜214−nへアクセス可能に特定する情報であれば、キュー214−1〜214−nそれぞれの名称や識別子であってもよい。
具体的な振り分けの処理として、たとえば、振分部202は、パケット250のヘッダ251に含まれているヘッダ情報を、所定のハッシュ関数によりハッシュ値へ変換し、パケット250をハッシュ値に対応したキュー214に振り分ける。
このために、振分部202は、変換部221とハッシュ値テーブル222とを有する。変換部221は、パケット250のヘッダ251に含まれているヘッダ情報をハッシュ関数に与えてハッシュ値Hに変換する。
ハッシュ関数に与えられる情報は、パケット250のヘッダ251に含まれるヘッダ情報であって、たとえば、MACヘッダなどのレイヤ2ヘッダ、IPv4ヘッダやIPv6ヘッダなどのレイヤ3ヘッダおよびTCPヘッダやUDPヘッダなどのレイヤ4ヘッダのいずれかまたは複数のフィールドが使用されてもよい。
使用されるフィールドの選択は、装置固定(ルータ120に予め設定されて固定)であってもよいし、装置運用者が指定可能であってもよい。ただし、サーバ111、112からパーソナルコンピュータ171〜173へ向けて配信される通信のフロー260を識別できる情報を含むフィールドが選択されることが好ましく、パーソナルコンピュータ171〜173の宛先アドレスを含むフィールドが選択されることが好ましい。
ハッシュ値テーブル222は、変換部221から得られたハッシュ値Hと、バッファ204のキュー214とを対応付けるためのテーブルである。たとえば、ハッシュ値HがH1の場合、対応するキュー214はQp1といったキューポインタの情報が格納される。
ハッシュ値テーブル222のキューポインタの情報は、書き換え可能であり、学習結果処理部207からの指示により変更することができる。なお、振分部202は、たとえば、集積回路により実現される。この場合のハッシュ値テーブル222は、集積回路内のメモリに格納される。
学習部203は、振分部202によって、ハッシュ値に対応する複数のキュー214に振り分けられたパケット250を監視して、どのハッシュ値のパケット250が、どのキュー214にどれだけの流量が振り分けられるかを学習する。
具体的には、たとえば、学習部203は、パケット250と共にハッシュ値HおよびキューポインタQpが入力され、ハッシュ値HごとにキューポインタQpを対象キューとして、現在キュー長およびパケット250の流量を監視し、学習情報として保持する。
学習部203は、振分部202による振り分けにしたがってキュー214にパケット250の情報を送出し、学習結果を学習結果処理部207に出力する。なお、学習部203は、たとえば、集積回路により実現される、または、メモリに記憶されたプログラムをプロセッサに実行させることにより実現される。
バッファ204は、受信部201が受信したパケット250を一時的に蓄積する記憶領域であり、複数のキュー214−1〜214−nを有する。本実施例では、キュー214−1〜214−nのそれぞれには、たとえば、同一の記憶容量が割り当てられている。
複数のキュー214−1〜214−nには、既に説明したように、振分部202が決定した振り分け結果にしたがって、それぞれのパケット250が格納される。なお、輻輳時には、キュー214−1〜214−nのいずれかの容量を超えるパケット250は破棄される。
たとえば、キュー214−i(iは1〜nの中の任意の整数)にキュー214−iの容量分のパケット250が既に蓄積されている場合には、新たにバッファ204に入力されるパケット250は、そのキュー214−iに格納されずに破棄される。
帯域制御部205は、キュー214−1〜214−nごとに帯域を制御して、キュー214−1〜214−nに蓄積されたパケット250を送信部206に出力する。具体的には、たとえば、帯域制御部205は、予め設定された帯域制御ルールに基づいてスケジューリングを行い、キュー214−1〜214−nから順次にパケット250を読み出して、送信部206に出力する。なお、帯域制御部205は、たとえば、集積回路により実現される。
送信部206は、パケット250をルータ120の外部へ送信するインタフェースである。外部へ送信されたパケット250s−1〜250s−fのそれぞれの内容はパケット250r−1〜250r−fの内容と同じであり、フロー260s−1〜260s−fのそれぞれはフロー260r−1〜260r−fに対応する。
ヘッダ251s−1〜251s−fはヘッダ251r−1〜251r−fに対応するものであるが、ルータ120のルータとしての動作により、一部の情報が書き換えられていてもよい。
学習結果処理部207は、学習部203より学習結果を受け取り、各種処理を実行する。たとえば、学習結果処理部207は、学習結果を元に特定の閾値以下の流量のフローを束ねるように算出し、算出した結果を振分部202のハッシュ値テーブル222に反映する。
また、学習結果処理部207は、トラップまたはシステムログなどのメッセージを用いて、送信部206から学習結果を運用者の端末に送信したり、または、図示しない表示部に表示したりすることで、運用者に学習結果を通知する。
さらに、学習結果処理部207は、学習結果が登録または削除した場合、その登録または削除の情報を運用者に通知してもよい。なお、学習結果処理部207は、具体的には、たとえば、学習結果処理部207の処理を実行するためのプログラムをプロセッサに実行させることで実現される。
<振分部202の構成例>
図3は、振分部202の構成例を示す図である。図2でも示したように、振分部202は、変換部221とハッシュ値テーブル222とを有する。
変換部221は、パケット250をハッシュ関数に基づいてハッシュ値Hに変換する。変換部221が変換するハッシュ値Hの範囲は、装置が有するキュー214の数以上の範囲で変換可能とする。この例ではキュー214の数の2倍程度の範囲で変換可能とする。
ハッシュ値テーブル222は、ハッシュ値301とキューポインタ302とを有する。ハッシュ値301は、ハッシュ値H1〜Hm(mは2以上の任意の整数、ハッシュ値H1〜Hmを区別しない場合は、ハッシュ値Hと表記する)を記憶する記憶領域である。
キューポインタ302は、キューポインタQp1〜Qpn(nはキュー214の数、キューポインタQp1〜Qpnを区別しない場合は、キューポインタQpと表記する)を記憶する記憶領域である。キューポインタQpは、ハッシュ値Hとキュー214を結びつけるポインタの役割を行う。
具体的に、図3の例では、ハッシュ値301のハッシュ値H1にキュー214−1が対応する場合、キュー214−1を指すキューポインタQp1がキューポインタ302に記憶される。
また、図3の例では、キュー214の数に対してハッシュ値301の数が2倍程度であるため、mはnの2倍程度の値であり、キューポインタ302のたとえばキューポインタQp1は、ハッシュ値301の2つのハッシュ値Hに対応している。すなわち、ハッシュ値Hにキュー214−1を結びつけるキューポインタ302のキューポインタQp1は2つ存在することになる。
また、ハッシュ値テーブル222において、ハッシュ値301のハッシュ値Hにキュー214が結び付けられていなくてもよい。このように、いずれのキュー214もハッシュ値Hに結び付けない情報であるNULLがキューポインタ302に記憶されてもよい。そして、ハッシュ値Hが使用される時点で、ハッシュ値Hにキュー214を結び付けるためのキューポインタQpが、NULLの代わりに記憶されてもよい。
なお、実際に通信されるフロー260r−1〜260r−fの数に対して、ハッシュ値H1〜Hmの数が十分な状態であり、その状態においてハッシュ関数がコリジョンの発生しない関数である場合、1つのハッシュ値Hには、1つのフロー260のパケット250が変換されるため、以下で説明する1つのハッシュ値Hは1つのフロー260であるとみなされてもよい。
<学習部203の詳細構成例>
図4は、学習部203の構成例を示す図である。学習部203は、振分部202によって各キュー214に振り分けられたパケット250のフロー260に対して、ハッシュ値Hごとに、対象キューQp、現在キュー長QL、および流量Rを監視および学習する。このために、学習部203は、パケット250と共にハッシュ値HとキューポインタQpを振分部202から入力する。
学習情報400において、ハッシュ値401と対象キュー402のそれぞれは、振分部202から入力されたハッシュ値HとキューポインタQpを、その入力された対応関係のまま記憶し、その対応関係を学習部203が学習する。
現在キュー長403は、対象キュー402のキューポインタQpが指すキュー214内のパケット250であって、ハッシュ値401のハッシュ値Hに変換されたパケット250の数を記憶する。パケット250の数の代わりに、1または複数のパケット250のバイト数などであってもよい。
流量404は、対象キュー402のキューポインタQpが指すキュー214へ出力されるパケット250であって、ハッシュ値401のハッシュ値Hに変換されたパケット250の1秒当たりの数を記憶する。パケット250の数の代わりに、1または複数のパケット250のバイト数であってもよいし、1秒当たりの代わりに、他の期間当たりであってもよい。
また、流量404は、対象キュー402のキューポインタQpが指すキュー214から出力されるパケット250であって、ハッシュ値401のハッシュ値Hに変換されたパケット250の1秒当たりの数を記憶してもよい。このために、学習部203はバッファ204あるいは帯域制御部205から流量Rのための情報を取得してもよい。
図4の例は、対象キューQp1が指すキュー214−1の中におけるハッシュ値H1に変換されたパケット250の数は現在キュー長QL1という値であり、キュー214−1へ出力されるハッシュ値H1に変換されたパケット250の1秒当たりの数は流量R1という値であることを表している。
また、ハッシュ値H7に関しては、キュー214が結び付けられておらず、現在キュー長403と流量404は定数Cである。ここで、定数Cは、図5を用いて説明するルールに該当しない数であることが好ましい。
学習部203は、振分部202から入力されたパケット250(ハッシュ値HとキューポインタQp)ごとに監視して学習情報400を更新することにより学習を行ってもよいし、予め設定された一定の周期ごとに振分部202から入力されたパケット250を監視して学習情報400を更新することにより学習を行ってもよい。
<学習結果処理部207の構成例>
図5は、学習結果処理部207の構成例を示す図である。学習結果処理部207が学習部203から学習結果271を受け取り、再振分情報272に反映させ、振分部202へ送る。学習結果271は、図4に示した学習情報400の学習した結果である。
学習結果処理部207は、学習部203から学習結果271を受け取ると、予め設定された一定のルールに基づき、ハッシュ値Hと対象キューのキューポインタQpとの対応すなわちハッシュ値Hとキュー214の結び付けを分配しなおす。
たとえば、一定のルールとして、1つのキュー214において現在キュー長が0で流量が30以下となるように、ハッシュ値単位でパケットを集約すなわちフローを集約するというルールの場合、流量が既に30を超えているハッシュ値H2と現在キューが既に1以上のハッシュ値H3は対象外となり、学習結果処理部207は学習結果2711、学習結果2713、および学習結果2714が集約可能と判定する。
その判定の結果として、学習結果2713と学習結果2714のハッシュ値H4およびハッシュ値H5を、ハッシュ値H1の対象キューであるキューポインタQp1が指すキュー214−1と結び付けるため、学習結果処理部207は、再振分情報272にハッシュ値H4に対応する再振分情報2721としてキューポインタQp1を対象キューに設定し、ハッシュ値H5に対応する再振分情報2722としてキューポインタQp1を対象キューに設定する。
再振分情報272において、結び付けしなおさないハッシュ値H1〜H3については、学習部203から受け取った時点の学習結果271と同じであり、キューポインタQp1〜Qp3のままである。これらは、学習情報400およびハッシュ値テーブル222におけるハッシュ値H1〜H3とキューポインタQp1〜Qp3の関係とも同じであり、初期情報のままであるとも言える。
学習結果処理部207が、一定のルールに基づき再振分を行う際、装置運用者の指示、たとえばコンフィグレーションにより、再振分の対象外となるハッシュ値が指定され、指定されたハッシュ値は一定のルールから除外されてもよい。
振分部202は、学習結果処理部207から再振分情報272を受け取り、再振分情報272をハッシュ値テーブル222のキューポインタ302へ反映する。特に、再振分情報2721、2722が、ハッシュ値テーブル222のキューポインタ302に設定される。
<学習結果処理部207による再振分情報272の作成処理手順例>
図6は、学習結果処理部207による処理手順の例を示すフローチャートである。図5を用いて説明したように、学習結果処理部207は学習結果271から再振分情報272を作成するため、この作成の処理手順の例を示すフローチャートとなる。ここで、一定のルールは既に説明したとおりである。
学習結果処理部207は、学習部203から学習結果271を受信し(ステップ601)、受信した学習結果271のハッシュ値Hの若番から、現在キュー長と流量を判定するため、変数iに0を設定し(ステップ602)、変数iに1を加算する(ステップ603)。
ステップ603からステップ612まではループとなっており、変数iが1からハッシュ値Hの数であるmまでを処理して終了するため、学習結果処理部207は、変数iがm+1未満であるかを判定し(ステップ604)、変数iがm+1未満でないと判定した場合、ハッシュ値H1からハッシュ値Hmまでが既に処理済みであるので、ステップ613へ進んでループを終了する。
なお、ステップ602〜604はループのための処理の例であり、ハッシュ値H1からハッシュ値Hmまでを処理できれば、これらの例に処理が限定されるものではない。
ステップ604で変数iがm+1未満であると判定した場合、学習結果処理部207は、学習結果271においてハッシュ値Hiの列の現在キュー長が0であるかを判定し(ステップ605)、現在キュー長が0であると判定した場合、学習結果271においてハッシュ値Hiの列の流量が、一定のルールに設定された閾値以下であるかを判定する(ステップ606)。
ステップ605で現在キューが0でないと判定した場合と、ステップ606で流量が閾値以下ではないと判定した場合は、ステップ603へ戻り、変数iに1が加算されて次のハッシュ値Hiが処理の対象となる。
ここで、閾値は既に説明したようにたとえば30である。なお、ステップ606は無くてもステップ611により同じ処理結果が得られるが、図5に示した学習結果271におけるハッシュ値H2の場合などで、以下で説明するステップ608からステップ611までのループの実行を予め省略できる。
ステップ606で流量が閾値以下であると判定した場合、ハッシュ値Hiよりも若番のハッシュ値Hj(jはi未満の整数)の列の対象キューであるキューポインタQpに、ハッシュ値Hiを集約するため、学習結果処理部207は、変数jに0を設定し(ステップ608)、変数jに1を加算する(ステップ608)。
ステップ608からステップ611まではループとなっており、変数jが1から変数i―1までを処理して終了するため、学習結果処理部207は、変数jが変数i未満であるかを判定し(ステップ609)、変数jが変数i未満でないと判定した場合、ハッシュ値H1からハッシュ値Hi−1までは既に処理済みであり、集約する対象のハッシュ値Hjが見つからないため、ステップ603へ戻る。
なお、ステップ607〜609はループのための処理の例であり、ハッシュ値H1からハッシュ値Hi−1までを処理できれば、これらの例に処理が限定されるものではない。
ステップ609で変数jが変数i未満であると判定した場合、学習結果処理部207は、学習結果271においてハッシュ値Hjの列の現在キュー長が0であるかを判定し(ステップ610)、現在キュー長が0であると判定した場合、学習結果271においてハッシュ値Hjの列の流量とハッシュ値Hiの列の流量との合計値が、一定のルールに設定された閾値以下であるかを判定する(ステップ611)。
ステップ610で現在キューが0でないと判定した場合と、ステップ611で流量の合計値が閾値以下ではないと判定した場合は、ステップ608へ戻り、変数jに1が加算されて次のハッシュ値Hjが処理の対象となる。
ステップ611で流量の合計値が閾値以下であると判定した場合、ハッシュ値Hiをハッシュ値Hjの列の対象キューであるキューポインタQpに集約できるので、学習結果処理部207は、学習結果271におけるハッシュ値Hjの列をハッシュ値Hiの列へコピーする(ステップ612)。
このコピーには、対象キューのキューポインタQpが含まれるため、ハッシュ値Hjに対応するキューポインタQpがハッシュ値Hiにも対応することになる。また、学習結果処理部207は、ステップ612で流量の合計値を、学習結果271におけるハッシュ値Hjの列の流量に設定し、この合計値もコピーに含める。
これにより、ステップ611でのハッシュ値Hjの列の流量は、既に合計値(図5に示したハッシュ値H1とハッシュ値H4の5+2=7)である場合、ハッシュ値Hiの列の流量をさらに加えた合計値(図5に示したハッシュ値H5を加えた7+3=10)とすることができる。
また、合計値もコピーしているので、ハッシュ値Hiをハッシュ値Hjの列の対象キューであるキューポインタQpに集約しているにもかかわらず、ハッシュ値Hjの列の流量よりハッシュ値Hiの列の流量が小さくなるという現象が発生し、ハッシュ値Hjに集約できずにハッシュ値Hiに集約してしまうということもない。
なお、ステップ611〜612では、学習結果271を変更する例を示したが、これらに限定されるものではなく、集約の対象となるキューポインタQpと流量の合計値を学習結果271とは別に記憶し、それに応じた処理手順としてもよい。
学習結果処理部207は、ステップ612を実行すると、ハッシュ値Hiに関する集約が終了したので、ステップ602へ戻り、変数iに1が加算して次のハッシュ値Hiを処理の対象とする。
ステップ604で変数iがm+1未満でないと判定した場合、学習結果処理部207は、変更された対象キューを含む学習結果271のハッシュ値と対象キューを、再振分情報272のハッシュ値と対象キューへコピーし、処理を終了する。
<学習結果処理部207による再振分情報272の更新処理手順例>
図7は、学習結果処理部207による処理手順の例を示すフローチャートである。図5、6を用いて説明した学習結果処理部207が作成した再振分情報272は、集約されたハッシュ値HのキューポインタQpすなわちキュー214が使用されなくなる。
このため、使用されなくなったキュー214へ他のハッシュ値Hを対応させ、その他のハッシュ値Hに変換されるパケット250のフロー260のバッファに割り当てる処理手順を示すフローチャートとなる。なお、ここでは、学習結果処理部207の処理として説明するが、学習結果処理部207の代わりに振分部202が処理してもよい。
使用されなくなったキュー214へ他のハッシュ値Hを対応させる場合、学習結果処理部207は、図6に示したフローチャートの処理手順を実行した後、振分部202へ再振分情報272を送る前に、以下で説明する処理手順を実行する。使用されなくなったキュー214へ他のハッシュ値Hを対応させない場合は、以下で説明する処理手順を実行せず、図6を用いて説明したように再振分情報272を送る。
学習結果処理部207は、新たに割り当てるハッシュ値Hk(kは1〜mの任意の整数)を取得する(ステップ701)。ハッシュ値Hkは、たとえば、新たに追加されたフロー260のパケット250から変換されたハッシュ値Hであり、通信が無くキュー214が結び付けられていないため、図3、4に示したキューポインタ(対象キュー)がNULLであるハッシュ値H7である。
なお、図5の例では、ハッシュ値H7の図示を省略したが、学習結果271は図4に示した学習情報400と同じ情報であり、再振分情報272は学習結果271のコピーであるので、再振分情報272のハッシュ値H7に対応する対象キューはNULLである。
学習結果処理部207は、キューポインタQpの数すなわちキュー214の数に相当するnビットのビットマップの各ビットに0を設定する(ステップ702)。このnビットのビットマップの各ビットは、使用されていないキュー214を0で表し、ステップ702はこの初期化である。
なお、図5に示した再振分情報272のようにキューポインタQp1の指すキュー214−1にハッシュ値H1、H4、H5が結び付けられる場合もあり、これはハッシュ値テーブル222、学習情報400、および学習結果271にも反映し、反映した後の学習に基づいて、たとえば一部のハッシュ値H4が他のキュー214に集約されても、ハッシュ値H1、H5は残る。
このため、図6に示したステップ612では、ハッシュ値Hiの対象キューが他のハッシュ値Hが結び付けられている可能性もあり、使用されなくなったキュー214を特定しきれないので、再振分情報272をスキャンして、nビットのビットマップにキュー214の使用状況を反映させる。
学習結果処理部207は、変数iに0を設定し(ステップ703)、変数iに1を加算し(ステップ704)、変数iがm+1未満であるかを判定する(ステップ705)。これらのステップ703〜705は、図6に示したステップ602〜604と同じである。
学習結果処理部207は、ステップ705で変数iがm+1未満であると判定した場合、再振分情報272におけるハッシュ値Hiの列の対象キューのキューポインタQpjを取得し、nビットのビットマップのj番目のビットに1を設定して(ステップ706)、ステップ704へ戻る。
ステップ705で変数iがm+1未満でないと判定すると、ハッシュ関数Hmまでの列の対象キューのキューポインタQpの情報をnビットのビットマップに反映させたので、学習結果処理部207は、nビットのビットマップの情報を調べるために、変数iに0を設定し(ステップ707)、変数iに1を加算し(ステップ708)、変数iがn+1未満であるかを判定する(ステップ709)。
学習結果処理部207は、ステップ709で変数iがn+1未満であると判定した場合、nビットのビットマップのi番目のビットが0であるかを判定し(ステップ710)し、nビットのビットマップのi番目のビットが0であると判定した場合、再振分情報272においてハッシュ値Hkの列の対象キューにキューポインタQpiを設定し、再振分情報272を更新する(ステップ711)。
学習結果処理部207は、ステップ710でnビットのビットマップのi番目のビットが0でないと判定した場合、キューポインタQpiは使用されているので、ステップ708へ戻り、ステップ709で変数iがn+1未満でないと判定した場合、キューポインタQp1〜Qpnには使用されていないものはないので、処理を終了する。
図7に示したフローチャートの処理が終了すると、既に説明したように、学習結果処理部207は、更新された再振分情報272を振分部202へ送る。ここで、ステップ709で変数iがn+1未満でないと判定した場合、さらに、ハッシュ値Hkに現在キュー長および/あるいは流量の少ないキュー214を結び付けたり、運用者へ通知したりしてもよい。
以上で説明したように、キュー214の数以上のハッシュ値Hすなわちフロー260を収容しても、現在キュー長と流量の小さな複数のハッシュ値Hを集約できるので、キュー214の容量を超える可能性は低く、パケット250が破棄されないので、通信品質を守ることができる。
また、集約により使用されなくなったキュー214へ新たなハッシュ値Hすなわち新たなフロー260を収容できるので、通信品質を守りながら、収容できるフロー260の数を増やすことも可能になる。
なお、本発明は以上で説明した実施例に限定されるものではなく、特許請求の範囲の趣旨内における様々な変形例および同等の構成が含まれる。たとえば、以上の実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに本発明は限定されない。
また、以上で説明した各構成、機能、処理部、処理手段などは、それらの一部又は全部を、たとえば集積回路で設計するなどにより、ハードウェアで実現してもよく、プロセッサがそれぞれの機能を実現するプログラムを解釈し実行することにより、ソフトウェアで実現してもよい。
各機能を実現するプログラム、テーブル、ファイルなどの情報は、メモリ、ハードディスク、SSD(Solid State Drive)などの記憶装置、又は、IC(Integrated Circuit)カード、SDカード、DVD(Digital Versatile Disc)の記録媒体に格納されてもよい。
また、制御線や情報線は説明上必要と考えられるものを示しており、実装上必要な全ての制御線や情報線を示しているとは限らない。実際には、ほとんど全ての構成が相互に接続されていると考えてよい。
120 ルータ
201 受信部
202 振分部
203 学習部
204 バッファ
205 帯域制御部
206 送信部
207 学習結果処理部
214 キュー
221 変換部
222 ハッシュ値テーブル

Claims (6)

  1. パケットを中継する通信中継装置であって、
    パケットを受信し、受信したパケットを出力する受信部と、
    前記受信部が出力したパケットをハッシュ値に変換し、ハッシュ値とキューとの対応関係にしたがい、変換されたハッシュ値に基づいて、前記受信部が出力したパケットを複数のキューに振り分ける振分部と、
    前記振分部により振り分けられたパケットを複数のキューに格納するバッファと、
    前記バッファの複数のキューそれぞれに関する状態の情報を蓄積する学習部と、
    前記学習部が蓄積したキューそれぞれに関する状態の情報に基づいて、キューに複数のハッシュ値が対応する関係の情報を作成し、前記振分部へ送る学習結果処理部と、
    前記バッファに格納されたパケットを送信する送信部と
    を有することを特徴とする通信中継装置。
  2. 請求項1に記載の通信中継装置であって、
    前記振分部は、
    ハッシュ値とキューとの対応関係を記憶するハッシュ値テーブルを有し、
    前記受信部が出力したパケットのヘッダをハッシュ値に変換し、
    変換されたハッシュ値に対応するキューの情報を、前記ハッシュ値テーブルから取得し、
    前記ハッシュ値テーブルから取得したキューの情報を前記バッファへ向けて送ることにより、前記受信部が出力したパケットを複数のキューに振り分けること
    を特徴とする通信中継装置。
  3. 請求項2に記載の通信中継装置であって、
    前記受信部が受信したパケットは、宛先アドレスをヘッダに含み、
    前記振分部は、
    前記宛先アドレスを含めてハッシュ値に変換すること
    を特徴とする通信中継装置。
  4. 請求項3に記載の通信中継装置であって、
    前記学習部は、
    前記バッファのキューのキュー長と、前記振分部により振り分けられたパケットの流量とを、ハッシュ値ごとに、前記バッファの複数のキューそれぞれに関する状態の情報として蓄積すること
    を特徴とする通信中継装置。
  5. 請求項4に記載の通信中継装置であって、
    前記学習結果処理部は、
    予め設定された値よりキュー長が小さく、予め設定された値よりバケットの流量が小さい状態となるパケットのヘッダから変換されたハッシュ値にキューを集約することにより、キューに複数のハッシュ値が対応する関係の情報を作成し、前記振分部へ送ること
    を特徴とする通信中継装置。
  6. 請求項5に記載の通信中継装置であって、
    前記学習結果処理部は、
    キューが集約されたハッシュ値の集約前のキューを、他のハッシュ値に対応させる関係の情報を作成し、前記振分部へ送ること
    を特徴とする通信中継装置。
JP2017179201A 2017-09-19 2017-09-19 通信中継装置 Active JP6895354B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2017179201A JP6895354B2 (ja) 2017-09-19 2017-09-19 通信中継装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017179201A JP6895354B2 (ja) 2017-09-19 2017-09-19 通信中継装置

Publications (2)

Publication Number Publication Date
JP2019054496A true JP2019054496A (ja) 2019-04-04
JP6895354B2 JP6895354B2 (ja) 2021-06-30

Family

ID=66013683

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017179201A Active JP6895354B2 (ja) 2017-09-19 2017-09-19 通信中継装置

Country Status (1)

Country Link
JP (1) JP6895354B2 (ja)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010171562A (ja) * 2009-01-21 2010-08-05 Fujitsu Ltd 通信装置および通信制御方法
JP2013034164A (ja) * 2011-01-26 2013-02-14 Alaxala Networks Corp 中継装置、中継方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010171562A (ja) * 2009-01-21 2010-08-05 Fujitsu Ltd 通信装置および通信制御方法
JP2013034164A (ja) * 2011-01-26 2013-02-14 Alaxala Networks Corp 中継装置、中継方法

Also Published As

Publication number Publication date
JP6895354B2 (ja) 2021-06-30

Similar Documents

Publication Publication Date Title
EP3758412B1 (en) Multichannel data transmission method, apparatus, system and computer-readable medium
US9503382B2 (en) Scalable flow and cogestion control with openflow
JP5659125B2 (ja) 中継装置、中継方法
US9407560B2 (en) Software defined network-based load balancing for physical and virtual networks
JP4529974B2 (ja) サーバ負荷分散システム、サーバ負荷分散装置、コンテンツ管理装置、及びサーバ負荷分散プログラム
US10257066B2 (en) Interconnect congestion control in a storage grid
WO2019134383A1 (zh) 控制网络拥塞的方法、接入设备和计算机可读存储介质
EP3780542B1 (en) Data transmission method and device
US10721744B2 (en) Resource reallocation
US10225201B2 (en) Scalable multicast for notification-driven content delivery in information centric networks
CN109040243B (zh) 一种报文处理方法及装置
JP5951888B2 (ja) 通信装置、通信方法、及び通信プログラム
CN109995664B (zh) 一种发送数据流的方法、设备和***
CN112087382B (zh) 一种服务路由方法及装置
JP7103883B2 (ja) 通信システム、通信制御方法、及び通信装置
WO2021101610A1 (en) Latency guarantee for data packets in a network
JP6895354B2 (ja) 通信中継装置
JP6127900B2 (ja) パケット処理装置、パケット処理方法、パケット処理プログラム
US20160294705A1 (en) Apparatus and method for content caching
JP6850618B2 (ja) 中継装置および中継方法
JP2015216498A (ja) コンテンツ配信ネットワークの通信装置、クライアント装置及びプログラム
US20180324231A1 (en) Multicast adaptive bitrate channel selection in access networks
KR20200051196A (ko) 추가의 네트워크 주소 변환 테이블을 참조하여 빠른 패킷 포워딩을 제공하는 전자 장치
JP5909833B2 (ja) 帯域幅管理デバイス、中央管理デバイス及び帯域幅管理の方法
JP7183762B2 (ja) サーバ選択装置、サーバ選択方法及びプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200423

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210129

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210202

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210317

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20210511

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210607

R150 Certificate of patent or registration of utility model

Ref document number: 6895354

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250