(57)【要約】【課題】分割されたデータの複数の物理リンクが集約された論理リンクで転送する場合のデータ中継を効率化する。【解決手段】入力部１１は、複数のデータを有するフローが入力される。出力部１４は、データを出力する複数の物理リンクと、物理リンクのそれぞれに対応して設けられており、それぞれの物理リンクから出力されるデータを蓄積する蓄積部１４ａ，１４ｂ，１４ｃとを有する。リンク監視部１３は、各蓄積部１４ａ，１４ｂ，１４ｃにおけるデータの蓄積状況を監視する。振分部１２は、リンク監視部１３による監視結果に基づいて、蓄積状況について異常が検出された場合に、入力部１１によって入力されたフローが出力される物理リンクを、フローが出力されている物理リンクよりも対応する蓄積部に蓄積されているデータの量が多い物理リンクに変更する。【選択図】図１
2010171562.tif 000002
【特許請求の範囲】
【請求項１】
分割されたデータを複数の物理リンクが集約された論理リンクで転送する通信装置において、
分割されたデータを複数有するフローが入力される入力部と、
前記データを出力する複数の物理リンクと、前記物理リンクのそれぞれに対応して設けられており、それぞれの前記物理リンクから出力される前記データを蓄積する蓄積部とを有する出力部と、
各前記蓄積部における前記データの蓄積状況を監視するリンク監視部と、
前記リンク監視部による前記蓄積状況の監視結果に基づいて、前記入力部によって入力された前記データが出力される前記物理リンクを、前記フローが出力されている前記物理リンクよりも対応する前記蓄積部に蓄積されている前記データの量が多い前記物理リンクに変更する振分部と、を有することを特徴とする通信装置。
【請求項２】
前記リンク監視部は、前記出力部が有する各前記物理リンクの負荷の状況を監視し、
前記振分部は、前記リンク監視部による監視の結果、各前記物理リンクの前記負荷の状況について異常が検出された場合、前記蓄積状況の監視結果に基づいて、前記入力部によって入力された前記フローが出力される前記物理リンクを、前記フローが出力されている前記物理リンクよりも前記蓄積部に蓄積されている前記データの量が多い前記物理リンクに変更することを特徴とする請求項１記載の通信装置。
【請求項３】
前記振分部は、前記入力部によって入力された前記フローが出力される前記物理リンクを、前記フローが出力されている前記物理リンクよりも前記蓄積部に蓄積されている前記データの量が多く、かつ、前記蓄積部に所定量以上の空きがある前記物理リンクに変更することを特徴とする請求項１記載の通信装置。
【請求項４】
前記リンク監視部は、前記出力部が有する各前記物理リンクの負荷の状況を監視し、
前記出力部は、前記リンク監視部による監視の結果、前記物理リンクの前記負荷の状況について異常が検出された場合において、前記フローが出力されている前記物理リンクよりも前記蓄積部に蓄積されている前記データの量が多い前記物理リンクが存在しないとき、前記入力部によって入力された前記フローが出力される前記物理リンクを、前記フローが出力されている前記物理リンク以外の１つの前記物理リンクの出力を停止させることを特徴とする請求項１記載の通信装置。
【請求項５】
前記振分部は、前記フローが出力される前記物理リンクを、前記フローの前記データが出力されている前記物理リンクよりも前記蓄積部に蓄積されている前記データの量が多い前記物理リンクのうち、前記蓄積部の前記フローが出力されている前記物理リンクの前記蓄積部に蓄積されている蓄積量との差分が最も小さい前記物理リンクに変更し、変更した前記物理リンクから出力される前記データの出力を前記差分に応じて遅延させることを特徴とする請求項１記載の通信装置。
【請求項６】
前記リンク監視部は、各前記物理リンクを監視することにより前記物理リンクの障害の発生を検出し、
前記振分部は、前記リンク監視部による監視結果に基づいて、前記入力部によって入力された前記フローが出力される前記物理リンクを、障害の発生が検出されている前記物理リンク以外の前記物理リンクに変更することを特徴とする請求項１記載の通信装置。
【請求項７】
前記振分部は、所定の時間内に前記入力部によって入力された前記フローが出力される前記物理リンクを変更した回数が所定の回数を超えている場合には、前記物理リンクを変更しないことを特徴とする請求項１記載の通信装置。
【請求項８】
前記データのパケットを入力する入力側の前記物理リンクである入力側物理リンクと、
入力された前記パケットを出力する出力側の前記物理リンクである出力側物理リンクと、を有し、
前記入力側物理リンクは、
ループバックパケットを挿入する挿入部と、
前記ループバックパケットを抽出する抽出部と、を有し、
前記出力側物理リンクは、前記挿入部によって挿入された前記ループバックパケットを折り返す折り返し部を有し、
前記リンク監視部は、前記ループバックパケットが、前記挿入部によって挿入されてから、前記出力側物理リンクが有する前記折り返し部によって折り返され、前記抽出部によって抽出されるまでの時間に基づいて前記物理リンクの負荷の状況を監視することを特徴とする請求項２記載の通信装置。
【請求項９】
前記データのパケットを入力する入力側の前記物理リンクである入力側物理リンクと、
入力された前記パケットを出力する出力側の前記物理リンクである出力側物理リンクと、を有し、
前記出力側物理リンクは、前記入力側物理リンクから入力された前記パケットを他の通信装置に送信し、
前記入力側物理リンクは、
ループバックパケットを挿入する挿入部と、
前記ループバックパケットを抽出する抽出部と、を有し、
前記リンク監視部は、前記ループバックパケットが、前記挿入部によって挿入されてから、他の通信装置によって折り返され、前記抽出部によって抽出されるまでの時間に基づいて前記物理リンクの負荷の状況を監視することを特徴とする請求項２記載の通信装置。
【請求項１０】
分割されたデータを複数の物理リンクが集約された論理リンクで転送する通信を制御する通信制御方法において、
フローが複数に分割されたデータを出力する複数のそれぞれに対応して設けられており、それぞれの前記物理リンクから出力される前記データを蓄積する蓄積部における分割されたデータの蓄積状況を監視し、
前記蓄積状況の監視結果に基づいて、分割された前記データを複数有するフローが入力された前記データが出力される前記物理リンクを、前記フローが出力されている前記物理リンクよりも対応する前記蓄積部に蓄積されている前記データの量が多い前記物理リンクに変更することを特徴とする通信制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は通信装置および通信制御方法に関し、特に分割されたデータを複数の物理リンクが集約された論理リンクで転送する通信装置および通信制御方法に関する。
【背景技術】
【０００２】
ネットワークサービスの高度化に伴い、ネットワークを流れるデータ量が飛躍的に増加しており、ネットワークを構成するルータやスイッチの大容量化が進んでいる。
ここで、ルータやスイッチにおいて、大容量データを隣接するルータやスイッチへ中継する方法として、リンクアグリゲーション（Link Aggregation：ＬＡＧ）を用いて、装置内の複数の物理ポートを論理的に１つのポートと捉えることにより、大容量のデータを中継する技術が用いられている。
【０００３】
リンクアグリゲーションは、同一の通信装置等との間にケーブル等の物理リンクを複数設置し、これらの物理リンクを束ねて１つの仮想的な論理リンクを構成する技術であり、ＩＥＥＥ８０２．３ａｄで規定されている。
【０００４】
このリンクアグリゲーションを使用することにより、高速な物理回線を使用しなくても通信帯域を拡大することができる。また、リンクアグリゲーションは、物理回線に障害が発生した場合でも残りの回線を用いて通信を継続できることから、耐障害技術としても使用されている。
【０００５】
リンクアグリゲーションを用いた通信装置において、リンクアグリゲーションの帯域の使用効率を向上させるために、受信パケットをリンクアグリケーションの各出力側ポートに適宜振り分ける技術が知られている。このような通信装置Ａの例として、受信パケットの出力先のリンクアグリゲーションの物理ポートが輻輳状態になったときに、輻輳している物理ポートから他の物理ポートに振分け先を変更する通信装置がある。また、受信パケットのアドレスのハッシュ値を用いて受信パケットの出力先の物理ポートを決定すると共に、複数の物理ポート間の流量比を帯域分配比率にフィードバックする通信装置Ｂがある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００７−１８０８９１号公報
【特許文献２】特開２００６−５４３７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、上記の通信装置Ａでは、同一フローのパケットが、フローの途中で異なる物理ポートに振り分けられてしまうので、同一フロー内でパケットの順序が逆転してしまう場合がある。このため、通信品質が劣化するという問題点があった。
【０００８】
また、これを改善するために、フローの先頭のパケットが到着した時にそのフローの出力先の物理ポートを決定し、フローが終了するまで出力先の物理ポートを固定すると、長時間データ通信が継続するロングフローが１つの物理ポートに集中してしまった場合等には、徐々に出力先の物理ポートが輻輳状態になってしまう可能性がある。その結果、パケットロスが多発して通信品質が劣化するという問題点があった。
【０００９】
また、上記の通信装置Ｂでは、パケットのアドレス値が偏った場合に、特定の物理ポートにパケットが集中するためリンクアグリゲーション帯域を有効的に利用できない問題があった。
【００１０】
本発明はこのような点に鑑みてなされたものであり、データ中継効率を改善した通信装置および通信制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
開示の通信装置は、分割されたデータを複数の物理リンクが集約された論理リンクで転送する通信装置において、分割されたデータを複数有するフローが入力される入力部と、前記データを出力する複数の物理リンクと、前記物理リンクのそれぞれに対応して設けられており、それぞれの前記物理リンクから出力される前記データを蓄積する蓄積部とを有する出力部と、各前記蓄積部における前記データの蓄積状況を監視するリンク監視部と、前記リンク監視部による前記蓄積状況の監視結果に基づいて、前記入力部によって入力された前記データが出力される前記物理リンクを、前記フローが出力されている前記物理リンクよりも対応する前記蓄積部に蓄積されている前記データの量が多い前記物理リンクに変更する振分部と、を有する。
【００１２】
開示の通信装置によれば、入力部により、分割されたデータを複数有するフローが入力される。出力部が有する複数の物理リンクにより、データが出力される。出力部が有しており、物理リンクのそれぞれに対応して設けられている蓄積部により、それぞれの物理リンクから出力されるデータが蓄積される。リンク監視部により、各蓄積部におけるデータの蓄積状況が監視される。振分部により、リンク監視部による監視結果に基づいて、出力部の蓄積状態が飽和状態になっているときに、入力部によって入力されたフローが出力される物理リンクが、フローが出力されている物理リンクよりも対応する蓄積部に蓄積されているデータの量が多い物理リンクに変更される。パケットの出力先を蓄積されているデータ量が多い物理リンクに変更することにより、パケットの順序逆転を防止すると共に、リンクアグリゲーション帯域の効率利用を実現している。
【発明の効果】
【００１３】
開示の通信装置および通信制御方法によれば、ある出力側の物理リンクにパケットが集中した場合であっても、パケットの順序逆転を発生させることなく、他の出力側の物理リンクへパケットの出力先を変更し、データの振り分けを効果的に行うことで、データの中継効率を改善することが可能になる。
【図面の簡単な説明】
【００１４】
【図１】本実施の形態の概要を示す図である。
【図２】通信システムの全体構成を示す図である。
【図３】スイッチ間を接続するＬＡＧを示す図である。
【図４】スイッチのハードウェア構成を示す図である。
【図５】第１の実施の形態のスイッチの構成を示すブロック図である。
【図６】出力先テーブルのデータ構造例を示す図である。
【図７】振分管理テーブルのデータ構造例を示す図である。
【図８】出力ポートテーブルのデータ構造例を示す図である。
【図９】第１の実施の形態において、入力されたフローの途中でパケットの出力ポートが変更されるときのスイッチの状態を示す図である。
【図１０】第１の実施の形態の振分判定処理の手順を示すフローチャートである。
【図１１】第１の実施の形態の振分判定処理の手順を示すフローチャートである。
【図１２】第１の実施の形態の変形例において、入力されたフローの途中でパケットの出力ポートが変更されるときのスイッチの状態を示す図である。
【図１３】第２の実施の形態のスイッチの構成を示すブロック図である。
【図１４】第２の実施の形態の振分判定処理の手順を示すフローチャートである。
【図１５】第２の実施の形態の振分判定処理の手順を示すフローチャートである。
【図１６】第２の実施の形態の振分判定処理の手順を示すフローチャートである。
【図１７】第２の実施の形態の振分管理情報更新処理の手順を示すフローチャートである。
【図１８】第３の実施の形態のスイッチの構成を示すブロック図である。
【図１９】第３の実施の形態の振分判定処理の手順を示すフローチャートである。
【図２０】第３の実施の形態の振分判定処理の手順を示すフローチャートである。
【図２１】第４の実施の形態のスイッチの構成を示すブロック図である。
【図２２】第４の実施の形態において、入力されたフローの途中でパケットの出力ポートが変更されるときのスイッチの状態を示す図である。
【図２３】第４の実施の形態において、入力されたフローの途中でパケットの出力ポートが変更されるときのキューの状態を示す図である。
【図２４】第４の実施の形態の振分判定処理の手順を示すフローチャートである。
【図２５】第４の実施の形態の振分判定処理の手順を示すフローチャートである。
【図２６】第５の実施の形態のスイッチの構成を示すブロック図である。
【図２７】第６の実施の形態のスイッチの構成を示すブロック図である。
【図２８】第７の実施の形態のスイッチの構成を示すブロック図である。
【図２９】第７の実施の形態において、入力されたフローの途中でパケットの出力ポートが変更されるときのスイッチの状態を示す図である。
【発明を実施するための形態】
【００１５】
以下、本発明の実施の形態について、図面を参照して説明する。
図１は、本実施の形態の概要を示す図である。図１に示したように、本実施の形態に係る通信装置１は、分割されたデータを複数の物理リンクが集約された論理リンクで転送する。
【００１６】
図１に示す通信装置１は、入力部１１、振分部１２、リンク監視部１３、出力部１４を有している。また、出力部１４は、蓄積部１４ａ，１４ｂ，１４ｃおよび物理リンク＃０，＃１，＃２を有している。
【００１７】
入力部１１は、他の通信装置等の通信機能を有する装置と通信路によって接続可能である。入力部１１は、他の装置から送信された、分割されたデータを複数有するフローが入力される。
【００１８】
振分部１２は、入力部１１によって入力されたフローが出力される物理リンクを、論理リンクを構成する物理リンク＃０，＃１，＃２のうちのいずれかに決定する。また、振分部１２は、リンク監視部１３から通知された監視結果に基づいて、入力部１１によって入力されたフローが出力される物理リンクを、フローが出力されている物理リンクに対応して設けられた蓄積部に蓄積されているデータの量と比較して、その物理リンクに対応して設けられた蓄積部に蓄積されているデータの量が多い物理リンクに変更する。振分部１２の決定または変更に基づいて、フローのデータが物理リンク＃０，＃１，＃２に転送される。
【００１９】
リンク監視部１３は、各蓄積部１４ａ，１４ｂ，１４ｃにおけるデータの蓄積状況を監視する。そして、リンク監視部１３は、各蓄積部１４ａ，１４ｂ，１４ｃの監視結果を、振分部１２に通知する。
【００２０】
出力部１４は、データを出力する複数の物理リンク＃０，＃１，＃２を有する。また、出力部１４は、物理リンク＃０，＃１，＃２のそれぞれに対応して設けられており、それぞれの物理リンク＃０，＃１，＃２から出力されるデータを蓄積する蓄積部１４ａ，１４ｂ，１４ｃを有する。
【００２１】
物理リンク＃０に転送されたデータは、一旦蓄積部１４ａに蓄積された後に出力される。同様に、物理リンク＃１に転送されたデータは、一旦蓄積部１４ｂに蓄積された後に出力され、物理リンク＃２に転送されたデータは、一旦蓄積部１４ｃに蓄積された後に出力される。物理リンク＃０，＃１，＃２から出力されたデータは、通信路を通じて他の通信装置等に転送される。
【００２２】
このような通信装置１によれば、入力部１１により、分割されたデータを複数有するフローが入力される。出力部１４が有する複数の物理リンク＃０，＃１，＃２により、データが出力される。出力部１４が有しており、物理リンク＃０，＃１，＃２のそれぞれに対応して設けられている蓄積部１４ａ，１４ｂ，１４ｃにより、それぞれの物理リンク＃０，＃１，＃２から出力されるデータが蓄積される。リンク監視部１３により、各蓄積部１４ａ，１４ｂ，１４ｃにおけるデータの蓄積状況が監視される。振分部１２により、入力部１１によって入力されたフローが出力される物理リンクが、論理リンクを構成する物理リンク＃０，＃１，＃２のうちのいずれかに決定されると共に、リンク監視部１３による監視結果に基づいて、蓄積部の蓄積状態が飽和状態になっているときに、入力部１１によって入力されたフローが出力される物理リンクが、フローが出力されている物理リンクよりも対応する蓄積部に蓄積されているデータの量が多い他の物理リンクに変更される。
【００２３】
これにより、出力側の物理リンクに対するデータの振り分けを動的に変更することで、データの中継効率を改善でき、またパケットの順序逆転も防止することができる。
次に、上記の通信装置のさらに具体的な実施の態様について説明する。
【００２４】
なお、以下の実施の形態では通信装置をスイッチとして、特にＭＡＣアドレス（Media Access Control address）に基づいてデータリンク層のパケットを中継するレイヤ２スイッチを例示しして説明するが、これに制限されず、例えばＩＰアドレス（Internet Protocol address）に基づいてネットワーク層のパケットを中継するＩＰルータやＬ３スイッチにも適用することができる。また、ＯＳＩ（Open Systems Interconnection）参照モデルにおけるレイヤ２のデータの単位を、フレーム（frame）と呼ぶこともあるが、以下の実施の形態では、説明の便宜上、すべてパケットに統一して表現する。
【００２５】
［第１の実施の形態］
図２は、通信システムの全体構成を示す図である。本実施の形態の通信システムは、端末装置間でデータの送受信を行えるように、複数のレイヤ２スイッチがデータリンク層のパケットを中継するものである。
【００２６】
図２に示す通信システムは、スイッチ１００，１００ａ，１００ｂ，１００ｃ，１００ｄと端末装置４０，６１，６２，６３，６４，６５，６６とで構成される。スイッチ１００，１００ａ，１００ｂ，１００ｃ，１００ｄは、レイヤ２スイッチである。端末装置６１，６２，６３，６４，６５，６６は、ユーザが使用する端末装置である。端末装置４０は、スイッチ１００の管理者が使用する端末装置である。スイッチ１００ａ，１００ｂ，１００ｃ，１００ｄは、スイッチ１００と同様に構成されており、同等の機能を有する。
【００２７】
スイッチ１００は、スイッチ１００ａ，１００ｂと接続されている。スイッチ１００ｂは、スイッチ１００ｃ，１００ｄと接続されている。端末装置６１，６２は、スイッチ１００ａと接続されている。端末装置６３，６４は、スイッチ１００ｃと接続されている。端末装置６５，６６は、スイッチ１００ｄと接続されている。端末装置４０は、スイッチ１００と接続されている。２つのスイッチ間またはスイッチと端末装置の間は、１つ以上の物理リンク（ネットワークケーブル）で接続されている。
【００２８】
スイッチ１００，１００ａ，１００ｂ，１００ｃ，１００ｄは、パケットに含まれるアドレスに従って、送信元の端末装置から宛て先の端末装置まで、パケットを中継する。例えば、端末装置６１が端末装置６３へパケットを送信する場合、スイッチ１００ａ、スイッチ１００、スイッチ１００ｂ、スイッチ１００ｃの順にパケットが中継される。
【００２９】
図３は、スイッチ間を接続するＬＡＧを示す図である。図２において前述したスイッチは、本実施の形態では、図３に示すように、スイッチ１００，１００ａ，１００ｂの３つのスイッチの間がＬＡＧによって接続されている。
【００３０】
スイッチ１００とスイッチ１００ａとの間は、ＬＡＧグループ＃Ａに属する物理ポートであるポート＃０からポート＃２によって接続されている。また、スイッチ１００とスイッチ１００ｂとの間は、ＬＡＧグループ＃Ｂに属する物理ポートであるポート＃１２からポート＃１５によって接続されている。なお、スイッチ１００のポート＃３からポート＃１１は、図示しない他のスイッチと接続されているものとする。また、各ポートには、それぞれ入力ポートと出力ポートとが設けられているものとする。具体的には、ポート＃０は、入力用ポートおよび出力用ポートを有する。ポート＃１以下も同様である。
【００３１】
図４は、スイッチのハードウェア構成を示す図である。図４は、スイッチ１００の内部構成を示したものであるが、スイッチ１００ａ，１００ｂ，１００ｃ，１００ｄも同様の構成で実現できる。スイッチ１００は、ＣＰＵ（Central Processing Unit）１０１、インタフェースカード１０２ａ，１０２ｂ，１０２ｃ，１０２ｄ、スイッチカード１０３、テーブル記憶メモリ１０４、ポート監視部１０５、バス１０６を有している。
【００３２】
ＣＰＵ１０１は、スイッチ１００全体を制御している。ＣＰＵ１０１は、プログラムによる処理を実行する。ＣＰＵ１０１は、図示しないメモリに保持されたデータを用いて、同じくメモリに保持されたプログラムを実行する。ＣＰＵ１０１は、図示しない通信インタフェースを介して、管理者が使用する端末装置４０から送信されるコマンドを受信すると共に、コマンドに対する実行結果を端末装置４０に応答する。
【００３３】
テーブル記憶メモリ１０４は、複数のテーブルを記憶している。テーブル記憶メモリ１０４に記憶されるテーブルには、論理リンクの構成を管理するテーブル、論理リンク内でのパケットの転送先を決定するためのテーブル、パケットの転送先を示す情報を記憶するテーブルが含まれる。
【００３４】
バス１０６には、ＣＰＵ１０１、インタフェースカード１０２ａ，１０２ｂ，１０２ｃ，１０２ｄ、スイッチカード１０３、テーブル記憶メモリ１０４、ポート監視部１０５が接続されている。
【００３５】
インタフェースカード１０２ａ，１０２ｂ，１０２ｃ，１０２ｄは、それぞれ複数個（例えば、８個）の通信ポートを有している。それぞれの通信ポートには、１つの物理リンクを接続できる。インタフェースカード１０２ａ，１０２ｂ，１０２ｃ，１０２ｄは、それぞれの通信ポートを監視してパケットを取得する。なお、インタフェースカード１０２ａ，１０２ｂ，１０２ｃ，１０２ｄは、複数の通信ポートに同時にパケットが到来した場合に備えて、パケットを一時的に保持するバッファを内部に有している。そして、インタフェースカード１０２ａ，１０２ｂ，１０２ｃ，１０２ｄは、取得したパケットをスイッチカード１０３に送る。
【００３６】
スイッチカード１０３は、図示しない学習テーブルを有している。スイッチカード１０３は、学習テーブルに、過去に受信したパケットの送信元アドレスと、そのパケットが到来した通信ポートまたは論理リンクの識別情報とを対応付けて記憶している。この学習テーブルは、スイッチカード１０３によって随時更新される。
【００３７】
そして、スイッチカード１０３は、インタフェースカード１０２ａ，１０２ｂ，１０２ｃ，１０２ｄのいずれかからパケットを受け取ると、学習テーブルを参照して、そのパケットの転送先を決定する。ここで、決定した転送先が論理リンクである場合、スイッチカード１０３は、テーブル記憶メモリ１０４に記憶されたテーブルを参照して、転送に使用する具体的なインタフェースカード１０２ａ，１０２ｂ，１０２ｃ，１０２ｄおよび通信ポートを決定する。その後、スイッチカード１０３は、パケットを、決定したインタフェースカード１０２ａ，１０２ｂ，１０２ｃ，１０２ｄに送る。
【００３８】
パケットを受け取ったインタフェースカード１０２ａ，１０２ｂ，１０２ｃ，１０２ｄは、受け取ったパケットを、決定された通信ポートから送信先に出力する。
ポート監視部１０５は、インタフェースカード１０２ａ，１０２ｂ，１０２ｃ，１０２ｄの通信ポートを監視する。そして、ポート監視部１０５は、インタフェースカード１０２ａ，１０２ｂ，１０２ｃ，１０２ｄの通信ポートに接続された物理リンクの故障や復旧を検出すると、ＣＰＵ１０１にその旨を通知する。
【００３９】
図５は、第１の実施の形態のスイッチの機能を示すブロック図である。なお、図５ではスイッチ１００の機能を示しているが、図２において前述した他のスイッチ１００ａ，１００ｂ，１００ｃ，１００ｄもスイッチ１００と同様の構成によって実現され、同様の機能を有する。
【００４０】
図５に示すように、本実施の形態のスイッチ１００は、複数の物理ポート（以下、ポート）が集約された論理リンクであるＬＡＧにより、データが分割されたパケットを転送する。スイッチ１００は、入力部１２１、振分部１２２、スイッチ部１２３、出力ポート監視部１２４、出力部１４０、出力先情報記憶部１５１、振分管理情報記憶部１５２、出力ポート情報記憶部１５３を有する。また、振分部１２２は、出力先決定部１２２ａ、フロー識別部１２２ｂ、振分先判定部１２２ｃを有する。また、出力部１４０は、出力ポート毎に対応付けられた出力キュー部１４１ａ，１４１ｂ，１４１ｃ，・・・を有する。
【００４１】
入力部１２１は、他のスイッチ、端末装置、情報処理装置等の通信機能を有する装置とＬＡＧおよびその他の方式の通信路によって接続可能である。入力部１２１は、入力側のポート（例えば、ポート＃３）を有し、他の装置から送信された、他のスイッチ１００ａ，１００ｂ，１００ｃ，１００ｄおよび端末装置等の通信装置に転送されるフローの分割されたデータ等のパケットが入力される。
【００４２】
振分部１２２は、出力先情報記憶部１５１に記憶されている出力先情報および振分管理情報記憶部１５２に記憶されている振分管理情報を参照して、入力部１２１によって入力されたフローのパケットが出力されるポートを決定する。
【００４３】
振分部１２２は、入力部１２１によって入力されたフローが出力されるポートを、ＬＡＧグループを構成するポート＃０，＃１，＃２，・・・のうちのいずれかに決定する。また、振分部１２２は、出力ポート監視部１２４から通知された監視結果に基づいて、各ポートの負荷の状況について異常が検出された場合、入力部１２１によって入力されたフローが出力されるポートである出力ポートを、出力ポート以外のポートであってＬＡＧグループを構成する各ポートの出力キュー部のそれぞれのバッファに蓄積されているデータの量と比較して、ポートに対応して設けられたバッファに蓄積されているデータの量が多いポートに変更する。
【００４４】
出力先決定部１２２ａは、入力部１２１に入力されたフローのパケットのヘッダ情報と、ＭＡＣアドレスの学習結果から生成された出力先情報記憶部１５１に記憶されている出力先情報に基づいて、パケットが出力され得るポートを決定するものである。なお、出力先決定部１２２ａは、ＭＡＣアドレスの学習に替えて、ＩＰアドレスおよびルーティングプロトコルに基づいてパケットが出力され得るポートを決定してもよい。
【００４５】
この出力先決定部１２２ａは、入力されたフローのパケットの宛先ＭＡＣアドレスに基づいて、各フローのパケットの出力ポートを特定する。すなわち、出力先決定部１２２ａは、入力されたフローのパケットに含まれるＭＡＣアドレスを抽出する。このとき、入力されたフローのパケットのＭＡＣアドレスが、出力先情報によって、当該フローのパケットの出力と対応づけられている。これを用いて、スイッチ１００は、入力されたフローのパケットのＭＡＣアドレスから、出力先情報で対応付けられた出力ポートを取得する。
【００４６】
また、入力されたフローの出力先がＬＡＧの場合は、その出力先情報において、ＬＡＧで送信されるフローのパケットのＭＡＣアドレスに対してさらにＬＡＧで送信される旨を示す情報を設定することで、そのフローのパケットの出力先としてＬＡＧで出力されることおよび出力されるＬＡＧグループを指定することができる。これに従い、出力先決定部１２２ａは、そのフローのパケットの宛先を、指定されたＬＡＧグループに決定する。
【００４７】
フロー識別部１２２ｂは、ＬＡＧの運用時に入力されたパケットのヘッダ情報からフロー識別子を生成し、フローを特定する。
また、フロー識別部１２２ｂは、入力されたフローのパケットのヘッダ情報に基づいてハッシュ（hash）演算（例えば、ＳＨＡ−１：Secure Hash Algorithm 1）を行うことにより、フロー識別子を生成する。このとき、フロー識別部１２２ｂは、パケットからヘッダ情報を抽出し、抽出されたヘッダ情報を用いてハッシュ演算を行う。
【００４８】
ここで、ヘッダ情報とは、パケットの例えば先頭部分等の、パケットの一部分を構成する情報であり、例えば、パケットに含まれている各種のアドレスを用いることができる。ヘッダ情報として用いるアドレスとは、パケットの送信元の端末装置（または送信元の端末装置が属する集合）や宛先の端末装置（または宛先の端末装置が属する集合）を特定するための情報である。ヘッダ情報は、例えば、送信元／宛先のＭＡＣアドレス、送信元／宛先のＩＰ（Internet Protocol）アドレス等である。
【００４９】
振分先判定部１２２ｃは、振分管理情報を参照して、フロー識別部１２２ｂによって計算されたハッシュ値に基づいてパケットが出力されるポートを決定する。
また、振分先判定部１２２ｃは、ＬＡＧの運用時にＬＡＧグループ内の複数のポートの帯域を効率的に利用するために、後述する出力ポート監視部１２４によるポートの監視結果に基づいて送出先のＬＡＧが有する出力ポートを設定する。
【００５０】
スイッチ部１２３は、振分部１２２の判断に基づいてパケットを出力ポートに転送する。これにより、スイッチ１００に入力されたフローのパケットが、振分部１２２による設定に基づいて出力部１４０が有する出力ポートから出力され、フローのデータが送信先に向かって中継される。
【００５１】
出力ポート監視部１２４は、スイッチ１００の出力部１４０が有する各ポートの輻輳状態、負荷の状態、障害の発生の有無等のトラフィック状態を監視するものである。出力ポート監視部１２４は、各出力キュー部１４１ａ，１４１ｂ，１４１ｃ，・・・のそれぞれのバッファにおけるデータの蓄積状況を監視する。出力ポート監視部１２４は、各バッファの監視結果を、出力ポート情報記憶部１５３に出力ポート情報として記憶させると共に、振分部１２２に通知する。
【００５２】
出力ポート監視部１２４は、ＬＡＧが有する各出力ポートの最新のキュー長（その出力ポートで出力を待っている状態のパケットのデータサイズの総量）を監視すると共に、各ポートの負荷を監視する。本実施の形態では、ポートの負荷は、一定時間内にそれぞれの出力キュー部に入力されたパケットの総データ量で求めるが、これに限らず、長期的な負荷を監視するために過去の負荷情報に重み付けを行って、加重平均で負荷を算出してもよい。
【００５３】
出力部１４０は、データを出力する複数のポート＃０，＃１，＃２，・・・と、ポート＃０，＃１，＃２，・・・のそれぞれに対応して設けられており、それぞれのポート＃０，＃１，＃２，・・・から出力されるデータを蓄積するバッファを有する出力キュー部１４１ａ，１４１ｂ，１４１ｃ，・・・を有する。出力キュー部１４１ａ，１４１ｂ，１４１ｃ，・・・は、蓄積部として機能する。
【００５４】
出力キュー部１４１ａ，１４１ｂ，１４１ｃ，・・・は、出力部１４０が有する各ポートに対応して設けられており、データ送信の品質制御およびスイッチ１００の入力部１２１が有する入力側の各ポート（例えば、ポート＃３）から同時に入力されたパケットの待ち合わせ等を行う。出力キュー部１４１ａ，１４１ｂ，１４１ｃ，・・・が有するそれぞれのバッファは、先入れ先出し方式によってデータが読み出される。
【００５５】
出力先情報記憶部１５１は、出力先テーブル１５１ａ（図６において後述）として出力先情報を記憶している。出力先情報は、ＬＡＧ等によりフローのパケットが出力され得るポートを示す情報である。
【００５６】
振分管理情報記憶部１５２は、振分管理テーブル１５２ａ（図７において後述）として振分管理情報を記憶している。振分管理情報は、各フローのパケットについて振分先判定部１２２ｃで決定された出力ポートを示す情報である。
【００５７】
出力ポート情報記憶部１５３は、出力ポートテーブル１５３ａ（図８において後述）として出力ポート情報を記憶している。出力ポート情報は、各ポートの出力側のバッファのキュー長、出力側の通信路の輻輳状態および障害の発生の有無等を示す情報である。
【００５８】
ここで、スイッチ１００は、図４に示した複数（例えば、４つ）のインタフェースカード１０２ａ，１０２ｂ，１０２ｃ，１０２ｄによって構成されている。ここでは、フレームが入力されるインタフェースカードを入力カード（例えば、インタフェースカード１０２ａ）とし、フレームが出力されるインタフェースカードを出力カード（例えば、インタフェースカード１０２ｂ，１０２ｃ）とするが、各インタフェースカードは、機能的には同一であり、それぞれのカードにおいてフレームの入力および出力が可能である。すなわち、スイッチ１００は、入力部１２１、振分部１２２、出力ポート監視部１２４として機能する入力側のカードと、出力部１４０としてそれぞれ機能する出力側のカードとによって、入力されたフローのパケットを他のスイッチ等の装置に通信路を介して出力する。
【００５９】
本実施の形態では、例えば、インタフェースカード１０２ａ，１０２ｂ，１０２ｃ，１０２ｄのように、それぞれが複数のポートを持つインタフェースカードを複数用いて、物理リンクであるポートを集約して構成した論理リンクであるＬＡＧが構成される。このとき、各ポートが物理リンクとして通信が行われる。すなわち、このＬＡＧは、複数のポートを持つ複数のインタフェースで構成される。
【００６０】
本実施の形態のスイッチ１００では、上記の各部が以下のように機能する。
スイッチ１００の入力部１２１が有するポート＃３からフローの入力パケットが入力されると、振分部１２２が有する出力先決定部１２２ａにおいてパケットのヘッダ情報が抽出され、抽出されたヘッダ情報に含まれるＭＡＣアドレスを検索キーとして出力先情報記憶部１５１の出力先テーブル１５１ａから出力ポートを示す情報を取得する。なお、スイッチ１００がＩＰルータ等の場合は、ＩＰアドレスが検索キーとなる。入力されたパケットが出力先決定部１２２ａによりＬＡＧで出力されるパケットであると判断されると、フロー識別部１２２ｂにおいてフローが特定される。このとき、フロー識別部１２２ｂにおいて、パケットのヘッダ情報のハッシュ演算を実行してフローの識別を行う。具体的には、ハッシュ演算の結果得られる値をフロー識別子とする。
【００６１】
次に、振分先判定部１２２ｃは、まず振分管理情報記憶部１５２の振分管理テーブル１５２ａに、入力されたフローのエントリがあるかをチェックする。
チェックの結果、入力されたパケットのフローが新規のフローであった場合には、振分先判定部１２２ｃは、出力ポート監視部１２４の情報に基づき、複数のポートの中で最も負荷の低いポートを選択し、その情報を振分管理テーブル１５２ａに記憶させる。そして、振分先判定部１２２ｃは、入力されたパケットを、決定したポートに転送する。
【００６２】
ここで、初期状態では、振分管理テーブル１５２ａにはそのフローのエントリは存在しないため、振分先判定部１２２ｃは、入力されたパケットがそのフローの先頭パケットであると判断し、出力ポート監視部１２４の監視結果に基づいて出力先であるＬＡＧが有するポートの中から最も負荷の低い物理ポートを出力ポートとして選択する。そして、選択されたポートの出力ポート番号をそのフローのフロー識別子に関連付けて振分管理テーブル１５２ａに記憶させる。また、入力された先頭パケットは、選択されたポートにスイッチ部１２３により転送され、そのポートから出力される。
【００６３】
一方、チェックの結果、そのパケットと既に同一フローのパケットが入力されていた場合には、振分先判定部１２２ｃは、振分管理テーブル１５２ａに記憶された情報を参照して、出力ポートに設定されているポートについて、ポートの状態を示す出力ポート情報を入手し、出力ポート監視部１２４の情報を参照して出力ポートが輻輳状態か否かを確認する。
【００６４】
この場合、振分先判定部１２２ｃは、先頭パケットが入力された場合とは異なり、まず振分管理テーブル１５２ａに記憶されている出力ポートのポート番号を取得し、その出力ポートの輻輳状態をチェックする。輻輳状態は、出力ポート監視部１２４が監視している負荷状態が一定値以上であるときに輻輳状態、一定値未満のときを輻輳状態でないとして判断する。
【００６５】
出力ポート監視部１２４は、各ポートについて一定時間毎に監視し、監視結果を出力ポートテーブル１５３ａに出力ポート情報として記憶させると共に、必要に応じて振分部１２２に通知する。
【００６６】
次に、スイッチ１００にそのフローの後続パケットが入力されると、振分先判定部１２２ｃによる前述したエントリのチェックまでは、フローの先頭パケットと同様の処理が行われる。
【００６７】
ここで、エントリのチェックにより既にエントリがあるフローのパケットであると判断されると、出力ポート監視部１２４による出力ポートの監視結果が参照される。
出力ポートが輻輳状態でなければ、振分先判定部１２２ｃは、振分管理テーブル１５２ａから取得した出力ポートにパケットを転送する。これにより、入力された後続パケットの出力ポートが輻輳状態でないと判断されたときは、入力された後続パケットは、振分管理テーブル１５２ａから取得されたポート番号のポート（すなわち出力ポート）にスイッチ部１２３により転送され、転送されたポートから出力される。
【００６８】
このように出力ポートが輻輳状態でない場合は、同一フローの後続パケットは、先頭パケットが到着したときに登録された振分管理テーブル１５２ａの情報に従って転送されるので、同一フロー内でのパケットの順序の逆転が発生することはない。
【００６９】
一方、出力ポートが輻輳状態であれば、振分先判定部１２２ｃは、ＬＡＧの他のポートの中で、現在の出力ポートよりも負荷が低く、かつ、現在の出力ポートよりもキュー長が大きいポートがあるかを検索し、この条件に適合するポートがあった場合には、そのフローの振分管理テーブル１５２ａの出力ポートを示す情報を条件に適合するポートの情報に変更すると共に入力されたフローのパケットを変更したポートに転送する。条件に適合するポートが存在しない場合は、輻輳状態でないときと同じく、出力ポートにパケットを転送する。
【００７０】
これにより、出力ポートが輻輳状態であると判断されたときは、ＬＡＧが有するポートの中で、現在の出力ポートよりもが負荷低く、かつ、現在の出力ポートの出力キュー部のキュー長よりもキュー長の大きいポートがあるか否かが判断される。
【００７１】
これらの条件をすべて満たすポートがなければ、後続パケットは、輻輳状態でない時と同様に振分管理テーブル１５２ａに従ってパケットを転送する。これらの条件をすべて満たすポートがあれば、振分先判定部１２２ｃは、そのフローのパケットが出力されるポートを、条件を満たすポート（複数ある場合には、例えば、それらのうち最も負荷が低いポート）に変更する。また、この変更に基づいて、振分先判定部１２２ｃは、そのフローのフロー識別子と変更後の出力ポートのポート番号とを関連付けて、振分管理テーブル１５２ａのそのフローの情報を更新する。
【００７２】
振分管理テーブル１５２ａの情報が更新された後にスイッチ１００に入力されたそのフローの後続パケットは、上記で変更された物理ポートへ向けて転送され、スイッチ部１２３により変更されたポートから出力される。
【００７３】
このように、パケットが入力されるときに出力される物理ポートが輻輳状態であった場合には、出力されるポートをＬＡＧが有するポートのうちより負荷の低い物理ポートに変更することによってトラフィックの集中を回避することができると共に、キュー長の大きい物理ポートを新たな出力ポートとすることで、後続パケットが既に振り分けられてしまった先行するパケットよりも遅くスイッチ１００から出力されるため、同一フロー内でのパケットの順序の逆転を回避することが可能となる。
【００７４】
これにより、パケットが入力された時に、出力ポートが輻輳状態であった場合に他のポートにパケットを振り分けたとしても、変更後のポートのキュー長が現在のポートよりも大きいためパケットの順序の逆転が発生しないので、通信品質を維持したまま輻輳が発生したポートのトラフィックを他のポートへ移動することができる。その結果、ＬＡＧの帯域を効率的に利用することが可能となる。
【００７５】
図６は、出力先テーブルのデータ構造例を示す図である。図６に示す出力先テーブル１５１ａは、ＭＡＣアドレスの学習によって自律的に設定され、またはスイッチ１００の管理者等によって設定され、テーブル記憶メモリ１０４に記憶されている。テーブル記憶メモリ１０４は、出力先情報記憶部１５１として機能する。出力先テーブル１５１ａは、スイッチ１００に入力されるデータのフローが出力されるリンクを示すテーブルである。出力先テーブル１５１ａには、データのフローを特定する情報を示す“エントリ”フィールド、そのフローがＬＡＧから出力されるか否かを示す“ＬＡＧ”フィールド、およびそのフローが出力され得るリンクを示す“ポート”フィールドが設けられている。各フィールドの横方向に並べられた情報同士が互いに関連付けられている。
【００７６】
エントリフィールドには、各フローを特定する情報として、送信先の通信装置（例えば、図３において前述したスイッチ１００ａ）のＭＡＣアドレスが設定される。なお、本実施の形態では、エントリフィールドに送信先のＭＡＣアドレスが設定されるが、これに限らず、例えばスイッチ１００がＬ３スイッチである場合等には、ＩＰアドレスが、ＩＰルーティングプロトコル学習によって自律的に設定されてもよく、またはスイッチ１００の管理者等によって設定されてもよい。
【００７７】
ＬＡＧフィールドには、各フローが論理リンクから出力されるか否かを示す情報が設定される。具体的には、そのフローの出力先がＬＡＧである場合、“１”が設定される。一方、ＬＡＧでない場合、“０”が設定される。
【００７８】
ポートフィールドには、各フローが出力され得るリンクを示す情報が設定される。そのフローが出力されるリンクがＬＡＧである場合、そのフローが出力されるＬＡＧが有するポートを示すポート番号が設定される。一方、そのフローが出力されるリンクがＬＡＧでない場合、そのフローが出力されるポートを示すポート番号が設定される。
【００７９】
すなわち、出力先テーブル１５１ａが有するＬＡＧフィールドに、入力されたフローがＬＡＧから出力されることを示す“１”が設定されている場合、出力ポートフィールドに“１”が設定されている出力ポートは、そのフローが出力されるＬＡＧが有するポートであることを示す。図６の例では、スイッチ１００に入力されたフローのパケットはＬＡＧによって出力されると共に、ＬＡＧが有するポート＃０，＃１，＃２，・・・，＃１５のいずれかから出力されることを示している。
【００８０】
図７は、第１の実施の形態の振分管理テーブルのデータ構造例を示す図である。図７に示す振分管理テーブル１５２ａは、スイッチ１００の管理者等によって設定され、テーブル記憶メモリ１０４に記憶されている。テーブル記憶メモリ１０４は、振分管理情報記憶部１５２として機能する。振分管理テーブル１５２ａは、ＬＡＧにおける各フローが出力されるポートを示すテーブルである。振分管理テーブル１５２ａには、ＬＡＧにおいてデータのフローを出力する出力ポートを識別する情報を示す“フロー識別子”フィールド、ＬＡＧにおいてそのフローが出力されるポートの番号を示す“出力ポート番号”フィールド、およびそのフローのパケットがスイッチ１００に最後に入力された時刻を示す“エントリ更新時刻”フィールドが設けられている。各フィールドの横方向に並べられた情報同士が互いに関連付けられている。
【００８１】
フロー識別子フィールドには、スイッチ１００に入力されるフローと、ＬＡＧにおいてそのフローが出力されるポートとを対応付ける情報であるフロー識別子が設定される。具体的には、フロー識別子には、例えば、フローの送信先のアドレス（図６のエントリフィールド参照）に基づいて算出されたハッシュ値が設定される。
【００８２】
出力ポート番号フィールドには、ＬＡＧにおいてフローのパケットが出力されるポートを特定する情報が設定される。具体的には、出力ポート番号フィールドには、例えば、パケットが送信される出力ポートのポート番号が設定される。
【００８３】
エントリ更新時刻フィールドには、ＬＡＧによって出力されるフローの最新のパケットがスイッチ１００に入力された時刻を示す情報であるエントリ更新時刻が設定される。
図８は、第１の実施の形態の出力ポートテーブルのデータ構造例を示す図である。図８に示す出力ポートテーブル１５３ａは、スイッチ１００の管理者等によって設定され、テーブル記憶メモリ１０４に記憶されている。テーブル記憶メモリ１０４は、出力ポート情報記憶部１５３として機能する。出力ポートテーブル１５３ａは、出力ポート監視部１２４によるスイッチ１００の各ＬＡＧが有するポートの監視結果を示すテーブルである。出力ポートテーブル１５３ａには、ＬＡＧが有する各ポートを特定する情報を示す“ポート”フィールド、そのポートの負荷を示す“負荷”フィールド、そのポートのキュー長を示す“キュー長”フィールド、およびそのポートの輻輳や障害の発生の有無等の状態を示す“状態”フィールドが設けられている。各フィールドの横方向に並べられた情報同士が互いに関連付けられている。
【００８４】
ポートフィールドには、スイッチ１００の各ＬＡＧが有する各ポートを特定する情報であるポート番号が設定される。
負荷フィールドには、各ポートの負荷を示す情報が設定される。具体的には、例えば、そのポートの出力キュー部に一定時間内に入力されたパケットの総データ量が設定される。
【００８５】
キュー長フィールドには、各ポートに設けられたバッファの蓄積量を示す情報が設定される。具体的には、例えば、各ポートに設けられた出力キュー部（図５において前述）のキュー長が設定される。
【００８６】
状態フィールドには、各ポートが輻輳状態であることを示す“輻輳”、正常であることを示す“正常”、障害が発生していることを示す“障害発生”等の状態を示す情報が設定される。
【００８７】
次に、本実施の形態で行われるフローのデータの出力ポートの変更について説明する。
図９は、第１の実施の形態において、入力されたフローの途中でパケットの出力ポートが変更されるときのスイッチの状態を示す図である。
【００８８】
図９に示すように、スイッチ１００のポート＃３からフロー識別子が“Ａ”のフロー（以下、フローＡ）の入力パケットのうちの１番目のパケット（図９において四角の中に“１”が記載されたパケット。以下同様）が入力されると、図５において前述したように、振分部１２２によって振分管理テーブル１５２ａ（図７において前述）で入力されたフローＡのエントリがあるかチェックされる。チェックの結果入力されたパケットがフローＡの先頭パケットであると判断されると、出力ポート監視部１２４の監視結果に基づいて出力先であるＬＡＧが有するポートの中から最も負荷の低いポートを出力ポートとしてそのパケットが出力される。
【００８９】
ここでは、１番目のパケットがスイッチ１００に入力されたときの、フローＡが出力されるＬＡＧの出力ポートのうち、最も負荷の低いポートが出力ポートであるポート＃０であるものとする。この場合、この出力ポート番号＃０がフロー識別子Ａに関連付けられて振分管理テーブル１５２ａ上に記憶される。
【００９０】
振分管理テーブル１５２ａに出力されるポートが記憶された後、スイッチ１００に入力された先頭パケットは、上記で選択されたポート＃０に転送され、スイッチ部１２３を経由してスイッチ１００のポート＃０から出力される。
【００９１】
２番目のパケットがスイッチ１００に入力されたときも、振分管理テーブル１５２ａのエントリのチェックまでは、先頭パケットの入力時と同じ処理が行われる。２番目のパケットのエントリのチェックでは、既に振分管理テーブル１５２ａには先頭パケットによるフローＡのエントリがあるため、振分先判定部１２２ｃは、入力された２番目のパケットがフローＡの後続パケットであると認識する。
【００９２】
入力されたパケットがフローの後続パケットである２番目のパケットと認識された後は、振分部１２２は、先頭パケットの入力時とは異なり、まず振分管理テーブル１５２ａに保存されている出力ポート番号を取得し、出力ポートの輻輳状態を判断する。輻輳状態は、出力ポート監視部１２４（図５において前述）によって監視されている負荷状態が一定値以上であるときには輻輳状態であると判断される一方、一定値未満のときには輻輳状態でないと判断される。
【００９３】
ここで、出力先ポートが輻輳状態でなかったときは、振分管理テーブル１５２ａから取得したポート番号＃０を出力ポートに選択して、パケットをポート＃０に転送する。これにより、この場合２番目のパケットは出力ポートであるポート＃０から出力される。このように出力先のポートが輻輳状態でなかった場合、同一フローの後続パケットは、先頭パケットが入力されたときに設定された振分管理テーブル１５２ａの情報に従って同一のポートに出力されるので、同一フロー内でのパケットの順序の逆転が発生することはない。次に、３番目のパケットが入力されたときもフローＡが出力される出力ポートであるポート＃０が輻輳状態でなかった場合、２番目のパケットと同様にポート＃０へ転送される。
【００９４】
ここで、４番目のパケットが到着したときに、ポート＃０の負荷が増大して、出力ポートが輻輳状態になっていたものとする。この場合、振分部１２２は、図５において前述したように、ＬＡＧが有するポートであるポート＃０，＃１，＃２，・・・の中で、現在の出力ポートであるポート＃０の負荷（９０％）よりも負荷が低く、かつ、出力ポート監視部１２４による各バッファのキュー長の監視結果から現在の出力ポートであるポート＃０のキュー長（１００）よりもキュー長の大きいポートがあるか否かを判定し、上記条件をすべて満たすポートがあれば、出力ポートをそのポートへ変更する。条件をすべて満たすポートがなければ、非輻輳時と同様に、振分管理テーブル１５２ａの値に従ってパケットが出力される。
【００９５】
この図９の例では、ポート＃０の現在の負荷は、５０％から９０％に増大しており、バッファ１４１ａ１のキュー長は、１００Ｂｙｔｅである。ポート＃１の負荷は、６０％であり、バッファ１４１ｂ１のキュー長は、７０Ｂｙｔｅである。ポート２の負荷は、７０％であり、バッファ１４１ｃ１の負荷は、１５０Ｂｙｔｅである。
【００９６】
従って、ポート＃２が上記の条件をすべて満たすため、振分部１２２は、フローＡの新しい出力ポートをポート＃２に変更し、フロー識別子Ａとこのポート＃２とを関連付けて、振分管理テーブル１５２ａの情報を更新する。
【００９７】
振分管理テーブル１５２ａの情報が更新された後に入力されたフローＡの後続パケットである５番目のパケットおよび６番目のパケットは、各出力ポートの状態に変化がなければ、上記で変更された出力ポートであるポート＃２に転送され、スイッチ部１２３を経由してポート＃２から出力される。
【００９８】
このように、パケットが入力されたときに出力ポートに設定されているが輻輳状態であった場合には、出力ポートをＬＡＧが有するポートのうち、より負荷の低いポートに変更することによってトラフィックの集中を回避することができる。
【００９９】
また、キュー長の大きいポートを新たな出力ポートとすることで、出力ポートが変更された後の後続パケット（例えば、４〜６番目のパケット）が既に振り分けられてしまった先行するパケット（例えば1〜３番目のパケット）よりも遅くスイッチ１００から出力することができ、同一フロー内でのパケットの順序の逆転を回避することが可能となる。
【０１００】
次に、本実施の形態で実行される処理について説明する。
図１０および図１１は、第１の実施の形態の振分判定処理の手順を示すフローチャートである。図１０および図１１に示す振分判定処理は、ＬＡＧが有する出力ポートのうちから出力ポートを選択すると共に、選択した出力ポートによって入力されたフローのパケットを出力する処理である。振分判定処理は、出力先決定部１２２ａ（図５において前述）が出力先情報記憶部１５１（図５において前述）に記憶されている出力先テーブル１５１ａ（図６において前述）を参照して、入力部１２１によりスイッチ１００に入力されたパケットがＬＡＧで出力されるパケットであると判定した場合に実行が開始される。
【０１０１】
［ステップＳ１１］フロー識別部１２２ｂ（図５において前述）は、パケットのヘッダ情報にハッシュ演算を実行して、実行結果をフロー識別子に設定することによりフロー識別を行う。
【０１０２】
［ステップＳ１２］振分先判定部１２２ｃは、振分管理情報記憶部１５２（図５において前述）の振分管理テーブル１５２ａ（図７において前述）から振分管理情報を取得する。
【０１０３】
［ステップＳ１３］振分先判定部１２２ｃは、ステップＳ１２で取得した振分管理情報を参照して、ステップＳ１１で算出されたフロー識別子と比較し、入力されたパケットのフローのエントリの有無について判定する。エントリがあれば、ステップＳ２１（図１１）に処理が進められる。一方、エントリがなければ、処理がステップＳ１４に進められる。
【０１０４】
［ステップＳ１４］振分先判定部１２２ｃは、出力ポート監視部１２４の監視結果に基づいて、入力されたパケットのフローが出力されるＬＡＧが有するポートのうち、最も負荷が小さいポートを出力ポートに設定する。
【０１０５】
［ステップＳ１５］振分先判定部１２２ｃは、入力されたパケットをステップＳ１４で出力ポートに設定されたポートに対して転送させる。そして入力されたパケットは、転送されたポートから他のスイッチ等の装置に対して出力される。
【０１０６】
［ステップＳ１６］振分先判定部１２２ｃは、ステップＳ１４で出力ポートに設定されたポートを、振分管理情報記憶部１５２の振分管理テーブル１５２ａに記憶されている振分管理情報に記憶させる。その後、処理は終了する。
【０１０７】
［ステップＳ２１］振分先判定部１２２ｃは、出力ポート監視部１２４の監視結果に基づいて、入力されたパケットのフローに現在設定されている出力ポートが輻輳状態であるか否かについて判定する。出力ポートが輻輳状態であれば、処理がステップＳ２２に進められる。一方、出力ポートが輻輳状態でなければ、処理がステップＳ２５に進められる。
【０１０８】
［ステップＳ２２］振分先判定部１２２ｃは、出力ポート監視部１２４の監視結果に基づいて、入力されたパケットのフローが出力されるＬＡＧが有するポートのうち負荷が現在設定されている出力ポートよりも小さいポートがあるか否かについて判定する。出力ポートよりも負荷が小さいポートがあれば、処理がステップＳ２３に進められる。一方、出力ポートよりも負荷が小さいポートがなければ、処理がステップＳ２５に進められる。
【０１０９】
［ステップＳ２３］振分先判定部１２２ｃは、出力ポート監視部１２４の監視結果に基づいて、ステップＳ２２の条件を満たすポートのうち、キュー長が現在設定されている出力ポートよりも大きいポートがあるか否かについて判定する。出力ポートよりもキュー長が大きいポートがあれば、処理がステップＳ２４に進められる。一方、出力ポートよりもキュー長が大きいポートがなければ、処理がステップＳ２５に進められる。
【０１１０】
［ステップＳ２４］振分先判定部１２２ｃは、ステップＳ２３の条件を満たすポートのうち、負荷が最も小さいポートを、入力されたパケットのフローの新たな出力ポートに設定する。その後、処理がステップＳ１５（図１０）に進められる。
【０１１１】
［ステップＳ２５］振分先判定部１２２ｃは、振分管理情報記憶部１５２の振分管理テーブル１５２ａから振分管理情報を取得し、取得した振分管理情報に基づいて、入力されたパケットを出力ポートに設定されたポートに対して転送させる。そして入力されたパケットは、転送されたポートから他のスイッチ等の装置に対して出力される。その後、処理は終了する。
【０１１２】
なお、本実施の形態では、入力されたパケットに基づいて、そのパケットが属するフローの出力ポートの設定が振分部１２２により変更されると、入力されたそのパケット（およびその後に後続するパケット）が、変更された後の出力ポートから出力される。これに限らず、入力されたパケットは変更前の出力ポートから出力され、入力されたパケットと同一のフローであって次に後続するパケット以降は変更後の出力ポートから出力されてもよい。
【０１１３】
以上に示すように、第１の実施の形態によれば、出力側のポートに対するデータの振り分けを効果的に行うことで、データの中継効率を改善することが可能になる。
（第１の実施の形態の変形例）
次に、第１の実施の形態の変形例について説明する。
【０１１４】
本変形例では、前述した第１の実施の形態と比較して、スイッチ１００のポート毎に出力速度が異なる場合において、本実施の形態の出力ポート監視部が、キュー長をポートの出力速度（送信レート）に応じて換算する点が異なる。よってここでは、前述した第１の実施の形態と異なる構成のみ説明し、第１の実施の形態と同一の構成には同じ符号を付して、その説明を省略する。
【０１１５】
第１の実施の形態では、スイッチ１００の各ポートの送信レートはすべて同一であることを前提にしていた。これに対して本変形例では、各ポートの出力速度が異なる場合においても適用可能である。以下に、本変形例のスイッチの動作について説明する。
【０１１６】
図１２は、第１の実施の形態の変形例において、入力されたフローの途中でパケットの出力ポートが変更されるときのスイッチの状態を示す図である。図１２に示すように、スイッチ１００のポート＃０，＃１，＃２によってＬＡＧが組まれているものとする。ポート＃０の送信レートは、５００Ｍｂｐｓ（bits per second）であるものとする。同様にポート＃１の送信レートは、１０００Ｍｂｐｓであるものとし、ポート＃２の送信レートは、２５０Ｍｂｐｓであるものとする。
【０１１７】
本変形例の出力ポート監視部１２４ａは、第１の実施の形態と異なり、バッファ１４１ａ１，１４１ｂ１，１４１ｃ１における蓄積量とデータを出力する速度とに応じて負荷を評価し、評価結果を示す負荷情報を出力する。このとき、負荷情報は、バッファ１４１ａ１，１４１ｂ１，１４１ｃ１における蓄積量をポートがデータを出力する速度で除算した結果によってポートの負荷を示す。
【０１１８】
ここで、振分部１２２により、あるフローのパケットの出力ポートがポート＃０に設定され、スイッチ部１２３によりそのフローのパケットがポート＃０に転送されているものとする。
【０１１９】
また、そのフローの後続パケットが到着したときに、出力ポート監視部１２４ａによる監視の結果、出力ポートであるポート＃０が輻輳状態であるものとし、ポート＃１，＃２の負荷がポート＃０よりも低いものとする。また、そのときポート＃０のバッファ１４１ａ１のキュー長は、１００ＭＢｙｔｅであるものとする。同様に、ポート＃１のバッファ１４１ｂ１のキュー長は、１５０ＭＢｙｔｅであるものとし、ポート＃２のバッファ１４１ｃ１のキュー長は、６０ＭＢｙｔｅであるものとする。
【０１２０】
このとき、上記第１の実施の形態と同様に、そのフローの出力ポート（変更前はポート＃０）を他のポートに変更する。このとき、本変形例では、変更先のポートは以下のように選択される。
【０１２１】
本変形例では、図１２に示すように、各ポートの送信レートが異なる場合、出力ポート監視部１２４ａは、各ポートのキュー長を送信レートで除算して、現在、ポートに滞留しているデータが全て出力されるまでの時間を求める。例えばポート＃０は、キュー長が１００ＭＢで、送信レートが５００Ｍｂｐｓであるため、１００ＭＢ×８（bit換算）÷５００Ｍｂｐｓ＝１．６秒となる。また、同様の計算により、ポート＃１が１．２秒、ポート＃２が１．９２秒となる。
【０１２２】
そして、振分部１２２は、そのフローの出力ポートを変更するか否かについて判定するときに、上記の算出によって得られた値を、第１の実施の形態のキュー長に替えて判定を行う。その結果、最終的には現在の送出先のポート＃０（演算結果は１．６）よりもキュー長が大きい、ポート＃２（演算結果は１．９２）が移動先のポートとして選択される。
【０１２３】
なお、本変形例では、バッファに蓄積されているキュー長を送信レートで除算することにより時間に換算して異なる送信レートのポート同士を比較するが、これに限らず、例えば、送信レートをキュー長で除算する、または、これらと比例関係にある値を用いる等、他の方法で換算して比較してもよい。
【０１２４】
以上に示すように、第１の実施の形態の変形例によれば、出力に要する時間に基づいて同一の評価基準に換算して比較することにより、各ポートの送信速度が異なる場合にも、出力側のポートに対するデータの振り分けを効果的に行うことができ、データの中継効率を改善することが可能になる。
【０１２５】
［第２の実施の形態］
次に、第２の実施の形態について説明する。上記の第１の実施の形態との相違点を中心に説明し、同様の事項については同一の符号を用いると共に説明を省略する。
【０１２６】
第２の実施の形態は、第１の実施の形態に加えて、ポートの障害の発生およびバッファの蓄積量を監視して出力ポートの変更の判断に用いる点、前回の出力ポートの変更から一定時間を経過するまでは出力ポートの変更を行わない点、およびフローの振分管理情報を消去する点で、第１の実施の形態と異なる。
【０１２７】
図１３は、第２の実施の形態のスイッチの機能を示すブロック図である。図１３に示すように、本実施の形態のスイッチ２００は、複数のポートが集約された論理リンクであるＬＡＧにより、データが分割されたパケットを転送する。スイッチ２００は、入力部２２１、振分部２２２、スイッチ部２２３、出力ポート監視部２２４、出力部２４０、出力先情報記憶部２５１、振分管理情報記憶部２５２、出力ポート情報記憶部２５３を有する。また、振分部２２２は、出力先決定部２２２ａ、フロー識別部２２２ｂ、振分先判定部２２２ｃを有する。また、出力部２４０は、出力ポート毎に対応付けられた出力キュー部２４１ａ，２４１ｂ，２４１ｃ，・・・を有する。
【０１２８】
入力部２２１は、他のスイッチ、端末装置、情報処理装置等の通信機能を有する装置とＬＡＧおよびその他の方式の通信路によって接続可能である。入力部２２１は、入力側のポート（例えば、ポート＃３）を有し、他の装置から送信された、他のスイッチおよび端末装置等の通信装置に転送されるフローの分割されたデータ等のパケットが入力される。
【０１２９】
振分部２２２は、出力先情報記憶部２５１に記憶されている出力先情報および振分管理情報記憶部２５２に記憶されている振分管理情報を参照して、入力部２２１によって入力されたフローのパケットが出力されるポートを決定する。
【０１３０】
振分部２２２は、入力部２２１によって入力されたフローが出力されるポートを、ＬＡＧグループを構成するポート＃０，＃１，＃２，・・・のうちのいずれかに決定する。また、振分部２２２は、出力ポート監視部２２４から通知された監視結果に基づいて、各ポートの負荷の状況について異常が検出された場合、入力部２２１によって入力されたフローが出力されるポートである出力ポートを、出力ポート以外のポートであってＬＡＧグループを構成する各ポートの出力キュー部のそれぞれのバッファに蓄積されているデータの量と比較して、ポートに対応して設けられたバッファに蓄積されているデータの量が多いポートに変更する。
【０１３１】
ここで、振分部２２２は、出力ポート監視部２２４による監視結果に基づいて、入力部によって入力されたフローが出力されるポートを、障害の発生が検出されているポート以外のポートに変更する。
【０１３２】
また、振分部２２２は、振分管理情報記憶部２５２に記憶されている振分管理情報に基づいて、フローが有するデータを出力するポートを決定する。そして、振分部２２２は、振分管理情報記憶部２５２に記憶されている振分管理情報に基づいて、フローが有するデータが入力部２２１に対して最後に入力された時刻を取得し、取得した時刻から一定時間経過している場合には、フローの振分管理情報を削除する。
【０１３３】
また、振分部２２２は、入力部２２１によって入力されたフローが出力されるポートを、フローが出力されている出力ポートよりも出力キュー部２４１ａ，２４１ｂ，２４１ｃ，・・・が有するバッファに蓄積されているデータの量が多く、かつ、出力キュー部２４１ａ，２４１ｂ，２４１ｃ，・・・が有するバッファに所定量以上の空きがあるポートに変更する。
【０１３４】
また、振分部２２２は、入力部２２１によって入力されたフローが出力されるポートを変更した回数が所定の時間内において所定の回数を超えている場合には、ポートを変更しない。
【０１３５】
出力先決定部２２２ａは、入力部２２１に入力されたフローのパケットのヘッダ情報と、ＭＡＣアドレスの学習結果から生成された出力先情報記憶部２５１に記憶されている出力先情報に基づいて、パケットが出力され得るポートを決定するものである。なお、出力先決定部２２２ａは、ＭＡＣアドレスの学習に替えて、ＩＰアドレスおよびルーティングプロトコルに基づいてパケットが出力され得るポートを決定してもよい。
【０１３６】
この出力先決定部２２２ａは、入力されたフローのパケットの宛先ＭＡＣアドレスに基づいて、各フローのパケットの出力ポートを特定する。すなわち、出力先決定部２２２ａは、入力されたフローのパケットに含まれるＭＡＣアドレスを抽出する。このとき、入力されたフローのパケットのＭＡＣアドレスが、出力先情報によって、当該フローのパケットの出力と対応づけられている。これを用いて、スイッチ２００は、入力されたフローのパケットのＭＡＣアドレスから、出力先情報で対応付けられた出力ポートを取得する。
【０１３７】
また、入力されたフローの出力先がＬＡＧの場合は、その出力先情報において、ＬＡＧで送信されるフローのパケットのＭＡＣアドレスに対してさらにＬＡＧで送信される旨を示す情報を設定することで、そのフローのパケットの出力先としてＬＡＧで出力されることおよび出力されるＬＡＧグループを指定することができる。これに従い、出力先決定部２２２ａは、そのフローのパケットの宛先を、指定されたＬＡＧグループに決定する。
【０１３８】
フロー識別部２２２ｂは、ＬＡＧの運用時に入力されたパケットのヘッダ情報からフロー識別子を生成し、フローを特定する。
また、フロー識別部２２２ｂは、入力されたフローのパケットのヘッダ情報に基づいてハッシュ演算を行うことにより、フロー識別子を生成する。このとき、フロー識別部２２２ｂは、パケットからヘッダ情報を抽出し、抽出されたヘッダ情報を用いてハッシュ演算を行う。
【０１３９】
ここで、ヘッダ情報とは、例えばパケットの先頭部分等の、パケットの一部分を構成する情報であり、例えば、パケットに含まれている各種のアドレスを用いることができる。ヘッダ情報として用いるアドレスとは、パケットの送信元の端末装置（または送信元の端末装置が属する集合）や宛先の端末装置（または宛先の端末装置が属する集合）を特定するための情報である。ヘッダ情報は、例えば、送信元／宛先のＭＡＣアドレス、送信元／宛先のＩＰアドレス等である。
【０１４０】
振分先判定部２２２ｃは、振分管理情報を参照して、フロー識別部２２２ｂによって計算されたハッシュ値に基づいてパケットが出力されるポートを決定する。
また、振分先判定部２２２ｃは、ＬＡＧの運用時にＬＡＧグループ内の複数のポートの帯域を効率的に利用するために、後述する出力ポート監視部２２４によるポートの監視結果に基づいて送出先のＬＡＧが有する出力ポートを設定する。
【０１４１】
スイッチ部２２３は、振分部２２２の判断に基づいてパケットを出力ポートに転送する。これにより、スイッチ２００に入力されたフローのパケットが、振分部２２２による設定に基づいて出力部２４０が有する出力ポートから出力され、フローのデータが送信先に向かって中継される。
【０１４２】
出力ポート監視部２２４は、スイッチ２００の出力部２４０が有する各ポートの輻輳状態、負荷の状態、障害の発生の有無等のトラフィック状態を監視するものである。出力ポート監視部２２４は、各出力キュー部２４１ａ，２４１ｂ，２４１ｃ，・・・のそれぞれのバッファにおけるデータの蓄積状況を監視する。出力ポート監視部２２４は、各バッファの監視結果を、出力ポート情報記憶部２５３に出力ポート情報として記憶させると共に、振分部２２２に通知する。
【０１４３】
出力ポート監視部２２４は、ＬＡＧが有する各出力ポートの最新のキュー長（その出力ポートで出力を待っている状態のパケットのデータサイズの総量）を監視すると共に、各ポートの負荷を監視する。本実施の形態では、ポートの負荷は、一定時間内にそれぞれの出力キュー部に入力されたパケットの総データ量で求めるが、これに限らず、長期的な負荷を監視するために過去の負荷情報に重み付けを行って、加重平均で負荷を算出してもよい。
【０１４４】
また、出力ポート監視部２２４は、各ポートを監視することにより出力部２４０が有する各ポートの障害の発生を検出すると共に、障害の発生を検出した場合には、障害の発生に関して必要な事項を出力ポート情報記憶部２５３に出力ポート情報として記憶させ、振分部２２２に通知する。
【０１４５】
出力ポート監視部２２４は、出力部２４０が有する各ポートから出力されるデータの負荷の状況を監視する。
出力部２４０は、データを出力する複数のポート＃０，＃１，＃２，・・・と、ポート＃０，＃１，＃２，・・・のそれぞれに対応して設けられており、それぞれのポート＃０，＃１，＃２，・・・から出力されるデータを蓄積するバッファを有する出力キュー部２４１ａ，２４１ｂ，２４１ｃ，・・・を有する。
【０１４６】
出力キュー部２４１ａ，２４１ｂ，２４１ｃ，・・・は、出力部２４０が有する各ポートに対応して設けられており、データ送信の品質制御およびスイッチ２００の入力部２２１が有する入力側の各ポート（例えば、ポート＃３）から同時に入力されたパケットの待ち合わせ等を行う。出力キュー部２４１ａ，２４１ｂ，２４１ｃ，・・・が有するそれぞれのバッファは、先入れ先出し方式によってデータが読み出される。出力キュー部２４１ａ，２４１ｂ，２４１ｃ，・・・は、蓄積部として機能する。
【０１４７】
出力先情報記憶部２５１は、出力先テーブル１５１ａ（図６において前述）として出力先情報を記憶している。出力先情報は、ＬＡＧ等によりフローのパケットが出力され得るポートを示す情報である。
【０１４８】
振分管理情報記憶部２５２は、振分管理テーブル１５２ａ（図７において前述）として振分管理情報を記憶している。振分管理情報は、各フローのパケットについて振分先判定部２２２ｃで決定された出力ポートを示す情報である。
【０１４９】
振分管理情報記憶部２５２は、フローと、フローが有するデータが出力されるポートと、フローが有するデータが入力部に対して最後に入力された時刻と、を対応付けて示す振分管理情報を記憶する。
【０１５０】
出力ポート情報記憶部２５３は、出力ポートテーブル１５３ａ（図８において前述）として出力ポート情報を記憶している。出力ポート情報は、各ポートの出力側のバッファのキュー長、出力側の通信路の輻輳状態および障害の発生の有無等を示す情報である。
【０１５１】
次に、本実施の形態で実行される処理について説明する。
図１４から図１６は、第２の実施の形態の振分判定処理の手順を示すフローチャートである。図１４から図１６に示す振分判定処理は、ＬＡＧが有する出力ポートのうちから出力ポートを選択すると共に、選択した出力ポートによって入力されたフローのパケットを出力する処理である。振分判定処理は、出力先決定部２２２ａ（図１３において前述）が出力先情報記憶部２５１（図１３において前述）に記憶されている出力先テーブル１５１ａ（図６において前述）を参照して、入力部２２１によりスイッチ２００に入力されたパケットがＬＡＧで出力されるパケットであると判定した場合に実行が開始される。
【０１５２】
［ステップＳ３１］フロー識別部２２２ｂ（図１３において前述）は、パケットのヘッダ情報にハッシュ演算を実行して、実行結果をフロー識別子に設定することによりフロー識別を行う。
【０１５３】
［ステップＳ３２］振分先判定部２２２ｃは、振分管理情報記憶部２５２（図１３において前述）の振分管理テーブル１５２ａ（図７において前述）から振分管理情報を取得する。
【０１５４】
［ステップＳ３３］振分先判定部２２２ｃは、ステップＳ３２で取得した振分管理情報を参照して、ステップＳ３１で算出されたフロー識別子と比較し、入力されたパケットのフローのエントリの有無について判定する。エントリがあれば、ステップＳ４２（図１５）に処理が進められる。一方、エントリがなければ、処理がステップＳ３４に進められる。
【０１５５】
［ステップＳ３４］振分先判定部２２２ｃは、出力ポート監視部２２４の監視結果に基づいて、入力されたパケットのフローに現在設定されている出力ポートが障害発生状態であるか否かについて判定する。出力ポートが障害発生状態であれば、処理がステップＳ４２に進められる。一方、出力ポートが障害発生状態でなければ、処理がステップＳ５１（図１６）に進められる。
【０１５６】
このとき振分先判定部２２２ｃは、出力ポート監視部２２４の監視結果に基づいて、入力されたパケットのフローの出力ポートに設定されているポートについて障害が発生している状態であるかを確認する。障害が発生している状態であった場合には、振分先判定部２２２ｃは、例えば、出力ポートの負荷を最大値とみなして処理を進める。また、ポートの障害の発生とは、ポート自身の障害の発生およびポートに接続された通信路の障害の発生をいうものとする。
【０１５７】
［ステップＳ４１］振分先判定部２２２ｃは、ステップＳ５６（図１６）における出力ポートの設定の変更に伴い、出力ポートが最後に変更された時刻を示す出力ポート変更時刻を更新する。
【０１５８】
この出力ポート変更時刻は、スイッチ２００が有するＣＰＵ１０１（図４において前述）内のタイマによって管理される。また、出力ポート変更時刻は、スイッチ１００に入力されるすべてのフローにおける出力ポートの変更のうち、最後の変更が行われた時刻を示す。すなわち、スイッチ２００に入力されるすべてのフローについて同一の出力ポート変更時刻が設定され、いずれか１つのフローについて出力ポートの変更があれば、出力ポート変更時刻が更新される。また、出力ポート変更時刻は、あくまでも出力ポートの変更が対象であり、フローにエントリがない場合の出力ポートの設定（ステップＳ４２）は対象ではない。出力ポートの過剰な変更の発生を防止することが目的だからである。
【０１５９】
［ステップＳ４２］振分先判定部２２２ｃは、出力ポート監視部２２４の監視結果に基づいて、入力されたパケットのフローが出力されるＬＡＧが有するポートのうち、最も負荷が小さいポートを出力ポートに設定する。
【０１６０】
［ステップＳ４３］振分先判定部２２２ｃは、入力されたパケットをステップＳ４２で出力ポートに設定されたポートに対して転送させる。そして入力されたパケットは、転送されたポートから他のスイッチ等の装置に対して出力される。
【０１６１】
［ステップＳ４４］振分先判定部２２２ｃは、ステップＳ４２で出力ポートに設定されたポートを、振分管理情報記憶部２５２の振分管理テーブル１５２ａに記憶されている振分管理情報に記憶させる。
【０１６２】
［ステップＳ４５］振分先判定部２２２ｃは、振分管理情報記憶部２５２の振分管理テーブル１５２ａに記憶されている入力されたパケットのフローの振分管理情報のエントリ更新時刻を更新する。その後、処理は終了する。
【０１６３】
［ステップＳ５１］振分先判定部２２２ｃは、出力ポート監視部２２４の監視結果に基づいて、入力されたパケットのフローに現在設定されている出力ポートが輻輳状態であるか否かについて判定する。出力ポートが輻輳状態であれば、処理がステップＳ５２に進められる。一方、出力ポートが輻輳状態でなければ、処理がステップＳ５７に進められる。
【０１６４】
［ステップＳ５２］振分先判定部２２２ｃは、図１５のステップＳ４１で前述した出力ポート変更時刻をチェックして、前回発生した出力ポートの変更から一定時間が経過しているか否かについて判定する。一定時間が経過していれば、処理がステップＳ５３に進められる。一方、一定時間が経過していなければ、処理がステップＳ５７に進められる。
【０１６５】
［ステップＳ５３］振分先判定部２２２ｃは、出力ポート監視部２２４の監視結果に基づいて、入力されたパケットのフローが出力されるＬＡＧが有するポートのうち負荷が現在設定されている出力ポートよりも小さいポートがあるか否かについて判定する。出力ポートよりも負荷が小さいポートがあれば、処理がステップＳ５４に進められる。一方、出力ポートよりも負荷が小さいポートがなければ、処理がステップＳ５７に進められる。
【０１６６】
［ステップＳ５４］振分先判定部２２２ｃは、出力ポート監視部２２４の監視結果に基づいて、ステップＳ５２の条件を満たすポートのうち、キュー長が現在設定されている出力ポートよりも大きいポートがあるか否かについて判定する。出力ポートよりもキュー長が大きいポートがあれば、処理がステップＳ５５に進められる。一方、出力ポートよりもキュー長が大きいポートがなければ、処理がステップＳ５７に進められる。
【０１６７】
［ステップＳ５５］振分先判定部２２２ｃは、出力ポート監視部２２４の監視結果に基づいて、ステップＳ５４の条件を満たすポートのうち、バッファに予め定められた一定量以上の余裕を有するポートがあるか否かについて判定する。一定量以上の余裕を有するポートがあれば、処理がステップＳ５６に進められる。一方、一定量以上の余裕を有するポートがなければ、処理がステップＳ５７に進められる。
【０１６８】
［ステップＳ５６］振分先判定部２２２ｃは、ステップＳ５３の条件を満たすポートのうち、負荷が最も小さいポートを、入力されたパケットのフローの新たな出力ポートに設定する。その後、処理がステップＳ４１（図１５）に進められる。
【０１６９】
［ステップＳ５７］振分先判定部２２２ｃは、振分管理情報記憶部２５２の振分管理テーブル１５２ａから振分管理情報を取得し、取得した振分管理情報に基づいて、入力されたパケットを出力ポートに設定されたポートに対して転送させる。そして入力されたパケットは、転送されたポートから他のスイッチ等の装置に対して出力される。
【０１７０】
図１７は、第２の実施の形態の振分管理情報更新処理の手順を示すフローチャートである。図１７に示す振分管理情報更新処理は、振分管理情報記憶部２５２（図１３において前述）の振分管理テーブル１５２ａ（図７において前述）に記憶されている振分管理情報が有するエントリ更新時刻から予め定められた一定の時間が経過しているフローのエントリを消去する処理である。振分管理情報更新処理は、例えば、さらに別に予め定められた一定時間毎等、所定の契機で実行が開始される。
【０１７１】
［ステップＳ６１］振分先判定部２２２ｃは、振分管理情報記憶部２５２の振分管理テーブル１５２ａから振分管理情報を取得し、振分管理情報でエントリがあるすべてのフローのうちエントリ更新時刻から予め定められた一定の時間が経過しているフローを抽出する。。
【０１７２】
［ステップＳ６２］振分先判定部２２２ｃは、ステップＳ６１で抽出されたフローがあるか否かについて判定する。抽出されたフローがあれば、ステップＳ６３に処理が進められる。一方、抽出されたフローがなければ、処理は終了する。
【０１７３】
［ステップＳ６３］振分先判定部２２２ｃは、ステップＳ６１で抽出されたフローのエントリを、振分管理情報から消去する。その後、処理は終了する。
なお、ポートの障害の発生の検出方法は、対向装置から定期的に送信されてくるリンクアグリゲーション制御プロトコル（LACP）の受信状況に基づいて判断してもよく、スイッチ２００自身から障害監視用のパケットを送信して各ポートが正常であるか否かを監視してもよい。
【０１７４】
以上に示すように、第２の実施の形態によれば、ポートの変更を判定する際に、負荷、キュー長に加えて、ポートのバッファのキューの容量に余裕があること（例えば、キュー容量全体の１０％以上の空き容量があること）を条件として加えることで、バッファ溢れを防止すると共に、短期間の間に出力先のポートの変更の頻度が高くなり過ぎることも防止し、帯域をより効率的に使用することができる。
【０１７５】
また、出力ポートに障害が発生した場合でも、障害の発生以降に入力されたパケットについてはＬＡＧグループの他のポートを経由して正常に転送することができる。
また、所定の時間が経過して、削除対象となったフローのパケットが新たに入力されたときは、エントリがないため、新規フローとみなされて、最新の出力ポート状態に基づいて出力ポートが決定し直されるため、より効率的にパケットの振り分けを行うことが可能となる。すなわち、同じフローのパケットであったとしても、長期的な視点でみたときには、フロー内のパケットの塊毎に最新のポートの負荷の状態等に応じて出力ポートが新たに設定し直されるので、リンクの帯域を効率的に利用することができる。
【０１７６】
また、一定間隔毎に出力ポートが変更されるフローを制限することで、複数のフローの変更後の出力ポートが１つのポートに集中することにより変更後の出力ポートで輻輳が発生することを防止すると共に、出力ポートの変化の頻度が高過ぎて却って負荷や負担が生じたり、２または３以上の特定のポートの間でフローの出力ポートの振動的な変更が繰り返されたりすることを防止することができる。
【０１７７】
また、出力ポートおよび出力ポートと接続されている通信路の障害の発生を監視して、障害の発生時には出力ポートを変更することにより、出力ポートまたは出力ポートと接続されている通信路に障害が発生した場合に、出力ポートの変更以降については正常に転送されるので、故障が発生した出力ポートのフローのパケットがすべて廃棄されてしまうことを防止できる。
【０１７８】
［第３の実施の形態］
次に、第３の実施の形態について説明する。上記の第１の実施の形態との相違点を中心に説明し、同様の事項については同一の符号を用いると共に説明を省略する。
【０１７９】
第３の実施の形態は、第１の実施の形態に加えて、負荷が最小であるポートの読み出しを停止する点で、第１の実施の形態と異なる。
図１８は、第３の実施の形態のスイッチの機能を示すブロック図である。図１８に示すように、本実施の形態のスイッチ３００は、複数のポートが集約された論理リンクであるＬＡＧにより、データが分割されたパケットを転送する。スイッチ３００は、入力部３２１、振分部３２２、スイッチ部３２３、出力ポート監視部３２４、出力部３４０、出力先情報記憶部３５１、振分管理情報記憶部３５２、出力ポート情報記憶部３５３を有する。また、振分部３２２は、出力先決定部３２２ａ、フロー識別部３２２ｂ、振分先判定部３２２ｃを有する。また、出力部３４０は、出力ポート毎に対応付けられた出力キュー部３４１ａ，３４１ｂ，３４１ｃ，・・・を有する。
【０１８０】
入力部３２１は、他のスイッチ、端末装置、情報処理装置等の通信機能を有する装置とＬＡＧおよびその他の方式の通信路によって接続可能である。入力部３２１は、入力側のポート（例えば、ポート＃３）を有し、他の装置から送信された、他のスイッチおよび端末装置等の通信装置に転送されるフローの分割されたデータ等のパケットが入力される。
【０１８１】
振分部３２２は、出力先情報記憶部３５１に記憶されている出力先情報および振分管理情報記憶部３５２に記憶されている振分管理情報を参照して、入力部３２１によって入力されたフローのパケットが出力されるポートを決定する。
【０１８２】
振分部３２２は、入力部３２１によって入力されたフローが出力されるポートを、ＬＡＧグループを構成するポート＃０，＃１，＃２，・・・のうちのいずれかに決定する。また、振分部３２２は、出力ポート監視部３２４から通知された監視結果に基づいて、各ポートの負荷の状況について異常が検出された場合、入力部３２１によって入力されたフローが出力されるポートである出力ポートを、出力ポート以外のポートであってＬＡＧグループを構成する各ポートの出力キュー部のそれぞれのバッファに蓄積されているデータの量と比較して、ポートに対応して設けられたバッファに蓄積されているデータの量が多いポートに変更する。
【０１８３】
出力先決定部３２２ａは、入力部３２１に入力されたフローのパケットのヘッダ情報と、ＭＡＣアドレスの学習結果から生成された出力先情報記憶部３５１に記憶されている出力先情報に基づいて、パケットが出力され得るポートを決定するものである。なお、出力先決定部３２２ａは、ＭＡＣアドレスの学習に替えて、ＩＰアドレスおよびルーティングプロトコルに基づいてパケットが出力され得るポートを決定してもよい。
【０１８４】
この出力先決定部３２２ａは、入力されたフローのパケットの宛先ＭＡＣアドレスに基づいて、各フローのパケットの出力ポートを特定する。すなわち、出力先決定部３２２ａは、入力されたフローのパケットに含まれるＭＡＣアドレスを抽出する。このとき、入力されたフローのパケットのＭＡＣアドレスが、出力先情報によって、当該フローのパケットの出力と対応づけられている。これを用いて、スイッチ３００は、入力されたフローのパケットのＭＡＣアドレスから、出力先情報で対応付けられた出力ポートを取得する。
【０１８５】
また、入力されたフローの出力先がＬＡＧの場合は、その出力先情報において、ＬＡＧで送信されるフローのパケットのＭＡＣアドレスに対してさらにＬＡＧで送信される旨を示す情報を設定することで、そのフローのパケットの出力先としてＬＡＧで出力されることおよび出力されるＬＡＧグループを指定することができる。これに従い、出力先決定部３２２ａは、そのフローのパケットの宛先を、指定されたＬＡＧグループに決定する。
【０１８６】
フロー識別部３２２ｂは、ＬＡＧの運用時に入力されたパケットのヘッダ情報からフロー識別子を生成し、フローを特定する。
また、フロー識別部３２２ｂは、入力されたフローのパケットのヘッダ情報に基づいてハッシュ演算を行うことにより、フロー識別子を生成する。このとき、フロー識別部３２２ｂは、パケットからヘッダ情報を抽出し、抽出されたヘッダ情報を用いてハッシュ演算を行う。
【０１８７】
ここで、ヘッダ情報とは、パケットの例えば先頭部分等の、パケットの一部分を構成する情報であり、例えば、パケットに含まれている各種のアドレスを用いることができる。ヘッダ情報として用いるアドレスとは、パケットの送信元の端末装置（または送信元の端末装置が属する集合）や宛先の端末装置（または宛先の端末装置が属する集合）を特定するための情報である。ヘッダ情報は、例えば、送信元／宛先のＭＡＣアドレス、送信元／宛先のＩＰアドレス等である。
【０１８８】
振分先判定部３２２ｃは、振分管理情報を参照して、フロー識別部３２２ｂによって計算されたハッシュ値に基づいてパケットが出力されるポートを決定する。
また、振分先判定部３２２ｃは、ＬＡＧの運用時にＬＡＧグループ内の複数のポートの帯域を効率的に利用するために、後述する出力ポート監視部３２４によるポートの監視結果に基づいて送出先のＬＡＧが有する出力ポートを設定する。
【０１８９】
スイッチ部３２３は、振分部３２２の判断に基づいてパケットを出力ポートに転送する。これにより、スイッチ３００に入力されたフローのパケットが、振分部３２２による設定に基づいて出力部３４０が有する出力ポートから出力され、フローのデータが送信先に向かって中継される。
【０１９０】
出力ポート監視部３２４は、スイッチ３００の出力部３４０が有する各ポートの輻輳状態、負荷の状態、障害の発生の有無等のトラフィック状態を監視するものである。出力ポート監視部３２４は、各出力キュー部３４１ａ，３４１ｂ，３４１ｃ，・・・のそれぞれのバッファにおけるデータの蓄積状況を監視する。出力ポート監視部３２４は、各バッファの監視結果を、出力ポート情報記憶部３５３に出力ポート情報として記憶させると共に、振分部３２２に通知する。
【０１９１】
出力ポート監視部３２４は、ＬＡＧが有する各出力ポートの最新のキュー長（その出力ポートで出力を待っている状態のパケットのデータサイズの総量）を監視すると共に、各ポートの負荷を監視する。本実施の形態では、ポートの負荷は、一定時間内にそれぞれの出力キュー部に入力されたパケットの総データ量で求めるが、これに限らず、長期的な負荷を監視するために過去の負荷情報に重み付けを行って、加重平均で負荷を算出してもよい。
【０１９２】
出力部３４０は、データを出力する複数のポート＃０，＃１，＃２，・・・と、ポート＃０，＃１，＃２，・・・のそれぞれに対応して設けられており、それぞれのポート＃０，＃１，＃２，・・・から出力されるデータを蓄積するバッファを有する出力キュー部３４１ａ，３４１ｂ，３４１ｃ，・・・を有する。
【０１９３】
また、出力部３４０は、出力ポート監視部３２４による監視の結果、ポートの負荷の状況について異常が検出された場合において、フローが出力されている出力ポートよりも出力キュー部３４１ａ，３４１ｂ，３４１ｃ，・・・のバッファに蓄積されているデータの量が多いポートが存在しないとき、フローが出力されている出力ポート以外のポートであって、出力ポート監視部３２４による監視結果に基づいて負荷が最も小さいポートの出力を停止させる。
【０１９４】
出力キュー部３４１ａ，３４１ｂ，３４１ｃ，・・・は、出力部３４０が有する各ポートに対応して設けられており、データ送信の品質制御およびスイッチ３００の入力部３２１が有する入力側の各ポート（例えば、ポート＃３）から同時に入力されたパケットの待ち合わせ等を行う。出力キュー部３４１ａ，３４１ｂ，３４１ｃ，・・・が有するそれぞれのバッファは、先入れ先出し方式によってデータが読み出される。出力キュー部３４１ａ，３４１ｂ，３４１ｃ，・・・は、蓄積部として機能する。
【０１９５】
出力先情報記憶部３５１は、出力先テーブル１５１ａ（図６において前述）として出力先情報を記憶している。出力先情報は、ＬＡＧ等によりフローのパケットが出力され得るポートを示す情報である。
【０１９６】
振分管理情報記憶部３５２は、振分管理テーブル１５２ａ（図７において前述）として振分管理情報を記憶している。振分管理情報は、各フローのパケットについて振分先判定部３２２ｃで決定された出力ポートを示す情報である。
【０１９７】
出力ポート情報記憶部３５３は、出力ポートテーブル１５３ａ（図８において前述）として出力ポート情報を記憶している。出力ポート情報は、各ポートの出力側のバッファのキュー長、出力側の通信路の輻輳状態および障害の発生の有無等を示す情報である。
【０１９８】
次に、本実施の形態で実行される処理について説明する。
図１９および図２０は、第３の実施の形態の振分判定処理の手順を示すフローチャートである。図１９および図２０に示す振分判定処理は、ＬＡＧが有する出力ポートのうちから出力ポートを選択すると共に、選択した出力ポートによって入力されたフローのパケットを出力する処理である。振分判定処理は、出力先決定部３２２ａ（図１８において前述）が出力先情報記憶部３５１（図１８において前述）に記憶されている出力先テーブル１５１ａ（図６において前述）を参照して、入力部３２１によりスイッチ３００に入力されたパケットがＬＡＧで出力されるパケットであると判定した場合に実行が開始される。
【０１９９】
［ステップＳ７１］フロー識別部３２２ｂ（図１８において前述）は、パケットのヘッダ情報にハッシュ演算を実行して、実行結果をフロー識別子に設定することによりフロー識別を行う。
【０２００】
［ステップＳ７２］振分先判定部３２２ｃは、振分管理情報記憶部３５２（図１８において前述）の振分管理テーブル１５２ａ（図７において前述）から振分管理情報を取得する。
【０２０１】
［ステップＳ７３］振分先判定部３２２ｃは、ステップＳ７２で取得した振分管理情報を参照して、ステップＳ７１で算出されたフロー識別子と比較し、入力されたパケットのフローのエントリの有無について判定する。エントリがあれば、ステップＳ８１（図２０）に処理が進められる。一方、エントリがなければ、処理がステップＳ７４に進められる。
【０２０２】
［ステップＳ７４］振分先判定部３２２ｃは、出力ポート監視部３２４の監視結果に基づいて、入力されたパケットのフローが出力されるＬＡＧが有するポートのうち、最も負荷が小さいポートを出力ポートに設定する。
【０２０３】
［ステップＳ７５］振分先判定部３２２ｃは、入力されたパケットをステップＳ７４で出力ポートに設定されたポートに対して転送させる。そして入力されたパケットは、転送されたポートから他のスイッチ等の装置に対して出力される。
【０２０４】
［ステップＳ７６］振分先判定部３２２ｃは、ステップＳ７４で出力ポートに設定されたポートを、振分管理情報記憶部３５２の振分管理テーブル１５２ａに記憶されている振分管理情報に記憶させる。その後、処理は終了する。
【０２０５】
［ステップＳ８１］振分先判定部３２２ｃは、出力ポート監視部３２４の監視結果に基づいて、入力されたパケットのフローに現在設定されている出力ポートが輻輳状態であるか否かについて判定する。出力ポートが輻輳状態であれば、処理がステップＳ８２に進められる。一方、出力ポートが輻輳状態でなければ、処理がステップＳ８６に進められる。
【０２０６】
［ステップＳ８２］振分先判定部３２２ｃは、出力ポート監視部３２４の監視結果に基づいて、入力されたパケットのフローが出力されるＬＡＧが有するポートのうち負荷が現在設定されている出力ポートよりも小さいポートがあるか否かについて判定する。出力ポートよりも負荷が小さいポートがあれば、処理がステップＳ８３に進められる。一方、出力ポートよりも負荷が小さいポートがなければ、処理がステップＳ８５に進められる。
【０２０７】
［ステップＳ８３］振分先判定部３２２ｃは、出力ポート監視部３２４の監視結果に基づいて、ステップＳ８２の条件を満たすポートのうち、キュー長が現在設定されている出力ポートよりも大きいポートがあるか否かについて判定する。出力ポートよりもキュー長が大きいポートがあれば、処理がステップＳ８４に進められる。一方、出力ポートよりもキュー長が大きいポートがなければ、処理がステップＳ８５に進められる。
【０２０８】
［ステップＳ８４］振分先判定部３２２ｃは、ステップＳ８３の条件を満たすポートのうち、負荷が最も小さいポートを、入力されたパケットのフローの新たな出力ポートに設定する。その後、処理がステップＳ７５（図１９）に進められる。
【０２０９】
［ステップＳ８５］出力部３４０は、負荷が最も小さいポートのキューの読み出しを停止する。この読み出しの停止は、予め定められた条件を満たした場合に解除される。ここで、予め定められた条件は、例えば、そのポートのキュー長が、読み出しを停止した時点における出力ポートのキュー長に達した場合とすることができるが、必ずしもこれに限られず、フローのパケットの順序の逆転を防止するものであれば足りる。
【０２１０】
［ステップＳ８６］振分先判定部３２２ｃは、振分管理情報記憶部３５２の振分管理テーブル１５２ａから振分管理情報を取得し、取得した振分管理情報に基づいて、入力されたパケットを出力ポートに設定されたポートに対して転送させる。そして入力されたパケットは、転送されたポートから他のスイッチ等の装置に対して出力される。その後、処理は終了する。
【０２１１】
以上に示すように、第３の実施の形態によれば、その時点には出力ポートよりもキュー長が大きいポートが存在しなかった場合にも、時間の経過に従って、その時点では最も負荷が低いポートのキュー長が、輻輳状態のポートのキュー長より大きくなるため、キュー長が大きくなった時点で出力ポートの変更が可能となる。
【０２１２】
［第４の実施の形態］
次に、第４の実施の形態について説明する。上記の第１の実施の形態との相違点を中心に説明し、同様の事項については同一の符号を用いると共に説明を省略する。
【０２１３】
第４の実施の形態では、輻輳状態のポートよりも負荷が低いポートがあったときは、キュー長の大きさにかかわらず出力ポートを負荷が低いポートに変更し、その後、変更後のポートにおいて変更後に到着したパケットの読み出しを、移動前と移動後のキュー長の差分だけ遅延させる点で、第１の実施の形態と異なる。
【０２１４】
また、第４の実施の形態では、パケットがスイッチに入力された場合において、出力ポートが輻輳状態であったとき、出力されるパケットが蓄積されるバッファの空き容量に十分な余裕があるポートが選択される点で、第１の実施の形態と異なる。
【０２１５】
図２１は、第４の実施の形態のスイッチの機能を示すブロック図である。図２１に示すように、本実施の形態のスイッチ４００は、複数のポートが集約された論理リンクであるＬＡＧにより、データが分割されたパケットを転送する。スイッチ４００は、入力部４２１、振分部４２２、スイッチ部４２３、出力ポート監視部４２４、出力部４４０、出力先情報記憶部４５１、振分管理情報記憶部４５２、出力ポート情報記憶部４５３を有する。また、振分部４２２は、出力先決定部４２２ａ、フロー識別部４２２ｂ、振分先判定部４２２ｃを有する。また、出力部４４０は、出力ポート毎に対応付けられた出力キュー部４４１ａ，４４１ｂ，４４１ｃ，・・・を有する。
【０２１６】
入力部４２１は、他のスイッチ、端末装置、情報処理装置等の通信機能を有する装置とＬＡＧおよびその他の方式の通信路によって接続可能である。入力部４２１は、入力側のポート（例えば、ポート＃３）を有し、他の装置から送信された、他のスイッチおよび端末装置等の通信装置に転送されるフローの分割されたデータ等のパケットが入力される。
【０２１７】
振分部４２２は、出力先情報記憶部４５１に記憶されている出力先情報および振分管理情報記憶部４５２に記憶されている振分管理情報を参照して、入力部４２１によって入力されたフローのパケットが出力されるポートを決定する。
【０２１８】
振分部４２２は、入力部４２１によって入力されたフローが出力されるポートを、ＬＡＧグループを構成するポート＃０，＃１，＃２，・・・のうちのいずれかに決定する。また、振分部４２２は、出力ポート監視部４２４から通知された監視結果に基づいて、各ポートの負荷の状況について異常が検出された場合、入力部４２１によって入力されたフローが出力されるポートである出力ポートを、出力ポート以外のＬＡＧグループのポートのうち、負荷が最も小さいポートに変更する。
【０２１９】
このとき、振分部４２２は、フローのパケットが出力されている出力ポートよりも各出力キュー部のバッファに蓄積されているデータの量が多いポートのうち、出力キュー部のバッファの蓄積量と、出力ポートの出力キュー部のバッファに蓄積されている蓄積量との差分が最も小さいポートを変更後の出力ポートに選択する。
【０２２０】
また、振分部４２２は、バッファに蓄積されているキュー長に一定量以上の余裕があるポートを変更後の出力ポートに選択する。更に振分部４２２は、変更後の出力ポートから出力されるデータの出力を、キュー長の差分に応じて遅延させる。
【０２２１】
ポートの変更を判定する際に、負荷、キュー長に加えて、ポートのバッファのキューの容量に余裕があること（例えば、キュー容量全体の１０％以上の空き容量があること）を条件として加えることで、バッファ溢れを防止すると共に、短期間の間に出力先のポートの変更の頻度が高くなり過ぎることも防止し、帯域をより効率的に使用することができる。
【０２２２】
出力先決定部４２２ａは、入力部４２１に入力されたフローのパケットのヘッダ情報と、ＭＡＣアドレスの学習結果から生成された出力先情報記憶部４５１に記憶されている出力先情報に基づいて、パケットが出力され得るポートを決定するものである。なお、出力先決定部４２２ａは、ＭＡＣアドレスの学習に替えて、ＩＰアドレスおよびルーティングプロトコルに基づいてパケットが出力され得るポートを決定してもよい。
【０２２３】
この出力先決定部４２２ａは、入力されたフローのパケットの宛先ＭＡＣアドレスに基づいて、各フローのパケットの出力ポートを特定する。すなわち、出力先決定部４２２ａは、入力されたフローのパケットに含まれるＭＡＣアドレスを抽出する。このとき、入力されたフローのパケットのＭＡＣアドレスが、出力先情報によって、当該フローのパケットの出力と対応づけられている。これを用いて、スイッチ４００は、入力されたフローのパケットのＭＡＣアドレスから、出力先情報で対応付けられた出力ポートを取得する。
【０２２４】
また、入力されたフローの出力先がＬＡＧの場合は、その出力先情報において、ＬＡＧで送信されるフローのパケットのＭＡＣアドレスに対してさらにＬＡＧで送信される旨を示す情報を設定することで、そのフローのパケットの出力先としてＬＡＧで出力されることおよび出力されるＬＡＧグループを指定することができる。これに従い、出力先決定部４２２ａは、そのフローのパケットの宛先を、指定されたＬＡＧグループに決定する。
【０２２５】
フロー識別部４２２ｂは、ＬＡＧの運用時に入力されたパケットのヘッダ情報からフロー識別子を生成し、フローを特定する。
また、フロー識別部４２２ｂは、入力されたフローのパケットのヘッダ情報に基づいてハッシュ演算を行うことにより、フロー識別子を生成する。このとき、フロー識別部４２２ｂは、パケットからヘッダ情報を抽出し、抽出されたヘッダ情報を用いてハッシュ演算を行う。
【０２２６】
ここで、ヘッダ情報とは、パケットの例えば先頭部分等の、パケットの一部分を構成する情報であり、例えば、パケットに含まれている各種のアドレスを用いることができる。ヘッダ情報として用いるアドレスとは、パケットの送信元の端末装置（または送信元の端末装置が属する集合）や宛先の端末装置（または宛先の端末装置が属する集合）を特定するための情報である。ヘッダ情報は、例えば、送信元／宛先のＭＡＣアドレス、送信元／宛先のＩＰアドレス等である。
【０２２７】
振分先判定部４２２ｃは、振分管理情報を参照して、フロー識別部４２２ｂによって計算されたハッシュ値に基づいてパケットが出力されるポートを決定する。
また、振分先判定部４２２ｃは、ＬＡＧの運用時にＬＡＧグループ内の複数のポートの帯域を効率的に利用するために、後述する出力ポート監視部４２４によるポートの監視結果に基づいて送出先のＬＡＧが有する出力ポートを設定する。
【０２２８】
スイッチ部４２３は、振分部４２２の判断に基づいてパケットを出力ポートに転送する。これにより、スイッチ４００に入力されたフローのパケットが、振分部４２２による設定に基づいて出力部４４０が有する出力ポートから出力され、フローのデータが送信先に向かって中継される。
【０２２９】
出力ポート監視部４２４は、スイッチ４００の出力部４４０が有する各ポートの輻輳状態、負荷の状態、障害の発生の有無等のトラフィック状態を監視するものである。出力ポート監視部４２４は、各出力キュー部４４１ａ，４４１ｂ，４４１ｃ，・・・のそれぞれのバッファにおけるデータの蓄積状況を監視する。出力ポート監視部４２４は、各バッファの監視結果を、出力ポート情報記憶部４５３に出力ポート情報として記憶させると共に、振分部４２２に通知する。出力キュー部４４１ａ，４４１ｂ，４４１ｃ，・・・は、蓄積部として機能する。
【０２３０】
出力ポート監視部４２４は、ＬＡＧが有する各出力ポートの最新のキュー長（その出力ポートで出力を待っている状態のパケットのデータサイズの総量）を監視すると共に、各ポートの負荷を監視する。本実施の形態では、ポートの負荷は、一定時間内にそれぞれの出力キュー部に入力されたパケットの総データ量で求めるが、これに限らず、長期的な負荷を監視するために過去の負荷情報に重み付けを行って、加重平均で負荷を算出してもよい。
【０２３１】
出力部４４０は、データを出力する複数のポート＃０，＃１，＃２，・・・と、ポート＃０，＃１，＃２，・・・のそれぞれに対応して設けられており、それぞれのポート＃０，＃１，＃２，・・・から出力されるデータを蓄積するバッファを有する出力キュー部４４１ａ，４４１ｂ，４４１ｃ，・・・を有する。
【０２３２】
出力キュー部４４１ａ，４４１ｂ，４４１ｃ，・・・は、出力部４４０が有する各ポートに対応して設けられており、データ送信の品質制御およびスイッチ４００の入力部４２１が有する入力側の各ポート（例えば、ポート＃３）から同時に入力されたパケットの待ち合わせ等を行う。出力キュー部４４１ａ，４４１ｂ，４４１ｃ，・・・が有するそれぞれのバッファは、先入れ先出し方式によってデータが読み出される。
【０２３３】
出力先情報記憶部４５１は、出力先テーブル１５１ａ（図６において前述）として出力先情報を記憶している。出力先情報は、ＬＡＧ等によりフローのパケットが出力され得るポートを示す情報である。
【０２３４】
振分管理情報記憶部４５２は、振分管理テーブル１５２ａ（図７において前述）として振分管理情報を記憶している。振分管理情報は、各フローのパケットについて振分先判定部４２２ｃで決定された出力ポートを示す情報である。
【０２３５】
出力ポート情報記憶部４５３は、出力ポートテーブル１５３ａ（図８において前述）として出力ポート情報を記憶している。出力ポート情報は、各ポートの出力側のバッファのキュー長、出力側の通信路の輻輳状態および障害の発生の有無等を示す情報である。
【０２３６】
次に、本実施の形態のスイッチの動作について説明する。
図２２は、第４の実施の形態において、入力されたフローの途中でパケットの出力ポートが変更されるときのスイッチの状態を示す図である。図２３は、第４の実施の形態において、入力されたフローの途中でパケットの出力ポートが変更されるときのキューの状態を示す図である。
【０２３７】
図２２に示すように、本実施の形態のスイッチ４００のポート＃３にフローＡの後続パケットが入力されたとき、フローＡの出力ポートであるポート＃０が輻輳状態で、そのときのポート＃０のバッファ４４１ａ１のキュー長を、Ｚ  Ｂｙｔｅとする。これに対して、振分部４２２は、ＬＡＧの中で最も負荷の低いポートであって、バッファの空き容量に所定の余裕があるもの（ポート＃１とする）を選択し、フローＡの出力ポートをポート＃１に変更する。これにより、フローＡにおける出力ポートの変更前の先行パケットは、スイッチ部４２３によりポート＃０に転送されてポート＃０から出力され、変更後の後続パケットは、スイッチ部４２３によりポート＃１に転送されてポート＃１から出力される。このときの変更後の出力ポートであるポート＃１のバッファ４４１ｂ１のキュー長を、Ｘ  Ｂｙｔｅとする。
【０２３８】
ここで、図２３に示すように、変更後の出力ポートであるポート＃１のキュー長が、変更前の出力ポートであるポート＃０のキュー長よりも小さい（すなわち、Ｚ＞Ｘ）場合、出力ポートを変更したのみでは、ポート＃０に振り分けられたフローＡの先行パケットよりも、ポート＃１に振り分けられたパケットが先に装置から出力されてしまい、パケットの順序逆転が発生することになる。
【０２３９】
そこで、本実施の形態のスイッチ４００では、出力ポートの変更後のポート＃１において、フローＡの後続パケットの出力を遅らせてタイミングを調整することにより、フローＡのパケットの順序の逆転を防止する。
【０２４０】
図２２および図２３を用いて本実施の形態のスイッチ４００の動作を説明する。
スイッチ４００の振分部４２２（図２１において前述）により、フローＡの後続パケットが入力されたときに、出力ポートをポート＃１に変更した後、ポート＃１の出力キュー部４４１ｂ（図２１において前述）に対して、変更前の出力ポートであるポート＃０のキュー長（Ｚ  Ｂｙｔｅ）情報と読み出し停止指示とを通知する。ポート＃１の出力キュー部４４１ｂは、読み出し停止指示を受信したときのバッファ４４１ｂ１に蓄積されているデータ４４３ａのキュー長の値（Ｘ  Ｂｙｔｅ）を記憶し、読み出し停止指示を受信してからバッファ４４１ｂ１に記憶したデータキュー長の値（Ｘ  Ｂｙｔｅ）分のデータを出力した後に、出力キュー部４４１ｂが有するポート＃１のバッファからの読み出しを一旦停止する。
【０２４１】
このときの出力キュー部４４１ｂによる読み出しの停止について、図２３に基づいて説明する。ポート＃１の出力キュー部４４１ｂは、振分部４２２から通知された変更前のポート＃０に蓄積されている変更前のフローＡの先行パケットのデータ４４２のキュー長（Ｚ  Ｂｙｔｅ）と、振分部４２２からの通知を受信した時点でポート＃１に蓄積されている他のフローのデータ４４３ａのキュー長（Ｘ  Ｂｙｔｅ）との差分（Ｚ−Ｘ  Ｂｙｔｅ）を算出する。算出された差分に相当するデータの出力に要する時間に相当する時間が経過するまで、ポート＃１のキューの読み出し停止を継続する。そして出力キュー部４４１ｂは、相当する時間が経過した後、ポート＃１の読み出しを再開する。そして、読み出しの再開後に、出力キュー部４４１ｂは、ポート＃１から変更後のフローＡの後続パケットのデータ４４３ｂを出力する。
【０２４２】
例えば、フローＡの出力ポートの変更時において、変更前のフローＡの出力ポートであるポート＃０のキュー長Ｚが１００ＭＢであり、変更後のフローＡの出力ポートであるポート＃１のキュー長Ｘが５０ＭＢであるものとする。また、ポート＃０，＃１の送信レートが１０００Ｍｂｐｓであるものとする。
【０２４３】
この場合、出力キュー部４４１ｂは、振分部４２２からの読み出し停止指示を受信してから他のフローのデータである５０ＭＢ分のデータを出力した後、ポート＃１のキューの読み出しを停止する。そして、出力キュー部４４１ｂは、フローＡのポート＃０のキュー長とポート＃１の他のフローのキュー長の差分のデータの出力に要する時間に相当する４００ミリ秒（（１００ＭＢ−５０ＭＢ）×８÷１０００Ｍｂｐｓ）経過後に、ポート＃１の読み出しを再開する。これにより、ポート＃１からフローＡの後続パケットが出力される。
【０２４４】
次に、本実施の形態で実行される処理について説明する。
図２４および図２５は、第４の実施の形態の振分判定処理の手順を示すフローチャートである。図２４および図２５に示す振分判定処理は、ＬＡＧが有する出力ポートのうちから出力ポートを選択すると共に、選択した出力ポートによって入力されたフローのパケットを出力する処理である。振分判定処理は、出力先決定部４２２ａ（図２１において前述）が出力先情報記憶部４５１（図２１において前述）に記憶されている出力先テーブル１５１ａ（図６において前述）を参照して、入力部４２１によりスイッチ４００に入力されたパケットがＬＡＧで出力されるパケットであると判定した場合に実行が開始される。
【０２４５】
［ステップＳ９１］フロー識別部４２２ｂ（図２１において前述）は、パケットのヘッダ情報にハッシュ演算を実行して、実行結果をフロー識別子に設定することによりフロー識別を行う。
【０２４６】
［ステップＳ９２］振分先判定部４２２ｃは、振分管理情報記憶部４５２（図２１において前述）の振分管理テーブル１５２ａ（図７において前述）から振分管理情報を取得する。
【０２４７】
［ステップＳ９３］振分先判定部４２２ｃは、ステップＳ９２で取得した振分管理情報を参照して、ステップＳ９１で算出されたフロー識別子と比較し、入力されたパケットのフローのエントリの有無について判定する。エントリがあれば、ステップＳ１０１（図２５）に処理が進められる。一方、エントリがなければ、処理がステップＳ９４に進められる。
【０２４８】
［ステップＳ９４］振分先判定部４２２ｃは、出力ポート監視部４２４の監視結果に基づいて、入力されたパケットのフローが出力されるＬＡＧが有するポートのうち、最も負荷が小さいポートを出力ポートに設定する。
【０２４９】
［ステップＳ９５］振分先判定部４２２ｃは、入力されたパケットをステップＳ９４で出力ポートに設定されたポートに対して転送させる。そして入力されたパケットは、転送されたポートから他のスイッチ等の装置に対して出力される。
【０２５０】
［ステップＳ９６］振分先判定部４２２ｃは、ステップＳ９４で出力ポートに設定されたポートを、振分管理情報記憶部４５２の振分管理テーブル１５２ａに記憶されている振分管理情報に記憶させる。その後、処理は終了する。
【０２５１】
［ステップＳ１０１］振分先判定部４２２ｃは、出力ポート監視部４２４の監視結果に基づいて、入力されたパケットのフローに現在設定されている出力ポートが輻輳状態であるか否かについて判定する。出力ポートが輻輳状態であれば、処理がステップＳ１０２に進められる。一方、出力ポートが輻輳状態でなければ、処理がステップＳ１０６に進められる。
【０２５２】
［ステップＳ１０２］振分先判定部４２２ｃは、出力ポート監視部４２４の監視結果に基づいて、入力されたパケットのフローが出力されるＬＡＧが有するポートのうち負荷が現在設定されている出力ポートよりも小さいポートがあるか否かについて判定する。出力ポートよりも負荷が小さいポートがあれば、処理がステップＳ１０３に進められる。一方、出力ポートよりも負荷が小さいポートがなければ、処理がステップＳ１０６に進められる。
【０２５３】
［ステップＳ１０３］振分先判定部４２２ｃは、出力ポート監視部４２４の監視結果に基づいて、ステップＳ１０２の条件を満たすポートのうち、バッファに予め定められた一定量以上の余裕を有するポートがあるか否かについて判定する。一定量以上の余裕を有するポートがあれば、処理がステップＳ１０４に進められる。一方、一定量以上の余裕を有するポートがなければ、処理がステップＳ１０６に進められる。
【０２５４】
［ステップＳ１０４］振分先判定部４２２ｃは、ステップＳ１０３の条件を満たすポートのうち、現在設定されている出力ポートとのキュー長の差が最も小さいポートを、入力されたパケットのフローの新たな出力ポートに設定する。
【０２５５】
［ステップＳ１０５］出力部４４０は、ステップＳ１０４で設定された出力ポートのキューの読み出しを停止する。この読み出しの停止は、ステップＳ１０４で設定が変更されるまで出力ポートであったポートとのキュー長の差が解消するまで行われ、差が解消した後に解除される。その後、処理がステップＳ９５（図２４）に進められる。
【０２５６】
［ステップＳ１０６］振分先判定部４２２ｃは、振分管理情報記憶部４５２の振分管理テーブル１５２ａから振分管理情報を取得し、取得した振分管理情報に基づいて、入力されたパケットを出力ポートに設定されたポートに対して転送させる。そして入力されたパケットは、転送されたポートから他のスイッチ等の装置に対して出力される。その後、処理は終了する。
【０２５７】
以上に示すように、第４の実施の形態によれば、変更後の出力ポートから出力されるフローの後続パケットが、輻輳状態になる前に他のポートに振分けられた同一のフローの先行パケットを追い越すことがないので、パケットの順序の逆転を防止しながら、ＬＡＧにおいてフローのパケットの出力ポートを変更することが可能になる。
【０２５８】
また、ポートの変更を判定する際に、負荷、キュー長に加えて、ポートのバッファのキューの容量に余裕があることを条件として加えることで、バッファ溢れを防止すると共に、短期間の間に出力先のポートの変更の頻度が高くなり過ぎることも防止し、帯域をより効率的に使用することができる。
【０２５９】
［第５の実施の形態］
次に、第５の実施の形態について説明する。上記の第１の実施の形態との相違点を中心に説明し、同様の事項については同一の符号を用いると共に説明を省略する。
【０２６０】
第１の実施の形態では、各ポートの負荷を監視して、その監視結果を情報として各入力ポートの振分部に通知する。この場合、スイッチ内において、パケットが通過する主信号とは異なる、多くの内部情報を通知するための信号が新たに必要となる。
【０２６１】
これに対して、第５の実施の形態では、スイッチの入力側のポートから各出力側のポートに対してループバックパケットを送信し、このループバックパケットを出力側のポートで折り返す。折り返されたループバックパケットの応答時間を計測することによって、輻輳状態およびポートの負荷の状態を推定する点で第１の実施の形態と異なる。
【０２６２】
図２６は、第５の実施の形態のスイッチの機能を示すブロック図である。図２６に示すように、本実施の形態のスイッチ５００は、複数のポートが集約された論理リンクであるＬＡＧにより、データが分割されたパケットを転送する。スイッチ５００は、入力側のポートであるポート＃３、出力側のポートでありＬＡＧグループを構成するポート＃０，ポート＃１、スイッチ部５２３を有する。なお、スイッチ５００のポートの数およびＬＡＧの数はこれに限られない。
【０２６３】
入力側のポートであるポート＃３、出力側のポートであるポート＃０，＃１は、それぞれ振分部５２２，５２２ａ，５２２ｂ、挿入部５３１，５３１ａ，５３１ｂ、抽出部５３２，５３２ａ，５３２ｂ、折り返し部５３３，５３３ａ，５３３ｂ、出力キュー部５４１，５４１ａ，５４１ｂを有する。また、ポート＃３は、出力ポート監視部５２４を有する。ポート＃０，＃１は、同様に、図示しない出力ポート監視部を有する。
【０２６４】
なお、スイッチ５００は、図示しない入力部、出力部、出力先情報記憶部、振分管理情報記憶部、出力ポート情報記憶部を有する。また、各ポートの振分部は、図示しない出力先決定部、フロー識別部、振分先判定部を有する。
【０２６５】
データのパケットを入力する入力側のポートであるポート＃３は、入力されたパケットを、振分部５２２によって決定（または設定）された出力ポートに送信する。
振分部５２２，５２２ａ，５２２ｂは、出力先情報記憶部に記憶されている出力先情報および振分管理情報記憶部に記憶されている振分管理情報を参照して、入力部によって入力されたフローのパケットが出力されるポートを決定する。
【０２６６】
振分部５２２，５２２ａ，５２２ｂは、入力部によって入力されたフローが出力されるポートを、ＬＡＧグループを構成するポート＃０，＃１のうちのいずれかに決定する。
振分部５２２は、出力ポート監視部５２４から通知された監視結果に基づいて、各ポートの負荷の状況について異常が検出された場合、ポート＃３の入力部によって入力されたフローが出力されるポートである出力ポートを、出力ポート以外のポートであってＬＡＧグループを構成する各ポートの出力キュー部のそれぞれのバッファに蓄積されているデータの量と比較して、ポートに対応して設けられたバッファに蓄積されているデータの量が多いポートに変更する。振分部５２２ａ，５２２ｂも同様である。
【０２６７】
スイッチ部５２３は、各振分部の判断に基づいてパケットを出力側のポートに転送する。これにより、スイッチ５００に入力されたフローのパケットが、各振分部による設定に基づいて出力ポートから出力され、フローのデータが送信先に向かって中継される。
【０２６８】
出力ポート監視部５２４は、スイッチ５００が有する出力側の各ポートの輻輳状態、負荷の状態、障害の発生の有無等のトラフィック状態を監視するものである。出力ポート監視部５２４は、各出力キュー部５４１，５４１ａ，５４１ｂのそれぞれのバッファにおけるデータの蓄積状況を監視する。出力ポート監視部５２４は、各バッファの監視結果を、図示しない出力ポート情報記憶部に出力ポート情報として記憶させると共に、振分部５２２，５２２ａ，５２２ｂに通知する。
【０２６９】
出力ポート監視部５２４は、ループバックパケットが、ポート＃３の挿入部５３１によって挿入されてから、それぞれポート＃０の折り返し部５３３ａ、ポート＃１の折り返し部５３３ｂによって折り返され、抽出部５３２によって抽出されるまでの時間を計測し、計測結果に基づいてポート＃０，＃１の負荷の状況を監視する。
【０２７０】
また、出力ポート監視部５２４は、ループバックパケットを監視してスイッチ５００の障害の発生を検出する。出力ポート監視部５２４は、例えば、ループバックパケットが一定時間検出されないことにより、スイッチ５００のポートの障害の発生を検出する。
【０２７１】
出力ポート監視部５２４は、ＬＡＧが有する各出力ポートの最新のキュー長（その出力ポートで出力を待っている状態のパケットのデータサイズの総量）を監視すると共に、各ポートの負荷を監視する。本実施の形態では、ポートの負荷は、このループバックパケットの応答時間を計測することによって求めるが、これに限らず、長期的な負荷を監視するために過去の負荷情報に重み付けを行って、加重平均で負荷を算出してもよい。ポート＃０，ポート＃１が有する出力ポート監視部も同様である。
【０２７２】
挿入部５３１，５３１ａ，５３１ｂは、スイッチ５００の内部においてループバックパケットを挿入する。抽出部５３２，５３２ａ，５３２ｂは、スイッチ５００の内部において自己が挿入し、折り返し部５３３，５３３ａ，５３３ｂによって折り返されたループバックパケットを抽出する。折り返し部５３３，５３３ａ，５３３ｂは、挿入部５３１，５３１ａ，５３１ｂによって挿入されたループバックパケットを折り返す。
【０２７３】
出力キュー部５４１，５４１ａ，５４１ｂは、各ポートから出力されるデータを蓄積するバッファを有していると共に、スイッチ５００が有する各ポートに対応して設けられており、データ送信の品質制御およびスイッチ５００が有する入力側の各ポート（例えば、ポート＃３）から同時に入力されたパケットの待ち合わせ等を行う。出力キュー部５４１，５４１ａ，５４１ｂが有するそれぞれのバッファは、先入れ先出し方式によってデータが読み出される。出力キュー部５４１，５４１ａ，５４１ｂは、蓄積部として機能する。
【０２７４】
入力部は、他のスイッチ、端末装置、情報処理装置等の通信機能を有する装置とＬＡＧおよびその他の方式の通信路によって接続可能である。
出力先情報記憶部は、出力先テーブル１５１ａ（図６において前述）として出力先情報を記憶している。出力先情報は、ＬＡＧ等によりフローのパケットが出力され得るポートを示す情報である。
【０２７５】
振分管理情報記憶部は、振分管理テーブル１５２ａ（図７において前述）として振分管理情報を記憶している。振分管理情報は、各フローのパケットについて振分先判定部で決定された出力ポートを示す情報である。
【０２７６】
出力ポート情報記憶部は、出力ポートテーブル１５３ａ（図８において前述）として出力ポート情報を記憶している。出力ポート情報は、各ポートの出力側のバッファのキュー長、出力側の通信路の輻輳状態および障害の発生の有無等を示す情報である。
【０２７７】
本実施の形態では、出力側のポート＃０，＃１のそれぞれの出力キュー部５４１ａ，５４１ｂの出口でループバックパケットを折り返す。入力側のポート＃３の挿入部５３１は、定期的にポート＃０，＃１宛にループバックパケットを送信する。このループバックパケットはスイッチ部５２３を経由してポート＃０，＃１に転送される。
【０２７８】
ポート＃０，＃１の抽出部５３２ａ，５３２ｂは、自身が送信したループバックパケットを抽出し、それ以外のパケットは転送する。ポート＃０，＃１の抽出部５３２ａ，５３２ｂは、受信したループバックパケットがポート＃３から到着したものであるため、そのままそれぞれ出力キュー部５４１ａ，５４１ｂに転送する。そして、ポート＃０，＃１がそれぞれ有する折り返し部５３３ａ，５３３ｂは、ループバックパケットを折り返す。
【０２７９】
このように動作することで、入力側のポートで挿入したループバックパケットは、各出力側のポートの出力キュー部を経由してループバックパケットを挿入した入力側のポートへ戻ってくる。
【０２８０】
ポート＃３が有する抽出部５３２は、このループバックパケットを抽出する。出力ポート監視部５２４は、抽出部５３２によって抽出されたループバックパケットを監視することにより、このループバックパケットの応答時間の大小から、出力側のポートの輻輳状態や負荷の大小を推定する。
【０２８１】
以上に示すように、第５の実施の形態によれば、ループバックパケットを用いて出力側のポートの状態を監視することにより、新たな内部処理によるスイッチの負担の増加を軽減することができる。
【０２８２】
［第６の実施の形態］
次に、第６の実施の形態について説明する。上記の第５の実施の形態との相違点を中心に説明し、同様の事項については同一の符号を用いると共に説明を省略する。
【０２８３】
第５の実施の形態では、スイッチの入力側のポートから各出力側のポートに対してループバックパケットを送信し、出力側のポートで折り返されたループバックパケットの応答時間を計測することによって、輻輳状態およびポートの負荷の状態を推定する。
【０２８４】
これに対して、第６の実施の形態では、スイッチの入力側のポートから送信されたループバックパケットを、隣接するスイッチの入力側のポートで折り返し、折り返されたループバックパケットの応答時間を計測することによって、輻輳状態およびポートの負荷の状態を推定する点で、第１の実施の形態と異なる。
【０２８５】
図２７は、第６の実施の形態のスイッチの機能を示すブロック図である。図２７に示すように、本実施の形態のスイッチ６００は、複数のポートが集約された論理リンクであるＬＡＧにより、データが分割されたパケットを、通信路で接続された隣接するスイッチ６００ｃに転送する。スイッチ６００は、入力側のポートであるポート＃３、出力側のポートでありＬＡＧグループを構成するポート＃０，ポート＃１、スイッチ部６２３を有する。スイッチ６００ｃは、それぞれスイッチ６００のポート＃０、＃１と接続されている入力側のポートでありＬＡＧグループを構成するポート＃Ｐ，＃Ｑを有する。なお、スイッチ６００およびスイッチ６００ｃのポートの数およびＬＡＧの数はこれに限られない。
【０２８６】
スイッチ６００の入力側のポートであるポート＃３、スイッチ６００ｃの入力側のポートであるポート＃Ｐ，＃Ｑは、それぞれ振分部６２２，６２２ｐ、６２２ｑ、挿入部６３１，６３１ｐ，６３１ｑ、抽出部６３２，６３２ｐ，６３２ｑ、折り返し部６３３，６３３ｐ，６３３ｑ、出力キュー部６４１，６４１ｐ，６４１ｑを有する。また、ポート＃３は、出力ポート監視部６２４を有する。ポート＃Ｐ，＃Ｑは、同様に、図示しない出力ポート監視部を有する。
【０２８７】
また、スイッチ６００の出力側のポートであるポート＃０，＃１は、図２６に示した第５の実施の形態のスイッチ５００の出力側のポートであるポート＃０，＃１と同等の機能を有しており、それぞれ振分部６２２ａ，６２２ｂ、出力キュー部６４１ａ，６４１ｂ、図示しない出力ポート監視部、挿入部、抽出部、折り返し部を有する。
【０２８８】
なお、スイッチ６００，６００ｃは、図示しない入力部、出力部、出力先情報記憶部、振分管理情報記憶部、出力ポート情報記憶部を有する。また、各ポートの振分部は、図示しない出力先決定部、フロー識別部、振分先判定部を有する。
【０２８９】
データのパケットを入力する入力側のポートであるポート＃３から入力されたパケットは、振分部６２２による決定（または設定）に基づいて、出力側のポートであるポート＃０，＃１のいずれかに送信される。ポート＃３から送信されたパケットは、ポート＃０に到達した場合は、ポート＃０と通信路で接続されているポート＃Ｐに送信される。ポート＃１に到達した場合は、ポート＃１と通信路で接続されている＃Ｑに送信される。
【０２９０】
振分部６２２，６２２ａ，６２２ｂ，６２２ｐ，６２２ｑは、出力先情報記憶部に記憶されている出力先情報および振分管理情報記憶部に記憶されている振分管理情報を参照して、入力部によって入力されたフローのパケットが出力されるポートを決定する。
【０２９１】
振分部６２２，６２２ａ，６２２ｂ，６２２ｐ，６２２ｑは、入力部によって入力されたフローが出力されるポートを、ＬＡＧグループを構成するポート＃０，＃１のうちのいずれかに決定する。
【０２９２】
振分部６２２は、出力ポート監視部６２４から通知された監視結果に基づいて、各ポートの負荷の状況について異常が検出された場合、ポート＃３の入力部によって入力されたフローが出力されるポートである出力ポートを、出力ポート以外のポートであってＬＡＧグループを構成する各ポートの出力キュー部のそれぞれのバッファに蓄積されているデータの量と比較して、ポートに対応して設けられたバッファに蓄積されているデータの量が多いポートに変更する。振分部６２２ａ，６２２ｂ，６２２ｐ，６２２ｑも同様である。
【０２９３】
スイッチ部６２３は、各振分部の判断に基づいてパケットを出力側のポートに転送する。これにより、スイッチ６００に入力されたフローのパケットが、各振分部による設定に基づいて出力ポートから出力され、フローのデータが送信先に向かって中継される。
【０２９４】
出力ポート監視部６２４は、スイッチ６００が有する出力側の各ポートの輻輳状態、負荷の状態、障害の発生の有無等のトラフィック状態を監視するものである。出力ポート監視部６２４は、各出力キュー部６４１，６４１ａ，６４１ｂ，６４１ｐ，６４１ｑのそれぞれのバッファにおけるデータの蓄積状況を監視する。出力ポート監視部６２４は、各バッファの監視結果を、図示しない出力ポート情報記憶部に出力ポート情報として記憶させると共に、振分部６２２に通知する。
【０２９５】
出力ポート監視部６２４は、ループバックパケットが、挿入部６３１によって挿入されてから、隣接するスイッチ６００ｃのポート＃Ｐの折り返し部６３３ｐ、ポート＃Ｑの６３３ｑによって折り返され、抽出部６３２によって抽出されるまでの時間に基づいて、ポート＃０，＃Ｐの経路およびポート＃１，＃Ｑの経路のそれぞれの負荷の状況を監視する。
【０２９６】
また、出力ポート監視部６２４は、挿入部６３１で挿入されスイッチ６００ｃで折り返されて戻ってくるループバックパケットを監視して、ポート＃３からポート＃０，＃１および通信路を経由してスイッチ６００ｃで折り返され、通信路およびポート＃０，＃１を経由して再びポート＃３に戻ってくるまでの間における障害の発生を検出する。出力ポート監視部６２４は、例えば、ループバックパケットが一定時間検出されないことにより、上記の間の障害の発生を検出する。
【０２９７】
出力ポート監視部６２４は、ＬＡＧが有する各出力ポートの最新のキュー長（その出力ポートで出力を待っている状態のパケットのデータサイズの総量）を監視すると共に、各ポートの負荷を監視する。本実施の形態では、ポートの負荷は、このループバックパケットの応答時間を計測することによって求めるが、これに限らず、長期的な負荷を監視するために過去の負荷情報に重み付けを行って、加重平均で負荷を算出してもよい。ポート＃０，ポート＃１が有する出力ポート監視部も同様である。
【０２９８】
挿入部６３１は、スイッチ６００の内部においてループバックパケットを挿入する。挿入部６３１ｐ，６３１ｑは、スイッチ６００ｃの内部においてループバックパケットを挿入する。抽出部６３２，６３２ｐ，６３２ｑ、ポート＃０が有する抽出部、ポート＃１が有する抽出部は、自己が挿入し、隣接する他のスイッチで折り返されたループバックパケットを抽出する。折り返し部６３３，６３３ｐ，６３３ｑ、ポート＃０が有する折り返し部、ポート＃１が有する折り返し部は、他のスイッチによって挿入されたループバックパケットを、そのパケットの設定に基づいて折り返しまたは転送する。
【０２９９】
出力キュー部６４１，６４１ａ，６４１ｂ，６４１ｐ，６４１ｑは、各ポートから出力されるデータを蓄積するバッファを有していると共に、スイッチ６００が有する各ポートに対応して設けられており、データ送信の品質制御およびスイッチ６００が有する入力側の各ポート（例えば、ポート＃３）から同時に入力されたパケットの待ち合わせ等を行う。出力キュー部６４１，６４１ａ，６４１ｂ，６４１ｐ，６４１ｑが有するそれぞれのバッファは、先入れ先出し方式によってデータが読み出される。出力キュー部６４１，６４１ａ，６４１ｂ，６４１ｐ，６４１ｑは、蓄積部として機能する。
【０３００】
入力部は、他のスイッチ、端末装置、情報処理装置等の通信機能を有する装置とＬＡＧおよびその他の方式の通信路によって接続可能である。
出力先情報記憶部は、出力先テーブル１５１ａ（図６において前述）として出力先情報を記憶している。出力先情報は、ＬＡＧ等によりフローのパケットが出力され得るポートを示す情報である。
【０３０１】
振分管理情報記憶部は、振分管理テーブル１５２ａ（図７において前述）として振分管理情報を記憶している。振分管理情報は、各フローのパケットについて振分先判定部で決定された出力ポートを示す情報である。
【０３０２】
出力ポート情報記憶部は、出力ポートテーブル１５３ａ（図８において前述）として出力ポート情報を記憶している。出力ポート情報は、各ポートの出力側のバッファのキュー長、出力側の通信路の輻輳状態および障害の発生の有無等を示す情報である。
【０３０３】
本実施の形態では、スイッチ６００ｃの入力側のポート＃Ｐ，＃Ｑのそれぞれの入り口でループバックパケットを折り返す。入力側のポート＃３の挿入部６３１は、定期的にポート＃Ｐ，＃Ｑ宛にループバックパケットを送信する。このループバックパケットはスイッチ部６２３、ポート＃０，＃１および通信路を経由してポート＃Ｐ，＃Ｑに転送される。
【０３０４】
抽出部６３２ｐ，６３２ｑ、ポート＃０，＃１が有する抽出部は、自身が送信したループバックパケットを抽出し、それ以外のパケットは転送する。次に、抽出部６３２ｐ，６３２ｑ、ポート＃０，＃１が有する抽出部は、このループバックパケットを受信するが、このループバックパケットは、ポート＃３から到着したものである。従って、ループバックパケットは、抽出部６３２ｐ，６３２ｑ、ポート＃０，＃１が有する抽出部により、そのままそれぞれ出力キュー部６４１ｐ，６４１ｑに転送される。そして、ポート＃Ｐ，＃Ｑが有する折り返し部６３３ｐ，６３３ｑは、ポート＃３から送信されたループバックパケットを折り返す。
【０３０５】
このように動作することで、入力側のポートで挿入したループバックパケットは、各出力側のポートの出力キュー部および隣接するスイッチの入力側のポートを経由してループバックパケットを挿入した入力側のポートへ戻ってくる。
【０３０６】
ポート＃３が有する抽出部６３２は、このループバックパケットを抽出する。出力ポート監視部６２４は、抽出部６３２によって抽出されたループバックパケットを監視することにより、このループバックパケットの応答時間の大小から、出力側のポートおよび入力側のポートならびにこれらのポートの間の通信路の輻輳状態や負荷の大小を推定する。
【０３０７】
以上に示すように、第６の実施の形態によれば、ループバックパケットを用いて出力側のポートの状態を監視することにより、新たな内部処理によるスイッチの負担の増加を軽減することができる。
【０３０８】
また、隣接するスイッチとの間でループバックパケットが送信されるので、隣接するスイッチとの間の通信路における障害の発生等の状態の変化も監視することができる。
［第７の実施の形態］
次に、第７の実施の形態について説明する。上記の第１の実施の形態との相違点を中心に説明し、同様の事項については同一の符号を用いると共に説明を省略する。
【０３０９】
第７の実施の形態では、各出力キュー部に複数種類のフローに対応するキュー（例えば、品質クラス毎のキュー）を有する点で、第１の実施の形態と異なる。
図２８は、第７の実施の形態のスイッチの機能を示すブロック図である。図２８に示すように、本実施の形態のスイッチ７００は、複数のポートが集約された論理リンクであるＬＡＧにより、データが分割されたパケットを転送する。スイッチ７００は、入力部７２１、振分部７２２、スイッチ部７２３、出力ポート監視部７２４、出力部７４０、出力先情報記憶部７５１、振分管理情報記憶部７５２、出力ポート情報記憶部７５３を有する。また、振分部７２２は、出力先決定部７２２ａ、フロー識別部７２２ｂ、振分先判定部７２２ｃを有する。また、出力部７４０は、出力ポート毎に対応付けられた出力キュー部７４１ａ，７４１ｂ，７４１ｃ，・・・を有する。
【０３１０】
入力部７２１は、他のスイッチ、端末装置、情報処理装置等の通信機能を有する装置とＬＡＧおよびその他の方式の通信路によって接続可能である。入力部７２１は、入力側のポート（例えば、ポート＃３）を有し、他の装置から送信された、他のスイッチおよび端末装置等の通信装置に転送されるフローの分割されたデータ等のパケットが入力される。
【０３１１】
本実施の形態のデータには、フロー毎に複数の優先度のうちの１つの優先度が設定されている。本実施の形態のスイッチ７００は、このフローの優先度に基づいて、優先度が高いフローのデータを先に出力し、優先度が低いフローのデータを後に出力することで、品質クラスを制御する。
【０３１２】
振分部７２２は、出力先情報記憶部７５１に記憶されている出力先情報および振分管理情報記憶部７５２に記憶されている振分管理情報を参照して、入力部７２１によって入力されたフローのパケットが出力されるポートを決定する。
【０３１３】
振分部７２２は、入力部７２１によって入力されたフローが出力されるポートを、ＬＡＧグループを構成するポート＃０，＃１，＃２，・・・のうちのいずれかに決定する。また、振分部７２２は、出力ポート監視部７２４から通知された監視結果に基づいて、各ポートの負荷の状況について異常が検出された場合、入力部７２１によって入力されたフローが出力されるポートである出力ポートを、出力ポート以外のポートであってＬＡＧグループを構成する各ポートの出力キュー部のそれぞれのバッファに蓄積されているデータの量と比較して、ポートに対応して設けられたバッファに蓄積されているデータの量が多いポートに変更する。
【０３１４】
このとき振分部７２２は、出力ポート監視部７２４による監視結果であるフローに対するポートの負荷に基づいて、入力部７２１によって入力されたフローが出力されるポートを、フローが出力されている出力ポートよりも出力キュー部のバッファにフローの優先度毎に蓄積されているデータの量が多いポートに変更する。
【０３１５】
出力先決定部７２２ａは、入力部７２１に入力されたフローのパケットのヘッダ情報と、ＭＡＣアドレスの学習結果から生成された出力先情報記憶部７５１に記憶されている出力先情報に基づいて、パケットが出力され得るポートを決定するものである。なお、出力先決定部７２２ａは、ＭＡＣアドレスの学習に替えて、ＩＰアドレスおよびルーティングプロトコルに基づいてパケットが出力され得るポートを決定してもよい。
【０３１６】
この出力先決定部７２２ａは、入力されたフローのパケットの宛先ＭＡＣアドレスに基づいて、各フローのパケットの出力ポートを特定する。すなわち、出力先決定部７２２ａは、入力されたフローのパケットに含まれるＭＡＣアドレスを抽出する。このとき、入力されたフローのパケットのＭＡＣアドレスが、出力先情報によって、当該フローのパケットの出力と対応づけられている。これを用いて、スイッチ７００は、入力されたフローのパケットのＭＡＣアドレスから、出力先情報で対応付けられた出力ポートを取得する。
【０３１７】
また、入力されたフローの出力先がＬＡＧの場合は、その出力先情報において、ＬＡＧで送信されるフローのパケットのＭＡＣアドレスに対してさらにＬＡＧで送信される旨を示す情報を設定することで、そのフローのパケットの出力先としてＬＡＧで出力されることおよび出力されるＬＡＧグループを指定することができる。これに従い、出力先決定部７２２ａは、そのフローのパケットの宛先を、指定されたＬＡＧグループに決定する。
【０３１８】
フロー識別部７２２ｂは、ＬＡＧの運用時に入力されたパケットのヘッダ情報からフロー識別子を生成し、フローを特定する。
また、フロー識別部７２２ｂは、入力されたフローのパケットのヘッダ情報に基づいてハッシュ演算を行うことにより、フロー識別子を生成する。このとき、フロー識別部７２２ｂは、パケットからヘッダ情報を抽出し、抽出されたヘッダ情報を用いてハッシュ演算を行う。
【０３１９】
ここで、ヘッダ情報とは、パケットの例えば先頭部分等の、パケットの一部分を構成する情報であり、例えば、パケットに含まれている各種のアドレスを用いることができる。ヘッダ情報として用いるアドレスとは、パケットの送信元の端末装置（または送信元の端末装置が属する集合）や宛先の端末装置（または宛先の端末装置が属する集合）を特定するための情報である。ヘッダ情報は、例えば、送信元／宛先のＭＡＣアドレス、送信元／宛先のＩＰアドレス等である。
【０３２０】
振分先判定部７２２ｃは、振分管理情報を参照して、フロー識別部７２２ｂによって計算されたハッシュ値に基づいてパケットが出力されるポートを決定する。
また、振分先判定部７２２ｃは、ＬＡＧの運用時にＬＡＧグループ内の複数のポートの帯域を効率的に利用するために、後述する出力ポート監視部７２４によるポートの監視結果に基づいて送出先のＬＡＧが有する出力ポートを設定する。
【０３２１】
スイッチ部７２３は、振分部７２２の判断に基づいてパケットを出力ポートに転送する。これにより、スイッチ７００に入力されたフローのパケットが、振分部７２２による設定に基づいて出力部７４０が有する出力ポートから出力され、フローのデータが送信先に向かって中継される。
【０３２２】
出力ポート監視部７２４は、スイッチ７００の出力部７４０が有する各ポートの輻輳状態、負荷の状態、障害の発生の有無等のトラフィック状態を監視するものである。出力ポート監視部７２４は、各出力キュー部７４１ａ，７４１ｂ，７４１ｃ，・・・のそれぞれのバッファにおけるデータの蓄積状況を監視する。出力ポート監視部７２４は、各バッファの監視結果を、出力ポート情報記憶部７５３に出力ポート情報として記憶させると共に、振分部７２２に通知する。
【０３２３】
このとき出力ポート監視部７２４は、ＬＡＧが有する各出力ポートの最新のキュー長（その出力ポートで出力を待っている状態のパケットのデータサイズの総量）を監視すると共に、各ポートの負荷を監視する。本実施の形態では、ポートの負荷は、一定時間内にそれぞれの出力キュー部に入力されたパケットの総データ量で求めるが、これに限らず、長期的な負荷を監視するために過去の負荷情報に重み付けを行って、加重平均で負荷を算出してもよい。
【０３２４】
出力ポート監視部７２４は、入力部７２１が有するポート＃３から入力されたフローの出力ポートにおけるフローのデータと同一の優先度のデータの蓄積量と優先度が高いデータの蓄積量との合計量を示す情報を、フローのデータに対するポートの負荷として監視結果とする。このとき、出力ポート監視部７２４は、データの優先度および出力されるポートが同一であるもの毎にポートの出力キュー部が有するバッファにおける蓄積量を監視する。
【０３２５】
出力部７４０は、データを出力する複数のポート＃０，＃１，＃２，・・・と、ポート＃０，＃１，＃２，・・・のそれぞれに対応して設けられており、それぞれのポート＃０，＃１，＃２，・・・から出力されるデータをフローの優先度毎に蓄積するバッファを有する出力キュー部７４１ａ，７４１ｂ，７４１ｃ，・・・を有する。
【０３２６】
また、出力部７４０は、出力ポート監視部７２４による監視の結果、ポートの負荷の状況について異常が検出された場合において、フローが出力されている出力ポートよりも出力キュー部７４１ａ，７４１ｂ，７４１ｃ，・・・のバッファに蓄積されているデータであってそのフローの優先度と同等以上の優先度を持つデータの量が多いポートが存在しないとき、フローが出力されている出力ポート以外のポートであって、出力ポート監視部７２４による監視結果に基づいて負荷が最も小さいポートの出力を停止させる。
【０３２７】
出力キュー部７４１ａ，７４１ｂ，７４１ｃ，・・・は、出力部７４０が有する各ポートに対応して設けられており、データ送信の品質制御およびスイッチ７００の入力部７２１が有する入力側の各ポート（例えば、ポート＃３）から同時に入力されたパケットの待ち合わせ等を行う。出力キュー部７４１ａ，７４１ｂ，７４１ｃ，・・・が有するそれぞれのバッファは、フローの優先度毎に先入れ先出し方式によってデータが読み出される。出力キュー部７４１ａ，７４１ｂ，７４１ｃ，・・・は、蓄積部として機能する。
【０３２８】
出力先情報記憶部７５１は、出力先テーブル１５１ａ（図６において前述）として出力先情報を記憶している。出力先情報は、ＬＡＧ等によりフローのパケットが出力され得るポートを示す情報である。
【０３２９】
振分管理情報記憶部７５２は、振分管理テーブル１５２ａ（図７において前述）として振分管理情報を記憶している。振分管理情報は、各フローのパケットについて振分先判定部７２２ｃで決定された出力ポートを示す情報である。
【０３３０】
出力ポート情報記憶部７５３は、出力ポートテーブル１５３ａ（図８において前述）として出力ポート情報を記憶している。出力ポート情報は、各ポートの出力側のバッファのキュー長、出力側の通信路の輻輳状態および障害の発生の有無等を示す情報である。
【０３３１】
次に、本実施の形態のスイッチの動作について説明する。
図２９は、第７の実施の形態において、入力されたフローの途中でパケットの出力ポートが変更されるときのスイッチの状態を示す図である。
【０３３２】
図２９に示すように、本実施の形態では、ポート＃０，＃１，＃２によってＬＡＧが組まれており、ポート毎にクラス＃０、クラス＃１、クラス＃２の３つの優先度（品質クラス）のバッファを有するものとする。この優先度は、クラス＃０が最も優先度が高く（常に出力される）、次いでクラス＃１の優先度が高く（クラス＃０のパケットが蓄積されていない場合に出力される）、クラス＃２の優先度が最も低い（クラス＃０およびクラス＃１のパケットが蓄積されていない場合に出力される）ものとする。なお、本実施の形態では、優先度はクラス＃０〜クラス＃２の３段階が設定されているが、優先度の段階の数は必ずしも３に限られない。
【０３３３】
ポート＃０は、クラス＃０のフローのパケットが蓄積されるバッファ７４１ａ０、クラス＃１のフローのパケットが蓄積されるバッファ７４１ａ１、クラス＃２のフローのパケットが蓄積されるバッファ７４１ａ２を有する。ポート＃１は、クラス＃０のフローのパケットが蓄積されるバッファ７４１ｂ０、クラス＃１のフローのパケットが蓄積されるバッファ７４１ｂ１、クラス＃２のフローのパケットが蓄積されるバッファ７４１ｂ２を有する。ポート＃２は、クラス＃０のフローのパケットが蓄積されるバッファ７４１ｃ０、クラス＃１のフローのパケットが蓄積されるバッファ７４１ｃ１、クラス＃２のフローのパケットが蓄積されるバッファ７４１ｃ２を有する。
【０３３４】
そして、現在あるクラス＃１のフローの出力ポートがポート＃０に設定されている状態で、そのフローの後続パケットがスイッチ７００に入力されたときに、出力ポートであるポート＃０が輻輳状態であったものとする。また、ポート＃１，＃２の負荷はポート＃０よりも低いものとする。
【０３３５】
このとき、第１の実施の形態と同様、入力されたフローの出力ポート（上記のように現在はポート＃０に設定されている）が他のポートに変更されることになる。この変更先のポートは、次のように選択される。
【０３３６】
本実施の形態の出力ポート監視部７２４（図２８において前述）では、各ポートについて、入力されたフローの優先度と同一の優先度のバッファに蓄積されているキュー長と、入力されたフローよりも優先度が高いバッファに蓄積されているキュー長の総和に基づいて、各ポートのバッファに蓄積されているキュー長の判定を行う。
【０３３７】
例えば、図２９の例では、フローの優先度がクラス＃１のため、出力ポート監視部７２４は、各ポートについて優先度がクラス＃０のバッファのキュー長とクラス＃１のバッファのキュー長の総和を求める。すなわち、輻輳状態である現在の出力ポートのポート＃０のクラス＃１以上の優先度のバッファのキュー長は、７０（クラス＃０のバッファ７４１ａ０のキュー長）＋８０（クラス＃１のバッファ７４１ａ１のキュー長）＝１５０（ＭＢｙｔｅ）となる。
【０３３８】
変更先の出力ポートの候補であるポート＃１，＃２についても同様の算出を行ってクラス＃１以上の優先度のバッファのキュー長を算出すると、ポート＃１が１３０（ＭＢｙｔｅ）となり、ポート＃２が１７０（ＭＢｙｔｅ）となる。出力ポート監視部７２４は、この算出結果を各ポートの監視結果として振分部７２２に通知する。
【０３３９】
振分部７２２は、出力ポート監視部７２４から通知されたこの監視結果に基づいて、第１の実施の形態と同様、振分判定処理（図１０および図１１において前述）を実行して、現在の出力ポート（ポート＃０）のキュー長（１５０）よりもキュー長（１７０）が大きいポート＃２を、新たな出力ポートとして選択する。
【０３４０】
以上に示すように、第７の実施の形態によれば、入力される各フローに品質保証における優先度が設定されており、優先度が高いフローのパケットから先に出力される場合に有用である。
【０３４１】
以上、開示の通信装置および通信制御方法を、図示の実施の形態に基づいて説明したが、各部の構成は同様の機能を有する任意の構成のものに置換することができる。また、開示の技術に他の任意の構成物や工程が付加されてもよい。また、開示の技術は前述した実施の形態のうちの任意の２以上の構成を組み合わせたものであってもよい。
【０３４２】
上記については単に本発明の原理を示すものである。さらに、多数の変形、変更が当業者にとって可能であり、開示の技術は上記に示し、説明した正確な構成および応用例に限定されるものではなく、対応するすべての変形例および均等物は、添付の請求項およびその均等物による本発明の範囲とみなされる。
【０３４３】
（付記１）  分割されたデータを複数の物理リンクが集約された論理リンクで転送する通信装置において、
分割されたデータを複数有するフローが入力される入力部と、
前記データを出力する複数の物理リンクと、前記物理リンクのそれぞれに対応して設けられており、それぞれの前記物理リンクから出力される前記データを蓄積する蓄積部とを有する出力部と、
各前記蓄積部における前記データの蓄積状況を監視するリンク監視部と、
前記リンク監視部による前記蓄積状況の監視結果に基づいて、前記入力部によって入力された前記データが出力される前記物理リンクを、前記フローが出力されている前記物理リンクよりも対応する前記蓄積部に蓄積されている前記データの量が多い前記物理リンクに変更する振分部と、を有することを特徴とする通信装置。
【０３４４】
（付記２）  前記リンク監視部は、前記出力部が有する各前記物理リンクの負荷の状況を監視し、
前記振分部は、前記リンク監視部による監視の結果、各前記物理リンクの前記負荷の状況について異常が検出された場合、前記蓄積状況の監視結果に基づいて、前記入力部によって入力された前記フローが出力される前記物理リンクを、前記フローが出力されている前記物理リンクよりも前記蓄積部に蓄積されている前記データの量が多い前記物理リンクに変更することを特徴とする付記１記載の通信装置。
【０３４５】
（付記３）  前記振分部は、前記入力部によって入力された前記フローが出力される前記物理リンクを、前記フローが出力されている前記物理リンクよりも前記蓄積部に蓄積されている前記データの量が多く、かつ、前記蓄積部に所定量以上の空きがある前記物理リンクに変更することを特徴とする付記１記載の通信装置。
【０３４６】
（付記４）  前記リンク監視部は、前記出力部が有する各前記物理リンクの負荷の状況を監視し、
前記出力部は、前記リンク監視部による監視の結果、前記物理リンクの前記負荷の状況について異常が検出された場合において、前記フローが出力されている前記物理リンクよりも前記蓄積部に蓄積されている前記データの量が多い前記物理リンクが存在しないとき、前記入力部によって入力された前記フローが出力される前記物理リンクを、前記フローが出力されている前記物理リンク以外の１つの前記物理リンクの出力を停止させることを特徴とする付記１記載の通信装置。
【０３４７】
（付記５）  前記振分部は、前記フローが出力される前記物理リンクを、前記フローの前記データが出力されている前記物理リンクよりも前記蓄積部に蓄積されている前記データの量が多い前記物理リンクのうち、前記蓄積部の前記フローが出力されている前記物理リンクの前記蓄積部に蓄積されている蓄積量との差分が最も小さい前記物理リンクに変更し、変更した前記物理リンクから出力される前記データの出力を前記差分に応じて遅延させることを特徴とする付記１記載の通信装置。
【０３４８】
（付記６）  前記リンク監視部は、各前記物理リンクを監視することにより前記物理リンクの障害の発生を検出し、
前記振分部は、前記リンク監視部による監視結果に基づいて、前記入力部によって入力された前記フローが出力される前記物理リンクを、障害の発生が検出されている前記物理リンク以外の前記物理リンクに変更することを特徴とする付記１記載の通信装置。
【０３４９】
（付記７）  前記振分部は、所定の時間内に前記入力部によって入力された前記フローが出力される前記物理リンクを変更した回数が所定の回数を超えている場合には、前記物理リンクを変更しないことを特徴とする付記１記載の通信装置。
【０３５０】
（付記８）  前記データのパケットを入力する入力側の前記物理リンクである入力側物理リンクと、
入力された前記パケットを出力する出力側の前記物理リンクである出力側物理リンクと、を有し、
前記入力側物理リンクは、
ループバックパケットを挿入する挿入部と、
前記ループバックパケットを抽出する抽出部と、を有し、
前記出力側物理リンクは、前記挿入部によって挿入された前記ループバックパケットを折り返す折り返し部を有し、
前記リンク監視部は、前記ループバックパケットが、前記挿入部によって挿入されてから、前記出力側物理リンクが有する前記折り返し部によって折り返され、前記抽出部によって抽出されるまでの時間に基づいて前記物理リンクの負荷の状況を監視することを特徴とする付記２記載の通信装置。
【０３５１】
（付記９）  前記データのパケットを入力する入力側の前記物理リンクである入力側物理リンクと、
入力された前記パケットを出力する出力側の前記物理リンクである出力側物理リンクと、を有し、
前記出力側物理リンクは、前記入力側物理リンクから入力された前記パケットを他の通信装置に送信し、
前記入力側物理リンクは、
ループバックパケットを挿入する挿入部と、
前記ループバックパケットを抽出する抽出部と、を有し、
前記リンク監視部は、前記ループバックパケットが、前記挿入部によって挿入されてから、他の通信装置によって折り返され、前記抽出部によって抽出されるまでの時間に基づいて前記物理リンクの負荷の状況を監視することを特徴とする付記２記載の通信装置。
【０３５２】
（付記１０）  前記データにはそれぞれ複数の優先度のうちの１つの優先度が設定されており、
前記リンク監視部は、前記データの前記優先度および出力される前記物理リンクが同一であるもの毎に前記物理リンクが有する前記蓄積部における蓄積量を監視し、前記入力部から入力された前記フローの前記データが出力される前記物理リンクにおける前記フローの前記データと同一の前記優先度の前記データの蓄積量と前記優先度が高い前記データの蓄積量との合計量を示す情報を、前記フローの前記データに対する前記物理リンクの前記負荷として前記監視結果とし、
前記振分部は、前記リンク監視部による前記監視結果である前記フローに対する前記物理リンクの前記負荷に基づいて、前記入力部によって入力された前記フローが出力される前記物理リンクを、前記フローが出力されている前記物理リンクよりも前記蓄積部に蓄積されている前記データの量が多い前記物理リンクに変更することを特徴とする付記２記載の通信装置。
【０３５３】
（付記１１）  前記リンク監視部は、前記物理リンクの前記蓄積部における蓄積量と前記データを出力する速度とに応じて前記物理リンクの前記負荷を評価し、前記物理リンクの前記負荷の評価結果を示す負荷情報を出力することを特徴とする付記２記載の通信装置。
【０３５４】
（付記１２）  前記リンク監視部は、前記物理リンクの前記蓄積部における蓄積量を前記物理リンクが前記データを出力する速度で除算した結果によって前記物理リンクの前記負荷を示す前記負荷情報を出力することを特徴とする付記１１記載の通信装置。
【０３５５】
（付記１３）  前記フローと、前記フローが有する前記データが出力される前記物理リンクと、前記フローが有する前記データが前記入力部に対して最後に入力された時刻と、を対応付けて示す振分管理情報を記憶する振分管理情報記憶部を有し、
前記振分部は、
前記振分管理情報記憶部に記憶されている前記振分管理情報に基づいて、前記フローが有する前記データを出力する前記物理リンクを決定し、
前記振分管理情報記憶部に記憶されている前記振分管理情報に基づいて、前記フローが有する前記データが前記入力部に対して最後に入力された前記時刻を取得し、取得した前記時刻から一定時間経過している場合には、前記フローの前記振分管理情報を削除することを特徴とする付記１記載の通信装置。
【０３５６】
（付記１４）  前記出力部は、前記リンク監視部による監視の結果、前記物理リンクの前記負荷の状況について異常が検出された場合において、前記フローが出力されている前記物理リンクよりも前記蓄積部に蓄積されている前記データの量が多い前記物理リンクが存在しないとき、前記フローが出力されている前記物理リンク以外の前記物理リンクであって、前記リンク監視部による監視結果に基づいて前記負荷が最も小さい前記物理リンクの出力を停止させることを特徴とする付記４記載の通信装置。
【０３５７】
（付記１５）  前記蓄積部は、先入れ先出し方式によって前記データが読み出されることを特徴とする付記１記載の通信装置。
（付記１６）  分割されたデータを複数の物理リンクが集約された論理リンクで転送する通信を制御する通信制御方法において、
フローが複数に分割されたデータを出力する複数のそれぞれに対応して設けられており、それぞれの前記物理リンクから出力される前記データを蓄積する蓄積部における分割されたデータの蓄積状況を監視し、
前記蓄積状況の監視結果に基づいて、分割された前記データを複数有するフローが入力された前記データが出力される前記物理リンクを、前記フローが出力されている前記物理リンクよりも対応する前記蓄積部に蓄積されている前記データの量が多い前記物理リンクに変更することを特徴とする通信制御方法。
【符号の説明】
【０３５８】
１  通信装置
１１  入力部
１２  振分部
１３  リンク監視部
１４  出力部
１４ａ，１４ｂ，１４ｃ  蓄積部
【図１】
2010171562.tif 000003
【図２】
2010171562.tif 000004
【図３】
2010171562.tif 000005
【図４】
2010171562.tif 000006
【図５】
2010171562.tif 000007
【図６】
2010171562.tif 000008
【図７】
2010171562.tif 000009
【図８】
2010171562.tif 000010
【図９】
2010171562.tif 000011
【図１０】
2010171562.tif 000012
【図１１】
2010171562.tif 000013
【図１２】
2010171562.tif 000014
【図１３】
2010171562.tif 000015
【図１４】
2010171562.tif 000016
【図１５】
2010171562.tif 000017
【図１６】
2010171562.tif 000018
【図１７】
2010171562.tif 000019
【図１８】
2010171562.tif 000020
【図１９】
2010171562.tif 000021
【図２０】
2010171562.tif 000022
【図２１】
2010171562.tif 000023
【図２２】
2010171562.tif 000024
【図２３】
2010171562.tif 000025
【図２４】
2010171562.tif 000026
【図２５】
2010171562.tif 000027
【図２６】
2010171562.tif 000028
【図２７】
2010171562.tif 000029
【図２８】
2010171562.tif 000030
【図２９】
2010171562.tif 000031