以下、本発明の実施形態について、図面を参照して説明する。
図1は、本発明の第1の実施形態のパケット転送装置が適用される通信ネットワークの一例を示す説明図である。
パケット転送装置10Aは、2つ以上の通信経路(図1の例では、通信経路0系NW0及び通信経路1系NW1)を介して、対向のパケット転送装置10Nと接続される。この通信経路0系NW0及び通信経路1系NW1は物理回線であってもよいし、一つ以上のパケット転送装置によって構成されるネットワークであってもよい。さらに、パケット転送装置10Aは、端末70−1と接続される。
パケット転送装置10Aは、パケット転送装置10N及び端末70−1の間で、フレームの転送処理、すなわち、フレームを受信し、受信したフレームを必要に応じて加工し、そのフレームを送信する処理を実行する。具体的には、端末70−1がフレーム30をパケット転送装置10Aに出力すると、パケット転送装置10Aはフレーム送信順序情報を表すシーケンス番号32をフレーム30に付与し、そのフレーム30をコピーする。そして、パケット転送装置10Aは、フレーム30及びそのコピーを通信経路0系NW0及び通信経路1系NW1に送信する。
通信経路0系NW0及び通信経路1系NW1に接続される、パケット転送装置10A及び10Nの各インタフェースには、固有のアドレスが設定されている。パケット転送装置は、フレーム30を各通信経路に送信する際に、フレーム30が各通信経路に対応する受信側のパケット転送装置のインタフェースに到着するように、宛先アドレスを含むヘッダ33をフレーム30に付与する。
対向のパケット転送装置10Nは、複数の通信経路から受信するフレームのシーケンス番号32を監視し、シーケンス番号に欠落及び逆転が発生しないように、シーケンス番号の順にフレーム34を端末70−nに転送する。フレーム34は、パケット転送装置10Nが、受信したフレームから不要なシーケンス番号32及びヘッダ33を削除することによって生成したものである。
ここでは、端末70−1から端末70−nへの処理の流れを説明したが、逆方向の処理も全く同様に実行される。つまり、パケット転送装置10Aと10Nは全く同様の構成となる。
パケット転送装置10A及びパケット転送装置10Nは、例えば、IP(Internet Protocol)パケットをペイロードとして含むイーサネット(登録商標)フレームを転送してもよい。しかし、本発明は、任意の形式のデータを転送するデータ転送装置に適用することができる。
図2は、本発明の第1の実施形態のパケット転送装置10Nの動作の概要を示す説明図である。
具体的には、図2は、通信経路0系NW0及び通信経路1系NW1からパケット転送装置10Nがフレームを受信するタイミングの一例、及び、それらのフレームを受信したパケット転送装置10Nが実行する処理の一例を示す。図2には、それぞれが二つの通信経路に対応する二つの横軸が表示される。これらの横軸は、各通信経路を経由するフレームをパケット転送装置10Nが受信するタイミングを示し、右に表示されるフレームほど早く受信されることを意味する。
パケット転送装置10Nは、二つの通信経路、すなわち通信経路0系NW0及び通信経路1系NW1からフレームを受信している。受信するフレームには、フレームの送信順序を示すシーケンス番号(SN)が付与されている。同じシーケンス番号が付与された複数のフレームは、少なくとも、同一のペイロード405(図3参照)を含む。以下の説明において、複数のフレームの内容が同一であることは、それらのフレームが少なくとも同一のペイロード405を含むことを意味する。パケット転送装置10Nは、受信したフレームを一度バッファ(図5参照)に格納し、バッファにフレームがあれば即時読み出して端末70−nに転送する。この際、パケット転送装置10Nはシーケンス番号を監視しており、シーケンス番号に欠落及び逆転がないように、シーケンス番号の順にフレームを転送する。
図2の例では、シーケンス番号(SN):1のフレームからSN:4のフレームまでが、送信側のパケット転送装置10Aから順次送信されている。
図2には、通信経路0系NW0の転送遅延が通信経路1系NW1の転送遅延より小さい例を示す。このため、通信経路0系NW0を経由するフレームは、それと同一内容の、通信経路1系NW1を経由するフレームよりも常に先にパケット転送装置10Nに到着する。パケット転送装置10Nは、通常、通信経路0系NW0からのフレームを受信すると、そのフレームを、バッファに格納後、すぐに送信する。
図2の例では、パケット転送装置10Nは、最初に通信経路0系NW0からSN:1のフレーム301を受信する。この場合、パケット転送装置10Nは、受信したフレーム301をバッファに格納し、端末70−nに送信する。このときパケット転送装置10Nは、図1において説明したように、端末70−nに送信するフレームからシーケンス番号32及びヘッダ33を削除する。
次に、パケット転送装置10Nは、通信経路1系NW1からSN:1のフレーム311を受信する。既にフレーム301が送信されていれば、パケット転送装置10Nは、さらにフレーム311を送信することはない。
パケット転送装置10Nは、フレーム損失が発生していなければ、SN:1のフレーム301を受信した後、SN:2のフレーム302を受信するはずである。しかし、図2の例では、フレーム302が損失している。この場合、パケット転送装置10Nは、通信経路1系NW1からSN:2のフレーム312を受信し、そのフレーム312をバッファに格納し、端末70−nに送信する。
しかし、パケット転送装置10Nは、両系の転送遅延差のため、フレーム312を受信する前に通信経路0系NW0からSN:3のフレーム303を受信する場合がある。この場合、パケット転送装置10NはSN:3のフレーム303を既に受信しているにもかかわらず、通信経路1系NW1から到着する可能性のあるSN:2のフレーム312を待つ必要がある。言い換えると、パケット転送装置10Nは、受信したフレーム303をバッファに格納するが、フレーム312の受信及び送信が終了するまでフレーム303を送信することができない。このため、仮にフレーム312も損失した場合、パケット転送装置10Nは、フレーム303を正常に受信できたにもかかわらず、それを送信することができなくなる。
そこで、各通信経路において、フレームの順序は逆転しないと仮定することが考えられる。この場合、パケット転送装置10Nは、SN:2のフレーム302及びフレーム312を受信する前に、両通信経路からSN:3のフレーム303及びフレーム313を受信した時点で、SN:2のフレーム302及びフレーム312が両通信経路で損失したと判定し、SN:3のフレーム303又はフレーム313を送信することができる。
しかし、上記の制御によれば、例えば通信経路に発生した障害のため、通信経路1系NW1のSN:3のフレーム313以降のフレームがさらに損失してしまった場合、パケット転送装置10Nは、通信経路0系NW0から正常に受信したSN:3のフレーム303を送信できず、さらに、それ以降のフレーム送信が全くできなくなってしまう。
このため、本実施形態のパケット転送装置10Nは、上記のようなフレームの損失によるシーケンス番号の欠落を検出した場合、フレームの送信を一時停止する。その際、パケット転送装置10Nは、両系の転送遅延差81をタイマ(図8参照)に設定し、カウントダウンを開始する。すなわち、タイマに設定された値は、カウントダウンが開始された後、時間の経過とともに減少し、最終的に‘0’になる。そして、このタイマが’0’になった時点、又は、パケット転送装置10NがSN:2のフレームを受信した時点、又は、パケット転送装置10Nが両系からSN:3のフレームを受信した時点で、パケット転送装置10Nは、フレームの送信を再開する。
これによって、仮に図2のように1系NW1のSN:3のフレーム313が損失した場合、及び、片側の通信経路に回線障害が発生した場合にも、フレームの送信が完全に停止することなく、フレームの損失を防止することが可能となる。
なお、上記及びこれから先の説明において、フレームが損失した場合(すなわち、パケット転送装置10Nがフレームを受信できなかった場合)には、パケット転送装置10Nにフレームが到着したが、そのフレームのFCS406又はFCS417(図3及び図4参照)を検査した結果、エラーが検出された場合も含まれる。その場合、フレームが廃棄されるため、パケット転送装置10Nは、到着したフレームを転送することができない。
図3は、本発明の第1の実施形態の端末70とパケット転送装置10A及び10Nとの間の通信に使用されるフレーム40のフォーマットを示す説明図である。
すなわち、フレーム40は、図1のフレーム30及びフレーム34に相当する。
フレーム40は、宛先MACアドレス401、送信元MACアドレス402、VLANタグ403、タイプ値404、ペイロード405及びフレームチェックシーケンス(FCS)406とからなる。
宛先MACアドレス401には、フレーム40の宛先であるパケット転送装置10A、パケット転送装置10N又は端末70のインタフェース(例えば図5の入出力回線インタフェース11)のMACアドレスが設定される。
送信元MACアドレス402には、フレーム40を送信したパケット転送装置10A、パケット転送装置10N又は端末70のインタフェースのMACアドレスが設定される。
VLANタグ403は、フロー識別子となるVLAN IDの値(VID♯)を示している。
タイプ値404は、後続ヘッダの種類を示す。
宛先MACアドレス401からタイプ値404までが、MACヘッダである。
ペイロード405は、フレーム40によって伝送されるデータ(すなわちペイロード)である。ペイロード405には、上位プロトコルのパケット(例えばIPパケット)が格納されてもよい。
FCS406は、フレームのエラーを検出するための検査符号である。受信側のパケット転送装置10N等は、到着したフレームのFCS406を検査する。その結果、エラーが検出された場合、パケット転送装置10N等は、到着したフレームを破棄する。すなわち、そのフレームは損失したと判定される。
図4は、本発明の第1の実施形態の通信経路0系NW0及び通信経路1系NW1における通信に使用されるフレーム41のフォーマットを示す説明図である。
すなわち、フレーム41は、図1の例においてパケット転送装置10Aからパケット転送装置10Nに転送されるフレームに相当する。
フレーム41は、宛先MACアドレス411、送信元MACアドレス412、タイプ値413、MPLSヘッダ414、シーケンス番号415、ペイロード416及びフレームチェックシーケンス(FCS)417からなる。
宛先MACアドレス411には、フレーム41の宛先であるパケット転送装置(図1の例では、パケット転送装置10A)のインタフェースのMACアドレスが設定される。
送信元MACアドレス412には、フレーム41の送信元であるパケット転送装置(図1の例では、パケット転送装置10N)のインタフェースのMACアドレスが設定される。
タイプ値413は、後続ヘッダの種類を示す。
宛先MACアドレス411からタイプ値413までが、MACヘッダである。
MPLSヘッダ414は、フロー識別子となるラベルの値(ラベル#)を示している。
シーケンス番号415には、フロー毎のフレーム送信順序を示す連続的な整数が設定される。小さいシーケンス番号415が付与されたものほど早く送信されたフレームであることを示す。
ペイロード416には、端末70から送信されたフレーム40がそのまま格納される。
FCS417は、フレームのエラーを検出するための検査符号である。FCS417は、FCS417と同様、受信側のパケット転送装置10N等によって検査される。
図5は、本発明の第1の実施形態のパケット転送装置10Nの構成を示すブロック図である。
なお、パケット転送装置10Aの構成は、パケット転送装置10Nの構成と同様であるため、説明を省略する。
パケット転送装置10Nは、複数のネットワークインタフェースボード(NIF)10−1〜10−n、及び、これらのNIFに接続されたフレーム中継部15からなる。以下、複数のNIF10−1〜10−nに共通する説明をする場合、これらを総称してNIF10と記載する。
各NIF10は、通信ポートとなる複数の入出力回線インタフェース11−1〜11−2を備え、これらの通信ポートを介して、端末70通信経路0系NW0又は通信経路1系NW1と接続されている。以下、複数の入出力回線インタフェース11−1〜11−2に共通する説明をする場合、これらを総称して入出力回線インタフェース11と記載する。図5には二つの入出力回線インタフェース11を示すが、各NIF10は、さらに多くの入出力回線インタフェース11を備えてもよい。本実施形態における入出力回線インタフェース11は、イーサネット(登録商標)用の回線インタフェースである。
各NIF10は、入出力回線インタフェース11に接続された入力ヘッダ処理部12、及び、入力ヘッダ処理部12に接続された入力フレームバッファ制御部13を備える。さらに、各NIF10は、フレーム中継部15に接続された複数のスイッチ(SW)インタフェース14−1〜14−2、これらのSWインタフェース14−1〜14−2に接続された出力ヘッダ処理部16、及び、出力ヘッダ処理部16に接続された出力フレームバッファ制御部17を備える。以下、複数のSWインタフェース14−1〜14−2に共通する説明をする場合、これらを総称してSWインタフェース14と記載する。図5には二つのSWインタフェース14を示すが、各NIF10は、さらに多くのSWインタフェース14を備えてもよい。
ここで、SWインタフェース14−iは、入出力回線インタフェース11−iと対応しており、入出力回線インタフェース11−iが受信した入力フレームは、SWインタフェース14−iを介してフレーム中継部15に転送される。また、フレーム中継部15からSWインタフェース14−iに振り分けられた出力フレームは、入出力回線インタフェース11−iを介して、出力回線に送信される。
なお、図5の例では、iは1又は2のいずれかである。例えば、入出力回線インタフェース11−1が受信した入力フレームは、SWインタフェース14−1を介してフレーム中継部15に転送される。フレーム中継部15からSWインタフェース14−1に振り分けられた出力フレームは、入出力回線インタフェース11−1を介して、出力回線に送信される。一方、入出力回線インタフェース11−2が受信した入力フレームは、SWインタフェース14−2を介してフレーム中継部15に転送される。フレーム中継部15からSWインタフェース14−2に振り分けられた出力フレームは、入出力回線インタフェース11−2を介して、出力回線に送信される。このように、SWインタフェース14と入出力回線インタフェース11は1対1に対応付けられる。
図1の例のように、端末70−1から送信されたフレームがパケット転送装置10A及び。パケット転送装置10Nを順次経由して端末70−nに到達する場合、パケット転送装置10Aに接続された出力回線は、通信経路0系NW0及び通信経路0系NW0である。パケット転送装置10Nに接続された出力回線は、端末70−nに至る回線である。
例えば、図1に示すパケット転送装置10Aは少なくとも三つの入出力回線インタフェース11を備え、それらのうち一つは端末70−1に、別の一つは通信経路0系NW0に、さらに別の一つは通信経路1系NW1に接続される。端末70−1に接続される入出力回線インタフェース11は、二つの通信経路に接続される二つの入出力回線インタフェース11とは異なるNIF10に属する。このため、パケット転送装置10Aが端末70−1から受信したフレームは、それを受信したNIF10から、フレーム中継部15を介して、二つの通信経路に接続されたNIF10に転送される。転送されたフレームは、二つの通信経路に接続されたNIF10の入出力回線インタフェース11から、二つの通信経路に送信される。
入出力回線インタフェース11−iは、入力回線からフレーム40又は41を受信すると、受信フレームに、図6に示す装置内ヘッダ42を付加する。
図1の例において、パケット転送装置10Aに接続された入力回線は、端末70−1からのフレーム30が通る回線である。パケット転送装置10Nに接続された入力回線は、通信経路0系NW0及び通信経路0系NW0である。
各NIF10は、出力フレームバッファ18、設定レジスタ19、ヘッダ処理テーブル20、待ち時間保持テーブル21、コピー作成テーブル22、送信シーケンス番号(SN)テーブル23及びヘッダ変換テーブル24をさらに含む。入力フレームバッファ制御部13は、入力フレームバッファ136を含む。設定レジスタ19及び各バッファは、各NIF10に設けられた記憶領域内に確保された所定の領域であってもよい。各テーブルは、それぞれ、各NIFに設けられた記憶領域内に確保された所定の領域に保持されてもよい。設定レジスタ19及び各テーブルについては後述する。
図6は、本発明の第1の実施形態の入出力回線インタフェース11によって付加される装置内ヘッダ42の説明図である。
装置内ヘッダ42は、入力ポートID421、出力ネットワークインタフェースボード識別子(NIF ID)427、出力ポートID422、フローID423、シーケンス番号SNnow424、コピービット425及びフレーム長426を示す複数のフィールドからなる。これらのうち、出力NIF ID427及び出力ポートID422は、内部ルーティング情報として使用される。フレーム中継部15は、これらの内部ルーティング情報に従って、入力フレームを特定のNIF10の特定のSWインタフェース14に転送する。
入出力回線インタフェース11−iが入力フレームに装置内ヘッダ42を付加した時点で、出力NIF ID427、出力ポートID422、フローID423、シーケンス番号SNnow424及びコピービット425の各フィールドは空欄となっている。これらのフィールドには、入力ヘッダ処理部12によって有効値が設定される。
入力ヘッダ処理部12は、ヘッダ処理テーブル20(図7)を参照して、各入力フレームの装置内ヘッダ42に出力NIF ID427、出力ポートID422、フローID423及びコピービット425の値を設定する。さらに、入力ヘッダ処理部12は、入力フレームのMACヘッダを解析し、受信したフレームにシーケンス番号415が付与されていれば、そのシーケンス番号415と同じ値をシーケンス番号SNnow424として設定する。
図7は、本発明の第1の実施形態のヘッダ処理テーブル20の説明図である。
ヘッダ処理テーブル20は、図7の(A)及び(B)に示すように、二つのテーブル、すなわちヘッダ処理テーブル20A及びヘッダ処理テーブル20Bからなる。
ヘッダ処理テーブル20Aは、VLAN ID201を検索キーとして、MPLSラベル202、出力NIF ID208、出力ポートID203、フローID204、送信元MACアドレス205、宛先MACアドレス206及びコピーフラグ207を含むテーブルエントリを検索するためのものである。
送信元MACアドレス205は、出力ポートID203によって識別される入出力回線インタフェース11−iに付与されたMACアドレスである。
宛先MACアドレス206は、上記の入出力回線インタフェース11−iを介して接続された、フレームの宛先となるパケット転送装置のMACアドレスを示している。
コピーフラグ207は、端末70から受信した入力フレームを複数の経路(すなわち通信経路0系NW0及び通信経路1系NW1)に送信する必要があるか否か、つまり、フレームのコピーを作成する必要があるか否かを示す。図7の例では、コピーフラグ207の値‘0’は、コピーの作成が不要であることを示し、値‘1’は、コピーの作成が必要であることを示す。
一方、ヘッダ処理テーブル20Bは、MPLSラベル202を検索キーとして、VLAN ID201、出力NIF ID208、出力ポートID203、フローID204、送信元MACアドレス205及び宛先MACアドレス206を含むテーブルエントリを検索するためのものである。
送信元MACアドレス205は、出力ポートID203によって識別される入出力回線インタフェース11−iに付与されたMACアドレスであり、上記入出力回線インタフェース11−iを介して接続された、フレームの宛先となる端末のMACアドレスを示している。
入力フレームが、図3に示したフレームフォーマットをもつ端末70からのフレーム40である場合、入力ヘッダ処理部12は、ヘッダ処理テーブル20Aから、入力フレームのVLANタグ403が示すVIDの値(VID♯)がVLAN ID201に格納されたテーブルエントリを検索する。そして、入力ヘッダ処理部12は、検索されたテーブルエントリが示す値を含むヘッダを入力フレーム40に新たに付与することによって、入力フレームのフォーマットを図4に示したフレームフォーマットに変換する。この時、変換前の入力フレームの先頭に付与されている内部ヘッダ42は変換の対象外であり、内部ヘッダはフレームの先頭に付与されたままである。具体的には、入力ヘッダ処理部12は、検索されたテーブルエントリが示すMPLSラベル202、送信元MACアドレス205及び宛先MACアドレス206の値を、それぞれ、MPLSヘッダ414、送信元MACアドレス412及び宛先MACアドレス411として設定する。この時、シーケンス番号415フィールドは空欄となっており、入力フレームバッファ制御部13によって有効値が設定される。
さらに、入力ヘッダ処理部12は、上記のヘッダ処理テーブル20Aから検索されたテーブルエントリが示す出力NIF ID208、出力ポートID203、フローID204及びコピーフラグ207の値を、それぞれ、装置内ヘッダ42の出力NIF ID427、出力ポートID422、フローID423及びコピービット425に設定する。そして、入力ヘッダ処理部12は、装置内ヘッダ42が付与された入力フレームを入力フレームバッファ制御部13に転送する。
入力フレームが、図4に示したフレームフォーマットをもつ、通信経路0系NW0又は通信経路1系NW1から受信したフレーム41である場合、入力ヘッダ処理部12は、ヘッダ処理テーブル20Bから、入力フレームのMPLSヘッダ414が示すMPLSラベルの値(ラベル♯)がMPLSラベル202に格納されたテーブルエントリを検索する。そして、入力ヘッダ処理部12は、検索されたテーブルエントリが示す値によって入力フレームのヘッダを書き換える。具体的には、入力ヘッダ処理部12は、検索されたテーブルエントリが示すVLAN ID201、送信元MACアドレス205及び宛先MACアドレス206の値を、それぞれ、VLANタグ403、送信元MACアドレス402及び宛先MACアドレス401に設定する。その結果、入力フレームのフォーマットが、図3に示したフレームフォーマットに変換される。
さらに、入力ヘッダ処理部12は、図3に示すフレームフォーマットに変換された入力フレームに、装置内ヘッダ42を付与する。入力ヘッダ処理部12は、上記のヘッダ処理テーブル20Bから検索されたテーブルエントリが示す出力NIF ID208、出力ポートID203、フローID204及びコピーフラグ207の値を、それぞれ、装置内ヘッダ42の出力NIF ID427、出力ポートID422、フローID423及びコピービット425に設定する。さらに、入力ヘッダ処理部12は、受信したフレームのシーケンス番号415の値を装置内ヘッダ42のシーケンス番号SNnow424に設定し、その装置内ヘッダ42が付与された入力フレームを入力フレームバッファ制御部13に転送する。
再び図5を参照する。
入力フレームバッファ制御部13は、入力ヘッダ処理部12からフレームを受信すると、NIF10毎に設定されている設定レジスタ19の動作モードに従って、受信したフレームを入力フレームとして入力フレームバッファ136に格納する。設定レジスタ19の動作モード及びその動作モードに従う処理については、後で図9を参照して説明する。さらに、入力フレームバッファ制御部13は、設定レジスタ19に設定された動作モードに従って、入力フレームバッファ136に蓄積されたフレームを読み出して、各フレームをその装置内ヘッダが示す入力ポートID421と対応するSWインタフェース14に振り分ける。
この設定レジスタ19に設定されている動作モードは、当該NIF10の入力ポート(すなわち、フレームを受信する入出力回線インタフェース11)が端末70に接続されているか、又は、通信経路0系NW0及び通信経路1系NW1の一方に接続されているかに依存して、入力フレームバッファ制御部13の処理を変更するために参照される。
入力ポートが端末70に接続されている場合、設定レジスタ19には、動作モードとして「端末接続モード」が設定される。この場合、入力フレームバッファ制御部13は、入力フレームをコピーして、複数の通信経路に複数のフレーム(すなわちオリジナルの入力フレーム及びそのコピー)を送信する。
一方、入力ポートが通信経路0系NW0及び通信経路1系NW1に接続されている場合、設定レジスタ19には、動作モードとして「通信経路接続モード」が設定される。この場合、入力フレームバッファ制御部13は、入力フレームのシーケンス番号を監視する。そして、フレームの損失を検出した場合、入力フレームバッファ制御部13は、フレームの送信を一時停止し、片側の通信経路で損失したフレームが、もう一方の通信経路から到着することを待つ。その後、フレーム送信再開イベントを検知すると、入力フレームバッファ制御部13は、フレーム送信を再開し、通常動作に復帰する。これらの各動作モードにおける処理の詳細は後述する。
図1の例に示すように、端末70−1から送信されたフレームがパケット転送装置10A、通信経路0系NW0又は通信経路1系NW1、及びパケット転送装置10Nを順次通過して端末70−nに到達する場合、パケット転送装置10Aの複数のNIF10のうち、端末70−1と接続されたNIF10の入出力回線インタフェース11が入力ポートである。また、パケット転送装置10Nの複数のNIF10のうち、通信経路0系NW0に接続されたNIF10の入出力回線インタフェース11、及び、通信経路1系NW1に接続されたNIF10の入出力回線インタフェース11が入力ポートである。
フレーム中継部15は、各NIF10のSWインタフェース14−1〜14−2から入力フレームを受け取り、その入力フレームを、その装置内ヘッダが示す出力NIF ID427及び出力ポートID422によって識別されるNIF10のSWインタフェース14−iに、出力フレームとして転送する。
各SWインタフェース14が受信した出力フレームは、次々と出力ヘッダ処理部16に供給される。本実施形態では、入力ヘッダ処理部12が、ヘッダ処理テーブル20を参照して、入力フレームから出力フレームへのフォーマット変換を実行する。しかし、入力ヘッダ処理部12の代わりに出力ヘッダ処理部16がヘッダ変換テーブル24を参照してフォーマット変換を実行してもよい。この場合、ヘッダ変換テーブル24は、ヘッダ変換に必要な情報(例えば、ヘッダ処理テーブル20と同様の情報)を保持する。入力ヘッダ処理部12がフォーマット変換を実行した場合、出力ヘッダ処理部16は、SWインタフェース14から受信した出力フレームをそのまま出力フレームバッファ制御部17に送信する。出力フレームバッファ制御部17は、出力フレームを出力フレームバッファ18に蓄積する。
出力フレームバッファ制御部17は、蓄積された出力フレームを出力フレームバッファ18から読み出し、その出力フレームの装置内ヘッダ42の出力ポートID422と対応する入出力回線インタフェース11にその出力フレームを転送する。入出力回線インタフェース11は、受信した出力フレームから装置内ヘッダ42を除去し、図3又は図4に示したフォーマットの出力フレームを出力回線に送信する。
図8は、本発明の第1の実施形態の入力フレームバッファ制御部13の構成を示すブロック図である。
入力フレームバッファ制御部13は、各フローID用のバッファ制御部131−1〜131−nと、これらの各フローID用バッファ制御部131−1〜131−nに接続されたスケジューリング部132と、フローID用バッファ制御部131−1〜131−nに接続されたフレーム振分け部133とからなる。以下、各フローID用バッファ制御部131−1〜131−nに共通する説明をする場合、これらを総称して各フローID用バッファ制御部131と記載する。
図1には、説明を容易にするため、一つのフローがネットワークを通過する例を示している。しかし、実際には、図1のネットワークは、複数のフローを処理することができる。本実施の形態の入力フレームバッファ制御部13は、図8に示すように、複数のフローを処理するために、それぞれが各フローに割り当てられる複数のバッファ制御部131を備える。各フローID用バッファ制御部131は、それが割り当てられたフローのフレームのみを処理する。例えば、フローID#0用バッファ制御部131−1は、フローIDが‘#0’であるフローのフレームのみを処理する。しかし、本発明は、一つのバッファ制御部131が複数のフローのフレームを処理する場合にも適用することができる。
各フローID用バッファ制御部131は、バッファ書込み処理部134、バッファ読出し処理部135及び入力フレームバッファ136を備える。
さらに、各フローID用バッファ制御部131は、フレーム格納フラグ13A、読出しカウンタ13B、フローID13C、残フレームカウンタ13D、読出しタイマ13E及び書込みカウンタ13Fを保持する。これらは、パケット転送装置10N等が備える記憶領域に保持されてもよい。
フレーム格納フラグ13Aは、まだ送信要求されていないフレームが入力フレームバッファ136に格納されているか否かを示すフラグである。
読出しカウンタ13Bは、入力フレームバッファ136の読出しアドレスとして使用される値を保持するカウンタである。
フローID13Cには、各フローID用バッファ制御部131が処理するフローの識別子が保持される。この値は、ハードウェアに固定された値である。例えば、フローID‘#0’によって識別されるフローを処理するフローID#0用バッファ制御部131−1が保持するフローID13Cの値は、‘#0’である。フローID13Cは、パケット転送装置10N等が備える不揮発性の記憶領域に保持されてもよい。
残フレームカウンタ13Dは、入力フレームバッファ136に蓄積された、まだ送信要求されていないフレームの数を示す。
読出しタイマ13Eは、シーケンス番号の欠落が発生した場合に、フレーム送信を再開するまでの時間を計測するために使用される。
書込みカウンタ13Fは、入力フレームバッファ136への書込みアドレスとして使用される値を保持するカウンタである。
バッファ書込み処理部134は、入力ヘッダ処理部12からフレームを受信すると、受信したフレームの装置内ヘッダ42のフローID423を参照する。フローID423が、自バッファ制御部131が割り当てられたフローの識別子でない場合、バッファ書込み処理部134は、受信したフレームを破棄する。フローID423が、自バッファ制御部131が割り当てられたフローの識別子である場合、バッファ書込み処理部134は、受信したフレームを対象として、設定レジスタ19の動作モードに従ってバッファ書込み処理S100を実行する。その結果、受信したフレームが順次バッファ136に格納される。これらの処理の詳細は、後で図9等を参照して説明する。
例えば、フローID#0用バッファ制御部131−1は、識別子‘#0’によって識別されるフローの処理のために割り当てられたものである。フローID#0用バッファ制御部131−1のバッファ書込み処理部134は、受信したフレームに設定されたフローID423を参照する。フローID423の値が‘#0’である場合、その識別子は、自バッファ制御部131(すなわちフローID#0用バッファ制御部131−1)が割り当てられたフローの識別子である。この場合、バッファ書込み処理部134は、受信したフレームを対象としてバッファ書込み処理S100を実行し、受信したフレームをバッファ136に格納する。
バッファ読出し処理部135は、設定レジスタ19の動作モードに従ってフレーム送信要求処理S400を実行する。その結果自バッファ制御部131が割り当てられたフローのID情報を含む送信要求がスケジューリング部132に送信される。この処理の詳細は、後で図13等を参照して説明する。
上記送信要求を受信したスケジューリング部132は、送信要求を送信要求格納FIFO137に一旦格納する。スケジューリング部132は、送信要求格納FIFO137から順次送信要求を読み出す。そして、スケジューリング部132は、読み出された送信要求の送信元であるフローID用バッファ制御部131に対して、送信許可を送信する。
FIFO137は、スケジューリング部132によって管理される記憶領域である。FIFO137は、入力フレームバッファ136と同様、各NIF10に設けられた記憶領域内に確保された所定の領域であってもよい。
上記送信許可を受信したバッファ読出し処理部135は、入力フレームバッファ136からフレームを読み出し、フレーム振分け部133に出力する。
フレーム振分け部133は、バッファ読出し処理部135からフレームを受信すると、装置内ヘッダ42の中の入力ポートID421を参照し、入力ポートID421に対応するSWインタフェース14を選択し、選択されたSWインタフェース14にフレームを転送する。例えば、図5の例に示すように入出力回線インタフェース11−1がSWインタフェース14−1に対応する場合において、受信したフレームの入力ポートID421の入力ポートID421の値が‘ポート#0’(すなわち、入出力回線インタフェース11−1の識別子)である場合、フレーム振分け部133は、入出力回線インタフェース11−1に対応するSWインタフェース14−1にフレームを転送する。
図9は、本発明の第1の実施形態のバッファ書込み処理部134が実行するバッファ書込み処理S100のフローチャートである。
バッファ書込み処理部134は、入力ヘッダ処理部12から入力フレームを受信すると、受信した入力フレームの装置内ヘッダ42から入力ポートID421、フローID423、シーケンス番号SNnow424及びフレーム長426の値を取得する(S101)。
次に、バッファ書込み処理部134は、取得したフローID423の値と、各フロー用バッファ制御部131が保持している、ハードウェアに固定されたフローID13Cとを比較する(S102)。
S102の比較の結果、上記の二つのフローIDが一致していると判定された場合、自バッファ制御部131(すなわち、図9に示す処理を実行しているバッファ書込み処理部134が属するバッファ制御部131)は、受信したフレームが属するフローを処理するために割り当てられたものである。この場合、バッファ書込み処理部134は、設定レジスタ19の動作モードを確認する(S103)。
具体的には、設定レジスタの値が‘0’であれば端末接続モード、‘1’であれば通信経路接続モードであると判定される。
S103の確認の結果、動作モードが通信経路接続モードである場合、バッファ書込み処理部134は、図10に示すシーケンス番号監視受信処理S200の処理を実行し、終了する(S104)。一方、端末接続モードである場合、バッファ書込み処理部134は、図11に示すユーザデータ受信処理S300の処理を実行し、バッファ書込み処理を終了する(S104)。
一方、上記S102において二つのフローIDが一致していない場合、自バッファ制御部131は、受信したフレームが属するフローを処理するために割り当てられたものでない。この場合、バッファ書込み処理部134は、受信したフレームを取り込まないで、バッファ書込み処理を終了する(S104)。すなわち、この場合、バッファ書込み処理部134は、受信したフレームに対してシーケンス番号監視受信処理S200及びユーザデータ受信処理S300のいずれの処理も実行しない。
図10は、本発明の第1の実施形態のバッファ書込み処理部134が実行するシーケンス番号監視受信処理S200のフローチャートである。
図10に示すシーケンス番号監視受信処理S200が開始されると、バッファ書込み処理部134は、受信したフレームの装置内ヘッダ42から取得したシーケンス番号SNnow424と、各フロー用バッファ制御部131が保持している読出しカウンタ13Bの値とを比較する(S201)。
読出しカウンタ13Bは、入力フレームバッファ136の読出しアドレスを示している。より詳細には、読出しカウンタ13Bは、次に送信要求(図14のS505参照)されるべきフレームが格納されている入力フレームバッファ136のアドレスを示す。すなわち、読出しカウンタ13Bは、最後に送信要求されたフレームが格納されている入力フレームバッファ136のアドレスの次のアドレスを示す。
バッファ書込み処理部134は、シーケンス番号SNnow424を入力フレームバッファ136への書込みアドレスとして使用する。このため、上記読出しカウンタ13Bの値とシーケンス番号SNnowとを比較することによって、受信したフレームと同一内容のフレーム又はそれより後のフレームが既に送信要求されているか否かを判定することができる。受信したフレームと同一内容のフレームとは、受信したフレームと同一のシーケンス番号が付与されたフレームを意味する。それより後のフレームとは、受信したフレームに付与されたシーケンス番号より大きいシーケンス番号が付与されたフレームを意味する。
上記S201の比較の結果、シーケンス番号SNnow424の値が読出しカウンタ13Bの値以上であると判定された場合、受信したフレームと同一内容のフレーム及びそれより後のフレームがまだ送信要求されていない。この場合、受信したフレームがこれから送信要求される可能性がある。このため、受信したフレームと同一内容のフレームがまだ入力フレームバッファ136に格納されていない場合、受信したフレームを格納する必要がある。このため、バッファ書込み処理部134は、受信したフレームのシーケンス番号SNnow424の値を読出しアドレスとして、入力フレームバッファ136を読み出す(S202)。
図12は、本発明の第1の実施形態の入力フレームバッファ136の説明図である。
図12に示す本実施例の入力フレームバッファ136には、アドレス1361毎に、通信経路0系NW0からフレームを受信したか否かを示す0系受信ビット1362と、通信経路1系NW1からフレームを受信したか否かを示す1系受信ビット1363と、フレームデータ1364とが保持されている。アドレス1361の値は、シーケンス番号SNnow424の値と対応する。
図12の例では、0系受信ビット1362の値‘1’は、通信経路0系NW0からフレームを受信したことを示す。1系受信ビット1363の値‘1’は、通信経路1系NW1からフレームを受信したことを示す。例えば、図12のアドレス1361の値‘6’に対応する0系受信ビット1362及び1系受信ビット1363の値は、それぞれ、‘1’及び‘0’である。これは、図12に示す入力フレームバッファ136を含むパケット転送装置が、シーケンス番号SNnow424として‘6’が設定されたフレームを、通信経路0系NW0から既に受信し、通信経路1系NW1からはまだ受信していないことを示す。この場合、フレームデータ1364の値DATA6には、通信経路0系NW0から受信したフレームの内容が格納される。
なお、フレームデータ1364に各フレームの内容であるデータ自体を格納する代わりに、そのデータが格納された位置を示すポインタが格納し、データ自体は別のフレームバッファに格納されてもよい。
再び図10を参照して、S202以降の処理を説明する。
S202において、バッファ書込み処理部134は、受信したフレームのシーケンス番号SNnow424と同一のアドレス1361に対応する0系受信ビット1362、1系受信ビット1363及びフレームデータ1364を読み出す。
バッファ書込み処理部134は、読み出した0系受信ビット1362、又は1系受信ビット1363の少なくとも一方が‘1’であるか否かを判定する(S203)。
S203において、どちらのビットも‘0’であると判定された場合、パケット転送装置は、今回受信したフレームと同一内容のフレームを、今回受信したフレームより前に、いずれの通信経路からも受信していない。例えば、図2の例においてパケット転送装置10NがSN:1であるフレーム301を受信した場合、パケット転送装置10Nはフレーム301より前にSN:1であるフレームを受信していないため、S203においてどちらのビットも‘0’であると判定される。
この場合、バッファ書込み処理部134は、受信したフレームの装置内ヘッダ42から取得した入力ポートID421に対応する0系受信ビット1362又は1系受信ビット1363に‘1’を設定し、受信したフレームを装置内ヘッダ42とともにフレームデータ1364に格納する(S204)。具体的には、受信したフレームが通信経路0系NW0から受信したものである場合、0系受信ビット1362に‘1’が設定される。受信したフレームが通信経路1系NW1から受信したものである場合、1系受信ビット1363に‘1’が設定される。
その後、バッファ書込み処理部134は、各フローID用のバッファ制御部131が保持するフレーム格納フラグ13Aに‘1’を設定し(S205)、処理を終了する(S207)。このフレーム格納フラグ13Aは、まだ送信要求されていないフレームが入力フレームバッファ136に格納されているか否かを示すフラグである。本実施形態では、フレーム格納フラグ13Aの値‘1’は、入力フレームバッファ136にフレームが格納されていることを示す。
一方、S203において、どちらかのビットが‘1’であると判定された場合、パケット転送装置10Nは、今回受信したフレームと同一内容のフレームを、今回受信したフレームより前に、いずれかの通信経路から既に受信している。例えば、図2の例においてパケット転送装置10NがSN:1であるフレーム311を受信した場合、パケット転送装置10Nはフレーム311より前にSN:1であるフレーム301を受信しているため、S203においてどちらかのビット(具体的には、0系受信ビット1362)が‘1’であると判定される。
この場合、今回受信したフレームと同一内容のフレームが既に入力フレームバッファ136に格納されている。このため、バッファ書込み処理部134は、フレームデータ1364を更新せず(すなわち、S202で読み出したフレームデータ1364の内容をそのまま入力フレームバッファ136に書き戻し)、入力ポートIDに対応する受信ビットに‘1’を設定し(S206)、シーケンス番号監視受信処理を終了する(S207)。
上記S201の比較の結果、シーケンス番号SNnow424の値が読出しカウンタ13Bの値未満であると判定された場合、受信したフレームと同一内容のフレーム又はそれより後のフレームが既に送信要求されたと判定される。すなわち、受信したフレームを入力フレームバッファ136に格納する必要はもはやない。このため、バッファ書込み処理部134は、受信したフレームを廃棄して、シーケンス番号監視受信処理を終了する(S207)。
図11は、本発明の第1の実施形態のバッファ書込み処理部134が実行するユーザデータ受信処理S300のフローチャートである。
図11に示すユーザデータ受信処理S300が開始されると、バッファ書込み処理部134は、書込みカウンタ13Fの値を書込みアドレスとして、0系受信ビット1362及び1系受信ビット1363に‘1’を、フレームデータ1364に、装置内ヘッダ42を含む受信したフレームを格納する(S301)。
次に、バッファ書込み処理部134は、書込みカウンタ13Fを‘1’カウントアップし、フレーム格納フラグ13Aに‘1’を設定し(S302)、ユーザデータ受信処理を終了する(S303)。
なお、上記書込みカウンタ13Fは、入力フレームバッファ136への書込みアドレスとして使用される値を保持するカウンタであり、ユーザデータ受信処理S300においてのみ使用される。
図13は、本発明の第1の実施形態のバッファ読出し処理部135が実行するフレーム送信要求処理S400のフローチャートである。
バッファ読出し処理部135は、フレーム格納フラグ13Aが‘0’から‘1’に変化したことを検知すると、設定レジスタ19の動作モードを確認する(S401)。その結果、動作モードが通信経路接続モードであると判定された場合、バッファ読出し処理部135は、図14及び図15に示すシーケンス番号順送信要求処理S500の処理を実行し、フレーム送信要求処理を終了する(S402)。一方、動作モードが端末接続モードであると判定された場合、バッファ読出し処理部135は、図16に示すユーザデータ送信要求処理S600の処理を実行し、フレーム送信要求処理を終了する(S402)。
図14及び図15は、本発明の第1の実施形態のバッファ読出し処理部135が実行するシーケンス番号順送信要求処理S500のフローチャートである。
図14及び図15に示すシーケンス番号順送信要求処理S500が開始されると、バッファ読出し処理部135は、フレーム格納フラグ13Aをクリア(すなわち‘0’に更新)する(S501)。
次に、バッファ読出し処理部135は、読出しカウンタ13Bの値を読出しアドレスとして入力フレームバッファ136からデータを読み出す(S502)。S502と並行して、バッファ読出し処理部135は、フローID13Cを検索キーとして用いて、図17に示す待ち時間保持テーブル21を検索する(S503)。
なお、図14には、S502とS503が同時に実行される例を示すが、先にS502が実行され、その後S503が実行されてもよいし、先にS503が実行され、その後S502が実行されてもよい。
図17は、本発明の第1の実施形態の待ち時間保持テーブル21の説明図である。
本実施例では、上記待ち時間保持テーブル21には、フローID211毎に通信経路0系NW0と通信経路1系NW1の両系遅延差212が保持されている。この両系遅延差212は、フロー毎の通信経路設定時に測定された転送遅延時間の差であり、ネットワークの管理者によって設定される。
例えば、フローID#0用バッファ制御部131−1のバッファ読出し処理部135がS503を実行した場合、フローID211の値‘0’に対応する両系遅延差212の値‘Ddif0’がS503において取得される。
再び図14を参照して、S502及びS503に続く処理を説明する。
上記S502及びS503の実行後、バッファ読出し処理部135は、S502において入力フレームバッファ136から読み出されたフレーム0系受信ビット1362及び1系受信ビット1363を確認する(S504)。その結果、どちらかの受信ビットに‘1’が保持されている場合、バッファ読出し処理部135は、入力フレームバッファ136の、読出しカウンタ13Bが示すアドレスにフレームが格納されている(すなわち、読出しカウンタ13Bの値と同じ値がシーケンス番号として付与されたフレームを既に受信している)と判定する。この場合、バッファ読出し処理部135は、フローID13C及び読出しカウンタ13Bの値とともに、送信要求をスケジューリング部132へ送信する(S505)。
次に、バッファ読出し処理部135は、読出しカウンタ13Bを‘1’カウントアップする(S506)。
次に、バッファ読出し処理部135は、残フレームカウンタ13Dの値がAll‘0’であるか否かを判定する(S507)。上記残フレームカウンタ13Dは、フレーム送信が一時的に停止した場合に、入力フレームバッファ136に蓄積された、まだ送信要求されていないフレームの数を示す。
S507において、残フレームカウンタ13DがAll‘0’であると判定された場合、入力フレームバッファ136にまだ送信要求されていないフレームは蓄積されていないと判定される。この場合、バッファ読出し処理部135は、シーケンス番号順送信要求処理を終了する(S509)。
一方、S507において、残フレームカウンタ13DがAll‘0’でないと判定された場合、入力フレームバッファ136にまだ送信要求されていないフレームが蓄積されている。この場合、バッファ読出し処理部135は、残フレームカウンタ13Dを‘1’カウントダウンする(S508)。これは、入力フレームバッファ136に蓄積された、まだ送信要求されていないフレームが、S505の実行の結果、一つ減ったためである。
その後、バッファ読出し処理部135は、再度S502及びS503以降の処理を実行する。
一方、S504において、受信ビット1362及び1363がともに‘0’であった場合、バッファ読出し処理部135は、シーケンス番号に欠落が発生したと判定する。すなわち、この場合、二つの通信経路のうち一方で、フレーム損失が発生している。例えば、図2において、SN:2のフレーム302が損失し、パケット転送装置10Nが、SN:2のフレーム312を受信する前にSN:3のフレーム303を受信した場合、S504において、受信ビット1362及び1363の両方が‘0’であると判定される。
この場合、バッファ読出し処理部135は、損失したフレームと同一内容のフレームを残りの通信経路から受信するまで、フレームの送信を停止する。ただし、所定の時間(すなわちS503において取得された両系遅延差212)が経過しても損失したフレームと同一内容のフレームを受信しない場合、バッファ読出し処理部135は、二つの通信経路において同一内容のフレームが損失したと判定し、フレームの送信を再開する。そのために、バッファ読出し処理部135は、S503で取得した両系遅延差212を読出しタイマ13Eに設定し、カウントダウンを開始する(S510)。この読出しタイマ13Eは、シーケンス番号の欠落が発生した場合に、フレーム送信を再開するまでの待ち時間を計測するために使用される。タイマ13Eに設定された値は、カウントダウンが開始された後、時間の経過とともに減少し、最終的に‘0’になる。
次に、バッファ読出し処理部135は、読出しタイマ13EがAll‘0’であるか否かを判定する(S511)。
読出しタイマ13EがAll‘0’でないと判定された場合、まだ待ち時間が経過していない。この場合、バッファ読出し処理部135は、フレーム格納フラグ13Aが‘1’か否かを判定する(S512)。その結果、フレーム格納フラグが‘1’であると判定された場合、読出しタイマ13Eが時間切れとなる(すなわち待ち時間が経過する)前に何らかのフレームが到着したと判定される。この場合、バッファ読出し処理部135は、読出しカウンタ13Bの値を読出しアドレスとして、入力フレームバッファ136を読み出し(S513)、0系受信ビット1362又は1系受信ビット1363が‘1’であるか否かを判定する(S514)。
その結果、0系受信ビット1362又は1系受信ビット1363の少なくとも一方が‘1’である場合、欠落したシーケンス番号のフレームが到着したと判定される。この場合、バッファ読出し処理部135は、フレーム格納フラグ13Aをクリアする(S520)。そして、バッファ読出し処理部135は、到着したシーケンス番号の送信要求を生成するため、S505以降の処理を実行する。
S514の結果、受信ビット1362及び受信ビット1363がともに‘0’である場合、欠落したシーケンス番号以外のシーケンス番号のフレームが到着している。この場合、バッファ読出し処理部135は、欠落したシーケンス番号の次のシーケンス番号のフレームが、二つの通信経路の両方から受信されているか否かを確認するため、読出しカウンタ13Bに‘1’を加算した値を読出しアドレスとして、入力フレームバッファ136を読み出す(S515)。そして、バッファ読出し処理部135は、受信ビット1362及び受信ビット1363がともに‘1’であるか否かを判定する(S516)。
その結果、受信ビット1362及び受信ビット1363がともに‘1’である場合、欠落したシーケンス番号のフレームは、二つの通信経路の両方において欠落したと判定される。この場合、バッファ読出し処理部135は、読出しカウンタ値13Bを‘1’カウントアップする(S519)。そして、バッファ読出し処理部135は、欠落したシーケンス番号の次のシーケンス番号が付与されたフレームの送信要求を生成するため、S520以降の処理を実行する。
S516の結果、受信ビット1362及び受信ビット1363の少なくとも一方が‘0’である場合、欠落したシーケンス番号のフレームを待つ状態が継続される。このため、バッファ読出し処理部135は、フレーム格納フラグ13Aをクリアし(S517)、残フレームカウンタ13Dを‘1’カウントアップし(S518)、S511以降の処理を実行する。
S511の結果、読出しタイマ13EがAll‘0’である場合、欠落したシーケンス番号のフレームは二つの通信経路の両方において損失したと判定される。この場合、バッファ読出し処理部135は、欠落したシーケンス番号の次のシーケンス番号のフレームの送信要求を生成するため、S506以降の処理を実行する。その結果、欠落したシーケンス番号の次以降のシーケンス番号が付与されたフレームの送信が再開される。
上記S512の結果、フレーム格納フラグが‘0’であると判定された場合、欠落したシーケンス番号のフレームを待つ状態が継続される。このため、バッファ読出し処理部135は、S511以降の処理を実行する。
例えば、図2において、SN:2のフレーム302が損失し、パケット転送装置10NがSN:3のフレーム303を受信した後、両系遅延差81が経過する前にSN:2のフレーム312を受信した場合、S511において読出しタイマ13EがAll‘0’でないと判定される。そして、S512においてフレーム格納フラグ13Aが‘1’であると判定される。そして、S514において、1系受信ビット1363が‘1’であると判定される。
図2の例において、さらにSN:2のフレーム312が損失し、両系遅延差81が経過する前にパケット転送装置10NがSN:3のフレーム313を受信した場合、S511において読出しタイマ13EがAll‘0’でないと判定される。そして、S512においてフレーム格納フラグ13Aが‘1’であると判定される。そして、S514において、0系受信ビット1362及び1系受信ビット1363がいずれも‘0’であると判定される。そして、S516において、0系受信ビット1362及び1系受信ビット1363がいずれも‘1’であると判定される。
図2の例において、パケット転送装置10NがSN:2のフレーム312及びSN:3のフレーム313のいずれも受信しないうちに両系遅延差81が経過した場合、S511において読出しタイマ13EがAll‘0’であると判定される。
図16は、本発明の第1の実施形態のバッファ読出し処理部135が実行するユーザデータ送信要求処理S600のフローチャートである。
図16に示すユーザデータ送信要求処理S600が開始されると、バッファ読出し処理部135は、フレーム格納フラグ13Aをクリアする(S601)。
次に、バッファ読出し処理部135は、フローID13C及び読出しカウンタ13Bの値とともに、スケジューリング部132へ送信要求を送信する(S602)。
次に、バッファ読出し処理部135は、読出しカウンタ13Bの値を‘1’カウントアップし(S603)、ユーザデータ送信要求処理を終了する(S604)。
上記のように、ユーザデータ送信要求処理S600は、ユーザデータ受信処理S300が入力フレームバッファ136に順次格納したフレームを、アドレスの順に読み出すことによって実現することができる。
フローチャートは図示しないが、スケジューリング部132は、バッファ読出し処理部135から上記送信要求を受信すると、受信した送信要求を、同時に通知されるフローID及び読出しカウンタ値とともに送信要求格納FIFO137に格納し、各フローID用バッファ制御部131からの送信要求を多重する。そして、スケジューリング部132は、送信要求格納FIFO137から送信要求を一つずつ読み出し、送信要求格納FIFO137から読み出されたフローIDに該当するフローID用バッファ制御部131―iに対して、送信許可及び読出しカウンタ値を通知する。
図18は、本発明の第1の実施形態のバッファ読出し処理部135が実行するフレーム送信処理S700のフローチャートである。
バッファ読出し処理部135は、スケジューリング部132から上記送信許可を受信すると、この送信許可と同時に送信される読出しカウンタ値を取得する(S701)。
次に、バッファ読出し処理部135は、取得した読出しカウンタ値をアドレスとして、入力フレームバッファ136からフレームを読み出し、その後、当該アドレスのエントリにAll‘0’を上書きする(S702)。
次に、バッファ読出し処理部135は、設定レジスタ19の動作モードを確認する(S703)。
動作モードが通信経路接続モードであると判定された場合、S702において読み出されたフレームは、通信経路0系NW0又は通信経路1系NW1の少なくとも一方を介して別のパケット転送装置に送信されるべきフレームである。この場合、バッファ読出し処理部135は、装置内ヘッダ42のコピービット425を確認する(S704)。
S704において、コピービット425が‘0’であると判定された場合、読み出されたフレームのコピーを生成する必要がない。このため、バッファ読出し処理部135は、装置内ヘッダ42のフレーム長426の分だけ、入力フレームバッファ136から読み出したフレームデータ1364を送信する(S705)。
次に、バッファ読出し処理部135は、スケジューリング部132へ送信完了を通知して(S708)、フレーム送信処理を終了する(S709)。
一方、S704において、装置内ヘッダ42のコピービット425が‘1’であると判定された場合、読み出されたフレームのコピーを作成する必要がある。このため、バッファ読出し処理部135は、フローID13Cを検索キーとして、図19に示すコピー作成テーブル22を検索する(S706)。この検索の結果、バッファ読出し処理部135は、コピーされたフレームに付与されるヘッダ情報を取得する。
図19は、本発明の第1の実施形態のコピー作成テーブル22の説明図である。
コピー作成テーブル22は、コピーしたフレームに付与するヘッダに関する情報を保持する。すなわち、コピー作成テーブル22は、フローID221を検索キーとして、MPLSラベル222、出力NIF ID223、出力ポートID224、送信元MACアドレス205及び宛先MACアドレス226を示すテーブルエントリを検索するためのものである。ここで、送信元MACアドレス225は、出力ポートID224によって識別される入出力回線インタフェース11−iに付与されたMACアドレスである。宛先MACアドレス226は、上記入出力回線インタフェース11−iを介して接続された、フレームの宛先となるパケット転送装置のMACアドレスを示す。
再び図18を参照して、S706に続く処理を説明する。
上記S706において、コピーされたフレームに付与するヘッダ情報を取得した後、バッファ読出し処理部135は、S705のフレーム送信処理と同様にフレームを送信するとともに、そのフレームのコピーを作成して、作成されたフレームを送信する(S707)。
具体的には、バッファ読出し処理部135は、S705のフレーム送信処理と同様にフレームを送信する。さらに、バッファ読出し処理部135は、送信されるフレームのコピーを作成する。バッファ読出し処理部135は、コピーとして作成されたフレームのMACヘッダ中の宛先MACアドレス411、送信元MACアドレス412及びMPLSヘッダ414に、S706においてコピー作成テーブルから取得した宛先MACアドレス226、送信元MACアドレス225及びMPLSラベル222を上書きする。さらに、バッファ読出し処理部135は、コピーとして作成されたフレームの装置内ヘッダ42の出力NIF ID427及び出力ポートID422に、S706においてコピー作成テーブルから取得した出力NIF ID223及び出力ポートID224を上書きする。さらに、バッファ読出し処理部135は、コピーとして作成されたフレームの入力ポートID421を反転させる。そして、バッファ読出し処理部135は、装置内ヘッダ42のフレーム長426の分だけ読み出したフレームを送信する。
S707において入力ポートID421を反転させるのは、オリジナルフレームが使用していない方のポートにコピーフレームを送信する必要があるためである。フレーム振分け部133は、入力ポートID421に対応したSWインタフェース14にフレームを送信する。このため、バッファ読出し処理部135がS707において入力ポートID421を反転させると、フレーム振分け部133は、コピーとして作成されたフレームを空いているポートに振り分ける。
その後、バッファ読出し処理部135は、スケジューリング部132へ送信完了を通知して(S708)、フレーム送信処理を終了する(S709)。
上記S703において、設定レジスタ19の動作モードが端末接続モードであると判定された場合、バッファ読出し処理部135は、フローID13Cを用いて図20に示す送信SNテーブル23を検索する(S710)。
図20は、本発明の第1の実施形態の送信SNテーブル23の説明図である。
図20の送信SNテーブル23は、フローID231を検索キーとして、送信するフレームのシーケンス番号フィールド415に付与される送信シーケンス番号232を検索するためのテーブルである。すなわち、送信シーケンス番号232には、各フローにおいて次回送信されるフレームに付与されるべきシーケンス番号が保持される。バッファ読出し処理部135は、S710を実行することによって、これから送信しようとするフレームに付与すべきシーケンス番号を取得する。
上記S710の後、バッファ読出し処理部135は、送信SNテーブルから取得した送信シーケンス番号232を、フレームのシーケンス番号フィールド415に上書きする(S711)。そして、バッファ読出し処理部135は、テーブルから取得した送信シーケンス番号232に‘1’を加算した値を、送信SNテーブル23の該当エントリに書き戻す(S712)。
その後、バッファ読出し処理部135は、上記シーケンス番号を上書きしたフレームを送信するため、装置内ヘッダ42のコピービット425の判定処理S704以降の処理を実行する。
以上に説明したように、本発明の第1の実施形態のパケット転送装置は、一つの通信経路においてフレームが損失した場合、損失したフレームと同一内容のフレームを他の通信経路から受信するのを待つ。損失したフレームと同一内容のフレームを受信した場合、そのフレームを転送することによって、フレームの損失を防ぐことができる。さらに、本発明の第1の実施形態のパケット転送装置は、一つの通信経路において損失したフレームと同一内容のフレームを他の通信経路からまだ受信していない場合であっても、所定の条件に基づいて、損失したフレームより後のフレームの転送を再開する。これによって、本発明の第1の実施形態のパケット転送装置は、転送できるフレームを保持しているにもかかわらずフレーム転送を再開できなくなることを防ぐことができる。
次に、本発明の第2の実施形態について説明する。
図21は、本発明の第2の実施形態のパケット転送装置10Nの動作の概要を示す説明図である。
図21と、図2との相違は、パケット転送装置10Nが、欠落したシーケンス番号のフレームを待つ時間の設定方法と、設定する値の内容である。以下、図21が図2と相違する点について説明する。図21の説明のうち、図2の説明と同様の部分は記載を省略する。
図21では、パケット転送装置10Nは、まだいずれの通信経路からも受信していないシーケンス番号(SN)が付与されたフレームを受信する度に、両系遅延差81及び平均フレーム間隔(すなわちフレーム間隔の平均値)82をタイマ(図23参照)に設定し、カウントダウンを開始する。平均フレーム間隔82は、パケット転送装置10Nが監視する各フローのフレームの受信間隔の平均値である。
通常、フレームの損失がなければ、このタイマはフレーム受信の度に更新され、受信したフレームは直ちに送信される。しかし、フレーム(例えば、通信経路0系MW0から受信するはずのSN:2のフレーム302)が損失し、シーケンス番号の欠落を検出すると、パケット転送装置10Nは、タイマを更新せず、フレームの送信を一時停止する。そして、上記タイマが‘0’になった時点、又は、片方の系で損失したSN:2のフレーム312を受信した時点、又は、両系からSN:3のフレームを受信した時点で、パケット転送装置10Nは、フレームの送信を再開する。
具体的には、パケット転送装置10Nは、SN:2のフレーム302を受信する前にSN:3のフレーム303を受信した場合、通信経路0系MW0においてフレーム302が損失したと判定する。パケット転送装置10Nは、タイマが‘0’になる前に、損失したフレームと同一内容のSN:2のフレーム312を通信経路1系NW1から受信した場合、フレーム312を送信する。パケット転送装置10Nは、タイマが‘0’になる前、かつ、SN:2のフレーム312を受信する前に、SN:3のフレーム313を通信経路1系NW1から受信した場合、SN:3のフレーム303又はフレーム313を送信する。パケット転送装置10Nは、SN:2のフレーム312又はSN:3のフレーム313のいずれも受信しないうちにタイマが‘0’になった場合、SN:3のフレーム303を送信する。
図22は、本発明の第2の実施形態のパケット転送装置10Nの動作の変形例を示す説明図である。
図22では、タイマに平均フレーム間隔82の代わりに、フレーム間隔の最大値(すなわち最大フレーム間隔)83が設定される。図22のそれ以外の点は、図21と同様である。上記最大フレーム間隔83は、パケット転送装置10Nが監視する各フローのフレームの受信間隔の最大値である。
図21に示す方法は、平均値に基づいて待ち時間を決定するため、フレーム揺らぎが小さいTDMエミュレーション又はVoIPトラヒックと、入り口でシェーパなどの帯域調整を行ったストリーミングトラヒックとの混在ネットワークに適している。
一方、図22に示す方法は、フレーム揺らぎが極端に大きいトラヒックにも対応可能である。ただし、いわゆるストリームの切れ目である、トラヒックが到着しない期間が、最大フレーム間隔83として設定されることを排除する必要がある。そのため、各パケット転送装置が一つの最大値を持ってもよいし、現在の最大値の一定倍以上大きい最大値は許容されなくてもよい。
以上のように、図21及び図22の方式をフロー毎のトラヒックの特性に合わせて適用することによって、異なる特性のトラヒックが混在した場合にも本発明を適用することができる。
また、図21及び図22に示す方法によれば、図2と同様に、仮に通信経路1系NW1のSN:3のフレーム313が損失した場合、及び、片側の通信経路に回線障害が発生した場合にも、フレームの送信が完全に停止することなく、フレームの損失を防止することができる。
さらに、図2に示す方法によれば、パケット転送装置は、テーブルに設定された固定遅延分だけフレームを待っていた。このため、実際のネットワークの使用状況又は設定による遅延の変動に対応することができなかった。しかし、図21及び図22に示す方法によれば、過去のトラヒックの履歴がフレームの待ち時間に反映される。このため、上記のようなネットワーク使用状況の変化に自動的に対応することができる。
本実施形態のパケット転送装置10Nの構成は、第1の実施形態の図5と同様であるが、入力フレームバッファ制御部13のみ、その構成と機能が第1の実施形態と異なる。以下、第2の実施形態が第1の実施形態と相違する点について説明する。
図23は、本発明の第2の実施形態の入力フレームバッファ制御部13の構成を示すブロック図である。
入力フレームバッファ制御部13は、各フローID用のバッファ制御部1301(すなわち1301−1〜1301−n)、これらの各フローID用バッファ制御部1301に接続されたスケジューリング部132、及び、上記各フローID用バッファ制御部1301と接続されたフレーム振分け部133を備える。
各フローID用バッファ制御部1301は、バッファ書込み処理部1304、バッファ読出し処理部1305及び入力フレームバッファ136を備える。
さらに、各フローID用バッファ制御部1301は、フレーム格納フラグ130A、読出しカウンタ130B、フローID130C、残フレームカウンタ130D、読出しタイマ130E、書込みカウンタ130F、送信停止フラグ130G、送信停止シーケンス番号(SN)130H及び時刻カウンタ130Jを保持する。
フレーム格納フラグ130A、読出しカウンタ130B、フローID130C、残フレームカウンタ130D、読出しタイマ130E及び書込みカウンタ130Fは、それぞれ、第1の実施形態のフレーム格納フラグ13A、読出しカウンタ13B、フローID13C、残フレームカウンタ13D、読出しタイマ13E及び書込みカウンタ13Fと同様である。
送信停止フラグ130Gは、フレームの送信を停止するか否かを示すフラグである。
送信停止SN130Hは、送信停止SN130Hには、欠落したシーケンス番号の一つ前のシーケンス番号(すなわち、送信が停止する以前、最後に送信されたフレームのシーケンス番号)を保持する。
時刻カウンタ130Jは、現在の時刻を保持するカウンタである。
入力フレームバッファ136の構成は、第1の実施形態と同様である(図12参照)。
バッファ書込み処理部1304は、入力ヘッダ処理部12からフレームを受信すると、受信したフレームの装置内ヘッダ42のフローID423を参照する。フローID423が、自バッファ制御部1301が割り当てられたフローの識別子でない場合、バッファ書込み処理部1304は、受信したフレームを破棄する。フローID423が、自バッファ制御部1301が割り当てられたフローの識別子である場合、バッファ書込み処理部1304は、受信したフレームを対象として、設定レジスタ19の動作モードに従ってバッファ書込み処理S100を実行する。その結果、受信したフレームが順次バッファ136に格納される。
バッファ読出し処理部1305は、設定レジスタ19の動作モードに従ってフレーム送信要求処理S400を実行する。その結果、自バッファ制御部1301が割り当てられたフローのID情報を含む送信要求がスケジューリング部132に送信される。
上記送信要求を受信したスケジューリング部132は、送信要求を送信要求格納FIFO137に一旦格納する。スケジューリング部132は、送信要求格納FIFO137から順次送信要求を読み出す。そして、スケジューリング部132は、読み出された送信要求の送信元であるフローID用バッファ制御部1301に対して、送信許可を送信する。
上記送信許可を受信したバッファ読出し処理部1305は、入力フレームバッファ136からフレームを読み出し、フレーム振分け部133に出力する。
フレーム振分け部133は、バッファ読出し処理部1305からフレームを受信すると、装置内ヘッダ42の中の入力ポートID421を参照し、入力ポートID421に対応するSWインタフェース14を選択し、選択されたSWインタフェース14にフレームを転送する。入出力回線インタフェース11とSWインタフェース14の対応関係は、第1の実施形態と同様である(図5の説明参照)。
第2の実施形態のバッファ書込み処理部1304は、第1の実施形態のバッファ書込み処理部134と同様、図9に示すバッファ書込み処理S100を実行する。ただし、第2の実施形態のバッファ書込み処理部1304は、シーケンス番号監視受信処理S200の代わりに、図24に示すシーケンス番号監視受信処理S800を実行する。
図24は、本発明の第2の実施形態のバッファ書込み処理部1304が実行するシーケンス番号監視受信処理S800のフローチャートである。
図24に示すシーケンス番号監視受信処理S800が開始されると、バッファ書込み処理部1304は、受信したフレームの装置内ヘッダ42から取得したシーケンス番号SNnow424と、各フロー用バッファ制御部131が保持している読出しカウンタ130Bの値とを比較する(S801)。読出しカウンタ130Bは、入力フレームバッファ136の読出しアドレスを示している。
バッファ書込み処理部1304は、シーケンス番号SNnow424を入力フレームバッファ136への書込みアドレスとして使用する。このため、上記読出しカウンタ130Bの値とシーケンス番号SNnowとを比較することによって、受信したフレームと同一内容のフレームが既に送信要求されているか否かを判定することができる。
上記S801の比較の結果、シーケンス番号SNnow424の値が読出しカウンタ130Bの値以上であると判定された場合、受信したフレームと同一内容のフレームがまだ送信要求されていない。すなわち、受信したフレームと同一内容のフレームがまだ入力フレームバッファ136に格納されていない可能性がある。この場合、バッファ書込み処理部1304は、受信したフレームのシーケンス番号SNnow424の値を読出しアドレスとして、図12に示す入力フレームバッファ136を読み出す(S802)。この読出しの手順は、図10のS202と同様である。
次に、バッファ書込み処理部1304は、読み出した0系受信ビット1362、又は1系受信ビット1363の少なくとも一方が‘1’であるか否かを判定する(S803)。
S803において、どちらのビットも‘0’であると判定された場合、バッファ書込み処理部1304は、受信したフレームの装置内ヘッダ42から取得した入力ポートID421に対応する0系受信ビット1362又は1系受信ビット1363に‘1’を設定し、受信したフレームを装置内ヘッダ42とともにフレームデータ1364に格納する(S804)。
その後、バッファ書込み処理部1304は、各フローID用のバッファ制御部1301が保持するフレーム格納フラグ130Aに‘1’を設定する(S805)。
さらに、バッファ書込み処理部1304は、上記フレーム格納処理S804と並行して、待ち時間更新処理S900を実行する。図24には、待ち時間更新処理S900がフレーム格納処理S804と並行して実行される例を示すが、待ち時間更新処理S900は、S804の前に実行されてもよいし、S804又はS805の後に実行されてもよい。
S805及びS900がいずれも終了すると、バッファ書込み処理部1304は、シーケンス番号監視受信処理を終了する(S807)。
一方、S803において、どちらかのビットが‘1’であると判定された場合、今回受信したフレームと同一内容のフレームが既に入力フレームバッファ136に格納されている。このため、バッファ書込み処理部1304は、フレームデータ1364を更新せず(すなわち、S802で読み出したフレームデータ1364の内容をそのまま入力フレームバッファ136に書き戻し)、入力ポートIDに対応する受信ビットに‘1’を設定し(S806)、シーケンス番号監視受信処理を終了する(S807)。
上記S801の比較の結果、シーケンス番号SNnow424の値が読出しカウンタ130Bの値未満であると判定された場合、受信したフレームと同一内容のフレーム又はそれより後のフレームが既に送信要求されたと判定される。すなわち、受信したフレームを入力フレームバッファ136に格納する必要はもはやない。このため、バッファ書込み処理部1304は、受信したフレームを廃棄して、シーケンス番号監視受信処理を終了する(S807)。
図25及び図26は、本発明の第2の実施形態のバッファ書込み処理部1304が実行する待ち時間更新処理S900のフローチャートである。
バッファ書込み処理部1304は、フローID130Cを用いて、待ち時間保持テーブル21を検索する(S901)。
図27は、本発明の第2の実施形態の待ち時間保持テーブル21の説明図である。
本実施形態の待ち時間保持テーブル21は、フローID211毎に、通信経路0系NW0と1系NW1の両系遅延差Ddif212、算出モードMode213、前回シーケンス番号SNpre214、前回到着時刻Tpre215、フレーム間隔IFG216及び時刻カウンタ週回数TRap217を保持するテーブルである。
両系遅延差Ddif212は、図17に示すものと同様のものである。
算出モードMode213は、フレーム間隔IFGの算出方法を表す。算出モードMode213の値‘0’は、過去のフレーム間隔の平均値がフレーム間隔IFGとして算出されることを示す。‘1’は、過去のフレーム間隔の最大値がフレーム間隔IFGとして算出されることを示す。算出された値は、フレーム間隔IFG216に保持される。
前回シーケンス番号SNpre214、前回到着時刻Tpre215及びフレーム間隔IFG216は、フレーム受信の度に更新されるフィールドである。前回シーケンス番号SNpre:214には、受信したフレームのシーケンス番号が上書きされる。前回到着時刻Tpre215には、フレームを受信した時点の時刻カウンタ130Jの値が上書きされる。フレーム間隔IFG216には、算出モードMode213に従って算出されたフレーム間隔が上書きされる。
時刻カウンタ週回数TRap217は、前回テーブルを更新してから現在までに何回時刻カウンタ130Jが最大値から‘0’に戻ったかを示す。ここで、時刻カウンタ130Jは、現在の時刻を保持するカウンタである。時刻カウンタ130Jに保持された時刻は、パケット転送装置の動作周波数クロックに従って、クロックごとにカウントアップされる。
再び図25を参照して、S901に続く処理を説明する。
バッファ書込み処理部1304は、S901においてテーブル値を検索する。その結果、バッファ書込み処理部1304は、そのバッファ書込み処理部1304が属するバッファ制御部1301が割り当てられたフローの識別子がフローID211に対応するテーブル値を取得する。さらに、バッファ書込み処理部1304は、時刻カウンタ130Jの値を、今回フレームを受信した時刻すなわち今回到着時刻Tnowとして保持する(S902)。
次に、バッファ書込み処理部1304は、受信したフレームの装置内ヘッダ42のシーケンス番号SNnow424の値が、S902において取得した前回シーケンス番号SNpre214に‘1’を加算した値に等しいか否かを判定する(S903)。
S903において、シーケンス番号SNnow424の値が前回シーケンス番号SNpre214に‘1’を加算した値に等しいと判定された場合、バッファ書込み処理部1304は、S902において取得した時刻カウンタ週回数TRap217の値を確認する(S904)。
S904からS908は、今回受信したフレームと前回受信したフレームとのフレーム間隔を算出する処理である。フレーム間隔は、原則として、時刻カウンタ130Jから取得された今回到着時刻Tnowから、前回到着時刻Tpre215を減算することによって算出することができる。しかし、時刻カウンタ130Jの桁数は有限であるため、時刻カウンタ130Jの値は、最大値の次に‘0’に戻り、その後順次カウントアップされる。このとき、時刻カウンタ週回数TRap217の値が‘1’加算される。したがって、フレーム間隔は、今回到着時刻Tnow、前回到着時刻Tpre215及び時刻カウンタ週回数TRap217に基づいて算出される必要がある。
S904において、時刻カウンタ週回数TRap217が‘0’であると判定された場合、前回フレームを受信した後、時刻カウンタ130Jの値は最大値に達していない。この場合、バッファ書込み処理部1304は、Tnowから前回到着時刻Tpre215を減算した値をフレーム間隔IFGnowとして保持する(S905)。
S904において、時刻カウンタ週回数TRap217が‘1’であると判定された場合、前回フレームを受信した後、時刻カウンタ130Jの値が一度最大値に達し、‘0’に戻っている。この場合、バッファ書込み処理部1304は、時刻カウンタ130Jの値Tnowが前回到着時刻Tpre215より大きいか否かを判定する(S906)。
S906において、時刻カウンタ130Jの値Tnowが前回到着時刻Tpre215以下であると判定された場合、バッファ書込み処理部1304は、時刻カウンタ130Jの最大値Tmaxから前回到着時刻Tpre215を減算した値を、Tnowに加算する。そして、バッファ書込み処理部1304は、その加算の結果得られた値をフレーム間隔IFGnowとして保持する(S907)。
S906において、時刻カウンタ130Jの値Tnowが前回到着時刻Tpre215より大きいと判定された場合、及び、S904において、時刻カウンタ週回数TRapが‘2’以上であると判定された場合、実際のフレーム間隔は、Tmaxより大きい。この場合、バッファ書込み処理部1304は、Tmaxをフレーム間隔IFGnowとして保持する(S908)。ここで、Tmaxをネットワークとして許容できる最大の遅延時間以上にする必要がある。
上記S905、S907又はS908の後、バッファ書込み処理部1304は、算出モードMode213を確認する(S911)。
S911において、算出モードMode213が‘0’であると判定された場合、フレーム間隔の平均値が、フレーム間隔IFG216として設定される。この場合、バッファ書込み処理部1304は、フレーム間隔の平均値を算出するため、(IFGnow+IFG216)÷2を、平均フレーム間隔(IFGave)として算出する(S912)。そして、バッファ書込み処理部1304は、算出されたIFGaveを、待ち時間保持テーブル21に書き戻される値IFGとして保持する(S913)。
S911において、算出モードMode213が‘1’であると判定された場合、フレーム間隔の最大値が、フレーム間隔IFG216として設定される。この場合、バッファ書込み処理部1304は、フレーム間隔の最大値を算出するため、max(IFGnow、IFG216)を、最大フレーム間隔(IFGmax)として算出する(S914)。ここで、max(A、B)は、AとBのうち大きい方を選択する、という意味の関数である。さらにこの関数の条件として、ある一定の値以上の値は選択しない、又は、Bの一定倍以上の値は選択しない、などの条件を付加してもよい。これによって、トラヒックの切れ目において、IFGnowが非常に大きい場合に、そのIFGnowの値を排除することができる。
その後、バッファ書込み処理部1304は、算出されたIFGmaxを、待ち時間保持テーブル21に書き戻される値IFGとして保持する(S915)。
上記S904と並行して、バッファ書込み処理部1304は、各フローID用バッファ制御部1301が保持する送信停止フラグ130Gを確認する(S909)。
S909において、送信停止フラグ130Gが‘0’であると判定された場合、バッファ書込み処理部1304は、取得したフレーム間隔IFG216に両系遅延差Ddif212を加算した値を、読出しタイマ130Eに設定し、読出しタイマ130Eのカウントダウンを開始する(S910)。送信停止フラグ130Gは、バッファ書込み処理部1304が、シーケンス番号の欠落を検出した際に‘1’に設定するフラグである。送信停止フラグ130Gが‘1’である間、フレームの送信を停止して、欠落したシーケンス番号が付与されたフレームの受信を待つ処理が必要となる。
バッファ書込み処理部1304は、S910が実行された後、待ち時間更新処理を終了する(S919)。
上記S909の確認の結果、送信停止フラグ130Gが‘1’であると判定された場合、バッファ書込み処理部1304は、読出しタイマ130Eを更新せず、待ち時間更新処理を終了する(S919)。
図25には、S909からS910の処理が、S904からS908及びS911からS916の処理と並行して実行される例を示す。しかし、S909からS910の処理は、S904の前に実行されてもよいし、S916の後に実行されてもよい。すなわち、S909からS910の処理が実行された後にS904が実行されてもよいし、S916の処理が実行された後にS909が実行されてもよい。
上記S903において、シーケンス番号SNnow424の値と、前回シーケンス番号SNpre214に‘1’を加算した値が等しくないと判定された場合、フレームの損失によってシーケンス番号の欠落が発生したと判定される。この場合、バッファ書込み処理部1304は、待ち時間保持テーブルに書き戻される値IFGとして、S902において取得されたフレーム間隔IFG216を保持する(S917)。
上記S913、S915又はS917の処理の後、バッファ書込み処理部1304は、待ち時間保持テーブル21を更新する(S916)。具体的には、バッファ書込み処理部1304は、S902において取得されたテーブル値のうち、前回シーケンス番号SNpre214に、SNnow424の値を書き戻し、前回到着時刻Tpre215に、現在の時刻カウンタ130Jの値Tnowを書き戻し、フレーム間隔IFG216に、書き戻し値IFGを書き戻し、時刻カウンタ周回数TRapに、‘0’を書き戻す。
S916の処理が終了すると、バッファ書込み処理部1304は、待ち時間更新処理を終了する(S919)。
上記S917の処理と並行して、バッファ書込み処理部1304は、送信停止フラグ130Gに‘1’を設定し、送信停止SN130HにSNpre214の値を設定する(S918)。その結果、送信停止SN130Hには、欠落したシーケンス番号の一つ前のシーケンス番号(すなわち、送信が停止する以前、最後に送信されたフレームのシーケンス番号)が保持される。
S918が実行された後、バッファ書込み処理部1304は、待ち時間更新処理を終了する(S919)。
図26には、S918がS917と並行して実行される例を示す。しかし、S918が実行された後にS917が実行されてもよいし、S917が実行された後にS918が実行されてもよい。
本実施形態のバッファ読出し処理部1305は、図13に示すフレーム送信要求処理S400を実行する。ただし、バッファ読出し処理部1305は、シーケンス番号順送信要求処理S500の代わりに、図28に示すシーケンス番号順送信要求処理S1000を実行する。
図28及び図29は、本発明の第2の実施形態のバッファ読出し処理部1305が実行するシーケンス番号順送信要求処理S1000のフローチャートである。
図28および図29に示すシーケンス番号順送信要求処理S1000が開始されると、バッファ読出し処理部1305は、フレーム格納フラグをクリアする(S1001)。
次に、バッファ読出し処理部1305は、読出しカウンタ130Bの値を読出しアドレスとして入力フレームバッファ136からデータを読み出す(S1002)。
次に、バッファ読出し処理部1305は、入力フレームバッファ136から読み出された0系受信ビット1362及び1系受信ビット1363を確認する(S1003)。その結果、どちらかの受信ビットに‘1’が保持されている場合、バッファ読出し処理部1305は、入力フレームバッファ136の、読出しカウンタ13Bが示すアドレスにフレームが格納されていると判定する。この場合、バッファ読出し処理部1305は、フローID130C及び読出しカウンタ130Bの値とともに、送信要求をスケジューリング部132へ送信する(S1004)。
次に、バッファ読出し処理部1305は、読出しカウンタ130Bを‘1’カウントアップする(S1005)。
次に、バッファ読出し処理部1305は、残フレームカウンタ130Dの値がAll‘0’であるか否かを判定する(S1006)。
S1006において、残フレームカウンタ130DがAll‘0’であると判定された場合、入力フレームバッファ136にフレームは蓄積されていないと判定される。この場合、バッファ読出し処理部1305は、シーケンス番号順送信要求処理を終了する(S1007)。
一方、S1006において、残フレームカウンタ130DがAll‘0’でないと判定された場合、入力フレームバッファ136にフレームが蓄積されている。この場合、バッファ読出し処理部1305は、残フレームカウンタ130Dを‘1’カウントダウンする(S1008)。
その後、バッファ読出し処理部1305は、再度S1002以降の処理を実行する。
一方、S1003において、受信ビット1362及び1363がともに‘0’であった場合、バッファ読出し処理部1305は、シーケンス番号に欠落が発生したと判定する。すなわち、この場合、二つの通信経路のうち一方で、フレーム損失が発生している。この場合、フレーム送信待ち状態となるため、バッファ読出し処理部1305は、送信停止フラグ130Gを確認する(S1009)。
S1009において、送信停止フラグ130Gが‘1’であると判定された場合、バッファ読出し処理部1305は、読出しカウンタ130Bに‘1’を加算した値と送信停止SN130Hの値とが等しいか否かを判定する(S1010)。
S1010において、読出しカウンタ130Bに‘1’を加算した値と送信停止SN130Hの値とが等しいと判定された場合、現在の読出しカウンタ130Bが示すシーケンス番号のフレームが損失していると判定される。この場合、バッファ読出し処理部1305は、読出しタイマ130Eの値がAll‘0’か否かを判定する(S1011)。
S1011において、読出しタイマ130Eの値がAll‘0’でないと判定された場合、フレーム待ち状態が継続中である。このため、バッファ読出し処理部1305は、フレーム格納フラグ130Aの値が‘1’か否かを判定する(S1012)。
S1012において、フレーム格納フラグ130Aの値が‘1’であると判定された場合、読出しタイマ130Eが時間切れとなる前に何らかのフレームが到着したと判定される。この場合、バッファ読出し処理部1305は、読出しカウンタ130Bの値を読出しアドレスとして、入力フレームバッファ136を読み出す(S1013)。
次に、バッファ読出し処理部1305は、受信ビット1362又は1363が‘1’であるか否かを判定する(S1014)。
S1014において、受信ビット1362又は1363のいずれかが‘1’である場合、S1003において欠落したと判定されたシーケンス番号のフレームが到着したと判定される。この場合、バッファ読出し処理部1305は、フレーム格納フラグ130Aをクリアする(S1020)。そして、バッファ読出し処理部1305は、到着したシーケンス番号の送信要求を生成するため、S1004以降の処理を実行する。
S1014において、受信ビット1362及び1363がともに‘0’であると判定された場合、欠落したシーケンス番号以外のシーケンス番号のフレームが到着している。この場合、バッファ読出し処理部1305は、欠落したシーケンス番号の次のシーケンス番号のフレームが、二つの通信経路の両方から受信されているか否かを確認するため、読出しカウンタ130Bに‘1’を加算した値を読出しアドレスとして、入力フレームバッファ136を読み出す(S1015)。そして、バッファ読出し処理部1305は、受信ビット1362及び受信ビット1363がともに‘1’であるか否かを判定する(S1016)。
その結果、二つの受信ビットがともに‘1’である場合、欠落したシーケンス番号のフレームは、二つの通信経路の両方において欠落したと判定される。この場合、バッファ読出し処理部1305は、読出しカウンタ値130Bを‘1’カウントアップする(S1019)。そして、バッファ読出し処理部1305は、欠落したシーケンス番号の次のシーケンス番号が付与されたフレームの送信要求を生成するため、S1020以降の処理を実行する。
S1016において、受信ビット1362及び受信ビット1363の少なくとも一方が‘0’である場合、欠落したシーケンス番号のフレームを待つ状態が継続される。このため、バッファ読出し処理部1305は、フレーム格納フラグ130Aをクリアし(S1017)、残フレームカウンタ130Dを‘1’カウントアップし(S1018)、S1009以降の処理を実行する。
S1009において、送信停止フラグ130Gが‘0’であった場合、フレーム送信待ち状態ではない。この場合、次のシーケンス番号が付与されたフレームの送信要求を生成するため、バッファ読出し処理部1305は、S1005以降の処理を実行する。
S1010において、読出しカウンタ130Bに‘1’を加算した値と、送信停止SN:130Hとが等しくない場合、送信停止するべきシーケンス番号のフレームが変化したと判定される。この場合、バッファ読出し処理部1305は、次のシーケンス番号が付与されたフレームの送信要求を生成するため、S1005以降の処理を実行する。
S1011において、読出しタイマ13EがAll‘0’である場合、欠落したシーケンス番号が付与されたフレームは二つの通信経路で損失したと判定される。この場合、バッファ読出し処理部1305は、欠落したシーケンス番号の次のシーケンス番号のフレームの送信要求を生成するため、S1005以降の処理を実行する。
S1012において、フレーム格納フラグ130Aが‘0’であると判定された場合、欠落したシーケンス番号の待ち状態が継続される。このため、バッファ読出し処理部1305は、S1009以降の処理を実行する。
例えば、図21において、SN:2のフレーム302が損失したため、パケット転送装置10Nが、SN:1のフレーム301を受信した次にSN:3のフレーム303を受信した場合について説明する。この例において、フレーム301の受信後、両系遅延差81と平均フレーム間隔82の合計である待ち時間が経過する前に、パケット転送装置10NがSN:2のフレーム312を受信した場合、S1011において読出しタイマ130EがAll‘0’でないと判定される。そして、S1012においてフレーム格納フラグ130Aが‘1’であると判定される。そして、S1014において、1系受信ビット1363が‘1’であると判定される。
図21の例において、さらにSN:2のフレーム312が損失し、待ち時間が経過する前にパケット転送装置10NがSN:3のフレーム313を受信した場合、S1011において読出しタイマ130EがAll‘0’でないと判定される。そして、S1012においてフレーム格納フラグ13Aが‘1’であると判定される。そして、S1014において、0系受信ビット1362及び1系受信ビット1363がいずれも‘0’であると判定される。そして、S1016において、0系受信ビット1362及び1系受信ビット1363がいずれも‘1’であると判定される。
図2の例において、パケット転送装置10NがSN:2のフレーム312及びSN:3のフレーム313のいずれも受信しないうちに待ち時間が経過した場合、S1011において読出しタイマ130EがAll‘0’であると判定される。
以上、本発明の第2の実施形態によれば、第1の実施形態と同様、転送できるフレームを保持しているにもかかわらずフレーム転送を再開できなくなることを防ぐことができる。さらに、第2の実施形態によれば、フレーム転送を再開するタイミングが、各フローのフレーム間隔に基づいて決定される。このため、トラヒックの特性に適した方法で本発明を適用することが可能になる。
以上に説明した本発明の観点の代表的なものとして、次のものが挙げられる。
(1)一つ以上の通信経路に接続される複数のインタフェースと、データを一時的に格納するバッファと、前記バッファを制御するバッファ制御部と、を備えるデータ転送装置であって、
前記複数のインタフェースは、第1インタフェース及び第2インタフェースを含み、
前記複数の通信経路は、前記第1インタフェースに接続される第1通信経路及び前記第2インタフェースに接続される第2通信経路を含み、
前記第1インタフェース及び前記第2インタフェースは、シーケンス番号が付与されたデータを前記第1通信経路及び前記第2通信経路から受信し、
前記データ転送装置が、前記第1通信経路から、第1シーケンス番号が付与された第1データを受信する前に、前記第1シーケンス番号の次のシーケンス番号である第2シーケンス番号が付与された第2データを受信した場合、前記バッファ制御部は、
受信した前記第2データを前記バッファに格納し、
前記データ転送装置が、前記第2通信経路から、前記第1シーケンス番号が付与された前記第1データを受信した場合、受信した前記第1データを前記バッファに格納し、前記第1データ及び前記第2データをそれらに付与された前記シーケンス番号の順に前記バッファから読み出して前記複数のインタフェースの一つに送信させ、
前記データ転送装置が、前記第2通信経路から、前記第1シーケンス番号が付与された前記第1データを受信する前に前記第2シーケンス番号が付与された前記第2データを受信した場合、前記第2データを前記バッファから読み出して前記複数のインタフェースの一つに送信させ、
所定の待ち時間が経過したか否かを判定し、前記所定の待ち時間が経過したと判定された場合、前記第2データを前記バッファから読み出して前記複数のインタフェースの一つに送信させることを特徴とするデータ転送装置。
(2)前記バッファ制御部は、前記データ転送装置が前記第1通信経路から前記第2データを受信した時点から前記所定の待ち時間が経過した場合、前記所定の待ち時間が経過したと判定することを特徴とする(1)に記載のデータ転送装置。
(3)前記所定の待ち時間は、前記第1通信経路におけるデータ転送遅延時間と前記第2通信経路におけるデータ転送遅延時間との差であることを特徴とする(2)に記載のデータ転送装置。
(4)前記バッファ制御部は、前記データ転送装置が、前記第1通信経路から、前記第1シーケンス番号の一つ前のシーケンス番号である第3シーケンス番号が付与された第3データを受信した時点から前記所定の待ち時間が経過した場合、前記所定の待ち時間が経過したと判定することを特徴とする(1)に記載のデータ転送装置。
(5)前記バッファ制御部は、前記データ転送装置が前記各通信経路から前記データを受信すると、前記受信したデータと、前回受信したデータとの間の時間間隔を計測し、複数の前記計測された時間間隔の平均値を算出し、
前記所定の待ち時間は、前記算出された時間間隔の平均値に、前記第1通信経路におけるデータ転送遅延時間と前記第2通信経路におけるデータ転送遅延時間との差を加算した値であることを特徴とする(4)に記載のデータ転送装置。
(6)前記バッファ制御部は、前記データ転送装置が前記各通信経路から前記データを受信すると、前記受信したデータと、前回受信したデータとの間の時間間隔を計測し、複数の前記計測された時間間隔の最大値を算出し、
前記所定の待ち時間は、前記算出された時間間隔の最大値に、前記第1通信経路におけるデータ転送遅延時間と前記第2通信経路におけるデータ転送遅延時間との差を加算した値であることを特徴とする(4)に記載のデータ転送装置。
(7)前記データ転送装置は、前記第1通信経路及び前記第2通信経路を介して他のデータ転送装置に接続され、
前記バッファ制御部は、
前記データ転送装置が前記複数の通信経路の一つから前記他のデータ転送装置に送信されるべきデータを受信すると、前記受信したデータの複製を作成し、
前記受信したデータ及びその複製に、同一の前記シーケンス番号を付与し、
前記受信したデータ及びその複製の一方に、前記第1通信経路に接続された前記他のデータ転送装置のインタフェースの識別子を宛先情報として付与し、前記受信したデータ及びその複製のもう一方に、前記第2通信経路に接続された前記他のデータ転送装置のインタフェースの識別子を宛先情報として付与し、
前記シーケンス番号及び前記宛先情報が付与された、前記受信したデータ及びその複製を、前記第1インタフェース及び前記第2インタフェースから前記他のデータ転送装置に送信させることを特徴とする(1)に記載のデータ転送装置。
(8)一つ以上の通信経路に接続される複数のインタフェースと、データを一時的に格納するバッファと、前記バッファを制御するバッファ制御部と、を備えるデータ転送装置におけるデータ転送方法であって、
前記複数のインタフェースは、第1インタフェース及び第2インタフェースを含み、
前記複数の通信経路は、前記第1インタフェースに接続される第1通信経路及び前記第2インタフェースに接続される第2通信経路を含み、
前記第1インタフェース及び前記第2インタフェースは、シーケンス番号が付与されたデータを前記第1通信経路及び前記第2通信経路から受信し、
前記方法は、前記データ転送装置が、前記第1通信経路から、第1シーケンス番号が付与された第1データを受信する前に、前記第1シーケンス番号の次のシーケンス番号である第2シーケンス番号が付与された第2データを受信した場合に、受信した前記第2データを前記バッファに格納する手順と、
前記データ転送装置が、前記第2通信経路から、前記第1シーケンス番号が付与された前記第1データを受信した場合、受信した前記第1データを前記バッファに格納し、前記第1データ及び前記第2データをそれらに付与された前記シーケンス番号の順に前記バッファから読み出して前記複数のインタフェースの一つに送信させる手順と、
前記データ転送装置が、前記第2通信経路から、前記第1シーケンス番号が付与された前記第1データを受信する前に前記第2シーケンス番号が付与された前記第2データを受信した場合、前記第2データを前記バッファから読み出して前記複数のインタフェースの一つに送信させる手順と、
所定の待ち時間が経過したか否かを判定する手順と、
前記所定の待ち時間が経過したと判定された場合、前記第2データを前記バッファから読み出して前記複数のインタフェースの一つに送信させる手順と、を含むことを特徴とする方法。
(9)前記所定の待ち時間が経過したか否かを判定する手順において、前記データ転送装置が前記第1通信経路から前記第2データを受信した時点から前記所定の待ち時間が経過した場合、前記所定の待ち時間が経過したと判定されることを特徴とする(8)に記載の方法。
(10)前記所定の待ち時間は、前記第1通信経路におけるデータ転送遅延時間と前記第2通信経路におけるデータ転送遅延時間との差であることを特徴とする(9)に記載の方法。
(11)前記所定の待ち時間が経過したか否かを判定する手順において、前記データ転送装置が、前記第1通信経路から、前記第1シーケンス番号の一つ前のシーケンス番号である第3シーケンス番号が付与された第3データを受信した時点から前記所定の待ち時間が経過した場合、前記所定の待ち時間が経過したと判定されることを特徴とする(8)に記載の方法。
(12)前記方法は、さらに、前記データ転送装置が前記各通信経路から前記データを受信すると、前記受信したデータと、前回受信したデータとの間の時間間隔を計測する手順と、複数の前記計測された時間間隔の平均値を算出する手順と、を含み、
前記所定の待ち時間は、前記算出された時間間隔の平均値に、前記第1通信経路におけるデータ転送遅延時間と前記第2通信経路におけるデータ転送遅延時間との差を加算した値であることを特徴とする(11)に記載の方法。
(13)前記方法は、さらに、前記データ転送装置が前記各通信経路から前記データを受信すると、前記受信したデータと、前回受信したデータとの間の時間間隔を計測する手順と、複数の前記計測された時間間隔の最大値を算出する手順と、を含み、
前記所定の待ち時間は、前記算出された時間間隔の最大値に、前記第1通信経路におけるデータ転送遅延時間と前記第2通信経路におけるデータ転送遅延時間との差を加算した値であることを特徴とする(11)に記載の方法。
(14)前記データ転送装置は、前記第1通信経路及び前記第2通信経路を介して他のデータ転送装置に接続され、
前記方法は、さらに、
前記複数の通信経路の一つから前記他のデータ転送装置に送信されるべきデータを受信すると、前記受信したデータの複製を作成する手順と、
前記受信したデータ及びその複製に、同一の前記シーケンス番号を付与する手順と、
前記受信したデータ及びその複製の一方に、前記第1通信経路に接続された前記他のデータ転送装置のインタフェースの識別子を宛先情報として付与し、前記受信したデータ及びその複製のもう一方に、前記第2通信経路に接続された前記他のデータ転送装置のインタフェースの識別子を宛先情報として付与する手順と、
前記シーケンス番号及び前記宛先情報が付与された、前記受信したデータ及びその複製を、前記第1通信経路及び前記第2通信経路を介して前記他のデータ転送装置に送信する手順と、を含むことを特徴とする(8)に記載の方法。