(57)【特許請求の範囲】
【請求項１】
パケットを再構築し再順序付けするための方法であって、
ソース・ポートが送信したセルを受信するステップであって、前記セルはＳＩＤ（Ｓｏｕｒｃｅ  Ｉｄｅｎｔｉｆｉｃａｔｉｏｎ）、パケット・シーケンス番号およびセル・シーケンス番号を保持するステップと、
前記ＳＩＤに従って受信した前記セルを前処理して前記セルをパケット再構築データベースに挿入するかどうかを判定するステップと、
前記パケット・シーケンス番号に従って前記パケット再構築データベースの中でセルを順序付けて正しく順序付けられたパケットを取得するステップと、
前記正しく順序付けられたパケットが完全なパケットである場合には、前記正しく順序付けられたパケットのセルを前記セル・シーケンス番号に従って順序付けて正しく順序付けられたセルを取得するステップと、
前記正しく順序付けられたセルでパケット再構築を実施するステップと、
を含む、方法。
【請求項２】
前記ＳＩＤに従って受信した前記セルを前処理して前記セルをパケット再構築データベースに挿入するかどうかを判定するステップは、
受信したセルを到着時刻のローカル・タイム・スタンプでスタンプし、前記セルのセル・データを前記ＳＩＤに従ってロード・メモリに格納し、対応するロード・メモリのインデックス値を構成するステップと、
前記セルのセル情報を入力ＦＩＦＯ（ＩＦ）待ち行列に挿入するステップであって、前記セル情報は、前記ＳＩＤ、前記ローカル・タイム・スタンプ、前記ロード・メモリのインデックス値、前記パケット・シーケンス番号、および前記セル・シーケンス番号を含むステップと、
前記ＩＦ待ち行列の中の前記セル情報を、前記ＳＩＤ、前記パケット・シーケンス番号、および遅延ＦＩＦＯ（ＰＦ）待ち行列の状態に従って前処理して、前記セル情報をセル再構築データベースに挿入すべきかどうかを判定するステップと、
を含む、請求項１に記載の方法。
【請求項３】
前記ＩＦ待ち行列の中の前記セル情報を前記ＳＩＤ、前記パケット・シーケンス番号、および前記ＰＦ待ち行列の状態に従って前処理して、前記セル情報を前記セル再構築データベースに挿入すべきかどうかを判定するステップは、
各ＰＦ待ち行列の深さが事前設定閾値より小さい場合には、前記ＩＦ待ち行列の先頭セル情報に対応するセルのパケット・シーケンス番号と現在処理されているパケットの最小パケット・シーケンス番号の差分が第４の閾値より小さいかどうかを判定するステップと、
前記差分が前記第４の閾値より小さい場合には、前記ＩＦ待ち行列の前記先頭セル情報をポップするステップと、
前記差分が前記第４の閾値より小さくない場合には、前記ＩＦ待ち行列の前記先頭セル情報を前記ＰＦ待ち行列の１つにプッシュし、最も満杯なＰＦ待ち行列の先頭セル情報をポップするステップと、
前記ＩＦ待ち行列のポップされた先頭セル情報に対応するセルまたは前記ＰＦ待ち行列のポップされた先頭セル情報に対応するセルがタイムアウトしたかどうかを判定するステップと、
タイムアウトした場合には、前記セル情報に対応するセルと前記セルが属するパケットを再利用するステップと、
タイムアウトしていない場合には、前記セルのパケット・シーケンス番号が前記パケット再構築データベースの同一ソースの最大パケット・シーケンス番号より小さいとき、前記セル情報を前記パケット再構築データベースに挿入するステップと、
前記セルのパケット・シーケンス番号が前記パケット再構築データベースの同一ソースの最大パケット・シーケンス番号より大きいとき、前記セル情報を前記ＰＦ待ち行列の１つに挿入するステップと、
を含む、請求項２に記載の方法。
【請求項４】
特定のＰＦ待ち行列の深さが前記事前設定閾値より大きい場合には、オーバフローＰＦ待ち行列の先頭セル情報に対応するセルのパケット・シーケンス番号と現在処理されているパケットの最小パケット・シーケンス番号の差分が第５の閾値より小さいかどうかを判定するステップと、
前記差分が前記第５の閾値より小さい場合には、前記オーバフローＰＦ待ち行列の先頭セル情報に対応するセルを再利用し、前記ＩＦ待ち行列の先頭セル情報に対応するセルのパケット・シーケンス番号と現在処理されているパケットの最小パケット・シーケンス番号の差分が前記第４の閾値より小さいかどうかを判定するステップを実施するステップと、
前記ＩＦ待ち行列の先頭セル情報に対応するセルのパケット・シーケンス番号と現在処理されているパケットの最小パケット・シーケンス番号の差分が前記第４の閾値より小さくない場合には、前記ＩＦ待ち行列の前記先頭セル情報を前記ＰＦ待ち行列の１つにプッシュするステップを実施し、最も満杯なＰＦ待ち行列の先頭セル情報をポップするステップと、
をさらに含む、請求項３に記載の方法。
【請求項５】
前記パケット再構築データベースは、ソース記述子メモリ（ＳＤＭ）およびソース待ち行列メモリ（ＳＱＭ）を備え、前記ＳＤＭは、ソース記述子を格納しパケットのサービス・クラス（ＣｏＳ）と前記ＳＩＤをインデックスとするように構成され、前記ＳＱＭは前記ソース記述子に対応するソース待ち行列を格納するように構成され、前記ＳＱＭは再順序パケット配列バッファを指すポインタを備え、前記ポインタは、順序付けを待機しているセルのパケット記述子を格納し、前記パケット記述子の各々は前記パケットに属する最後に受信したセルのセル記述子を指す、請求項１乃至４の何れか１項に記載の方法。
【請求項６】
前記パケット再構築データベースは、マルチキャスト・グループＩＤ（ＭＧＩＤ）記述子メモリおよびＭＧＩＤ待ち行列メモリを備え、前記ＭＧＩＤ記述子メモリはＭＧＩＤ記述子を格納し、パケットのＣｏＳ、前記ＭＧＩＤ、および前記ＳＩＤをインデックスとするように構成され、前記ＭＧＩＤ待ち行列メモリは、前記ＭＧＩＤ記述子に対応するＭＧＩＤ待ち行列を格納するように構成され、前記ＭＧＩＤ待ち行列メモリは再順序パケット配列バッファを指すポインタを備え、前記再順序パケット配列バッファは順序付けを待機しているセルのパケット記述子を格納し、前記パケット記述子の各々は前記パケットに属する最後に受信したセルのセル記述子を指す、
請求項１乃至４の何れか１項に記載の方法。
【請求項７】
前記再順序パケット配列バッファは動的パケット記述子配列であり、正の整数個のクラスの様々な容量のメモリ・ブロックを含む、請求項５または６に記載の方法。
【請求項８】
ソース・ポートが送信したセルを受信するように構成された受信ユニットであって、前記セルは、ＳＩＤ（Ｓｏｕｒｃｅ  Ｉｄｅｎｔｉｆｉｃａｔｉｏｎ）、パケット・シーケンス番号、およびセル・シーケンス番号を保持する受信ユニットと、
前記ＳＩＤに従って前記受信ユニットにより受信したセルを前処理して前記セルをパケット再構築データベースに挿入するかどうかを判定するように構成された前処理ユニットと、
前記パケット・シーケンス番号に従って前記パケット再構築データベース内のセルを順序付けて正しく順序付けられたパケットを取得するように構成されたパケット順序付けユニットと、
前記パケットが完全なパケットと判定された場合には、前記正しく順序付けられたパケットのセルを前記セル・シーケンス番号に従って順序付けて、前記正しく順序付けられたセルを取得するように構成されたセル順序付けユニットと、
前記正しく順序付けられたセルにパケット再構築を実施するように構成された再構築ユニットと、
を備える、ネットワーク装置。
【請求項９】
前記前処理ユニットは、
受信したセルを到着時刻のローカル・タイム・スタンプでスタンプし、前記セルのセル・データを前記ＳＩＤに従ってロード・メモリに格納し、対応するロード・メモリのインデックス値を構成するように構成されたデータ格納サブユニットと、
前記セルのセル情報を入力ＦＩＦＯ（ＩＦ）待ち行列に挿入するように構成された情報挿入サブユニットであって、前記セル情報は、前記ＳＩＤ、前記ローカル・タイム・スタンプ、前記ロード・メモリのインデックス値、前記パケット・シーケンス番号、および前記セル・シーケンス番号を含む情報挿入サブユニットと、
前記ＳＩＤ、前記パケット・シーケンス番号、および遅延ＦＩＦＯ（ＰＦ）待ち行列の状態に従って前記ＩＦ待ち行列の中の前記セル情報を処理し、前記セル情報をセル再構築データベースに挿入すべきかどうかを判定するように構成された判定サブユニットと、
を備える、請求項８に記載のネットワーク装置。
【請求項１０】
前記判定サブユニットは特に、各ＰＦ待ち行列の深さが事前設定閾値より小さい場合には、前記ＩＦ待ち行列の先頭セル情報に対応するセルのパケット・シーケンス番号と現在処理されているパケットの最小パケット・シーケンス番号の間の差分が第４の閾値より小さいと判定し、前記差分が前記第４の閾値より小さい場合には、前記ＩＦ待ち行列の前記先頭セル情報をポップし、前記差分が前記第４の閾値より小さくない場合には、前記ＩＦ待ち行列の前記先頭セル情報を前記ＰＦ待ち行列の１つにプッシュし、最も満杯なＰＦ待ち行列の先頭セル情報をポップし、前記ＩＦ待ち行列のポップされた先頭セル情報に対応するセルまたは前記ＰＦ待ち行列の先頭セル情報に対応するセルがタイムアウトしたかどうかを判定し、タイムアウトした場合には、前記セル情報に対応するセルおよび前記セルが属するパケットを再利用し、タイムアウトしていない場合には、前記セルのパケット・シーケンス番号が前記パケット再構築データベースの同一ソースの最大パケット・シーケンス番号より小さいとき、前記セル情報を前記パケット再構築データベースに挿入し、前記セルのパケット・シーケンス番号が前記パケット再構築データベースの同一ソースの最大パケット・シーケンス番号より大きいとき、前記セル情報を前記ＰＦ待ち行列の１つに挿入するように構成された、請求項９に記載のネットワーク装置。
【請求項１１】
前記判定サブユニットは特に、特定のＰＦ待ち行列の深さが前記事前設定閾値より大きい場合には、オーバフローＰＦ待ち行列の先頭セル情報に対応するセルのパケット・シーケンス番号と現在処理されているパケットの最小パケット・シーケンス番号の差分が第５の閾値より小さいかどうかを判定し、前記差分が前記第５の閾値より小さい場合には、前記オーバフローＰＦ待ち行列の先頭セル情報に対応するセルを再利用し、次いで前記ＩＦ待ち行列の先頭セル情報に対応するセルのパケット・シーケンス番号と現在処理されているパケットの最小パケット・シーケンス番号の差分が前記第４の閾値より小さいかどうかを判定するステップを実施し、前記差分が前記第４の閾値より小さくない場合に、前記ＩＦ待ち行列の前記先頭セル情報を前記ＰＦ待ち行列の１つにプッシュし、最も満杯なＰＦ待ち行列の先頭セル情報をポップするステップを実施するように構成された、請求項１０に記載のネットワーク装置。
【請求項１２】
前記パケット再構築データベースはソース記述子メモリ（ＳＤＭ）とソース待ち行列メモリ（ＳＱＭ）を備え、前記ＳＤＭは、ソース記述子を格納し、前記パケットのサービス・クラス（ＣｏＳ）と前記ＳＩＤをインデックスとするように構成され、前記ＳＱＭは前記ソース記述子に対応するソース待ち行列を格納するように構成され、前記ＳＱＭは再順序パケット配列バッファを指すポインタを備え、前記再順序パケット配列バッファは順序付けを待機しているセルのパケット記述子を格納し、前記パケット記述子の各々は前記パケットに属する最後に受信したセルのセル記述子を指す、請求項８乃至１１の何れか１項に記載のネットワーク装置。
【請求項１３】
前記パケット再構築データベースは、マルチキャスト・グループＩＤ（ＭＧＩＤ）記述子メモリとＭＧＩＤ待ち行列メモリを備え、前記ＭＧＩＤ記述子メモリは、ＭＧＩＤ記述子を格納しパケットのＣｏＳ、前記ＭＧＩＤ、およびソース・ポート番号をインデックスとするように構成され、ＭＧＩＤ待ち行列メモリは、前記ＭＧＩＤ記述子に対応するＭＧＩＤ待ち行列を格納するように構成され、前記ＭＧＩＤ待ち行列メモリは再順序パケット配列バッファを指すポインタを備え、前記再順序パケット配列バッファは順序付けを待機しているセルのパケット記述子を格納し、前記パケット記述子の各々は前記パケットに属する最後に受信したセルのセル記述子を指す、請求項８乃至１１の何れか１項に記載のネットワーク装置。
【請求項１４】
前記再順序パケット配列バッファは動的パケット記述子配列であり、正の整数個のクラスの様々な容量のメモリ・ブロックを含む、請求項１２または１３に記載のネットワーク装置。
【請求項１５】
ソース・ポート装置と請求項９乃至１４の何れか１項に記載のネットワーク装置とを備えた通信システムであって、  ソース・ポート装置は、セルを前記ネットワーク装置に送信するように構成され、前記セルは、ＳＩＤ（Ｓｏｕｒｃｅ  Ｉｄｅｎｔｉｆｉｃａｔｉｏｎ）、パケット・シーケンス番号、およびセル・シーケンス番号を保持する、通信システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信技術の分野に関し、特に、パケットを再構築し再順序付けするための方法、装置、およびシステムに関する。
【背景技術】
【０００２】
データ通信装置は、複数のライン・カードおよびファブリック・スイッチボードから構成される。ライン・カードおよびファブリック・スイッチボードは、互いと縦横に接続される。様々な宛先に向かう様々な長さのパケットを上流の装置から受信した後に、入力側のライン・カードは、当該パケットをパケット・プロセッサ（ＰＰ）に送信する。当該パケット・プロセッサは、パケットの宛先に従ってルーティング・テーブルを検索して、出力側を決定し、当該パケットをトラフィック管理（ＴＭ）に送信する。ＴＭにより形を整えた後、パケットはファブリック・スイッチ・インタフェース（ＦＩ）で固定サイズの複数のセルに分割される。当該セルは連続的にファブリック・スイッチに送信される。当該ファブリック・スイッチは、セルごとに経路を独立に選択し、当該セルを宛先ポートに送信する。
【０００３】
異なるセルがファブリック・スイッチの異なる経路を通って送信されうるので、宛先ポートに到着するセルが破棄される可能性があり（即ち、同一パケットに属するセルが、当該パケットにおけるその位置の順序で順番に到着しない）、したがって、破棄されたセルを再順序付け（再組立て）して、同一パケットに属するセルを完全なパケットに再構築する必要がある。次に、同一のソース・ポートが送信したパケットを当該ソース・ポートでその送信順序で配置し、最後に、出力ポートから下流の装置に送信する。ここで、一連の動作、即ち、同一パケットのセルを完全なパケットに再構築し、同一のソース・ポートから送信されたパケットをその送信順序で当該ソース・ポートで配置すること等は、一般に、パケット再構築および再順序付けと呼ばれる。先行技術では、様々なソースのパケットは通常、時間スケールを用いて宛先ポートで再構築され再順序付けされる。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
この方法では、時間同期の必要性が高い。しかし、多数のソースが存在するときには、非常に正確な時間同期を実現するのは困難であるので、この方法は高性能な装置には適切ではない。しかし、時間スケールを用いずに、宛先ポートでソースに基づいて単純に再順序付けする場合には、大量のメモリと制御リソースが無駄になる。
【課題を解決するための手段】
【０００５】
本発明の諸実施形態では、パケットを再構築し再順序付けするための方法、装置、およびシステムを提供する。これらは、高性能な装置に適しており、メモリや制御リソースをあまり占有しない。
【０００６】
パケットを再構築し再順序付けするための方法は、ソース・ポートが送信したセルを受信するステップであって、当該セルはＳＩＤ（Ｓｏｕｒｃｅ  Ｉｄｅｎｔｉｆｉｃａｔｉｏｎ）、パケット・シーケンス番号およびセル・シーケンス番号を保持するステップと、当該ＳＩＤに従って、受信したセルを前処理して、当該セルをパケット再構築データベースに挿入するかどうかを判定するステップと、当該パケット・シーケンス番号に従ってパケット再構築データベースの中でセルを順序付けて正しく順序付けられたパケットを取得するステップと、当該正しく順序付けられたセルが完全なセルである場合には、当該正しく順序付けられたパケットのセルを当該セル・シーケンス番号に従って順序付けて正しく順序付けられたセルを取得するステップと、当該正しく順序付けられたセルでパケット再構築を実施するステップと、を含む。
【０００７】
ネットワーク装置が、ソース・ポートが送信したセルを受信するように構成された受信ユニットであって、当該セルは、ＳＩＤ（Ｓｏｕｒｃｅ  Ｉｄｅｎｔｉｆｉｃａｔｉｏｎ）、パケット・シーケンス番号、およびセル・シーケンス番号を保持する受信ユニットと、当該ＳＩＤに従って当該受信ユニットにより受信したセルを前処理して当該セルをパケット再構築データベースに挿入するかどうかを判定するように構成された前処理ユニットと、当該パケット・シーケンス番号に従ってパケット再構築データベース内のセルを順序付けて当該正しく順序付けられたパケットを取得するように構成されたパケット順序付けユニットと、当該パケットが完全なパケットと判定された場合には、当該正しく順序付けられたパケットのセルを当該セル・シーケンス番号に従って順序付けして、当該正しく順序付けられたセルを取得するように構成されたセル順序付けユニットと、当該正しく順序付けられたセルに対してパケット再構築を実施するように構成された再構築ユニットと、を備える。
【０００８】
通信システムが、本発明の諸実施形態により提供されるソース・ポート装置と任意のネットワーク装置を備え、当該ソース・ポート装置は、セルを当該ネットワーク装置に送信するように構成され、当該セルは、ＳＩＤ（Ｓｏｕｒｃｅ  Ｉｄｅｎｔｉｆｉｃａｔｉｏｎ）、パケット・シーケンス番号、およびセル・シーケンス番号を保持する。
【０００９】
本発明の諸実施形態では、受信したセルをＳＩＤに従って前処理し、受信したセルがパケット再構築データベースに挿入されるかどうかを判定し、パケット・シーケンス番号とセルのセル・シーケンス番号に従って当該データベース内のセルを直接順序付けし、最後にパケット再構築を実現する。当該解決策では、ソースに従ってパケットを直接再順序付けし再構築することができるので、時間同期に基づいてパケットを再順序付けし再構築する先行技術と比べて、高性能な装置に適している。さらに、当該解決策では受信したセル（即ち、再構築を待機しているパケット）を制御し管理できるので、リソースの利用率は高く、メモリと制御リソースはあまり占有されない。
【００１０】
本発明の諸実施形態の技術的解決策をより明確に説明するために、諸実施形態の説明で使用する図面を以下で簡単に説明する。明らかに、以下の図面は本発明の幾つかの実施形態を例示するにすぎず、当業者は創造的作業なしにこれらの図面から他の図面を得ることができる。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施形態１で提供するパケットを再構築し再順序付けするための方法の流れ図である。
【図２Ａ】本発明の１実施形態で提供するパケット再構築および再順序付けのプロセスのアーキテクチャ図である。
【図２Ｂ】本発明の実施形態２で提供するパケットを再構築し再順序付けするための方法の流れ図である。
【図２Ｃ】ユニキャストにおけるパケット順序付けおよびパケット再構築データベースの構造の略図である。
【図２Ｄ】本発明の１実施形態における前処理方法の流れ図である。
【図２Ｅ】本発明の１実施形態で提供するパケットを再構築し再順序付けするための方法におけるセル順序付け機構を示す略図である。
【図３Ａ】本発明の１実施形態で提供するネットワーク装置の構造図である。
【図３Ｂ】本発明の１実施形態で提供するネットワーク装置の別の構造図である。
【発明を実施するための形態】
【００１２】
以下で、本発明の諸実施形態における技術的解決策を、本発明の諸実施形態における図面を参照して明確かつ十分に説明する。明らかに、説明する実施形態は全ての実施形態ではなく本発明の諸実施形態の一部にすぎない。本発明の諸実施形態に基づいて、当業者が創造的作業なしに得る他の任意の実施形態は本発明の保護範囲に入る。
【００１３】
本発明の諸実施形態では、パケットを再構築し再順序付けするための方法、装置、およびシステムを提供する。これらをそれぞれ以下で説明する。
【００１４】
実施形態１
本実施形態を、宛先ポートの役割を果たすネットワークの観点から説明する。パケットを再構築し再順序付けするための方法は、ソース・ポートが送信したセルを受信するステップであって、当該セルはＳＩＤ（Ｓｏｕｒｃｅ  Ｉｄｅｎｔｉｆｉｃａｔｉｏｎ）、パケット・シーケンス番号およびセル・シーケンス番号を保持するステップと、当該ＳＩＤに従って、受信したセルを前処理して、当該セルをパケット再構築データベースに挿入するかどうかを判定するステップと、当該パケット・シーケンス番号に従ってパケット再構築データベースの中でセルを順序付けて正しく順序付けられたパケットを取得するステップと、当該正しく順序付けられたセルが完全なセルである場合には、当該正しく順序付けられたパケットのセルを当該セル・シーケンス番号に従って順序付けて正しく順序付けられたセルを取得するステップと、正しく順序付けられたセルに対してパケット再構築を実施するステップと、を含む。
【００１５】
図１を参照すると具体的な流れは以下の通りである。１０１で、ソース・ポートが送信したセルを受信する。当該セルは、ＳＩＤ、パケット・シーケンス番号およびセル・シーケンス番号を含む。ＳＩＤは、ソースおよびセルのクラスを特定するように構成され、セルが送られてくるソース・ポートを当該ＳＩＤに従って取得することができる。ＳＩＤを、１組のソース・ポート番号とパケットのサービス・クラス（ＣｏＳ）、即ち、｛ソース・ポート番号、パケットのＣｏＳ｝であるユニキャストＳＩＤと、１組のソース・ポート番号、ＣｏＳおよびマルチキャスト・グループＩＤ（ＭＧＩＤ）、即ち、｛ソース・ポート番号、パケットのＣｏＳ、ＭＧＩＤ｝であるマルチキャストＳＩＤに分類してもよい。ここで、ＭＧＩＤは、ソースライン・カードのＰＰによりマルチキャスト・パケットに割り当てられる。パケット・シーケンス番号は、データ・ストリーム内のパケットの位置を特定するように構成される。セル・シーケンス番号は、パケット内のセルの位置を特定するように構成される。
【００１６】
例えば、ソース・ポートから送信されたセルを、特に、ファブリック・スイッチにより受信してもよい。ここで、ソース・ポートはパケットを分割してセルを取得し、パケット・シーケンス番号とセル・シーケンス番号を当該セルに割り当てる。例えば、同一宛先ポートの２つのパケットをセルに分割する。第１のパケットはそれぞれシーケンス番号（１、１）、（１、２）および（１、３）の３つのセルに分割され、第２のパケットはそれぞれシーケンス番号（２、１）、（２、２）、（２、３）および（２、４）の４つのセルに分割される。括弧内の１番目の数字はパケット・シーケンス番号であり、括弧内の２番目の数はセル・シーケンス番号である。
【００１７】
１０２で、当該ＳＩＤに従って、受信したセルを前処理して、当該セルをパケット再構築データベースに挿入するかどうかを判定する。ここで、セルはセル・データとセル情報を含んでもよい。リソースを節約するために、順序付けプロセスの最中にセル情報のみを操作し、パケット再構築を実施するときにのみ、セル情報に従って対応するセル・データを再構築のために抽出する。例えば、詳細は以下の通りであってもよい。
【００１８】
（１）受信したセルを到着時刻のローカル・タイム・スタンプでスタンプした後、当該セルのセル・データをＳＩＤに従ってロード・メモリに格納し、対応するロード・メモリのインデックス値を構成し、それに基づいて対応するセル・データをロード・メモリから取得することができる。
【００１９】
（２）セルのセル情報を入力ＦＩＦＯ（ＩＦ）待ち行列に挿入する。当該セル情報は、ＳＩＤ、ローカル・タイム・スタンプ、ロード・メモリのインデックス値、パケット・シーケンス番号およびセルのセル・シーケンス番号のような幾つかのセル関連の情報を含んでもよい。ここで、ローカル・タイム・スタンプはローカルで待機しているセルの時刻を判定するために主に使用され、待機時間があまりに長い場合にはセルは破棄される。ＳＩＤ、ロード・メモリのインデックス値、パケット・シーケンス番号およびセル・シーケンス番号の機能に関する上の説明を参照されたい。それらの説明はここでは省略する。
【００２０】
（３）ＳＩＤ、パケット・シーケンス番号および遅延ＦＩＦＯ（ＰＦ）待ち行列の状態に従ってＩＦ待ち行列の中のセル情報を処理し、当該セル情報をセル再構築データベースに挿入すべきかどうかを判定する。即ち、各ＰＦ待ち行列の深さが事前設定閾値より小さい場合には、ＩＦ待ち行列の先頭セル情報に対応するセルを後処理するかどうかを判定する。処理する場合には、ＩＦ待ち行列の当該先頭セル情報をポップする。処理しない場合には、ＩＦ待ち行列の当該先頭セル情報をＰＦ待ち行列の１つにプッシュし（複数のＰＦ待ち行列を構築して、様々な待機時間のセルをバッファしてもよい）、最も満杯なＰＦ待ち行列の先頭セル情報をポップする。ＩＦ待ち行列のポップされた先頭セル情報に対応するセルまたはＰＦ待ち行列のポップされた先頭セル情報に対応するセルがタイムアウトしたかどうかを判定し、タイムアウトしたと判定する場合には、当該セル情報に対応するセルと当該セルが属するパケットを再利用し、タイムアウトしたと判定しない場合には、当該セルのパケット・シーケンス番号がパケット再構築データベースの同一ソースの最大パケット・シーケンス番号より小さいとき、当該セル情報をパケット再構築データベースに挿入し、当該セルのパケット・シーケンス番号がパケット再構築データベースの同一ソースの最大オープン・パケット・シーケンス番号より大きいとき、当該セル情報をＰＦ待ち行列の１つに挿入する。
【００２１】
対照的に、特定のＰＦ待ち行列の深さが当該事前設定閾値より大きい場合には、オーバフローＰＦ待ち行列の先頭セル情報に対応するセルが処理されるかどうかを判定し、処理されないと判定した場合には、当該オーバフローＰＦ待ち行列の先頭セル情報に対応するセルを再利用し（即ち、ＰＦ待ち行列の深さが事前設定閾値より大きい、例えば、ＰＦ待ち行列が満杯である）、ＩＦ待ち行列内の先頭セル情報に対応するセルが処理されるかどうかを判定するステップを実施し（上述の説明を参照）、処理されると判定した場合には、ＩＦ待ち行列の当該先頭セル情報をＰＦ待ち行列の１つにプッシュするステップと、最も満杯なＰＦ待ち行列の先頭セル情報をポップするステップを実施する。
【００２２】
ここで、ＰＦ待ち行列は主に、宛先ポートにあまりにも早く到着したセルを格納するために使用される。即ち、セルが宛先ポートにあまりに早く到達した場合には、セルは、並行に処理するのではなくＰＦ待ち行列に入れられ、ＰＦ待ち行列から正しい時点に抽出され、パケット再構築データベースに挿入される。
【００２３】
ここで、セルが処理されるかどうかを待ち行列の中のオープン・パケット（即ち、処理を待機しているセル）の量に従って、即ち、現在処理されているパケットの最小パケット・シーケンス番号と現在のセルのパケット・シーケンス番号の差分が事前設定された値より小さいかどうかを判定することによって、判定してもよい。事前設定された値より小さい場合には、セルを処理することを意味し、現在のセルを処理することができる。そうでない場合には、セルは処理されず、セルを遅延させる、即ち、ＰＦ待ち行列に入れてもよいことを意味する。例えば、待ち行列の中のオープン・パケットの最大数が１６である場合には、現在処理されているパケットの最小パケット・シーケンス番号は１０２４であり、パケット・シーケンス番号が１０２４未満であるパケットのセルはすぐ破棄され、パケット・シーケンス番号が１０２４以上でありかつ「１０２４＋１６」以下であるパケットのセルは処理される。例えば、セルがタイムアウトしておらず、当該セルのパケット・シーケンス番号がパケット再構築データベースの同一ソースの最大パケット・シーケンス番号より小さいとさらに判定されたときには、セルをパケット再構築データベースに挿入し、シーケンス番号が「１０２４＋１６」より大きいパケットのセルはバッファされる、即ち、ＰＦ待ち行列に挿入される。
【００２４】
即ち、「ＩＦ待ち行列の中のセル情報をＳＩＤ、パケット・シーケンス番号および遅延ＦＩＦＯ（ＰＦ）待ち行列の状態に従って処理し、当該セル情報を当該セル再構築データベースに挿入すべきかどうかを判定する」ステップは、特に、各ＰＦ待ち行列の深さが事前設定閾値より小さい場合には、ＩＦ待ち行列の先頭セル情報に対応するセルのパケット・シーケンス番号と現在処理されているパケットの最小パケット・シーケンス番号の差分が第４の閾値より小さいかどうかを判定し、小さい場合には、ＩＦ待ち行列の当該先頭セル情報をポップし、小さくない場合には、ＩＦ待ち行列の当該先頭セル情報をＰＦ待ち行列の１つにプッシュし、最も満杯なＰＦ待ち行列の先頭セル情報をポップし、ＩＦ待ち行列のポップされた先頭セル情報に対応するセルまたはＰＦ待ち行列のポップされた先頭セル情報に対応するセルがタイムアウトしたかどうかを判定し、タイムアウトした場合には、当該セル情報に対応するセルと当該セルが属するパケットを再利用し、タイムアウトしていない場合には、当該セルのパケット・シーケンス番号がパケット再構築データベースの同一ソースの最大オープン・パケット・シーケンス番号より小さいとき、当該セル情報をパケット再構築データベースに挿入し、当該セルのパケット・シーケンス番号がパケット再構築データベースの同一ソースの最大オープン・パケット・シーケンス番号より大きいとき、当該セル情報をＰＦ待ち行列の１つに挿入するステップを含んでもよい。
【００２５】
特定のＰＦ待ち行列の深さが当該事前設定閾値より大きい場合には、オーバフローＰＦ待ち行列の先頭セル情報に対応するセルのパケット・シーケンス番号と現在処理されているパケットの最小パケット・シーケンス番号の差分が第５の閾値より小さいかどうかを判定し、小さい場合には、当該オーバフローＰＦ待ち行列の先頭セル情報に対応するセルを再利用し、ＩＦ待ち行列の先頭セル情報に対応するセルのパケット・シーケンス番号と現在処理されているパケットの最小パケット・シーケンス番号の差分が上記第４の閾値より小さいかどうかを判定するステップを実施し、小さくない場合には、ＩＦ待ち行列の当該先頭セル情報をＰＦ待ち行列の１つにプッシュするステップと、最も満杯なＰＦ待ち行列の先頭セル情報をポップするステップとを実施する。ここで、上記第４の閾値と上記第５の閾値を、実際の適用の要件に従って設定してもよい。
【００２６】
ユニキャストまたはマルチキャストの何れかが、再構築と再順序付けを待機している幾つかのパケットを夫々が有する多数のパケット順序付け待ち行列を含んでもよい（再構築と再順序付けを待機しているこれらのパケットはオープン・パケットである）。ここで、ユニキャストは、パケットのサービス・クラス（ＣｏＳ）とＳＩＤ（Ｓｏｕｒｃｅ  Ｉｄｅｎｔｉｆｉｃａｔｉｏｎ）に従ってパケット順序付け待ち行列を分類してもよい。即ち、パケットの異なるＣｏＳのセルとＳＩＤは様々なパケット順序付け待ち行列に入れられる。マルチキャストは、パケットのサービス・クラス（ＣｏＳ）、ＳＩＤ（Ｓｏｕｒｃｅ  Ｉｄｅｎｔｉｆｉｃａｔｉｏｎ）およびマルチキャスト・グループＩＤ（ＭＧＩＤ）に従ってパケット順序付け待ち行列を分類してもよい。ここで、各パケット順序付け待ち行列は、順序付けすべきパケットを収容するためのデータの役割を担うパケット記述子配列（即ち、事前に割り当てたメモリ）を有する。パケット記述子配列の中の各エントリは実際にはパケットが属するセル記述子を指すポインタであり、当該セル記述子は次のセルを指すポインタも有する。したがって、１つのパケットに属する全てのセルはリンク・リストを構成し、パケット配列の最初のポインタから開始して全てのセルを訪問することができる。ここで、パケット記述子配列のサイズ（即ち、収容できるオープン・パケットの量）は動的に調整可能である。例えば、サイズが異なる幾つかのパケット記述子配列を事前に割り当ててもよい。順序付け待ち行列のオープン・パケットの数が増加し、パケット記述子配列がオーバフローした場合には、より大きなパケット記述子配列を使用して元の小さなパケット記述子配列を置き換えてもよい。
【００２７】
ユニキャストに対しては、パケット再構築データベースはソース記述子メモリ（ＳＤＭ）とソース待ち行列メモリ（ＳＱＭ）を備えてもよい。ＳＤＭは、ソース記述子を格納し、パケットのＣｏＳとソース・ポート番号をインデックスとする、即ち、｛パケットのＣｏＳ、ソース・ポート番号｝をインデックスとして使用するように構成され、ＳＱＭは、当該ソース記述子に対応するソース待ち行列を格納するように構成され、ＳＱＭは、当該再順序パケット配列バッファを指すポインタを含む。当該バッファは、順序付けを待機しているセルのパケット記述子を格納し、当該パケット記述子の各々は当該パケットに属する最後に受信したセルのセル記述子を指す。
【００２８】
ここで、当該再順序パケット配列バッファを、動的パケット記述子配列により構築してもよく、当該バッファが特にＮ個のクラスの様々な容量のメモリ・ブロックを含んでもよい。ここで、Ｎは正の整数である。例えば、Ｎ＝３であるとき、Ｘをパケット記述子の幅として、容量が（３２＊Ｘ）、（１２８＊Ｘ）および（５１２＊Ｘ）である３つのクラスのメモリ・ブロックを保護してもよい。
【００２９】
マルチキャストに対しては、パケット再構築データベースがＭＧＩＤ記述子メモリとＭＧＩＤ待ち行列メモリを備えてもよい。ＭＧＩＤ記述子メモリは、ＭＧＩＤ記述子を格納し、パケットのＣｏＳ、ＭＧＩＤおよびソース・ポート番号をインデックスとし、例えば、｛パケットのＣｏＳ、ＭＧＩＤ、ソース・ポート番号｝のハッシュ値をインデックスとして使用するように構成され、ＭＧＩＤ待ち行列メモリは、当該ＭＧＩＤ記述子に対応するＭＧＩＤ待ち行列を格納するように構成され、ＭＧＩＤ待ち行列メモリは、当該再順序パケット配列バッファを指すポインタを備えてもよい。当該バッファは、順序付けを待機しているセルのパケット記述子を格納し、当該パケット記述子の各々は当該パケットに属する最後に受信したセルのセル記述子を指す。
【００３０】
ここで、当該再順序パケット配列バッファは動的パケット記述子配列であり、Ｍ個のクラスの様々な容量のメモリ・ブロックを含み、Ｍは正の整数である。これはユニキャストと同様であり、ここでは省略する。
【００３１】
｛パケットのＣｏＳ、ＭＧＩＤ、ソース・ポート番号｝で表される空間は非常に大きいので、｛パケットのＣｏＳ、ＭＧＩＤ、ソース・ポート番号｝のインデックスごとに対応するパケット順序付け待ち行列を生成することは非常に困難である。その結果、リソースを節約するために、ＭＧＩＤ記述子メモリとＭＧＩＤ待ち行列メモリがハッシュ関数をサポートできるようにしてもよい。即ち、各プロセス（例えば、ＩＦ待ち行列、ＰＦ待ち行列、完全待ち行列、再順序パケット配列バッファおよびセル順序付けバッファ）が、当該ハッシュ関数を介して、当該ＭＧＩＤ記述子メモリと当該ＭＧＩＤ待ち行列メモリにアクセスしてもよい。ここで、当該ハッシュ関数を複数のハッシュ・バケットとして構築してもよい。所謂ハッシュ関数は、｛パケットのＣｏＳ、ＭＧＩＤ、ソース・ポート番号｝をより小さな空間にマップするものである。例えば、ハッシュ関数は｛パケットのＣｏＳ、ＭＧＩＤ、ソース・ポート番号｝を入力として、１つまたは複数のパケット順序付け待ち行列（即ち、複数のハッシュ・バケット）に対応するインデックス値を計算してもよい。
【００３２】
ハッシュ関数を使用するとリソース競合が生ずるおそれがあるので、フル・アソシアティブ犠牲テーブル（ＦＡＶＴ）を設けて、リソース競合が生じたとき、当該リソース競合が生じたセルを別のＭＧＩＤ待ち行列にプッシュするかまたは事前設定されたＦＡＶＴに従って破棄することができる。
【００３３】
さらに、当該ＦＡＶＴの情報量が事前設定された第１の閾値を超えたとき、現在の宛先ポートを起動して制御情報をマルチキャスト・ソースに送信し、それにより、現在の宛先ポートに送信されるマルチキャスト・データの量を削減してもよい。ここで、第１の閾値を実際の適用要件に従って設定してもよい。
【００３４】
例えば、各ハッシュ・エントリは、２つのハッシュ・バケット（即ち、２つのパケットのハッシュ順序付け待ち行列）を備える。（１、２、１２８）、（７、０、２５６）、（１１、３、５６７）等は全て１６にマップされる。即ち、これらの組合せを入力としたとき、当該ハッシュ関数の結果は１６である。（１、２、１２８）のセルが第１のパケット順序付け待ち行列を使用してもよく、（７、０、２５６）のセルが第２のパケット順序付け待ち行列を使用してもよく、（１１、３、５６７）のセルのみを到着時に破棄することができる。なぜならば、各ハッシュ・エントリが２つのパケット順序付け待ち行列しか有さないからである。勿論、（１、２、１２８）のセルの全てを順序付け待ち行列の外で上手く再構築し再順序付けした場合には、第１のパケット順序付け待ち行列は空である。この時点で、（１１、３、５６７）のセルが到着したとき、第１のパケット順序付け待ち行列を使用してもよい。ＦＡＶＴは、どのインデックス値（ＳＩＤ、ＣｏＳ、ＭＧＩＤ）がパケット順序付け待ち行列を占有するかを示し、現在の状態に従って動的に維持される。
【００３５】
１０３で、パケット・シーケンス番号に従ってパケット再構築データベースの中でセルを順序付けて正しく順序付けられたパケットを取得する。例えば、その詳細が以下のようであってもよい。
【００３６】
パケット・シーケンス番号に従って当該再順序パケット配列バッファの中でパケット記述子を順序付けし、パケット再構築データベースにおいて同一のパケット・シーケンス番号を有するセル情報をパケット記述子に対応するパケット順序付け待ち行列に入れる。例えば、パケット再構築データベースに格納されたセル情報のシーケンス番号がそれぞれ（１、１）、（２、３）、（１、３）、（２、１）、（２、４）、（１、２）および（２、２）である場合には、パケット順序付けの後、
第１のパケット順序付け待ち行列：（１、１）、（１、３）、（１、２）
第２のパケット順序付け待ち行列：（２、３）、（２、１）、（２、４）、（２、２）
となる。ここで、括弧の中で、１番目の数字はパケット・シーケンス番号であり、２番目の数字はセル・シーケンス番号である。この時点でパケットが正しく順序付けされているが、パケット内のセルは依然として乱雑な状態にあることが分かる。
【００３７】
１０４で、当該正しく順序付けられたセルが完全なセルである場合には、ステップ１０３で取得した正しく順序付けられたパケットのセルをセル・シーケンス番号に従って順序付けして正しく順序付けられたセルを取得する。完全なパケットとは、パケット内のセルが完全に受信されたことを意味する。例えば、その詳細が以下のようであってもよい。即ち、パケットが完全なパケットである場合には、ブロードキャスト・クラスのセルおよびパケットのＣｏＳに従って、当該完全なパケットのパケット記述子を対応する完全ＦＩＦＯ（ＣＦ）待ち行列に追加し、対応するセル情報を、ＣＦ待ち行列内のパケット記述子に従ってセル順序付けバッファ（セル再順序付けバッファ、完全パケットＦＩＦＯとも称する）に挿入し、セル・シーケンス番号に従って、抽出したセル情報をセル順序付けバッファの中で順序付けする。ここで、セルのブロードキャスト・クラスがユニキャストまたはマルチキャストを含んでもよい。
【００３８】
順序付けの効率を改善するために、セル順序付けバッファは、セル順序付けの最中に十分な空き空間が利用可能であることを保証する。したがって、セル順序付けバッファの空き空間が事前設定閾値より大きい、例えば、セル順序付けバッファの実際のデータ量が許容可能なデータ量の２分の１未満であるときにのみ、完全待ち行列の中のパケット記述子に従って対応するセル情報をセル順序付けバッファに挿入するように構成してもよい。
【００３９】
ここで、セル・シーケンス番号に従って、抽出したセル情報をセル順序付けバッファの中で順序付けするステップは、特に、以下のようであってもよい。即ち、セル順序付けバッファは、パケット再構築を実施するために順序付けしたセルを１つずつ読み取る読取ポインタと、セル順序付けを現在実施しているパケットの開始位置を常に指す書込ポインタを維持する。したがって、当該書込ポインタにセル・シーケンス番号を追加することによって、挿入された当該セル情報のオフセット位置を計算することができ、当該パケット内の挿入された当該セル情報の位置（即ち、パケット内の正しい位置）を当該オフセット位置に従って調節し、正しく順序付けられたセルの情報を取得する。
【００４０】
１０５で、当該正しく順序付けられたセルでパケット再構築を実施する。例えば、その詳細は以下の通りである。即ち、再構築リソースを当該正しく順序付けられたセルの情報が属するパケットに割り当て、当該セル順序付けバッファの中の正しく順序付けられたセルの情報を１つずつ読み取り、読み取ったセル情報に従って対応するセル・データを取得し、割り当てられた再構築リソースを用いてパケット再構築をセル・データに対して実施する。
【００４１】
効率を改善するために、当該正しく順序付けられたセルの情報が属するパケットを少なくとも２つの再構築リソースに割り当ててもよい。リソース節約のために、再構築リソースをリソース・プールにおいて管理し、必要なとき、即ち、再構築を行うときにのみ各ソースに割り当てる。例えば、順序付けバッファ内のセルを正しく順序付けした後、パケット再構築を要求する識別信号（例えば、ＦＩＦＯ＿ＲＤＹ信号）をパケット再構築機構に送信してもよく、パケット再構築機構は、パケット再構築を要求する識別信号を受信した後に、順序付けバッファにおいてセルのパケット再構築を開始する。
【００４２】
勿論、少なくとも２つのセル順序付けバッファが存在するとき、パケット再構築機構は、パケット再構築を要求する複数の識別信号を同時に受信してもよい。その場合、パケット再構築機構が、セル順序付けバッファを選択してパケットのＣｏＳに従うプロセスを実施してもよい。即ち、この時点で、当該正しく順序付けられたセルでパケット再構築を実施するステップが特に以下を含んでもよい。即ち、パケットのＣｏＳに従ってセル順序付けバッファを選択し、選択されたセル順序付けバッファの中の正しく順序付けられたセルの情報を１つずつ読み取り、読み取ったセル情報に従ってセル・データを抽出しパケット再構築を実施する。
【００４３】
場合によっては、リソースを節約し、効率を改善し、特定のパケットで大量の時間を無駄にすることを回避するために、パケット再構築の時間を監視し、パケット再構築がタイムアウトしたとき当該パケットを破棄する。例えば、パケットの宛先ポートに最初に到着したセルの到着時刻（例えば、当該到着時刻をローカル・タイム・スタンプでスタンプしてもよい）と現在時刻の差分が事前設定された第２の閾値より大きいかどうかを判定してもよく、大きい場合には、当該パケット再構築がタイムアウトしたかどうかを判定して当該パケットを破棄し、そうでない場合には、パケット再構築がタイムアウトしていないと判定し、パケットの再構築を続ける。
【００４４】
ここで、再構築超過時間はさらに、ファブリック・スイッチ遅延の推定時間を含んでもよい。ファブリック・スイッチ遅延を、パケット・シーケンス番号に従って推定してもよい。詳細については、先行技術を参照されたい。それらの説明はここでは省略する。次に、パケットがファブリック・スイッチ内であまりに長く遅延した場合には、待機して再構築タイムアウトとするケースで破棄するのではなく、すぐに破棄してもよい。即ち、場合によっては、正しく順序付けられたセルをパケットに再構築する前に、当該方法はさらに、ファブリック・スイッチ遅延の推定値が事前設定された第３の閾値を超過したと判定したときに、パケットを破棄するステップを含んでもよい。ここで、上記第２の閾値と第３の閾値を実際の適用要件に従って設定してもよい。
【００４５】
例えば、特定のパケット順序付け待ち行列の先頭にあるパケットは１２３のパケット・シーケンス番号を有し、当該パケット（即ち、パケット・シーケンス番号が１２３であるパケット）には未到着のセルが存在する。このケースでは、１２４のパケット・シーケンス番号を有するパケットのような後続のパケットは、その全てのセルが到着した場合であっても、再構築することはできず、パケット・シーケンス番号が１２３であるパケットが全てのセルを受信した後に処理されるか、または、パケット・シーケンス番号が１２３であるパケットがタイムアウトを待機しているときに破棄されるにすぎない。タイムアウトの待機には通常長時間が必要であるので、パケット・シーケンス番号が１２３である特定のセルがファブリック・スイッチにおいて特に長期間遅延するときには、パケット・シーケンス番号が１２３であるパケットのタイムアウトを待機する必要はないが、ファブリック・スイッチ遅延の推定値が事前設定された第３の閾値を超過するかどうかを判定する必要はある。例えば、順序付け待ち行列の中のパケット・シーケンス番号が２５６であるパケットのセルをこの時点で受信した場合、２５６と１２３の差は第３の閾値（例えば、第３の閾値は１００に設定される）より大きいので、パケット・シーケンス番号が１２３であるパケットのタイムアウトを待機する必要はなく、パケット・シーケンス番号が１２３であるパケットをすぐに破棄する。
【００４６】
さらに、効率を改善するために、上述の再順序付けおよび再構築のプロセスを複数の並列な再構築および再順序付けエンジンに分割して、様々なＣｏＳのユニキャストまたはマルチキャストのデータ・ストリームをサポートしてもよいことに留意されたい。ここで、パケットのＣｏＳは、パケット優先度に対応する。
【００４７】
本実施形態では、受信したセルをＳＩＤに従って前処理し、受信したセルがパケット再構築データベースに挿入されるかどうかを判定し、パケット・シーケンス番号およびセルのセル・シーケンス番号に従って当該データベース内のセルを直接順序付けし、最後にパケット再構築を実現する。この解決策ではソースに従ってパケットを直接再順序付けし再構築できるので、時間同期に基づいてパケットを再順序付けし再構築する先行技術と比較したとき、高性能な装置に適している。さらに、この解決策では受信したセル（即ち、再構築を待機しているパケット）を制御し管理できるので、リソースの利用率は高く、メモリと制御リソースはあまり占有されない。
【００４８】
実施形態２
以降、実施形態１に従って説明した方法を、種々の例を用いてさらに詳細に説明する。図２Ａは、パケット再構築および再順序付けのプロセスのアーキテクチャ図であり、図２Ａに示すように、主に以下のステップを含む。即ち、ステップ１で、セルが宛先ポートに到着した後に、メモリ割当てモジュールが受信したセルにロード・メモリを割り当て、前処理モジュールがＳＩＤに従ってセルのセル・データをロード・メモリに格納し、セルのセル情報をセルのＳＩＤに従って分類し、当該分類に従って、セル情報をそれぞれ異なるＩＦに格納する。例えば、図２Ａに示すように、セル情報を、ブロードキャスト・クラスに従って分類し、ユニキャスト・データである場合にはユニキャスト入力ＦＩＦＯ（ＵＩＦ）待ち行列に入れ、マルチキャスト・データの場合にはマルチキャスト入力ＦＩＦＯ（ＭＩＦ）待ち行列に入れてもよい。ここで、セル情報は、ＳＩＤ、ローカル・タイム・スタンプ、ロード・メモリのインデックス値、パケット・シーケンス番号およびセルのセル・シーケンス番号のような幾つかのセル関連の情報を含んでもよい。
【００４９】
前処理モジュールは、ＵＩＦ待ち行列およびＭＩＦ待ち行列におけるセル情報をそれぞれＳＩＤ、ローカル・タイム・スタンプおよびＰＦ待ち行列の状態に従って処理して、セル情報をパケット順序付けモジュールのパケット再構築データベースに挿入するかどうかを判定する。ここで、ＵＩＦ待ち行列とＭＩＦ待ち行列は、パケット再構築データベースにおける対応する処理モジュールを有する。例えば、図２Ｂに示すように、ＵＩＦ待ち行列はパケット再構築データベースにおける「ユニキャスト」モジュールに対応し、ＭＩＦ待ち行列はパケット再構築データベースにおける「マルチキャスト」モジュールに対応する。
【００５０】
ステップ２のパケット順序付けでは、パケット順序付けモジュールが、様々なソースにおけるパケットをそれぞれ順序付けして正しく順序付けされたパケットを取得する。例えば、再順序パケット配列バッファにおけるパケット記述子をパケット・シーケンス番号に従って順序付けしてもよく、図２Ａの「ＣｏＳ０、ＣｏＳ１、ＣｏＳ２」を参照すると、パケット再構築データベースにおいて同じパケット・シーケンス番号を有するセルを同じパケット順序付け待ち行列に入れる。図２Ａでは、ＣｏＳ０、ＣｏＳ１およびＣｏＳ２は、それぞれ、異なるパケットのＣｏＳのパケット順序付け待ち行列を表す。このケースでは、パケットは正しく順序付けされるが、パケット内のセルは依然として乱雑な状態にある。即ち、ＣｏＳ０、ＣｏＳ１およびＣｏＳ２は正しく順序付けられているが、その中のセルは依然として乱雑な状態にある。
【００５１】
ステップ３のセル順序付けでは、セル順序付けモジュールは様々な完全なパケットの中のセルをそれぞれ順序付けて、正しく順序付けられたセルを取得する。ここで、完全なパケットとは、その中の全てのセルが受信されたことを示す。
【００５２】
ステップ４のパケット再構築では、パケット再構築モジュールは正しく再構築されたセルを完全なパケットに再構築する。図２Ａに示すように、この時点で、メモリ割当ユニットは再構築リソースをパケット再構築モジュールに割り当ててもよい。次に、図２Ａに示すように、パケット再構築モジュールは、セル順序付けモジュールの中の正しく順序付けられたセルの情報を１つずつ読み取り、読み取ったセル情報に従ってセル・データをロード・メモリから抽出して、パケットを再構築し、再構築したパケットを出力する。
【００５３】
上述の再順序付けおよび再構築プロセスをさらに複数の並列な再構築エンジンに分割して、様々なＣｏＳのユニキャストまたはマルチキャストトラフィックをサポートしてもよい。
【００５４】
ここで、ロード・メモリの設計により、パケット再構築モジュールからの読取要求が１回のクロック・サイクルで満たされることに留意されたい。パケット再構築プロセスに割り込むことはできないので、パケット再構築モジュールにはパケット全体を収容できるＦＩＦＯ待ち行列は必要でなく、２乃至４個のセルだけを収容できるＦＩＦＯ待ち行列が必要である。パケットの再構築を開始した後、別のパケットの再構築を開始する前にパケットの再構築が完了する。
【００５５】
さらに、メモリ割当ユニットを主に使用して、以下の分類のメモリ、即ち、セル記述子、パケット記述子配列、（マルチキャスト・データのための）ＭＧＩＤ待ち行列メモリを割り当てて再利用する。メモリの各分類は、割り当て可能なバッファを管理するための少なくとも１つのＦＩＦＯ待ち行列を含む。各ＦＩＦＯ待ち行列は、１つのバッファ・エントリを１つのクロック期間内に割り当てることができるものとする。
【００５６】
パケットを待ち行列から取り出した後、パケット順序付けモジュールは、パケットをパケット再利用モジュールに送信し、パケット再利用モジュールが当該パケット内のセルを１つずつセル再利用モジュールに送信する。パケットが破棄されたとき、当該パケットはパケット再利用モジュールに送信され、パケット再利用モジュールは同じ処理を実施して当該パケットを破棄する。一方、破棄されたパケットよりも小さいパケット・シーケンス番号を有し依然としてパケット再構築データベースに存在する全てのパケットも破棄される。
【００５７】
以降、ユニキャストを例としてさらに詳細な説明を行う。図２Ｂを参照すると、具体的な流れが以下を含んでもよい。
【００５８】
２０１で、ソース・ポートがパケットをセルに分割し、各セルに対して対応するパケット・シーケンス番号とセル・シーケンス番号を割り当てる。例えば、ソース・ポートで、同一の宛先ポートに向かう２つのパケットをセルに分割する。第１のパケットはシーケンス番号がそれぞれ（１、１）、（１、２）、（１、３）および（１、４）である４つのセルに分割され、第２のパケットはシーケンス番号がそれぞれ（２、１）、（２、２）、（２、３）、（２、４）および（２、５）である５つのセルに分割される。括弧では、１番目の数字はパケット・シーケンス番号であり、２番目の数字はセル・シーケンス番号である。
【００５９】
ソース・ポートで、パケット・シーケンス番号を各セルに挿入し、データ・ストリームに基づいて維持する。例えば、ユニキャスト・データの場合には、パケット・シーケンス番号が、宛先ポートとパケットのＣｏＳに従って維持される。マルチキャスト・データの場合には、パケット・シーケンス番号がＭＧＩＤおよびパケットのＣｏＳに従って維持される。
【００６０】
２０２で、ソース・ポートはファブリック・スイッチを介してセルを宛先ポートに送信する。当該セルは、ＳＩＤ、パケット・シーケンス番号およびセル・シーケンス番号を保持する。
【００６１】
２０３で、宛先ポートの前処理モジュールがセルを受信した後、受信したセルを到着のローカル・タイム・スタンプでスタンプし、メモリ割当てモジュールにより割り当てられたロード・メモリにセルのセル・データを格納し、対応するロード・メモリのインデックス値を割り当て、それに基づいて対応するセル・データをロード・メモリから取得することができる。
【００６２】
２０４で、宛先ポートの前処理モジュールがＳＩＤに従ってセルのセル情報をＵＩＦ待ち行列に挿入する。当該セル情報が、ＳＩＤ、ローカル・タイム・スタンプ、ロード・メモリのインデックス値、パケット・シーケンス番号およびセルのセル・シーケンス番号のような幾つかのセル関連の情報を含んでもよい。
【００６３】
２０５で、宛先ポートの前処理モジュールがＳＩＤ、パケット・シーケンス番号、およびＰＦ待ち行列の状態に従って、ＵＩＦ待ち行列内のセル情報を前処理して、セル情報をパケット再構築データベースに挿入するかどうかを判定する。
【００６４】
ここで、図２Ｃを参照すると、パケット再構築データベースは、ＳＤＭとＳＱＭから構成される。ＳＤＭは、各々がＳＱＭ内のソース待ち行列に対応するソース記述子を格納し、ＳＱＭは各々が再順序パケット配列バッファ内の複数のパケット記述子に対応するソース待ち行列を格納するうに構成され、ＳＱＭは、各々がパケットに属する最後に受信したセルのセル記述子を指す３２乃至５１２個のパケット記述子を収容できる再順序パケット配列バッファを指すポインタを含む。各セル記述子は、ロード・メモリ内のセル・データを指すロード・メモリのインデックス値を含む。パケット・バッファに直接アクセスしてもよく、第１のパケット・シーケンス番号を現在のパケット・シーケンス番号から差し引く（パケット・シーケンス番号−第１のパケット・シーケンス）ことによってアクセス・インデックスを計算してもよい。
【００６５】
ＳＱＭを、動的パケット記述子配列として構築してもよい。当該配列は、様々な容量のＮ個のクラスのメモリ・ブロックを含む。各ソース記述子は、かかるメモリ・ブロックを指すポインタを含み、メモリ・ブロックのクラスは必要なパケット記述子配列のサイズにより決まる。パケット記述子の挿入または削除には、或るメモリ・ブロックから別のメモリ・ブロックへの切り替えが必要となる場合がある。帯域幅を得るために、当該メモリ・ブロックは、同時読書きをサポートし、したがって、読取ポインタを維持する必要はない。なぜならば、パケットを抽出した後に、配列内のパケット記述子の位置がシフトし、読取ポインタは常に開始位置を指すからである。
【００６６】
図２Ｄを参照すると、前処理の具体的な流れは以下のようであってもよい。Ａ１では、宛先ポートの前処理モジュール（パケット準備）が、各ＰＦ待ち行列の深さが事前設定閾値より小さいかどうかを判定する。小さい場合には、ステップＡ２を実施し、そうでなければステップＡ７を実施する。ここで、特定のＰＦ待ち行列の深さが事前設定閾値より小さいとき、これは、遅延すべき多くのセルをバッファするのに十分な空間がＰＦ待ち行列にあることを意味する。当該閾値を実際の適用要件に従って設定してもよい。
【００６７】
Ａ２では、各ＰＦ待ち行列の深さが事前設定閾値より小さい場合に、宛先ポートの前処理モジュールは、ＵＩＦ待ち行列の先頭セル情報に対応するセルをローカル・タイム・スタンプに従って処理するかどうかを判定し、処理する場合には、ステップＡ３を実施し、そうでない場合にはステップＡ９を実施する。
【００６８】
Ａ３では、ＵＩＦ待ち行列の先頭セル情報に対応するセルを処理する場合には、宛先ポートの前処理モジュールはＩＦ待ち行列の先頭セル情報をポップして、ステップＡ４を実施する。
【００６９】
Ａ４では、宛先ポートの前処理モジュールが、ＩＦ待ち行列のポップされた先頭セル情報に対応するセルまたはＰＦ待ち行列のポップされた先頭セル情報に対応するセルがタイムアウトしたかどうかを判定し、タイムアウトした場合には、ステップＡ５を実施し、そうでない場合にはステップＡ１０を実施する。
【００７０】
Ａ５では、セルがタイムアウトした場合には、宛先ポートの前処理モジュールが先頭セル情報に対応するセルおよび当該セルが属するパケットを再利用し、例えば、先頭セル情報に対応するセルをセル再利用モジュールに送信し、当該セルが属するパケットをパケット再利用モジュールに送信する。ここで、セル再利用モジュールは主にセルを再利用するために使用され、パケット再利用モジュールは主にパケットを再利用するために使用される。
【００７１】
Ａ６では、どのＰＦ待ち行列の長さも事前設定閾値より短いというわけではない場合には、宛先ポートの前処理モジュールは、当該オーバフローＰＦ待ち行列の先頭セル情報に対応するセルをローカル・タイム・スタンプに従って処理するかどうかを判定し、処理する場合には、ステップＡ７を実施し、そうでない場合にはステップＡ８を実施する。ここで、オーバフローＰＦ待ち行列は事前設定閾値より大きい深さのＰＦ待ち行列を指す。
【００７２】
Ａ７では、当該オーバフローＰＦ待ち行列の先頭セル情報に対応するセルを処理しない場合には、前処理モジュールはオーバフローＰＦ待ち行列の先頭セル情報をポップし、先頭セル情報に対応するセルを再利用し、例えば、先頭セル情報に対応するセルをセル再利用モジュールに送信し、ステップＡ２に戻る。
【００７３】
Ａ８では、当該オーバフローＰＦ待ち行列の先頭セル情報に対応するセルを処理する場合には、前処理モジュールはＩＦ待ち行列の当該先頭セル情報をポップし、当該先頭セル情報をＰＦ待ち行列の１つにプッシュして、ステップＡ９を実施する。
【００７４】
Ａ９では、前処理モジュールが最も満杯なＰＦ待ち行列の先頭セル情報をポップして、ステップＡ４に戻る。
【００７５】
Ａ１０では、セルがタイムアウトしていない場合には、前処理モジュールは当該セルに対応する先頭セル情報をポップし、ＳＩＤに基づいてパケット再構築データベース内のＳＤＭを読み取り、ステップＡ１１を実施する。
【００７６】
Ａ１１では、前処理モジュールは、先頭セル情報に対応するセルのパケット・シーケンス番号がＳＤＭ内の最大オープン・パケット・シーケンス番号より大きいかどうかを判定し、大きい場合には、ステップＡ１２を実施し、そうでない場合にはステップＡ１３を実施する。Ａ１２では、前処理モジュールが先頭セル情報をＳＤＭに挿入する。Ａ１３では、前処理モジュールが先頭セル情報をＰＦ待ち行列の１つに挿入する。
【００７７】
上記の前処理の流れから分かるように、一般に前処理モジュールは、現在のオープン・パケット処理ウィンドウに配置されていないセルを、オープン・パケット処理ウィンドウが当該セルをカバーするまで遅延させる。
【００７８】
場合によっては、ＰＦ待ち行列をチェックするための監視機構を設けてもよい。長時間アクセスされていない空でないＰＦ待ち行列があることがチェックされた場合には、当該監視機構が前処理モジュールをトリガして当該ＰＦを優先的に処理する。
【００７９】
さらに、ＰＦ待ち行列の空間を十分に利用し、ＰＦ待ち行列からデータを抽出することによって生成されるバーストを回避するために、セルが必要な遅延時間に従ってＰＦ待ち行列を複数の並列な待ち行列に分割してもよい。現在のパケット再構築データベースにおける最大パケット・シーケンス番号を現在のセルのパケット・シーケンス番号から差し引くことによって、セル遅延時間を推定してもよく、差分が大きいほど、セルが必要な遅延時間が長くなる。
【００８０】
２０６では、パケット順序付けモジュールは、パケット記述子を再順序パケット配列バッファに置き、パケット・シーケンス番号に従って再順序パケット配列バッファにおいてパケット記述子を順序付けし、パケット再構築データベースにおいて同一のパケット・シーケンス番号を有するセル情報をパケット記述子に対応するパケット順序付け待ち行列に置く。この時点で、パケットは正しく順序付けられているが、その中のセルは依然として乱雑な状態にある。
【００８１】
２０７では、正しく順序付けられたセルが完全なセルである場合には、セル順序付けモジュールが、セル・シーケンス番号に従って正しく順序付けられたパケットの中のセル情報を順序付けして正しく順序付けられたセルの情報を取得する。ここで、セル順序付けモジュールを複数の同期完全待ち行列として構築してもよく、各ＣｏＳ（優先度とも称する）は、その制御論理部とデータ・バッファ待ち行列を用いて独立に動作してもよい。
【００８２】
セル順序付けモジュールは、各完全なパケットのパケット記述子をパケット順序付け待ち行列から抽出し、当該記述子をブロードキャスト・クラスおよびパケットのＣｏＳに従って対応する完全待ち行列に追加する。次に、セル順序付けモジュールは、完全待ち行列の中の当該パケット記述子に従って、対応するセル情報をセル順序付けバッファに挿入し、セル・シリアル番号に従って、抽出したセル情報をセル順序付けバッファにおいて順序付けする。
【００８３】
ここで、完全なパケットとは、パケットの全てのセルがパケット再構築データベースにより受信されたことを意味する。セル順序付けバッファは、約２０Ｋバイトの２つの巨大パケットを収容してもよい。データ量がその半分より小さいときにのみ、パケット記述子が抽出され、対応するセル情報が順序付けられる。
【００８４】
図２Ｅを参照すると、図２Ｅは、セル順序付け機構、読取ポインタ（ＲＤ＿ＰＴＲ）および書込ポインタ（ＷＲ＿ＰＴＲ）を保持するセル順序付けバッファを示す図である。書込ポインタは、常に、現在順序付けられているパケットの開始位置を指し、書込ポインタをセル・シーケンス番号に加えることによって、挿入されたセル情報のオフセット位置を計算する。パケットに対するセル情報の順序付けは、パケットのサイズがセル順序付けバッファ内の空白位置のサイズより小さくなるまで実施されない。次のパケットに対するセル情報の順序付けを完了した後、読取ポインタが現在のパケットのセル情報を１つずつ読み取り始める。ここで、図２Ｅの「ＥＯＰ」はパケット内の最後のセルを表し、「ＳＯＰ」はパケットの開始位置を表す。
【００８５】
ここで、連結セルを以下のように処理してもよい。即ち、第１のパケットを挿入したとき、第１のパケットの最後のセルのポインタを入力ＦＩＦＯに２回挿入してもよい。一方、マークをセル同期バッファ（セル順序付けバッファ）に追加して、再構築機構に対して第１のセルを抽出できないことを示してもよい。第２のセルの再構築を完了した後、データが破棄される。
【００８６】
この理由は、ソースの末端がパケットをセルに分割したとき、最後のセルは通常、データのブラック・ホールを有するからである。即ち、パケットは長さが限られているため幾つかの完全なセルに分割することはできず、最後のセルは以前の完全なセルよりあまり有効なデータを有さない。かかるセルにより、送信と処理の最中にリソースが無駄になる。最適化手段ではパケットをパケットごとにセルに分割せず、連続的なパケットをデータ・ストリームとみなし、当該データ・ストリームをセルに分割し、全てのセルが完全なデータ・セグメントを有するようにする。しかし、このケースでは、幾つかのセルは確実に以前のパケットのデータの最後のセグメントと次のパケットのデータの最初のセグメントの両方を含む。以前のパケットのデータの最後のセグメントと次のパケットのデータの最初のセグメントの両方を含むセルは、連結セルと呼ばれる。セル再順序付けの最中に、セルの属性は既知であり、「ＳＯＰ」と「ＥＯＰ」が消される。連結セルは以前のパケットのＥＯＰセルだけでなく、次のパケットのＳＯＰセルでもある。したがって、かかる連結セルを受信した後、当該セルを入力ＦＩＦＯ待ち行列に２回挿入する。一方は以前のパケットのＥＯＰセルの役割を担い、他方は次のパケットのＳＯＰセルの役割を担う。結果として、セルを再順序付けする必要があるとき、２つのセルはセル順序付けモジュールに連続的に存在する。しかし、この２つのセルの両方をパケット再構築ユニットに送信することはできない。なぜならば、この２つのセルは同じ内容を有するからである。したがって、ＥＯＰとして識別されるフラグを有する第１のセルをパケット再構築モジュールに送信することはできない。むしろ、第２のセルのパケット再順序付けが完了した後、第１のセルは破棄され、データの１つのコピーのみがパケット再構築モジュールに送信されることが保証される。パケットの再構築の準備が出来たとき、セル順序付けバッファは、パケット再構築を要求する識別信号（例えば、ＦＩＦＯ＿ＲＤＹ信号）を再構築機構に送信する。
【００８７】
（セル順序付けバッファおよび完全待ち行列を含む）セル順序付け機構が複数の並列なＦＩＦＯ待ち行列から構成され、これらのＦＩＦＯ待ち行列はパケットのＣｏＳ（優先度とも称する）とブロードキャスト・クラスに基づいて区別され、それにより順序付け機構による追加の待ち行列の要求が排除されリソースが節約されることに留意されたい。
【００８８】
２０８では、パケット再構築を要求する識別信号（例えば、ＦＩＦＯ＿ＲＤＹ信号）を受信した後、パケット再構築モジュールは、セル順序付けバッファの中の正しく順序付けられたセル情報を１つずつ読み取り、読み取ったセル情報に従って、パケット再構築に対するセル・データを抽出する。
【００８９】
パケット再構築を要求する識別信号をパケット再構築モジュールに同時に送信する複数のセル順序付けバッファが存在しうる。このケースでは、パケット再構築モジュールは、パケットのＣｏＳ（即ち、優先度）に基づいて、パケット再構築を要求する識別信号（例えば、ＦＩＦＯ＿ＲＤＹ信号）を送信した複数のセル順序付けバッファの間で調停して、正しいセル順序付けバッファを選択し、選択されたセル順序付けバッファにおいて正しく順序付けられたセルの情報を１つずつ読み取り、読み取ったセル情報（特に、セル情報の中のロード・メモリのインデックス値）に従って、セル・データをロード・メモリから抽出し、パケットを再構築してもよい。
【００９０】
以上の説明から分かるように、本実施形態では、受信したセル情報をＳＩＤに従って前処理し、受信したセルをパケット再構築データベースに挿入するかどうかを判定し、セル情報におけるパケット・シーケンス番号とセル・シーケンス番号に従って当該データベース内のセル情報を直接順序付けし、最後に、順序付けしたセル情報に従って対応するセル・データを抽出し、パケット再構築を実現する。本解決策ではソースに従ってパケットを直接再順序付けし再構築できるので、時間同期に基づいてパケットを再順序付けし再構築する先行技術と比較して高性能な装置に適している。さらに、本解決策では、受信したセル（即ち、再構築を待機しているパケット）を制御し管理できるので、リソースの利用率は高く、メモリと制御リソースはあまり占有されない。
【００９１】
実施形態３
実施形態２で説明した方法はマルチキャスト・データにも適している。マルチキャストは主に以下の点でユニキャストと異なる。即ち、ユニキャスト・パケットではＳＤＭを必要とし、｛優先度、ソース・ポート番号｝をインデックスとして使用する。マルチキャスト・パケットはＭＧＩＤ記述子メモリを必要とし、｛優先度、ＭＧＩＤ、ソース・ポート番号｝のハッシュ値をインデックスとして使用する。ここで、ＭＧＩＤとは同一の複製領域に属する１群の宛先ポートを意味する。したがって、マルチキャストでは、ユニキャストのＳＱＭがＭＧＩＤ待ち行列メモリで置き換えられている。即ち、マルチキャストに対するパケット再構築データベースは特に、以下のようであってもよい。
【００９２】
即ち、マルチキャストに対するパケット再構築データベースは、ＭＧＩＤ記述子メモリとＭＧＩＤ待ち行列メモリを備えてもよい。ＭＧＩＤ記述子メモリは、ＭＧＩＤ記述子を格納し、｛優先度、ＭＧＩＤ、ソース・ポート番号｝のハッシュ値をインデックスとするように構成され、ＭＧＩＤ待ち行列メモリはＭＧＩＤ記述子に対応するＭＧＩＤ待ち行列を格納するように構成される。ＭＧＩＤ待ち行列メモリは、再順序パケット配列バッファを指すポインタを備えてもよく、当該バッファは順序付けを待機しているセルのパケット記述子を格納し、当該パケット記述子の各々は当該パケットに属する最後に受信したセルのセル記述子を指す。ここで、ＭＧＩＤ待ち行列メモリを、Ｍを正の整数として、様々な容量のＭ個のクラスのメモリ・ブロックを含む動的パケット記述子配列として構築してもよい。各ＭＧＩＤ記述子は、かかるメモリ・ブロックを指すポインタを含み、そのクラスは、必要なパケット記述子配列のサイズにより決まる。
【００９３】
ＭＧＩＤ記述子メモリとＭＧＩＤ待ち行列メモリにアクセスするためにハッシュ関数が使用されるので、メモリの行は複数のソース（即ち、｛優先度、ＭＧＩＤ、ソース・ポート番号｝）に対応してもよいことに留意されたい。メモリの行が１つのソースに適用されるので、新たなマルチキャスト・ソースに対してリソースが適用されるとき、当該行が解放されることをチェックするという新たな要件が提供される。この問題を解決するために、これらの情報を維持するための別のメモリが必要である。
【００９４】
ハッシュ関数が使用されるので、リソース競合が生じうることにさらに留意されたい。したがって、フル・アソシアティブ犠牲テーブル（ＦＡＶＴ）を維持し、リソース競合が生じたとき、リソース競合が生じたセルを別のＭＧＩＤ待ち行列にプッシュするか、または、事前設定されたＦＡＶＴに従って破棄するようにしてもよい。ＦＡＶＴが満杯になるのを防ぐために閾値を設定してもよい。当該閾値を本実施形態では第１の閾値と称する。ＦＡＶＴにおける情報の量が第１の閾値を超えたとき、制御情報の一部をアクティブにしてソースに送信し、当該宛先ポートに送信されたマルチキャスト・データのトラフィックを削減する。
【００９５】
マルチキャストの順序付け機構および再構築機構はユニキャストのものと同じであるので、それらの説明はここでは省略する。詳細については、実施形態２を参照されたい。
【００９６】
以上の説明から分かるように、本発明の実施形態で提供するパケット再構築および再順序付けの方法は、ユニキャストおよびマルチキャストの両方に適しており、実施形態２と同じ有利な効果を奏することができる。
【００９７】
実施形態４
特定のパケットの再構築および再順序付けに大量の時間が消費されることを防ぐ（即ち、トラフィックのタイムアウトを回避する）ために、上の方法の実施形態に基づいて、セルと当該セルが属するパケットがファブリック・スイッチにおいて、または、パケット再構築の最中に、大量の時間を消費しないことをローカル・タイム・スタンプに従ってさらにチェックしてもよい。詳細は以下の通りである。
【００９８】
（Ｉ）再構築タイムアウト
パケットがパケット再構築の最中に大量の時間を消費しないことをチェックするために、各パケット記述子が、パケットの全てのセルのうち宛先ポートに最初に到着したセルの到着時刻を示す最早セル・タイム・スタンプを含むものとする。現在時刻と最早セル・タイム・スタンプの差分が事前設定された第２の閾値より大きい場合には、当該パケットを再構築タイムアウトとマークする。当該パケットがパケット記述子配列の先頭に到着したとき、パケットの全てのセルがまだ受信されていない場合であっても、当該パケットを待ち行列からポップして破棄する（パケットの他のセルの受信を待機しない）。それ以外の場合、パケットが順序付け配列の先頭に到着する前に、パケットが再構築タイムアウトしたかどうかを判定せず、以下の動作を実施する。即ち、各パケットの第１のセルを挿入したとき、パケット記述子内の最早セル・タイム・スタンプのフィールドを更新し、パケットがパケット記述子配列の先頭に到着したとき、最早セル・タイム・スタンプを、当該パケットが属するソース記述子に複製する。セルが挿入されたとき、到着したセルがどのパケットに属するかに関わらず、ソース記述子内の最早セル・タイム・スタンプをチェックする。例えば、特定のソースに到着データがないケースでは、サイレント・ソース検出（ＳＳＤ）によりかかるチェックをトリガする。タイムアウト・パケットが、処理のためにパケット再利用機構に転送される。
【００９９】
（ＩＩ）ファブリック・タイムアウト
ファブリック・スイッチ内で大量の時間を消費するパケットを、再構築タイムアウトを待機せずにすぐに破棄することができる。即ち、パケット再構築および再順序付けの方法はさらに以下を含んでもよい。即ち、ファブリック・スイッチの遅延の推定値（即ち、ファブリック・スイッチ内のパケットの送信時間）が事前設定された第３の閾値を超えたと判定したとき、宛先ポートは当該パケットを破棄する。ここで、ファブリック・スイッチ内のパケットの送信時間を、パケット・シーケンス番号に従って宛先ポートで推定してもよい。詳細については先行技術を参照されたい。それらの説明はここでは省略する。
【０１００】
以上の説明から分かるように、本実施形態は実施形態２および実施形態４と同じ有利な効果を奏するだけでなく、ファブリック・スイッチにおけるパケットの送信時間とパケット再構築時間をローカル・タイム・スタンプに従って監視し、それにより、あまりに長い遅延の発生を回避し、パケット再構築および再順序付けの効率改善を支援する。
【０１０１】
実施形態５
以上の方法をより良く実現するために、本発明の諸実施形態ではさらに、特に宛先ポートとして使用できるネットワーク装置を提供する。図３Ａを参照すると、ネットワーク装置は、受信ユニット３０１、前処理ユニット３０２、パケット順序付けユニット３０３、セル順序付けユニット３０４および再構築ユニット３０５を備える。
【０１０２】
受信ユニット３０１は、ソース・ポートが送信したセルを受信するように構成される。当該セルは、ＳＩＤ、パケット・シーケンス番号およびセル・シーケンス番号を保持し、ＳＩＤを特にソース・ポート番号として使用してもよい。前処理ユニット３０２は、受信ユニット３０１により受信したセルをＳＩＤに従って前処理して、セルをデータベースに挿入するかどうかを判定するように構成される。パケット順序付けユニット３０３は、当該パケット・シーケンス番号に従ってパケット再構築データベース内のセルを順序付けて当該正しく順序付けられたパケットを取得するように構成される。セル順序付けユニット３０４は、パケットを完全なパケットと決定した場合には、パケット順序付けユニット３０３により取得した正しく順序付けられたパケットのセルをセル・シーケンス番号に従って順序付けし、正しく順序付けられたセルを取得するように構成される。再構築ユニット３０５は、セル順序付けユニット３０４により取得された正しく順序付けられたセルに対してパケット再構築を実施するように構成される。ここで、セルはセル・データとセル情報を含んでもよい。リソースを節約するために、セル情報のみを順序付けプロセスの最中に操作し、パケット再構築を再構築ユニット３０５により実施するときだけ、対応するセル・データをセル情報に従って抽出し、再構築を実施する。
【０１０３】
図３Ｂを参照すると、前処理ユニット３０２が、データ格納サブユニット３０２１、情報挿入サブユニット３０２２および判定サブユニット３０２３を備えてもよい。
【０１０４】
データ格納サブユニット３０２１は、受信ユニット３０１により受信したセルを到着時刻のローカル・タイム・スタンプでスタンプし、当該セルのセル・データをＳＩＤに従ってロード・メモリに格納し、対応するロード・メモリのインデックス値を構成するように構成される。情報挿入サブユニット３０２２は、受信ユニット３０１により受信したセルのセル情報をＩＦ待ち行列に挿入するように構成される。セル情報は、ＳＩＤ、ローカル・タイム・スタンプ、ロード・メモリのインデックス値、パケット・シーケンス番号およびセル・シーケンス番号のような、セルの情報を含む。判定サブユニット３０２３は、ＳＩＤ、当該パケット・シーケンス番号、およびＰＦ待ち行列の状態に従って、情報挿入サブユニット３０２２によりＩＦ待ち行列に挿入されたセル情報を処理し、セル情報をパケット再構築データベースに挿入するかどうかを判定するように構成される。例えば、その詳細が以下のようであってもよい。
【０１０５】
判定サブユニット３０２３は特に、各ＰＦ待ち行列の深さが事前設定閾値より小さい場合には、ＩＦ待ち行列の先頭セル情報に対応するセルのパケット・シーケンス番号と現在処理されているパケットの最小パケット・シーケンス番号の間の差分が第４の閾値より小さいかどうかを判定し、小さい場合には、ＩＦ待ち行列の先頭セル情報をポップし、小さくない場合には、ＩＦ待ち行列の先頭セル情報をＰＦ待ち行列の１つにプッシュし、最も満杯なＰＦ待ち行列の先頭セル情報をポップし、ＩＦ待ち行列のポップされた先頭セル情報に対応するセルまたはＰＦ待ち行列のポップされた先頭セル情報に対応するセルがタイムアウトしたかどうかを判定し、タイムアウトした場合には、当該セル情報に対応するセルおよび当該セルが属するパケットを再利用し、タイムアウトしていない場合には、当該セルのパケット・シーケンス番号がパケット再構築データベースの同一ソースの最大オープン・パケット・シーケンス番号より小さいとき、当該セル情報をパケット再構築データベースに挿入し、当該セルのパケット・シーケンス番号がパケット再構築データベースの同一ソースの最大オープン・パケット・シーケンス番号より大きいとき、当該セル情報をＰＦ待ち行列の１つに挿入するように構成される。
【０１０６】
当該判定サブユニットはさらに、特定のＰＦ待ち行列の深さが事前設定閾値より大きい場合には、オーバフローＰＦ待ち行列の先頭セル情報に対応するセルのパケット・シーケンス番号と現在処理されているパケットの最小パケット・シーケンス番号の差分が第４の閾値より小さいかどうかをローカル・タイム・スタンプに従って判定し、小さい場合には、当該オーバフローＰＦ待ち行列の先頭セル情報に対応するセルを再利用し、ＩＦ待ち行列の先頭セル情報に対応するセルのパケット・シーケンス番号と現在処理されているパケットの最小パケット・シーケンス番号の差分が当該第４の閾値より小さいかどうかを判定するステップを実施し、小さくない場合には、ＩＦ待ち行列の当該先頭セル情報をＰＦ待ち行列の１つにプッシュし、最も満杯なＰＦ待ち行列の先頭セル情報をポップするステップを実施するように構成される。詳細については、実施形態１および２の前処理のフローと図２Ｄを参照されたい。
【０１０７】
具体的には、パケット再構築データベースをユニキャストとマルチキャストに対してそれぞれ設計してもよい。例えば、１つのパケット再構築データベースで、ユニキャストおよびマルチキャストに対するパケット再構築データベースをそれぞれ提供してもよい。ここで、ユニキャストに対しては、パケット再構築データベースがＳＤＭとＳＱＭを含んでもよい。ＳＤＭは、ソース記述子を格納しパケットのＣｏＳとソース・ポート番号をインデックスとする、即ち、｛パケットのＣｏＳ、ソース・ポート番号｝をインデックスとして使用するように構成され、ＳＱＭは、ソース記述子に対応するソース待ち行列を格納するように構成される。ＳＱＭは、再順序パケット配列バッファを指すポインタを含んでもよく、当該バッファは順序付けを待機しているセルのパケット記述子を格納し、当該パケット記述子の各々は当該パケットに属する最後に受信したセルのセル記述子を指す。ここで、ＳＤＭとＳＱＭは、Ｎを正の整数としてＮ個のクラスの様々な容量のメモリ・ブロックを含む動的パケット記述子配列により構築してもよい。
【０１０８】
マルチキャストに対しては、パケット再構築データベースは、ＭＧＩＤ記述子メモリとＭＧＩＤ待ち行列メモリを備える。ソースＭＧＩＤ記述子メモリは、ＭＧＩＤ記述子を格納しパケットのＣｏＳ、ＭＧＩＤ、およびソース・ポート番号をインデックスとする、例えば、｛パケットのＣｏＳ、ＭＧＩＤ、ソース・ポート番号｝のハッシュ値をインデックスとして使用するするように構成され、ＭＧＩＤ待ち行列メモリは、ＭＧＩＤ記述子に対応するＭＧＩＤ待ち行列を格納するように構成される。ＭＧＩＤ待ち行列メモリは再順序パケット配列バッファを指すポインタを含んでもよく、当該バッファは順序付けを待機しているセルのパケット記述子を格納し、当該パケット記述子の各々は当該パケットに属する最後に受信したセルのセル記述子を指す。ここで、ＭＧＩＤ記述子メモリとＭＧＩＤ待ち行列メモリは、Ｍを正の整数として、Ｍ個のクラスの様々な容量のメモリ・ブロックを含む動的パケット記述子配列である。
【０１０９】
ＭＧＩＤ記述子メモリとＭＧＩＤ待ち行列メモリはハッシュ関数をサポートする。即ち、各プロセス（例えば、ＩＦ待ち行列、ＰＦ待ち行列、完全待ち行列、再順序パケット配列バッファおよびセル順序付けバッファ）は、ハッシュ関数を介して、ＭＧＩＤ記述子メモリとＭＧＩＤ待ち行列メモリにアクセスするしてもよい。即ち、パケット順序付けユニット３０３は特に、ハッシュ関数を介して、ＭＧＩＤ記述子メモリとＭＧＩＤ待ち行列メモリにアクセスするように構成される。
【０１１０】
ここで、ハッシュ関数を複数のハッシュ・バケットとして構築してもよい。ハッシュ関数を使用することによりリソース競合が生じうるので、ＦＡＶＴを維持して、リソース競合が生じたとき、事前設定されたＦＡＶＴに従って、リソース競合を生じさせたセルを別のＭＧＩＤ待ち行列にプッシュするかまたは破棄できるようにする必要がある。そこで、図３Ｂに示すように、上記ネットワーク装置がさらに競合処理ユニット３０６を備えてもよい。
【０１１１】
競合処理ユニット３０６は、リソース競合が生じたとき、事前設定されたＦＡＶＴに従って、リソース競合が発生したセルを別のＭＧＩＤ待ち行列にプッシュするかまたは当該セルを破棄（即ち、再利用）するように構成される。具体的には、パケット順序付けユニット３０３がハッシュ関数を介してＭＧＩＤ記述子メモリとＭＧＩＤ待ち行列メモリにアクセスしたとき、リソース競合が生じた場合には、リソース競合が生じたセルを、事前設定されたＦＡＶＴに従って別のＭＧＩＤ待ち行列にプッシュするかまたは破棄する。
【０１１２】
さらに、ＦＡＶＴが満杯になることを防ぐために、閾値をさらに設定してもよい。当該閾値を本発明の実施形態では第１の閾値と称する。ＦＡＶＴにおける情報の量が第１の閾値を超えたとき、制御情報の一部をアクティブにしてソースに送信し、宛先ポートに送信されたマルチキャスト・データのトラフィックを削減する。
【０１１３】
そこで、図３Ｂに示すように、上記ネットワーク装置がさらに制御メッセージ送信ユニット３０７を備えてもよい。制御メッセージ送信ユニット３０７は、ＦＡＶＴ内の情報の量が事前設定された第１の閾値を超えたとき、宛先ポートをアクティブにして制御情報をマルチキャスト・ソースに送信して、当該宛先ポートに送信されたマルチキャスト・データのトラフィックを削減するように構成される。
【０１１４】
ここで、図３Ｂに示すように、セル順序付けユニット３０４が、エンキューイング・サブユニット３０４１、バッファリング・サブユニット３０４２および順序付けサブユニット３０４３を備えてもよい。
【０１１５】
エンキューイング・サブユニット３０４１は、パケット順序付けユニット３０２により順序付けされたパケットが完全なパケットであると判定されたとき、セルのブロードキャスト・クラスおよび優先度に従って完全なパケットのパケット記述子を対応する完全待ち行列に追加するように構成される。バッファリング・サブユニット３０４２は、完全待ち行列の中の当該パケット記述子に従って対応するセル情報を当該セル順序付けバッファに挿入するように構成される。順序付けサブユニット３０４３は、セル・シーケンス番号に従って、当該セル順序付けバッファにおいて抽出されたセル情報を順序付けするように構成される。
【０１１６】
ここで、当該セル順序付けバッファはパケット再構築のために順序付けられたセル情報を１つずつ読み取る読取ポインタと、セル順序付けが現在実施されているパケットの開始位置を常に指す書込ポインタを維持する。したがって、挿入された当該セル情報のオフセット位置を、書込ポインタをセル・シーケンス番号に追加することによって計算してもよく、当該パケット内の挿入された当該セル情報の位置がオフセット位置に従って調節され、正しく順序付けられたセルの情報が取得される。即ち、順序付けサブユニット３０４３は特に、挿入された当該セル情報のオフセット位置を、書込ポインタをセル・シーケンス番号に追加することによって計算し、パケット内の挿入された当該セル情報の位置をオフセット位置に従って調節するように構成される。
【０１１７】
ここで、図３Ｂに示すように、再構築ユニット３０５が、割当てサブユニット３０５１、読取サブユニット３０５２および再構築サブユニット３０５３を備えてもよい。
【０１１８】
割当てサブユニット３０５１は、セル順序付けユニット３０４（具体的には、順序付けサブユニット３０４３であってもよい）によって正しく順序付けされたセル情報が属するパケットを再構築リソースに割り当てるように構成される。読取サブユニット３０５２は、セル順序付けバッファの中の正しく順序付けられたセルの情報を１つずつ読み取るように構成される。再構築サブユニット３０５３は、読取サブユニット３０５２により読み取ったセル情報に従って対応するセル・データを取得し、割当てサブユニット３０５１により割り当てられた再構築リソースを用いて、取得したセル・データに対してパケット再構築を実施するように構成される。例えば、再構築サブユニット３０５３が、読取サブユニット３０５２により読み取ったセル情報に従って、データ格納サブユニット３０２１によりロード・メモリに格納されたセル・データを読み取ってもよい。さらに、効率を改善するために、正しく順序付けられたセルの情報が属するパケットを少なくとも２つの再構築リソースで割り当ててもよい。即ち、割当てサブユニット３０５１はさらに、少なくとも２つの再構築リソースを当該正しく順序付けられたセルの情報が属するパケットに割り当てるように構成される。
【０１１９】
ここで、リソースを節約するために、再構築リソースをリソース・プールで管理し、必要なとき、即ち、再構築を行うべきときにのみ各ソースに割り当てる。例えば、順序付けバッファ内のセルを正しく順序付けした後、パケット再構築を要求する識別信号（例えば、ＦＩＦＯ＿ＲＤＹ信号）をパケット再構築機構に送信してもよく、パケット再構築機構はパケット再構築を要求する識別信号を受信した後に、順序付けバッファにおいてセルのパケット再構築を開始する。
【０１２０】
勿論、少なくとも２つのセル順序付けバッファが存在するときには、パケット再構築機構が、パケット再構築を要求する複数の識別信号を同時に受信することがある。このケースでは、パケット再構築機構は、処理するセル順序付けバッファをパケットのＣｏＳに従って選択してもよい。即ち、当該再構築ユニットはさらに選択サブユニット３０５４を備えてもよい。選択サブユニット３０５４は、パケットのＣｏＳに従ってセル順序付けバッファを選択するように構成される。
【０１２１】
次に、割当てサブユニット３０５１は特に、再構築リソースを、選択サブユニット３０５４により選択されたセル順序付けバッファの中の正しく順序付けられたセルの情報が属するパケットに割り当てるように構成される。
【０１２２】
読取サブユニット３０５２は選択サブユニット３０５４により選択されたセル順序付けバッファの中の正しく順序付けられたセルの情報を１つずつ読み取るように構成される。
【０１２３】
特定のパケットの再構築および再順序付けに大量の時間が消費されることを防ぐ（即ち、トラフィックのタイムアウトを回避する）ために、セルと、当該セルが属するパケットがファブリック・スイッチにおいてまたはパケット再構築の最中に大量の時間を消費しないことをローカル・タイム・スタンプに従ってさらにチェックしてもよい。
【０１２４】
そこで、図３Ｂに示すように、上記ネットワーク装置はさらに破棄ユニットを備えてもよい。当該破棄ユニットは、パケット再構築がタイムアウトしたと判定したときにパケットを破棄するように構成される。
【０１２５】
当該破棄ユニットは特に、パケットの中の宛先ポートに最初に到着したセルの到着時刻と現在時刻の差分が事前設定された第２の閾値より大きいとき、パケット再構築がタイムアウトしたと判定するように構成される。その詳細が以下のようであってもよい。即ち、各パケット記述子は、パケットの全てのセルのうち宛先ポートに最初に到着したセルの到着時刻を示す最早セル・タイム・スタンプを含む。現在時刻と最早セル・タイム・スタンプの差分が事前設定された第２の閾値より大きい場合には、パケットを再構築タイムアウトとマークする。パケット記述子配列の先頭に到着したとき、パケットを、当該パケットの全てのセルがまだ受信されていない場合であっても、当該パケットを待ち行列からポップして破棄する（パケットの他のセルの受信を待機しない）。
【０１２６】
さらに、ファブリック・スイッチにおいてあまりに遅延したパケットをすぐに破棄することもできる。このケースでは、再構築タイムアウトを待たなくともよい。その詳細が以下のようであってもよい。即ち、受信ユニット３０１は特に、ファブリック・スイッチを介してソース・ポートにより送信されたセルを受信するように構成される。次に、上記破棄ユニットはさらに、ファブリック・スイッチの遅延の推定値が事前設定された第３の閾値を超えたと判定されたときに、パケットを破棄するように構成される。ここで、ファブリック・スイッチにおけるパケットの送信時間を、パケット・シーケンス番号に従って宛先ポートで推定することによって取得してもよい。詳細については先行技術を参照されたい。それらの説明はここでは省略する。
【０１２７】
上記第２の閾値と第３の閾値を実際の適用要件に従って設定してもよい。具体的には、上記ユニットをそれぞれ独立なエンティティとして実装してもよく、または、同一もしくは幾つかのエンティティとして実装してもよい。例えば、前処理ユニット３０２を実施形態２の前処理モジュールによって実装してもよく、パケット順序付けユニット３０３を実施形態２のパケット順序付けモジュールによって実装してもよく、セル順序付けユニット３０４を実施形態２のセル順序付けモジュールによって実装してもよく、再構築ユニット３０５を実施形態２のパケット再構築モジュールによって実装してもよく、上記破棄ユニットを実施形態２のパケット再利用モジュールと信号再利用モジュールによって実装してもよい、等である。上述のユニットの実装に関する前の実施形態を参照されたい。それらの説明はここでは省略する。
【０１２８】
以上の説明から分かるように、本実施形態におけるネットワーク装置の前処理ユニット３０２は受信したセルをＳＩＤに従って前処理して、受信したセルをパケット再構築データベースに挿入するかどうかを判定する。次に、パケット順序付けユニット３０３とセル順序付けユニット３０４がパケット・シーケンス番号およびセルのセル・シーケンス番号に従ってデータベース内のセルを直接順序付け、最後に、再構築ユニット３０５が、順序付けしたセルに従ってパケット再構築を実施する。当該解決策ではソースに従ってパケットを直接再順序付けし再構築できるので、時間同期に基づいてパケットを再順序付けし再構築する先行技術と比較して高性能な装置に適している。さらに、当該解決策は受信したセル（即ち、再構築を待機しているパケット）を制御し管理できるので、リソースの利用率は高く、メモリと制御リソースはあまり占有されない。
【０１２９】
実施形態６
そこで、本発明の諸実施形態ではさらに、ソース・ポート装置と本発明の諸実施形態により提供したネットワーク装置とを備える通信システムを提供する。当該ネットワーク装置は、宛先ポートの役割を担う（即ち、当該ネットワーク装置は宛先ポート装置とも呼ばれる）。詳細については例えば前の実施形態を参照されたい。
【０１３０】
例えば、宛先ポートの役割を担う宛先ポート装置は、ソース・ポートが送信した、ＳＩＤ、パケット・シーケンス番号およびセル・シーケンス番号を保持するセルを受信し、受信したセルをＳＩＤに従って前処理して当該セルをパケット再構築データベースに挿入するかどうかを判定し、パケット再構築データベースにおいてセルをパケット・シーケンス番号に従って順序付けして、正しく順序付けられたパケットを取得し、正しく順序付けられたセルが完全なセルである場合には、当該正しく順序付けられたパケットのセルを当該セル・シーケンス番号に従って順序付けて正しく順序付けられたセルを取得し、パケット再構築を正しく順序付けられたセルに対して実施するように構成される。ソース・ポートの役割を担うソース・ポート装置は、セルを宛先ポート装置に送信するように構成される。当該セルは、ＳＩＤ、パケット・シーケンス番号およびセル・シーケンス番号を保持する。
【０１３１】
ここで、宛先ポート装置は特に、受信したセルを到着時刻のローカル・タイム・スタンプでスタンプし、当該セルのセル・データを当該ＳＩＤに従ってロード・メモリに格納し、対応するロード・メモリのインデックス値を構成し、ＳＩＤ、ローカル・タイム・スタンプ、ロード・メモリのインデックス値、パケット・シーケンス番号およびセル・シーケンス番号を含む、セルのセル情報をＩＦ待ち行列に挿入し、ＳＩＤ、ローカル・タイム・スタンプおよびＰＦ待ち行列の状態に従ってＩＦ待ち行列の中のセル情報を処理し、セル情報をセル再構築データベースに挿入すべきかどうかを判定するするように構成される。詳細については、以前の方法の実施形態と図２Ｄを参照されたい。上述の装置の実装については以前の実施形態を参照されたい。それらの説明はここでは省略する。
【０１３２】
以上の説明から分かるように、本実施形態における通信システムの宛先ポート装置は、受信したセルをＳＩＤに従って前処理し、受信したセルをパケット再構築データベースに挿入するかどうかを判定し、パケット・シーケンス番号とセルのセル・シーケンス番号に従ってデータベースの中でセルを直接再順序付けし、最後に、パケット再構築を実現する。当該解決策ではソースに従ってパケットを直接再順序付けし再構築できるので、時間同期に基づいてパケットを再順序付けし再構築する先行技術と比較して高性能な装置に適している。さらに、当該解決策は受信したセル（即ち、再構築を待機しているパケット）を制御し管理できるので、リソースの利用率は高く、メモリと制御リソースはあまり占有されない。
【０１３３】
上述の実施形態における様々な方法を実装するためのステップの全部または一部を、コンピュータ読取可能記憶媒体に格納できるプログラムを通じて関連するハードウェアに指示することによって実現できることは当業者に理解される。記憶媒体には、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、磁気ディスク、光ディスク等を含めてもよい。
【０１３４】
以上で、本発明の諸実施形態で提供したパケットを再構築し再順序付けするための方法、装置、およびシステムを詳細に説明し、本発明の原理と実装形態を具体的な例により説明した。しかし、以上の実施形態の説明は、本発明の方法とその中心的な思想を理解するのを支援するにすぎない。一方、当業者は、本発明の思想に従って具体的な実装形態と適用範囲を変更してもよい。したがって、本明細書の内容は本発明に対する限定として解釈すべきではない。
【符号の説明】
【０１３５】
３０１  受信ユニット
３０２  前処理ユニット
３０２１  データ格納サブユニット
３０２２  情報挿入サブユニット
３０２３  判定サブユニット
３０３  パケット順序付けユニット
３０４  セル順序付けユニット
３０４１  エンキューイング・サブユニット
３０４２  バッファリング・サブユニット
３０４３  順序付けサブユニット
３０５  再構築ユニット
３０５１  割当てサブユニット
３０５２  読取りサブユニット
３０５３  再構築サブユニット
３０５４  選択サブユニット
３０６  競合処理ユニット
３０７  制御メッセージ送信ユニット
【図１】
0005863076.tif 000002
【図２Ａ】
0005863076.tif 000003
【図２Ｂ】
0005863076.tif 000004
【図２Ｃ】
0005863076.tif 000005
【図２Ｄ】
0005863076.tif 000006
【図２Ｅ】
0005863076.tif 000007
【図３Ａ】
0005863076.tif 000008
【図３Ｂ】
0005863076.tif 000009