説明

通信装置および通信制御方法

【課題】分割されたデータの複数の物理リンクが集約された論理リンクで転送する場合のデータ中継を効率化する。
【解決手段】入力部11は、複数のデータを有するフローが入力される。出力部14は、データを出力する複数の物理リンクと、物理リンクのそれぞれに対応して設けられており、それぞれの物理リンクから出力されるデータを蓄積する蓄積部14a,14b,14cとを有する。リンク監視部13は、各蓄積部14a,14b,14cにおけるデータの蓄積状況を監視する。振分部12は、リンク監視部13による監視結果に基づいて、蓄積状況について異常が検出された場合に、入力部11によって入力されたフローが出力される物理リンクを、フローが出力されている物理リンクよりも対応する蓄積部に蓄積されているデータの量が多い物理リンクに変更する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は通信装置および通信制御方法に関し、特に分割されたデータを複数の物理リンクが集約された論理リンクで転送する通信装置および通信制御方法に関する。
【背景技術】
【0002】
ネットワークサービスの高度化に伴い、ネットワークを流れるデータ量が飛躍的に増加しており、ネットワークを構成するルータやスイッチの大容量化が進んでいる。
ここで、ルータやスイッチにおいて、大容量データを隣接するルータやスイッチへ中継する方法として、リンクアグリゲーション(Link Aggregation:LAG)を用いて、装置内の複数の物理ポートを論理的に1つのポートと捉えることにより、大容量のデータを中継する技術が用いられている。
【0003】
リンクアグリゲーションは、同一の通信装置等との間にケーブル等の物理リンクを複数設置し、これらの物理リンクを束ねて1つの仮想的な論理リンクを構成する技術であり、IEEE802.3adで規定されている。
【0004】
このリンクアグリゲーションを使用することにより、高速な物理回線を使用しなくても通信帯域を拡大することができる。また、リンクアグリゲーションは、物理回線に障害が発生した場合でも残りの回線を用いて通信を継続できることから、耐障害技術としても使用されている。
【0005】
リンクアグリゲーションを用いた通信装置において、リンクアグリゲーションの帯域の使用効率を向上させるために、受信パケットをリンクアグリケーションの各出力側ポートに適宜振り分ける技術が知られている。このような通信装置Aの例として、受信パケットの出力先のリンクアグリゲーションの物理ポートが輻輳状態になったときに、輻輳している物理ポートから他の物理ポートに振分け先を変更する通信装置がある。また、受信パケットのアドレスのハッシュ値を用いて受信パケットの出力先の物理ポートを決定すると共に、複数の物理ポート間の流量比を帯域分配比率にフィードバックする通信装置Bがある。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2007−180891号公報
【特許文献2】特開2006−5437号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかし、上記の通信装置Aでは、同一フローのパケットが、フローの途中で異なる物理ポートに振り分けられてしまうので、同一フロー内でパケットの順序が逆転してしまう場合がある。このため、通信品質が劣化するという問題点があった。
【0008】
また、これを改善するために、フローの先頭のパケットが到着した時にそのフローの出力先の物理ポートを決定し、フローが終了するまで出力先の物理ポートを固定すると、長時間データ通信が継続するロングフローが1つの物理ポートに集中してしまった場合等には、徐々に出力先の物理ポートが輻輳状態になってしまう可能性がある。その結果、パケットロスが多発して通信品質が劣化するという問題点があった。
【0009】
また、上記の通信装置Bでは、パケットのアドレス値が偏った場合に、特定の物理ポートにパケットが集中するためリンクアグリゲーション帯域を有効的に利用できない問題があった。
【0010】
本発明はこのような点に鑑みてなされたものであり、データ中継効率を改善した通信装置および通信制御方法を提供することを目的とする。
【課題を解決するための手段】
【0011】
開示の通信装置は、分割されたデータを複数の物理リンクが集約された論理リンクで転送する通信装置において、分割されたデータを複数有するフローが入力される入力部と、前記データを出力する複数の物理リンクと、前記物理リンクのそれぞれに対応して設けられており、それぞれの前記物理リンクから出力される前記データを蓄積する蓄積部とを有する出力部と、各前記蓄積部における前記データの蓄積状況を監視するリンク監視部と、前記リンク監視部による前記蓄積状況の監視結果に基づいて、前記入力部によって入力された前記データが出力される前記物理リンクを、前記フローが出力されている前記物理リンクよりも対応する前記蓄積部に蓄積されている前記データの量が多い前記物理リンクに変更する振分部と、を有する。
【0012】
開示の通信装置によれば、入力部により、分割されたデータを複数有するフローが入力される。出力部が有する複数の物理リンクにより、データが出力される。出力部が有しており、物理リンクのそれぞれに対応して設けられている蓄積部により、それぞれの物理リンクから出力されるデータが蓄積される。リンク監視部により、各蓄積部におけるデータの蓄積状況が監視される。振分部により、リンク監視部による監視結果に基づいて、出力部の蓄積状態が飽和状態になっているときに、入力部によって入力されたフローが出力される物理リンクが、フローが出力されている物理リンクよりも対応する蓄積部に蓄積されているデータの量が多い物理リンクに変更される。パケットの出力先を蓄積されているデータ量が多い物理リンクに変更することにより、パケットの順序逆転を防止すると共に、リンクアグリゲーション帯域の効率利用を実現している。
【発明の効果】
【0013】
開示の通信装置および通信制御方法によれば、ある出力側の物理リンクにパケットが集中した場合であっても、パケットの順序逆転を発生させることなく、他の出力側の物理リンクへパケットの出力先を変更し、データの振り分けを効果的に行うことで、データの中継効率を改善することが可能になる。
【図面の簡単な説明】
【0014】
【図1】本実施の形態の概要を示す図である。
【図2】通信システムの全体構成を示す図である。
【図3】スイッチ間を接続するLAGを示す図である。
【図4】スイッチのハードウェア構成を示す図である。
【図5】第1の実施の形態のスイッチの構成を示すブロック図である。
【図6】出力先テーブルのデータ構造例を示す図である。
【図7】振分管理テーブルのデータ構造例を示す図である。
【図8】出力ポートテーブルのデータ構造例を示す図である。
【図9】第1の実施の形態において、入力されたフローの途中でパケットの出力ポートが変更されるときのスイッチの状態を示す図である。
【図10】第1の実施の形態の振分判定処理の手順を示すフローチャートである。
【図11】第1の実施の形態の振分判定処理の手順を示すフローチャートである。
【図12】第1の実施の形態の変形例において、入力されたフローの途中でパケットの出力ポートが変更されるときのスイッチの状態を示す図である。
【図13】第2の実施の形態のスイッチの構成を示すブロック図である。
【図14】第2の実施の形態の振分判定処理の手順を示すフローチャートである。
【図15】第2の実施の形態の振分判定処理の手順を示すフローチャートである。
【図16】第2の実施の形態の振分判定処理の手順を示すフローチャートである。
【図17】第2の実施の形態の振分管理情報更新処理の手順を示すフローチャートである。
【図18】第3の実施の形態のスイッチの構成を示すブロック図である。
【図19】第3の実施の形態の振分判定処理の手順を示すフローチャートである。
【図20】第3の実施の形態の振分判定処理の手順を示すフローチャートである。
【図21】第4の実施の形態のスイッチの構成を示すブロック図である。
【図22】第4の実施の形態において、入力されたフローの途中でパケットの出力ポートが変更されるときのスイッチの状態を示す図である。
【図23】第4の実施の形態において、入力されたフローの途中でパケットの出力ポートが変更されるときのキューの状態を示す図である。
【図24】第4の実施の形態の振分判定処理の手順を示すフローチャートである。
【図25】第4の実施の形態の振分判定処理の手順を示すフローチャートである。
【図26】第5の実施の形態のスイッチの構成を示すブロック図である。
【図27】第6の実施の形態のスイッチの構成を示すブロック図である。
【図28】第7の実施の形態のスイッチの構成を示すブロック図である。
【図29】第7の実施の形態において、入力されたフローの途中でパケットの出力ポートが変更されるときのスイッチの状態を示す図である。
【発明を実施するための形態】
【0015】
以下、本発明の実施の形態について、図面を参照して説明する。
図1は、本実施の形態の概要を示す図である。図1に示したように、本実施の形態に係る通信装置1は、分割されたデータを複数の物理リンクが集約された論理リンクで転送する。
【0016】
図1に示す通信装置1は、入力部11、振分部12、リンク監視部13、出力部14を有している。また、出力部14は、蓄積部14a,14b,14cおよび物理リンク#0,#1,#2を有している。
【0017】
入力部11は、他の通信装置等の通信機能を有する装置と通信路によって接続可能である。入力部11は、他の装置から送信された、分割されたデータを複数有するフローが入力される。
【0018】
振分部12は、入力部11によって入力されたフローが出力される物理リンクを、論理リンクを構成する物理リンク#0,#1,#2のうちのいずれかに決定する。また、振分部12は、リンク監視部13から通知された監視結果に基づいて、入力部11によって入力されたフローが出力される物理リンクを、フローが出力されている物理リンクに対応して設けられた蓄積部に蓄積されているデータの量と比較して、その物理リンクに対応して設けられた蓄積部に蓄積されているデータの量が多い物理リンクに変更する。振分部12の決定または変更に基づいて、フローのデータが物理リンク#0,#1,#2に転送される。
【0019】
リンク監視部13は、各蓄積部14a,14b,14cにおけるデータの蓄積状況を監視する。そして、リンク監視部13は、各蓄積部14a,14b,14cの監視結果を、振分部12に通知する。
【0020】
出力部14は、データを出力する複数の物理リンク#0,#1,#2を有する。また、出力部14は、物理リンク#0,#1,#2のそれぞれに対応して設けられており、それぞれの物理リンク#0,#1,#2から出力されるデータを蓄積する蓄積部14a,14b,14cを有する。
【0021】
物理リンク#0に転送されたデータは、一旦蓄積部14aに蓄積された後に出力される。同様に、物理リンク#1に転送されたデータは、一旦蓄積部14bに蓄積された後に出力され、物理リンク#2に転送されたデータは、一旦蓄積部14cに蓄積された後に出力される。物理リンク#0,#1,#2から出力されたデータは、通信路を通じて他の通信装置等に転送される。
【0022】
このような通信装置1によれば、入力部11により、分割されたデータを複数有するフローが入力される。出力部14が有する複数の物理リンク#0,#1,#2により、データが出力される。出力部14が有しており、物理リンク#0,#1,#2のそれぞれに対応して設けられている蓄積部14a,14b,14cにより、それぞれの物理リンク#0,#1,#2から出力されるデータが蓄積される。リンク監視部13により、各蓄積部14a,14b,14cにおけるデータの蓄積状況が監視される。振分部12により、入力部11によって入力されたフローが出力される物理リンクが、論理リンクを構成する物理リンク#0,#1,#2のうちのいずれかに決定されると共に、リンク監視部13による監視結果に基づいて、蓄積部の蓄積状態が飽和状態になっているときに、入力部11によって入力されたフローが出力される物理リンクが、フローが出力されている物理リンクよりも対応する蓄積部に蓄積されているデータの量が多い他の物理リンクに変更される。
【0023】
これにより、出力側の物理リンクに対するデータの振り分けを動的に変更することで、データの中継効率を改善でき、またパケットの順序逆転も防止することができる。
次に、上記の通信装置のさらに具体的な実施の態様について説明する。
【0024】
なお、以下の実施の形態では通信装置をスイッチとして、特にMACアドレス(Media Access Control address)に基づいてデータリンク層のパケットを中継するレイヤ2スイッチを例示しして説明するが、これに制限されず、例えばIPアドレス(Internet Protocol address)に基づいてネットワーク層のパケットを中継するIPルータやL3スイッチにも適用することができる。また、OSI(Open Systems Interconnection)参照モデルにおけるレイヤ2のデータの単位を、フレーム(frame)と呼ぶこともあるが、以下の実施の形態では、説明の便宜上、すべてパケットに統一して表現する。
【0025】
[第1の実施の形態]
図2は、通信システムの全体構成を示す図である。本実施の形態の通信システムは、端末装置間でデータの送受信を行えるように、複数のレイヤ2スイッチがデータリンク層のパケットを中継するものである。
【0026】
図2に示す通信システムは、スイッチ100,100a,100b,100c,100dと端末装置40,61,62,63,64,65,66とで構成される。スイッチ100,100a,100b,100c,100dは、レイヤ2スイッチである。端末装置61,62,63,64,65,66は、ユーザが使用する端末装置である。端末装置40は、スイッチ100の管理者が使用する端末装置である。スイッチ100a,100b,100c,100dは、スイッチ100と同様に構成されており、同等の機能を有する。
【0027】
スイッチ100は、スイッチ100a,100bと接続されている。スイッチ100bは、スイッチ100c,100dと接続されている。端末装置61,62は、スイッチ100aと接続されている。端末装置63,64は、スイッチ100cと接続されている。端末装置65,66は、スイッチ100dと接続されている。端末装置40は、スイッチ100と接続されている。2つのスイッチ間またはスイッチと端末装置の間は、1つ以上の物理リンク(ネットワークケーブル)で接続されている。
【0028】
スイッチ100,100a,100b,100c,100dは、パケットに含まれるアドレスに従って、送信元の端末装置から宛て先の端末装置まで、パケットを中継する。例えば、端末装置61が端末装置63へパケットを送信する場合、スイッチ100a、スイッチ100、スイッチ100b、スイッチ100cの順にパケットが中継される。
【0029】
図3は、スイッチ間を接続するLAGを示す図である。図2において前述したスイッチは、本実施の形態では、図3に示すように、スイッチ100,100a,100bの3つのスイッチの間がLAGによって接続されている。
【0030】
スイッチ100とスイッチ100aとの間は、LAGグループ#Aに属する物理ポートであるポート#0からポート#2によって接続されている。また、スイッチ100とスイッチ100bとの間は、LAGグループ#Bに属する物理ポートであるポート#12からポート#15によって接続されている。なお、スイッチ100のポート#3からポート#11は、図示しない他のスイッチと接続されているものとする。また、各ポートには、それぞれ入力ポートと出力ポートとが設けられているものとする。具体的には、ポート#0は、入力用ポートおよび出力用ポートを有する。ポート#1以下も同様である。
【0031】
図4は、スイッチのハードウェア構成を示す図である。図4は、スイッチ100の内部構成を示したものであるが、スイッチ100a,100b,100c,100dも同様の構成で実現できる。スイッチ100は、CPU(Central Processing Unit)101、インタフェースカード102a,102b,102c,102d、スイッチカード103、テーブル記憶メモリ104、ポート監視部105、バス106を有している。
【0032】
CPU101は、スイッチ100全体を制御している。CPU101は、プログラムによる処理を実行する。CPU101は、図示しないメモリに保持されたデータを用いて、同じくメモリに保持されたプログラムを実行する。CPU101は、図示しない通信インタフェースを介して、管理者が使用する端末装置40から送信されるコマンドを受信すると共に、コマンドに対する実行結果を端末装置40に応答する。
【0033】
テーブル記憶メモリ104は、複数のテーブルを記憶している。テーブル記憶メモリ104に記憶されるテーブルには、論理リンクの構成を管理するテーブル、論理リンク内でのパケットの転送先を決定するためのテーブル、パケットの転送先を示す情報を記憶するテーブルが含まれる。
【0034】
バス106には、CPU101、インタフェースカード102a,102b,102c,102d、スイッチカード103、テーブル記憶メモリ104、ポート監視部105が接続されている。
【0035】
インタフェースカード102a,102b,102c,102dは、それぞれ複数個(例えば、8個)の通信ポートを有している。それぞれの通信ポートには、1つの物理リンクを接続できる。インタフェースカード102a,102b,102c,102dは、それぞれの通信ポートを監視してパケットを取得する。なお、インタフェースカード102a,102b,102c,102dは、複数の通信ポートに同時にパケットが到来した場合に備えて、パケットを一時的に保持するバッファを内部に有している。そして、インタフェースカード102a,102b,102c,102dは、取得したパケットをスイッチカード103に送る。
【0036】
スイッチカード103は、図示しない学習テーブルを有している。スイッチカード103は、学習テーブルに、過去に受信したパケットの送信元アドレスと、そのパケットが到来した通信ポートまたは論理リンクの識別情報とを対応付けて記憶している。この学習テーブルは、スイッチカード103によって随時更新される。
【0037】
そして、スイッチカード103は、インタフェースカード102a,102b,102c,102dのいずれかからパケットを受け取ると、学習テーブルを参照して、そのパケットの転送先を決定する。ここで、決定した転送先が論理リンクである場合、スイッチカード103は、テーブル記憶メモリ104に記憶されたテーブルを参照して、転送に使用する具体的なインタフェースカード102a,102b,102c,102dおよび通信ポートを決定する。その後、スイッチカード103は、パケットを、決定したインタフェースカード102a,102b,102c,102dに送る。
【0038】
パケットを受け取ったインタフェースカード102a,102b,102c,102dは、受け取ったパケットを、決定された通信ポートから送信先に出力する。
ポート監視部105は、インタフェースカード102a,102b,102c,102dの通信ポートを監視する。そして、ポート監視部105は、インタフェースカード102a,102b,102c,102dの通信ポートに接続された物理リンクの故障や復旧を検出すると、CPU101にその旨を通知する。
【0039】
図5は、第1の実施の形態のスイッチの機能を示すブロック図である。なお、図5ではスイッチ100の機能を示しているが、図2において前述した他のスイッチ100a,100b,100c,100dもスイッチ100と同様の構成によって実現され、同様の機能を有する。
【0040】
図5に示すように、本実施の形態のスイッチ100は、複数の物理ポート(以下、ポート)が集約された論理リンクであるLAGにより、データが分割されたパケットを転送する。スイッチ100は、入力部121、振分部122、スイッチ部123、出力ポート監視部124、出力部140、出力先情報記憶部151、振分管理情報記憶部152、出力ポート情報記憶部153を有する。また、振分部122は、出力先決定部122a、フロー識別部122b、振分先判定部122cを有する。また、出力部140は、出力ポート毎に対応付けられた出力キュー部141a,141b,141c,・・・を有する。
【0041】
入力部121は、他のスイッチ、端末装置、情報処理装置等の通信機能を有する装置とLAGおよびその他の方式の通信路によって接続可能である。入力部121は、入力側のポート(例えば、ポート#3)を有し、他の装置から送信された、他のスイッチ100a,100b,100c,100dおよび端末装置等の通信装置に転送されるフローの分割されたデータ等のパケットが入力される。
【0042】
振分部122は、出力先情報記憶部151に記憶されている出力先情報および振分管理情報記憶部152に記憶されている振分管理情報を参照して、入力部121によって入力されたフローのパケットが出力されるポートを決定する。
【0043】
振分部122は、入力部121によって入力されたフローが出力されるポートを、LAGグループを構成するポート#0,#1,#2,・・・のうちのいずれかに決定する。また、振分部122は、出力ポート監視部124から通知された監視結果に基づいて、各ポートの負荷の状況について異常が検出された場合、入力部121によって入力されたフローが出力されるポートである出力ポートを、出力ポート以外のポートであってLAGグループを構成する各ポートの出力キュー部のそれぞれのバッファに蓄積されているデータの量と比較して、ポートに対応して設けられたバッファに蓄積されているデータの量が多いポートに変更する。
【0044】
出力先決定部122aは、入力部121に入力されたフローのパケットのヘッダ情報と、MACアドレスの学習結果から生成された出力先情報記憶部151に記憶されている出力先情報に基づいて、パケットが出力され得るポートを決定するものである。なお、出力先決定部122aは、MACアドレスの学習に替えて、IPアドレスおよびルーティングプロトコルに基づいてパケットが出力され得るポートを決定してもよい。
【0045】
この出力先決定部122aは、入力されたフローのパケットの宛先MACアドレスに基づいて、各フローのパケットの出力ポートを特定する。すなわち、出力先決定部122aは、入力されたフローのパケットに含まれるMACアドレスを抽出する。このとき、入力されたフローのパケットのMACアドレスが、出力先情報によって、当該フローのパケットの出力と対応づけられている。これを用いて、スイッチ100は、入力されたフローのパケットのMACアドレスから、出力先情報で対応付けられた出力ポートを取得する。
【0046】
また、入力されたフローの出力先がLAGの場合は、その出力先情報において、LAGで送信されるフローのパケットのMACアドレスに対してさらにLAGで送信される旨を示す情報を設定することで、そのフローのパケットの出力先としてLAGで出力されることおよび出力されるLAGグループを指定することができる。これに従い、出力先決定部122aは、そのフローのパケットの宛先を、指定されたLAGグループに決定する。
【0047】
フロー識別部122bは、LAGの運用時に入力されたパケットのヘッダ情報からフロー識別子を生成し、フローを特定する。
また、フロー識別部122bは、入力されたフローのパケットのヘッダ情報に基づいてハッシュ(hash)演算(例えば、SHA−1:Secure Hash Algorithm 1)を行うことにより、フロー識別子を生成する。このとき、フロー識別部122bは、パケットからヘッダ情報を抽出し、抽出されたヘッダ情報を用いてハッシュ演算を行う。
【0048】
ここで、ヘッダ情報とは、パケットの例えば先頭部分等の、パケットの一部分を構成する情報であり、例えば、パケットに含まれている各種のアドレスを用いることができる。ヘッダ情報として用いるアドレスとは、パケットの送信元の端末装置(または送信元の端末装置が属する集合)や宛先の端末装置(または宛先の端末装置が属する集合)を特定するための情報である。ヘッダ情報は、例えば、送信元/宛先のMACアドレス、送信元/宛先のIP(Internet Protocol)アドレス等である。
【0049】
振分先判定部122cは、振分管理情報を参照して、フロー識別部122bによって計算されたハッシュ値に基づいてパケットが出力されるポートを決定する。
また、振分先判定部122cは、LAGの運用時にLAGグループ内の複数のポートの帯域を効率的に利用するために、後述する出力ポート監視部124によるポートの監視結果に基づいて送出先のLAGが有する出力ポートを設定する。
【0050】
スイッチ部123は、振分部122の判断に基づいてパケットを出力ポートに転送する。これにより、スイッチ100に入力されたフローのパケットが、振分部122による設定に基づいて出力部140が有する出力ポートから出力され、フローのデータが送信先に向かって中継される。
【0051】
出力ポート監視部124は、スイッチ100の出力部140が有する各ポートの輻輳状態、負荷の状態、障害の発生の有無等のトラフィック状態を監視するものである。出力ポート監視部124は、各出力キュー部141a,141b,141c,・・・のそれぞれのバッファにおけるデータの蓄積状況を監視する。出力ポート監視部124は、各バッファの監視結果を、出力ポート情報記憶部153に出力ポート情報として記憶させると共に、振分部122に通知する。
【0052】
出力ポート監視部124は、LAGが有する各出力ポートの最新のキュー長(その出力ポートで出力を待っている状態のパケットのデータサイズの総量)を監視すると共に、各ポートの負荷を監視する。本実施の形態では、ポートの負荷は、一定時間内にそれぞれの出力キュー部に入力されたパケットの総データ量で求めるが、これに限らず、長期的な負荷を監視するために過去の負荷情報に重み付けを行って、加重平均で負荷を算出してもよい。
【0053】
出力部140は、データを出力する複数のポート#0,#1,#2,・・・と、ポート#0,#1,#2,・・・のそれぞれに対応して設けられており、それぞれのポート#0,#1,#2,・・・から出力されるデータを蓄積するバッファを有する出力キュー部141a,141b,141c,・・・を有する。出力キュー部141a,141b,141c,・・・は、蓄積部として機能する。
【0054】
出力キュー部141a,141b,141c,・・・は、出力部140が有する各ポートに対応して設けられており、データ送信の品質制御およびスイッチ100の入力部121が有する入力側の各ポート(例えば、ポート#3)から同時に入力されたパケットの待ち合わせ等を行う。出力キュー部141a,141b,141c,・・・が有するそれぞれのバッファは、先入れ先出し方式によってデータが読み出される。
【0055】
出力先情報記憶部151は、出力先テーブル151a(図6において後述)として出力先情報を記憶している。出力先情報は、LAG等によりフローのパケットが出力され得るポートを示す情報である。
【0056】
振分管理情報記憶部152は、振分管理テーブル152a(図7において後述)として振分管理情報を記憶している。振分管理情報は、各フローのパケットについて振分先判定部122cで決定された出力ポートを示す情報である。
【0057】
出力ポート情報記憶部153は、出力ポートテーブル153a(図8において後述)として出力ポート情報を記憶している。出力ポート情報は、各ポートの出力側のバッファのキュー長、出力側の通信路の輻輳状態および障害の発生の有無等を示す情報である。
【0058】
ここで、スイッチ100は、図4に示した複数(例えば、4つ)のインタフェースカード102a,102b,102c,102dによって構成されている。ここでは、フレームが入力されるインタフェースカードを入力カード(例えば、インタフェースカード102a)とし、フレームが出力されるインタフェースカードを出力カード(例えば、インタフェースカード102b,102c)とするが、各インタフェースカードは、機能的には同一であり、それぞれのカードにおいてフレームの入力および出力が可能である。すなわち、スイッチ100は、入力部121、振分部122、出力ポート監視部124として機能する入力側のカードと、出力部140としてそれぞれ機能する出力側のカードとによって、入力されたフローのパケットを他のスイッチ等の装置に通信路を介して出力する。
【0059】
本実施の形態では、例えば、インタフェースカード102a,102b,102c,102dのように、それぞれが複数のポートを持つインタフェースカードを複数用いて、物理リンクであるポートを集約して構成した論理リンクであるLAGが構成される。このとき、各ポートが物理リンクとして通信が行われる。すなわち、このLAGは、複数のポートを持つ複数のインタフェースで構成される。
【0060】
本実施の形態のスイッチ100では、上記の各部が以下のように機能する。
スイッチ100の入力部121が有するポート#3からフローの入力パケットが入力されると、振分部122が有する出力先決定部122aにおいてパケットのヘッダ情報が抽出され、抽出されたヘッダ情報に含まれるMACアドレスを検索キーとして出力先情報記憶部151の出力先テーブル151aから出力ポートを示す情報を取得する。なお、スイッチ100がIPルータ等の場合は、IPアドレスが検索キーとなる。入力されたパケットが出力先決定部122aによりLAGで出力されるパケットであると判断されると、フロー識別部122bにおいてフローが特定される。このとき、フロー識別部122bにおいて、パケットのヘッダ情報のハッシュ演算を実行してフローの識別を行う。具体的には、ハッシュ演算の結果得られる値をフロー識別子とする。
【0061】
次に、振分先判定部122cは、まず振分管理情報記憶部152の振分管理テーブル152aに、入力されたフローのエントリがあるかをチェックする。
チェックの結果、入力されたパケットのフローが新規のフローであった場合には、振分先判定部122cは、出力ポート監視部124の情報に基づき、複数のポートの中で最も負荷の低いポートを選択し、その情報を振分管理テーブル152aに記憶させる。そして、振分先判定部122cは、入力されたパケットを、決定したポートに転送する。
【0062】
ここで、初期状態では、振分管理テーブル152aにはそのフローのエントリは存在しないため、振分先判定部122cは、入力されたパケットがそのフローの先頭パケットであると判断し、出力ポート監視部124の監視結果に基づいて出力先であるLAGが有するポートの中から最も負荷の低い物理ポートを出力ポートとして選択する。そして、選択されたポートの出力ポート番号をそのフローのフロー識別子に関連付けて振分管理テーブル152aに記憶させる。また、入力された先頭パケットは、選択されたポートにスイッチ部123により転送され、そのポートから出力される。
【0063】
一方、チェックの結果、そのパケットと既に同一フローのパケットが入力されていた場合には、振分先判定部122cは、振分管理テーブル152aに記憶された情報を参照して、出力ポートに設定されているポートについて、ポートの状態を示す出力ポート情報を入手し、出力ポート監視部124の情報を参照して出力ポートが輻輳状態か否かを確認する。
【0064】
この場合、振分先判定部122cは、先頭パケットが入力された場合とは異なり、まず振分管理テーブル152aに記憶されている出力ポートのポート番号を取得し、その出力ポートの輻輳状態をチェックする。輻輳状態は、出力ポート監視部124が監視している負荷状態が一定値以上であるときに輻輳状態、一定値未満のときを輻輳状態でないとして判断する。
【0065】
出力ポート監視部124は、各ポートについて一定時間毎に監視し、監視結果を出力ポートテーブル153aに出力ポート情報として記憶させると共に、必要に応じて振分部122に通知する。
【0066】
次に、スイッチ100にそのフローの後続パケットが入力されると、振分先判定部122cによる前述したエントリのチェックまでは、フローの先頭パケットと同様の処理が行われる。
【0067】
ここで、エントリのチェックにより既にエントリがあるフローのパケットであると判断されると、出力ポート監視部124による出力ポートの監視結果が参照される。
出力ポートが輻輳状態でなければ、振分先判定部122cは、振分管理テーブル152aから取得した出力ポートにパケットを転送する。これにより、入力された後続パケットの出力ポートが輻輳状態でないと判断されたときは、入力された後続パケットは、振分管理テーブル152aから取得されたポート番号のポート(すなわち出力ポート)にスイッチ部123により転送され、転送されたポートから出力される。
【0068】
このように出力ポートが輻輳状態でない場合は、同一フローの後続パケットは、先頭パケットが到着したときに登録された振分管理テーブル152aの情報に従って転送されるので、同一フロー内でのパケットの順序の逆転が発生することはない。
【0069】
一方、出力ポートが輻輳状態であれば、振分先判定部122cは、LAGの他のポートの中で、現在の出力ポートよりも負荷が低く、かつ、現在の出力ポートよりもキュー長が大きいポートがあるかを検索し、この条件に適合するポートがあった場合には、そのフローの振分管理テーブル152aの出力ポートを示す情報を条件に適合するポートの情報に変更すると共に入力されたフローのパケットを変更したポートに転送する。条件に適合するポートが存在しない場合は、輻輳状態でないときと同じく、出力ポートにパケットを転送する。
【0070】
これにより、出力ポートが輻輳状態であると判断されたときは、LAGが有するポートの中で、現在の出力ポートよりもが負荷低く、かつ、現在の出力ポートの出力キュー部のキュー長よりもキュー長の大きいポートがあるか否かが判断される。
【0071】
これらの条件をすべて満たすポートがなければ、後続パケットは、輻輳状態でない時と同様に振分管理テーブル152aに従ってパケットを転送する。これらの条件をすべて満たすポートがあれば、振分先判定部122cは、そのフローのパケットが出力されるポートを、条件を満たすポート(複数ある場合には、例えば、それらのうち最も負荷が低いポート)に変更する。また、この変更に基づいて、振分先判定部122cは、そのフローのフロー識別子と変更後の出力ポートのポート番号とを関連付けて、振分管理テーブル152aのそのフローの情報を更新する。
【0072】
振分管理テーブル152aの情報が更新された後にスイッチ100に入力されたそのフローの後続パケットは、上記で変更された物理ポートへ向けて転送され、スイッチ部123により変更されたポートから出力される。
【0073】
このように、パケットが入力されるときに出力される物理ポートが輻輳状態であった場合には、出力されるポートをLAGが有するポートのうちより負荷の低い物理ポートに変更することによってトラフィックの集中を回避することができると共に、キュー長の大きい物理ポートを新たな出力ポートとすることで、後続パケットが既に振り分けられてしまった先行するパケットよりも遅くスイッチ100から出力されるため、同一フロー内でのパケットの順序の逆転を回避することが可能となる。
【0074】
これにより、パケットが入力された時に、出力ポートが輻輳状態であった場合に他のポートにパケットを振り分けたとしても、変更後のポートのキュー長が現在のポートよりも大きいためパケットの順序の逆転が発生しないので、通信品質を維持したまま輻輳が発生したポートのトラフィックを他のポートへ移動することができる。その結果、LAGの帯域を効率的に利用することが可能となる。
【0075】
図6は、出力先テーブルのデータ構造例を示す図である。図6に示す出力先テーブル151aは、MACアドレスの学習によって自律的に設定され、またはスイッチ100の管理者等によって設定され、テーブル記憶メモリ104に記憶されている。テーブル記憶メモリ104は、出力先情報記憶部151として機能する。出力先テーブル151aは、スイッチ100に入力されるデータのフローが出力されるリンクを示すテーブルである。出力先テーブル151aには、データのフローを特定する情報を示す“エントリ”フィールド、そのフローがLAGから出力されるか否かを示す“LAG”フィールド、およびそのフローが出力され得るリンクを示す“ポート”フィールドが設けられている。各フィールドの横方向に並べられた情報同士が互いに関連付けられている。
【0076】
エントリフィールドには、各フローを特定する情報として、送信先の通信装置(例えば、図3において前述したスイッチ100a)のMACアドレスが設定される。なお、本実施の形態では、エントリフィールドに送信先のMACアドレスが設定されるが、これに限らず、例えばスイッチ100がL3スイッチである場合等には、IPアドレスが、IPルーティングプロトコル学習によって自律的に設定されてもよく、またはスイッチ100の管理者等によって設定されてもよい。
【0077】
LAGフィールドには、各フローが論理リンクから出力されるか否かを示す情報が設定される。具体的には、そのフローの出力先がLAGである場合、“1”が設定される。一方、LAGでない場合、“0”が設定される。
【0078】
ポートフィールドには、各フローが出力され得るリンクを示す情報が設定される。そのフローが出力されるリンクがLAGである場合、そのフローが出力されるLAGが有するポートを示すポート番号が設定される。一方、そのフローが出力されるリンクがLAGでない場合、そのフローが出力されるポートを示すポート番号が設定される。
【0079】
すなわち、出力先テーブル151aが有するLAGフィールドに、入力されたフローがLAGから出力されることを示す“1”が設定されている場合、出力ポートフィールドに“1”が設定されている出力ポートは、そのフローが出力されるLAGが有するポートであることを示す。図6の例では、スイッチ100に入力されたフローのパケットはLAGによって出力されると共に、LAGが有するポート#0,#1,#2,・・・,#15のいずれかから出力されることを示している。
【0080】
図7は、第1の実施の形態の振分管理テーブルのデータ構造例を示す図である。図7に示す振分管理テーブル152aは、スイッチ100の管理者等によって設定され、テーブル記憶メモリ104に記憶されている。テーブル記憶メモリ104は、振分管理情報記憶部152として機能する。振分管理テーブル152aは、LAGにおける各フローが出力されるポートを示すテーブルである。振分管理テーブル152aには、LAGにおいてデータのフローを出力する出力ポートを識別する情報を示す“フロー識別子”フィールド、LAGにおいてそのフローが出力されるポートの番号を示す“出力ポート番号”フィールド、およびそのフローのパケットがスイッチ100に最後に入力された時刻を示す“エントリ更新時刻”フィールドが設けられている。各フィールドの横方向に並べられた情報同士が互いに関連付けられている。
【0081】
フロー識別子フィールドには、スイッチ100に入力されるフローと、LAGにおいてそのフローが出力されるポートとを対応付ける情報であるフロー識別子が設定される。具体的には、フロー識別子には、例えば、フローの送信先のアドレス(図6のエントリフィールド参照)に基づいて算出されたハッシュ値が設定される。
【0082】
出力ポート番号フィールドには、LAGにおいてフローのパケットが出力されるポートを特定する情報が設定される。具体的には、出力ポート番号フィールドには、例えば、パケットが送信される出力ポートのポート番号が設定される。
【0083】
エントリ更新時刻フィールドには、LAGによって出力されるフローの最新のパケットがスイッチ100に入力された時刻を示す情報であるエントリ更新時刻が設定される。
図8は、第1の実施の形態の出力ポートテーブルのデータ構造例を示す図である。図8に示す出力ポートテーブル153aは、スイッチ100の管理者等によって設定され、テーブル記憶メモリ104に記憶されている。テーブル記憶メモリ104は、出力ポート情報記憶部153として機能する。出力ポートテーブル153aは、出力ポート監視部124によるスイッチ100の各LAGが有するポートの監視結果を示すテーブルである。出力ポートテーブル153aには、LAGが有する各ポートを特定する情報を示す“ポート”フィールド、そのポートの負荷を示す“負荷”フィールド、そのポートのキュー長を示す“キュー長”フィールド、およびそのポートの輻輳や障害の発生の有無等の状態を示す“状態”フィールドが設けられている。各フィールドの横方向に並べられた情報同士が互いに関連付けられている。
【0084】
ポートフィールドには、スイッチ100の各LAGが有する各ポートを特定する情報であるポート番号が設定される。
負荷フィールドには、各ポートの負荷を示す情報が設定される。具体的には、例えば、そのポートの出力キュー部に一定時間内に入力されたパケットの総データ量が設定される。
【0085】
キュー長フィールドには、各ポートに設けられたバッファの蓄積量を示す情報が設定される。具体的には、例えば、各ポートに設けられた出力キュー部(図5において前述)のキュー長が設定される。
【0086】
状態フィールドには、各ポートが輻輳状態であることを示す“輻輳”、正常であることを示す“正常”、障害が発生していることを示す“障害発生”等の状態を示す情報が設定される。
【0087】
次に、本実施の形態で行われるフローのデータの出力ポートの変更について説明する。
図9は、第1の実施の形態において、入力されたフローの途中でパケットの出力ポートが変更されるときのスイッチの状態を示す図である。
【0088】
図9に示すように、スイッチ100のポート#3からフロー識別子が“A”のフロー(以下、フローA)の入力パケットのうちの1番目のパケット(図9において四角の中に“1”が記載されたパケット。以下同様)が入力されると、図5において前述したように、振分部122によって振分管理テーブル152a(図7において前述)で入力されたフローAのエントリがあるかチェックされる。チェックの結果入力されたパケットがフローAの先頭パケットであると判断されると、出力ポート監視部124の監視結果に基づいて出力先であるLAGが有するポートの中から最も負荷の低いポートを出力ポートとしてそのパケットが出力される。
【0089】
ここでは、1番目のパケットがスイッチ100に入力されたときの、フローAが出力されるLAGの出力ポートのうち、最も負荷の低いポートが出力ポートであるポート#0であるものとする。この場合、この出力ポート番号#0がフロー識別子Aに関連付けられて振分管理テーブル152a上に記憶される。
【0090】
振分管理テーブル152aに出力されるポートが記憶された後、スイッチ100に入力された先頭パケットは、上記で選択されたポート#0に転送され、スイッチ部123を経由してスイッチ100のポート#0から出力される。
【0091】
2番目のパケットがスイッチ100に入力されたときも、振分管理テーブル152aのエントリのチェックまでは、先頭パケットの入力時と同じ処理が行われる。2番目のパケットのエントリのチェックでは、既に振分管理テーブル152aには先頭パケットによるフローAのエントリがあるため、振分先判定部122cは、入力された2番目のパケットがフローAの後続パケットであると認識する。
【0092】
入力されたパケットがフローの後続パケットである2番目のパケットと認識された後は、振分部122は、先頭パケットの入力時とは異なり、まず振分管理テーブル152aに保存されている出力ポート番号を取得し、出力ポートの輻輳状態を判断する。輻輳状態は、出力ポート監視部124(図5において前述)によって監視されている負荷状態が一定値以上であるときには輻輳状態であると判断される一方、一定値未満のときには輻輳状態でないと判断される。
【0093】
ここで、出力先ポートが輻輳状態でなかったときは、振分管理テーブル152aから取得したポート番号#0を出力ポートに選択して、パケットをポート#0に転送する。これにより、この場合2番目のパケットは出力ポートであるポート#0から出力される。このように出力先のポートが輻輳状態でなかった場合、同一フローの後続パケットは、先頭パケットが入力されたときに設定された振分管理テーブル152aの情報に従って同一のポートに出力されるので、同一フロー内でのパケットの順序の逆転が発生することはない。次に、3番目のパケットが入力されたときもフローAが出力される出力ポートであるポート#0が輻輳状態でなかった場合、2番目のパケットと同様にポート#0へ転送される。
【0094】
ここで、4番目のパケットが到着したときに、ポート#0の負荷が増大して、出力ポートが輻輳状態になっていたものとする。この場合、振分部122は、図5において前述したように、LAGが有するポートであるポート#0,#1,#2,・・・の中で、現在の出力ポートであるポート#0の負荷(90%)よりも負荷が低く、かつ、出力ポート監視部124による各バッファのキュー長の監視結果から現在の出力ポートであるポート#0のキュー長(100)よりもキュー長の大きいポートがあるか否かを判定し、上記条件をすべて満たすポートがあれば、出力ポートをそのポートへ変更する。条件をすべて満たすポートがなければ、非輻輳時と同様に、振分管理テーブル152aの値に従ってパケットが出力される。
【0095】
この図9の例では、ポート#0の現在の負荷は、50%から90%に増大しており、バッファ141a1のキュー長は、100Byteである。ポート#1の負荷は、60%であり、バッファ141b1のキュー長は、70Byteである。ポート2の負荷は、70%であり、バッファ141c1の負荷は、150Byteである。
【0096】
従って、ポート#2が上記の条件をすべて満たすため、振分部122は、フローAの新しい出力ポートをポート#2に変更し、フロー識別子Aとこのポート#2とを関連付けて、振分管理テーブル152aの情報を更新する。
【0097】
振分管理テーブル152aの情報が更新された後に入力されたフローAの後続パケットである5番目のパケットおよび6番目のパケットは、各出力ポートの状態に変化がなければ、上記で変更された出力ポートであるポート#2に転送され、スイッチ部123を経由してポート#2から出力される。
【0098】
このように、パケットが入力されたときに出力ポートに設定されているが輻輳状態であった場合には、出力ポートをLAGが有するポートのうち、より負荷の低いポートに変更することによってトラフィックの集中を回避することができる。
【0099】
また、キュー長の大きいポートを新たな出力ポートとすることで、出力ポートが変更された後の後続パケット(例えば、4〜6番目のパケット)が既に振り分けられてしまった先行するパケット(例えば1〜3番目のパケット)よりも遅くスイッチ100から出力することができ、同一フロー内でのパケットの順序の逆転を回避することが可能となる。
【0100】
次に、本実施の形態で実行される処理について説明する。
図10および図11は、第1の実施の形態の振分判定処理の手順を示すフローチャートである。図10および図11に示す振分判定処理は、LAGが有する出力ポートのうちから出力ポートを選択すると共に、選択した出力ポートによって入力されたフローのパケットを出力する処理である。振分判定処理は、出力先決定部122a(図5において前述)が出力先情報記憶部151(図5において前述)に記憶されている出力先テーブル151a(図6において前述)を参照して、入力部121によりスイッチ100に入力されたパケットがLAGで出力されるパケットであると判定した場合に実行が開始される。
【0101】
[ステップS11]フロー識別部122b(図5において前述)は、パケットのヘッダ情報にハッシュ演算を実行して、実行結果をフロー識別子に設定することによりフロー識別を行う。
【0102】
[ステップS12]振分先判定部122cは、振分管理情報記憶部152(図5において前述)の振分管理テーブル152a(図7において前述)から振分管理情報を取得する。
【0103】
[ステップS13]振分先判定部122cは、ステップS12で取得した振分管理情報を参照して、ステップS11で算出されたフロー識別子と比較し、入力されたパケットのフローのエントリの有無について判定する。エントリがあれば、ステップS21(図11)に処理が進められる。一方、エントリがなければ、処理がステップS14に進められる。
【0104】
[ステップS14]振分先判定部122cは、出力ポート監視部124の監視結果に基づいて、入力されたパケットのフローが出力されるLAGが有するポートのうち、最も負荷が小さいポートを出力ポートに設定する。
【0105】
[ステップS15]振分先判定部122cは、入力されたパケットをステップS14で出力ポートに設定されたポートに対して転送させる。そして入力されたパケットは、転送されたポートから他のスイッチ等の装置に対して出力される。
【0106】
[ステップS16]振分先判定部122cは、ステップS14で出力ポートに設定されたポートを、振分管理情報記憶部152の振分管理テーブル152aに記憶されている振分管理情報に記憶させる。その後、処理は終了する。
【0107】
[ステップS21]振分先判定部122cは、出力ポート監視部124の監視結果に基づいて、入力されたパケットのフローに現在設定されている出力ポートが輻輳状態であるか否かについて判定する。出力ポートが輻輳状態であれば、処理がステップS22に進められる。一方、出力ポートが輻輳状態でなければ、処理がステップS25に進められる。
【0108】
[ステップS22]振分先判定部122cは、出力ポート監視部124の監視結果に基づいて、入力されたパケットのフローが出力されるLAGが有するポートのうち負荷が現在設定されている出力ポートよりも小さいポートがあるか否かについて判定する。出力ポートよりも負荷が小さいポートがあれば、処理がステップS23に進められる。一方、出力ポートよりも負荷が小さいポートがなければ、処理がステップS25に進められる。
【0109】
[ステップS23]振分先判定部122cは、出力ポート監視部124の監視結果に基づいて、ステップS22の条件を満たすポートのうち、キュー長が現在設定されている出力ポートよりも大きいポートがあるか否かについて判定する。出力ポートよりもキュー長が大きいポートがあれば、処理がステップS24に進められる。一方、出力ポートよりもキュー長が大きいポートがなければ、処理がステップS25に進められる。
【0110】
[ステップS24]振分先判定部122cは、ステップS23の条件を満たすポートのうち、負荷が最も小さいポートを、入力されたパケットのフローの新たな出力ポートに設定する。その後、処理がステップS15(図10)に進められる。
【0111】
[ステップS25]振分先判定部122cは、振分管理情報記憶部152の振分管理テーブル152aから振分管理情報を取得し、取得した振分管理情報に基づいて、入力されたパケットを出力ポートに設定されたポートに対して転送させる。そして入力されたパケットは、転送されたポートから他のスイッチ等の装置に対して出力される。その後、処理は終了する。
【0112】
なお、本実施の形態では、入力されたパケットに基づいて、そのパケットが属するフローの出力ポートの設定が振分部122により変更されると、入力されたそのパケット(およびその後に後続するパケット)が、変更された後の出力ポートから出力される。これに限らず、入力されたパケットは変更前の出力ポートから出力され、入力されたパケットと同一のフローであって次に後続するパケット以降は変更後の出力ポートから出力されてもよい。
【0113】
以上に示すように、第1の実施の形態によれば、出力側のポートに対するデータの振り分けを効果的に行うことで、データの中継効率を改善することが可能になる。
(第1の実施の形態の変形例)
次に、第1の実施の形態の変形例について説明する。
【0114】
本変形例では、前述した第1の実施の形態と比較して、スイッチ100のポート毎に出力速度が異なる場合において、本実施の形態の出力ポート監視部が、キュー長をポートの出力速度(送信レート)に応じて換算する点が異なる。よってここでは、前述した第1の実施の形態と異なる構成のみ説明し、第1の実施の形態と同一の構成には同じ符号を付して、その説明を省略する。
【0115】
第1の実施の形態では、スイッチ100の各ポートの送信レートはすべて同一であることを前提にしていた。これに対して本変形例では、各ポートの出力速度が異なる場合においても適用可能である。以下に、本変形例のスイッチの動作について説明する。
【0116】
図12は、第1の実施の形態の変形例において、入力されたフローの途中でパケットの出力ポートが変更されるときのスイッチの状態を示す図である。図12に示すように、スイッチ100のポート#0,#1,#2によってLAGが組まれているものとする。ポート#0の送信レートは、500Mbps(bits per second)であるものとする。同様にポート#1の送信レートは、1000Mbpsであるものとし、ポート#2の送信レートは、250Mbpsであるものとする。
【0117】
本変形例の出力ポート監視部124aは、第1の実施の形態と異なり、バッファ141a1,141b1,141c1における蓄積量とデータを出力する速度とに応じて負荷を評価し、評価結果を示す負荷情報を出力する。このとき、負荷情報は、バッファ141a1,141b1,141c1における蓄積量をポートがデータを出力する速度で除算した結果によってポートの負荷を示す。
【0118】
ここで、振分部122により、あるフローのパケットの出力ポートがポート#0に設定され、スイッチ部123によりそのフローのパケットがポート#0に転送されているものとする。
【0119】
また、そのフローの後続パケットが到着したときに、出力ポート監視部124aによる監視の結果、出力ポートであるポート#0が輻輳状態であるものとし、ポート#1,#2の負荷がポート#0よりも低いものとする。また、そのときポート#0のバッファ141a1のキュー長は、100MByteであるものとする。同様に、ポート#1のバッファ141b1のキュー長は、150MByteであるものとし、ポート#2のバッファ141c1のキュー長は、60MByteであるものとする。
【0120】
このとき、上記第1の実施の形態と同様に、そのフローの出力ポート(変更前はポート#0)を他のポートに変更する。このとき、本変形例では、変更先のポートは以下のように選択される。
【0121】
本変形例では、図12に示すように、各ポートの送信レートが異なる場合、出力ポート監視部124aは、各ポートのキュー長を送信レートで除算して、現在、ポートに滞留しているデータが全て出力されるまでの時間を求める。例えばポート#0は、キュー長が100MBで、送信レートが500Mbpsであるため、100MB×8(bit換算)÷500Mbps=1.6秒となる。また、同様の計算により、ポート#1が1.2秒、ポート#2が1.92秒となる。
【0122】
そして、振分部122は、そのフローの出力ポートを変更するか否かについて判定するときに、上記の算出によって得られた値を、第1の実施の形態のキュー長に替えて判定を行う。その結果、最終的には現在の送出先のポート#0(演算結果は1.6)よりもキュー長が大きい、ポート#2(演算結果は1.92)が移動先のポートとして選択される。
【0123】
なお、本変形例では、バッファに蓄積されているキュー長を送信レートで除算することにより時間に換算して異なる送信レートのポート同士を比較するが、これに限らず、例えば、送信レートをキュー長で除算する、または、これらと比例関係にある値を用いる等、他の方法で換算して比較してもよい。
【0124】
以上に示すように、第1の実施の形態の変形例によれば、出力に要する時間に基づいて同一の評価基準に換算して比較することにより、各ポートの送信速度が異なる場合にも、出力側のポートに対するデータの振り分けを効果的に行うことができ、データの中継効率を改善することが可能になる。
【0125】
[第2の実施の形態]
次に、第2の実施の形態について説明する。上記の第1の実施の形態との相違点を中心に説明し、同様の事項については同一の符号を用いると共に説明を省略する。
【0126】
第2の実施の形態は、第1の実施の形態に加えて、ポートの障害の発生およびバッファの蓄積量を監視して出力ポートの変更の判断に用いる点、前回の出力ポートの変更から一定時間を経過するまでは出力ポートの変更を行わない点、およびフローの振分管理情報を消去する点で、第1の実施の形態と異なる。
【0127】
図13は、第2の実施の形態のスイッチの機能を示すブロック図である。図13に示すように、本実施の形態のスイッチ200は、複数のポートが集約された論理リンクであるLAGにより、データが分割されたパケットを転送する。スイッチ200は、入力部221、振分部222、スイッチ部223、出力ポート監視部224、出力部240、出力先情報記憶部251、振分管理情報記憶部252、出力ポート情報記憶部253を有する。また、振分部222は、出力先決定部222a、フロー識別部222b、振分先判定部222cを有する。また、出力部240は、出力ポート毎に対応付けられた出力キュー部241a,241b,241c,・・・を有する。
【0128】
入力部221は、他のスイッチ、端末装置、情報処理装置等の通信機能を有する装置とLAGおよびその他の方式の通信路によって接続可能である。入力部221は、入力側のポート(例えば、ポート#3)を有し、他の装置から送信された、他のスイッチおよび端末装置等の通信装置に転送されるフローの分割されたデータ等のパケットが入力される。
【0129】
振分部222は、出力先情報記憶部251に記憶されている出力先情報および振分管理情報記憶部252に記憶されている振分管理情報を参照して、入力部221によって入力されたフローのパケットが出力されるポートを決定する。
【0130】
振分部222は、入力部221によって入力されたフローが出力されるポートを、LAGグループを構成するポート#0,#1,#2,・・・のうちのいずれかに決定する。また、振分部222は、出力ポート監視部224から通知された監視結果に基づいて、各ポートの負荷の状況について異常が検出された場合、入力部221によって入力されたフローが出力されるポートである出力ポートを、出力ポート以外のポートであってLAGグループを構成する各ポートの出力キュー部のそれぞれのバッファに蓄積されているデータの量と比較して、ポートに対応して設けられたバッファに蓄積されているデータの量が多いポートに変更する。
【0131】
ここで、振分部222は、出力ポート監視部224による監視結果に基づいて、入力部によって入力されたフローが出力されるポートを、障害の発生が検出されているポート以外のポートに変更する。
【0132】
また、振分部222は、振分管理情報記憶部252に記憶されている振分管理情報に基づいて、フローが有するデータを出力するポートを決定する。そして、振分部222は、振分管理情報記憶部252に記憶されている振分管理情報に基づいて、フローが有するデータが入力部221に対して最後に入力された時刻を取得し、取得した時刻から一定時間経過している場合には、フローの振分管理情報を削除する。
【0133】
また、振分部222は、入力部221によって入力されたフローが出力されるポートを、フローが出力されている出力ポートよりも出力キュー部241a,241b,241c,・・・が有するバッファに蓄積されているデータの量が多く、かつ、出力キュー部241a,241b,241c,・・・が有するバッファに所定量以上の空きがあるポートに変更する。
【0134】
また、振分部222は、入力部221によって入力されたフローが出力されるポートを変更した回数が所定の時間内において所定の回数を超えている場合には、ポートを変更しない。
【0135】
出力先決定部222aは、入力部221に入力されたフローのパケットのヘッダ情報と、MACアドレスの学習結果から生成された出力先情報記憶部251に記憶されている出力先情報に基づいて、パケットが出力され得るポートを決定するものである。なお、出力先決定部222aは、MACアドレスの学習に替えて、IPアドレスおよびルーティングプロトコルに基づいてパケットが出力され得るポートを決定してもよい。
【0136】
この出力先決定部222aは、入力されたフローのパケットの宛先MACアドレスに基づいて、各フローのパケットの出力ポートを特定する。すなわち、出力先決定部222aは、入力されたフローのパケットに含まれるMACアドレスを抽出する。このとき、入力されたフローのパケットのMACアドレスが、出力先情報によって、当該フローのパケットの出力と対応づけられている。これを用いて、スイッチ200は、入力されたフローのパケットのMACアドレスから、出力先情報で対応付けられた出力ポートを取得する。
【0137】
また、入力されたフローの出力先がLAGの場合は、その出力先情報において、LAGで送信されるフローのパケットのMACアドレスに対してさらにLAGで送信される旨を示す情報を設定することで、そのフローのパケットの出力先としてLAGで出力されることおよび出力されるLAGグループを指定することができる。これに従い、出力先決定部222aは、そのフローのパケットの宛先を、指定されたLAGグループに決定する。
【0138】
フロー識別部222bは、LAGの運用時に入力されたパケットのヘッダ情報からフロー識別子を生成し、フローを特定する。
また、フロー識別部222bは、入力されたフローのパケットのヘッダ情報に基づいてハッシュ演算を行うことにより、フロー識別子を生成する。このとき、フロー識別部222bは、パケットからヘッダ情報を抽出し、抽出されたヘッダ情報を用いてハッシュ演算を行う。
【0139】
ここで、ヘッダ情報とは、例えばパケットの先頭部分等の、パケットの一部分を構成する情報であり、例えば、パケットに含まれている各種のアドレスを用いることができる。ヘッダ情報として用いるアドレスとは、パケットの送信元の端末装置(または送信元の端末装置が属する集合)や宛先の端末装置(または宛先の端末装置が属する集合)を特定するための情報である。ヘッダ情報は、例えば、送信元/宛先のMACアドレス、送信元/宛先のIPアドレス等である。
【0140】
振分先判定部222cは、振分管理情報を参照して、フロー識別部222bによって計算されたハッシュ値に基づいてパケットが出力されるポートを決定する。
また、振分先判定部222cは、LAGの運用時にLAGグループ内の複数のポートの帯域を効率的に利用するために、後述する出力ポート監視部224によるポートの監視結果に基づいて送出先のLAGが有する出力ポートを設定する。
【0141】
スイッチ部223は、振分部222の判断に基づいてパケットを出力ポートに転送する。これにより、スイッチ200に入力されたフローのパケットが、振分部222による設定に基づいて出力部240が有する出力ポートから出力され、フローのデータが送信先に向かって中継される。
【0142】
出力ポート監視部224は、スイッチ200の出力部240が有する各ポートの輻輳状態、負荷の状態、障害の発生の有無等のトラフィック状態を監視するものである。出力ポート監視部224は、各出力キュー部241a,241b,241c,・・・のそれぞれのバッファにおけるデータの蓄積状況を監視する。出力ポート監視部224は、各バッファの監視結果を、出力ポート情報記憶部253に出力ポート情報として記憶させると共に、振分部222に通知する。
【0143】
出力ポート監視部224は、LAGが有する各出力ポートの最新のキュー長(その出力ポートで出力を待っている状態のパケットのデータサイズの総量)を監視すると共に、各ポートの負荷を監視する。本実施の形態では、ポートの負荷は、一定時間内にそれぞれの出力キュー部に入力されたパケットの総データ量で求めるが、これに限らず、長期的な負荷を監視するために過去の負荷情報に重み付けを行って、加重平均で負荷を算出してもよい。
【0144】
また、出力ポート監視部224は、各ポートを監視することにより出力部240が有する各ポートの障害の発生を検出すると共に、障害の発生を検出した場合には、障害の発生に関して必要な事項を出力ポート情報記憶部253に出力ポート情報として記憶させ、振分部222に通知する。
【0145】
出力ポート監視部224は、出力部240が有する各ポートから出力されるデータの負荷の状況を監視する。
出力部240は、データを出力する複数のポート#0,#1,#2,・・・と、ポート#0,#1,#2,・・・のそれぞれに対応して設けられており、それぞれのポート#0,#1,#2,・・・から出力されるデータを蓄積するバッファを有する出力キュー部241a,241b,241c,・・・を有する。
【0146】
出力キュー部241a,241b,241c,・・・は、出力部240が有する各ポートに対応して設けられており、データ送信の品質制御およびスイッチ200の入力部221が有する入力側の各ポート(例えば、ポート#3)から同時に入力されたパケットの待ち合わせ等を行う。出力キュー部241a,241b,241c,・・・が有するそれぞれのバッファは、先入れ先出し方式によってデータが読み出される。出力キュー部241a,241b,241c,・・・は、蓄積部として機能する。
【0147】
出力先情報記憶部251は、出力先テーブル151a(図6において前述)として出力先情報を記憶している。出力先情報は、LAG等によりフローのパケットが出力され得るポートを示す情報である。
【0148】
振分管理情報記憶部252は、振分管理テーブル152a(図7において前述)として振分管理情報を記憶している。振分管理情報は、各フローのパケットについて振分先判定部222cで決定された出力ポートを示す情報である。
【0149】
振分管理情報記憶部252は、フローと、フローが有するデータが出力されるポートと、フローが有するデータが入力部に対して最後に入力された時刻と、を対応付けて示す振分管理情報を記憶する。
【0150】
出力ポート情報記憶部253は、出力ポートテーブル153a(図8において前述)として出力ポート情報を記憶している。出力ポート情報は、各ポートの出力側のバッファのキュー長、出力側の通信路の輻輳状態および障害の発生の有無等を示す情報である。
【0151】
次に、本実施の形態で実行される処理について説明する。
図14から図16は、第2の実施の形態の振分判定処理の手順を示すフローチャートである。図14から図16に示す振分判定処理は、LAGが有する出力ポートのうちから出力ポートを選択すると共に、選択した出力ポートによって入力されたフローのパケットを出力する処理である。振分判定処理は、出力先決定部222a(図13において前述)が出力先情報記憶部251(図13において前述)に記憶されている出力先テーブル151a(図6において前述)を参照して、入力部221によりスイッチ200に入力されたパケットがLAGで出力されるパケットであると判定した場合に実行が開始される。
【0152】
[ステップS31]フロー識別部222b(図13において前述)は、パケットのヘッダ情報にハッシュ演算を実行して、実行結果をフロー識別子に設定することによりフロー識別を行う。
【0153】
[ステップS32]振分先判定部222cは、振分管理情報記憶部252(図13において前述)の振分管理テーブル152a(図7において前述)から振分管理情報を取得する。
【0154】
[ステップS33]振分先判定部222cは、ステップS32で取得した振分管理情報を参照して、ステップS31で算出されたフロー識別子と比較し、入力されたパケットのフローのエントリの有無について判定する。エントリがあれば、ステップS42(図15)に処理が進められる。一方、エントリがなければ、処理がステップS34に進められる。
【0155】
[ステップS34]振分先判定部222cは、出力ポート監視部224の監視結果に基づいて、入力されたパケットのフローに現在設定されている出力ポートが障害発生状態であるか否かについて判定する。出力ポートが障害発生状態であれば、処理がステップS42に進められる。一方、出力ポートが障害発生状態でなければ、処理がステップS51(図16)に進められる。
【0156】
このとき振分先判定部222cは、出力ポート監視部224の監視結果に基づいて、入力されたパケットのフローの出力ポートに設定されているポートについて障害が発生している状態であるかを確認する。障害が発生している状態であった場合には、振分先判定部222cは、例えば、出力ポートの負荷を最大値とみなして処理を進める。また、ポートの障害の発生とは、ポート自身の障害の発生およびポートに接続された通信路の障害の発生をいうものとする。
【0157】
[ステップS41]振分先判定部222cは、ステップS56(図16)における出力ポートの設定の変更に伴い、出力ポートが最後に変更された時刻を示す出力ポート変更時刻を更新する。
【0158】
この出力ポート変更時刻は、スイッチ200が有するCPU101(図4において前述)内のタイマによって管理される。また、出力ポート変更時刻は、スイッチ100に入力されるすべてのフローにおける出力ポートの変更のうち、最後の変更が行われた時刻を示す。すなわち、スイッチ200に入力されるすべてのフローについて同一の出力ポート変更時刻が設定され、いずれか1つのフローについて出力ポートの変更があれば、出力ポート変更時刻が更新される。また、出力ポート変更時刻は、あくまでも出力ポートの変更が対象であり、フローにエントリがない場合の出力ポートの設定(ステップS42)は対象ではない。出力ポートの過剰な変更の発生を防止することが目的だからである。
【0159】
[ステップS42]振分先判定部222cは、出力ポート監視部224の監視結果に基づいて、入力されたパケットのフローが出力されるLAGが有するポートのうち、最も負荷が小さいポートを出力ポートに設定する。
【0160】
[ステップS43]振分先判定部222cは、入力されたパケットをステップS42で出力ポートに設定されたポートに対して転送させる。そして入力されたパケットは、転送されたポートから他のスイッチ等の装置に対して出力される。
【0161】
[ステップS44]振分先判定部222cは、ステップS42で出力ポートに設定されたポートを、振分管理情報記憶部252の振分管理テーブル152aに記憶されている振分管理情報に記憶させる。
【0162】
[ステップS45]振分先判定部222cは、振分管理情報記憶部252の振分管理テーブル152aに記憶されている入力されたパケットのフローの振分管理情報のエントリ更新時刻を更新する。その後、処理は終了する。
【0163】
[ステップS51]振分先判定部222cは、出力ポート監視部224の監視結果に基づいて、入力されたパケットのフローに現在設定されている出力ポートが輻輳状態であるか否かについて判定する。出力ポートが輻輳状態であれば、処理がステップS52に進められる。一方、出力ポートが輻輳状態でなければ、処理がステップS57に進められる。
【0164】
[ステップS52]振分先判定部222cは、図15のステップS41で前述した出力ポート変更時刻をチェックして、前回発生した出力ポートの変更から一定時間が経過しているか否かについて判定する。一定時間が経過していれば、処理がステップS53に進められる。一方、一定時間が経過していなければ、処理がステップS57に進められる。
【0165】
[ステップS53]振分先判定部222cは、出力ポート監視部224の監視結果に基づいて、入力されたパケットのフローが出力されるLAGが有するポートのうち負荷が現在設定されている出力ポートよりも小さいポートがあるか否かについて判定する。出力ポートよりも負荷が小さいポートがあれば、処理がステップS54に進められる。一方、出力ポートよりも負荷が小さいポートがなければ、処理がステップS57に進められる。
【0166】
[ステップS54]振分先判定部222cは、出力ポート監視部224の監視結果に基づいて、ステップS52の条件を満たすポートのうち、キュー長が現在設定されている出力ポートよりも大きいポートがあるか否かについて判定する。出力ポートよりもキュー長が大きいポートがあれば、処理がステップS55に進められる。一方、出力ポートよりもキュー長が大きいポートがなければ、処理がステップS57に進められる。
【0167】
[ステップS55]振分先判定部222cは、出力ポート監視部224の監視結果に基づいて、ステップS54の条件を満たすポートのうち、バッファに予め定められた一定量以上の余裕を有するポートがあるか否かについて判定する。一定量以上の余裕を有するポートがあれば、処理がステップS56に進められる。一方、一定量以上の余裕を有するポートがなければ、処理がステップS57に進められる。
【0168】
[ステップS56]振分先判定部222cは、ステップS53の条件を満たすポートのうち、負荷が最も小さいポートを、入力されたパケットのフローの新たな出力ポートに設定する。その後、処理がステップS41(図15)に進められる。
【0169】
[ステップS57]振分先判定部222cは、振分管理情報記憶部252の振分管理テーブル152aから振分管理情報を取得し、取得した振分管理情報に基づいて、入力されたパケットを出力ポートに設定されたポートに対して転送させる。そして入力されたパケットは、転送されたポートから他のスイッチ等の装置に対して出力される。
【0170】
図17は、第2の実施の形態の振分管理情報更新処理の手順を示すフローチャートである。図17に示す振分管理情報更新処理は、振分管理情報記憶部252(図13において前述)の振分管理テーブル152a(図7において前述)に記憶されている振分管理情報が有するエントリ更新時刻から予め定められた一定の時間が経過しているフローのエントリを消去する処理である。振分管理情報更新処理は、例えば、さらに別に予め定められた一定時間毎等、所定の契機で実行が開始される。
【0171】
[ステップS61]振分先判定部222cは、振分管理情報記憶部252の振分管理テーブル152aから振分管理情報を取得し、振分管理情報でエントリがあるすべてのフローのうちエントリ更新時刻から予め定められた一定の時間が経過しているフローを抽出する。。
【0172】
[ステップS62]振分先判定部222cは、ステップS61で抽出されたフローがあるか否かについて判定する。抽出されたフローがあれば、ステップS63に処理が進められる。一方、抽出されたフローがなければ、処理は終了する。
【0173】
[ステップS63]振分先判定部222cは、ステップS61で抽出されたフローのエントリを、振分管理情報から消去する。その後、処理は終了する。
なお、ポートの障害の発生の検出方法は、対向装置から定期的に送信されてくるリンクアグリゲーション制御プロトコル(LACP)の受信状況に基づいて判断してもよく、スイッチ200自身から障害監視用のパケットを送信して各ポートが正常であるか否かを監視してもよい。
【0174】
以上に示すように、第2の実施の形態によれば、ポートの変更を判定する際に、負荷、キュー長に加えて、ポートのバッファのキューの容量に余裕があること(例えば、キュー容量全体の10%以上の空き容量があること)を条件として加えることで、バッファ溢れを防止すると共に、短期間の間に出力先のポートの変更の頻度が高くなり過ぎることも防止し、帯域をより効率的に使用することができる。
【0175】
また、出力ポートに障害が発生した場合でも、障害の発生以降に入力されたパケットについてはLAGグループの他のポートを経由して正常に転送することができる。
また、所定の時間が経過して、削除対象となったフローのパケットが新たに入力されたときは、エントリがないため、新規フローとみなされて、最新の出力ポート状態に基づいて出力ポートが決定し直されるため、より効率的にパケットの振り分けを行うことが可能となる。すなわち、同じフローのパケットであったとしても、長期的な視点でみたときには、フロー内のパケットの塊毎に最新のポートの負荷の状態等に応じて出力ポートが新たに設定し直されるので、リンクの帯域を効率的に利用することができる。
【0176】
また、一定間隔毎に出力ポートが変更されるフローを制限することで、複数のフローの変更後の出力ポートが1つのポートに集中することにより変更後の出力ポートで輻輳が発生することを防止すると共に、出力ポートの変化の頻度が高過ぎて却って負荷や負担が生じたり、2または3以上の特定のポートの間でフローの出力ポートの振動的な変更が繰り返されたりすることを防止することができる。
【0177】
また、出力ポートおよび出力ポートと接続されている通信路の障害の発生を監視して、障害の発生時には出力ポートを変更することにより、出力ポートまたは出力ポートと接続されている通信路に障害が発生した場合に、出力ポートの変更以降については正常に転送されるので、故障が発生した出力ポートのフローのパケットがすべて廃棄されてしまうことを防止できる。
【0178】
[第3の実施の形態]
次に、第3の実施の形態について説明する。上記の第1の実施の形態との相違点を中心に説明し、同様の事項については同一の符号を用いると共に説明を省略する。
【0179】
第3の実施の形態は、第1の実施の形態に加えて、負荷が最小であるポートの読み出しを停止する点で、第1の実施の形態と異なる。
図18は、第3の実施の形態のスイッチの機能を示すブロック図である。図18に示すように、本実施の形態のスイッチ300は、複数のポートが集約された論理リンクであるLAGにより、データが分割されたパケットを転送する。スイッチ300は、入力部321、振分部322、スイッチ部323、出力ポート監視部324、出力部340、出力先情報記憶部351、振分管理情報記憶部352、出力ポート情報記憶部353を有する。また、振分部322は、出力先決定部322a、フロー識別部322b、振分先判定部322cを有する。また、出力部340は、出力ポート毎に対応付けられた出力キュー部341a,341b,341c,・・・を有する。
【0180】
入力部321は、他のスイッチ、端末装置、情報処理装置等の通信機能を有する装置とLAGおよびその他の方式の通信路によって接続可能である。入力部321は、入力側のポート(例えば、ポート#3)を有し、他の装置から送信された、他のスイッチおよび端末装置等の通信装置に転送されるフローの分割されたデータ等のパケットが入力される。
【0181】
振分部322は、出力先情報記憶部351に記憶されている出力先情報および振分管理情報記憶部352に記憶されている振分管理情報を参照して、入力部321によって入力されたフローのパケットが出力されるポートを決定する。
【0182】
振分部322は、入力部321によって入力されたフローが出力されるポートを、LAGグループを構成するポート#0,#1,#2,・・・のうちのいずれかに決定する。また、振分部322は、出力ポート監視部324から通知された監視結果に基づいて、各ポートの負荷の状況について異常が検出された場合、入力部321によって入力されたフローが出力されるポートである出力ポートを、出力ポート以外のポートであってLAGグループを構成する各ポートの出力キュー部のそれぞれのバッファに蓄積されているデータの量と比較して、ポートに対応して設けられたバッファに蓄積されているデータの量が多いポートに変更する。
【0183】
出力先決定部322aは、入力部321に入力されたフローのパケットのヘッダ情報と、MACアドレスの学習結果から生成された出力先情報記憶部351に記憶されている出力先情報に基づいて、パケットが出力され得るポートを決定するものである。なお、出力先決定部322aは、MACアドレスの学習に替えて、IPアドレスおよびルーティングプロトコルに基づいてパケットが出力され得るポートを決定してもよい。
【0184】
この出力先決定部322aは、入力されたフローのパケットの宛先MACアドレスに基づいて、各フローのパケットの出力ポートを特定する。すなわち、出力先決定部322aは、入力されたフローのパケットに含まれるMACアドレスを抽出する。このとき、入力されたフローのパケットのMACアドレスが、出力先情報によって、当該フローのパケットの出力と対応づけられている。これを用いて、スイッチ300は、入力されたフローのパケットのMACアドレスから、出力先情報で対応付けられた出力ポートを取得する。
【0185】
また、入力されたフローの出力先がLAGの場合は、その出力先情報において、LAGで送信されるフローのパケットのMACアドレスに対してさらにLAGで送信される旨を示す情報を設定することで、そのフローのパケットの出力先としてLAGで出力されることおよび出力されるLAGグループを指定することができる。これに従い、出力先決定部322aは、そのフローのパケットの宛先を、指定されたLAGグループに決定する。
【0186】
フロー識別部322bは、LAGの運用時に入力されたパケットのヘッダ情報からフロー識別子を生成し、フローを特定する。
また、フロー識別部322bは、入力されたフローのパケットのヘッダ情報に基づいてハッシュ演算を行うことにより、フロー識別子を生成する。このとき、フロー識別部322bは、パケットからヘッダ情報を抽出し、抽出されたヘッダ情報を用いてハッシュ演算を行う。
【0187】
ここで、ヘッダ情報とは、パケットの例えば先頭部分等の、パケットの一部分を構成する情報であり、例えば、パケットに含まれている各種のアドレスを用いることができる。ヘッダ情報として用いるアドレスとは、パケットの送信元の端末装置(または送信元の端末装置が属する集合)や宛先の端末装置(または宛先の端末装置が属する集合)を特定するための情報である。ヘッダ情報は、例えば、送信元/宛先のMACアドレス、送信元/宛先のIPアドレス等である。
【0188】
振分先判定部322cは、振分管理情報を参照して、フロー識別部322bによって計算されたハッシュ値に基づいてパケットが出力されるポートを決定する。
また、振分先判定部322cは、LAGの運用時にLAGグループ内の複数のポートの帯域を効率的に利用するために、後述する出力ポート監視部324によるポートの監視結果に基づいて送出先のLAGが有する出力ポートを設定する。
【0189】
スイッチ部323は、振分部322の判断に基づいてパケットを出力ポートに転送する。これにより、スイッチ300に入力されたフローのパケットが、振分部322による設定に基づいて出力部340が有する出力ポートから出力され、フローのデータが送信先に向かって中継される。
【0190】
出力ポート監視部324は、スイッチ300の出力部340が有する各ポートの輻輳状態、負荷の状態、障害の発生の有無等のトラフィック状態を監視するものである。出力ポート監視部324は、各出力キュー部341a,341b,341c,・・・のそれぞれのバッファにおけるデータの蓄積状況を監視する。出力ポート監視部324は、各バッファの監視結果を、出力ポート情報記憶部353に出力ポート情報として記憶させると共に、振分部322に通知する。
【0191】
出力ポート監視部324は、LAGが有する各出力ポートの最新のキュー長(その出力ポートで出力を待っている状態のパケットのデータサイズの総量)を監視すると共に、各ポートの負荷を監視する。本実施の形態では、ポートの負荷は、一定時間内にそれぞれの出力キュー部に入力されたパケットの総データ量で求めるが、これに限らず、長期的な負荷を監視するために過去の負荷情報に重み付けを行って、加重平均で負荷を算出してもよい。
【0192】
出力部340は、データを出力する複数のポート#0,#1,#2,・・・と、ポート#0,#1,#2,・・・のそれぞれに対応して設けられており、それぞれのポート#0,#1,#2,・・・から出力されるデータを蓄積するバッファを有する出力キュー部341a,341b,341c,・・・を有する。
【0193】
また、出力部340は、出力ポート監視部324による監視の結果、ポートの負荷の状況について異常が検出された場合において、フローが出力されている出力ポートよりも出力キュー部341a,341b,341c,・・・のバッファに蓄積されているデータの量が多いポートが存在しないとき、フローが出力されている出力ポート以外のポートであって、出力ポート監視部324による監視結果に基づいて負荷が最も小さいポートの出力を停止させる。
【0194】
出力キュー部341a,341b,341c,・・・は、出力部340が有する各ポートに対応して設けられており、データ送信の品質制御およびスイッチ300の入力部321が有する入力側の各ポート(例えば、ポート#3)から同時に入力されたパケットの待ち合わせ等を行う。出力キュー部341a,341b,341c,・・・が有するそれぞれのバッファは、先入れ先出し方式によってデータが読み出される。出力キュー部341a,341b,341c,・・・は、蓄積部として機能する。
【0195】
出力先情報記憶部351は、出力先テーブル151a(図6において前述)として出力先情報を記憶している。出力先情報は、LAG等によりフローのパケットが出力され得るポートを示す情報である。
【0196】
振分管理情報記憶部352は、振分管理テーブル152a(図7において前述)として振分管理情報を記憶している。振分管理情報は、各フローのパケットについて振分先判定部322cで決定された出力ポートを示す情報である。
【0197】
出力ポート情報記憶部353は、出力ポートテーブル153a(図8において前述)として出力ポート情報を記憶している。出力ポート情報は、各ポートの出力側のバッファのキュー長、出力側の通信路の輻輳状態および障害の発生の有無等を示す情報である。
【0198】
次に、本実施の形態で実行される処理について説明する。
図19および図20は、第3の実施の形態の振分判定処理の手順を示すフローチャートである。図19および図20に示す振分判定処理は、LAGが有する出力ポートのうちから出力ポートを選択すると共に、選択した出力ポートによって入力されたフローのパケットを出力する処理である。振分判定処理は、出力先決定部322a(図18において前述)が出力先情報記憶部351(図18において前述)に記憶されている出力先テーブル151a(図6において前述)を参照して、入力部321によりスイッチ300に入力されたパケットがLAGで出力されるパケットであると判定した場合に実行が開始される。
【0199】
[ステップS71]フロー識別部322b(図18において前述)は、パケットのヘッダ情報にハッシュ演算を実行して、実行結果をフロー識別子に設定することによりフロー識別を行う。
【0200】
[ステップS72]振分先判定部322cは、振分管理情報記憶部352(図18において前述)の振分管理テーブル152a(図7において前述)から振分管理情報を取得する。
【0201】
[ステップS73]振分先判定部322cは、ステップS72で取得した振分管理情報を参照して、ステップS71で算出されたフロー識別子と比較し、入力されたパケットのフローのエントリの有無について判定する。エントリがあれば、ステップS81(図20)に処理が進められる。一方、エントリがなければ、処理がステップS74に進められる。
【0202】
[ステップS74]振分先判定部322cは、出力ポート監視部324の監視結果に基づいて、入力されたパケットのフローが出力されるLAGが有するポートのうち、最も負荷が小さいポートを出力ポートに設定する。
【0203】
[ステップS75]振分先判定部322cは、入力されたパケットをステップS74で出力ポートに設定されたポートに対して転送させる。そして入力されたパケットは、転送されたポートから他のスイッチ等の装置に対して出力される。
【0204】
[ステップS76]振分先判定部322cは、ステップS74で出力ポートに設定されたポートを、振分管理情報記憶部352の振分管理テーブル152aに記憶されている振分管理情報に記憶させる。その後、処理は終了する。
【0205】
[ステップS81]振分先判定部322cは、出力ポート監視部324の監視結果に基づいて、入力されたパケットのフローに現在設定されている出力ポートが輻輳状態であるか否かについて判定する。出力ポートが輻輳状態であれば、処理がステップS82に進められる。一方、出力ポートが輻輳状態でなければ、処理がステップS86に進められる。
【0206】
[ステップS82]振分先判定部322cは、出力ポート監視部324の監視結果に基づいて、入力されたパケットのフローが出力されるLAGが有するポートのうち負荷が現在設定されている出力ポートよりも小さいポートがあるか否かについて判定する。出力ポートよりも負荷が小さいポートがあれば、処理がステップS83に進められる。一方、出力ポートよりも負荷が小さいポートがなければ、処理がステップS85に進められる。
【0207】
[ステップS83]振分先判定部322cは、出力ポート監視部324の監視結果に基づいて、ステップS82の条件を満たすポートのうち、キュー長が現在設定されている出力ポートよりも大きいポートがあるか否かについて判定する。出力ポートよりもキュー長が大きいポートがあれば、処理がステップS84に進められる。一方、出力ポートよりもキュー長が大きいポートがなければ、処理がステップS85に進められる。
【0208】
[ステップS84]振分先判定部322cは、ステップS83の条件を満たすポートのうち、負荷が最も小さいポートを、入力されたパケットのフローの新たな出力ポートに設定する。その後、処理がステップS75(図19)に進められる。
【0209】
[ステップS85]出力部340は、負荷が最も小さいポートのキューの読み出しを停止する。この読み出しの停止は、予め定められた条件を満たした場合に解除される。ここで、予め定められた条件は、例えば、そのポートのキュー長が、読み出しを停止した時点における出力ポートのキュー長に達した場合とすることができるが、必ずしもこれに限られず、フローのパケットの順序の逆転を防止するものであれば足りる。
【0210】
[ステップS86]振分先判定部322cは、振分管理情報記憶部352の振分管理テーブル152aから振分管理情報を取得し、取得した振分管理情報に基づいて、入力されたパケットを出力ポートに設定されたポートに対して転送させる。そして入力されたパケットは、転送されたポートから他のスイッチ等の装置に対して出力される。その後、処理は終了する。
【0211】
以上に示すように、第3の実施の形態によれば、その時点には出力ポートよりもキュー長が大きいポートが存在しなかった場合にも、時間の経過に従って、その時点では最も負荷が低いポートのキュー長が、輻輳状態のポートのキュー長より大きくなるため、キュー長が大きくなった時点で出力ポートの変更が可能となる。
【0212】
[第4の実施の形態]
次に、第4の実施の形態について説明する。上記の第1の実施の形態との相違点を中心に説明し、同様の事項については同一の符号を用いると共に説明を省略する。
【0213】
第4の実施の形態では、輻輳状態のポートよりも負荷が低いポートがあったときは、キュー長の大きさにかかわらず出力ポートを負荷が低いポートに変更し、その後、変更後のポートにおいて変更後に到着したパケットの読み出しを、移動前と移動後のキュー長の差分だけ遅延させる点で、第1の実施の形態と異なる。
【0214】
また、第4の実施の形態では、パケットがスイッチに入力された場合において、出力ポートが輻輳状態であったとき、出力されるパケットが蓄積されるバッファの空き容量に十分な余裕があるポートが選択される点で、第1の実施の形態と異なる。
【0215】
図21は、第4の実施の形態のスイッチの機能を示すブロック図である。図21に示すように、本実施の形態のスイッチ400は、複数のポートが集約された論理リンクであるLAGにより、データが分割されたパケットを転送する。スイッチ400は、入力部421、振分部422、スイッチ部423、出力ポート監視部424、出力部440、出力先情報記憶部451、振分管理情報記憶部452、出力ポート情報記憶部453を有する。また、振分部422は、出力先決定部422a、フロー識別部422b、振分先判定部422cを有する。また、出力部440は、出力ポート毎に対応付けられた出力キュー部441a,441b,441c,・・・を有する。
【0216】
入力部421は、他のスイッチ、端末装置、情報処理装置等の通信機能を有する装置とLAGおよびその他の方式の通信路によって接続可能である。入力部421は、入力側のポート(例えば、ポート#3)を有し、他の装置から送信された、他のスイッチおよび端末装置等の通信装置に転送されるフローの分割されたデータ等のパケットが入力される。
【0217】
振分部422は、出力先情報記憶部451に記憶されている出力先情報および振分管理情報記憶部452に記憶されている振分管理情報を参照して、入力部421によって入力されたフローのパケットが出力されるポートを決定する。
【0218】
振分部422は、入力部421によって入力されたフローが出力されるポートを、LAGグループを構成するポート#0,#1,#2,・・・のうちのいずれかに決定する。また、振分部422は、出力ポート監視部424から通知された監視結果に基づいて、各ポートの負荷の状況について異常が検出された場合、入力部421によって入力されたフローが出力されるポートである出力ポートを、出力ポート以外のLAGグループのポートのうち、負荷が最も小さいポートに変更する。
【0219】
このとき、振分部422は、フローのパケットが出力されている出力ポートよりも各出力キュー部のバッファに蓄積されているデータの量が多いポートのうち、出力キュー部のバッファの蓄積量と、出力ポートの出力キュー部のバッファに蓄積されている蓄積量との差分が最も小さいポートを変更後の出力ポートに選択する。
【0220】
また、振分部422は、バッファに蓄積されているキュー長に一定量以上の余裕があるポートを変更後の出力ポートに選択する。更に振分部422は、変更後の出力ポートから出力されるデータの出力を、キュー長の差分に応じて遅延させる。
【0221】
ポートの変更を判定する際に、負荷、キュー長に加えて、ポートのバッファのキューの容量に余裕があること(例えば、キュー容量全体の10%以上の空き容量があること)を条件として加えることで、バッファ溢れを防止すると共に、短期間の間に出力先のポートの変更の頻度が高くなり過ぎることも防止し、帯域をより効率的に使用することができる。
【0222】
出力先決定部422aは、入力部421に入力されたフローのパケットのヘッダ情報と、MACアドレスの学習結果から生成された出力先情報記憶部451に記憶されている出力先情報に基づいて、パケットが出力され得るポートを決定するものである。なお、出力先決定部422aは、MACアドレスの学習に替えて、IPアドレスおよびルーティングプロトコルに基づいてパケットが出力され得るポートを決定してもよい。
【0223】
この出力先決定部422aは、入力されたフローのパケットの宛先MACアドレスに基づいて、各フローのパケットの出力ポートを特定する。すなわち、出力先決定部422aは、入力されたフローのパケットに含まれるMACアドレスを抽出する。このとき、入力されたフローのパケットのMACアドレスが、出力先情報によって、当該フローのパケットの出力と対応づけられている。これを用いて、スイッチ400は、入力されたフローのパケットのMACアドレスから、出力先情報で対応付けられた出力ポートを取得する。
【0224】
また、入力されたフローの出力先がLAGの場合は、その出力先情報において、LAGで送信されるフローのパケットのMACアドレスに対してさらにLAGで送信される旨を示す情報を設定することで、そのフローのパケットの出力先としてLAGで出力されることおよび出力されるLAGグループを指定することができる。これに従い、出力先決定部422aは、そのフローのパケットの宛先を、指定されたLAGグループに決定する。
【0225】
フロー識別部422bは、LAGの運用時に入力されたパケットのヘッダ情報からフロー識別子を生成し、フローを特定する。
また、フロー識別部422bは、入力されたフローのパケットのヘッダ情報に基づいてハッシュ演算を行うことにより、フロー識別子を生成する。このとき、フロー識別部422bは、パケットからヘッダ情報を抽出し、抽出されたヘッダ情報を用いてハッシュ演算を行う。
【0226】
ここで、ヘッダ情報とは、パケットの例えば先頭部分等の、パケットの一部分を構成する情報であり、例えば、パケットに含まれている各種のアドレスを用いることができる。ヘッダ情報として用いるアドレスとは、パケットの送信元の端末装置(または送信元の端末装置が属する集合)や宛先の端末装置(または宛先の端末装置が属する集合)を特定するための情報である。ヘッダ情報は、例えば、送信元/宛先のMACアドレス、送信元/宛先のIPアドレス等である。
【0227】
振分先判定部422cは、振分管理情報を参照して、フロー識別部422bによって計算されたハッシュ値に基づいてパケットが出力されるポートを決定する。
また、振分先判定部422cは、LAGの運用時にLAGグループ内の複数のポートの帯域を効率的に利用するために、後述する出力ポート監視部424によるポートの監視結果に基づいて送出先のLAGが有する出力ポートを設定する。
【0228】
スイッチ部423は、振分部422の判断に基づいてパケットを出力ポートに転送する。これにより、スイッチ400に入力されたフローのパケットが、振分部422による設定に基づいて出力部440が有する出力ポートから出力され、フローのデータが送信先に向かって中継される。
【0229】
出力ポート監視部424は、スイッチ400の出力部440が有する各ポートの輻輳状態、負荷の状態、障害の発生の有無等のトラフィック状態を監視するものである。出力ポート監視部424は、各出力キュー部441a,441b,441c,・・・のそれぞれのバッファにおけるデータの蓄積状況を監視する。出力ポート監視部424は、各バッファの監視結果を、出力ポート情報記憶部453に出力ポート情報として記憶させると共に、振分部422に通知する。出力キュー部441a,441b,441c,・・・は、蓄積部として機能する。
【0230】
出力ポート監視部424は、LAGが有する各出力ポートの最新のキュー長(その出力ポートで出力を待っている状態のパケットのデータサイズの総量)を監視すると共に、各ポートの負荷を監視する。本実施の形態では、ポートの負荷は、一定時間内にそれぞれの出力キュー部に入力されたパケットの総データ量で求めるが、これに限らず、長期的な負荷を監視するために過去の負荷情報に重み付けを行って、加重平均で負荷を算出してもよい。
【0231】
出力部440は、データを出力する複数のポート#0,#1,#2,・・・と、ポート#0,#1,#2,・・・のそれぞれに対応して設けられており、それぞれのポート#0,#1,#2,・・・から出力されるデータを蓄積するバッファを有する出力キュー部441a,441b,441c,・・・を有する。
【0232】
出力キュー部441a,441b,441c,・・・は、出力部440が有する各ポートに対応して設けられており、データ送信の品質制御およびスイッチ400の入力部421が有する入力側の各ポート(例えば、ポート#3)から同時に入力されたパケットの待ち合わせ等を行う。出力キュー部441a,441b,441c,・・・が有するそれぞれのバッファは、先入れ先出し方式によってデータが読み出される。
【0233】
出力先情報記憶部451は、出力先テーブル151a(図6において前述)として出力先情報を記憶している。出力先情報は、LAG等によりフローのパケットが出力され得るポートを示す情報である。
【0234】
振分管理情報記憶部452は、振分管理テーブル152a(図7において前述)として振分管理情報を記憶している。振分管理情報は、各フローのパケットについて振分先判定部422cで決定された出力ポートを示す情報である。
【0235】
出力ポート情報記憶部453は、出力ポートテーブル153a(図8において前述)として出力ポート情報を記憶している。出力ポート情報は、各ポートの出力側のバッファのキュー長、出力側の通信路の輻輳状態および障害の発生の有無等を示す情報である。
【0236】
次に、本実施の形態のスイッチの動作について説明する。
図22は、第4の実施の形態において、入力されたフローの途中でパケットの出力ポートが変更されるときのスイッチの状態を示す図である。図23は、第4の実施の形態において、入力されたフローの途中でパケットの出力ポートが変更されるときのキューの状態を示す図である。
【0237】
図22に示すように、本実施の形態のスイッチ400のポート#3にフローAの後続パケットが入力されたとき、フローAの出力ポートであるポート#0が輻輳状態で、そのときのポート#0のバッファ441a1のキュー長を、Z Byteとする。これに対して、振分部422は、LAGの中で最も負荷の低いポートであって、バッファの空き容量に所定の余裕があるもの(ポート#1とする)を選択し、フローAの出力ポートをポート#1に変更する。これにより、フローAにおける出力ポートの変更前の先行パケットは、スイッチ部423によりポート#0に転送されてポート#0から出力され、変更後の後続パケットは、スイッチ部423によりポート#1に転送されてポート#1から出力される。このときの変更後の出力ポートであるポート#1のバッファ441b1のキュー長を、X Byteとする。
【0238】
ここで、図23に示すように、変更後の出力ポートであるポート#1のキュー長が、変更前の出力ポートであるポート#0のキュー長よりも小さい(すなわち、Z>X)場合、出力ポートを変更したのみでは、ポート#0に振り分けられたフローAの先行パケットよりも、ポート#1に振り分けられたパケットが先に装置から出力されてしまい、パケットの順序逆転が発生することになる。
【0239】
そこで、本実施の形態のスイッチ400では、出力ポートの変更後のポート#1において、フローAの後続パケットの出力を遅らせてタイミングを調整することにより、フローAのパケットの順序の逆転を防止する。
【0240】
図22および図23を用いて本実施の形態のスイッチ400の動作を説明する。
スイッチ400の振分部422(図21において前述)により、フローAの後続パケットが入力されたときに、出力ポートをポート#1に変更した後、ポート#1の出力キュー部441b(図21において前述)に対して、変更前の出力ポートであるポート#0のキュー長(Z Byte)情報と読み出し停止指示とを通知する。ポート#1の出力キュー部441bは、読み出し停止指示を受信したときのバッファ441b1に蓄積されているデータ443aのキュー長の値(X Byte)を記憶し、読み出し停止指示を受信してからバッファ441b1に記憶したデータキュー長の値(X Byte)分のデータを出力した後に、出力キュー部441bが有するポート#1のバッファからの読み出しを一旦停止する。
【0241】
このときの出力キュー部441bによる読み出しの停止について、図23に基づいて説明する。ポート#1の出力キュー部441bは、振分部422から通知された変更前のポート#0に蓄積されている変更前のフローAの先行パケットのデータ442のキュー長(Z Byte)と、振分部422からの通知を受信した時点でポート#1に蓄積されている他のフローのデータ443aのキュー長(X Byte)との差分(Z−X Byte)を算出する。算出された差分に相当するデータの出力に要する時間に相当する時間が経過するまで、ポート#1のキューの読み出し停止を継続する。そして出力キュー部441bは、相当する時間が経過した後、ポート#1の読み出しを再開する。そして、読み出しの再開後に、出力キュー部441bは、ポート#1から変更後のフローAの後続パケットのデータ443bを出力する。
【0242】
例えば、フローAの出力ポートの変更時において、変更前のフローAの出力ポートであるポート#0のキュー長Zが100MBであり、変更後のフローAの出力ポートであるポート#1のキュー長Xが50MBであるものとする。また、ポート#0,#1の送信レートが1000Mbpsであるものとする。
【0243】
この場合、出力キュー部441bは、振分部422からの読み出し停止指示を受信してから他のフローのデータである50MB分のデータを出力した後、ポート#1のキューの読み出しを停止する。そして、出力キュー部441bは、フローAのポート#0のキュー長とポート#1の他のフローのキュー長の差分のデータの出力に要する時間に相当する400ミリ秒((100MB−50MB)×8÷1000Mbps)経過後に、ポート#1の読み出しを再開する。これにより、ポート#1からフローAの後続パケットが出力される。
【0244】
次に、本実施の形態で実行される処理について説明する。
図24および図25は、第4の実施の形態の振分判定処理の手順を示すフローチャートである。図24および図25に示す振分判定処理は、LAGが有する出力ポートのうちから出力ポートを選択すると共に、選択した出力ポートによって入力されたフローのパケットを出力する処理である。振分判定処理は、出力先決定部422a(図21において前述)が出力先情報記憶部451(図21において前述)に記憶されている出力先テーブル151a(図6において前述)を参照して、入力部421によりスイッチ400に入力されたパケットがLAGで出力されるパケットであると判定した場合に実行が開始される。
【0245】
[ステップS91]フロー識別部422b(図21において前述)は、パケットのヘッダ情報にハッシュ演算を実行して、実行結果をフロー識別子に設定することによりフロー識別を行う。
【0246】
[ステップS92]振分先判定部422cは、振分管理情報記憶部452(図21において前述)の振分管理テーブル152a(図7において前述)から振分管理情報を取得する。
【0247】
[ステップS93]振分先判定部422cは、ステップS92で取得した振分管理情報を参照して、ステップS91で算出されたフロー識別子と比較し、入力されたパケットのフローのエントリの有無について判定する。エントリがあれば、ステップS101(図25)に処理が進められる。一方、エントリがなければ、処理がステップS94に進められる。
【0248】
[ステップS94]振分先判定部422cは、出力ポート監視部424の監視結果に基づいて、入力されたパケットのフローが出力されるLAGが有するポートのうち、最も負荷が小さいポートを出力ポートに設定する。
【0249】
[ステップS95]振分先判定部422cは、入力されたパケットをステップS94で出力ポートに設定されたポートに対して転送させる。そして入力されたパケットは、転送されたポートから他のスイッチ等の装置に対して出力される。
【0250】
[ステップS96]振分先判定部422cは、ステップS94で出力ポートに設定されたポートを、振分管理情報記憶部452の振分管理テーブル152aに記憶されている振分管理情報に記憶させる。その後、処理は終了する。
【0251】
[ステップS101]振分先判定部422cは、出力ポート監視部424の監視結果に基づいて、入力されたパケットのフローに現在設定されている出力ポートが輻輳状態であるか否かについて判定する。出力ポートが輻輳状態であれば、処理がステップS102に進められる。一方、出力ポートが輻輳状態でなければ、処理がステップS106に進められる。
【0252】
[ステップS102]振分先判定部422cは、出力ポート監視部424の監視結果に基づいて、入力されたパケットのフローが出力されるLAGが有するポートのうち負荷が現在設定されている出力ポートよりも小さいポートがあるか否かについて判定する。出力ポートよりも負荷が小さいポートがあれば、処理がステップS103に進められる。一方、出力ポートよりも負荷が小さいポートがなければ、処理がステップS106に進められる。
【0253】
[ステップS103]振分先判定部422cは、出力ポート監視部424の監視結果に基づいて、ステップS102の条件を満たすポートのうち、バッファに予め定められた一定量以上の余裕を有するポートがあるか否かについて判定する。一定量以上の余裕を有するポートがあれば、処理がステップS104に進められる。一方、一定量以上の余裕を有するポートがなければ、処理がステップS106に進められる。
【0254】
[ステップS104]振分先判定部422cは、ステップS103の条件を満たすポートのうち、現在設定されている出力ポートとのキュー長の差が最も小さいポートを、入力されたパケットのフローの新たな出力ポートに設定する。
【0255】
[ステップS105]出力部440は、ステップS104で設定された出力ポートのキューの読み出しを停止する。この読み出しの停止は、ステップS104で設定が変更されるまで出力ポートであったポートとのキュー長の差が解消するまで行われ、差が解消した後に解除される。その後、処理がステップS95(図24)に進められる。
【0256】
[ステップS106]振分先判定部422cは、振分管理情報記憶部452の振分管理テーブル152aから振分管理情報を取得し、取得した振分管理情報に基づいて、入力されたパケットを出力ポートに設定されたポートに対して転送させる。そして入力されたパケットは、転送されたポートから他のスイッチ等の装置に対して出力される。その後、処理は終了する。
【0257】
以上に示すように、第4の実施の形態によれば、変更後の出力ポートから出力されるフローの後続パケットが、輻輳状態になる前に他のポートに振分けられた同一のフローの先行パケットを追い越すことがないので、パケットの順序の逆転を防止しながら、LAGにおいてフローのパケットの出力ポートを変更することが可能になる。
【0258】
また、ポートの変更を判定する際に、負荷、キュー長に加えて、ポートのバッファのキューの容量に余裕があることを条件として加えることで、バッファ溢れを防止すると共に、短期間の間に出力先のポートの変更の頻度が高くなり過ぎることも防止し、帯域をより効率的に使用することができる。
【0259】
[第5の実施の形態]
次に、第5の実施の形態について説明する。上記の第1の実施の形態との相違点を中心に説明し、同様の事項については同一の符号を用いると共に説明を省略する。
【0260】
第1の実施の形態では、各ポートの負荷を監視して、その監視結果を情報として各入力ポートの振分部に通知する。この場合、スイッチ内において、パケットが通過する主信号とは異なる、多くの内部情報を通知するための信号が新たに必要となる。
【0261】
これに対して、第5の実施の形態では、スイッチの入力側のポートから各出力側のポートに対してループバックパケットを送信し、このループバックパケットを出力側のポートで折り返す。折り返されたループバックパケットの応答時間を計測することによって、輻輳状態およびポートの負荷の状態を推定する点で第1の実施の形態と異なる。
【0262】
図26は、第5の実施の形態のスイッチの機能を示すブロック図である。図26に示すように、本実施の形態のスイッチ500は、複数のポートが集約された論理リンクであるLAGにより、データが分割されたパケットを転送する。スイッチ500は、入力側のポートであるポート#3、出力側のポートでありLAGグループを構成するポート#0,ポート#1、スイッチ部523を有する。なお、スイッチ500のポートの数およびLAGの数はこれに限られない。
【0263】
入力側のポートであるポート#3、出力側のポートであるポート#0,#1は、それぞれ振分部522,522a,522b、挿入部531,531a,531b、抽出部532,532a,532b、折り返し部533,533a,533b、出力キュー部541,541a,541bを有する。また、ポート#3は、出力ポート監視部524を有する。ポート#0,#1は、同様に、図示しない出力ポート監視部を有する。
【0264】
なお、スイッチ500は、図示しない入力部、出力部、出力先情報記憶部、振分管理情報記憶部、出力ポート情報記憶部を有する。また、各ポートの振分部は、図示しない出力先決定部、フロー識別部、振分先判定部を有する。
【0265】
データのパケットを入力する入力側のポートであるポート#3は、入力されたパケットを、振分部522によって決定(または設定)された出力ポートに送信する。
振分部522,522a,522bは、出力先情報記憶部に記憶されている出力先情報および振分管理情報記憶部に記憶されている振分管理情報を参照して、入力部によって入力されたフローのパケットが出力されるポートを決定する。
【0266】
振分部522,522a,522bは、入力部によって入力されたフローが出力されるポートを、LAGグループを構成するポート#0,#1のうちのいずれかに決定する。
振分部522は、出力ポート監視部524から通知された監視結果に基づいて、各ポートの負荷の状況について異常が検出された場合、ポート#3の入力部によって入力されたフローが出力されるポートである出力ポートを、出力ポート以外のポートであってLAGグループを構成する各ポートの出力キュー部のそれぞれのバッファに蓄積されているデータの量と比較して、ポートに対応して設けられたバッファに蓄積されているデータの量が多いポートに変更する。振分部522a,522bも同様である。
【0267】
スイッチ部523は、各振分部の判断に基づいてパケットを出力側のポートに転送する。これにより、スイッチ500に入力されたフローのパケットが、各振分部による設定に基づいて出力ポートから出力され、フローのデータが送信先に向かって中継される。
【0268】
出力ポート監視部524は、スイッチ500が有する出力側の各ポートの輻輳状態、負荷の状態、障害の発生の有無等のトラフィック状態を監視するものである。出力ポート監視部524は、各出力キュー部541,541a,541bのそれぞれのバッファにおけるデータの蓄積状況を監視する。出力ポート監視部524は、各バッファの監視結果を、図示しない出力ポート情報記憶部に出力ポート情報として記憶させると共に、振分部522,522a,522bに通知する。
【0269】
出力ポート監視部524は、ループバックパケットが、ポート#3の挿入部531によって挿入されてから、それぞれポート#0の折り返し部533a、ポート#1の折り返し部533bによって折り返され、抽出部532によって抽出されるまでの時間を計測し、計測結果に基づいてポート#0,#1の負荷の状況を監視する。
【0270】
また、出力ポート監視部524は、ループバックパケットを監視してスイッチ500の障害の発生を検出する。出力ポート監視部524は、例えば、ループバックパケットが一定時間検出されないことにより、スイッチ500のポートの障害の発生を検出する。
【0271】
出力ポート監視部524は、LAGが有する各出力ポートの最新のキュー長(その出力ポートで出力を待っている状態のパケットのデータサイズの総量)を監視すると共に、各ポートの負荷を監視する。本実施の形態では、ポートの負荷は、このループバックパケットの応答時間を計測することによって求めるが、これに限らず、長期的な負荷を監視するために過去の負荷情報に重み付けを行って、加重平均で負荷を算出してもよい。ポート#0,ポート#1が有する出力ポート監視部も同様である。
【0272】
挿入部531,531a,531bは、スイッチ500の内部においてループバックパケットを挿入する。抽出部532,532a,532bは、スイッチ500の内部において自己が挿入し、折り返し部533,533a,533bによって折り返されたループバックパケットを抽出する。折り返し部533,533a,533bは、挿入部531,531a,531bによって挿入されたループバックパケットを折り返す。
【0273】
出力キュー部541,541a,541bは、各ポートから出力されるデータを蓄積するバッファを有していると共に、スイッチ500が有する各ポートに対応して設けられており、データ送信の品質制御およびスイッチ500が有する入力側の各ポート(例えば、ポート#3)から同時に入力されたパケットの待ち合わせ等を行う。出力キュー部541,541a,541bが有するそれぞれのバッファは、先入れ先出し方式によってデータが読み出される。出力キュー部541,541a,541bは、蓄積部として機能する。
【0274】
入力部は、他のスイッチ、端末装置、情報処理装置等の通信機能を有する装置とLAGおよびその他の方式の通信路によって接続可能である。
出力先情報記憶部は、出力先テーブル151a(図6において前述)として出力先情報を記憶している。出力先情報は、LAG等によりフローのパケットが出力され得るポートを示す情報である。
【0275】
振分管理情報記憶部は、振分管理テーブル152a(図7において前述)として振分管理情報を記憶している。振分管理情報は、各フローのパケットについて振分先判定部で決定された出力ポートを示す情報である。
【0276】
出力ポート情報記憶部は、出力ポートテーブル153a(図8において前述)として出力ポート情報を記憶している。出力ポート情報は、各ポートの出力側のバッファのキュー長、出力側の通信路の輻輳状態および障害の発生の有無等を示す情報である。
【0277】
本実施の形態では、出力側のポート#0,#1のそれぞれの出力キュー部541a,541bの出口でループバックパケットを折り返す。入力側のポート#3の挿入部531は、定期的にポート#0,#1宛にループバックパケットを送信する。このループバックパケットはスイッチ部523を経由してポート#0,#1に転送される。
【0278】
ポート#0,#1の抽出部532a,532bは、自身が送信したループバックパケットを抽出し、それ以外のパケットは転送する。ポート#0,#1の抽出部532a,532bは、受信したループバックパケットがポート#3から到着したものであるため、そのままそれぞれ出力キュー部541a,541bに転送する。そして、ポート#0,#1がそれぞれ有する折り返し部533a,533bは、ループバックパケットを折り返す。
【0279】
このように動作することで、入力側のポートで挿入したループバックパケットは、各出力側のポートの出力キュー部を経由してループバックパケットを挿入した入力側のポートへ戻ってくる。
【0280】
ポート#3が有する抽出部532は、このループバックパケットを抽出する。出力ポート監視部524は、抽出部532によって抽出されたループバックパケットを監視することにより、このループバックパケットの応答時間の大小から、出力側のポートの輻輳状態や負荷の大小を推定する。
【0281】
以上に示すように、第5の実施の形態によれば、ループバックパケットを用いて出力側のポートの状態を監視することにより、新たな内部処理によるスイッチの負担の増加を軽減することができる。
【0282】
[第6の実施の形態]
次に、第6の実施の形態について説明する。上記の第5の実施の形態との相違点を中心に説明し、同様の事項については同一の符号を用いると共に説明を省略する。
【0283】
第5の実施の形態では、スイッチの入力側のポートから各出力側のポートに対してループバックパケットを送信し、出力側のポートで折り返されたループバックパケットの応答時間を計測することによって、輻輳状態およびポートの負荷の状態を推定する。
【0284】
これに対して、第6の実施の形態では、スイッチの入力側のポートから送信されたループバックパケットを、隣接するスイッチの入力側のポートで折り返し、折り返されたループバックパケットの応答時間を計測することによって、輻輳状態およびポートの負荷の状態を推定する点で、第1の実施の形態と異なる。
【0285】
図27は、第6の実施の形態のスイッチの機能を示すブロック図である。図27に示すように、本実施の形態のスイッチ600は、複数のポートが集約された論理リンクであるLAGにより、データが分割されたパケットを、通信路で接続された隣接するスイッチ600cに転送する。スイッチ600は、入力側のポートであるポート#3、出力側のポートでありLAGグループを構成するポート#0,ポート#1、スイッチ部623を有する。スイッチ600cは、それぞれスイッチ600のポート#0、#1と接続されている入力側のポートでありLAGグループを構成するポート#P,#Qを有する。なお、スイッチ600およびスイッチ600cのポートの数およびLAGの数はこれに限られない。
【0286】
スイッチ600の入力側のポートであるポート#3、スイッチ600cの入力側のポートであるポート#P,#Qは、それぞれ振分部622,622p、622q、挿入部631,631p,631q、抽出部632,632p,632q、折り返し部633,633p,633q、出力キュー部641,641p,641qを有する。また、ポート#3は、出力ポート監視部624を有する。ポート#P,#Qは、同様に、図示しない出力ポート監視部を有する。
【0287】
また、スイッチ600の出力側のポートであるポート#0,#1は、図26に示した第5の実施の形態のスイッチ500の出力側のポートであるポート#0,#1と同等の機能を有しており、それぞれ振分部622a,622b、出力キュー部641a,641b、図示しない出力ポート監視部、挿入部、抽出部、折り返し部を有する。
【0288】
なお、スイッチ600,600cは、図示しない入力部、出力部、出力先情報記憶部、振分管理情報記憶部、出力ポート情報記憶部を有する。また、各ポートの振分部は、図示しない出力先決定部、フロー識別部、振分先判定部を有する。
【0289】
データのパケットを入力する入力側のポートであるポート#3から入力されたパケットは、振分部622による決定(または設定)に基づいて、出力側のポートであるポート#0,#1のいずれかに送信される。ポート#3から送信されたパケットは、ポート#0に到達した場合は、ポート#0と通信路で接続されているポート#Pに送信される。ポート#1に到達した場合は、ポート#1と通信路で接続されている#Qに送信される。
【0290】
振分部622,622a,622b,622p,622qは、出力先情報記憶部に記憶されている出力先情報および振分管理情報記憶部に記憶されている振分管理情報を参照して、入力部によって入力されたフローのパケットが出力されるポートを決定する。
【0291】
振分部622,622a,622b,622p,622qは、入力部によって入力されたフローが出力されるポートを、LAGグループを構成するポート#0,#1のうちのいずれかに決定する。
【0292】
振分部622は、出力ポート監視部624から通知された監視結果に基づいて、各ポートの負荷の状況について異常が検出された場合、ポート#3の入力部によって入力されたフローが出力されるポートである出力ポートを、出力ポート以外のポートであってLAGグループを構成する各ポートの出力キュー部のそれぞれのバッファに蓄積されているデータの量と比較して、ポートに対応して設けられたバッファに蓄積されているデータの量が多いポートに変更する。振分部622a,622b,622p,622qも同様である。
【0293】
スイッチ部623は、各振分部の判断に基づいてパケットを出力側のポートに転送する。これにより、スイッチ600に入力されたフローのパケットが、各振分部による設定に基づいて出力ポートから出力され、フローのデータが送信先に向かって中継される。
【0294】
出力ポート監視部624は、スイッチ600が有する出力側の各ポートの輻輳状態、負荷の状態、障害の発生の有無等のトラフィック状態を監視するものである。出力ポート監視部624は、各出力キュー部641,641a,641b,641p,641qのそれぞれのバッファにおけるデータの蓄積状況を監視する。出力ポート監視部624は、各バッファの監視結果を、図示しない出力ポート情報記憶部に出力ポート情報として記憶させると共に、振分部622に通知する。
【0295】
出力ポート監視部624は、ループバックパケットが、挿入部631によって挿入されてから、隣接するスイッチ600cのポート#Pの折り返し部633p、ポート#Qの633qによって折り返され、抽出部632によって抽出されるまでの時間に基づいて、ポート#0,#Pの経路およびポート#1,#Qの経路のそれぞれの負荷の状況を監視する。
【0296】
また、出力ポート監視部624は、挿入部631で挿入されスイッチ600cで折り返されて戻ってくるループバックパケットを監視して、ポート#3からポート#0,#1および通信路を経由してスイッチ600cで折り返され、通信路およびポート#0,#1を経由して再びポート#3に戻ってくるまでの間における障害の発生を検出する。出力ポート監視部624は、例えば、ループバックパケットが一定時間検出されないことにより、上記の間の障害の発生を検出する。
【0297】
出力ポート監視部624は、LAGが有する各出力ポートの最新のキュー長(その出力ポートで出力を待っている状態のパケットのデータサイズの総量)を監視すると共に、各ポートの負荷を監視する。本実施の形態では、ポートの負荷は、このループバックパケットの応答時間を計測することによって求めるが、これに限らず、長期的な負荷を監視するために過去の負荷情報に重み付けを行って、加重平均で負荷を算出してもよい。ポート#0,ポート#1が有する出力ポート監視部も同様である。
【0298】
挿入部631は、スイッチ600の内部においてループバックパケットを挿入する。挿入部631p,631qは、スイッチ600cの内部においてループバックパケットを挿入する。抽出部632,632p,632q、ポート#0が有する抽出部、ポート#1が有する抽出部は、自己が挿入し、隣接する他のスイッチで折り返されたループバックパケットを抽出する。折り返し部633,633p,633q、ポート#0が有する折り返し部、ポート#1が有する折り返し部は、他のスイッチによって挿入されたループバックパケットを、そのパケットの設定に基づいて折り返しまたは転送する。
【0299】
出力キュー部641,641a,641b,641p,641qは、各ポートから出力されるデータを蓄積するバッファを有していると共に、スイッチ600が有する各ポートに対応して設けられており、データ送信の品質制御およびスイッチ600が有する入力側の各ポート(例えば、ポート#3)から同時に入力されたパケットの待ち合わせ等を行う。出力キュー部641,641a,641b,641p,641qが有するそれぞれのバッファは、先入れ先出し方式によってデータが読み出される。出力キュー部641,641a,641b,641p,641qは、蓄積部として機能する。
【0300】
入力部は、他のスイッチ、端末装置、情報処理装置等の通信機能を有する装置とLAGおよびその他の方式の通信路によって接続可能である。
出力先情報記憶部は、出力先テーブル151a(図6において前述)として出力先情報を記憶している。出力先情報は、LAG等によりフローのパケットが出力され得るポートを示す情報である。
【0301】
振分管理情報記憶部は、振分管理テーブル152a(図7において前述)として振分管理情報を記憶している。振分管理情報は、各フローのパケットについて振分先判定部で決定された出力ポートを示す情報である。
【0302】
出力ポート情報記憶部は、出力ポートテーブル153a(図8において前述)として出力ポート情報を記憶している。出力ポート情報は、各ポートの出力側のバッファのキュー長、出力側の通信路の輻輳状態および障害の発生の有無等を示す情報である。
【0303】
本実施の形態では、スイッチ600cの入力側のポート#P,#Qのそれぞれの入り口でループバックパケットを折り返す。入力側のポート#3の挿入部631は、定期的にポート#P,#Q宛にループバックパケットを送信する。このループバックパケットはスイッチ部623、ポート#0,#1および通信路を経由してポート#P,#Qに転送される。
【0304】
抽出部632p,632q、ポート#0,#1が有する抽出部は、自身が送信したループバックパケットを抽出し、それ以外のパケットは転送する。次に、抽出部632p,632q、ポート#0,#1が有する抽出部は、このループバックパケットを受信するが、このループバックパケットは、ポート#3から到着したものである。従って、ループバックパケットは、抽出部632p,632q、ポート#0,#1が有する抽出部により、そのままそれぞれ出力キュー部641p,641qに転送される。そして、ポート#P,#Qが有する折り返し部633p,633qは、ポート#3から送信されたループバックパケットを折り返す。
【0305】
このように動作することで、入力側のポートで挿入したループバックパケットは、各出力側のポートの出力キュー部および隣接するスイッチの入力側のポートを経由してループバックパケットを挿入した入力側のポートへ戻ってくる。
【0306】
ポート#3が有する抽出部632は、このループバックパケットを抽出する。出力ポート監視部624は、抽出部632によって抽出されたループバックパケットを監視することにより、このループバックパケットの応答時間の大小から、出力側のポートおよび入力側のポートならびにこれらのポートの間の通信路の輻輳状態や負荷の大小を推定する。
【0307】
以上に示すように、第6の実施の形態によれば、ループバックパケットを用いて出力側のポートの状態を監視することにより、新たな内部処理によるスイッチの負担の増加を軽減することができる。
【0308】
また、隣接するスイッチとの間でループバックパケットが送信されるので、隣接するスイッチとの間の通信路における障害の発生等の状態の変化も監視することができる。
[第7の実施の形態]
次に、第7の実施の形態について説明する。上記の第1の実施の形態との相違点を中心に説明し、同様の事項については同一の符号を用いると共に説明を省略する。
【0309】
第7の実施の形態では、各出力キュー部に複数種類のフローに対応するキュー(例えば、品質クラス毎のキュー)を有する点で、第1の実施の形態と異なる。
図28は、第7の実施の形態のスイッチの機能を示すブロック図である。図28に示すように、本実施の形態のスイッチ700は、複数のポートが集約された論理リンクであるLAGにより、データが分割されたパケットを転送する。スイッチ700は、入力部721、振分部722、スイッチ部723、出力ポート監視部724、出力部740、出力先情報記憶部751、振分管理情報記憶部752、出力ポート情報記憶部753を有する。また、振分部722は、出力先決定部722a、フロー識別部722b、振分先判定部722cを有する。また、出力部740は、出力ポート毎に対応付けられた出力キュー部741a,741b,741c,・・・を有する。
【0310】
入力部721は、他のスイッチ、端末装置、情報処理装置等の通信機能を有する装置とLAGおよびその他の方式の通信路によって接続可能である。入力部721は、入力側のポート(例えば、ポート#3)を有し、他の装置から送信された、他のスイッチおよび端末装置等の通信装置に転送されるフローの分割されたデータ等のパケットが入力される。
【0311】
本実施の形態のデータには、フロー毎に複数の優先度のうちの1つの優先度が設定されている。本実施の形態のスイッチ700は、このフローの優先度に基づいて、優先度が高いフローのデータを先に出力し、優先度が低いフローのデータを後に出力することで、品質クラスを制御する。
【0312】
振分部722は、出力先情報記憶部751に記憶されている出力先情報および振分管理情報記憶部752に記憶されている振分管理情報を参照して、入力部721によって入力されたフローのパケットが出力されるポートを決定する。
【0313】
振分部722は、入力部721によって入力されたフローが出力されるポートを、LAGグループを構成するポート#0,#1,#2,・・・のうちのいずれかに決定する。また、振分部722は、出力ポート監視部724から通知された監視結果に基づいて、各ポートの負荷の状況について異常が検出された場合、入力部721によって入力されたフローが出力されるポートである出力ポートを、出力ポート以外のポートであってLAGグループを構成する各ポートの出力キュー部のそれぞれのバッファに蓄積されているデータの量と比較して、ポートに対応して設けられたバッファに蓄積されているデータの量が多いポートに変更する。
【0314】
このとき振分部722は、出力ポート監視部724による監視結果であるフローに対するポートの負荷に基づいて、入力部721によって入力されたフローが出力されるポートを、フローが出力されている出力ポートよりも出力キュー部のバッファにフローの優先度毎に蓄積されているデータの量が多いポートに変更する。
【0315】
出力先決定部722aは、入力部721に入力されたフローのパケットのヘッダ情報と、MACアドレスの学習結果から生成された出力先情報記憶部751に記憶されている出力先情報に基づいて、パケットが出力され得るポートを決定するものである。なお、出力先決定部722aは、MACアドレスの学習に替えて、IPアドレスおよびルーティングプロトコルに基づいてパケットが出力され得るポートを決定してもよい。
【0316】
この出力先決定部722aは、入力されたフローのパケットの宛先MACアドレスに基づいて、各フローのパケットの出力ポートを特定する。すなわち、出力先決定部722aは、入力されたフローのパケットに含まれるMACアドレスを抽出する。このとき、入力されたフローのパケットのMACアドレスが、出力先情報によって、当該フローのパケットの出力と対応づけられている。これを用いて、スイッチ700は、入力されたフローのパケットのMACアドレスから、出力先情報で対応付けられた出力ポートを取得する。
【0317】
また、入力されたフローの出力先がLAGの場合は、その出力先情報において、LAGで送信されるフローのパケットのMACアドレスに対してさらにLAGで送信される旨を示す情報を設定することで、そのフローのパケットの出力先としてLAGで出力されることおよび出力されるLAGグループを指定することができる。これに従い、出力先決定部722aは、そのフローのパケットの宛先を、指定されたLAGグループに決定する。
【0318】
フロー識別部722bは、LAGの運用時に入力されたパケットのヘッダ情報からフロー識別子を生成し、フローを特定する。
また、フロー識別部722bは、入力されたフローのパケットのヘッダ情報に基づいてハッシュ演算を行うことにより、フロー識別子を生成する。このとき、フロー識別部722bは、パケットからヘッダ情報を抽出し、抽出されたヘッダ情報を用いてハッシュ演算を行う。
【0319】
ここで、ヘッダ情報とは、パケットの例えば先頭部分等の、パケットの一部分を構成する情報であり、例えば、パケットに含まれている各種のアドレスを用いることができる。ヘッダ情報として用いるアドレスとは、パケットの送信元の端末装置(または送信元の端末装置が属する集合)や宛先の端末装置(または宛先の端末装置が属する集合)を特定するための情報である。ヘッダ情報は、例えば、送信元/宛先のMACアドレス、送信元/宛先のIPアドレス等である。
【0320】
振分先判定部722cは、振分管理情報を参照して、フロー識別部722bによって計算されたハッシュ値に基づいてパケットが出力されるポートを決定する。
また、振分先判定部722cは、LAGの運用時にLAGグループ内の複数のポートの帯域を効率的に利用するために、後述する出力ポート監視部724によるポートの監視結果に基づいて送出先のLAGが有する出力ポートを設定する。
【0321】
スイッチ部723は、振分部722の判断に基づいてパケットを出力ポートに転送する。これにより、スイッチ700に入力されたフローのパケットが、振分部722による設定に基づいて出力部740が有する出力ポートから出力され、フローのデータが送信先に向かって中継される。
【0322】
出力ポート監視部724は、スイッチ700の出力部740が有する各ポートの輻輳状態、負荷の状態、障害の発生の有無等のトラフィック状態を監視するものである。出力ポート監視部724は、各出力キュー部741a,741b,741c,・・・のそれぞれのバッファにおけるデータの蓄積状況を監視する。出力ポート監視部724は、各バッファの監視結果を、出力ポート情報記憶部753に出力ポート情報として記憶させると共に、振分部722に通知する。
【0323】
このとき出力ポート監視部724は、LAGが有する各出力ポートの最新のキュー長(その出力ポートで出力を待っている状態のパケットのデータサイズの総量)を監視すると共に、各ポートの負荷を監視する。本実施の形態では、ポートの負荷は、一定時間内にそれぞれの出力キュー部に入力されたパケットの総データ量で求めるが、これに限らず、長期的な負荷を監視するために過去の負荷情報に重み付けを行って、加重平均で負荷を算出してもよい。
【0324】
出力ポート監視部724は、入力部721が有するポート#3から入力されたフローの出力ポートにおけるフローのデータと同一の優先度のデータの蓄積量と優先度が高いデータの蓄積量との合計量を示す情報を、フローのデータに対するポートの負荷として監視結果とする。このとき、出力ポート監視部724は、データの優先度および出力されるポートが同一であるもの毎にポートの出力キュー部が有するバッファにおける蓄積量を監視する。
【0325】
出力部740は、データを出力する複数のポート#0,#1,#2,・・・と、ポート#0,#1,#2,・・・のそれぞれに対応して設けられており、それぞれのポート#0,#1,#2,・・・から出力されるデータをフローの優先度毎に蓄積するバッファを有する出力キュー部741a,741b,741c,・・・を有する。
【0326】
また、出力部740は、出力ポート監視部724による監視の結果、ポートの負荷の状況について異常が検出された場合において、フローが出力されている出力ポートよりも出力キュー部741a,741b,741c,・・・のバッファに蓄積されているデータであってそのフローの優先度と同等以上の優先度を持つデータの量が多いポートが存在しないとき、フローが出力されている出力ポート以外のポートであって、出力ポート監視部724による監視結果に基づいて負荷が最も小さいポートの出力を停止させる。
【0327】
出力キュー部741a,741b,741c,・・・は、出力部740が有する各ポートに対応して設けられており、データ送信の品質制御およびスイッチ700の入力部721が有する入力側の各ポート(例えば、ポート#3)から同時に入力されたパケットの待ち合わせ等を行う。出力キュー部741a,741b,741c,・・・が有するそれぞれのバッファは、フローの優先度毎に先入れ先出し方式によってデータが読み出される。出力キュー部741a,741b,741c,・・・は、蓄積部として機能する。
【0328】
出力先情報記憶部751は、出力先テーブル151a(図6において前述)として出力先情報を記憶している。出力先情報は、LAG等によりフローのパケットが出力され得るポートを示す情報である。
【0329】
振分管理情報記憶部752は、振分管理テーブル152a(図7において前述)として振分管理情報を記憶している。振分管理情報は、各フローのパケットについて振分先判定部722cで決定された出力ポートを示す情報である。
【0330】
出力ポート情報記憶部753は、出力ポートテーブル153a(図8において前述)として出力ポート情報を記憶している。出力ポート情報は、各ポートの出力側のバッファのキュー長、出力側の通信路の輻輳状態および障害の発生の有無等を示す情報である。
【0331】
次に、本実施の形態のスイッチの動作について説明する。
図29は、第7の実施の形態において、入力されたフローの途中でパケットの出力ポートが変更されるときのスイッチの状態を示す図である。
【0332】
図29に示すように、本実施の形態では、ポート#0,#1,#2によってLAGが組まれており、ポート毎にクラス#0、クラス#1、クラス#2の3つの優先度(品質クラス)のバッファを有するものとする。この優先度は、クラス#0が最も優先度が高く(常に出力される)、次いでクラス#1の優先度が高く(クラス#0のパケットが蓄積されていない場合に出力される)、クラス#2の優先度が最も低い(クラス#0およびクラス#1のパケットが蓄積されていない場合に出力される)ものとする。なお、本実施の形態では、優先度はクラス#0〜クラス#2の3段階が設定されているが、優先度の段階の数は必ずしも3に限られない。
【0333】
ポート#0は、クラス#0のフローのパケットが蓄積されるバッファ741a0、クラス#1のフローのパケットが蓄積されるバッファ741a1、クラス#2のフローのパケットが蓄積されるバッファ741a2を有する。ポート#1は、クラス#0のフローのパケットが蓄積されるバッファ741b0、クラス#1のフローのパケットが蓄積されるバッファ741b1、クラス#2のフローのパケットが蓄積されるバッファ741b2を有する。ポート#2は、クラス#0のフローのパケットが蓄積されるバッファ741c0、クラス#1のフローのパケットが蓄積されるバッファ741c1、クラス#2のフローのパケットが蓄積されるバッファ741c2を有する。
【0334】
そして、現在あるクラス#1のフローの出力ポートがポート#0に設定されている状態で、そのフローの後続パケットがスイッチ700に入力されたときに、出力ポートであるポート#0が輻輳状態であったものとする。また、ポート#1,#2の負荷はポート#0よりも低いものとする。
【0335】
このとき、第1の実施の形態と同様、入力されたフローの出力ポート(上記のように現在はポート#0に設定されている)が他のポートに変更されることになる。この変更先のポートは、次のように選択される。
【0336】
本実施の形態の出力ポート監視部724(図28において前述)では、各ポートについて、入力されたフローの優先度と同一の優先度のバッファに蓄積されているキュー長と、入力されたフローよりも優先度が高いバッファに蓄積されているキュー長の総和に基づいて、各ポートのバッファに蓄積されているキュー長の判定を行う。
【0337】
例えば、図29の例では、フローの優先度がクラス#1のため、出力ポート監視部724は、各ポートについて優先度がクラス#0のバッファのキュー長とクラス#1のバッファのキュー長の総和を求める。すなわち、輻輳状態である現在の出力ポートのポート#0のクラス#1以上の優先度のバッファのキュー長は、70(クラス#0のバッファ741a0のキュー長)+80(クラス#1のバッファ741a1のキュー長)=150(MByte)となる。
【0338】
変更先の出力ポートの候補であるポート#1,#2についても同様の算出を行ってクラス#1以上の優先度のバッファのキュー長を算出すると、ポート#1が130(MByte)となり、ポート#2が170(MByte)となる。出力ポート監視部724は、この算出結果を各ポートの監視結果として振分部722に通知する。
【0339】
振分部722は、出力ポート監視部724から通知されたこの監視結果に基づいて、第1の実施の形態と同様、振分判定処理(図10および図11において前述)を実行して、現在の出力ポート(ポート#0)のキュー長(150)よりもキュー長(170)が大きいポート#2を、新たな出力ポートとして選択する。
【0340】
以上に示すように、第7の実施の形態によれば、入力される各フローに品質保証における優先度が設定されており、優先度が高いフローのパケットから先に出力される場合に有用である。
【0341】
以上、開示の通信装置および通信制御方法を、図示の実施の形態に基づいて説明したが、各部の構成は同様の機能を有する任意の構成のものに置換することができる。また、開示の技術に他の任意の構成物や工程が付加されてもよい。また、開示の技術は前述した実施の形態のうちの任意の2以上の構成を組み合わせたものであってもよい。
【0342】
上記については単に本発明の原理を示すものである。さらに、多数の変形、変更が当業者にとって可能であり、開示の技術は上記に示し、説明した正確な構成および応用例に限定されるものではなく、対応するすべての変形例および均等物は、添付の請求項およびその均等物による本発明の範囲とみなされる。
【0343】
(付記1) 分割されたデータを複数の物理リンクが集約された論理リンクで転送する通信装置において、
分割されたデータを複数有するフローが入力される入力部と、
前記データを出力する複数の物理リンクと、前記物理リンクのそれぞれに対応して設けられており、それぞれの前記物理リンクから出力される前記データを蓄積する蓄積部とを有する出力部と、
各前記蓄積部における前記データの蓄積状況を監視するリンク監視部と、
前記リンク監視部による前記蓄積状況の監視結果に基づいて、前記入力部によって入力された前記データが出力される前記物理リンクを、前記フローが出力されている前記物理リンクよりも対応する前記蓄積部に蓄積されている前記データの量が多い前記物理リンクに変更する振分部と、を有することを特徴とする通信装置。
【0344】
(付記2) 前記リンク監視部は、前記出力部が有する各前記物理リンクの負荷の状況を監視し、
前記振分部は、前記リンク監視部による監視の結果、各前記物理リンクの前記負荷の状況について異常が検出された場合、前記蓄積状況の監視結果に基づいて、前記入力部によって入力された前記フローが出力される前記物理リンクを、前記フローが出力されている前記物理リンクよりも前記蓄積部に蓄積されている前記データの量が多い前記物理リンクに変更することを特徴とする付記1記載の通信装置。
【0345】
(付記3) 前記振分部は、前記入力部によって入力された前記フローが出力される前記物理リンクを、前記フローが出力されている前記物理リンクよりも前記蓄積部に蓄積されている前記データの量が多く、かつ、前記蓄積部に所定量以上の空きがある前記物理リンクに変更することを特徴とする付記1記載の通信装置。
【0346】
(付記4) 前記リンク監視部は、前記出力部が有する各前記物理リンクの負荷の状況を監視し、
前記出力部は、前記リンク監視部による監視の結果、前記物理リンクの前記負荷の状況について異常が検出された場合において、前記フローが出力されている前記物理リンクよりも前記蓄積部に蓄積されている前記データの量が多い前記物理リンクが存在しないとき、前記入力部によって入力された前記フローが出力される前記物理リンクを、前記フローが出力されている前記物理リンク以外の1つの前記物理リンクの出力を停止させることを特徴とする付記1記載の通信装置。
【0347】
(付記5) 前記振分部は、前記フローが出力される前記物理リンクを、前記フローの前記データが出力されている前記物理リンクよりも前記蓄積部に蓄積されている前記データの量が多い前記物理リンクのうち、前記蓄積部の前記フローが出力されている前記物理リンクの前記蓄積部に蓄積されている蓄積量との差分が最も小さい前記物理リンクに変更し、変更した前記物理リンクから出力される前記データの出力を前記差分に応じて遅延させることを特徴とする付記1記載の通信装置。
【0348】
(付記6) 前記リンク監視部は、各前記物理リンクを監視することにより前記物理リンクの障害の発生を検出し、
前記振分部は、前記リンク監視部による監視結果に基づいて、前記入力部によって入力された前記フローが出力される前記物理リンクを、障害の発生が検出されている前記物理リンク以外の前記物理リンクに変更することを特徴とする付記1記載の通信装置。
【0349】
(付記7) 前記振分部は、所定の時間内に前記入力部によって入力された前記フローが出力される前記物理リンクを変更した回数が所定の回数を超えている場合には、前記物理リンクを変更しないことを特徴とする付記1記載の通信装置。
【0350】
(付記8) 前記データのパケットを入力する入力側の前記物理リンクである入力側物理リンクと、
入力された前記パケットを出力する出力側の前記物理リンクである出力側物理リンクと、を有し、
前記入力側物理リンクは、
ループバックパケットを挿入する挿入部と、
前記ループバックパケットを抽出する抽出部と、を有し、
前記出力側物理リンクは、前記挿入部によって挿入された前記ループバックパケットを折り返す折り返し部を有し、
前記リンク監視部は、前記ループバックパケットが、前記挿入部によって挿入されてから、前記出力側物理リンクが有する前記折り返し部によって折り返され、前記抽出部によって抽出されるまでの時間に基づいて前記物理リンクの負荷の状況を監視することを特徴とする付記2記載の通信装置。
【0351】
(付記9) 前記データのパケットを入力する入力側の前記物理リンクである入力側物理リンクと、
入力された前記パケットを出力する出力側の前記物理リンクである出力側物理リンクと、を有し、
前記出力側物理リンクは、前記入力側物理リンクから入力された前記パケットを他の通信装置に送信し、
前記入力側物理リンクは、
ループバックパケットを挿入する挿入部と、
前記ループバックパケットを抽出する抽出部と、を有し、
前記リンク監視部は、前記ループバックパケットが、前記挿入部によって挿入されてから、他の通信装置によって折り返され、前記抽出部によって抽出されるまでの時間に基づいて前記物理リンクの負荷の状況を監視することを特徴とする付記2記載の通信装置。
【0352】
(付記10) 前記データにはそれぞれ複数の優先度のうちの1つの優先度が設定されており、
前記リンク監視部は、前記データの前記優先度および出力される前記物理リンクが同一であるもの毎に前記物理リンクが有する前記蓄積部における蓄積量を監視し、前記入力部から入力された前記フローの前記データが出力される前記物理リンクにおける前記フローの前記データと同一の前記優先度の前記データの蓄積量と前記優先度が高い前記データの蓄積量との合計量を示す情報を、前記フローの前記データに対する前記物理リンクの前記負荷として前記監視結果とし、
前記振分部は、前記リンク監視部による前記監視結果である前記フローに対する前記物理リンクの前記負荷に基づいて、前記入力部によって入力された前記フローが出力される前記物理リンクを、前記フローが出力されている前記物理リンクよりも前記蓄積部に蓄積されている前記データの量が多い前記物理リンクに変更することを特徴とする付記2記載の通信装置。
【0353】
(付記11) 前記リンク監視部は、前記物理リンクの前記蓄積部における蓄積量と前記データを出力する速度とに応じて前記物理リンクの前記負荷を評価し、前記物理リンクの前記負荷の評価結果を示す負荷情報を出力することを特徴とする付記2記載の通信装置。
【0354】
(付記12) 前記リンク監視部は、前記物理リンクの前記蓄積部における蓄積量を前記物理リンクが前記データを出力する速度で除算した結果によって前記物理リンクの前記負荷を示す前記負荷情報を出力することを特徴とする付記11記載の通信装置。
【0355】
(付記13) 前記フローと、前記フローが有する前記データが出力される前記物理リンクと、前記フローが有する前記データが前記入力部に対して最後に入力された時刻と、を対応付けて示す振分管理情報を記憶する振分管理情報記憶部を有し、
前記振分部は、
前記振分管理情報記憶部に記憶されている前記振分管理情報に基づいて、前記フローが有する前記データを出力する前記物理リンクを決定し、
前記振分管理情報記憶部に記憶されている前記振分管理情報に基づいて、前記フローが有する前記データが前記入力部に対して最後に入力された前記時刻を取得し、取得した前記時刻から一定時間経過している場合には、前記フローの前記振分管理情報を削除することを特徴とする付記1記載の通信装置。
【0356】
(付記14) 前記出力部は、前記リンク監視部による監視の結果、前記物理リンクの前記負荷の状況について異常が検出された場合において、前記フローが出力されている前記物理リンクよりも前記蓄積部に蓄積されている前記データの量が多い前記物理リンクが存在しないとき、前記フローが出力されている前記物理リンク以外の前記物理リンクであって、前記リンク監視部による監視結果に基づいて前記負荷が最も小さい前記物理リンクの出力を停止させることを特徴とする付記4記載の通信装置。
【0357】
(付記15) 前記蓄積部は、先入れ先出し方式によって前記データが読み出されることを特徴とする付記1記載の通信装置。
(付記16) 分割されたデータを複数の物理リンクが集約された論理リンクで転送する通信を制御する通信制御方法において、
フローが複数に分割されたデータを出力する複数のそれぞれに対応して設けられており、それぞれの前記物理リンクから出力される前記データを蓄積する蓄積部における分割されたデータの蓄積状況を監視し、
前記蓄積状況の監視結果に基づいて、分割された前記データを複数有するフローが入力された前記データが出力される前記物理リンクを、前記フローが出力されている前記物理リンクよりも対応する前記蓄積部に蓄積されている前記データの量が多い前記物理リンクに変更することを特徴とする通信制御方法。
【符号の説明】
【0358】
1 通信装置
11 入力部
12 振分部
13 リンク監視部
14 出力部
14a,14b,14c 蓄積部

【特許請求の範囲】
【請求項1】
分割されたデータを複数の物理リンクが集約された論理リンクで転送する通信装置において、
分割されたデータを複数有するフローが入力される入力部と、
前記データを出力する複数の物理リンクと、前記物理リンクのそれぞれに対応して設けられており、それぞれの前記物理リンクから出力される前記データを蓄積する蓄積部とを有する出力部と、
各前記蓄積部における前記データの蓄積状況を監視するリンク監視部と、
前記リンク監視部による前記蓄積状況の監視結果に基づいて、前記入力部によって入力された前記データが出力される前記物理リンクを、前記フローが出力されている前記物理リンクよりも対応する前記蓄積部に蓄積されている前記データの量が多い前記物理リンクに変更する振分部と、を有することを特徴とする通信装置。
【請求項2】
前記リンク監視部は、前記出力部が有する各前記物理リンクの負荷の状況を監視し、
前記振分部は、前記リンク監視部による監視の結果、各前記物理リンクの前記負荷の状況について異常が検出された場合、前記蓄積状況の監視結果に基づいて、前記入力部によって入力された前記フローが出力される前記物理リンクを、前記フローが出力されている前記物理リンクよりも前記蓄積部に蓄積されている前記データの量が多い前記物理リンクに変更することを特徴とする請求項1記載の通信装置。
【請求項3】
前記振分部は、前記入力部によって入力された前記フローが出力される前記物理リンクを、前記フローが出力されている前記物理リンクよりも前記蓄積部に蓄積されている前記データの量が多く、かつ、前記蓄積部に所定量以上の空きがある前記物理リンクに変更することを特徴とする請求項1記載の通信装置。
【請求項4】
前記リンク監視部は、前記出力部が有する各前記物理リンクの負荷の状況を監視し、
前記出力部は、前記リンク監視部による監視の結果、前記物理リンクの前記負荷の状況について異常が検出された場合において、前記フローが出力されている前記物理リンクよりも前記蓄積部に蓄積されている前記データの量が多い前記物理リンクが存在しないとき、前記入力部によって入力された前記フローが出力される前記物理リンクを、前記フローが出力されている前記物理リンク以外の1つの前記物理リンクの出力を停止させることを特徴とする請求項1記載の通信装置。
【請求項5】
前記振分部は、前記フローが出力される前記物理リンクを、前記フローの前記データが出力されている前記物理リンクよりも前記蓄積部に蓄積されている前記データの量が多い前記物理リンクのうち、前記蓄積部の前記フローが出力されている前記物理リンクの前記蓄積部に蓄積されている蓄積量との差分が最も小さい前記物理リンクに変更し、変更した前記物理リンクから出力される前記データの出力を前記差分に応じて遅延させることを特徴とする請求項1記載の通信装置。
【請求項6】
前記リンク監視部は、各前記物理リンクを監視することにより前記物理リンクの障害の発生を検出し、
前記振分部は、前記リンク監視部による監視結果に基づいて、前記入力部によって入力された前記フローが出力される前記物理リンクを、障害の発生が検出されている前記物理リンク以外の前記物理リンクに変更することを特徴とする請求項1記載の通信装置。
【請求項7】
前記振分部は、所定の時間内に前記入力部によって入力された前記フローが出力される前記物理リンクを変更した回数が所定の回数を超えている場合には、前記物理リンクを変更しないことを特徴とする請求項1記載の通信装置。
【請求項8】
前記データのパケットを入力する入力側の前記物理リンクである入力側物理リンクと、
入力された前記パケットを出力する出力側の前記物理リンクである出力側物理リンクと、を有し、
前記入力側物理リンクは、
ループバックパケットを挿入する挿入部と、
前記ループバックパケットを抽出する抽出部と、を有し、
前記出力側物理リンクは、前記挿入部によって挿入された前記ループバックパケットを折り返す折り返し部を有し、
前記リンク監視部は、前記ループバックパケットが、前記挿入部によって挿入されてから、前記出力側物理リンクが有する前記折り返し部によって折り返され、前記抽出部によって抽出されるまでの時間に基づいて前記物理リンクの負荷の状況を監視することを特徴とする請求項2記載の通信装置。
【請求項9】
前記データのパケットを入力する入力側の前記物理リンクである入力側物理リンクと、
入力された前記パケットを出力する出力側の前記物理リンクである出力側物理リンクと、を有し、
前記出力側物理リンクは、前記入力側物理リンクから入力された前記パケットを他の通信装置に送信し、
前記入力側物理リンクは、
ループバックパケットを挿入する挿入部と、
前記ループバックパケットを抽出する抽出部と、を有し、
前記リンク監視部は、前記ループバックパケットが、前記挿入部によって挿入されてから、他の通信装置によって折り返され、前記抽出部によって抽出されるまでの時間に基づいて前記物理リンクの負荷の状況を監視することを特徴とする請求項2記載の通信装置。
【請求項10】
分割されたデータを複数の物理リンクが集約された論理リンクで転送する通信を制御する通信制御方法において、
フローが複数に分割されたデータを出力する複数のそれぞれに対応して設けられており、それぞれの前記物理リンクから出力される前記データを蓄積する蓄積部における分割されたデータの蓄積状況を監視し、
前記蓄積状況の監視結果に基づいて、分割された前記データを複数有するフローが入力された前記データが出力される前記物理リンクを、前記フローが出力されている前記物理リンクよりも対応する前記蓄積部に蓄積されている前記データの量が多い前記物理リンクに変更することを特徴とする通信制御方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate

【図25】
image rotate

【図26】
image rotate

【図27】
image rotate

【図28】
image rotate

【図29】
image rotate