(57)【要約】【課題】相対的に低い転送レートのフローに対するバッファ容量を効率的に確保する。【解決手段】バッファＫｔ１，Ｋｔ２，Ｋｔ３，Ｋｔ４，Ｋｔ５，Ｋｔ６は、現時点以降に順次読み出しの対象となる時間領域ｔ１，ｔ２，ｔ３，ｔ４，ｔ５，ｔ６それぞれに対応付けられており格納できるデータ量が識別子に対応する転送レートごとに定められる。制御部１ｃは、現時点と時間領域ｔ３との時間差に基づいて、当該時間領域ｔ３よりも前の時間領域ｔ２に対応するバッファＫｔ２のサイズよりも、当該時間領域ｔ３に対応するバッファＫｔ３のサイズを小さくする。【選択図】図１
2014123913.tif 000002
【特許請求の範囲】
【請求項１】
転送レートに対応する識別子が付与されたデータの転送に用いられ、転送レートを調整するために転送対象のデータを保持可能な中継装置であって、
現時点以降に順次読み出しの対象となる複数の時間領域の何れかに対応付けられており格納できるデータ量が識別子に対応する転送レートごとに定められる複数のバッファと、
現時点と時間領域との時間差に基づいて、当該時間領域よりも前の時間領域に対応するバッファのサイズよりも、当該時間領域に対応するバッファのサイズを小さくする制御部と、
を有する中継装置。
【請求項２】
前記制御部は、識別子に対応する転送レートの設定変更に応じて、前記複数のバッファのサイズを変更する、請求項１記載の中継装置。
【請求項３】
前記複数の時間領域それぞれの時間幅よりも長い時間幅である複数の他の時間領域の何れかに対応付けられており格納できるデータ量が識別子に対応する転送レートごとに定められる複数の他のバッファと、
前記複数のバッファおよび前記複数の他のバッファの何れかからデータを読み出すセレクタと、
を有する請求項１または２記載の中継装置。
【請求項４】
前記セレクタは、前記複数のバッファのうちの第１のバッファと前記複数の他のバッファのうちの第２のバッファとの両方から１単位時間の間にデータを読み出す際に、前記第１のバッファの読み出しが完了してから前記第２のバッファの読み出しを行う、請求項３記載の中継装置。
【請求項５】
前記セレクタは、前記複数のバッファのうちの第１のバッファと前記複数の他のバッファのうちの第２のバッファとの両方から１単位時間の間にデータを読み出す際に、前記第１のバッファおよび前記第２のバッファそれぞれに対して予め定められた重み付けに基づいて読み出し元を切り替える、請求項３記載の中継装置。
【請求項６】
前記制御部は、前記複数のバッファおよび前記複数の他のバッファのうち、前記複数のバッファに優先的にデータを格納する、請求項３乃至５の何れか１項に記載の中継装置。
【請求項７】
前記制御部は、データの識別子に対応する転送レートに基づいて前記複数のバッファおよび前記複数の他のバッファの何れに当該データを格納するかを決定する、請求項３乃至５の何れか１項に記載の中継装置。
【請求項８】
前記制御部は、前記時間差が閾値以上である時間領域に対応するバッファのサイズを、当該時間領域よりも前の時間領域に対応するバッファよりも小さくする、請求項１乃至７の何れか１項に記載の中継装置。
【請求項９】
転送レートに対応する識別子が付与されたデータの転送に用いられ、転送レートを調整するために転送対象のデータを保持可能な中継装置で実行されるバッファ制御方法であって、
現時点以降に順次読み出しの対象となる複数の時間領域の何れかに対応付けられており格納できるデータ量が識別子に対応する転送レートごとに定められる複数のバッファを備えた前記中継装置が、
現時点と時間領域との時間差に基づいて、当該時間領域よりも前の時間領域に対応するバッファのサイズよりも、当該時間領域に対応するバッファのサイズを小さくする、
バッファ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は中継装置およびバッファ制御方法に関する。
【背景技術】
【０００２】
現在、種々の装置がネットワークを介して接続されている。ネットワークは１以上の中継装置を含む。中継装置は、受信したデータを宛先の装置へ向けて転送する。ネットワークは、種々のユーザやサービスなどの通信に用いられる。中継装置では、ユーザやサービスなどの通信で発生する個々のトラフィックを、データに付与された所定の識別子を用いて、フローと呼ばれる単位で区別することがある。
【０００３】
ネットワークでは複数のフローが発生する一方、回線の帯域には限りがある。流れるデータ量が回線の帯域を超過すると輻輳により通信が遅延し得る。そこで、中継装置ではポリシングやシェーピングなどのＱｏＳ（Quality of Service）制御を行うことがある。
【０００４】
ポリシングは、データの転送レートが上限レートを超過した場合に、超過分のデータを破棄する技術である。シェーピングは、データの転送レートが上限レートを超過した場合に、超過分のデータをバッファに格納しておき、所定時間が経過した後に出力する技術である。これらの技術を用いることで、フローごとのデータの転送レートを保証し得る。
【０００５】
ここで、シェーピングでは、バッファに格納されたデータを後で出力するためにスケジューリングが行われる。例えば、入力パケットをバッファに格納するとともに、フローごとの入力パケットの長さと前回のパケット出力終了時間と所望送信レートを規定するパケット出力間隔とに基づいて、当該入力パケットの出力終了時間を予め算出しておく提案がある。算出された出力終了時間に当該入力パケットをバッファから出力することで、可変長のパケットでもフローごとの所望送信レートで出力し得る。
【０００６】
なお、コネクションごとに、データをバッファに格納する前に廃棄する手段を備えることで、複数のコネクションを同一のバッファに格納しながら各コネクションに対して最小帯域を保証する提案もある。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００６−１９７２３５号公報
【特許文献２】特開平１１−１１２５２７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
上述のように、シェーピングでは、制限レートを超過した分のデータを一時的に格納するためにバッファが用いられる。例えば、複数のフローのデータを格納可能なバッファを複数用意し、スケジューリングされたデータを各バッファに振り分けることが考えられる。読み出し対象とするバッファを所定の時間間隔で順次切替えて、各バッファに格納されたデータを順次出力する。このとき、１つのバッファ内に格納できるフローごとのデータ量は、フローごとの転送レートに応じて制限され得る。具体的には、相対的に高い転送レートのフローに対しては相対的に大きなデータ量の格納を許容し、相対的に低い転送レートのフローに対しては相対的に小さなデータ量の格納を許容することが考えられる。
【０００９】
しかし、この場合、相対的に低い転送レートのフローに対する実質的なバッファ容量は、相対的に高い転送レートのフローに対するバッファ容量よりも小さくなる。バッファ容量が不足してスケジューリングできない場合、データは破棄されてしまう。一方で、複数のバッファとして利用できるメモリサイズは有限である。そこで、限られたメモリサイズの中で、相対的に低い転送レートのフローに対するバッファ容量をどのようにしてより多く確保するかが問題となる。
【００１０】
１つの側面では、本発明は、相対的に低い転送レートのフローに対するバッファ容量を効率的に確保できる中継装置およびバッファ制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
１つの態様では、転送レートに対応する識別子が付与されたデータの転送に用いられ、転送レートを調整するために転送対象のデータを保持可能な中継装置が提供される。この中継装置は、複数のバッファと制御部とを有する。複数のバッファは、現時点以降に順次読み出しの対象となる複数の時間領域の何れかに対応付けられており格納できるデータ量が識別子に対応する転送レートごとに定められる。制御部は、現時点と時間領域との時間差に基づいて、当該時間領域よりも前の時間領域に対応するバッファのサイズよりも、当該時間領域に対応するバッファのサイズを小さくする。
【００１２】
また、１つの態様では、転送レートに対応する識別子が付与されたデータの転送に用いられ、転送レートを調整するために転送対象のデータを保持可能な中継装置で実行されるバッファ制御方法が提供される。このバッファ制御方法では、現時点以降に順次読み出しの対象となる複数の時間領域の何れかに対応付けられており格納できるデータ量が識別子に対応する転送レートごとに定められる複数のバッファを備えた中継装置が、現時点と時間領域との時間差に基づいて、当該時間領域よりも前の時間領域に対応するバッファのサイズよりも、当該時間領域に対応するバッファのサイズを小さくする。
【発明の効果】
【００１３】
１つの側面では、相対的に低い転送レートのフローに対するバッファ容量を効率的に確保できる。
【図面の簡単な説明】
【００１４】
【図１】第１の実施の形態の中継装置を示す図である。
【図２】第２の実施の形態の中継装置のハードウェア例を示す図である。
【図３】第２の実施の形態のインタフェースカードを示す図である。
【図４】第２の実施の形態のインタフェースカードを示す図（続き）である。
【図５】第２の実施の形態のタイムテーブルの例を示す図である。
【図６】第２の実施の形態のバッファ管理テーブルの例を示す図である。
【図７】第２の実施の形態のフロー情報テーブルの例を示す図である。
【図８】第２の実施の形態のパケットの例を示す図である。
【図９】第２の実施の形態のバッファリングの例を示すフローチャートである。
【図１０】第２の実施の形態のパケットの格納例を示す図である。
【図１１】第２の実施の形態のバッファ再分配の例を示すフローチャートである。
【図１２】第２の実施の形態のバッファ再分配の例を示す図である。
【図１３】スケジューリングの典型例を示す図である。
【図１４】バッファのサイズの比較例を示す図である。
【図１５】第３の実施の形態のタイムテーブルの例を示す図である。
【図１６】第３の実施の形態のセレクタの例を示す図である。
【図１７】第３の実施の形態のバッファ管理テーブルの例を示す図である。
【図１８】第３の実施の形態のフロー情報テーブルの例を示す図である。
【図１９】第３の実施の形態のバッファリングの例を示すフローチャートである。
【図２０】第３の実施の形態の長ＴＲベースの処理例を示すフローチャートである。
【図２１】第３の実施の形態の長ＴＲベースのスケジューリング例を示す図である。
【図２２】第３の実施の形態の短ＴＲベースの処理を示すフローチャートである。
【図２３】第３の実施の形態の短ＴＲベースのスケジューリング例を示す図である。
【図２４】第３の実施の形態のバッファ再分配の例を示すフローチャートである。
【図２５】第４の実施の形態のフロー情報テーブルの例を示す図である。
【図２６】第４の実施の形態のバッファリングの例を示すフローチャートである。
【図２７】第４の実施の形態の高レートフローのスケジューリングを示す図である。
【図２８】第４の実施の形態の低レートフローのスケジューリングを示す図である。
【図２９】第５の実施の形態のタイムテーブルの例を示す図である。
【図３０】第５の実施の形態のバッファ管理テーブルの例を示す図である。
【図３１】第６の実施の形態の帯域管理テーブルの例を示す図である。
【図３２】第６の実施の形態のバッファ容量変更例を示すフローチャートである。
【図３３】第６の実施の形態のバッファ容量変更例を示す図である。
【図３４】バッファの他の例を示す図である。
【発明を実施するための形態】
【００１５】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態の中継装置を示す図である。中継装置１は、識別子が付与されたデータの転送に用いられる。識別子は、フローを識別するための情報である。例えば事前の契約などによって、識別子（フロー）ごとに保証される転送レートが定められる。識別子と保証される転送レートとの対応関係を示す情報は中継装置１に予め与えられる。識別子は、中継装置１内の処理に用いるために付加されるものでもよい。中継装置１から送出されるデータには当該識別子が付加されていなくてもよい。
【００１６】
中継装置１は、転送レートを調整するために転送対象のデータを保持し得る。このような機能はシェーピングと呼ばれることもある。中継装置１は、記憶部１ａ、バッファ群１ｂおよび制御部１ｃを有する。
【００１７】
記憶部１ａは、バッファ群１ｂに含まれる複数のバッファを管理するための情報を記憶する。記憶部１ａに記憶される情報は、複数のバッファと現時点以降で順次読み出しの対象となる複数の時間領域との対応関係を示す情報を含む。また、記憶部１ａに記憶される情報は、１つのバッファに格納できるフローごとのデータ量を示す情報を含む。これらの情報は制御部１ｃにより生成されて記憶部１ａに格納されてもよい。
【００１８】
１つのバッファに格納できるフローごとのデータ量は、各フローの転送レートに応じて定められる。相対的に転送レートが高いフロー（以下、高レートのフローということがある）は、相対的に転送レートが低いフロー（以下、低レートのフローということがある）よりも格納できるデータ量は多い。各フローにおいて契約などで保証される転送レートを実現できるようにするためである。
【００１９】
バッファ群１ｂは、複数のバッファの集合である。１つのバッファは１つのキューでもよい。バッファ群１ｂは、バッファＫｔ１，Ｋｔ２，Ｋｔ３，Ｋｔ４，Ｋｔ５，Ｋｔ６を含む。バッファＫｔ１，Ｋｔ２，Ｋｔ３，Ｋｔ４，Ｋｔ５，Ｋｔ６には、複数のフローのデータを格納できる。
【００２０】
バッファＫｔ１，Ｋｔ２，Ｋｔ３，Ｋｔ４，Ｋｔ５，Ｋｔ６は、上述のように現時点以降で順次読み出しの対象となる時間領域ｔ１，ｔ２，ｔ３，ｔ４，ｔ５，ｔ６に対応付けられている。時間領域ｔ１，ｔ２，ｔ３，ｔ４，ｔ５，ｔ６はこの順に連続している。例えば、時間領域ｔ１の次が時間領域ｔ２であり、時間領域ｔ２の次が時間領域ｔ３であるというように連続している。時間領域ｔ１は現時点に最も近く、現時点を含んでもよい。
【００２１】
各バッファは現時点を基準として、対応する各時間領域で読み出されることになる。具体的には、バッファＫｔ１は時間領域ｔ１で読み出される。バッファＫｔ２は時間領域ｔ２で読み出される。バッファＫｔ３は時間領域ｔ３で読み出される。バッファＫｔ４は時間領域ｔ４で読み出される。バッファＫｔ５は時間領域ｔ５で読み出される。バッファＫｔ６は時間領域ｔ６で読み出される。
【００２２】
制御部１ｃは、記憶部１ａに記憶された情報を参照し、現時点とある時間領域との時間差に基づいて、当該時間領域よりも前の時間領域に対応するバッファのサイズよりも、当該時間領域に対応するバッファのサイズを小さくする。あるいは、制御部１ｃは、現時点と時間領域との時間差が相対的に大きいほど、当該時間領域に対応するバッファのサイズを相対的に小さくする、ともいえる。
【００２３】
例えば、制御部１ｃは、現時点と各時間領域との時間差を、現時点と各時間領域内の何れかの時点（例えば、時間領域の開始時点、中央の時点または終了時点）との差により求めてもよい。
【００２４】
現時点との時間差が小さい順に各時間領域を並べると、時間領域ｔ１，ｔ２，ｔ３，ｔ４，ｔ５，ｔ６の順となる。すなわち、相対的な時間差が最小であるのは時間領域ｔ１である。相対的な時間差が最大であるのは時間領域ｔ６である。したがって、制御部１ｃは、バッファＫｔ１のサイズを最大とし、バッファＫｔ６のサイズを最小とする。制御部１ｃは、各バッファのサイズを段階的に小さくするように制御してもよい。
【００２５】
例えば、現時点とある時間領域との時間差が閾値を超えると、当該時間領域よりも前の時間領域に対応するバッファよりも、当該時間領域に対応するバッファのサイズを小さくする。より具体的には、バッファＫｔ１，Ｋｔ２のサイズを同一とする。現時点と時間領域ｔ３，ｔ４との時間差は第１の閾値以上である。よって、バッファＫｔ３，Ｋｔ４のサイズをバッファＫｔ１，Ｋｔ２よりも一段階小さいサイズとする。現時点と時間領域ｔ５，ｔ６との時間差は第２の閾値以上である。ここで、第２の閾値は第１の閾値よりも大きい。よって、バッファＫｔ５，Ｋｔ６のサイズをバッファＫｔ３，Ｋｔ４よりも一段階小さいサイズとする。
【００２６】
中継装置１によれば、制御部１ｃにより、現時点とある時間領域との時間差に基づいて、当該時間領域よりも前の時間領域に対応するバッファのサイズよりも、当該時間領域に対応するバッファのサイズが小さくなるように制御される。
【００２７】
ここで、例えば各バッファを同一のサイズとすることも考えられる。しかし、この場合、メモリ領域の割り当てが非効率となる可能性がある。具体的には次の通りである。
高レートのフローのデータは、１つのバッファにより多く格納できる。このため、ある時点においてトラフィックが集中して発生しても、直近のバッファに４個、次のバッファに１個というように現在時刻付近に対応するバッファを用いて多くのデータをスケジューリングできる。一方、低レートのフローのパケットは、１つのバッファに格納できるデータ量が、高レートのフローよりも小さい。未来側のバッファに対して飛び飛び（例えば、複数のバッファに対して、現時点に近い方から１個目、６個目、１１個目のように格納）でしか格納できないこともある。このようなスケジューリングの特性によれば、より未来側のバッファは、現時刻付近のバッファよりも、実際に格納されるデータ量が小さい可能性が高く、容量が余る可能性が高いことになる。このため、各バッファを全て同一のサイズとするのは非効率的となる。
【００２８】
そこで、中継装置１は、現時点と時間領域との時間差が相対的に大きいほど、当該時間領域に対応するバッファのサイズを相対的に小さくする。これにより、限られたメモリサイズの中で、低レートのフローに対するバッファ容量を効率的に確保できる。より未来側のバッファのサイズを小さくすることで、各バッファを同一サイズにした場合に使用される可能性の低いサイズ分を、更に未来側のバッファに割り当てることができる。すなわち、スケジューリングできる時間軸を延長できる。
【００２９】
例えば、バッファ群１ｂで利用できるメモリサイズが１２である場合に、各バッファのサイズを３に統一すると、カバーできる時間軸の範囲は時間領域ｔ１〜ｔ４である。また、上述のように、時間領域ｔ３，ｔ４ではバッファの容量が余る可能性がある。そこで、例えば、バッファＫｔ１，Ｋｔ２のサイズを３、バッファＫｔ３，Ｋｔ４のサイズを２、バッファＫｔ５，Ｋｔ６のサイズを１とする。すると、時間領域ｔ６までカバーできることになる。
【００３０】
例えば、バッファＫｔ１には、第１の転送レートのフロー（フローＸと称する）のデータＸ１、フローＸよりも低い転送レートのフロー（フローＹと称する）のデータＹ１およびフローＹよりも低い転送レートのフローＺのデータＺ１が格納される。フローＸは１つのバッファに対して格納できるデータ量が最大である。フローＹは１つのバッファに対して格納できるデータ量がフローＸよりも小さい。フローＺは１つのバッファに対して格納できるデータ量がフローＹよりも小さい。
【００３１】
例えば、バッファＫｔ２にはフローＸのデータＸ２、フローＹのデータＹ２およびフローＺのデータＺ２が格納される。バッファＫｔ３にはフローＹのデータＹ３およびフローＺのデータＺ３が格納される。バッファＫｔ４にはフローＺのデータＺ４が格納される。バッファＫｔ５にフローＺのデータＺ５が格納される。バッファＫｔ６にフローＺのデータＺ６が格納される。一方、全てのバッファを同一サイズとすると時間軸の時間領域ｔ４までしかカバーできないから、データＺ５，Ｚ６はスケジューリングできずに、破棄されることになる。バッファＫｔ６までスケジューリングできれば、より未来側のバッファに格納され得る低レートのフローが、スケジューリングできずに破棄されてしまう可能性を低減できる。
【００３２】
例えば、あるフローで短時間に不規則なトラフィックが集中して発生することがある。このような現象をバーストということがある。また、不規則なトラフィックが短時間に集中し易いことをバースト性が高いということがある。バースト性の高いフローに対処するために、比較的大きなバッファ容量を確保しておきたいことがある。第１の実施の形態によれば、低レートのフローに対して比較的大きなバッファ容量を確保できる。よって、低レートのフローでも、バーストに対してデータを収容できる可能性を高められる。すなわち、低レートのフローに対するバースト耐力を向上することができる。
【００３３】
［第２の実施の形態］
図２は、第２の実施の形態の中継装置のハードウェア例を示す図である。中継装置１００は、種々の装置（例えば、コンピュータや携帯端末装置）の間の通信を中継する。中継装置１００は、例えば、スイッチ装置やルータ装置である。中継装置１００は、インタフェースカード１０１，１０２，１０３、スイッチカード１０４，１０５およびコントロールカード１０６を有する。
【００３４】
インタフェースカード１０１，１０２，１０３は、中継装置１００に対してデータを入出力するためのインタフェースを備える。当該インタフェースは、物理リンク（ここでは、光ファイバ）に直接接続される。当該インタフェースは、例えばＳＦＰ（Small Form factor Pluggable）である。当該インタフェースは、銅線ケーブルなど他の種類の物理リンクと接続するものでもよい。
【００３５】
スイッチカード１０４，１０５は、インタフェースカード１０１，１０２，１０３の間でデータを入出力するためのスイッチである。
コントロールカード１０６は、インタフェースカード１０１，１０２，１０３およびスイッチカード１０４，１０５に対して制御用の情報を入出力する。コントロールカード１０６は、インタフェースカード１０１，１０２，１０３およびスイッチカード１０４，１０５の稼働状態を管理する。
【００３６】
図３は、第２の実施の形態のインタフェースカードを示す図である。インタフェースカード１０１は、ＣＰＵ（Central Processing Unit）１１０、ＡＳＩＣ（Application Specific Integrated Circuit）１１１、メモリ１１２、ＰＨＹ／ＭＡＣ（Media Access Control）デバイス１１３および光モジュール１１４，１１５，１１６を有する。インタフェースカード１０２，１０３もインタフェースカード１０１と同様のユニットにより実現できる。
【００３７】
ＣＰＵ１１０は、ＡＳＩＣ１１１と通信して所定のソフトウェア処理（例えば、統計上の収集）を行ったり、ユーザがＡＳＩＣ１１１に対する設定を行うためのＧＵＩ（Graphical User Interface）を提供したりする。
【００３８】
ＡＳＩＣ１１１は、スイッチカード１０４，１０５やＰＨＹ／ＭＡＣデバイス１１３から入力されたパケットに対するシェーピングを行いフローごとの転送レートを調整するプロセッサ（演算部）である。ＡＳＩＣ１１１は、ＰＨＹ／ＭＡＣデバイス１１３にパケットを出力する。また、ＡＳＩＣ１１１は、ＰＨＹ／ＭＡＣデバイス１１３から入力されたパケットをスイッチカード１０４，１０５に出力することもある。中継装置１００は、ＡＳＩＣ１１１に代えて、または、ＡＳＩＣ１１１と併せて、ＦＰＧＡ（Field Programmable Gate Array）などの他の種類のプロセッサを備えてもよい。
【００３９】
メモリ１１２は、ＡＳＩＣ１１１の処理に用いられる各種のデータを記憶する。
ＰＨＹ／ＭＡＣデバイス１１３は、ＡＳＩＣ１１１から入力されたパケットに対してＰＨＹ／ＭＡＣ処理を行い、光モジュール１１４，１１５，１１６の何れかへ出力する。ＰＨＹ／ＭＡＣデバイス１１３は、光モジュール１１４，１１５，１１６から入力された電気信号からパケットを抽出してＡＳＩＣ１１１へ出力する。
【００４０】
光モジュール１１４，１１５，１１６は、ＰＨＹ／ＭＡＣデバイス１１３から入力されたフレームを光信号に変換して光ファイバへ出力する。光モジュール１１４，１１５，１１６は、光ファイバより入力される光信号を電気信号に変換してＰＨＹ／ＭＡＣデバイス１１３へ出力する。
【００４１】
図４は、第２の実施の形態のインタフェースカードを示す図（続き）である。インタフェースカード１０１は、記憶部１２０、バッファ部１３０、制御部１４０、セレクタ１５０および時計部１６０を有する。記憶部１２０およびバッファ部１３０は、メモリ１１２の記憶領域を用いて実現されてもよい。制御部１４０、セレクタ１５０および時計部１６０は、ＡＳＩＣ１１１によって実現されてもよい。あるいは、制御部１２０、セレクタ１５０および時計部１６０を個別のＡＳＩＣなどとして実現してもよい。
【００４２】
記憶部１２０は、バッファ部１３０におけるバッファを管理するための情報やフローを管理するための情報を記憶する。ここで、フローは、例えば、中継装置１００に到着したデータに含まれるＶＬＡＮ  ＩＤ（Virtual Local Area Network IDentifier）や、到着時の中継装置１００におけるポート番号に対応する情報である。ＶＬＡＮ  ＩＤとポート番号との組み合わせでもよいし、当該組み合わせに対応するＩＤを、入口側のインタフェースカードが、抽出したパケットに付与してもよい。
【００４３】
バッファ部１３０は、パケットをバッファリングするためのバッファ１３１，１３２，１３３の集合である。各バッファはキューである。各バッファは、複数のフローのパケットを格納できる。
【００４４】
制御部１４０は、記憶部１２０に記憶された情報を参照してシェーピングを行う。具体的には、制御部１４０は、受け付けたパケットをバッファ１３１，１３２，１３３，・・・に格納する。各バッファからパケットを読み出す時間帯は予め定められる。制御部１４０は、フローごとの転送レートに応じて格納するバッファを決めたり（スケジューリング）、当該転送レートに応じて格納するデータ量を決めたりする。
【００４５】
このようなスケジューリングの方法は、バッファの格納時にスケジューリングを行うので、入力型のスケジューリングと呼ばれることがある。一方で、フローごとに格納するバッファを固定的に割り当て、出力時にどのバッファからデータを出力するかを選択することでスケジューリングを行う方法を出力型のスケジューリングと呼ぶことがある。
【００４６】
セレクタ１５０は、時計部１６０により入力された時刻の情報に基づいて、当該時刻を含む時間帯に対応するバッファからパケットを読み出す。
時計部１６０は、現在の時刻をセレクタ１５０に出力する。
【００４７】
図５は、第２の実施の形態のタイムテーブルの例を示す図である。タイムテーブル１２１は、各時間帯と読み出し対象とするバッファとの対応関係を定めた情報である。バッファは例えば、メモリ１１２上のアドレスを示すポインタによって指定される。タイムテーブル１２１は、記憶部１２０に格納される。第２の実施の形態では、現時点から３５ｍｓ後までを０．１ｍｓ単位の時間帯に区切って、読み出し対象とするバッファを切り替える。
【００４８】
ここで、現時刻（０秒の時点）〜０．１ｍｓ後の時間帯は時間領域ＴＲ１である（ＴＲは、Time Regionの略）。タイムテーブル１２１では、時間領域ＴＲ１に対してバッファ部１３０の何れかのバッファ（例えば、バッファ１３１）が対応付けられる。０．１〜０．２ｍｓ後の時間帯は時間領域ＴＲ２である。タイムテーブル１２１では、時間領域ＴＲ２に対してバッファ部１３０の何れかのバッファ（例えば、バッファ１３２）が対応付けられる。このように、３５ｍｓ後までに０．１ｍｓ単位で区切られた時間領域を合計３５０個定義できる。すなわち、時間領域ＴＲ１，ＴＲ２，・・・，ＴＲ３５０が存在する。
【００４９】
このとき、各バッファのサイズは、対応する時間領域と現時点との時間差が大きいほど、小さくなるように制御される。具体的には、時間領域ＴＲ１〜ＴＲ５０の各バッファのサイズを１００ｋｂｉｔｓとする。時間領域ＴＲ５１〜ＴＲ１００の各バッファのサイズを５０ｋｂｉｔｓとする。時間領域ＴＲ１０１〜ＴＲ３５０の各バッファのサイズを１０ｋｂｉｔｓとする。各バッファのサイズは、バッファ管理テーブルによって管理される。ここで、バッファ部１３０の各バッファの合計のバッファ容量は１０Ｍｂｉｔｓである。
【００５０】
図６は、第２の実施の形態のバッファ管理テーブルの例を示す図である。バッファ管理テーブル１２２は、記憶部１２０に格納される。バッファ管理テーブル１２２は、ＴＲ、上限値、現在キュー長および読み出し中フラグの項目を含む。
【００５１】
ＴＲの項目は、各バッファに対応する時間領域を示す情報が登録される。上限値の項目には、当該バッファのサイズ（当該バッファで利用できる容量の上限値）が登録される。上限値の項目の単位はｂｉｔである。現在キュー長の項目には、格納済みのデータサイズが登録される。現在キュー長の項目の単位はｂｉｔである。読み出し中フラグの項目には、当該バッファから現在パケットが読み出されているか否かを示すフラグが登録される。読み出されている場合、ｔｒｕｅである。読み出されていない場合、ｆａｌｓｅである。
【００５２】
例えば、バッファ管理テーブル１２２には、ＴＲが“１”、上限値が“１００ｋ”、現在キュー長が“９５ｋ”、読み出し中フラグが“ｔｒｕｅ”という情報が登録されている。これは、時間領域ＴＲ１に対応するバッファのサイズが１００ｋｂｉｔｓであり、現在既に９５ｋｂｉｔｓ分のパケットが格納済みであること、当該バッファが現在読み出しの対象となっていることを示す。第２の実施の形態では、１つずつバッファを読み出していくので、他のバッファの読み出し中フラグは“ｆａｌｓｅ”となる。
【００５３】
図７は、第２の実施の形態のフロー情報テーブルの例を示す図である。フロー情報テーブル１２３は、記憶部１２０に格納される。フロー情報テーブル１２３は、フロー番号、バッファ当たりデータ量、許容遅延、ＴＲ、残り容量の項目を含む。
【００５４】
フロー番号の項目には、フローを識別するための番号が登録される。バッファ当たりデータ量の項目には、当該フローに関して１つのバッファに格納できるデータ量が登録される。当該データ量は、フローごとに保証される転送レートに応じて定められる。許容遅延の項目には、許容される遅延が時間領域何個分であるかを示す情報が登録される。以下の説明において、許容遅延をＮと表記することがある。ＴＲの項目には、当該フローのパケットが最後にスケジューリングされた時間領域（すなわち、最後に格納されたバッファ）を示す情報が登録される。当該フローのパケットが最後に格納されたバッファをＴＢｘと表記することがある。あるフローでバッファリングがされていなければ、ＴＲの項目は設定なしとなる。残り容量の項目には、最後に格納されたバッファに対して、当該フローが格納できる残りのデータ量（残り容量）を示す情報が登録される。残り容量の最大値は、バッファ当たりデータ量に等しい。
【００５５】
例えば、フロー情報テーブル１２３には、フロー番号が“１”、バッファ当たりデータ量が“５０ｋ”、許容遅延が“３０ＴＲ”、ＴＲが“ＴＲ３”、残り容量が“４０ｋ”という情報が登録されている。これは、フロー番号“１”で識別されるフローが、バッファ１つに対して５０ｋｂｉｔｓのデータを格納でき、スケジューリングの際に現時点から３０ＴＲ分先までは遅延が許容されていることを示す。また、当該フローのパケットが時間領域ＴＲ３に対応するバッファに最後に格納されており、当該バッファに対して当該フローが格納できる残りのデータ量が４０ｋｂｉｔｓであることを示す（すなわち、当該フローは、ＴＲ３に対応するバッファに既に１０ｋｂｉｔｓ分を格納済みである）。
【００５６】
ここで、バッファ当たりのデータ量は、フローごとに保証される転送レートに応じて定まる。当該転送レートは、契約などによって事前に定められる。例えば、フロー番号“１”に対して保証される転送レートは、５００Ｍｂｐｓである。この場合、時間領域当たりの時間幅は０．１ｍｓなので、５００Ｍｂｐｓ×０．１ｍｓ＝５０ｋｂｉｔｓがバッファ当たりのデータ量となる。同様に、保証される転送レートが１００Ｍｂｐｓであれば、１００Ｍｂｐｓ×０．１ｍｓ＝１０ｋｂｉｔｓがバッファ当たりのデータ量となる。また、保証される転送レートが１０Ｍｂｐｓであれば、１０Ｍｂｐｓ×０．１ｍｓ＝１ｋｂｉｔｓがバッファ当たりのデータ量となる。また、許容遅延も同様に契約などによって事前に定められる。
【００５７】
図８は、第２の実施の形態のパケットの例を示す図である。制御部１４０によって処理されるパケット２０は、フロー番号およびデータ本体のフィールドを含む。フロー番号のフィールドには、フローを識別するためのフロー番号が設定される。フロー番号は、フローを識別するための識別子といえる。フロー番号は、到着したデータを受け付けた入口側のインタフェースカードによって付与されるものでもよい。例えば、フロー番号は、前述のようにＶＬＡＮ  ＩＤと受信したポートのポート番号との組み合わせに応じた番号でもよい。あるいは、フロー番号は、送信元／宛先のＩＰ（Internet Protocol）アドレスやＴＣＰ（Transmission Control Protocol）ポート番号などの何れか、または、これらのうちの２以上の組み合わせに対応付けられるものでもよい。
【００５８】
データ本体のフィールドには、データ本体が設定される。インタフェースカード１０１から他の装置へ向けてパケットを送出する際には、インタフェースカード１０１によりフロー番号が除去されてもよい。
【００５９】
図９は、第２の実施の形態のバッファリングの例を示すフローチャートである。以下、図９に示す処理をステップ番号に沿って説明する。
（ステップＳ１１）制御部１４０は、転送対象のパケットを取得する（以下では、当該パケットを指して、到着したパケットということがある）。
【００６０】
（ステップＳ１２）制御部１４０は、当該パケットのフロー番号を取得する。制御部１４０は、記憶部１２０に記憶されたタイムテーブル１２１およびフロー情報テーブル１２３を参照して、当該フロー番号に対して現在パケットを格納中のバッファＴＢｘを示す情報を取得する。バッファＴＢｘは、フロー情報テーブル１２３のＴＲの項目に設定された時間領域を示す情報、あるいは、当該時間領域に対応するバッファを示すポインタにより示される。
【００６１】
（ステップＳ１３）制御部１４０は、バッファＴＢｘを示す情報が有効値であるか否かを判定する。有効値である場合、処理をステップＳ１４に進める。有効値でない場合、処理をステップＳ１５に進める。有効値である場合とは、同一フローにおいて過去に到着したパケットがあり、その際のバッファリングによりバッファＴＢｘが指定されている場合である。有効値でない場合とは、同一フローについてバッファリングされておらず、今回新規にバッファリングを行うような場合（最初のパケットの場合）やバッファＴＢｘが現在読み出し中のバッファの時刻よりも過去のものである場合である。
【００６２】
（ステップＳ１４）制御部１４０は、バッファＴＢｘを到着したパケットを格納する候補のバッファ（以下、バッファＴＢｚと表記することがある）とする。そして、処理をステップＳ１６に進める。
【００６３】
（ステップＳ１５）制御部１４０は、セレクタ１５０が現在読み出し中のバッファ（以下、バッファＴＢｙと表記することがある）の次のバッファをバッファＴＢｚとする。そして、処理をステップＳ１６に進める。
【００６４】
（ステップＳ１６）制御部１４０は、記憶部１２０に記憶されたバッファ管理テーブル１２２およびフロー情報テーブル１２３を参照して、候補のバッファＴＢｚに空きがあるか否かを判定する。空きがある場合、処理をステップＳ１８に進める。空きがない場合、処理をステップＳ１７に進める。空きがある場合とは、バッファ管理テーブル１２２において、バッファＴＢｚの現在キュー長が上限値に達しておらず、かつ、フロー情報テーブル１２３において対象のフローがバッファＴＢｚに格納できる残り容量が０より大きい場合である。
【００６５】
（ステップＳ１７）制御部１４０は、バッファＴＢｚの次の時間帯（バッファＴＢｚと隣接した時間帯でなくてもよい。以下、同様）のバッファを、候補のバッファＴＢｚとする。転送レートやパケット長によっては、次の時間帯のバッファが１以上の時間領域を飛ばした時間領域に対応するバッファになることもある。そして、処理をステップＳ１６に進める。
【００６６】
（ステップＳ１８）制御部１４０は、タイムテーブル１２１およびフロー情報テーブル１２３を参照して、バッファＴＢｚとバッファＴＢｙとの時間差が、許容遅延Ｎ以下であるか否かを判定する。当該時間差が許容遅延Ｎ以下である場合、処理をステップＳ２０に進める。当該時間差が許容遅延よりも大きい場合、処理をステップＳ１９に進める。
【００６７】
（ステップＳ１９）制御部１４０は、到着したパケットを破棄する。そして、処理を終了する。
（ステップＳ２０）制御部１４０は、バッファＴＢｚに到着したパケット（既に格納された部分があれば、未格納の部分のみ）を格納する。制御部１４０は、バッファ管理テーブル１２２を更新する。具体的には、ステップＳ２０におけるパケットの格納結果をバッファ管理テーブル１２２に反映させる。すなわち、到着したパケットのうち新たに格納されたデータ長を現在キュー長の値に加算する。
【００６８】
（ステップＳ２１）制御部１４０は、到着したパケットの全体を格納済であるか否かを判定する。格納済でない（すなわち、超過分がある）場合、処理をステップＳ２２に進める。格納済である場合、処理をステップＳ２３に進める。
【００６９】
（ステップＳ２２）制御部１４０は、バッファＴＢｚの次の空きのあるバッファをバッファＴＢｚとする。転送レートやパケット長によっては、次の（時間帯の）バッファが１以上の時間領域を飛ばした時間領域に対応するバッファになることもある。また、そのバッファに空きがなければ、更にその次のバッファがバッファＴＢｚとして選ばれる。ここで、バッファ空きの有無は、ステップＳ１６と同様に判定できる。
【００７０】
（ステップＳ２３）制御部１４０は、フロー情報テーブル１２３を更新する。具体的には、到着したパケット（またはその一部）を最後に格納したバッファＴＢｚをバッファＴＢｘとし、当該バッファＴＢｘに対応する時間領域をフロー情報テーブル１２３のＴＲの項目に設定する。また、同一フローの残り容量から最後にバッファＴＢｘに格納したデータ量を減算した値をフロー情報テーブル１２３の残り容量の項目に設定する。
【００７１】
図１０は、第２の実施の形態のパケットの格納例を示す図である。図１０（Ａ）では、３段階の転送レートのフローに対するパケットの格納方法を例示している。系列ＨのパケットＨ１，Ｈ２，・・・は、第１の転送レートのフローに対してバッファリングされたものである。系列ＭのパケットＭ１，Ｍ２，・・・，Ｍ５０，Ｍ５１，Ｍ５２，・・・は、第１の転送レートよりも低い第２の転送レートのフローに対してバッファリングされたものである。系列ＬのパケットＬ１，Ｌ２，・・・，Ｌ５０，Ｌ５１，Ｌ５２，・・・，Ｌ１００，Ｌ１０１，Ｌ１０２，・・・は、第２の転送レートよりも低い第３の転送レートのフローに対してバッファリングされたものである。
【００７２】
例えば、系列Ｈでは、時間領域ＴＲ５０まではフルにスケジューリングされていない。また、系列Ｍでは、時間領域ＴＲ１００まではフルにスケジューリングされていない。系列Ｌでは、時間領域ＴＲ１０１以降にもスケジューリングされている。
【００７３】
図１０（Ｂ）は、横軸を時間とし、縦軸を各バッファのサイズとして、現時点（横軸の０の時点）からの時間差によりバッファのサイズを段階的に小さくしている様子を例示している。バッファのサイズをこのように設けることで、３５ｍｓ後までスケジューリングできる。ここで、現時点と時間領域との時間差は第１の実施の形態と同様の考え方で求めることができる。例えば、現時点と各時間領域の開始時点との時間差とすると、当該時間差が閾値以上になった場合に、バッファのサイズを１段階ずつ小さくしているといえる。具体的には、現時点と各時間領域との時間差が閾値５ｍｓ以上になると当該時間領域に対応するバッファのサイズを１段階小さくしている。更に、現時点と各時間領域との時間差が閾値１０ｍｓ以上になると、当該時間領域に対応するバッファのサイズを更に１段階小さくしている。次に、バッファのサイズをこのように維持するための方法を説明する。
【００７４】
図１１は、第２の実施の形態のバッファ再分配の例を示すフローチャートである。以下、図１１に示す処理をステップ番号に沿って説明する。
（ステップＳ３１）セレクタ１５０は、記憶部１２０に記憶されたタイムテーブル１２１を参照して、現時刻に対応するバッファ（バッファ管理テーブル１２２の読み出し中フラグがｔｒｕｅのバッファ）からパケットを抽出して送信する。本例では、１つのバッファが０．１ｍｓの時間幅で読み出される。すなわち、１つのバッファについて、読み出し開始から０．１ｍｓ後に読み出し完了となる。セレクタ１５０は、読み出しが完了すると、読み出し完了したバッファについて、バッファ管理テーブル１２２の読み出し中フラグをｔｒｕｅからｆａｌｓｅに変更する。また、当該読み出し完了したバッファについて、現在キュー長を０に更新する。更に、次の時間領域（例えば、時間領域ＴＲ１での読み出しが完了すれば時間領域ＴＲ２）の読み出し中フラグをｆａｌｓｅからｔｒｕｅに変更する。
【００７５】
（ステップＳ３２）制御部１４０は、読み出し完了したバッファのメモリ領域を解放する。
（ステップＳ３３）制御部１４０は、解放されたメモリ領域を再分配する。具体例は後述する。
【００７６】
（ステップＳ３４）制御部１４０は、何れかのフローでバッファに格納されたパケットが全て送信されたか否かを判定する。何れかのフローでバッファに格納されたパケットが全て送信された場合、処理をステップＳ３５に進める。何れのフローでもバッファに格納されたパケットが全て送信されていない場合、処理を終了する。例えば、フロー情報テーブル１２３で何れかのフローのＴＲの項目で示される時間領域のバッファについて、ステップＳ３１で読み出しが完了した場合に、何れかのフローでバッファに格納されたパケットが全て送信されたことになる。
【００７７】
（ステップＳ３５）制御部１４０は、バッファリングされたパケットを全て送信済のフローにつき、フロー情報テーブル１２３のＴＲの項目をクリアする。ＴＲの項目がクリアされると、当該ＴＲの項目に基づいて、タイムテーブル１２１から対応するバッファのポインタを求めようとしても有効値は得られないことになる。
【００７８】
図１２は、第２の実施の形態のバッファ再分配の例を示す図である。図１２では、時間領域ＴＲ１（図１２では旧ＴＲ１と表記している）に対応するバッファの読み出しが完了した場合を例示している。この場合、タイムテーブル１２１上では、時間領域ＴＲ２以降の時間領域の開始時点（現時点との時間差）が現時点側に０．１ｍｓずつシフトすることになる。すなわち、時間領域ＴＲ２は、０．１〜０．２ｍｓ後の時間帯から０〜０．１ｍｓ後の時間帯へ変更され読み出し対象となる。同様に時間領域ＴＲ３は、０．２〜０．３ｍｓ後の時間帯から０．１〜０．２ｍｓ後の時間帯へ変更される。
【００７９】
時間領域ＴＲ１（旧ＴＲ１）に対応するバッファのサイズは、１００ｋｂｉｔｓである。そのうち、５０ｋｂｉｔｓの領域Ｒ１を時間領域ＴＲ５１に対応するバッファに分配する。すると、時間領域ＴＲ５１に対応するバッファのサイズは１００ｋｂｉｔｓとなる。また、時間領域ＴＲ１に対応するバッファのうち、４０ｋｂｉｔｓの領域Ｒ２を時間領域ＴＲ１０１に対応するバッファに分配する。すると、時間領域ＴＲ１０１に対応するバッファのサイズは５０ｋｂｉｔｓとなる。更に、時間領域ＴＲ１に対応するバッファのうち、１０ｋｂｉｔｓの領域Ｒ３を新たな時間領域ＴＲ１（図１２では新ＴＲ１と表記している）に分配する。すると、新たな時間領域ＴＲ１に対応するバッファは１０ｋｂｔｉｓとなる。新たな時間領域ＴＲ１は、３４．９〜３５ｍｓ後の時間帯に割り当てられることになる。このようにして、図１０（Ｂ）で示した各バッファのサイズを維持できる。
【００８０】
図１３は、スケジューリングの典型例を示す図である。時間軸上に実際にスケジューリングされるパケット量には疎密がある。具体的には、現在時刻近傍は密にスケジューリングされるが、時間軸が未来になるにつれて疎になっていくケースが多い。また、現在時刻近傍の時間にスケジューリングされているパケットは高レート系のフローのものが多く、逆に未来側の時間にスケジューリングされているパケットは低レート系のフローのものが多いと考えられる。
【００８１】
例えば、高レートのフローのパケットが５個と低レートのフローのパケットが５個到着したとする。高レートのフローのパケットは１つの時間領域（ＴＲ）により多くのパケットをスケジューリングできる。よって、時間領域ＴＲ１に４個、時間領域ＴＲ２に１個というように現在時刻付近に多くのパケットがスケジューリングされる。一方、低レートのフローのパケットは、複数の時間領域（ＴＲ）に１つのパケットしかスケジューリングできないこともある。この場合、時間領域ＴＲ１，ＴＲ６，ＴＲ１１，ＴＲ１６，ＴＲ２１などのように未来側の時間帯に１個ずつスケジューリングされる。
【００８２】
このように、高レートのフローは現在時間付近に多くスケジューリングされ、低レートのフローは未来側の時間帯に分散してスケジューリングされ易いという傾向がある。
図１４は、バッファのサイズの比較例を示す図である。図１４（Ａ）は、比較例における、時間軸に対する各バッファのサイズを示している。比較例では、１０Ｍｂｉｔｓというバッファ部１３０の合計サイズに対してバッファのサイズを均等にする。この場合、各バッファのサイズは１００ｋｂｉｔｓである。各バッファは０．１ｍｓの時間幅に対応するから、スケジューリングできるのは１０ｍｓ後までである。
【００８３】
図１４（Ｂ）では図１０（Ａ）と同様に３段階のレートのフローが例示されている。系列Ｈ，Ｍ，Ｌの意味は、図１０（Ａ）と同様である。この場合、低レートのフローにおけるパケットＬ１０１以降のパケットは、スケジューリングできずに破棄されてしまうことになる。一方で、図１３で説明したように、高レート系のフローは、現在時間付近に多くスケジューリングされる傾向にある。このため、図１４（Ａ）（Ｂ）における領域Ｅの部分は、バッファリングに利用されない可能性が高い。
【００８４】
そこで、図１０（Ｂ）で示したように、現時点と時間領域（ＴＲ）との相対的な時間差が大きいほど、当該時間領域に対応するバッファのサイズを相対的に小さくする。すなわち、現在時刻近傍には十分なバッファ容量を用意するが、未来側になるにつれて用意するバッファのサイズを減らす。すると、比較例に対して利用できるメモリサイズに余剰分ができる。この余剰分を時間軸の拡張に回せることになる。具体的には、比較例では１０ｍｓ後までしかタイムテーブルをもてないが、第２の実施の形態の方法によれば、３５ｍｓまで拡張できることになる。これにより、低レートのフローについて、バースト耐力を向上することができる。
【００８５】
なお、第２の実施の形態では、バッファのサイズを３段階としているが、２段階としてもよいし、４段階以上としてもよい。
［第３の実施の形態］
以下、第３の実施の形態を説明する。前述の第２の実施の形態と相違する事項を主に説明し、共通する事項の説明を省略する。
【００８６】
第２の実施の形態では、各バッファに対して読み出しを行う時間幅を同一にして、現時点との時間差に応じて各バッファのサイズを異なるものとした。一方、読み出しを行う時間幅をバッファごとに変えることで、単位時間に割り当てられるバッファのサイズを変えることが考えられる。ここで、第３の実施の形態の中継装置は、第２の実施の形態と同様である。そこで、第３の実施の形態では第２の実施の形態と同様の名称・符号を用いる。
【００８７】
図１５は、第３の実施の形態のタイムテーブルの例を示す図である。図１５（Ａ）は、現時点から５ｍｓ後までを示している。図１５（Ｂ）は、５ｍｓより後を示している。タイムテーブル１２１ａは、タイムテーブル１２１に代えて、記憶部１２０に格納される。第３の実施の形態では、２つのグループのバッファ群を用いる。
【００８８】
第１のグループの各バッファは、現時点から１０ｍｓ後までを０．１ｍｓ単位で区切った各時間領域に対応付けられる。第２のグループの各バッファは、現時点から３５ｍｓ後までを１ｍｓ単位で区切った各時間領域に対応付けられる。第１のグループの各バッファでは、０．１ｍｓ刻みで読み出し対象のバッファが切り替えられる。第２のグループの各バッファでは、１ｍｓ刻みで読み出し対象のバッファが切り替えられる。
【００８９】
ここで、現時刻（０秒の時点）〜０．１ｍｓ後の時間帯は時間領域ＴＲ１である。０．１〜０．２ｍｓ後の時間帯は時間領域ＴＲ２である。このように１０ｍｓ後までを０．１ｍｓ単位で区切られた時間領域を合計１００個定義できる。すなわち、時間領域ＴＲ１，Ｔ２，・・・，ＴＲ１００が存在する。このように、第１のグループの各バッファは、第２のグループの各バッファよりも短い時間幅の時間領域に対応付けられる。したがって、第１のグループの各バッファが割り当てられる現時点〜１０ｍｓ後までの時間を短ＴＲ領域と呼ぶことができる。
【００９０】
また、現時点（０秒の時点）〜１．０ｍｓ後の時間帯は時間領域ＴＲ１０１である。１．０〜２．０ｍｓ後の時間帯は時間領域ＴＲ１０２である。このように、３５ｍｓ後までを１．０ｍｓ単位で区切られた時間領域を合計３５個定義できる。すなわち、時間領域ＴＲ１０１，ＴＲ１０２，・・・，ＴＲ１３５が存在する。このように、第２のグループの各バッファは、第１のグループの各バッファよりも長い時間幅の時間領域に対応付けられる。したがって、第２のグループの各バッファが割り当てられる１０〜３５ｍｓ後までの時間を長ＴＲ領域と呼ぶことができる。
【００９１】
このとき、第１のグループのバッファのサイズは、対応する時間領域と現時点との時間差が大きいほど、小さくなるように制御される。具体的には、時間領域ＴＲ１〜ＴＲ５０の各バッファのサイズを９０ｋｂｉｔｓとする。時間領域ＴＲ５１〜ＴＲ１００の各バッファのサイズを４０ｋｂｉｔｓとする。第２のグループのバッファのサイズは、１００ｋｂｉｔｓである。第１のグループのバッファのサイズは、第２の実施の形態で説明したサイズよりも１０ｋｂｉｔｓずつ小さくする。同じ時間帯に、第２のグループのバッファからも読み出しを行うためである。ここで、バッファ部１３０の各バッファの合計のバッファ容量は１０Ｍｂｉｔｓである。
【００９２】
図１６は、第３の実施の形態のセレクタの例を示す図である。セレクタ１５０は、０．１ｍｓ（読み出しの１単位時間）の間に２つのバッファからパケットを読み出して出力することになる。セレクタ１５０は、例えば、第１のグループのバッファを完全優先として読み出しを行うことが考えられる。例えば、ある時間帯で、時間領域ＴＲ１，ＴＲ１０１に対応する２つのバッファからパケットを読み出すとき、時間領域ＴＲ１に対応するバッファからの読み出しが完了した後に、時間領域ＴＲ１０１に対応するバッファからの読み出しを行う。
【００９３】
ただし、セレクタ１５０は、１単位時間において、ＷＦＱ（Weighted Fair Queuing）によって２つのバッファからパケットを読み出してもよい。例えば、時間領域ＴＲ１に対応するバッファに対して９という重み付けをし、時間領域ＴＲ１０１に対応するバッファに対して１という重み付けをして読み出しを行うことが考えられる。この場合、時間領域ＴＲ１に対応するバッファから所定の９単位分のデータを読み出した後に、時間領域ＴＲ１０１に対応するバッファから所定の１単位分のデータを読み出す。その後、時間領域ＴＲ１に対応するバッファから９単位分のデータを読み出した後に、時間領域ＴＲ１０１に対応するバッファから１単位分のデータを読み出すというように０．１ｍｓの間に繰り返して読み出すことになる。重み付けにより読み出し元を切り替えるので、完全優先で読み出すよりもバースト性を緩和し得る。
【００９４】
図１７は、第３の実施の形態のバッファ管理テーブルの例を示す図である。バッファ管理テーブル１２２ａは、バッファ管理テーブル１２２に代えて、記憶部１２０に格納される。バッファ管理テーブル１２２ａは、ＴＲ、上限値、現在キュー長、読み出し中フラグおよびＴＲタイプの項目を含む。ここで、ＴＲ、上限値、現在キュー長および読み出し中フラグの項目に登録される内容は、バッファ管理テーブル１２２と同様である。ＴＲタイプの項目には、対応する時間領域の時間幅を示す情報が登録される。
【００９５】
例えば、バッファ管理テーブル１２２ａには、ＴＲが“１”、上限値が“９０ｋ”、現在キュー長が“８７ｋ”、読み出し中フラグが“ｔｒｕｅ”、ＴＲタイプが“０．１ｍｓ”という情報が登録されている。これは、時間領域ＴＲ１に対応するバッファのサイズが９０ｋｂｉｔｓであり、現在既に８７ｋｂｉｔｓ分のパケットが格納済みであること、当該バッファが現在読み出しの対象となっていることを示す。また、時間領域ＴＲ１の時間幅が０．１ｍｓであることを示す。
【００９６】
なお、第３の実施の形態では、ＴＲタイプが０．１ｍｓおよび１ｍｓの２つのバッファを読み出す。このため、例えば、時間領域ＴＲ１０１に対応するバッファについても、読み出し中フラグが“ｔｒｕｅ”となっている。それ以外のバッファの読み出し中フラグは“ｆａｌｓｅ”となる。
【００９７】
以下の説明では、ＴＲタイプ“０．１ｍｓ”のバッファを短ＴＲのバッファということがある。また、ＴＲタイプ“１ｍｓ”のバッファを長ＴＲのバッファということがある。
図１８は、第３の実施の形態のフロー情報テーブルの例を示す図である。フロー情報テーブル１２３ａは、フロー情報テーブル１２３に代えて、記憶部１２０に格納される。フロー情報テーブル１２３ａは、フロー番号、短ＴＲ用バッファ当たりデータ量、長ＴＲ用バッファ当たりデータ量、許容遅延、ＴＲおよび残り容量の項目を含む。フロー番号、許容遅延、ＴＲおよび残り容量の項目に登録される内容は、フロー情報テーブル１２３と同様である。ただし、第３の実施の形態では、同一のフローでもパケットの格納先が長ＴＲおよび短ＴＲのバッファの両方となり得る。そこで、許容遅延の項目には、長ＴＲ換算での値を保持するものとする。
【００９８】
短ＴＲ用バッファ当たりデータ量の項目には、対応するフローに関して、ＴＲタイプ“０．１ｍｓ”のバッファに格納できるデータ量が登録される。長ＴＲ用バッファ当たりデータ量の項目には、当該フローに関して、ＴＲタイプ“１ｍｓ”のバッファに格納できるデータ量が登録される。
【００９９】
例えば、フロー情報テーブル１２３ａには、フロー番号が“１”、短ＴＲ用バッファ当たりデータ量が“５０ｋ”、長ＴＲ用バッファ当たりデータ量が“１００ｋ”、許容遅延が“３ＴＲ”、ＴＲが“ＴＲ３”、残り容量が“４０ｋ”という情報が登録されている。これは、フロー番号“１”で識別されるフローが、ＴＲタイプ“０．１ｍｓ”の１つのバッファに対して５０ｋｂｉｔｓのデータを格納でき、また、ＴＲタイプ“１ｍｓ”の１つのバッファに対して１００ｋｂｉｔｓのデータを格納できることを示す。また、当該フローに対して、スケジューリングの際に現時点から長ＴＲ換算で３ＴＲ分先（短ＴＲ換算では１０倍の３０ＴＲ）までは遅延が許容されていることを示す。また、当該フローのパケットが時間領域ＴＲ３に対応するバッファに最後に格納されており、当該バッファに対して当該フローが格納できる残りのデータ量が４０ｋｂｉｔｓであることを示す。
【０１００】
図１９は、第３の実施の形態のバッファリングの例を示すフローチャートである。以下、図１９に示す処理をステップ番号に沿って説明する。
（ステップＳ４１）制御部１４０は、転送対象のパケットを取得する（以下では、当該パケットを指して、到着したパケットということがある）。
【０１０１】
（ステップＳ４２）制御部１４０は、当該パケットのフロー番号を取得する。制御部１４０は、記憶部１２０に記憶されたタイムテーブル１２１ａおよびフロー情報テーブル１２３ａを参照して、現在パケットを格納中のバッファＴＢｘを示す情報を取得する。バッファＴＢｘは、フロー情報テーブル１２３ａのＴＲの項目に設定された時間領域を示す情報、あるいは、当該時間領域に対応するバッファを示すポインタにより示される。
【０１０２】
（ステップＳ４３）制御部１４０は、バッファＴＢｘを示す情報が有効値であるか否かを判定する。有効値である場合、処理をステップＳ４４に進める。有効値でない場合、処理をステップＳ４７に進める。
【０１０３】
（ステップＳ４４）制御部１４０は、バッファＴＢｘを、到着したパケットを格納する候補のバッファＴＢｚとする。
（ステップＳ４５）制御部１４０は、バッファＴＢｚが長ＴＲのバッファであるか否かを判定する。長ＴＲのバッファである場合、ステップＳ４６に進める。長ＴＲのバッファでない場合、処理をステップＳ４８に進める。バッファＴＢｚが長ＴＲであるか否かは、バッファ管理テーブル１２２ａに基づいて判定できる。
【０１０４】
（ステップＳ４６）制御部１４０は、長ＴＲベースの処理を行う。詳細は後述する。
（ステップＳ４７）制御部１４０は、現在読み出し中のバッファＴＢｙの次の短ＴＲのバッファをバッファＴＢｚとする。転送レートやパケット長によっては、次の時間帯の短ＴＲのバッファが１以上の時間領域を飛ばした時間領域に対応するバッファになることもある。
【０１０５】
（ステップＳ４８）制御部１４０は、記憶部１２０に記憶されたバッファ管理テーブル１２２ａおよびフロー情報テーブル１２３ａを参照して、候補のバッファＴＢｚに空きがあるか否かを判定する。空きがある場合、処理をステップＳ５１に進める。空きがない場合、処理をステップＳ４９に進める。空きがある場合とは、バッファ管理テーブル１２２ａにおいて、バッファＴＢｚの現在キュー長が上限値に達しておらず、かつ、フロー情報テーブル１２３ａにおいて対象のフローがバッファＴＢｚに格納できる残り容量が０より大きい場合である。
【０１０６】
（ステップＳ４９）制御部１４０は、バッファＴＢｚの次の空きのあるバッファをバッファＴＢｚとする。転送レートやパケット長によっては、次の（時間帯の）バッファが１以上の時間領域を飛ばした時間領域に対応するバッファになることもある。また、そのバッファに空きがなければ、更にその次のバッファがバッファＴＢｚとして選ばれる。ここで、バッファ空きの有無は、ステップＳ４８と同様に判定できる。なお、短ＴＲ領域からバッファを選択する場合には、長ＴＲのバッファは選択されない。短ＴＲ領域に候補となるバッファが存在しない場合には、長ＴＲ領域からバッファを選択することになる。
【０１０７】
（ステップＳ５０）制御部１４０は、バッファＴＢｚが長ＴＲのバッファであるか否かを判定する。長ＴＲのバッファである場合、処理をステップＳ４６に進める。長ＴＲのバッファでない場合、処理をステップＳ５１に進める。
【０１０８】
（ステップＳ５１）制御部１４０は、短ＴＲベースの処理を行う。詳細は後述する。
次に、ステップＳ４６の長ＴＲベースの処理の手順を説明する。
図２０は、第３の実施の形態の長ＴＲベースの処理例を示すフローチャートである。以下、図２０に示す処理をステップ番号に沿って説明する。
【０１０９】
（ステップＳ６１）制御部１４０は、記憶部１２０に記憶されたバッファ管理テーブル１２２ａおよびフロー情報テーブル１２３ａを参照して、候補のバッファＴＢｚに空きがあるか否かを判定する。空きがある場合、処理をステップＳ６３に進める。空きがない場合、処理をステップＳ６２に進める。空きがある場合とは、バッファ管理テーブル１２２ａにおいて、バッファＴＢｚの現在キュー長が上限値に達しておらず、かつ、フロー情報テーブル１２３ａにおいて対象のフローがバッファＴＢｚに格納できる残り容量が０より大きい場合である。
【０１１０】
（ステップＳ６２）制御部１４０は、バッファＴＢｚの次の時間帯のバッファを、候補のバッファＴＢｚとする。転送レートやパケット長によっては、次の時間帯のバッファが１以上の時間領域を飛ばした時間領域に対応するバッファになることもある。そして、処理をステップＳ６１に進める。ここで、バッファＴＢｚが長ＴＲ領域に含まれる長ＴＲのバッファであれば、制御部１４０は、次の時間帯のバッファとして長ＴＲのバッファを選択する。他方、バッファＴＢｚが短ＴＲ領域に含まれる長ＴＲのバッファであれば、制御部１４０は、次の時間帯のバッファとして短ＴＲのバッファを選択する。
【０１１１】
（ステップＳ６３）制御部１４０は、タイムテーブル１２１ａおよびフロー情報テーブル１２３ａを参照して、バッファＴＢｚと現在読み出し中のバッファＴＢｙとの時間差が、許容遅延Ｎ以下であるか否かを判定する。当該時間差が許容遅延Ｎ以下である場合、処理をステップＳ６５に進める。当該時間差が許容遅延Ｎよりも大きい場合、処理をステップＳ６４に進める。
【０１１２】
（ステップＳ６４）制御部１４０は、到着したパケットを破棄する。そして、処理を終了する。
（ステップＳ６５）制御部１４０は、バッファＴＢｚに到着したパケットを格納する。制御部１４０は、バッファ管理テーブル１２２ａを更新する。具体的には、ステップＳ６５におけるパケットの格納結果をバッファ管理テーブル１２２ａに反映させる。すなわち、到着したパケットのうち新たに格納されたデータ長を現在キュー長の値に加算する。ステップＳ６５のバッファＴＢｚは、ステップＳ６１，Ｓ６２の処理に応じて、長ＴＲのバッファである場合もあるし、短ＴＲのバッファである場合もある。
【０１１３】
（ステップＳ６６）制御部１４０は、到着したパケットの全体を格納済であるか否かを判定する。格納済でない（すなわち、超過分がある）場合、処理をステップＳ６７に進める。格納済である場合、処理をステップＳ７２に進める。
【０１１４】
（ステップＳ６７）制御部１４０は、バッファＴＢｚの次の空きのあるバッファをバッファＴＢｚとする。転送レートやパケット長によっては、次の（時間帯の）バッファが１以上の時間領域を飛ばした時間領域に対応するバッファになることもある。また、そのバッファに空きがなければ、更にその次のバッファがバッファＴＢｚとして選ばれる。ここで、バッファ空きの有無は、ステップＳ６１と同様に判定できる。また、制御部１４０は、バッファＴＢｚが短ＴＲ領域に含まれる長ＴＲのバッファである場合、次のバッファとして短ＴＲを選択する。
【０１１５】
（ステップＳ６８）制御部１４０は、バッファＴＢｚが短ＴＲのバッファであるか否かを判定する。短ＴＲのバッファである場合、処理をステップＳ６９に進める。短ＴＲのバッファでない場合、処理をステップＳ６５に進める。
【０１１６】
（ステップＳ６９）制御部１４０は、バッファＴＢｚ（ここでは、短ＴＲのバッファとなる）に到着したパケット（ただし、未格納の部分）を格納する。制御部１４０は、バッファ管理テーブル１２２ａを更新する。すなわち、到着したパケットのうち新たに格納されたデータ長を現在キュー長の値に加算する。
【０１１７】
（ステップＳ７０）制御部１４０は、到着したパケットの全体を格納済であるか否かを判定する。格納済でない場合、処理をステップＳ７１に進める。格納済である場合、処理をステップＳ７２に進める。
【０１１８】
（ステップＳ７１）制御部１４０は、バッファＴＢｚの次の空きのある短ＴＲのバッファをバッファＴＢｚとする。そして、処理をステップＳ６９に進める。
（ステップＳ７２）制御部１４０は、フロー情報テーブル１２３ａを更新する。具体的には、到着したパケット（またはその一部）を最後に格納したバッファＴＢｚをバッファＴＢｘとして、当該バッファＴＢｘに対応する時間領域をフロー情報テーブル１２３ａのＴＲの項目に設定する。また、当該バッファＴＢｘについて、同一フローの残り容量から最後にバッファＴＢｘに格納された分のデータ量を減算した値をフロー情報テーブル１２３ａの残り容量の項目に設定する。ここで、バッファＴＢｘが短ＴＲのバッファであれば、残り容量の最大値は短ＴＲ用バッファ当たりデータ量の設定値である。バッファＴＢｘが長ＴＲのバッファであれば、残り容量の最大値は長ＴＲ用バッファ当たりデータ量の設定値である。
【０１１９】
この処理は、長ＴＲベースのスケジューリングともいえる。次に、長ＴＲベースのスケジューリングの具体例を説明する。
図２１は、第３の実施の形態の長ＴＲベースのスケジューリング例を示す図である。図２１（Ａ）は長ＴＲ領域における長ＴＲのバッファが格納の起点となる場合を例示している。例えば、長ＴＲ領域に、時間領域ＴＲ１１１，ＴＲ１１２，ＴＲ１１３，ＴＲ１１４の長ＴＲに対応するバッファが存在しており、到着したパケットを時間領域ＴＲ１１１から順に格納していくとする。このとき、到着したパケットは、例えば、最初に、時間領域ＴＲ１１１に対応するバッファに格納される。超過分があれば、次に、時間領域ＴＲ１１２に対応するバッファに格納される。更に超過分があれば、次に、時間領域ＴＲ１１３に対応するバッファに格納される。各バッファは何れも長ＴＲのバッファである。
【０１２０】
一方、図２１（Ｂ）は短ＴＲ領域における長ＴＲのバッファが格納の起点となる場合を例示している。例えば、短ＴＲ領域に、時間領域ＴＲ１０，ＴＲ１０１，ＴＲ１１，ＴＲ１２の短ＴＲと長ＴＲとに対応するバッファが混在しており、到着したパケットを時間領域ＴＲ１０１から格納していくとする。このとき、到着したパケットは、例えば、最初に、時間領域ＴＲ１０１に対応するバッファに格納される。超過分があれば、次に、時間領域ＴＲ１１に対応するバッファに格納される。更に超過分があれば、次に、時間領域ＴＲ１２に対応するバッファに格納される。ここで、時間領域ＴＲ１０１に対応するバッファは、長ＴＲのバッファである。時間領域ＴＲ１１，ＴＲ１２に対応する各バッファは、短ＴＲのバッファである。
【０１２１】
制御部１４０によるこのような制御はフローごとに行われる。次に、図１９のステップＳ５１の短ＴＲベースの処理の手順を説明する。
図２２は、第３の実施の形態の短ＴＲベースの処理を示すフローチャートである。以下、図２２に示す処理をステップ番号に沿って説明する。
【０１２２】
（ステップＳ８１）制御部１４０は、記憶部１２０に記憶されたバッファ管理テーブル１２２ａおよびフロー情報テーブル１２３ａを参照して、候補のバッファＴＢｚに空きがあるか否かを判定する。空きがある場合、処理をステップＳ８３に進める。空きがない場合、処理をステップＳ８２に進める。空きがある場合とは、バッファ管理テーブル１２２ａにおいて、バッファＴＢｚの現在キュー長が上限値に達しておらず、かつ、フロー情報テーブル１２３ａにおいて対象のフローがバッファＴＢｚに格納できる残り容量が０より大きい場合である。
【０１２３】
（ステップＳ８２）制御部１４０は、バッファＴＢｚの次の時間帯のバッファを候補のバッファＴＢｚとする。転送レートやパケット長によっては、次の時間帯のバッファが１以上の時間領域を飛ばした時間領域に対応するバッファになることもある。そして、処理をステップＳ８１に進める。ここで、制御部１４０は、原則として短ＴＲのバッファから次の時間帯のバッファを選択する。ただし、バッファＴＢｚが短ＴＲ領域と長ＴＲ領域との境界付近の短ＴＲのバッファであれば、制御部１４０は、次の時間帯のバッファとして長ＴＲのバッファを選択することもある。
【０１２４】
（ステップＳ８３）制御部１４０は、タイムテーブル１２１ａおよびフロー情報テーブル１２３ａを参照して、バッファＴＢｚと現在読み出し中のバッファＴＢｙとの時間差が、許容遅延Ｎ×１０以下であるか否かを判定する。当該時間差が許容遅延Ｎ×１０以下である場合、処理をステップＳ８５に進める。当該時間差が許容遅延Ｎ×１０よりも大きい場合、処理をステップＳ８４に進める。許容遅延Ｎを１０倍するのは、前述のようにフロー情報テーブル１２３ａに設定される許容遅延Ｎは、長ＴＲ換算だからである。ただし、ステップＳ８２で長ＴＲのバッファが選択されているときは、許容遅延Ｎを１０倍しなくてよい。
【０１２５】
（ステップＳ８４）制御部１４０は、到着したパケットを破棄する。そして、処理を終了する。
（ステップＳ８５）制御部１４０は、バッファＴＢｚに到着したパケットを格納する。制御部１４０は、バッファ管理テーブル１２２ａを更新する。具体的には、ステップＳ８５におけるパケットの格納結果をバッファ管理テーブル１２２ａに反映させる。すなわち、到着したパケットのうち新たに格納されたデータ長を現在キュー長の値に加算する。ステップＳ８５のバッファＴＢｚは、ステップＳ８１，Ｓ８２の処理に応じて、短ＴＲのバッファである場合もあるし、長ＴＲのバッファである場合もある。
【０１２６】
（ステップＳ８６）制御部１４０は、到着したパケットの全体を格納済であるか否かを判定する。格納済でない（すなわち、超過分がある）場合、処理をステップＳ８７に進める。格納済である場合、処理をステップＳ９３に進める。
【０１２７】
（ステップＳ８７）制御部１４０は、バッファＴＢｚの次の空きのあるバッファとして、短ＴＲのバッファを利用可能であるか否かを判定する。利用可能である場合、処理をステップＳ８８に進める。利用可能でない場合、処理をステップＳ８９に進める。ここで、次の空きのあるバッファとして短ＴＲのバッファを利用可能であるか否かは、タイムテーブル１２１ａを参照して判定できる。タイムテーブル１２１ａの例でいえば、時間領域ＴＲ１００が短ＴＲ領域の最後の時間領域である。よって、バッファＴＢｚの次の空きのあるバッファとして、時間領域ＴＲ１００以前に対応するバッファを選べるとき、バッファＴＢｚの次の空きのあるバッファとして短ＴＲのバッファを利用可能である。時間領域ＴＲ１１１以降に対応するバッファしか選べないとき、次の空きのあるバッファとして短ＴＲを利用可能でない。
【０１２８】
（ステップＳ８８）制御部１４０は、バッファＴＢｚの次の短ＴＲの空きバッファをバッファＴＢｚとする。転送レートやパケット長によっては、次の（時間帯の）バッファが１以上の時間領域を飛ばした時間領域に対応するバッファになることもある。そして、処理をステップＳ８５に進める。
【０１２９】
（ステップＳ８９）制御部１４０は、バッファＴＢｚの次の長ＴＲの空きバッファをバッファＴＢｚとする。ステップＳ８８と同様に、転送レートやパケット長によっては、次の（時間帯の）バッファが１以上の時間領域を飛ばした時間領域に対応するバッファになることもある。
【０１３０】
（ステップＳ９０）制御部１４０は、バッファＴＢｚ（ここでは、長ＴＲのバッファとなる）に到着したパケット（ただし、未格納の部分）を格納する。制御部１４０は、バッファ管理テーブル１２２ａを更新する。すなわち、到着したパケットのうち新たに格納されたデータ長を現在キュー長の値に加算する。
【０１３１】
（ステップＳ９１）制御部１４０は、到着したパケットの全体を格納済であるか否かを判定する。格納済でない場合、処理をステップＳ９２に進める。格納済である場合、処理をステップＳ９３に進める。
【０１３２】
（ステップＳ９２）制御部１４０は、バッファＴＢｚの次の長ＴＲの空きバッファをバッファＴＢｚとする。そして、処理をステップＳ９０に進める。
（ステップＳ９３）制御部１４０は、フロー情報テーブル１２３ａを更新する。具体的には、到着したパケット（またはその一部）を最後に格納したバッファＴＢｚをバッファＴＢｘとして、当該バッファＴＢｘに対応する時間領域をフロー情報テーブル１２３ａのＴＲの項目に設定する。また、当該バッファＴＢｘについて、同一フローの残り容量から最後にバッファＴＢｘに格納された分のデータ量を減算した値をフロー情報テーブル１２３ａの残り容量の項目に設定する。ここで、バッファＴＢｘが短ＴＲのバッファであれば、残り容量の最大値は短ＴＲ用バッファ当たりデータ量の設定値である。バッファＴＢｘが長ＴＲのバッファであれば、残り容量の最大値は長ＴＲ用バッファ当たりデータ量の設定値である。
【０１３３】
この処理は、短ＴＲベースのスケジューリングともいえる。短ＴＲ領域では、短ＴＲのバッファを用いてスケジューリングを行い、短ＴＲ領域で短ＴＲのバッファが利用できなくなると、長ＴＲ領域において長ＴＲのバッファを用いてスケジューリングを行う。次に、短ＴＲベースのスケジューリングの具体例を説明する。
【０１３４】
図２３は、第３の実施の形態の短ＴＲベースのスケジューリング例を示す図である。図２３（Ａ）は第１のケースである。例えば、短ＴＲ領域に、時間領域ＴＲ１０，ＴＲ１０１，ＴＲ１１，ＴＲ１２の短ＴＲと長ＴＲとに対応するバッファが混在しており、到着したパケットを時間領域ＴＲ１０から順に格納していくとする。このとき、到着したパケットは、例えば、最初に、時間領域ＴＲ１０に対応するバッファに格納される。超過分があれば、次に、時間領域ＴＲ１１に対応するバッファに格納される。更に超過分があれば、次に、時間領域ＴＲ１２に対応するバッファに格納される。パケットが格納される各バッファは何れも短ＴＲのバッファである。
【０１３５】
一方、図２３（Ｂ）は短ＴＲ領域と長ＴＲ領域との境界にある短ＴＲのバッファが格納の起点となる場合を例示している。例えば、短ＴＲ領域および長ＴＲ領域との境界において、時間領域ＴＲ１００，ＴＲ１１０，ＴＲ１１１，ＴＲ１１２に対応するバッファが混在しており、到着したパケットを時間領域ＴＲ１００から格納していくとする。このとき、到着したパケットは、例えば、最初に、時間領域ＴＲ１００に対応するバッファに格納される。超過分があれば、次に、時間領域ＴＲ１１１に対応するバッファに格納される。更に超過分があれば、次に、時間領域ＴＲ１１２に対応するバッファに格納される。ここで、時間領域ＴＲ１００に対応するバッファは、短ＴＲのバッファである。時間領域ＴＲ１１１，ＴＲ１１２に対応する各バッファは、長ＴＲのバッファである。時間領域ＴＲ１１０に対応するバッファを飛ばすのは、当該バッファが時間領域ＴＲ１００に対応するバッファと読み出しの時間帯が重複しているからである。
【０１３６】
図２４は、第３の実施の形態のバッファ再分配の例を示すフローチャートである。以下、図２４に示す処理をステップ番号に沿って説明する。
（ステップＳ１０１）セレクタ１５０は、記憶部１２０に記憶されたタイムテーブル１２１ａを参照して、現時刻に対応する短ＴＲのバッファ（バッファ管理テーブル１２２ａでＴＲタイプが０．１ｍｓ、かつ、読み出し中フラグがｔｒｕｅのバッファ）からパケットを抽出して送信する。例えば、セレクタ１５０は短ＴＲのバッファを完全優先で読み出す。
【０１３７】
（ステップＳ１０２）セレクタ１５０は、タイムテーブル１２１ａを参照して、現時刻に対応する長ＴＲのバッファ（バッファ管理テーブル１２２ａでＴＲタイプが１ｍｓ、かつ、読み出し中フラグがｔｒｕｅのバッファ）からパケットを抽出して送信する。
【０１３８】
（ステップＳ１０３）制御部１４０は、読み出し完了したバッファのメモリ領域を解放する。０．１ｍｓごとに１つの短ＴＲのバッファの読み出しが完了する。１ｍｓごとに１つの長ＴＲのバッファの読み出しが完了する。タイムテーブル１２１ａにおいて、例えば、時間領域ＴＲ１に対応するバッファからの読み出しが完了したとする。この場合、９０ｋｂｉｔｓ分のメモリ領域が解放される。また、例えば、時間領域ＴＲ１０１に対応するバッファからの読み出しが完了したとする。この場合、１００ｋｂｉｔｓ分のメモリ領域が解放される。
【０１３９】
（ステップＳ１０４）制御部１４０は、解放されたメモリ領域を再分配する。例えば、時間領域ＴＲ１に対応するバッファのメモリ領域が解放されとする。すると、制御部１４０は、時間領域ＴＲ５１に対応するバッファに、解放されたメモリ領域のうち５０ｋｂｉｔｓ分を追加する（当該バッファの容量は計９０ｋｂｉｔｓとなる）。また、制御部１４０は、新たな時間領域ＴＲ１（９．９−１０ｍｓ後）に対応するバッファに、解放されたメモリ領域のうち４０ｋｂｉｔｓ分を割り当てる（当該バッファの容量は計４０ｋｂｉｔｓとなる）。また、別の例として、時間領域ＴＲ１０１に対応するバッファのメモリ領域が解放されたとする。すると、制御部１４０は、新たな時間領域ＴＲ１０１（３４−３５ｍｓ後）に対応するバッファに、解放されたメモリ領域のうちの全て（１００ｋｂｉｔｓ）を割り当てる。
【０１４０】
（ステップＳ１０５）制御部１４０は、何れかのフローでバッファに格納されたパケットが全て送信されたか否かを判定する。何れかのフローでバッファに格納されたパケットが全て送信された場合、処理をステップＳ１０６に進める。何れのフローでもバッファに格納されたパケットが全て送信されていない場合、処理を終了する。例えば、フロー情報テーブル１２３ａで何れかのフローのＴＲの項目で示される時間領域のバッファについて、ステップＳ１０１またはステップＳ１０２で読み出しが完了した場合に、何れかのフローでバッファに格納されたパケットが全て送信されたことになる。
【０１４１】
（ステップＳ１０６）制御部１４０は、バッファリングされたパケットを全て送信済のフローにつき、フロー情報テーブル１２３ａのＴＲの項目をクリアする。ＴＲの項目がクリアされると、当該ＴＲの項目に基づいて、タイムテーブル１２１ａから対応するバッファのポインタを求めようとしても有効値は得られないことになる。
【０１４２】
このようにして、図１５で示した各バッファのサイズを維持できる。なお、読み出し対象の短ＴＲのバッファを切り替えるタイミングと読み出し対象の長ＴＲのバッファを切り替えるタイミングとを整合させて、読み出されるバッファの時系列が崩れないようにする。また、ステップＳ１０１，Ｓ１０２では、前述のようにＷＦＱの方法を用いて短ＴＲのバッファおよび長ＴＲのバッファからパケットを読み出してもよい。
【０１４３】
第３の実施の形態では、短ＴＲと長ＴＲとの２つのグループのバッファを設ける。第３の実施の形態では、長ＴＲの各バッファの読み出しの時間幅を、短ＴＲの各バッファの読み出しの時間幅の１０倍の１ｍｓとしている。そして、第２の実施の形態で設けていたサイズ１０ｋｂｉｔｓの代わりに、長ＴＲの各バッファを用いる。すると、第２の実施の形態では時間領域を３５０個管理していたのに対し、第３の実施の形態では時間領域を１３５個管理すればよくなる。しかも、第２，第３の実施の形態の何れも３５ｍｓ秒後までスケジューリングできる。このため、第３の実施の形態でも、低レートのフローに対して効率的にバッファ容量を確保することができ、バースト耐力を向上できる。また、管理対象となる時間領域の数を低減できるので、バッファ管理の演算コストを軽減できる。
【０１４４】
［第４の実施の形態］
以下、第４の実施の形態を説明する。前述の第２，第３の実施の形態と相違する事項を主に説明し、共通する事項の説明を省略する。
【０１４５】
第３の実施の形態では、フローの転送レートに関わらず、短ＴＲと長ＴＲとの両方のバッファを利用してスケジューリングを行うものとした。したがって、第３の実施の形態では、１つのフローのパケットが、短ＴＲのバッファおよび長ＴＲのバッファの両方に格納され得る。一方、フローに応じて、短ＴＲか長ＴＲかの何れのバッファに格納するかを決定してもよい。そこで、第４の実施の形態ではそのための方法を説明する。
【０１４６】
ここで、第４の実施の形態の中継装置は、第２の実施の形態と同様である。そこで、第４の実施の形態では第２の実施の形態と同様の名称・符号を用いる。ただし、第４の実施の形態では、図１５で示したタイムテーブル１２１ａおよび図１７で示したバッファ管理テーブル１２２ａを用いる。また、第４の実施の形態では、セレクタ１５０は、図１６で示したように短ＴＲおよび長ＴＲの両方から読み出しを行う。
【０１４７】
図２５は、第４の実施の形態のフロー情報テーブルの例を示す図である。フロー情報テーブル１２３ｂは、フロー情報テーブル１２３に代えて、記憶部１２０に格納される。フロー情報テーブル１２３ｂは、フロー番号、バッファ当たりデータ量、許容遅延、ＴＲ、残り容量およびＴＲタイプの項目を含む。フロー番号、バッファ当たりデータ量、許容遅延、ＴＲおよび残り容量の項目に登録される内容は、フロー情報テーブル１２３と同様である。
【０１４８】
ＴＲタイプの項目には、短ＴＲおよび長ＴＲの何れのバッファを用いてスケジューリングを行うかを示す情報が登録される。第３の実施の形態と同様に、短ＴＲのバッファは読み出しの時間幅が０．１ｍｓのバッファである。また、長ＴＲのバッファは読み出しの時間幅が１ｍｓのバッファである。
【０１４９】
例えば、フロー情報テーブル１２３ｂには、フロー番号が“１”、バッファ当たりデータ量が“５０ｋ”、許容遅延が“３０ＴＲ”、ＴＲが“ＴＲ３”、残り容量が“４０ｋ”、ＴＲタイプが“０．１ｍｓ”という情報が登録されている。これは、フロー番号“１”で識別されるフローが、１つのバッファに対して５０ｋｂｉｔｓのデータを格納でき、スケジューリングの際に現時点から３０ＴＲ分先までは遅延が許容されていることを示す。また、当該フローのパケットが時間領域ＴＲ３に対応するバッファに最後に格納されており、当該バッファに対して当該フローが格納できる残りのデータ量が４０ｋｂｉｔｓであることを示す。また、スケジューリングに用いるのが短ＴＲのバッファであることを示す。
【０１５０】
ここで、フロー情報テーブル１２３ｂでは、比較的高レートのフローに対して短ＴＲのバッファを用いるようにする。また、比較的低レートのフローに対して長ＴＲのバッファを用いるようにする。時間軸に対する各バッファのサイズを図１３で説明したスケジューリングの典型例に対応させるためである。
【０１５１】
制御部１４０は、フローごとの転送レートに応じて、短ＴＲのバッファを用いるか長ＴＲのバッファを用いるかを自動的に決定してもよい。例えば、全体のフローの中で、相対的に高レートのフロー（例えば、合計で１０個のフローがあれば転送レートの高い方から５個目までのフロー）に対して短ＴＲのバッファを用いると決定する。また、相対的に低レートのフロー（例えば、合計で１０個のフローがあれば転送レートの低い方から５個目までのフロー）に対して長ＴＲのバッファを用いると決定する。制御部１４０は、決定結果をフロー情報テーブル１２３ｂに設定してもよい。
【０１５２】
図２６は、第４の実施の形態のバッファリングの例を示すフローチャートである。以下、図２６に示す処理をステップ番号に沿って説明する。なお、第４の実施の形態のバッファリングの手順では、図９で説明した第２の実施の形態のバッファリングの手順に対して、ステップＳ１２とステップＳ１３との間にステップＳ１２ａを実行する点が異なる。それ以外のステップについては、第２の実施の形態のバッファリングの手順と同様であるため、説明を省略する。ただし、何れの処理においても、制御部１４０はタイムテーブル１２１ａ、バッファ管理テーブル１２２ａおよびフロー情報テーブル１２３ｂを参照して処理を行う点が異なる。
【０１５３】
（ステップＳ１２ａ）制御部１４０は、フロー情報テーブル１２３ｂを参照して、到着したパケットのフローに対応するＴＲタイプを決定する。制御部１４０は、ステップＳ１２ａ以降では、ステップＳ１２ａで決定されたＴＲタイプに対応するバッファ（短ＴＲのバッファか長ＴＲのバッファの何れか）を用いることになる。
【０１５４】
図２７は、第４の実施の形態の高レートフローのスケジューリングを示す図である。制御部１４０は、短ＴＲのバッファのみを用いて高レートのフローのスケジューリングを行う。例えば、図２７において、短ＴＲのバッファは、時間領域ＴＲ１，ＴＲ２，・・・，ＴＲ１０，ＴＲ１１，・・・，ＴＲ５１，・・・，ＴＲ１００に対応するバッファである。例えば、フロー情報テーブル１２３ｂによれば、フロー番号“１”のパケットは、これら短ＴＲのバッファのみを用いてスケジューリングされることになる。
【０１５５】
図２８は、第４の実施の形態の低レートフローのスケジューリングを示す図である。制御部１４０は、長ＴＲのバッファのみを用いて低レートのフローのスケジューリングを行う。例えば、図２８において、長ＴＲのバッファは、時間領域ＴＲ１０１，ＴＲ１０２，・・・，ＴＲ１１０，ＴＲ１１１，・・・，ＴＲ１３５に対応するバッファである。例えば、フロー情報テーブル１２３ｂによれば、フロー番号“３”のパケットは、これら長ＴＲのバッファのみを用いてスケジューリングされることになる。
【０１５６】
このようにすることで、第３の実施の形態に比べて、短ＴＲのバッファと長ＴＲのバッファとを個別に管理できる。例えば、短ＴＲのバッファの切り替えタイミングと長ＴＲのバッファの切り替えタイミングとの整合を考えなくてもよい。また、第３の実施の形態のように、短ＴＲと長ＴＲとの何れのバッファに格納するかに応じた格納可能なデータ量の判断を行わなくてもよい。したがって、スケジューリングにおける制御を容易に行える。また、高レートのフローと低レートのフローとで使用するバッファを分けるので、高レートのフローにより、未来側（長ＴＲ領域）のバッファが占有されてしまうことの防止も図れる。
【０１５７】
なお、第３，第４の実施の形態では、短ＴＲのバッファのサイズを２段階としているが、３段階以上としてもよい。
［第５の実施の形態］
以下、第５の実施の形態を説明する。前述の第２〜第４の実施の形態と相違する事項を主に説明し、共通する事項の説明を省略する。
【０１５８】
第３，第４の実施の形態では、タイムテーブル１２１ａの短ＴＲ領域にサイズの異なる２種類のバッファを設けた。ただし、そのうちの一方だけにしてもよい。第５の実施の形態では、この場合を例示する。ここで、第５の実施の形態の中継装置は、第２の実施の形態と同様である。そこで、第５の実施の形態では第２の実施の形態と同様の名称・符号を用いる。ただし、第５の実施の形態では、スケジューリングに用いるタイムテーブルおよびバッファ管理テーブルが第２の実施の形態と異なる。また、第５の実施の形態では、セレクタ１５０は、図１６で示したように短ＴＲおよび長ＴＲの両方から読み出しを行う。
【０１５９】
図２９は、第５の実施の形態のタイムテーブルの例を示す図である。図２９（Ａ）は、現時点から５ｍｓ秒後までを示している。図（Ｂ）は、５ｍｓより後を示している。タイムテーブル１２１ｂは、タイムテーブル１２１に代えて、記憶部１２０に格納される。第５の実施の形態では、２つのグループのバッファ群を用いる。
【０１６０】
第１のグループの各バッファは、現時点から５ｍｓ後までを０．１ｍｓ単位で区切った各時間領域に対応付けられる。第２のグループの各バッファは、現時点から５ｍｓ後までを１ｍｓ単位で区切った各時間領域に対応付けられる。第１のグループの各バッファでは、０．１ｍｓ刻みで読み出し対象のバッファが切り替えられる。第２のグループの各バッファでは、１ｍｓ刻みで読み出し対象のバッファが切り替えられる。
【０１６１】
ここで、現時刻（０秒の時点）〜０．１ｍｓ後の時間帯は時間領域ＴＲ１である。０．１〜０．２ｍｓ後の時間帯は時間領域ＴＲ２である。このように５ｍｓ後までを０．１ｍｓ単位で区切った時間領域を合計５０個定義できる。すなわち、時間領域ＴＲ１，ＴＲ２，・・・，ＴＲ５０が存在する。このように、第１のグループの各バッファは、第２のグループの各バッファよりも短い時間幅の時間領域に対応付けられる。したがって、第１のグループの各バッファが割り当てられる現時点〜５ｍｓ後までの時間を短ＴＲ領域と呼ぶことができる。
【０１６２】
また、現時点（０秒の時点）〜１．０ｍｓ後の時間帯は時間領域ＴＲ５１である。１．０〜２．０ｍｓ後の時間帯は時間領域ＴＲ５２である。このように、５０ｍｓ後までを１．０ｍｓ単位で区切った時間領域を合計５０個定義できる。すなわち、時間領域ＴＲ５１，ＴＲ５２，・・・，ＴＲ１００が存在する。このように、第２のグループの各バッファは、第１のグループの各バッファよりも長い時間幅の時間領域に対応付けられる。したがって、第２のグループの各バッファが割り当てられる１０〜５０ｍｓ後までの時間を長ＴＲ領域と呼ぶことができる。
【０１６３】
第１のグループに属するバッファのサイズは、９０ｋｂｉｔｓである。第２のグループに属するバッファのサイズは、１００ｋｂｉｔｓである。第１のグループのバッファのサイズは、第２のグループのバッファサイズよりも１０ｋｂｉｔｓずつ小さくする。同じ時間帯に、第２のグループのバッファからも読み出しを行うためである。ここで、バッファ部１３０の各バッファの合計のサイズは９．５Ｍｂｉｔｓである。
【０１６４】
図３０は、第５の実施の形態のバッファ管理テーブルの例を示す図である。バッファ管理テーブル１２２ｂは、バッファ管理テーブル１２２に代えて、記憶部１２０に格納される。バッファ管理テーブル１２２ｂは、ＴＲ、上限値、現在キュー長、読み出し中フラグおよびＴＲタイプの項目を含む。ここで、ＴＲ、上限値、現在キュー長および読み出し中フラグの項目に登録される内容は、バッファ管理テーブル１２２と同様である。ＴＲタイプの項目には、対応する時間領域の時間幅を示す情報が登録される。バッファ管理テーブル１２２ｂの設定内容は、バッファ管理テーブル１２２ａと同様である。ただし、バッファ管理テーブル１２２ｂでは、短ＴＲ領域に１つの種類のサイズ（９０ｋｂｉｔｓ）のバッファを設けている点が異なる。
【０１６５】
このように短ＴＲ領域を複数の種類のサイズに分けなくてもよい。なお、バッファリングの手順は、第３，第４の実施の形態と同じ手順を用いることができる。例えば、１つのフローを短ＴＲおよび長ＴＲの両方のバッファを用いてスケジューリングしてもよいし、フローに応じて決定される短ＴＲおよび長ＴＲの何れか一方のバッファを用いてスケジューリングしてもよい。
【０１６６】
［第６の実施の形態］
以下、第６の実施の形態を説明する。前述の第２〜第５の実施の形態と相違する事項を主に説明し、共通する事項の説明を省略する。
【０１６７】
例えば、中継装置に設定されるフローに対する転送レートは、ユーザとの契約やサービスの利用状況になどによっても変更され得る。例えば、フローを新規に追加したり、削除したりすることもあるし、予め設定されたフローの転送レートを増減することもある。このような設定変更に応じて、各バッファのサイズを変更してもよい。
【０１６８】
ここで、第６の実施の形態の中継装置は、第２の実施の形態と同様である。そこで、第６の実施の形態では第２の実施の形態と同様の名称・符号を用いる。ただし、記憶部１２０が、中継装置１００における帯域を管理するための帯域管理テーブルを記憶する点が第２の実施の形態と異なる。また、制御部１４０が、帯域管理テーブルに基づいて各時間領域に対応するバッファのサイズを変更する点が第２の実施の形態と異なる。
【０１６９】
図３１は、第６の実施の形態の帯域管理テーブルの例を示す図である。帯域管理テーブル１２４は、記憶部１２０に記憶される。帯域管理テーブル１２４は、レート区分、レート上限値、ユーザ数カウンタおよび累積帯域カウンタの項目を含む。
【０１７０】
レート区分の項目には、レート区分を示す番号が登録される。レート上限値の項目には、当該レート区分における転送レートの上限値が登録される。ユーザは、レート区分ごとのレート上限値に達しない範囲で、上限の転送レートを契約できる。ユーザ数カウンタの項目には、当該レート区分で通信するユーザの数が登録される。累積帯域カウンタの項目には、当該レート区分において、各ユーザにより契約された転送レートの累積の帯域を示す情報が登録される。
【０１７１】
例えば、帯域管理テーブル１２４には、レート区分が“１”、レート上限値が“５００Ｍｂｐｓ”、ユーザ数カウンタが“３”、累積帯域カウンタが“９１２Ｍｂｐｓ”という情報が登録される。これは、レート区分“１”では転送レートの上限値が５００Ｍｂｐｓであり、契約しているユーザが３人であり、当該３人のユーザにより契約されている転送レートの累積が９１２Ｍｂｐｓであることを示している。
【０１７２】
なお、帯域管理テーブル１２４において、レート上限値の値が大きい程、高レートのフローであるといえる。例えば、レート区分“１”〜“３”のうちでは、レート区分“１”に属するフローが最高レートである。レート区分“２”に属するフローはその次に高レートであり、レート区分“３”に属するフローは最低レートである。
【０１７３】
図３２は、第６の実施の形態のバッファ容量変更例を示すフローチャートである。以下、図３２に示す処理をステップ番号に沿って説明する。
（ステップＳ１１１）制御部１４０は、フローの設定変更を受け付ける。
【０１７４】
（ステップＳ１１２）制御部１４０は、記憶部１２０に記憶された帯域管理テーブル１２４を更新する。例えば、新たにレート上限値が９Ｍｂｐｓの契約が追加された場合には、レート区分“３”のユーザ数カウンタに１を加算する。そして、累積帯域カウンタの設定値に９Ｍｂｐｓを加算する。
【０１７５】
（ステップＳ１１３）制御部１４０は、変更後の帯域管理テーブル１２４に基づいて、記憶部１２０に記憶されたバッファ管理テーブル１２２の設定を変更する。例えば、次のような変更が考えられる。記憶部１２０に記憶されたタイムテーブル１２１において、時間領域ＴＲ１〜ＴＲ５０をレート区分“１”に、時間領域ＴＲ５１〜ＴＲ１００をレート区分“２”に、時間領域ＴＲ１０１〜ＴＲ３５０をレート区分“３”にそれぞれ対応付ける。そして、それぞれのレート区分に対して、帯域管理テーブル１２４に記憶された累積帯域カウンタの値に応じたバッファ容量を割り当てる。
【０１７６】
具体的には、レート区分“３”で累積帯域カウンタが８５．５Ｍｂｐｓであれば、時間領域ＴＲ１０１〜ＴＲ３５０において０．１ｍｓごとに８．５５ｋｂｉｔｓ分のバッファを用意すればよい。そこで、時間領域ＴＲ１０１〜ＴＲ３５０に格納され得るパケット量と同じ量のバッファを用意しておく。例えば、レート区分“３”において、９Ｍｂｐｓのフローが追加された場合には、累積帯域は９４．５Ｍｂｐｓになる。すると、時間領域ＴＲ１０１〜ＴＲ３５０において０．１ｍｓごとに９．４５ｋｂｉｔｓ分のバッファを用意すればよいことになる。したがって、制御部１４０は、時間領域ＴＲ１０１〜ＴＲ３５０のバッファのサイズを０．９ｋｂｉｔｓ分増加させる。
【０１７７】
図３３は、第６の実施の形態のバッファ容量変更例を示す図である。図３３（Ａ）は変更前を示している。図３３（Ｂ）は変更後を示している。例えば、図３３（Ａ）の変更前の状態では、レート区分“３”の累積帯域カウンタ８５．５Ｍｂｐｓである。変更前では時間領域ＴＲ１０１〜ＴＲ３５０（時間軸の１０〜３５ｍｓ後）に対応する各バッファにおいて、０．１ｍｓごとに８．５５ｋｂｉｔｓのサイズのバッファを用意している。レート区分“３”で９Ｍｂｐｓのフローが追加された場合、時間領域ＴＲ１０１〜ＴＲ３５０に対応する各バッファにおいて、前述のように０．９ｋｂｉｔｓ分だけ増加させる。
【０１７８】
すると、図３３（Ｂ）で示すように、時間領域ＴＲ１０１〜ＴＲ３５０に対応する各バッファにおいて、０．１ｍｓごとに９．４５ｋｂｉｔｓのサイズのバッファが用意されることになる。この場合、時間領域ＴＲ１０１〜ＴＲ３５０において、合計で２２５ｋｂｉｔｓを更に割り当てることになる。すると、バッファ部１３０で利用可能な容量を超過する可能性もある。そこで、例えば、レート区分“１”に対応する時間領域ＴＲ１〜ＴＲ５０（時間軸の０〜５ｍｓ）の一部（時間領域ＴＲ５０側）のサイズを減少させてもよい。図３３（Ｂ）の例では、時間領域ＴＲ４１〜ＴＲ５０（４〜５ｍｓ後）に対応するバッファのサイズを１００ｋｂｉｔｓから５６．７５ｋｂｉｔｓに変更する。すなわち、バッファのサイズが変更される境界の時間を５ｍｓ後から４ｍｓ後へシフトする。このようにして、低レートのフローに対する容量を確保している。制御部１４０は、境界の時間のシフト量を、確保したい容量に合わせて制御してもよい。例えば、２２５ｋｂｉｔｓ分を確保したければ、０．３ｍｓのシフト量としてもよい。利用可能なメモリ領域を効率的に利用するためである。
【０１７９】
このようにして、制御部１４０は、フローの設定変更に応じてバッファのサイズも変更する。例えば、低レートのフローが比較的多い場合に、未来側のバッファを比較的多めに設定すれば、低レートの各フローについてバッファが不足することの防止を図れる。
【０１８０】
ここで、上記の説明では、時間領域ＴＲ１，ＴＲ２，・・・それぞれに対して１つのバッファを対応付けて説明したが、各バッファを複数のスロットの集合と考えてもよい。
図３４は、バッファの他の例を示す図である。例えば、時間領域ＴＲ１に対応するバッファが、固定長の複数のスロット（図３４の例ではｓｌｏｔ１，ｓｌｏｔ２，・・・，ｓｌｏｔ１００）の集合と考えてもよい。すると、当該バッファのサイズは複数のスロットのサイズの合計ということになる。その場合でも、時間領域ＴＲ１，ＴＲ２，・・・に対してスロットの数を増減することで各バッファのサイズを調整し得る。したがって、スロットを用いてスケジューリングを行う場合にも第２〜第６の実施の形態の方法を適用することができる。
【符号の説明】
【０１８１】
１  中継装置
１ａ  記憶部
１ｂ  バッファ群
１ｃ  制御部
Ｋｔ１，Ｋｔ２，Ｋｔ３，Ｋｔ４，Ｋｔ５，Ｋｔ６  バッファ
ｔ１，ｔ２，ｔ３，ｔ４，ｔ５，ｔ６  時間領域
【図１】
2014123913.tif 000003
【図２】
2014123913.tif 000004
【図３】
2014123913.tif 000005
【図４】
2014123913.tif 000006
【図５】
2014123913.tif 000007
【図６】
2014123913.tif 000008
【図７】
2014123913.tif 000009
【図８】
2014123913.tif 000010
【図９】
2014123913.tif 000011
【図１０】
2014123913.tif 000012
【図１１】
2014123913.tif 000013
【図１２】
2014123913.tif 000014
【図１３】
2014123913.tif 000015
【図１４】
2014123913.tif 000016
【図１５】
2014123913.tif 000017
【図１６】
2014123913.tif 000018
【図１７】
2014123913.tif 000019
【図１８】
2014123913.tif 000020
【図１９】
2014123913.tif 000021
【図２０】
2014123913.tif 000022
【図２１】
2014123913.tif 000023
【図２２】
2014123913.tif 000024
【図２３】
2014123913.tif 000025
【図２４】
2014123913.tif 000026
【図２５】
2014123913.tif 000027
【図２６】
2014123913.tif 000028
【図２７】
2014123913.tif 000029
【図２８】
2014123913.tif 000030
【図２９】
2014123913.tif 000031
【図３０】
2014123913.tif 000032
【図３１】
2014123913.tif 000033
【図３２】
2014123913.tif 000034
【図３３】
2014123913.tif 000035
【図３４】
2014123913.tif 000036