(57)【特許請求の範囲】
【請求項１】
受信したフレームを格納するバッファと、
受信したフレームを前記バッファに格納すると当該受信したフレームの通信種別に一致する通信種別のフレームによる前記バッファの使用量が当該通信種別について設定されている閾値を超えるか判断し、超えると判断した場合には当該受信したフレームを廃棄する廃棄部と、
少なくとも２以上の時点について通信種別毎に前記バッファの使用量を算出し、前記バッファの使用量の変化を表す数値を通信種別毎に算出する第１算出部と、
前記バッファの使用量の変化を表す数値に基づき、通信種別毎に前記閾値を算出し、前記廃棄部に対して設定する設定部と、
を有し、
前記設定部が、前記バッファの使用量が増加している通信種別について、当該通信種別について既に設定されている閾値よりも小さい閾値を算出し、前記バッファの使用量が減少している通信種別について、当該通信種別について既に設定されている閾値以上の閾値を算出する
中継装置。
【請求項２】
受信したフレームを格納するバッファと、
受信したフレームを前記バッファに格納すると当該受信したフレームの通信種別に一致する通信種別のフレームによる前記バッファの使用量が当該通信種別について設定されている閾値を超えるか判断し、超えると判断した場合には当該受信したフレームを廃棄する廃棄部と、
少なくとも２以上の時点について通信種別毎に前記バッファの使用量を算出し、前記バッファの使用量の変化を表す数値を通信種別毎に算出する第１算出部と、
前記バッファの使用量の変化を表す数値に基づき、通信種別毎に前記閾値を算出し、前記廃棄部に対して設定する設定部と、
前記バッファの使用量の変化を表す数値に基づき、送信の優先度を通信種別毎に算出する第２算出部と、
前記送信の優先度に基づき、前記バッファに格納されているフレームの送信スケジュールを決定する決定部と、
を有する中継装置。
【請求項３】
少なくとも２以上の時点について通信種別毎にバッファの使用量を算出し、前記バッファの使用量の変化を表す数値を通信種別毎に算出し、
前記バッファの使用量の変化を表す数値に基づき、フレーム廃棄のための閾値を通信種別毎に算出し、
受信したフレームを前記バッファに格納すると当該受信したフレームの通信種別と一致する通信種別のフレームによる前記バッファの使用量が当該受信したフレームの通信種別について設定されている閾値を超える場合、当該受信したフレームを廃棄する
処理を、コンピュータに実行させ、
前記閾値を通信種別毎に算出する処理において、
前記バッファの使用量が増加している通信種別について、当該通信種別について既に設定されている閾値より小さい閾値を算出し、前記バッファの使用量が減少している通信種別について、当該通信種別について既に設定されている閾値以上の閾値を算出する
プログラム。
【請求項４】
少なくとも２以上の時点について通信種別毎にバッファの使用量を算出し、前記バッファの使用量の変化を表す数値を通信種別毎に算出し、
前記バッファの使用量の変化を表す数値に基づき、フレーム廃棄のための閾値を通信種別毎に算出し、
受信したフレームを前記バッファに格納すると当該受信したフレームの通信種別と一致する通信種別のフレームによる前記バッファの使用量が当該受信したフレームの通信種別について設定されている閾値を超える場合、当該受信したフレームを廃棄する
処理を、コンピュータが実行し、
前記閾値を通信種別毎に算出する処理において、
前記バッファの使用量が増加している通信種別について、当該通信種別について既に設定されている閾値より小さい閾値を算出し、前記バッファの使用量が減少している通信種別について、当該通信種別について既に設定されている閾値以上の閾値を算出する
制御方法。
【請求項５】
少なくとも２以上の時点について通信種別毎にバッファの使用量を算出し、前記バッファの使用量の変化を表す数値を通信種別毎に算出し、
前記バッファの使用量の変化を表す数値に基づき、フレーム廃棄のための閾値を通信種別毎に算出し、
受信したフレームを前記バッファに格納すると当該受信したフレームの通信種別と一致する通信種別のフレームによる前記バッファの使用量が当該受信したフレームの通信種別について設定されている閾値を超える場合、当該受信したフレームを廃棄し、
前記バッファの使用量の変化を表す数値に基づき、送信の優先度を通信種別毎に算出し、
前記送信の優先度に基づき、前記バッファに格納されているフレームの送信スケジュールを決定する
処理を、コンピュータに実行させるためのプログラム。
【請求項６】
少なくとも２以上の時点について通信種別毎にバッファの使用量を算出し、前記バッファの使用量の変化を表す数値を通信種別毎に算出し、
前記バッファの使用量の変化を表す数値に基づき、フレーム廃棄のための閾値を通信種別毎に算出し、
受信したフレームを前記バッファに格納すると当該受信したフレームの通信種別と一致する通信種別のフレームによる前記バッファの使用量が当該受信したフレームの通信種別について設定されている閾値を超える場合、当該受信したフレームを廃棄し、
前記バッファの使用量の変化を表す数値に基づき、送信の優先度を通信種別毎に算出し、
前記送信の優先度に基づき、前記バッファに格納されているフレームの送信スケジュールを決定する
処理を、コンピュータが実行する制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、中継装置におけるバッファの管理技術に関する。
【背景技術】
【０００２】
情報システムの運用及び管理の簡素化等を目的として、異なる特性を持つネットワークを統合することがある。以下では、複数のネットワークを統合することにより構築されたネットワークを統合ネットワークと呼ぶ。
【０００３】
近年では、例えばＬＡＮ（Local Area Network）とＳＡＮ（Storage Area Network）との統合が行われている。但し、ＬＡＮとＳＡＮとを統合するにあたっては、基盤となる技術が異なることが問題となる。例えば、ＬＡＮにおいて標準的に使用される規格はイーサネット（Ethernet）（登録商標である）であり、ＳＡＮにおいて標準的に使用される規格はファイバーチャネル（Fibre Channel）である。そこで、ＬＡＮとＳＡＮとの統合にあたっては、例えばＦＣｏＥ（Fibre Channel over Ethernet）及びＤＣＢ（Data Center Bridging）等の技術が利用される。
【０００４】
ＬＡＮとＳＡＮとの統合により構築された統合ネットワークにおいては、フレームの欠落に対する許容度が異なる複数種別の通信が行われることがある。例えばＦＣｏＥには、フレームが欠落するとストレージアクセスの性能が極端に低下するという特性がある。一方、動画や音声のストリーミングには、ある程度のフレームの欠落は許容されるが、欠落が著しいと動画や音声が途中で途切れるなど、品質が劣化するという特性がある。また、サーバ間の通信で利用されるＴＣＰ（Transmission Control Protocol）には、フレームが欠落しても再送を行う仕組みがある。
【０００５】
従来、中継装置におけるフレームの欠落を防止するための技術として、Ｐａｕｓｅフレームを利用したフロー制御が知られている。この技術では、ネットワークスイッチが保持するバッファの使用量が上限に近くなり、これ以上フレームを受信するとフレームの欠落が発生する可能性がある場合に、フレームの送信元に対してＰａｕｓｅフレームを送信し、フレームの送信を停止させる。この技術では、送信元の装置がポート毎に送信を停止するため、欠落を許容するフレームの送信までも停止されることがあるという問題がある。
【０００６】
一方、ＤＣＢで規定されるＰＦＣ（Priority-based Flow Control）では、イーサネットで規定される８種類のプライオリティ毎にフロー制御を行うため、フレームの欠落に弱い通信種別（フローとも呼ばれる）のみフレームの送信を停止することができる。しかし、単純にこのような制御を行うと、特定のフローのみが頻繁に送信停止されてしまうことがある。
【０００７】
フロー制御に関しては、ポート毎に送信停止時間を定める従来技術も存在する。しかし、この技術は、フロー制御を行うか否かを判断する基準が単純であるため、フロー制御を適切に行えない場合がある。
【０００８】
また、フロー毎にバッファの使用制限を設け、制限を超えた場合にフレームを廃棄するＥＰＤ（Early Packet Drop：早期パケット廃棄）という従来技術が存在する。この技術によれば、特定のフローのフレームがバッファを占有することで他のフローのフレームの通過を妨げたり、例えばＷＲＲ（Weighted Round Robin）やＥＴＳ（Enhanced Transmission Selection）等による帯域制御を妨げる事態（すなわちＨＯＬブロッキング（Head-Of-Line Blocking））を回避することができる。
【０００９】
しかし、ＥＰＤにおいては、フレーム廃棄のための閾値を適切に設定しなければ、バッファ溢れの防止と帯域保証とを両立することが難しい。例えば、閾値を大きくするとバッファが溢れやすくなるのに対し、閾値を小さくするとＥＰＤが有効であるフローのフレーム廃棄が起きやすくなり、著しい性能低下を引き起こす場合がある。
【００１０】
ＥＰＤに関しては、共通バッファの使用を監視し、フレームの到着時点でのバッファの使用量に基づいて閾値を決める技術がある。しかし、このような技術では適切な制御を行えない場合がある。例えば、バッファの使用量は多いものの、通信は輻輳無く行われているフローがある場合には、本来は下げるべきでないのに閾値を下げてしまうことになる。
【００１１】
また、送信バッファと受信バッファとの間にスプールメモリを設け、各ポートに対して割り当てるスプールメモリ内のバッファ数を、各ポートの通信状況（バッファの使用率）によって決定する従来技術が存在する。しかし、この技術では、ある時点におけるバッファの使用率に基づいて割り当てるバッファ数を決定するため、上記従来技術と同様の問題が生じうる。
【００１２】
また、バッファ内パケット数の増減数に基づき将来のバッファ内パケット数の増減数を予測し、この予測値に基づいてバッファオーバーフロー検出のための閾値を決定する技術が存在する。しかし、この技術は、ＷＲＲやＥＴＳ等による帯域制御に適用することはできない。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特開２０００−２０９２５０号公報
【特許文献２】特表２０００−５１０３０８号公報
【特許文献３】特開２００８−２７１０１７号公報
【特許文献４】特開２００４−１０４１９２号公報
【発明の概要】
【発明が解決しようとする課題】
【００１４】
従って、本技術の目的は、一側面では、複数種別の通信が行われるネットワークにおいて、通信品質の劣化を抑制するための技術を提供することである。
【課題を解決するための手段】
【００１５】
本技術の第１の態様に係る中継装置は、（Ａ）受信したフレームを格納する第１バッファと、（Ｂ）受信したフレームを第１バッファに格納すると当該受信したフレームの通信種別に一致する通信種別のフレームによる第１バッファの使用量が当該通信種別について設定されている第１の閾値を超えるか判断し、超えると判断した場合には当該受信したフレームを廃棄する廃棄部と、（Ｃ）少なくとも２以上の時点について通信種別毎に第１バッファの使用量を算出し、第１バッファの使用量の変化を表す数値を通信種別毎に算出する第１算出部と、（Ｄ）第１バッファの使用量の変化を表す数値に基づき、通信種別毎に第１の閾値を算出し、廃棄部に対して設定する設定部とを有する。
【００１６】
本技術の第２の態様に係る中継装置は、（Ｅ）受信したフレームを格納する第１バッファと、（Ｆ）少なくとも２以上の時点について通信種別毎に第１バッファの使用量を算出し、第１バッファの使用量の変化を表す数値を通信種別毎に算出する第１算出部と、（Ｇ）第１バッファの使用量の変化を表す数値に基づき、単位時間当たりのフレームの流入データ量についての第１の閾値を通信種別毎に算出する第２算出部と、（Ｈ）受信したフレームを第１バッファに格納したとしても当該受信したフレームの通信種別と一致する通信種別のフレームの単位時間当たりの流入データ量が当該受信したフレームの通信種別について算出された第１の閾値以下である場合に、当該受信したフレームを第１バッファに格納する制御部とを有する。
【００１７】
本技術の第３の態様に係る中継装置は、（Ｉ）受信したフレームを格納するバッファと、（Ｊ）少なくとも２以上の時点について通信種別毎にバッファの使用量を算出し、バッファの使用量の変化を表す数値を通信種別毎に算出する算出部と、（Ｋ）バッファの使用量の変化を表す数値に基づき、通信種別毎に当該通信種別のフレームの送信を停止させるか判断する判断部と、（Ｌ）判断部が第１の通信種別のフレームの送信を停止させると判断した場合に、当該第１の通信種別のフレームの送信を停止することを要求する停止要求を生成し、当該第１の通信種別のフレームの送信元の装置宛に出力する出力部とを有する。
【発明の効果】
【００１８】
複数種別の通信が行われるネットワークにおいて、通信品質の劣化を抑制することができるようになる。
【図面の簡単な説明】
【００１９】
【図１】図１は、第１の実施の形態の中継装置の機能ブロック図である。
【図２】図２は、第１の実施の形態の中継装置が行う処理の処理フローを示す図である。
【図３】図３は、第２の実施の形態の中継装置の機能ブロック図である。
【図４】図４は、第２の実施の形態の中継装置が行う処理の処理フローを示す図である。
【図５】図５は、第３の実施の形態の中継装置の機能ブロック図である。
【図６】図６は、第３の実施の形態の中継装置が行う処理の処理フローを示す図である。
【図７】図７は、第４の実施の形態の中継装置の機能ブロック図である。
【図８】図８は、監視部が行う処理の処理フローを示す図である。
【図９】図９は、バッファデータ格納部に格納されている使用量テーブルの一例を示す図である。
【図１０】図１０は、フロー制御部が行う処理の処理フローを示す図である。
【図１１】図１１は、判定処理の処理フローを示す図である。
【図１２】図１２は、第５の実施の形態の中継装置の機能ブロック図である。
【図１３】図１３は、流量決定部が行う処理の処理フローを示す図である。
【図１４】図１４は、算出処理の処理フローを示す図である。
【図１５】図１５は、バッファ使用量の変化について説明するための図である。
【図１６】図１６は、計測部が行う処理の処理フローを示す図である。
【図１７】図１７は、スケジューリング部が行う処理の処理フローを示す図である。
【図１８】図１８は、フロー制御部が行う処理の処理フローを示す図である。
【図１９】図１９は、第６の実施の形態の中継装置の機能ブロック図である。
【図２０】図２０は、第７の実施の形態の中継装置の機能ブロック図である。
【図２１】図２１は、バッファデータ格納部に格納されている使用量テーブルの一例を示す図である。
【図２２】図２２は、検出部が行う処理の処理フローを示す図である。
【図２３Ａ】図２３Ａは、重み付け処理部が行う処理の処理フローを示す図である。
【図２３Ｂ】図２３Ｂは、閾値算出部が行う処理の処理フローを示す図である。
【図２４】図２４は、閾値の算出方法について説明するための図である。
【図２５】図２５は、閾値の算出方法について説明するための図である。
【図２６】図２６は、バッファ使用量の変化と閾値の算出との関係を説明するための図である。
【図２７】図２７は、送信スケジューリング部が行う処理の処理フローを示す図である。
【図２８】図２８は、廃棄部が行う処理の処理フローを示す図である。
【図２９】図２９は、第８の実施の形態の中継装置の機能ブロック図である。
【図３０】図３０は、廃棄部が行う処理の処理フローを示す図である。
【図３１】図３１は、第９の実施の形態の中継装置の機能ブロック図である。
【発明を実施するための形態】
【００２０】
［実施の形態１］
図１に、第１の実施の形態の中継装置の機能ブロック図を示す。第１の実施の形態の中継装置は、例えば統合ネットワークを介して受信したフレームを宛先の装置へ転送するための中継装置である。中継装置は、第１バッファ２０１と、第１算出部２０３と、設定部２０５と、廃棄部２０７とを有する。
【００２１】
第１算出部２０３は、第１バッファ２０１の使用量及び当該使用量の変化を表す数値を算出する処理等を行い、処理結果を設定部２０５に出力する。設定部２０５は、第１算出部２０３からの処理結果に基づき第１の閾値を算出し、廃棄部２０７に対して設定する。廃棄部２０７は、設定された第１の閾値に基づき、受信したフレームを廃棄又は第１バッファ２０１に格納する。
【００２２】
次に、第１の実施の形態における中継装置の動作を図２を用いて説明する。まず、第１算出部２０３は、少なくとも２以上の時点について通信種別毎に第１バッファ２０１の使用量を算出し、記憶装置に格納する（図２：ステップＳ１００１）。通信種別は、例えばフレームのヘッダに含まれる情報により決定される。
【００２３】
また、第１算出部２０３は、ステップＳ１００１において算出された使用量を用いて、第１バッファ２０１の使用量の変化を表す数値を通信種別毎に算出し、記憶装置に格納する（ステップＳ１００３）。例えば、最新の使用量と所定時刻前における使用量との差を算出する。
【００２４】
そして、設定部２０５は、第１算出部２０３によって算出された、第１バッファ２０１の使用量の変化を表す数値に基づき、フレーム廃棄のための第１の閾値を通信種別毎に算出し、廃棄部２０７に対して設定する（ステップＳ１００５）。例えば、第１バッファ２０１の使用量が増加している通信種別について、当該通信種別について既に設定されている第１の閾値よりも小さい第１の閾値を算出する。また、第１バッファ２０１の使用量が減少している通信種別について、当該通信種別について既に設定されている第１の閾値以上の第１の閾値を算出する。
【００２５】
そして、廃棄部２０７は、受信したフレームを第１バッファ２０１に格納すると当該フレームの通信種別と一致する通信種別のフレームによる第１バッファ２０１の使用量が、当該通信種別について算出された第１の閾値を超えるか判断する（ステップＳ１００７）。第１の閾値を超えないと判断した場合（ステップＳ１００７：Ｎｏルート）、廃棄部２０７は、受信したフレームを第１バッファ２０１に格納し（ステップＳ１００９）、処理を終了する。一方、第１の閾値を越えると判断した場合（ステップＳ１００７：Ｙｅｓルート）、廃棄部２０７は、受信したフレームを廃棄し（ステップＳ１０１１）、処理を終了する。
【００２６】
以上のような処理を実施すれば、通信種別毎にフレーム廃棄が抑制されるように制御されると共に、バッファ溢れが生じにくくなる。よって、通信品質の劣化を抑制できるようになる。
【００２７】
［実施の形態２］
図３に、第２の実施の形態の中継装置の機能ブロック図を示す。第２の実施の形態の中継装置は、例えば統合ネットワークを介して受信したフレームを宛先の装置へ転送するための中継装置である。中継装置は、第１バッファ３０１と、第１算出部３０３と、第２算出部３０５と、制御部３０７とを有する。
【００２８】
第１算出部３０３は、第１バッファ３０１の使用量及び当該使用量の変化を表す数値を算出する処理等を行い、処理結果を第２算出部３０５に出力する。第２算出部３０５は、第１算出部３０３からの処理結果に基づき閾値を算出し、制御部３０７に出力する。制御部３０７は、第２算出部３０５から受け取った閾値に基づき、第１バッファ３０１へのフレームの流入データ量を制御する。
【００２９】
次に、第２の実施の形態における中継装置の動作を図４を用いて説明する。まず、第１算出部３０３は、少なくとも２以上の時点について通信種別毎に第１バッファ３０１の使用量を算出し、記憶装置に格納する（図４：ステップＳ１０２１）。通信種別は、例えばフレームのヘッダに含まれる情報により決定される。
【００３０】
また、第１算出部３０３は、ステップＳ１０２１において算出された使用量を用いて、第１バッファ３０１の使用量の変化を表す数値を通信種別毎に算出し、記憶装置に格納する（ステップＳ１０２３）。例えば、最新の使用量と所定時刻前における使用量との差を算出する。
【００３１】
そして、第２算出部３０５は、第１算出部３０３によって算出された、第１バッファ３０１の使用量の変化を表す数値に基づき、単位時間当たりのフレームの流入データ量についての第１の閾値を通信種別毎に算出し、制御部３０７に出力する（ステップＳ１０２５）。例えば、第１バッファ３０１の使用量が増加している通信種別についての第１の閾値が、第１バッファ３０１の使用量が減少している通信種別についての第１の閾値よりも小さくなるようにする。
【００３２】
そして、制御部３０７は、受信したフレームを第１バッファ３０１に格納したとしても当該フレームの通信種別と一致する通信種別のフレームの単位時間当たりの流入データ量が第１の閾値以下であるか判断する（ステップＳ１０２７）。第１の閾値以下であると判断した場合（ステップＳ１０２７：Ｙｅｓルート）、制御部３０７は、受信したフレームを第１バッファ３０１に格納し（ステップＳ１０２９）、処理を終了する。一方、第１の閾値以下ではないと判断した場合（ステップＳ１０２７：Ｎｏルート）、制御部３０７は、受信したフレームを第１バッファ３０１に格納せずに、例えば第１バッファ３０１とは別に予備的に設けられたバッファ（図示しない）に待機させ（ステップＳ１０３１）、処理を終了する。
【００３３】
以上のような処理を実施すれば、バッファ使用量の変化に対して適切な流入データ量が設定されるので、バッファ溢れに対して柔軟に対処することができるようになる。これにより、通信品質の劣化を抑制できるようになる。
【００３４】
［実施の形態３］
図５に、第３の実施の形態の中継装置の機能ブロック図を示す。第３の実施の形態の中継装置は、例えば統合ネットワークを介して受信したフレームを宛先の装置へ転送するための中継装置である。中継装置は、バッファ４０１と、算出部４０３と、判断部４０５と、出力部４０７とを有する。
【００３５】
算出部４０３は、バッファ４０１の使用量及び当該使用量の変化を表す数値を算出する処理等を行い、処理結果を判断部４０５に出力する。判断部４０５は、算出部４０３からの処理結果に基づき、フレームの送信を停止させるかを判断し、フレームの送信を停止させる場合には、出力部４０７に停止要求の送信を指示する。出力部４０７は、判断部４０５からの要求に基づき、フレームの送信の停止を要求する停止要求を出力する。
【００３６】
次に、第３の実施の形態における中継装置の動作を図６を用いて説明する。まず、算出部４０３は、少なくとも２以上の時点について通信種別毎にバッファ４０１の使用量を算出し、記憶装置に格納する（図６：ステップＳ１０４１）。通信種別は、例えばフレームのヘッダに含まれる情報により決定される。
【００３７】
また、算出部４０３は、ステップＳ１０４１において算出された使用量を用いて、バッファ４０１の使用量の変化を表す数値を通信種別毎に算出し、記憶装置に格納する（ステップＳ１０４３）。例えば、最新の使用量と所定時刻前における使用量との差を算出する。
【００３８】
そして、判断部４０５は、算出部４０３によって算出された、バッファ４０１の使用量の変化を表す数値に基づき、通信種別毎に、当該通信種別に係るフレームの送信を停止させるか判断する（ステップＳ１０４５）。例えば、バッファ４０１の使用量が著しく増加している通信種別については、当該通信種別に係るフレームの送信を停止させる。フレームの送信を停止させないと判断した場合（ステップＳ１０４５：Ｎｏルート）、処理を終了する。
【００３９】
一方、フレームの送信を停止させると判断した場合（ステップＳ１０４５：Ｙｅｓルート）、判断部４０５は、停止要求の送信を出力部４０７に指示する。ここでは、第１の通信種別に係るフレームの送信を停止するとする。これに応じ、出力部４０７は、第１の通信種別に係るフレームの送信を停止することを要求する停止要求を生成し、当該第１の通信種別に係るフレームの送信元の装置宛に出力する（ステップＳ１０４７）。なお、出力部４０７から出力されたフレームは、中継装置のポート（図示しない）を介してフレームの送信元の装置宛に送信される。そして処理を終了する。
【００４０】
以上のような処理を実施すれば、通信種別毎のバッファ使用量の変化に応じて適切にフレームの送信が停止されるので、バッファ溢れを抑制できるようになる。これにより、通信品質の劣化を抑制できるようになる。
【００４１】
［実施の形態４］
図７に、第４の実施の形態の中継装置の機能ブロック図を示す。第４の実施の形態の中継装置は、例えばレイヤ２のスイッチである。中継装置は、受信ポート１０１１及び１０１３と、分類部１０３１及び１０３３と、共有バッファ１０５１と、選択部１０７１及び１０７３と、送信ポート１０９１及び１０９３と、監視部１１１１と、バッファデータ格納部１１３１と、フロー制御部１１５１とを含む。
【００４２】
受信ポート１０１１は、受信したフレームを分類部１０３１に出力する。分類部１０３１は、入力されたフレームに対してフローを識別するための情報を付与し、共有バッファ１０５１に格納する。選択部１０７１は、入力されたフレームを送信ポート１０９１に出力する。送信ポート１０９１は、入力されたフレームを宛先の装置に送信する。監視部１１１１は、共有バッファ１０５１の使用量をフロー毎に算出する。また、監視部１１１１は、共有バッファ１０５１の使用量の変化量を算出し、バッファデータ格納部１１３１に格納する。フロー制御部１１５１は、バッファデータ格納部１１３１に格納されているデータに基づきフロー制御を行うか判断し、フロー制御を行う場合にはＰａｕｓｅフレームを生成し、選択部１０７１及び１０７３に出力する。
【００４３】
受信ポート１０１３の機能は受信ポート１０１１の機能と同様である。分類部１０３３の機能は、分類部１０３１の機能と同様である。選択部１０７３の機能は、選択部１０７１の機能と同様である。送信ポート１０９３の機能は、送信ポート１０９１の機能と同様である。
【００４４】
なお、本実施の形態において、フローは、例えばフレームに含まれる通信プロトコルの情報、プライオリティの情報及びＶＬＡＮ（Virtual Local Area Network）の情報等に基づき決定される。他の実施の形態においても同様とする。
【００４５】
次に、図８乃至図１１を用いて、図７に示した中継装置の動作について説明する。
【００４６】
まず、監視部１１１１は、共有バッファ１０５１にフレームの入力又は出力があったか判断する（図８：ステップＳ１）。すなわち、共有バッファ１０５１の使用量が変化したか判断する。
【００４７】
共有バッファ１０５１にフレームの入力又は出力がない場合（ステップＳ１：Ｎｏルート）、共有バッファ１０５１の使用量を改めて算出しなくてもよいので、ステップＳ１３の処理に移行する。一方、共有バッファ１０５１にフレームの入力又は出力があった場合（ステップＳ１：Ｙｅｓルート）、監視部１１１１は、共有バッファ１０５１の使用量をフロー毎に算出し、記憶装置に格納する（ステップＳ３）。また、監視部１１１１は、共有バッファ１０５１の使用量の合計を算出し、記憶装置に格納する（ステップＳ５）。
【００４８】
そして、監視部１１１１は、前回共有バッファ１０５１の使用量の変化量を算出したときから所定時間が経過したかを判断する（ステップＳ７）。ステップＳ７における所定時間は、変化量計算を行う時間間隔である。
【００４９】
前回共有バッファ１０５１の使用量の変化量を算出したときから所定時間が経過していない場合（ステップＳ７：Ｎｏルート）、まだ変化量の算出を行わなくてもよいので、ステップＳ１３の処理に移行する。一方、前回共有バッファ１０５１の使用量の変化量を算出したときから所定時間が経過した場合（ステップＳ７：Ｙｅｓルート）、監視部１１１１は、共有バッファ１０５１の使用量の変化量をフロー毎に算出し、バッファデータ格納部１１３１における使用量テーブルに格納する（ステップＳ９）。また、監視部１１１１は、共有バッファ１０５１の使用量の変化量の合計を算出し、バッファデータ格納部１１３１における使用量テーブルに格納する（ステップＳ１１）。
【００５０】
図９に、バッファデータ格納部１１３１に格納されている使用量テーブルの一例を示す。図９の例では、各時刻における使用量及び使用量の変化量が各フローについて格納されている。
【００５１】
そして、監視部１１１１は、処理の終了指示があった場合には処理を終了する（ステップＳ１３：Ｙｅｓルート）。処理を終了しない場合には（ステップＳ１３：Ｎｏルート）、引き続き処理を実行するため、ステップＳ１の処理に戻る。
【００５２】
以上のようにして、共有バッファ１０５１の使用量の変化量をフロー毎に算出する。
【００５３】
次に、図１０及び図１１を用いて、フロー制御部１１５１が行う処理について説明する。まず、フロー制御部１１５１は、ステップＳ３及びＳ５において算出された使用量又はステップＳ９及びＳ１１において算出された使用量の変化量を用いて、共有バッファ１０５１の使用量が変化したか判断する（図１０：ステップＳ２１）。例えば、使用量の変化量が予め設定された閾値を超えている場合には、使用量が変化したとみなす。
【００５４】
共有バッファ１０５１の使用量が変化していない場合（ステップＳ２１：Ｎｏルート）、ステップＳ２５の処理に移行する。一方、共有バッファの使用量が変化した場合（ステップＳ２１：Ｙｅｓルート）、フロー制御部１１５１は、バッファデータ格納部１１３１に格納されている使用量テーブルを用いて判定処理を実施する（ステップＳ２３）。判定処理については、図１１を用いて説明する。
【００５５】
まず、フロー制御部１１５１は、バッファ残量Ｒ＞所定の閾値ＴＨ１であるか判断する（図１１：ステップＳ３１）。ステップＳ３１においては、バッファの容量Ｂからバッファ使用量の合計ΣＵを差し引くことによりバッファ残量Ｒを算出する。ＴＨ１は、バッファ残量についての所定の閾値である。以下では、フローｆのバッファ使用量をＵ[ｆ]とし、フローｆによるバッファ使用量の変化量をＤ[ｆ]とし、共有バッファ１０５１へのフローｆの単位時間当たりの流入データ量をＧ[ｆ]とする。
【００５６】
バッファ残量Ｒ＞所定の閾値ＴＨ１である場合（ステップＳ３１：Ｙｅｓルート）、フロー制御部１１５１は、フローｆについての流入データ量Ｇ[ｆ]をＧ[ｆ]＝Ｍａｘと設定する（ステップＳ３７）。共有バッファ１０５１の残量に余裕があるためである。ここで、Ｍａｘはワイヤーレート（すなわち、回線の理論上の最大通信速度）である。
【００５７】
一方、バッファ残量Ｒ＞所定の閾値ＴＨ１ではない場合（ステップＳ３１：Ｎｏルート）、フロー制御部１１５１は、ΣＤ＜０であるか判断する（ステップＳ３３）。すなわち、共有バッファ１０５１の使用量が減っているか判断する。
【００５８】
ΣＤ＜０である場合（ステップＳ３３：Ｙｅｓルート）、フロー制御部１１５１は、フローｆについての流入データ量Ｇ[ｆ]をＧ[ｆ]＝Ｍａｘと設定する（ステップＳ３７）。共有バッファ１０５１の合計の使用量が減少傾向にあるため、共有バッファ１０５１への単位時間当たりの流入データ量が増えたとしてもバッファ溢れが生じにくいからである。
【００５９】
一方、ΣＤ＜０ではない場合（ステップＳ３３：Ｎｏルート）、フロー制御部１１５１は、Ｄ[ｆ]＜０であるか判断する（ステップＳ３５）。すなわち、フローｆのバッファ使用量が減っているか判断する。
【００６０】
Ｄ[ｆ]＜０である場合（ステップＳ３５：Ｙｅｓルート）、フロー制御部１１５１は、フローｆについての流入データ量Ｇ[ｆ]をＧ[ｆ]＝Ｍａｘと設定する（ステップＳ３７）。フローｆによる共有バッファ１０５１の使用量が減少傾向にあるため、フローｆについての単位時間当たりの流入データ量が増えたとしてもバッファ溢れが生じにくいからである。
【００６１】
一方、Ｄ[ｆ]＜０ではない場合（ステップＳ３５：Ｎｏルート）、フロー制御部１１５１は、フローｆについての流入データ量Ｇ[ｆ]をＧ[ｆ]＝Ｍａｘ＊Ｒ／Ｂと設定する（ステップＳ３９）。すなわち、バッファの残量Ｒが少ないほど小さい流入データ量を割り当てるようにする。
【００６２】
そして、フロー制御部１１５１は、ステップＳ３７又はＳ３９において設定された流入データ量Ｇ[ｆ]がＧ[ｆ]＜Ｔを満たすか判断する（ステップＳ４０）。ここで、Ｔは流入データ量についての所定の閾値である。Ｇ[ｆ]＜Ｔを満たさない場合（ステップＳ４０：Ｎｏルート）、フローｆについてフレームの送信を停止させなくてもよいので、元の処理に戻る。一方、Ｇ[ｆ]＜Ｔを満たす場合（ステップＳ４０：Ｙｅｓルート）、フロー制御部１１５１は、フローｆについてのフレームの送信元の装置に対してフレームの送信停止を要求するＰａｕｓｅフレームを生成し、当該送信元の装置宛に出力する（ステップＳ４１）。本実施の形態においては、選択部１０７１又は１０７３に出力する。そして元の処理に戻る。
【００６３】
なお、以上説明した判定処理は、バッファの使用量に変化があったフローのみについて行うようにしてもよいし、各々のフローについて行うようにしてもよい。
【００６４】
図１０の説明に戻り、制御部１１５１は、処理の終了指示があった場合には処理を終了する（ステップＳ２５：Ｙｅｓルート）。処理を終了しない場合には（ステップＳ２５：Ｎｏルート）、引き続き処理を実行するため、ステップＳ２１の処理に戻る。
【００６５】
以上のような処理を実施することにより、フロー毎のバッファ使用量の変化に応じて、適切なフロー制御を行うことができるようになる。これにより、共有バッファ１０５１のオーバーフローが発生することを抑制できる。また、ＥＰＤとは異なりフレームを廃棄しないため、フレームを廃棄することが好ましくないフロー（例えばＦＣｏＥ）にも対処することができる。さらに、共有バッファをポート毎に分割するわけではないため、共有バッファを有効に利用できる。
【００６６】
［実施の形態５］
図１２に、第５の実施の形態の中継装置の機能ブロック図を示す。第５の実施の形態の中継装置は、例えばレイヤ２のスイッチである。中継装置は、受信ポート１０１１及び１０１３と、分類部１０３１及び１０３３と、入力バッファ１２１１及び１２１３と、フロー制御部１２３１及び１２３３と、計測部１２５１及び１２５３と、共有バッファ１０５１と、選択部１０７１及び１０７３と、送信ポート１０９１及び１０９３と、監視部１１１１と、バッファデータ格納部１１３１と、流量決定部１１７１と、スケジューリング部１１９１とを含む。
【００６７】
受信ポート１０１１は、受信したフレームを分類部１０３１に出力する。分類部１０３１は、入力されたフレームに対して、フローを識別するための情報を付与し、入力バッファ１２１１に格納する。フロー制御部１２３１は、入力バッファ１２１１の使用量に基づきフロー制御を行うか判断し、フロー制御を行う場合にはＰａｕｓｅフレームを生成し、選択部１０７１に出力する。計測部１２５１は、入力バッファ１２１１から共有バッファ１０５１へ流入するフレームのデータ量をフロー毎に管理する。選択部１０７１は、入力されたフレームを送信ポート１０９１に出力する。送信ポート１０９１は、入力されたフレームを宛先の装置に送信する。監視部１１１１は、共有バッファ１０５１の使用量をフロー毎に算出する。また、監視部１１１１は、共有バッファ１０５１の使用量の変化量を算出し、バッファデータ格納部１１３１に格納する。流量決定部１１７１は、バッファデータ格納部１１３１に格納されているデータに基づき、単位時間当たりに入力バッファ１２１１及び１２１３から共有バッファ１０５１に流入するフレームのデータ量をフロー毎に算出し、スケジューリング部１１９１に出力する。スケジューリング部１１９１は、入力バッファ１２１１及び１２１３から共有バッファ１０５１に流入するフレームの順序を管理する。
【００６８】
受信ポート１０１３の機能は受信ポート１０１１の機能と同様である。分類部１０３３の機能は、分類部１０３１の機能と同様である。入力バッファ１２１３の機能は、入力バッファ１２１１の機能と同様である。フロー制御部１２３３の機能は、フロー制御部１２３１の機能と同様である。計測部１２５３の機能は、計測部１２５１の機能と同様である。選択部１０７３の機能は、選択部１０７１の機能と同様である。送信ポート１０９３の機能は、送信ポート１０９１の機能と同様である。
【００６９】
次に、図１２に示した中継装置の動作について説明する。但し、監視部１１１１の処理は実施の形態４で説明したものと同じであるので説明を省略する。
【００７０】
まず、図１３を用いて、流量決定部１１７１が行う処理について説明する。流量決定部１１７１は、ステップＳ３及びＳ５において算出された使用量又はステップＳ９及びＳ１１において算出された使用量の変化量を用いて、共有バッファ１０５１の使用量が変化したか判断する（図１３：ステップＳ４２）。例えば、使用量の変化量が予め設定された閾値を超えている場合には、使用量が変化したとみなす。
【００７１】
共有バッファの使用量が変化していない場合（ステップＳ４１：Ｎｏルート）、ステップＳ４５処理に移行する。一方、共有バッファの使用量が変化した場合（ステップＳ４１：Ｙｅｓルート）、流量決定部１１７１は、バッファデータ格納部１１３１に格納されている使用量テーブルを用いて算出処理を実施する（ステップＳ４３）。算出処理については、図１４を用いて説明する。
【００７２】
まず、流量決定部１１７１は、バッファ残量Ｒ＞所定の閾値ＴＨ１であるか判断する（図１４：ステップＳ５１）。ステップＳ５１においては、バッファの容量Ｂからバッファ使用量の合計ΣＵを差し引くことによりバッファ残量Ｒを算出する。ＴＨ１は、バッファ残量についての所定の閾値である。以下では、フローｆのバッファ使用量をＵ[ｆ]とし、フローｆによるバッファ使用量の変化量をＤ[ｆ]とし、共有バッファ１０５１へのフローｆの単位時間当たりの流入データ量をＧ[ｆ]とする。
【００７３】
バッファ残量Ｒ＞所定の閾値ＴＨ１である場合（ステップＳ５１：Ｙｅｓルート）、流量決定部１１７１は、フローｆについての流入データ量Ｇ[ｆ]をＧ[ｆ]＝Ｍａｘと設定する（ステップＳ５７）。共有バッファ１０５１の残量に余裕があるためである。ここで、Ｍａｘはワイヤーレートである。
【００７４】
一方、バッファ残量Ｒ＞所定の閾値ＴＨ１ではない場合（ステップＳ５１：Ｎｏルート）、流量決定部１１７１は、ΣＤ＜０であるか判断する（ステップＳ５３）。すなわち、共有バッファ１０５１の使用量が減っているか判断する。
【００７５】
ΣＤ＜０である場合（ステップＳ５３：Ｙｅｓルート）、流量決定部１１７１は、フローｆについての流入データ量Ｇ[ｆ]をＧ[ｆ]＝Ｍａｘと設定する（ステップＳ５７）。共有バッファ１０５１の合計の使用量が減少傾向にあるため、共有バッファ１０５１への単位時間当たりの流入データ量が増えたとしてもバッファ溢れが生じにくいからである。
【００７６】
一方、ΣＤ＜０ではない場合（ステップＳ５３：Ｎｏルート）、流量決定部１１７１は、Ｄ[ｆ]＜０であるか判断する（ステップＳ５５）。すなわち、フローｆのバッファ使用量が減っているか判断する。
【００７７】
Ｄ[ｆ]＜０である場合（ステップＳ５５：Ｙｅｓルート）、流量決定部１１７１は、フローｆについての流入データ量Ｇ[ｆ]をＧ[ｆ]＝Ｍａｘと設定する（ステップＳ５７）。フローｆによる共有バッファ１０５１の使用量が減少傾向にあるため、フローｆについての単位時間当たりの流入データ量が増えたとしてもバッファ溢れが生じにくいからである。そして元の処理に戻る。
【００７８】
一方、Ｄ[ｆ]＜０ではない場合（ステップＳ５５：Ｎｏルート）、流量決定部１１７１は、フローｆについての流入データ量Ｇ[ｆ]をＧ[ｆ]＝Ｍａｘ＊Ｒ／Ｂと設定する（ステップＳ５９）。すなわち、バッファの残量Ｒが少ないほど小さい流入データ量を割り当てるようにする。そして元の処理に戻る。
【００７９】
なお、以上説明した算出処理は、バッファの使用量に変化があったフローのみについて行うようにしてもよいし、各々のフローについて行うようにしてもよい。
【００８０】
図１５を用いて、第５の実施の形態における流入データ量の制御について説明する。図１５においては、斜線が付された長方形の高さが高いほどバッファ使用量が多いことを示している。図１５の上段は、現在のバッファ使用量が過去よりも多いことを示しており、図１５の下段は、現在のバッファ使用量が過去よりも少ないことを示している。例えば図１５の上段に示すように、バッファ使用量が増加している場合、今後もバッファ使用量が増加して、未来において現在よりも多いバッファ使用量になる可能性が高いと考えられる。このような場合においては、バッファへの流入データ量を少なくしなければバッファ溢れを生じる可能性が高くなってしまう。従って、本実施の形態においては、バッファ使用量が増加している場合にはワイヤーレートよりも小さい流入データ量Ｇ[ｆ]を設定している。
【００８１】
逆に、図１５の下段に示すように、バッファ使用量が減少している場合、今後もバッファ使用量が減少して、未来において現在よりも少ないバッファ使用量になる可能性が高いと考えられる。このような場合においては、バッファへの流入データ量を多くしてもバッファ溢れを生じにくい。従って、本実施の形態においては、バッファ使用量が減少している場合には流入データ量Ｇ[ｆ]をワイヤーレートに設定している。
【００８２】
図１３の説明に戻り、流量決定部１１７１は、処理の終了指示があった場合には処理を終了する（ステップＳ４５：Ｙｅｓルート）。処理を終了しない場合には（ステップＳ４５：Ｎｏルート）、引き続き処理を実行するため、ステップＳ４２の処理に戻る。
【００８３】
次に、図１６及び図１７を用いて、流量決定部１１７１によって算出された流入データ量になるようにフレームの流入を制御する処理について説明する。ここでは、計測部１２５１の処理を例にして説明する。
【００８４】
まず、計測部１２５１は、流入データ量を算出するための所定時間が経過したか判断する（図１６：ステップＳ６１）。
【００８５】
流入データ量を算出するための所定時間が経過していない場合（ステップＳ６１：Ｎｏルート）、ステップＳ６５の処理に移行する。一方、流入データ量を算出するための所定時間が経過した場合（ステップＳ６１：Ｙｅｓルート）、計測部１２５１は、各フローについての流量カウンタから所定値を減算する（ステップＳ６３）。
【００８６】
そして、計測部１２５１は、新たに入力バッファ１２１１からフレームが出力されたか判断する（ステップＳ６５）。入力バッファ１２１１からフレームが出力されていない場合（ステップＳ６５：Ｎｏルート）、ステップＳ６９の処理に移行する。一方、入力バッファ１２１１からフレームが出力された場合（ステップＳ６５：Ｙｅｓルート）、出力されたフレームのフローについて、出力されたフレームのデータ量を流量カウンタに加算する（ステップＳ６７）。
【００８７】
そして、計測部１２５１は、処理の終了指示があった場合には処理を終了する（ステップＳ６９：Ｙｅｓルート）。処理を終了しない場合には（ステップＳ６９：Ｎｏルート）、引き続き処理を実行するため、ステップＳ６１の処理に戻る。
【００８８】
このようにして、共有バッファ１０５１への流入データ量をフロー毎に管理する。そして、流量カウンタの値及びフレームの転送状況についての情報は、計測部１２５１からスケジューリング部１１９１に適宜通知される。
【００８９】
一方、スケジューリング部１１９１は、所定のアルゴリズム（例えばラウンドロビン）によって、共有バッファ１０５１にフレームを出力するフロー（ここでは、フローｆとする）を特定する（図１７：ステップＳ７１）。
【００９０】
そして、スケジューリング部１１９１は、特定されたフローｆのフレームを共有バッファ１０５１に出力中であるか判断する（ステップＳ７３）。フローｆのフレームを共有バッファ１０５１に出力中である場合には（ステップＳ７３：Ｙｅｓルート）、フローｆのフレームをさらに共有バッファ１０５１に出力することはできないので、ステップＳ７１の処理に戻る。
【００９１】
一方、フローｆのフレームを共有バッファ１０５１に出力中ではない場合には（ステップＳ７３：Ｎｏルート）、フローｆのフレームを共有バッファ１０５１に出力可能であるか判断する（ステップＳ７５）。ステップＳ７５においては、共有バッファ１０５１への出力待ちとなっているフローｆのフレームが有るか判断する。
【００９２】
フローｆのフレームを共有バッファ１０５１に出力可能ではない場合（ステップＳ７５：Ｎｏルート）、ステップＳ８１の処理に移行する。一方、フローｆのフレームを共有バッファ１０５１に出力可能である場合（ステップＳ７５：Ｙｅｓルート）、スケジューリング部１１９１は、Ｆ[ｆ]＜Ｇ[ｆ]であるか判断する（ステップＳ７７）。ここで、Ｆ[ｆ]は、計測部１２５１及び１２５３によって計測された、フローｆについての流量カウンタの値である。Ｇ[ｆ]は、流量決定部１１７１によって算出された、フローｆについての流入データ量である。
【００９３】
Ｆ[ｆ]＜Ｇ[ｆ]ではない場合（ステップＳ７７：Ｎｏルート）、共有バッファ１０５１にフレームを出力することはできないため、ステップＳ８１の処理に移行する。一方、Ｆ[ｆ]＜Ｇ[ｆ]である場合（ステップＳ７７：Ｙｅｓルート）、スケジューリング部１１９１は、フローｆのフレームを共有バッファ１０５１に出力する（ステップＳ７９）。
【００９４】
そして、スケジューリング部１１９１は、処理の終了指示があった場合には処理を終了する（ステップＳ８１：Ｙｅｓルート）。処理を終了しない場合には（ステップＳ８１：Ｎｏルート）、引き続き処理を実行するため、ステップＳ７１の処理に戻る。
【００９５】
このような処理を実施することにより、決定された流入データ量を超えないように、フロー毎に流入データ量を制御することができるようになる。
【００９６】
次に、図１８を用いて、フロー制御部１２３１及び１２３３が行う処理について説明する。ここでは、フロー制御部１２３１の処理を例にして説明する。
【００９７】
まず、フロー制御部１２３１は、未処理のフローを１つ特定する（図１８：ステップＳ９１）。
【００９８】
そして、フロー制御部１２３１は、特定されたフローについて入力バッファ１２１１の使用量を算出し、使用量が閾値を超えているか判断する（ステップＳ９３）。ステップＳ９３において利用する閾値は、フロー毎に予め設定されているとする。
【００９９】
使用量が閾値を超えていない場合（ステップＳ９３：Ｎｏルート）、ステップＳ９７の処理に移行する。一方、使用量が閾値を超えている場合（ステップＳ９３：Ｙｅｓルート）、フロー制御部１２３１は、当該フローのフレームの送信元の装置に対してフレームの送信を停止することを要求するＰａｕｓｅフレームを生成し、選択部１０７１に出力する（ステップＳ９５）。
【０１００】
そして、フロー制御部１２３１は、未処理のフローが有るか判断する（ステップＳ９７）。未処理のフローが有る場合（ステップＳ９７：Ｙｅｓルート）、次のフローについて処理するため、ステップＳ９１の処理に戻る。一方、未処理のフローが無い場合（ステップＳ９７：Ｎｏルート）、処理を終了する。
【０１０１】
なお、未処理のフローが無くなった場合には、処理済みのフローを再度未処理の状態であるとみなして、繰返し処理を実施するようにしてもよい。
【０１０２】
このような処理を実施することにより、入力バッファ１２１１を占有するフローのフレームの送信を停止させることができるようになる。
【０１０３】
このように、本実施の形態では、フロー毎のバッファ使用量の変化に応じて、適切な流入データ量を設定することができるようになる。これにより、共有バッファ１０５１のオーバーフローが発生することを抑制できると共に、帯域を制限しすぎることを抑制することができる。また、ＥＰＤとは異なりフレームを廃棄しないため、フレームを廃棄することが好ましくないフロー（例えばＦＣｏＥ）にも対処することができる。さらに、共有バッファをポート毎に分割するわけではないため、共有バッファを有効に利用できる。
【０１０４】
また、本実施の形態では、共有バッファとは別に設けられた入力バッファの使用の状況に応じて、フレームの送信を停止させている。これにより、通信状況の変化に対してより柔軟に対応することができるようになる。
【０１０５】
［実施の形態６］
図１９に、第６の実施の形態の中継装置の機能ブロック図を示す。第６の実施の形態の中継装置は、例えばレイヤ２のスイッチである。中継装置は、受信ポート１０１１及び１０１３と、分類部１０３１及び１０３３と、分配部１２６１及び１２６３と、入力バッファ１２１１乃至１２１７と、フロー制御部１２３１及び１２３３と、計測部１２５１乃至１２５７と、選択部１２７１及び１２７３と、共有バッファ１０５１と、選択部１０７１及び１０７３と、送信ポート１０９１及び１０９３と、監視部１１１１と、バッファデータ格納部１１３１と、流量決定部１１７１と、スケジューリング部１１９１とを含む。
【０１０６】
受信ポート１０１１は、受信したフレームを分類部１０３１に出力する。分類部１０３１は、入力されたフレームに対して、フローを識別するための情報を付与し、分配部１２６１に出力する。分配部１２６１は、フローを識別するための情報に応じて、フレームを入力バッファ１２１１又は入力バッファ１２１３に格納する。フロー制御部１２３１は、入力バッファ１２１１及び入力バッファ１２１３の使用量に基づきフロー制御を行うか判断し、フロー制御を行う場合にはＰａｕｓｅフレームを生成し、選択部１０７１に出力する。計測部１２５１は、入力バッファ１２１１から共有バッファ１０５１に流入するフレームのデータ量を計測すると共に、フレームを選択部１２７１に出力する。選択部１０７１は、入力されたフレームを送信ポート１０９１に出力する。送信ポート１０９１は、入力されたフレームを宛先の装置に送信する。監視部１１１１は、共有バッファ１０５１の使用量をフロー毎に算出する。また、監視部１１１１は、共有バッファ１０５１の使用量の変化量を算出し、バッファデータ格納部１１３１に格納する。流量決定部１１７１は、バッファデータ格納部１１３１に格納されているデータに基づき、単位時間当たりに入力バッファ１２１１及び１２１３から共有バッファ１０５１に流入するフレームのデータ量をフロー毎に算出し、スケジューリング部１１９１に出力する。スケジューリング部１１９１は、入力バッファ１２１１及び１２１３から共有バッファ１０５１に流入するフレームの順序を管理する。
【０１０７】
受信ポート１０１３の機能は、受信ポート１０１１の機能と同様である。分類部１０３３の機能は、分類部１０３１の機能と同様である。入力バッファ１２１３乃至１２１７の機能は、入力バッファ１２１１の機能と同様である。フロー制御部１２３３の機能は、フロー制御部１２３１の機能と同様である。計測部１２５３乃至１２５７の機能は、計測部１２５１の機能と同様である。選択部１２７３の機能は、選択部１２７１の機能と同様である。送信ポート１０９３の機能は、送信ポート１０９１の機能と同様である。
【０１０８】
本実施の形態の監視部１１１１の処理は第４の実施の形態で説明したものと同じであるので、説明を省略する。また、流量決定部１１７１、スケジューリング部１１９１、計測部１２５１及びフロー制御部１２３１の処理は第５の実施の形態で説明したものと同じであるので、説明を省略する。
【０１０９】
本実施の形態の中継装置は、このような構成を採用しているので、第５の実施の形態の中継装置と同様の効果を有する。また、本実施の形態においては、フロー毎に入力バッファが設けられており、各入力バッファには、異なる１の計測部が対応付けられている。このような構成を採用することで、フロー毎の流入データ量の管理を行いやすくなるので、中継装置内においてより効率的にフレームを処理することができるようになっている。
【０１１０】
［実施の形態７］
図２０に、第７の実施の形態の中継装置の機能ブロック図を示す。第７の実施の形態の中継装置は、例えばレイヤ２のスイッチである。中継装置は、受信ポート１０１１及び１０１３と、分類部１０３１及び１０３３と、廃棄部１２９１及び１２９３と、共有バッファ１０５１と、送信スケジューリング部１３９１及び１３９３と、送信ポート１０９１及び１０９３と、監視部１１１１と、バッファデータ格納部１１３１と、検出部１３１１と、重み付け処理部１３５１と、閾値算出部１３７１を含む。
【０１１１】
受信ポート１０１１は、受信したフレームを分類部１０３１に出力する。分類部１０３１は、入力されたフレームに対して、フローを識別するための情報を付与し、廃棄部１２９１に出力する。廃棄部１２９１は、フロー毎に設定された閾値に基づきフレームを廃棄し、廃棄しないフレームを共有バッファ１０５１に格納する。送信スケジューリング部１３９１は、入力された重み付け値及び所定のアルゴリズムに基づきフレームの送信順序を決定し、決定された送信順序に従ってフレームを送信ポート１０９１に出力する。送信ポート１０９１は、入力されたフレームを宛先の装置に送信する。監視部１１１１は、共有バッファ１０５１の使用量をフロー毎に算出する。また、監視部１１１１は、共有バッファ１０５１の使用量の変化量を算出し、バッファデータ格納部１１３１に格納する。検出部１３１１は、バッファデータ格納部１１３１に格納されているデータを用いて、共有バッファ１０５１の使用量が変化したことを検出する。そして、検出部１３１１は、共有バッファ１０５１の使用量の変化を検出した場合には、重み付け処理部１３５１及び閾値算出部１３７１に処理を指示する。重み付け処理部１３５１は、バッファデータ格納部１１３１に格納されているデータに基づき、フレーム送信の優先度を表す重み付け値をフロー毎に算出し、送信スケジューリング部１３９１に出力する。閾値算出部１３７１は、バッファデータ格納部１１３１に格納されているデータに基づき、共有バッファ１０５１の使用量についての閾値をフロー毎に算出し、廃棄部１２９１及び１２９３に出力する。
【０１１２】
受信ポート１０１３の機能は、受信ポート１０１１の機能と同様である。分類部１０３３の機能は、分類部１０３１の機能と同様である。廃棄部１２９３の機能は、廃棄部１２９１の機能と同様である。送信スケジューリング部１３９３の機能は、送信スケジューリング部１３９１の機能と同様である。送信ポート１０９３の機能は、送信ポート１０９１の機能と同様である。
【０１１３】
次に、図２０に示した中継装置の動作について説明する。但し、監視部１１１１の処理については第４の実施の形態で説明したものと同様であるので、説明を省略する。なお、第７の実施の形態では、バッファデータ格納部１１３１における使用量テーブルには図２１に示すようなデータが格納される。図２１の例では、各時刻における使用量及び使用量の変化量が各フローについて格納されている。また、ＥＰＤの列には、ＥＰＤが有効であるか否かを示すデータが格納されている。ＥＰＤの列に格納されているデータが「ＯＮ」であるフローは、廃棄部１２９１及び１２９３による廃棄の対象となるフローであり、ＥＰＤの列に格納されているデータが「ＯＦＦ」であるフローは、廃棄部１２９１及び１２９３による廃棄の対象ではないフローである。
【０１１４】
まず、図２２を用いて、検出部１３１１が行う処理について説明する。検出部１３１１は、ステップＳ３及びＳ５において算出された使用量又はステップＳ９及びＳ１１において算出された使用量の変化量を用いて、共有バッファ１０５１の使用量が変化したか判断する（図２２：ステップＳ１０１）。例えば、使用量の変化量が予め設定された閾値を超えている場合には、使用量が変化したとみなす。共有バッファ１０５１の使用量が変化していない場合（ステップＳ１０１：Ｎｏルート）、ステップＳ１０３の処理に移行する。
【０１１５】
一方、共有バッファ１０５１の使用量が変化した場合（ステップＳ１０１：Ｙｅｓルート）、検出部１３１１は、重み付け処理部１３５１及び閾値算出部１３７１に対し、共有バッファ１０５１の使用量に変化があったことを通知する（ステップＳ１０２）。
【０１１６】
そして、検出部１３１１は、処理の終了指示があった場合には処理を終了する（ステップＳ１０３：Ｙｅｓルート）。処理を終了しない場合には（ステップＳ１０３：Ｎｏルート）、引き続き処理を実行するため、ステップＳ１０１の処理に戻る。
【０１１７】
ここで、図２３Ａ及び図２３Ｂを用いて、重み付け処理部１３５１及び閾値算出部１３７１によって行われる処理について説明する。
【０１１８】
まず、重み付け処理部１３５１は、共有バッファ１０５１の使用量の変化があったことを検出部１３１１から通知されたかを判断する（図２３Ａ：ステップＳ１０４）。共有バッファ１０５１の使用量の変化があったことを検出部１３１１から通知されていない場合（ステップＳ１０４：Ｎｏルート）、ステップＳ１０６の処理に移行する。
【０１１９】
一方、共有バッファ１０５１の使用量の変化があったことを検出部１３１１から通知された場合（ステップＳ１０４：Ｙｅｓルート）、重み付け処理部１３５１は、バッファデータ格納部１１３１に格納されている使用量テーブルを用いて、フロー毎に重み付け値を算出する。そして、重み付け処理部１３５１は、算出した重み付け値を送信スケジューリング部１３９１及び１３９３に出力する（ステップＳ１０３）。例えば、共有バッファ１０５１の使用量が増加しているフローほど大きな重み付け値を割り当て、共有バッファ１０５１の使用量が減少しているフローほど小さな重み付け値を割り当てるように、各フローについての重み付け値を算出する。このようにすることで、共有バッファ１０５１を占有してしまう可能性が高いフローのフレームを、優先的に送信する。
【０１２０】
そして、重み付け処理部１３５１は、処理の終了指示があった場合には処理を終了する（ステップＳ１０６：Ｙｅｓルート）。処理を終了しない場合には（ステップＳ１０６：Ｎｏルート）、引き続き処理を実行するため、ステップＳ１０４の処理に戻る。
【０１２１】
一方、閾値算出部１３７１は、共有バッファ１０５１の使用量の変化があったことを検出部１３１１から通知されたかを判断する（図２３Ｂ：ステップＳ１０７）。共有バッファ１０５１の使用量の変化があったことを検出部１３１１から通知されていない場合（ステップＳ１０７：Ｎｏルート）、ステップＳ１０９の処理に移行する。
【０１２２】
共有バッファ１０５１の使用量の変化があったことを検出部１３１１から通知された場合（ステップＳ１０７：Ｙｅｓルート）、閾値算出部１３７１は、バッファデータ格納部１１３１に格納されている使用量テーブルを用いて、共有バッファ１０５１の使用量についての閾値をフロー毎に算出し、廃棄部１２９１及び１２９３に出力する（ステップＳ１０８）。
【０１２３】
そして、閾値算出部１３７１は、処理の終了指示があった場合には処理を終了する（ステップＳ１０９：Ｙｅｓルート）。処理を終了しない場合には（ステップＳ１０９：Ｎｏルート）、引き続き処理を実行するため、ステップＳ１０７の処理に戻る。
【０１２４】
なお、ステップＳ１０８においては、例えば以下のようにして閾値を算出する。まず、閾値算出部１３７１は、時刻ｔにおける閾値の最大値Ｔｅｄ＿Ｍａｘ及び最小値Ｔｅｄ＿Ｍｉｎを以下の式により算出する。
【０１２５】
Ｔｅｄ＿Ｍｉｎ＝ＣＢｍａｘ／（ＮＣＢａｃｔ＋１）
Ｔｅｄ＿Ｍａｘ＝ＣＢｍａｘ／ＮＣＢａｃｔ
【０１２６】
ここで、ＣＢｍａｘは共有バッファ１０５１の容量であり、ＮＣＢａｃｔは時刻ｔにおいて共有バッファ１０５１を使用しているフローの数である。
【０１２７】
そして、Ｔｅｄ（ｆ）ｔｍｐを以下のように定義する。
【０１２８】
Ｔｅｄ（ｆ）ｔｍｐ＝Ｔｅｄ（ｆ）−（Ｔｅｄ（ｆ）×ΔＰＣＢ（ｆ））
【０１２９】
ここで、Ｔｅｄ（ｆ）は時刻ｔにおけるフローｆの閾値であり、ΔＰＣＢ（ｆ）はフローｆの共有バッファ１０５１の使用率ＰＣＢ（ｆ）の変化量である。
【０１３０】
そして、閾値算出部１３７１は、時刻ｔの次の時刻におけるフローｆの閾値Ｔｅｄ（ｆ）ｎｅｘｔを以下の式により算出する。
【０１３１】
Ｔｅｄ（ｆ）ｎｅｘｔ＝ｍａｘ（Ｔｅｄ＿ｍｉｎ，ｍｉｎ（Ｔｅｄ＿ｍａｘ，Ｔｅｄ（ｆ）ｔｍｐ））
【０１３２】
ここで、ｍａｘ（ａ，ｂ）はａとｂのうち大きいものを求める演算式であり、ｍｉｎ（ａ，ｂ）はａとｂのうち小さいものを求める演算式である。
【０１３３】
但し、ΔＰＣＢ（ｆ）が負であり且つＴｅｄ（ｆ）ｎｅｘｔ＜Ｔｅｄ（ｆ）である場合には、Ｔｅｄ（ｆ）ｎｅｘｔ＝Ｔｅｄ（ｆ）とする。
【０１３４】
例えば図２１に示したようなデータが使用量テーブルに格納されている場合に、Ｔｅｄ＿Ｍｉｎ及びＴｅｄ＿Ｍａｘを計算すると、図２４に示すようになる。図２４は、ｔ０乃至ｔ３の各時刻について、Ｔｅｄ＿Ｍｉｎ及びＴｅｄ＿Ｍａｘの値を示している。図２４が示すように、共有バッファ１０５１を使用しているフローの数が多いほど、Ｔｅｄ＿Ｍｉｎ及びＴｅｄ＿Ｍａｘは小さくなる。なお、ＣＢｍａｘ＝５０００とする。
【０１３５】
そして、図２１に示したようなデータが使用量テーブルに格納されている場合に各フローについて閾値を算出すると、図２５に示すようになる。図２５は、ｔ０乃至ｔ３の各時刻についての、フロー毎の閾値を示している。図２５において、矢印は、１つ前の時刻と同じ値であることを示している。フロー２については、ＥＰＤが有効ではないので、閾値は算出されていない。なお、閾値の初期値を３０００としている。
【０１３６】
このように、本実施の形態においては、共有バッファ１０５１の使用量の変化に応じて、閾値を動的に設定している。例えば図１５の上段に示すように、バッファの使用量が増加しているフローについては、そのフローによるバッファの占有を防ぐため、既に設定されている値より小さい閾値が設定されるようになる。一方、例えば図１５の下段に示すように、バッファの使用量が減少しているフローについては、そのフローについては閾値を小さくすると通信品質を劣化させてしまうおそれがあるため、既に設定されている値のまま或いはその値より大きい閾値が設定されるようになる。
【０１３７】
また、上で述べた算出方法においては、各フローのバッファ使用量の変化だけでなく、バッファ使用量の合計の変化も加味されている。例えば図２６に示すように、バッファ使用量の合計が増加しており、フロー１によるバッファ使用量が減少しており、フロー２によるバッファ使用量は変化が無く、フロー３によるバッファ使用量が増加している状況があるとする。このような場合には、フロー１及びフロー２については、これらのフローによるバッファ使用量がバッファ使用量の合計に占める割合が減少しているため、既に設定されている値のまま或いはその値より大きい閾値が設定されるようになる。一方で、フロー３については、フロー３によるバッファ使用量がバッファ使用量の合計に占める割合が増加しているため、既に設定されている値よりも小さい閾値が設定されるようになる。
【０１３８】
以上のような処理を実施することにより、共有バッファ１０５１の使用量の変化に応じて、フレームの送信順序の決定及びフレーム廃棄のための閾値の算出をフロー毎に適切に行うことができるようになる。
【０１３９】
次に、図２７を用いて、重み付け処理部１３５１から重み付け値を受け取った送信スケジューリング部１３９１及び１３９３が行う処理について説明する。ここでは、送信スケジューリング部１３９１が行う処理を例にして説明する。
【０１４０】
まず、送信スケジューリング部１３９１は、送信待ちのフレームが共有バッファ１０５１に有るか判断する（図２７：Ｓ１３１）。送信待ちのフレームが共有バッファ１０５１に無い場合（ステップＳ１３１：Ｎｏルート）、ステップＳ１３７の処理に移行する。
【０１４１】
一方、送信待ちのフレームが共有バッファ１０５１に有る場合（ステップＳ１３１：Ｙｅｓルート）、送信スケジューリング部１３９１は、所定のスケジューリングアルゴリズム及び重み付け値に基づき、フレームを送信するフローを特定する（ステップＳ１３３）。例えば、所定のスケジューリングアルゴリズムによって決定された送信順序を表す数値に対し、重み付け値を加算することにより、フローの送信順序を決定する。なお、スケジューリングアルゴリズムとして、例えばラウンドロビンを用いることができる。
【０１４２】
そして、送信スケジューリング部１３９１は、決定されたフローのフレームを送信ポート１０９１に出力する（ステップＳ１３５）。
【０１４３】
送信スケジューリング部１３９１は、処理の終了指示があった場合には処理を終了する（ステップＳ１３７：Ｙｅｓルート）。処理を終了しない場合には（ステップＳ１３７：Ｎｏルート）、引き続き処理を実行するため、ステップＳ１３１の処理に戻る。
【０１４４】
このような処理を実施することにより、フロー毎のバッファ使用量の変化に応じて共有バッファ１０５１からフレームを出力することができるようになる。
【０１４５】
次に、図２８を用いて、廃棄部１２９１及び１２９３が行う処理について説明する。ここでは、廃棄部１２９１が行う処理を例にして説明する。
【０１４６】
まず、廃棄部１２９１は、共有バッファ１０５１への出力待ちのフレームが有るか判断する（図２８：ステップＳ１５１）。出力待ちのフレームが無い場合（ステップＳ１５１：Ｎｏルート）、ステップＳ１６５の処理に移行する。一方、出力待ちのフレームが有る場合（ステップＳ１５１：Ｙｅｓルート）、廃棄部１２９１は、出力待ちのフレームのフローについて、ＥＰＤが有効であるか判断する（ステップＳ１５３）。ステップＳ１５３においては、例えばＥＰＤが有効か否かを示すデータがフロー毎に登録されたテーブル（図示せず）を用いて判断する。
【０１４７】
ＥＰＤが有効である場合（ステップＳ１５３：Ｙｅｓルート）、廃棄部１２９１は、出力待ちのフレームのフローと一致するフローのフレームによる共有バッファ１０５１の使用量が、当該フローについて設定された閾値を超えているか判断する（ステップＳ１５５）。
【０１４８】
設定された閾値を超えている場合（ステップＳ１５５：Ｙｅｓルート）、フレームを共有バッファ１０５１に格納すると共有バッファ１０５１が溢れる可能性が高くなるので、廃棄部１２９１はフレームを廃棄する（ステップＳ１５７）。そしてステップＳ１６５の処理に移行する。設定された閾値を超えていない場合（ステップＳ１５５：Ｎｏルート）、フレームを共有バッファ１０５１に格納しても問題は無いので、廃棄部１２９１はフレームを共有バッファ１０５１に出力する（ステップＳ１５９）。そしてステップＳ１６５の処理に移行する。
【０１４９】
一方、ステップＳ１５３において、ＥＰＤが有効ではない場合（ステップＳ１５３：Ｎｏルート）、廃棄部１２９１は、出力待ちのフレームを共有バッファ１０５１に出力可能であるか判断する（ステップＳ１６１）。ステップＳ１６１においては、フレームを共有バッファ１０５１に出力すると共有バッファ１０５１が溢れないか判断する。
【０１５０】
出力待ちのフレームを共有バッファ１０５１に出力可能ではない場合（ステップＳ１６１：Ｎｏルート）、廃棄部１２９１は、フレームを廃棄する（ステップＳ１５７）。一方、出力待ちのフレームを共有バッファ１０５１に出力可能である場合（ステップＳ１６１：Ｙｅｓルート）、廃棄部１２９１は、フレームを共有バッファ１０５１に出力する（ステップＳ１６３）。そしてステップＳ１６５の処理に移行する。
【０１５１】
そして、廃棄部１２９１は、処理の終了指示があった場合には処理を終了する（ステップＳ１６５：Ｙｅｓルート）。処理を終了しない場合には（ステップＳ１６５：Ｎｏルート）、引き続き処理を実行するため、ステップＳ１５１の処理に戻る。
【０１５２】
以上のようにすれば、共有バッファの使用量の変化に応じて設定された閾値に基づき、フレームの廃棄を行うことができるようになる。
【０１５３】
このように、本実施の形態では、共有バッファ１０５１の使用量の変化に応じて閾値が設定されるため、ＥＰＤによるフレームの廃棄が抑制されると共に、共有バッファ１０５１が溢れることを抑制できるようになる。従って、ある程度フレームの廃棄が許容されるフローに対して特に有効である。さらに、共有バッファ１０５１をポート毎に分割するわけではないため、共有バッファ１０５１を有効に利用できる。
【０１５４】
［実施の形態８］
図２９に、第８の実施の形態の中継装置の機能ブロック図を示す。第８の実施の形態の中継装置は、例えばレイヤ２のスイッチである。中継装置は、受信ポート１０１１及び１０１３と、分類部１０３１及び１０３３と、入力バッファ１２１１及び１２１３と、廃棄部１２９１及び１２９３と、共有バッファ１０５１と、送信スケジューリング部１３９１及び１３９３と、送信ポート１０９１及び１０９３と、監視部１１１１と、バッファデータ格納部１１３１と、検出部１３１１と、重み付け処理部１３５１と、閾値算出部１３７１とを含む。
【０１５５】
受信ポート１０１１は、受信したフレームを分類部１０３１に出力する。分類部１０３１は、入力されたフレームに対して、フローを識別するための情報を付与し、入力バッファ１２１１に格納する。廃棄部１２９１は、フロー毎に設定された閾値に基づきフレームを廃棄し、廃棄しないフレームを共有バッファ１０５１に格納する。送信スケジューリング部１３９１は、入力された重み付け値及び所定のアルゴリズムに基づきフレームの送信順序を決定し、決定された送信順序に従ってフレームを送信ポート１０９１に出力する。送信ポート１０９１は、入力されたフレームを宛先の装置に送信する。監視部１１１１は、共有バッファ１０５１の使用量をフロー毎に算出する。また、監視部１１１１は、共有バッファ１０５１の使用量の変化量を算出し、バッファデータ格納部１１３１に格納する。検出部１３１１は、バッファデータ格納部１１３１に格納されているデータを用いて、共有バッファ１０５１の使用量が変化したことを検出する。そして、検出部１３１１は、共有バッファ１０５１の使用量の変化を検出した場合には、重み付け処理部１３５１及び閾値算出部１３７１に処理を指示する。重み付け処理部１３５１は、バッファデータ格納部１１３１に格納されているデータに基づき、フレーム送信の優先度を表す重み付け値をフロー毎に算出し、送信スケジューリング部１３９１に出力する。閾値算出部１３７１は、バッファデータ格納部１１３１に格納されているデータに基づき、共有バッファ１０５１の使用量についての閾値をフロー毎に算出し、廃棄部１２９１及び１２９３に出力する。
【０１５６】
受信ポート１０１３の機能は、受信ポート１０１１の機能と同様である。分類部１０３３の機能は、分類部１０３１の機能と同様である。入力バッファ１２１３の機能は、入力バッファ１２１１の機能と同様である。廃棄部１２９３の機能は、廃棄部１２９１の機能と同様である。送信スケジューリング部１３９３の機能は、送信スケジューリング部１３９１の機能と同様である。送信ポート１０９３の機能は、送信ポート１０９１の機能と同様である。
【０１５７】
次に、図２９に示した中継装置の動作について説明する。但し、監視部１１１１の処理は第４の実施の形態で説明したものと同じであるので、説明を省略する。また、検出部１３１１及び重み付け処理部１３５１の処理は第７の実施の形態で説明したものと同じであるので、説明を省略する。
【０１５８】
そこで、図３０を用いて、廃棄部１２９１及び１２９３が行う処理について説明する。ここでは、廃棄部１２９１の処理を例にして説明する。
【０１５９】
まず、廃棄部１２９１は、共有バッファ１０５１への出力待ちのフレームが有るか判断する（図３０：ステップＳ１８１）。出力待ちのフレームが無い場合（ステップＳ１８１：Ｎｏルート）、ステップＳ１９３の処理に移行する。一方、出力待ちのフレームが有る場合（ステップＳ１８１：Ｙｅｓルート）、廃棄部１２９１は、出力待ちのフレームのフローについて、ＥＰＤが有効であるか判断する（ステップＳ１８３）。ステップＳ１８３においては、例えばＥＰＤが有効か否かを示すデータがフロー毎に登録されたテーブル（図示せず）を用いて判断する。
【０１６０】
ＥＰＤが有効である場合（ステップＳ１８３：Ｙｅｓルート）、廃棄部１２９１は、出力待ちのフレームのフローと一致するフローのフレームによる共有バッファ１０５１の使用量が、当該フローについて設定された閾値を超えているか判断する（ステップＳ１８５）。
【０１６１】
設定された閾値を超えている場合（ステップＳ１８５：Ｙｅｓルート）、フレームを共有バッファ１０５１に格納すると共有バッファ１０５１が溢れる可能性が高くなるので、廃棄部１２９１はフレームを廃棄する（ステップＳ１８７）。そしてステップＳ１９３の処理に移行する。設定された閾値を超えていない場合（ステップＳ１８５：Ｎｏルート）、フレームを共有バッファ１０５１に格納しても問題は無いので、廃棄部１２９１はフレームを共有バッファ１０５１に出力する（ステップＳ１８９）。そしてステップＳ１９３の処理に移行する。
【０１６２】
一方、ステップＳ１８３において、ＥＰＤが有効ではない場合（ステップＳ１８３：Ｎｏルート）、廃棄部１２９１は、出力待ちのフレームを共有バッファ１０５１に出力可能であるか判断する（ステップＳ１９１）。ステップＳ１９１においては、フレームを共有バッファ１０５１に出力すると共有バッファ１０５１が溢れないか判断する。
【０１６３】
出力待ちのフレームを共有バッファ１０５１に出力可能ではない場合（ステップＳ１９１：Ｎｏルート）、廃棄部１２９１は、フレームを入力バッファ１２１１に格納したままにし、ステップＳ１９３の処理に移行する。
【０１６４】
一方、出力待ちのフレームを共有バッファ１０５１に出力可能である場合（ステップＳ１９１：Ｙｅｓルート）、廃棄部１２９１は、フレームを共有バッファ１０５１に出力する（ステップＳ１８９）。そしてステップＳ１９３の処理に移行する。
【０１６５】
そして、廃棄部１２９１は、処理の終了指示があった場合には処理を終了する（ステップＳ１９３：Ｙｅｓルート）。処理を終了しない場合には（ステップＳ１９３：Ｎｏルート）、引き続き処理を実行するため、ステップＳ１８１の処理に戻る。
【０１６６】
以上のようにすれば、共有バッファの使用量の変化に応じて設定された閾値に基づき、フレームの廃棄を行うことができるようになる。また、ＥＰＤが有効でないフローのフレームを共有バッファに出力できない場合に、入力バッファに待機させておくことができるので、フレームの廃棄を抑制することができるようになる。
【０１６７】
また、本実施の形態の中継装置は、このような構成を採用しているので、第７の実施の形態の中継装置と同様の効果を有する。
【０１６８】
［実施の形態９］
図３１に、第９の実施の形態の中継装置の機能ブロック図を示す。第９の実施の形態の中継装置は、例えばレイヤ２のスイッチである。中継装置は、受信ポート１０１１及び１０１３と、分類部１０３１及び１０３３と、分配部１２６１及び１２６３と、入力バッファ１２１１乃至１２１７と、廃棄部１２９１乃至１２９７と、共有バッファ１０５１と、送信スケジューリング部１３９１及び１３９３と、送信ポート１０９１及び１０９３と、監視部１１１１と、バッファデータ格納部１１３１と、検出部１３１１と、重み付け処理部１３５１と、閾値算出部１３７１とを含む。
【０１６９】
受信ポート１０１１は、受信したフレームを分類部１０３１に出力する。分類部１０３１は、入力されたフレームに対して、フローを識別するための情報を付与し、分配部１２６１に出力する。分配部１２６１は、フローを識別するための情報に応じて、フレームを入力バッファ１２１１又は入力バッファ１２１３に格納する。廃棄部１２９１は、フロー毎に設定された閾値に基づきフレームを廃棄し、廃棄しないフレームを共有バッファ１０５１に格納する。送信スケジューリング部１３９１は、入力された重み付け値及び所定のアルゴリズムに基づきフレームの送信順序を決定し、決定された送信順序に従ってフレームを送信ポート１０９１に出力する。送信ポート１０９１は、入力されたフレームを宛先の装置に送信する。監視部１１１１は、共有バッファ１０５１の使用量をフロー毎に算出する。また、監視部１１１１は、共有バッファ１０５１の使用量の変化量を算出し、バッファデータ格納部１１３１に格納する。検出部１３１１は、バッファデータ格納部１１３１に格納されているデータを用いて、共有バッファ１０５１の使用量が変化したことを検出する。そして、検出部１３１１は、共有バッファ１０５１の使用量の変化を検出した場合には、重み付け処理部１３５１及び閾値算出部１３７１に処理を指示する。重み付け処理部１３５１は、バッファデータ格納部１１３１に格納されているデータに基づき、フレーム送信の優先度を表す重み付け値をフロー毎に算出し、送信スケジューリング部１３９１に出力する。閾値算出部１３７１は、バッファデータ格納部１１３１に格納されているデータに基づき、共有バッファ１０５１の使用量についての閾値をフロー毎に算出し、廃棄部１２９１乃至１２９７に出力する。
【０１７０】
受信ポート１０１３の機能は、受信ポート１０１１の機能と同様である。分類部１０３３の機能は、分類部１０３１の機能と同様である。分配部１２６３の機能は、分配部１２６１の機能と同様である。入力バッファ１２１３乃至１２１７の機能は、入力バッファ１２１１の機能と同様である。廃棄部１２９３乃至１２９７の機能は、廃棄部１２９１の機能と同様である。送信スケジューリング部１３９３の機能は、送信スケジューリング部１３９１の機能と同様である。送信ポート１０９３の機能は、送信ポート１０９１の機能と同様である。
【０１７１】
本実施の形態の監視部１１１１の処理は第４の実施の形態で説明したものと同じであるので、説明を省略する。また、検出部１３１１及び重み付け処理部１３５１の処理は第７の実施の形態で説明したものと同じであるので、説明を省略する。さらに、廃棄部１２９１乃至１２９７の処理は第８の実施の形態で説明したものと同じであるので、説明を省略する。
【０１７２】
本実施の形態の中継装置は、このような構成を採用しているので、第８の実施の形態の中継装置と同様の効果を有する。また、本実施の形態においては、フロー毎に入力バッファが設けられており、各入力バッファには、異なる１の廃棄部が対応付けられている。このような構成を採用することで、フロー毎のフレームの廃棄を行いやすくなるので、中継装置内においてより効率的にフレームを処理することができるようになっている。
【０１７３】
以上本技術の一実施の形態を説明したが、本技術はこれに限定されるものではない。例えば、上で説明した中継装置の機能ブロック図は必ずしも実際のプログラムモジュール構成に対応するものではない。
【０１７４】
また、上で説明した各テーブルの構成は一例であって、必ずしも上記のような構成でなければならないわけではない。さらに、処理フローにおいても、処理結果が変わらなければ処理の順番を入れ替えることも可能である。さらに、並列に実行させるようにしても良い。
【０１７５】
なお、上で述べた実施の形態においては、フレームの送信順序を決定する際のアルゴリズムとしてラウンドロビンを使用しているが、他のアルゴリズムを使用してもよい。
【０１７６】
また、各処理部及びバッファ等の数は、上で示した数に限られない。
【０１７７】
また、上で述べた実施の形態においては、フロー毎にフレームを処理しているが、例えば分類部がフレームに対してポートを識別するための情報を付与することにより、ポート毎にフレームを処理するようにしてもよい。
【０１７８】
また、第４乃至第６の実施の形態で述べた流入量制御と、第７乃至第９の実施の形態で述べたパケットの廃棄の閾値の制御とを併用してもよい。これによって、共有バッファの管理をより柔軟に行うことができるようになる。
【０１７９】
以上述べた本技術の実施の形態をまとめると以下のようになる。
【０１８０】
本実施の形態の第１の態様に係る中継装置は、（Ａ）受信したフレームを格納する第１バッファと、（Ｂ）受信したフレームを第１バッファに格納すると当該受信したフレームの通信種別に一致する通信種別のフレームによる第１バッファの使用量が当該通信種別について設定されている第１の閾値を超えるか判断し、超えると判断した場合には当該受信したフレームを廃棄する廃棄部と、（Ｃ）少なくとも２以上の時点について通信種別毎に第１バッファの使用量を算出し、第１バッファの使用量の変化を表す数値を通信種別毎に算出する第１算出部と、（Ｄ）第１バッファの使用量の変化を表す数値に基づき、通信種別毎に第１の閾値を算出し、廃棄部に対して設定する設定部とを有する。
【０１８１】
このようにすれば、通信種別毎にフレーム廃棄が抑制されるように制御されると共に、バッファ溢れが生じにくくなる。よって、通信品質の劣化を抑制できるようになる。
【０１８２】
また、上で述べた設定部が、（ｄ１）第１バッファの使用量が増加している通信種別について、当該通信種別について既に設定されている第１の閾値よりも小さい第１の閾値を算出し、第１バッファの使用量が減少している通信種別について、当該通信種別について既に設定されている第１の閾値以上の第１の閾値を算出するようにしてもよい。このようにすれば、使用量が増加している通信種別がバッファを占有してバッファ溢れの発生を抑制できると共に、使用量が減少している通信種別についてはフレームの廃棄による通信品質の劣化を抑制できるようになる。
【０１８３】
また、本中継装置が、（Ｅ）第１バッファの使用量の変化を表す数値に基づき、通信種別毎に当該通信種別のフレームの送信を停止させるか判断する判断部と、（Ｆ）判断部により、第１の通信種別のフレームの送信を停止させると判断された場合に、当該第１の通信種別のフレームの送信を停止することを要求する停止要求を生成し、当該第１の通信種別のフレームの送信元の装置宛に出力する出力部とをさらに有してもよい。このようにすれば、例えばバッファ使用量の増加が著しい通信種別及びフレームの廃棄に対する許容度が低い通信種別（例えばＦＣｏＥ）に対しても適切に対処することができるようになる。
【０１８４】
また、本中継装置が、（Ｇ）第１バッファの使用量の変化を表す数値に基づき、送信の優先度を通信種別毎に算出する第２算出部と、（Ｈ）送信の優先度に基づき、第１バッファに格納されているフレームの送信スケジュールを決定する決定部とをさらに有してもよい。これにより、特定の通信種別によるバッファの占有等を抑制できるようになる。
【０１８５】
また、本中継装置が、（Ｉ）受信したフレームを格納する第２バッファをさらに有し、第２バッファから出力されたフレームが、第１バッファに入力されるようにしてもよい。そして、上で述べた出力部が、（ｆ１）受信したフレームを格納すると当該受信したフレームの通信種別に一致する通信種別のフレームによる第２バッファの使用量が当該通信種別について設定されている第２の閾値を超えるか判断し、（ｆ２）第２の閾値を超えると判断した場合、当該受信したフレームの送信元の装置宛にフレームの送信を停止することを要求する停止要求を出力するようにしてもよい。これにより、通信状況の変化に対してより柔軟に対処することができるようになる。
【０１８６】
また、上で述べた第２バッファ及び廃棄部の数が複数であってもよい。そして、受信したフレームは、当該フレームの通信種別に応じて複数の第２バッファのいずれかに格納され、複数の第２バッファの各々には、複数の廃棄部のうち異なる１の廃棄部が対応付けられていてもよい。通信種別毎のフレームの廃棄及び送信停止の判断を効率的に行うことができるようになる。
【０１８７】
本実施の形態の第２の態様に係る中継装置は、（Ｊ）受信したフレームを格納する第１バッファと、（Ｋ）少なくとも２以上の時点について通信種別毎に第１バッファの使用量を算出し、第１バッファの使用量の変化を表す数値を通信種別毎に算出する第１算出部と、（Ｌ）第１バッファの使用量の変化を表す数値に基づき、単位時間当たりのフレームの流入データ量についての第１の閾値を通信種別毎に算出する第２算出部と、（Ｍ）受信したフレームを第１バッファに格納したとしても当該受信したフレームの通信種別と一致する通信種別のフレームの単位時間当たりの流入データ量が当該受信したフレームの通信種別について算出された第１の閾値以下である場合に、当該受信したフレームを第１バッファに格納する制御部とを有する。
【０１８８】
このようにすれば、バッファ使用量の変化に対して適切な流入データ量が設定されるようになるので、バッファ溢れに対して柔軟に対処することができるようになる。これにより、通信品質の劣化を抑制できるようになる。なお、流入データ量の制限を行うので、フレームの廃棄に対する許容度が低い通信種別（例えばＦＣｏＥ）に対しても有効である。
【０１８９】
また、上で述べた第２算出部は、第１バッファの使用量が増加している通信種別についての第１の閾値が第１バッファの使用量が減少している通信種別についての第１の閾値よりも小さくなるように、通信種別毎に第１の閾値を算出するようにしてもよい。このようにすれば、使用量が増加している通信種別がバッファを占有することによるバッファ溢れを抑制できると共に、使用量が減少している通信種別の帯域を制限しすぎることを抑制できるようになる。
【０１９０】
また、本中継装置が、（Ｎ）受信したフレームを第１バッファよりも先に格納する第２バッファと、（Ｏ）受信したフレームを第２バッファに格納すると当該受信したフレームの通信種別に一致する通信種別のフレームによる第２バッファの使用量が当該通信種別について設定されている第２の閾値を超えるか判断し、超えると判断した場合には当該受信したフレームの送信元の装置宛にフレームの送信を停止することを要求する停止要求を出力する出力部とをさらに有してもよい。これにより、通信状況の変化に対してより柔軟に対処することができるようになる。
【０１９１】
また、上で述べた第２バッファの数が複数であり、受信したフレームは、当該フレームの通信種別に応じて複数の第２バッファのいずれかに格納されるようにしてもよい。このようにすれば、通信種別毎の流入データ量の管理及び送信停止の判断をより効率的に行うことができるようになる。
【０１９２】
本実施の形態の第３の態様に係る中継装置は、（Ｐ）受信したフレームを格納するバッファと、（Ｑ）少なくとも２以上の時点について通信種別毎にバッファの使用量を算出し、バッファの使用量の変化を表す数値を通信種別毎に算出する算出部と、（Ｒ）バッファの使用量の変化を表す数値に基づき、通信種別毎に当該通信種別のフレームの送信を停止させるか判断する判断部と、（Ｓ）判断部が第１の通信種別のフレームの送信を停止させると判断した場合に、当該第１の通信種別のフレームの送信を停止することを要求する停止要求を生成し、当該第１の通信種別のフレームの送信元の装置宛に出力する出力部とを有する。
【０１９３】
このようにすれば、通信種別毎のバッファ使用量の変化に応じて適切にフレームの送信を停止させることができる。これにより、バッファ溢れを抑制し、通信品質の劣化を抑制できるようになる。
【０１９４】
本実施の形態の第１の態様に係る制御方法は、（Ｔ）少なくとも２以上の時点について通信種別毎にバッファの使用量を算出し、バッファの使用量の変化を表す数値を通信種別毎に算出し、（Ｕ）バッファの使用量の変化を表す数値に基づき、フレーム廃棄のための閾値を通信種別毎に算出し、（Ｖ）受信したフレームをバッファに格納すると当該受信したフレームの通信種別と一致する通信種別のフレームによるバッファの使用量が当該受信したフレームの通信種別について設定されている閾値を超える場合、当該受信したフレームを廃棄する処理を含む。
【０１９５】
本実施の形態の第２の態様に係る制御方法は、（Ｗ）少なくとも２以上の時点について通信種別毎にバッファの使用量を算出し、バッファの使用量の変化を表す数値を通信種別毎に算出し、（Ｘ）バッファの使用量の変化を表す数値に基づき、単位時間当たりのフレームの流入データ量についての閾値を算出し、（Ｙ）受信したフレームをバッファに格納したとしても当該受信したフレームの通信種別と一致する通信種別のフレームの単位時間当たりの流入データ量が当該受信したフレームの通信種別について算出された閾値以下である場合に、当該受信したフレームをバッファに格納する処理を含む。
【０１９６】
本実施の形態の第３の態様に係る制御方法は、（Ｚ）少なくとも２以上の時点について通信種別毎にバッファの使用量を算出し、バッファの使用量の変化を表す数値を通信種別毎に算出し、（ＡＡ）バッファの使用量の変化を表す数値に基づき、通信種別毎に当該通信種別のフレームの送信を停止させるか判断し、（ＡＢ）第１の通信種別のフレームの送信を停止させると判断した場合に、当該第１の通信種別のフレームの送信を停止することを要求する停止要求を生成し、当該第１の通信種別のフレームの送信元の装置宛に出力する処理を含む。
【０１９７】
なお、上記方法による処理をコンピュータに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
【０１９８】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１９９】
（付記１）
受信したフレームを格納する第１バッファと、
受信したフレームを前記第１バッファに格納すると当該受信したフレームの通信種別に一致する通信種別のフレームによる前記第１バッファの使用量が当該通信種別について設定されている第１の閾値を超えるか判断し、超えると判断した場合には当該受信したフレームを廃棄する廃棄部と、
少なくとも２以上の時点について通信種別毎に前記第１バッファの使用量を算出し、前記第１バッファの使用量の変化を表す数値を通信種別毎に算出する第１算出部と、
前記第１バッファの使用量の変化を表す数値に基づき、通信種別毎に前記第１の閾値を算出し、前記廃棄部に対して設定する設定部と、
を有する中継装置。
【０２００】
（付記２）
前記設定部が、前記第１バッファの使用量が増加している通信種別について、当該通信種別について既に設定されている第１の閾値よりも小さい第１の閾値を算出し、前記第１バッファの使用量が減少している通信種別について、当該通信種別について既に設定されている第１の閾値以上の第１の閾値を算出する
付記１記載の中継装置。
【０２０１】
（付記３）
前記第１バッファの使用量の変化を表す数値に基づき、送信の優先度を通信種別毎に算出する第２算出部と、
前記送信の優先度に基づき、前記第１バッファに格納されているフレームの送信スケジュールを決定する決定部と、
をさらに有する付記１又は２記載の中継装置。
【０２０２】
（付記４）
受信したフレームを格納する第１バッファと、
少なくとも２以上の時点について通信種別毎に前記第１バッファの使用量を算出し、前記第１バッファの使用量の変化を表す数値を通信種別毎に算出する第１算出部と、
前記第１バッファの使用量の変化を表す数値に基づき、単位時間当たりのフレームの流入データ量についての第１の閾値を通信種別毎に算出する第２算出部と、
受信したフレームを前記第１バッファに格納したとしても当該受信したフレームの通信種別と一致する通信種別のフレームの単位時間当たりの流入データ量が当該受信したフレームの通信種別について算出された第１の閾値以下である場合に、当該受信したフレームを前記第１バッファに格納する制御部と、
を有する中継装置。
【０２０３】
（付記５）
前記第２算出部は、前記第１バッファの使用量が増加している通信種別についての第１の閾値が前記第１バッファの使用量が減少している通信種別についての第１の閾値よりも小さくなるように、通信種別毎に前記第１の閾値を算出する
付記４記載の中継装置。
【０２０４】
（付記６）
受信したフレームを前記第１バッファよりも先に格納する第２バッファと、
受信したフレームを前記第２バッファに格納すると当該受信したフレームの通信種別に一致する通信種別のフレームによる前記第２バッファの使用量が当該通信種別について設定されている第２の閾値を超えるか判断し、
前記第２の閾値を超えると判断した場合、当該受信したフレームの送信元の装置宛にフレームの送信を停止することを要求する停止要求を出力する出力部と、
をさらに有する付記４又は５記載の中継装置。
【０２０５】
（付記７）
前記第２バッファの数が複数であり、
受信したフレームは、当該フレームの通信種別に応じて複数の第２バッファのいずれかに格納される
付記６記載の中継装置。
【０２０６】
（付記８）
受信したフレームを格納するバッファと、
少なくとも２以上の時点について通信種別毎に前記バッファの使用量を算出し、前記バッファの使用量の変化を表す数値を通信種別毎に算出する算出部と、
前記バッファの使用量の変化を表す数値に基づき、通信種別毎に当該通信種別のフレームの送信を停止させるか判断する判断部と、
前記判断部が第１の通信種別のフレームの送信を停止させると判断した場合に、当該第１の通信種別のフレームの送信を停止することを要求する停止要求を生成し、当該第１の通信種別のフレームの送信元の装置宛に出力する出力部と、
を有する中継装置。
【０２０７】
（付記９）
少なくとも２以上の時点について通信種別毎にバッファの使用量を算出し、前記バッファの使用量の変化を表す数値を通信種別毎に算出し、
前記バッファの使用量の変化を表す数値に基づき、フレーム廃棄のための閾値を通信種別毎に算出し、
受信したフレームを前記バッファに格納すると当該受信したフレームの通信種別と一致する通信種別のフレームによる前記バッファの使用量が当該受信したフレームの通信種別について設定されている閾値を超える場合、当該受信したフレームを廃棄する
処理を、コンピュータに実行させるためのプログラム。
【０２０８】
（付記１０）
少なくとも２以上の時点について通信種別毎にバッファの使用量を算出し、前記バッファの使用量の変化を表す数値を通信種別毎に算出し、
前記バッファの使用量の変化を表す数値に基づき、フレーム廃棄のための閾値を通信種別毎に算出し、
受信したフレームを前記バッファに格納すると当該受信したフレームの通信種別と一致する通信種別のフレームによる前記バッファの使用量が当該受信したフレームの通信種別について設定されている閾値を超える場合、当該受信したフレームを廃棄する
処理を、コンピュータが実行する制御方法。
【０２０９】
（付記１１）
少なくとも２以上の時点について通信種別毎にバッファの使用量を算出し、前記バッファの使用量の変化を表す数値を通信種別毎に算出し、
前記バッファの使用量の変化を表す数値に基づき、単位時間当たりのフレームの流入データ量についての閾値を算出し、
受信したフレームを前記バッファに格納したとしても当該受信したフレームの通信種別と一致する通信種別のフレームの単位時間当たりの流入データ量が当該受信したフレームの通信種別について算出された閾値以下である場合に、当該受信したフレームを前記バッファに格納する
処理を、コンピュータに実行させるためのプログラム。
【０２１０】
（付記１２）
少なくとも２以上の時点について通信種別毎にバッファの使用量を算出し、前記バッファの使用量の変化を表す数値を通信種別毎に算出し、
前記バッファの使用量の変化を表す数値に基づき、単位時間当たりのフレームの流入データ量についての閾値を算出し、
受信したフレームを前記バッファに格納したとしても当該受信したフレームの通信種別と一致する通信種別のフレームの単位時間当たりの流入データ量が当該受信したフレームの通信種別について算出された閾値以下である場合に、当該受信したフレームを前記バッファに格納する
処理を、コンピュータが実行する制御方法。
【０２１１】
（付記１３）
少なくとも２以上の時点について通信種別毎にバッファの使用量を算出し、前記バッファの使用量の変化を表す数値を通信種別毎に算出し、
前記バッファの使用量の変化を表す数値に基づき、通信種別毎に当該通信種別のフレームの送信を停止させるか判断し、
第１の通信種別のフレームの送信を停止させると判断した場合に、当該第１の通信種別のフレームの送信を停止することを要求する停止要求を生成し、当該第１の通信種別のフレームの送信元の装置宛に出力する
処理を、コンピュータに実行させるためのプログラム。
【０２１２】
（付記１４）
少なくとも２以上の時点について通信種別毎にバッファの使用量を算出し、前記バッファの使用量の変化を表す数値を通信種別毎に算出し、
前記バッファの使用量の変化を表す数値に基づき、通信種別毎に当該通信種別のフレームの送信を停止させるか判断し、
第１の通信種別のフレームの送信を停止させると判断した場合に、当該第１の通信種別のフレームの送信を停止することを要求する停止要求を生成し、当該第１の通信種別のフレームの送信元の装置宛に出力する
処理を、コンピュータが実行する制御方法。
【符号の説明】
【０２１３】
２０１  第１バッファ    ２０３  第１算出部
２０５  設定部    ２０７  廃棄部
３０１  第１バッファ    ３０３  第１算出部
３０５  第２算出部    ３０７  制御部
４０１  バッファ    ４０３  算出部
４０５  判断部    ４０７  出力部
１０１１，１０１３  受信ポート
１０３１，１０３３  分類部
１０５１  共有バッファ
１０７１，１０７３  選択部
１０９１，１０９３  送信ポート
１１１１  監視部    １１３１  バッファデータ格納部
１１５１  フロー制御部    １１７１  流量決定部
１１９１  スケジューリング部
１２１１，１２１３  入力バッファ
１２３１，１２３３  フロー制御部
１２５１，１２５３  計測部
１２６１，１２６３  分配部
１２７１，１２７３  選択部
１２９１，１２９３  廃棄部
１３１１  検出部    １３５１  重み付け処理部
１３７１  閾値算出部
１３９１，１３９３  送信スケジューリング部
【図１】
0005919727.tif 000002
【図２】
0005919727.tif 000003
【図３】
0005919727.tif 000004
【図４】
0005919727.tif 000005
【図５】
0005919727.tif 000006
【図６】
0005919727.tif 000007
【図７】
0005919727.tif 000008
【図８】
0005919727.tif 000009
【図９】
0005919727.tif 000010
【図１０】
0005919727.tif 000011
【図１１】
0005919727.tif 000012
【図１２】
0005919727.tif 000013
【図１３】
0005919727.tif 000014
【図１４】
0005919727.tif 000015
【図１５】
0005919727.tif 000016
【図１６】
0005919727.tif 000017
【図１７】
0005919727.tif 000018
【図１８】
0005919727.tif 000019
【図１９】
0005919727.tif 000020
【図２０】
0005919727.tif 000021
【図２１】
0005919727.tif 000022
【図２２】
0005919727.tif 000023
【図２３Ａ】
0005919727.tif 000024
【図２３Ｂ】
0005919727.tif 000025
【図２４】
0005919727.tif 000026
【図２５】
0005919727.tif 000027
【図２６】
0005919727.tif 000028
【図２７】
0005919727.tif 000029
【図２８】
0005919727.tif 000030
【図２９】
0005919727.tif 000031
【図３０】
0005919727.tif 000032
【図３１】
0005919727.tif 000033