(57)【要約】【課題】物理リンクの帯域を超えるフローの送受信を行う。【解決手段】第２の通信装置は、端末との通信に用いる第１のポートと、第１の通信装置との通信に用いる複数の第２のポートを備える。第２の通信装置は、端末の通信先に、第１の通信装置を介して転送されるフレームである転送フレームを、端末から受信する。第２の通信装置は、転送フレームの送信元アドレス、宛先アドレス、および、送信元アドレスと宛先アドレスの組み合わせごとに転送フレームの順序を表す巡回番号を用いて、転送フレームの出力に用いるポートを識別する識別番号を計算する。第２の通信装置は、複数の第２のポートのうちの識別番号で識別されるポートから転送フレームを出力する。この処理により、第２の通信装置は、第１の通信装置のポートのうちの識別番号で識別されるポートを介して、転送フレームを第１の通信装置に転送する。【選択図】図１
2014183350.tif 000002
【特許請求の範囲】
【請求項１】
端末との通信に用いる第１のポートと、第１の通信装置との通信に用いる複数の第２のポートを備える第２の通信装置は、
前記端末の通信先に、前記第１の通信装置を介して転送されるフレームである転送フレームを、前記端末から受信し、
前記転送フレームの送信元アドレス、前記転送フレームの宛先アドレス、および、前記送信元アドレスと前記宛先アドレスの組み合わせごとに前記転送フレームの順序を表す巡回番号を用いて、前記転送フレームの出力に用いるポートを識別する識別番号を計算し、
前記複数の第２のポートのうちの前記識別番号で識別されるポートから前記転送フレームを出力することにより、前記第１の通信装置のポートのうちの前記識別番号で識別されるポートを介して、前記転送フレームを前記第１の通信装置に転送する
ことを特徴とする通信方法。
【請求項２】
前記第１の通信装置は、前記第２の通信装置から前記転送フレームを受信すると、前記転送フレームを受信した受信ポートを識別する番号である受信ポート番号と、前記転送フレームを対応付け、
前記送信元アドレス、前記宛先アドレス、および、前記受信ポート番号の組み合わせから、前記転送フレームの順序を予測し、
前記転送フレームの順序を、予測した順序に補正し、
前記転送先との通信に用いる第３のポートから前記転送フレームを、前記予測された順序で前記転送先に送信する
ことを特徴とする請求項１に記載の通信方法。
【請求項３】
前記第２の通信装置は、
前記送信元アドレス、前記宛先アドレス、および、前記巡回番号を組み合わせて得られる値をハッシュキーとして、ハッシュ関数を用いた演算を行い、
前記演算で得られた値を、前記複数の第２のポートの総数で割ったときに得られる剰余を、前記識別番号とする
ことを特徴とする請求項１または２に記載の通信方法。
【請求項４】
前記第１の通信装置は、
前記送信元アドレス、前記宛先アドレス、および、前記巡回番号の組み合わせと、前記ハッシュ関数から得られるハッシュ値を、前記複数の第２のポートの総数で割ったときに得られる剰余が、前記受信ポート番号に一致するように、前記巡回番号と前記受信ポート番号を対応付け、
第１の転送フレームを受信したポートの番号である第１の受信ポート番号から、前記第１の転送フレームに対応付けられた巡回番号の値である第１の値を予測し、
前記第１の転送フレームの次に前記第２の通信装置から送信される第２の転送フレームに割り当てられる巡回番号である第２の値を予測し、
前記第２の値に対応付けられた第２の受信ポート番号で識別されるポートから受信したフレームを、前記第２の転送フレームとする
ことを特徴とする請求項３に記載の通信方法。
【請求項５】
前記第１の通信装置は、
前記第１の転送フレームから２フレーム後に、前記第２の通信装置から送信される第３の転送フレームに割り当てられる巡回番号である第３の値を予測し、
前記第３の値に対応付けられた第３の受信ポート番号で識別されるポートから受信したフレームを、前記第２の転送フレームの次に前記第２の通信装置から送信される第３の転送フレームとし、
前記第２の受信ポート番号で識別されるポートから前記第２の転送フレームを受信する前に、前記第３の受信ポート番号で識別されるポートから前記第３の転送フレームを受信した場合、前記第２の転送フレームの前記通信先への送信が終わるまで、前記第３の転送フレームを前記通信先に出力せずに保持する
ことを特徴とする請求項４に記載の通信方法。
【請求項６】
端末から送信されたフレームを受信する第１の通信装置であって、
前記端末の通信先に第２の通信装置を介して転送されるフレームである転送フレームを、前記端末から受信する受信部と、
前記第２の通信装置への転送に使用する複数の転送ポートと、
前記転送フレームの送信元アドレスと前記転送フレームの宛先アドレスの組み合わせごとに発生させた巡回番号、前記送信元アドレス、前記宛先アドレスを用いて、前記転送フレームの出力に用いるポートを識別する識別番号の演算を行う演算部と、
前記複数の転送ポートのうちの前記識別番号で識別されるポートから前記転送フレームを出力することにより、前記第２の通信装置のポートのうちの前記識別番号で識別されるポートを介して、前記転送フレームを前記第２の通信装置に転送する転送部
を備えることを特徴とする通信装置。
【請求項７】
前記複数の転送ポートを介して前記第２の通信装置から、前記端末宛のデータを含むフレームである端末宛フレームを受信すると、前記端末宛フレームの送信元アドレスごとに前記端末宛フレームを振り分けて、前記端末宛フレームを受信した受信ポートを識別する識別情報と対応付ける振り分け部と、
前記端末宛フレームの送信元アドレス、前記端末宛フレームの宛先アドレス、および、前記識別情報の組み合わせから、前記端末宛フレームの順序を予測する予測部と、
前記端末宛フレームの順序を、予測された順序に補正する補正部と、
前記端末宛フレームを、前記予測された順序で前記端末に送信する送信部
を備えることを特徴とする請求項６に記載の通信装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の通信装置を含むネットワークで行われる通信に関する。
【背景技術】
【０００２】
リンクアグリゲーションを用いると、複数の物理的な回線（リンク）を束ねて１つの論理的な回線として扱うことができる。例えば、通信装置Ａと通信装置Ｂの間が、１Ｇｂｐｓ（bits per second）の帯域を持つ１０本の物理回線で接続されているとする。このとき、通信装置Ａと通信装置Ｂの間を接続する１０本の回線を、論理的に、１０Ｇｂｐｓの１本の回線として扱うことができる。
【０００３】
関連する技術として、ルータ同士が直接接続されており、その接続数が複数である場合のルーティング方法が提案されている。この方法では、フレームを受信したルータがヘッダ情報の１つ又は複数を抽出し、抽出された情報をキーとして、フレームの出力インタフェースを決定する。このため、キーとなる情報が同一のフレーム（同一のフロー）は同一のインタフェースから出力され、フレームの順序逆転を防ぐことができる。
【０００４】
２つのノード間に通信経路を指定する論理チャネルを複数設定し、送信ノードが伝送情報を複数のフレームに分割し、各フレームにシーケンス番号を付与して、複数の論理チャネルに分散させて伝送する方法も考案されている。受信ノードは、複数の論理チャネルに分散して伝送されたフレームを、シーケンス番号を用いて合成して、伝送された情報を復元する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０００−１３４３９号公報
【特許文献２】特開平６−２７６２３０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
リンクアグリゲーションを用いて論理的な帯域幅を広げても、フレームの送信に用いるリンクを、フレームの宛先と送信元に対応付けて一意に決定すると、フレームの宛先と送信元の組み合わせが同じであれば、同一のリンクに出力される。このため、リンクアグリゲーションで論理的に得られる帯域よりも狭い帯域で送受信できるフローであっても、物理的なリンクの帯域幅を超えるフローは送信できない。宛先と送信元の組み合わせが同じフローに含まれているフレームを複数の物理リンクに振り分けることができれば、物理リンクの帯域幅以上のフローを送信することができるが、物理リンクによって使用状況が異なるため、フレームの順序逆転が発生しうる。また、各フレームにシーケンス番号を付与する場合、シーケンス番号を格納する領域を各フレームに確保するために、端末から送信されるフレームのフォーマットを変更することになり、汎用性がないという問題がある。
【０００７】
本発明は、１つの側面では、物理リンクの帯域を超えるフローの送受信を汎用的に行うことを目的とする。
【課題を解決するための手段】
【０００８】
実施形態に係る通信方法は、端末、第１の通信装置と第２の通信装置の間の通信に関する。第２の通信装置は、端末との通信に用いる第１のポートと、第１の通信装置との通信に用いる複数の第２のポートを備える。第２の通信装置は、前記端末の通信先に、前記第１の通信装置を介して転送されるフレームである転送フレームを、前記端末から受信する。第２の通信装置は、前記転送フレームの出力に用いるポートを識別する識別番号を計算する。識別番号の計算には、前記転送フレームの送信元アドレス、前記転送フレームの宛先アドレス、および、前記送信元アドレスと前記宛先アドレスの組み合わせごとに前記転送フレームの順序を表す巡回番号が用いられる。第２の通信装置は、前記複数の第２のポートのうちの前記識別番号で識別されるポートから前記転送フレームを出力する。この処理により、第２の通信装置は、前記第１の通信装置のポートのうちの前記識別番号で識別されるポートを介して、前記転送フレームを前記第１の通信装置に転送する。
【発明の効果】
【０００９】
物理リンクの帯域を超えるフローを送受信できる。
【図面の簡単な説明】
【００１０】
【図１】実施形態にかかる通信方法の例を説明する図である。
【図２】ネットワークの例を示す図である。
【図３】通信装置の構成の例を示す図である。
【図４】インタフェース回路の構成の例を示す図である。
【図５】フレームのフォーマットの例を示す図である。
【図６】インタフェース回路で行われる処理の例を説明するタイミングチャートである。
【図７】シーケンス番号カウンタの例を示す図である。
【図８】ハッシュキーの生成例と出力ポート番号の計算例を示す図である。
【図９】シーケンス番号と出力ポートの対応テーブルの例を示す図である。
【図１０】インタフェース回路での処理の例を説明するフローチャートである。
【図１１】フレームを受信した受信処理回路の動作の例を説明するフローチャートである。
【図１２】受信処理回路の構成の例を示す図である。
【図１３】順序補正部の構成の例を示す図である。
【図１４】同期判定部の例を示す図である。
【図１５】シーケンス番号と受信ポートの関係の例を示すテーブルである。
【図１６】同期監視部の動作の例を説明するフローチャートである。
【図１７】同期が取れているかを判定する方法の例を説明するフローチャートである。
【図１８】補正部の例を示す図である。
【図１９】補正部とフレームバッファを用いて行われる処理の例を説明するテーブルである。
【図２０】タイミングチャートの例を示す図である。
【図２１】タイミングチャートの例を示す図である。
【図２２】タイミングチャートの例を示す図である。
【図２３】タイミングチャートの例を示す図である。
【図２４】補正部で行われる処理の例を説明するフローチャートである。
【発明を実施するための形態】
【００１１】
図１は、実施形態にかかる通信方法の例を説明する図である。通信装置１０ａと通信装置１０ｂは、いずれも、端末からフレームを受信し、受信フレームの宛先に向けて、受信フレームを転送する。通信装置１０ａと通信装置１０ｂは、リンク０〜リンク９までの１０本の物理リンクで接続されており、リンク０〜リンク９については、リンクアグリゲーションにより、論理的な１本のリンクとして取り扱われるものとする。さらに、通信装置１０ａと通信装置１０ｂの間の通信に使用されるポートの番号は、そのポートに接続されているリンクの番号と一致しているものとする。図１において、通信装置１０ａは、端末Ｘおよび端末Ｍと通信し、通信装置１０ｂは、端末Ｙおよび端末Ｎと通信するものとする。図１では、各フレームの送信元と宛先の組み合わせを分かりやすくするために、端末Ｘから端末Ｙ宛に送信されるフレームを、白抜きの四角で表し、端末Ｍから端末Ｎ宛に送信されるフレームを、点描を含む角が丸い四角で表す。
【００１２】
通信装置１０ａは、送信元と宛先の組み合わせごとに、巡回番号（シーケンス番号、sequence number、ＳＮ）を生成する。このため、図１に示すように、端末Ｘから端末Ｙに送信されるフレームと端末Ｍから端末Ｎに送信されるフレームとでは、別々にシーケンス番号が割り当てられる。ここで、シーケンス番号は、予め決められた特定の値の範囲を巡回するように決められる。図１の例では、送信元と宛先の各組み合わせに対し、０〜３の値のいずれかがシーケンス番号として割り当てられている。通信装置１０ａは、フレーム毎に、送信元アドレス、宛先アドレス、および、シーケンス番号の組み合わせをキーとして、ハッシュ関数を用いて、物理リンクの番号を求める。通信装置１０ａは、ハッシュ関数を用いて求められた番号に対応する物理リンクから、フレームを、通信装置１０ｂに向けて出力する。ここでは、端末Ｘから端末Ｙ宛のフレームは、ＳＮ＝０ならリンク８、ＳＮ＝１ならリンク２、ＳＮ＝２ならリンク４、ＳＮ＝３ならリンク５を介して通信装置１０ｂに送信されるものとする。また、端末Ｍから端末Ｎ宛のフレームは、ＳＮ＝０ならリンク７、ＳＮ＝１ならリンク０、ＳＮ＝２ならリンク９、ＳＮ＝３ならリンク１を介して通信装置１０ｂに送信されるものとする。
【００１３】
通信装置１０ｂは、通信装置１０ａが物理リンクの計算に使用するハッシュ関数を予め保持しており、図１に示すように、フレームの送信元、宛先、および、シーケンス番号の組み合わせごとに、通信に使用される物理リンクや受信ポートの番号を特定できる。そこで、通信装置１０ｂは、フレームの送信元と宛先の組み合わせごとに、フレームが入力されたポートの番号を特定し、フレームを送信された順序に並べ替える。例えば、通信装置１０ｂは、テーブル５ａに示す計算結果より、端末Ｘから端末Ｙに送信されるフレームは、シーケンス番号が０から３の順に、リンク８、リンク２、リンク４、リンク５から入力されてくると認識する。そこで、通信装置１０ｂは、端末Ｘから端末Ｙ宛のフレームを、リンク８からの受信フレーム、リンク２からの受信フレーム、リンク４からの受信フレーム、リンク５からの受信フレームの順に送信されたものとして、端末Ｙに送信する。同様に、通信装置１０ｂは、端末Ｍから端末Ｎ宛のフレームを、テーブル５ｂを用いて、リンク７からの受信フレーム、リンク０からの受信フレーム、リンク９からの受信フレーム、リンク１からの受信フレームの順に送信されたものとして、端末Ｎに送信する。
【００１４】
このように、実施形態に係る通信装置１０は、複数の物理リンクに分けて送信されたフレームについて、送信元、宛先、フレームの入力ポート番号を用いて、送信された順序を特定することができる。このため、実施形態に係る通信装置１０は、複数の物理リンクを用いてフレームを送受信しても、フレームの順序逆転の発生を防ぐことができる。従って、通信装置１０は、個々の物理リンクの帯域を超えた帯域幅で行われる通信も中継することができる。さらに、実施形態にかかる方法では、フレームにシーケンス番号が含まれていない。このため、端末間で送受信に使用するフレームのフォーマットを変更しなくても、物理リンク以上の帯域幅の通信の中継が可能である。
【００１５】
＜装置構成＞
図２は、ネットワークの例を示す図である。通信システムは、通信装置１０ａ、通信装置１０ｂ、端末を含む。図２では、端末Ｘ、端末Ｙ、端末Ｍ、端末Ｎの４台が明記されているが、ネットワーク中に含まれる端末の数は任意である。通信装置１０ａと通信装置１０ｂは、物理リンク１１（１１ａ〜１１ｃ）を介して直接接続されている。また、物理リンク１１ａ〜１１ｃは、リンクアグリゲーションにより、論理的に１本のリンクとして扱われるものとする。なお、物理リンク１１の数は、任意の２以上の数から実装に応じて選択されるものとする。
【００１６】
図３は、通信装置１０の構成の例を示す。通信装置１０は、インタフェース回路（ＩＦ）２０（２０ａ〜２０ｄ）、プロセッサ３０、バス３５（３５ａ、３５ｂ）、スイッチ４０、受信処理回路５０、インタフェース回路９０（９０ａ〜９０ｃ）を備える。なお、図３では、インタフェース回路２０とインタフェース回路９０の区別を容易にするために、ネットワーク側のインタフェース回路９０は、ＩＦ（ＮＷ）としている。スイッチ４０は、端末側のポート（ｃ０〜ｃｙ）とネットワーク側のポート（ｎ０〜ｎｘ）を備えている。以下、端末側のポートを表す場合は、アルファベットのｃに続けて、そのポートに割り当てられているポート番号を記載する。例えば、端末側の２番ポートはｃ２と表記する。同様に、ネットワーク側のポートを表す場合は、アルファベットのｎに続けて、そのポートに割り当てられているポート番号を記載する。例えば、ネットワーク側の３番ポートはｎ３と表記する。ここで、ネットワーク側のポートの数は、物理リンク１１の数と等しいものとする。また、以下の説明では、物理リンク１１のリンクの番号と、物理リンク１１への出入力に用いられるポートの番号は等しいものとする。例えば、通信装置１０ａがネットワーク側の２番のポート（ｎ２）に出力したフレームは、リンク２を介して通信装置１０ｂに送信される。
【００１７】
インタフェース回路２０は、端末との間でフレームを送受信する。また、インタフェース回路２０は、端末から受信したフレームを、ネットワーク側のどのポートから出力するかを決定する。インタフェース回路２０は、フレームの出力ポートを識別する情報とともに、フレームをスイッチ４０に出力する。スイッチ４０は、インタフェース回路２０から通知された情報に従って、フレームをネットワーク側のポートから出力する。その結果、フレームは、送信側の通信装置１０のネットワーク側の出力ポートに接続されているインタフェース回路９０を介して、受信側の通信装置１０に送信される。
【００１８】
プロセッサ３０は、通信装置１０の管理や運用に関する処理を行う。インタフェース回路９０は、物理リンク１１を介してフレームを送受信する。インタフェース回路９０は、受信したフレームを受信処理回路５０に出力する。受信処理回路５０は、受信したフレームを、送信された順番に並べ替える。また、受信処理回路５０は、送信側の通信装置１０と受信側の通信装置１０の間で同期が取れているかを判定する。さらに、受信処理回路５０は、フレームの宛先に応じて、フレームの出力先となる端末側のポートの情報を、受信フレームとともに、スイッチ４０に出力する。スイッチ４０は、受信処理回路５０から通知された情報に従って、受信フレームを端末側のポートからインタフェース回路２０に出力する。
【００１９】
インタフェース回路２０、スイッチ４０、受信処理回路５０において行われる処理については、後述する。バス３５ａは、インタフェース回路２０、スイッチ４０、プロセッサ３０を、相互にデータの受け渡しが行えるように接続する。また、バス３５ｂは、インタフェース回路９０、受信処理回路５０、プロセッサ３０を、相互にデータの受け渡しが行えるように接続する。
【００２０】
＜送信処理＞
以下、通信装置１０ａが端末から受信したフレームを、通信装置１０ｂに送信する場合を例として、通信装置１０で行われる送信処理について詳しく説明する。
【００２１】
図４は、インタフェース回路２０の構成の例を示す。インタフェース回路２０は、送受信部２１、フレーム先頭検出部２２、遅延生成部２３、タイミング生成部２４、メモリ２５、抽出部２６、ポート番号演算部２７、出力部２８を備える。送受信部２１、フレーム先頭検出部２２、遅延生成部２３、タイミング生成部２４、メモリ２５、抽出部２６、ポート番号演算部２７、出力部２８は、それぞれ、ハードウェアで形成されても良い。また、インタフェース回路２０が、プロセッサを備えている場合は、プロセッサが、フレーム先頭検出部２２、遅延生成部２３、タイミング生成部２４、抽出部２６、ポート番号演算部２７として動作しても良い。
【００２２】
送受信部２１は、端末と通信装置１０の間の回線を終端し、端末との間でフレームを送受信する。送受信部２１は、端末から受信したフレームをフレーム先頭検出部２２と遅延生成部２３に出力する。フレーム先頭検出部２２は、フレームの先頭を検出すると、フレームの先頭を検出したことをタイミング生成部２４に通知する。タイミング生成部２４は、内部にカウンタを保持しており、カウンタを用いて、メモリ２５、抽出部２６、出力部２８にフレームや情報が入力されるタイミングを計測する。タイミング生成部２４は、フレーム先頭検出部２２からの通知を受けた時刻を、タイミングの計測の基準とする。タイミング生成部２４が出力する信号とタイミングの例については、後述する。
【００２３】
遅延生成部２３は、送受信部２１から入力されたフレームについて、所定の遅延を加えて、メモリ２５と抽出部２６に出力する。メモリ２５は、遅延生成部２３から入力されたフレームを保持し、タイミング生成部２４から通知されたタイミングで、保持しているフレームを、出力部２８に出力する。このため、メモリ２５はデュアルポートメモリで実現されてもよい。抽出部２６は、遅延生成部２３から入力されたフレームから、送信元アドレスと宛先アドレスを抽出して、ポート番号演算部２７に出力する。また、抽出部２６は、フレームの送信元アドレスと宛先アドレスに対応付けて、シーケンス番号を生成して、ポート番号演算部２７に出力する。ポート番号演算部２７は、ハッシュ関数を予め記憶しており、送信元アドレス、宛先アドレス、および、シーケンス番号の組み合わせをキーとして、ハッシュ関数を用いて、出力先のネットワーク側のポート番号を計算する。従って、ポート番号演算部２７は、フレームの出力ポートを、ネットワーク側のポートの中から選択しているといえる。ポート番号の求め方については後述する。ポート番号演算部２７は、得られた計算結果を、出力部２８に出力する。出力部２８は、入力された情報とフレームを、スイッチ４０に出力する。
【００２４】
図５は、フレームのフォーマットの例を示す。図６は、インタフェース回路２０で行われる処理の例を説明するタイミングチャートである。以下、図５（ａ）に示すフレームが端末Ｘから通信装置１０ａに送信された場合を例として、送信側の通信装置１０ａの動作の例を説明する。なお、以下の手順の番号は、図６に付した番号と対応している。
【００２５】
（１）通信装置１０ａの送受信部２１は、図５（ａ）に示すフォーマットのフレームを受信する。図５（ａ）に示すフレームは、先頭から、プリアンブル、送信元アドレス（source address、ＳＡ）、宛先アドレス（destination address、ＤＡ）、タイプ、データ、Frame Check Sequence（ＦＣＳ）を含む。図５において括弧の中に書かれた数字は、各情報の長さをバイト単位で示している。送受信部２１は、受信したフレームを、遅延生成部２３とフレーム先頭検出部２２に出力する。フレーム先頭検出部２２と遅延生成部２３には、図６の（１）に示すタイミングでフレームが入力される。
【００２６】
（２）遅延生成部２３は、フレーム先頭検出部２２から入力されたフレームのタイミングを、予め決められた所定の時間分だけ遅らせる。以下の説明では、遅延生成部２３は、入力されたフレームについて、１バイト分の遅延を発生させるものとする。遅延生成部２３は、遅延を加えた後のフレームを、メモリ２５と抽出部２６に出力する。従って、メモリ２５と抽出部２６には、図６の（２）に示すタイミングでフレームが入力される。
【００２７】
（３）フレーム先頭検出部２２は、送受信部２１から入力されたフレームの先頭を検出する。フレーム先頭検出部２２は、フレームの先頭を検出すると、フレームのプリアンブルの先頭の１バイトが入力されるタイミングで、パルス信号（フレーム先頭表示パルス）を発生させる。フレーム先頭検出部２２は、フレーム先頭表示パルスを、タイミング生成部２４に出力する。
【００２８】
（４）タイミング生成部２４は、フレーム先頭検出部２２からフレーム先頭表示パルスが入力されるまで、カウンタのカウント値を初期化（カウント値＝０）して待機する。タイミング生成部２４は、フレーム先頭表示パルスが入力されると、カウンタ値のカウントアップを開始する。タイミング生成部２４は、フレーム先頭表示パルスの立下りのタイミングで、カウント値を１つインクリメントし、その後もフレームが１バイト読み込まれるタイミングでカウント値をインクリメントする。従って、タイミング生成部２４でのカウント値は、メモリ２５や抽出部２６に読み込まれているフレームのバイト数と一致する。タイミング生成部２４は、フレームの先頭が検出されたときから、メモリ２５がフレームを出力部２８に出力し始めるまで、カウントアップを継続する。
【００２９】
（５）タイミング生成部２４は、カウント値が８になると、抽出部２６でのプリアンブルの読み込みが終わったと判定する。そこで、タイミング生成部２４は、カウント値が９〜１４の間、抽出部２６に、送信元アドレスが入力されていることを示すパルスを出力する。以下、送信元アドレスが入力されていることを示すパルスのことを、「ＳＡタイミングパルス」と記載することがある。抽出部２６は、ＳＡタイミングパルスの立ち上がりから立下りまでの間に入力された値を、フレームの送信元アドレスとして抽出する。
【００３０】
（６）タイミング生成部２４は、カウント値が１４になると、抽出部２６での送信元アドレスの読み込みが終わったと判定する。そこで、タイミング生成部２４は、カウント値が１５〜２０の間、抽出部２６に、宛先アドレスが入力されていることを示すパルスを出力する。以下、宛先アドレスが入力されていることを示すパルスのことを、「ＤＡタイミングパルス」と記載することがある。抽出部２６は、ＤＡタイミングパルスの立ち上がりから立下りまでの間に入力された値を、フレームの宛先アドレスとして抽出する。
【００３１】
（７）抽出部２６は、送信元アドレスと宛先アドレスの組み合わせに対応付けて、送信されたフレーム数をカウントする。図７は、シーケンス番号カウンタの例を示す。抽出部２６は、予め、シーケンス番号の最小値と最大値を保持しており、フレームを受信すると、受信フレームの送信元アドレスと宛先アドレスに対応付けられたカウンタ値を１つインクリメントする。また、カウント値がシーケンス番号の最大値になっている送信元アドレスと宛先アドレスの組み合わせについては、送信元アドレスと宛先アドレスが同じフレームを次に受信すると、抽出部２６は、シーケンス番号を最小値に変更する。例えば、図７に示すカウンタを保持している場合であり、かつ、シーケンス番号が０〜３である場合、抽出部２６は、送信元アドレス＝xxxxxxxxxxxxxxxx、宛先アドレス＝yyyyyyyyyyyyのフレームが入力されると、対応するカウント値を０にする。抽出部２６は、シーケンス番号カウンタで示されているカウント値を、シーケンス番号として使用する。
抽出部２６は、送信元アドレスと宛先アドレスの抽出が終わると、送信元アドレス、宛先アドレス、および、シーケンス番号を用いて、ハッシュキーを生成する。ハッシュキーは、例えば、宛先アドレスの次に、送信元アドレスを続け、最後にシーケンス番号をつなげた数列として求められる。
送信元アドレス        ：0x112233445566、
宛先アドレス          ：0x0A0B0C0D0E0F、
シーケンス番号の範囲  ：00〜03
の場合のハッシュキーの生成例を図８（ａ）の左の列に示す。図８（ａ）の左の列では、上から、シーケンス番号が００、０１、０２、０３の順にハッシュキーを示している。抽出部２６は、得られたハッシュキーをポート番号演算部２７に出力する。抽出部２６がハッシュキーをポート番号演算部２７に出力するタイミングは、図６に示すように、宛先アドレスの最後の１バイトの読み込みと並行したタイミングとすることができる。
【００３２】
（８）ポート番号演算部２７は、予め記憶しているハッシュ関数でハッシュキーを処理する。以下の例では、ポート番号演算部２７は、Message Digest Algorithm 5（ＭＤ５）を用いた演算を行うものとする。ポート番号演算部２７は、ハッシュキーに対してＭＤ５演算を行うことにより、１２８ビットのダイジェストを生成する。図８（ａ）の右の列は、図８（ａ）の左の列のハッシュキーを用いたときに得られるダイジェスト（ＭＤ５値）の例である。
次に、ポート番号演算部２７は、得られたダイジェストを、スイッチ４０に含まれているネットワーク側のポート数で割ったときの余りを求める。シーケンス番号＝ｘに対応するＭＤ５値をＭｘ、出力ポートが０からｎ−１のｎ本であるとき、シーケンス番号＝ｘである入力フレームを出力するポートの番号Ｐｏｕｔｘは、以下の式から求められる。
Ｐｏｕｔｘ ＝ Ｍｘ ｍｏｄ ｎ
ここで、ｍｏｄは、剰余関数である。図８（ｂ）は、図８（ａ）に示す値に対して、出力ポートの総数ｎが１０である場合に得られる出力ポートの番号を示す。
ポート番号演算部２７は、出力ポート番号の計算が終わると、予め、ハッシュキーが入力された時刻を基準として決められたタイミングで出力部２８に、演算結果を出力する。図６の例では、ポート番号演算部２７は、タイミング生成部２４でのカウント値＝２０でハッシュキーを取得し、カウント値＝２１で出力ポートを出力部２８に出力する。
【００３３】
（９）タイミング生成部２４は、ポート番号演算部２７が演算結果を出力部２８に出力するタイミングを、出力部２８に通知する。出力部２８は内部にセレクタを備えている。出力部２８は、タイミング生成部２４から通知されるタイミングで、ポート番号演算部２７からの出力を出力部２８に入力できるように、出力部２８内のセレクタを調整する。さらに、ポート番号演算部２７からのポート番号の入力が終わると、出力部２８は、メモリ２５からの出力を出力部２８に入力できるように、セレクタを再度調整する。図６の例では、ポート番号演算部２７は、ポート番号を１バイトの情報として出力部２８に出力するものとする。従って、タイミング生成部２４のカウンタ値＝２１の間、出力部２８は、ポート番号演算部２７からの入力を受け付ける。タイミング生成部２４のカウンタ値が２２になると、出力部２８は、メモリ２５からの入力を受け付ける。
【００３４】
（１０）タイミング生成部２４は、ポート番号演算部２７が演算によって得たポート番号を出力部２８に出力し終わるタイミングを、メモリ２５に通知し、フレームの出力を促す。このため、出力部２８からスイッチ４０に出力されるフレームは、最初の１バイトが、フレームの出力ポート番号（Ｐｏｕｔ）であり、２バイト目以降は通信装置１０が端末から受信したフレームとなる。出力部２８で得られるフレームのフォーマットの例を、図５（ｂ）に示す。
【００３５】
（１１）出力部２８は、得られたフレームを、スイッチ４０に出力する。例えば、手順（１）〜（１０）の処理がインタフェース回路２０ａで行われているとして、図３を参照しながら説明する。この場合、フレームはスイッチ４０のｃ０のポートに出力される。スイッチ４０は、インタフェース回路２０からフレームを取得すると、フレームの先頭の１バイトで表された値と同じ番号が割り当てられているネットワーク側のポートに、フレームを出力する。例えば、図８（ｂ）に示すテーブルでは、シーケンス番号＝０のフレームの出力ポート番号はＰｏｕｔ＝１であるので、フレームの１バイト目は１を示す。そこでスイッチ４０は、シーケンス番号＝０のフレームをｎ１のポートに出力する。
【００３６】
（１２）インタフェース回路９０ｂは、スイッチ４０からフレームを取得する。すると、インタフェース回路９０ｂは、先頭の１バイトを削除した上で、物理リンク１１ｂを介して、フレームを通信装置１０ｂに送信する。
【００３７】
図９は、シーケンス番号と出力ポートの対応テーブルの例を示す。ポート番号演算部２７は、演算で得られた結果を対応テーブルとして記憶することができる。なお、手順（１）〜（１２）では、理解しやすくするために、送信元アドレスと宛先アドレスの組み合わせのうちの１セットについての処理を説明したが、並行して複数のアドレスの組み合わせについて、出力ポートが計算されることもある。そこで、ポート番号演算部２７は、図９に示すように、送信元アドレスと宛先アドレスの組み合わせに対応付けて、シーケンス番号と出力ポートの対応を記憶することができる。
【００３８】
図１０は、インタフェース回路２０での処理の例を説明するフローチャートである。送受信部２１は、フレームを受信する（ステップＳ１）。次に、タイミング生成部２４から通知されるタイミングに従って、抽出部２６は、フレームの送信元アドレスと宛先アドレスを抽出する（ステップＳ２）。抽出部２６は、送信元アドレスと宛先アドレスに、シーケンス番号を組み合わせてハッシュキーを生成する（ステップＳ３）。抽出部２６は、ハッシュキーをポート番号演算部２７に出力する。ポート番号演算部２７はハッシュ関数を用いて、出力ポートの番号（Ｐｏｕｔ）を計算し、得られたＰｏｕｔを出力部２８に出力する（ステップＳ４）。メモリ２５は、タイミング生成部２４から指定されたタイミングでフレームを出力部２８に出力する（ステップＳ５）。図１０に示す処理により、図５（ｂ）に示すように、先頭の１バイトにＰｏｕｔを保持したフレームがスイッチ４０に出力される。
【００３９】
＜受信処理＞
以下、通信装置１０ｂが通信装置１０ａからフレームを受信する場合の処理を例として、通信装置１０で行われる受信処理について詳しく説明する。通信装置１０ｂは、通信装置１０ａからのフレームを、インタフェース回路９０のポートから受信する。なお、通信装置１０には、通信装置１０に備えられているネットワーク側のポートごとに１つのインタフェース回路９０が設置されているものとする。ここで、各インタフェース回路９０が接続されているポートには、ポート番号が割り当てられている。以下の説明では、インタフェース回路９０が接続されているポートのポート番号は、そのポートに接続されている物理リンク１１の番号と同じ値であるものとする。
【００４０】
通信装置１０ｂのインタフェース回路９０は、回線を終端し、通信装置１０ａから受信したフレームを取得する。このとき、インタフェース回路９０が受信するフレームは、送信側の通信装置１０ａから送信されてくるフレームであるので、フォーマットは図５（ａ）の通りである。インタフェース回路９０は、受信したフレームの先頭に、インタフェース回路９０のポート番号を付加する。以下、フレームを受信したネットワーク側のポート番号のことを「Ｐｉｎ」と記載することがある。インタフェース回路９０で行われるポート番号の付加方法は、送信処理の際にインタフェース回路２０でＰｏｕｔを付加するために行われる処理と同様である。また、ポート番号は、１バイトで表現されるものとする。インタフェース回路９０においてポート番号Ｐｉｎが付加されたときのフレームのフォーマットを図５（ｃ）に示す。インタフェース回路９０は、ポート番号Ｐｉｎを付したフレームを、受信処理回路５０に出力する。
【００４１】
図１１は、フレームを受信した受信処理回路５０の動作の例を説明するフローチャートである。まず、通信装置１０ｂの受信処理回路５０は、通信装置１０ａと通信装置１０ｂの間での同期が取れているかを判定するために、フレームを受信するポート番号を正しく予測できた回数をカウントする（ステップＳ１１）。次に、受信処理回路５０は、フレームを受信するポート番号を正しく予測できた回数が閾値を超えたかを判定することにより、通信装置１０ａと通信装置１０ｂが同期しているかを判定する（ステップＳ１２）。受信処理回路５０は、通信装置１０ａと通信装置１０ｂの間で同期が取れている場合は、受信フレームを、スイッチ４０に出力する。このとき、受信処理回路５０は、フレームの順序逆転が起こっていれば、フレームの順序を正しい順序に補正してから、スイッチ４０に出力する（ステップＳ１３）。
【００４２】
図１２は、受信処理回路５０の構成の例を示す。受信処理回路５０は、振り分け部５１（５１ａ〜５１ｃ）と順序補正部５２（５２ａ〜５２ｅ）を有する。図１２の例では、振り分け部５１は５１ａ〜５１ｃの３つが記載されているが、通信装置１０は、ネットワーク側のポート数と同数の振り分け部５１を備えているものとする。また、順序補正部５２は、通信装置１０ｂが処理するフレームについての、送信元アドレスと宛先アドレスの組合せの数と同数あるものとする。
【００４３】
各振り分け部５１は、１つのインタフェース回路９０から、ポート番号Ｐｉｎを含むフレームを取得する。振り分け部５１は、取得したフレームの送信元アドレスと宛先アドレスを取得し、送信元アドレスと宛先アドレスの組合せに応じた順序補正部５２に出力する。振り分け部５１から出力されたフレームは、送信元アドレスと宛先アドレスの組合せごとに１つの順序補正部５２で処理される。
【００４４】
図１３は、順序補正部５２の構成の例を示す。順序補正部５２は、同期判定部６０、補正部７０、フレームバッファ８０、ポート指定部８５を備える。振り分け部５１から出力されたフレームは、同期判定部６０とフレームバッファ８０に入力される。なお、同期判定部６０、補正部７０、フレームバッファ８０、ポート指定部８５は、それぞれ、ハードウェアで形成されても良い。また、受信処理回路５０にプロセッサが含まれている場合、プロセッサが、振り分け部５１、同期判定部６０、補正部７０、ポート指定部８５を実現しても良い。
【００４５】
同期判定部６０は、処理対象の送信元アドレスと宛先アドレスの組合せについて、通信装置１０ａから送信されたフレームの順番を、通信装置１０ｂが正しく予測できる状態かを判定する。以下の説明では、送信側の通信装置１０ａから送信されたフレームの順番を、受信側の通信装置１０ｂが正しく予測できる状態にあることを、通信装置１０ａと通信装置１０ｂが同期していると記載することがある。また、同期状態を「ＩＳ」（ｉｎ  ｓｙｎｃ）と記載することがある。さらに、同期はずれ状態を「ＯＯＳ」（Ｏｕｔ  Ｏｆ  ｓｙｎｃ）と記載することがある。同期しているかの判定方法については後述する。
【００４６】
同期判定部６０は、通信装置１０ａと通信装置１０ｂが同期しているかの判定結果を、補正部７０に通知する。補正部７０は、通信装置１０ａと通信装置１０ｂが同期している場合、フレームを端末から送信された順序に補正する処理を行う。補正部７０は、フレームの先頭に付されているポート番号Ｐｉｎを用いてフレームを送信順序どおりに補正する。従って、補正部７０は、フレームの順序逆転が起こっている場合にフレームの順序を補正する。補正部７０は、フレームバッファ８０に、入力されたフレームの２バイト目以降を格納するように制御信号を出力する。フレームバッファ８０は、補正部７０からの信号に従って、フレームの２バイト目以降を格納し、さらに、補正部７０からの信号に従って、格納しているフレームをスイッチ４０に出力する。補正部７０は、ポート指定部８５にも、出力のタイミングを指定する。
【００４７】
補正部７０は、ポート指定部８５に、フレームバッファ８０から出力されるフレームの先頭に１バイト分の情報を付加できるようにタイミングを調整して、制御信号を出力する。ここでのタイミングの制御方法は、送信の際にＰｏｕｔをフレームの先頭に付加する場合と同様に行われる。ポート指定部８５は、宛先アドレスに応じたフレームの出力先のポートの番号（Ｐｔｒ）を保持している。ポート指定部８５は、補正部７０からの制御信号に応じて、フレームの出力先となるポートの番号を１バイトの情報としてスイッチ４０に出力する。ポート指定部８５から出力された情報に続けて、フレームバッファ８０から読み出されるフレームがスイッチ４０に出力される。このため、補正部７０、フレームバッファ８０、およびポート指定部８５の処理により、図５（ｃ）に示す入力フレームは、図５（ｄ）に示すフレームに変換される。補正部７０などの処理については、後で詳しく説明する。
【００４８】
図１４は、同期判定部６０の例を示す図である。同期判定部６０は、入力ポート特定部６１、比較部６２、予測部６３、比較部６４、同期監視部６５、判定部６６を備える。図１４は、２つの連続したフレームの順序の入れ替えを修正できる通信装置１０に備えられている同期判定部６０の例である。
【００４９】
入力ポート特定部６１は、同期判定部６０に入力されたフレームの先頭の１バイトを取得し、得られた値を比較部６２、予測部６３、および、比較部６４に出力する。すなわち、入力ポート特定部６１は、入力されたフレームを受信したネットワーク側のポート番号（Ｐｉｎ）を比較部６２、予測部６３、および、比較部６４に出力する。
【００５０】
予測部６３は、送信側の通信装置１０ａで使用されているハッシュ関数を記憶している。予測部６３は、送信元アドレス、宛先アドレス、および、通信に使用される可能性のあるシーケンス番号を用いて、ハッシュキーを生成する。予測部６３は、ハッシュキーとハッシュ関数を用いて演算を行い、さらに、得られた結果の値に送信側の通信装置１０ａと同じ演算処理をすることにより、シーケンス番号ごとに受信ポート（Ｐｉｎ）の予測値を求める。図１５は、フレームのシーケンス番号と受信ポート（Ｐｉｎ）の関係の例を示す。図１５は、送信元アドレス＝0x112233445566、宛先アドレス＝0x0A0B0C0D0E0Fであって、シーケンス番号の範囲が００〜０３の場合についての、フレームのシーケンス番号と受信ポート（Ｐｉｎ）の関係の例である。予測部６３は、入力ポート特定部６１から通知された値から、現在入力されたフレームのシーケンス番号を特定する。予測部６３は、特定したシーケンス番号よりも１つ大きいシーケンス番号のフレームを受信すると予測するポートの番号（Ｐｎｘ１）を比較部６２に出力する。また、予測部６３は、特定したシーケンス番号よりも２つ大きいシーケンス番号のフレームを受信すると予測するポートの番号（Ｐｎｘ２）を比較部６４に出力する。なお、予測部６３は、比較部６４において比較結果が一致した場合は、Ｐｎｘ１とＰｎｘ２の値を更新しない。ここで、予測部６３は、順序逆転フラグを保持するものとする。順序逆転フラグ＝１の場合、受信フレームの順序の逆転により、予測部６３が新たなポート番号を比較部６２および比較部６４に出力していないことを示す。順序逆転フラグ＝０は、受信フレームの逆転が発生していないため、Ｐｎｘ１とＰｎｘ２の値を更新していることを示す。
【００５１】
比較部６２および比較部６４は、予測部６３から入力された値を保持する。比較部６２は、入力ポート特定部６１から、フレームの受信ポート番号（Ｐｉｎ）として通知された値を、前回のフレームの処理のときに予測部６３から入力された値（Ｐｎｘ１）と比較する。言い換えると、比較部６２は、フレームの受信ポートの予測に成功しているかを判定する。比較部６２でＰｉｎ＝Ｐｎｘ１と判定されることは、フレームの受信ポートの予測が正しいことを示す。
【００５２】
一方、比較部６４は、入力ポート特定部６１から、フレームの受信ポート番号（Ｐｉｎ）として通知された値を、前回のフレームの処理のときに予測部６３から入力された値（Ｐｎｘ２）と比較する。言い換えると、比較部６４は、受信したフレームと次に受信するフレームとの間で順序の逆転が発生しているかを判定する。比較部６４でＰｉｎ＝Ｐｎｘ２と判定されることは、フレームの順序逆転が起こっていることを示す。
【００５３】
なお、初期値としては、比較部６２には、シーケンス番号＝０のフレームを受信すると予測されるポート番号が予測部６３から通知される。一方、比較部６４には、シーケンス番号＝１のフレームを受信すると推定されるポートの番号が通知されているものとする。比較部６２は、比較結果を、同期監視部６５と補正部７０に出力する。比較部６４は、比較結果を予測部６３と補正部７０に出力する。以下、比較部６２で得られた比較結果をｍａｔｃｈ＿１、比較部６４で得られた比較結果をｍａｔｃｈ＿２とする。また、比較結果が一致した場合は「ＯＫ」、不一致である場合は「ＮＧ」で表す。
【００５４】
例えば、予測部６３は、図１５を用いて、比較部６２にＰｎｘ１＝１、比較部６４にＰｎｘ２＝０を通知したとする。また、最初に同期判定部６０に入力されたフレームは、Ｐｉｎ＝１であるとする。すると、入力ポート特定部６１は、比較部６２、予測部６３、比較部６４の各々に、Ｐｉｎ＝１を通知する。このため、比較部６２は、最初のフレームについては、ＰｉｎとＰｎｘ１がいずれも１なので、ＰｉｎはＰｎｘ１と一致すると判定する。比較部６２は、ｍａｔｃｈ＿１＝ＯＫを同期監視部６５と補正部７０に出力する。一方、比較部６４は、最初のフレームについて、Ｐｉｎ＝１かつＰｎｘ２＝０であるため、ＰｉｎはＰｎｘ２と一致しないと判定する。比較部６４は、ｍａｔｃｈ＿２＝ＮＧを予測部６３と補正部７０に出力する。予測部６３は、ｍａｔｃｈ＿２＝ＮＧが得られたので、新たなＰｎｘ１とＰｎｘ２を予測する。予測部６３は、Ｐｉｎ＝１より入力されたフレームのシーケンス番号は０であると推定する。そこで、予測部６３は、シーケンス番号＝１に対応付けられているポート番号の値をＰｎｘ１とする。同様に、予測部６３は、シーケンス番号＝２に対応付けられているポート番号の値をＰｎｘ２とする。従って、図１５の例では、Ｐｎｘ１＝０、Ｐｎｘ２＝３とする。予測部６３は、比較部６２にＰｎｘ１＝０を通知し、比較部６４にＰｎｘ２＝３を通知する。
【００５５】
次に同期判定部６０に入力されたフレームは、Ｐｉｎ＝３であるとする。入力ポート特定部６１は、比較部６２、予測部６３、比較部６４の各々に、Ｐｉｎ＝３を通知する。比較部６２は、Ｐｉｎ＝３かつＰｎｘ１＝０であるため、ＰｉｎとＰｎｘ１が一致しないと判定する。そこで、比較部６２は、ｍａｔｃｈ＿１＝ＮＧを同期監視部６５と補正部７０に出力する。一方、比較部６４は、ＰｉｎとＰｎｘ２がいずれも３なので、ＰｉｎとＰｎｘ２が一致すると判定し、ｍａｔｃｈ＿２＝ＯＫを、予測部６３と補正部７０に出力する。予測部６３は、ｍａｔｃｈ＿２＝ＯＫが通知されたため、新たなＰｎｘ１とＰｎｘ２を予測しない。このとき、予測部６３は、順序逆転フラグ＝１に設定する。
【００５６】
３番目に同期判定部６０に入力されたフレームは、Ｐｉｎ＝０であるとする。すると、入力ポート特定部６１は、比較部６２、予測部６３、比較部６４の各々に、Ｐｉｎ＝０を通知する。すると、比較部６２は、ＰｉｎとＰｎｘ１のいずれも０であるので、Ｐｉｎ＝Ｐｎｘ１であると判定する。そこで、比較部６２は、ｍａｔｃｈ＿１＝ＯＫを同期監視部６５と補正部７０に出力する。一方、比較部６４は、Ｐｉｎ＝０、Ｐｎｘ２＝３なので、ＰｉｎとＰｎｘ２が一致しないと判定し、ｍａｔｃｈ＿２＝ＮＧを予測部６３と補正部７０に出力する。予測部６３は、ｍａｔｃｈ＿２＝ＮＧが得られたので、新たなＰｎｘ１とＰｎｘ２を予測する。このとき、予測部６３は、順序逆転フラグ＝１であるので、受信フレームの順序逆転により、前回のフレームの受信の際に、比較部６２と比較部６４にＰｎｘ１とＰｎｘ２の値を通知していないと判定する。順序逆転フラグ＝１の場合、予測部６３は、今回受信したフレームのシーケンス番号の２つ後のシーケンス番号に対応付けられた値を新たなＰｎｘ１とし、今回受信したフレームのシーケンス番号の３つ後のシーケンス番号に対応付けられた値を新たなＰｎｘ２とする。予測部６３は、Ｐｉｎ＝０より入力されたフレームのシーケンス番号は１であると推定する。そこで、予測部６３は、Ｐｎｘ１をシーケンス番号＝３に対応付けられたポート番号であると推定するので、Ｐｎｘ１＝８を比較部６２に通知する。同様に、予測部６３は、Ｐｎｘ２をシーケンス番号＝０に対応付けられたポート番号であると推定するので、Ｐｎｘ２＝１を比較部６４に通知する。さらに、予測部６３は、順序逆転フラグを０に設定する。
【００５７】
４番目に同期判定部６０に入力されたフレームは、Ｐｉｎ＝８であるとする。すると、入力ポート特定部６１は、比較部６２、予測部６３、比較部６４の各々に、Ｐｉｎ＝８を通知する。比較部６２は、ＰｉｎとＰｎｘ１のいずれも８であるので、Ｐｉｎ＝Ｐｎｘ１であると判定する。そこで、比較部６２は、ｍａｔｃｈ＿１＝ＯＫを同期監視部６５と補正部７０に出力する。一方、比較部６４は、Ｐｉｎ＝８、Ｐｎｘ２＝１なので、ＰｉｎとＰｎｘ２が一致しないと判定し、ｍａｔｃｈ＿２＝ＮＧを予測部６３と補正部７０に出力する。予測部６３は、ｍａｔｃｈ＿２＝ＮＧが得られたので、新たなＰｎｘ１とＰｎｘ２を予測する。なお、このときは、順序逆転フラグ＝０であるので、予測部６３は、今回受信したフレームのシーケンス番号の１つ後のシーケンス番号に対応付けられた値を新たなＰｎｘ１とする。さらに、予測部６３は、今回受信したフレームのシーケンス番号の２つ後のシーケンス番号に対応付けられた値を新たなＰｎｘ２とする。
【００５８】
次に、比較部６２から出力された判定結果を用いて、同期が取れているかを判定する方法について説明する。同期が取れているかの判定処理は、同期監視部６５と判定部６６で行われる。
【００５９】
同期監視部６５は、判定部６６での判定結果を取得する。同期監視部６５は、判定部６６での判定結果が同期はずれの場合は、比較部６２から入力された比較結果から、正しく予測できた回数（ＩＳ＿ｃｏｕｎｔ）をカウントし、予測が誤っている回数（ＯＯＳ＿ｃｏｕｎｔ）を０に設定する。同期判定部６０の処理対象の送信アドレスと宛先アドレスの組み合わせについて、フレームの受信を開始するときは、初期値として、同期監視部６５は同期はずれ状態に設定されているものとする。一方、同期が取れているときは、同期監視部６５は、予測が誤っている回数（ＯＯＳ＿ｃｏｕｎｔ）をカウントし、正しく予測できた回数（ＩＳ＿ｃｏｕｎｔ）を０に設定する。同期監視部６５は、ＩＳ＿ｃｏｕｎｔとＯＯＳ＿ｃｏｕｎｔを、判定部６６に出力する。
【００６０】
判定部６６は、同期確立判定閾値Ｔｉｓと同期はずれ判定閾値Ｔｏｏｓを保持している。正しく予測できた回数のカウント値が閾値Ｔｉｓを超えると、判定部６６は、同期が取れていると判定する。つまり、判定部６６は、同期はずれ状態において、同期確立判定閾値を超えるだけ連続して、フレームの受信ポート番号（Ｐｉｎ）とフレームを受信すると期待したポート番号（Ｐｎｘ１）が一致すると、同期が確立したと判定している。一方、予測が誤った回数のカウント値が閾値Ｔｏｏｓを超えると、判定部６６は、同期が取れていないと判定する。すなわち、判定部６６は、同期確立状態において、同期はずれ判定閾値を超えるだけ連続して、フレームの受信ポート番号（Ｐｉｎ）とフレームを受信すると期待ポート番号（Ｐｎｘ１）が一致しないと、同期はずれになったと判定している。判定部６６は、判定結果を同期監視部６５と補正部７０に通知する。
【００６１】
図１６は、同期監視部６５の動作の例を説明するフローチャートである。同期監視部６５は、判定部６６から同期が取れたことを通知されているかを判定する（ステップＳ２１）。同期が取れていない場合、同期監視部６５は、比較部６２から、フレームの受信ポートの予測に成功したことが通知されたかを判定する（ステップＳ２１でＮｏ、ステップＳ２２）。比較部６２からフレームの受信ポートの予測に成功したことが通知された場合、同期監視部６５は、ＩＳ＿ｃｏｕｎｔを１つインクリメントするとともに、ＯＯＳ＿ｃｏｕｎｔを０に設定する（ステップＳ２２でＹｅｓ、ステップＳ２３）。比較部６２からフレームの受信ポートの予測に失敗したことが通知された場合、同期監視部６５は、ＩＳ＿ｃｏｕｎｔとＯＯＳ＿ｃｏｕｎｔのいずれも０に設定する（ステップＳ２２でＮｏ、ステップＳ２６）。同期が取れている場合、同期監視部６５は、比較部６２から、フレームの受信ポートの予測に失敗したことが通知されたかを判定する（ステップＳ２１でＹｅｓ、ステップＳ２４）。比較部６２からフレームの受信ポートの予測に失敗したことが通知された場合、同期監視部６５は、ＯＯＳ＿ｃｏｕｎｔを１つインクリメントするとともに、ＩＳ＿ｃｏｕｎｔを０に設定する（ステップＳ２４でＹｅｓ、ステップＳ２５）。比較部６２からフレームの受信ポートの予測に成功したことが通知された場合、同期監視部６５は、ＩＳ＿ｃｏｕｎｔとＯＯＳ＿ｃｏｕｎｔのいずれも０に設定する（ステップＳ２４でＮｏ、ステップＳ２６）。
【００６２】
図１７は、同期が取れているかを判定する方法の例を説明するフローチャートである。図１７は、判定部６６での判定と予測部６３での処理の例を示している。判定部６６は、ＩＳ＿ｃｏｕｎｔの値が閾値Ｔｉｓ以上であるかを判定する（ステップＳ３１）。ＩＳ＿ｃｏｕｎｔの値が閾値Ｔｉｓ以上である場合、受信ポート番号を連続して正しく予測した回数が閾値Ｔｉｓ以上であるので、判定部６６は、送信側の通信装置１０と受信側の通信装置１０の間で同期が取れていると判定する（ステップＳ３１でＹｅｓ）。そこで、判定部６６は、設定を同期状態に変更し、同期監視部６５に通知する。（ステップＳ３２）。次に、判定部６６は、ＯＯＳ＿ｃｏｕｎｔの値が閾値Ｔｏｏｓ以上であるかを判定する（ステップＳ３３）。ＯＯＳ＿ｃｏｕｎｔの値が閾値Ｔｏｏｓ以上である場合、受信ポート番号の予測に連続して失敗した回数が閾値Ｔｏｏｓ以上である。そこで、判定部６６は、送信側の通信装置１０と受信側の通信装置１０の間で同期が取れていないと判定する（ステップＳ３３でＹｅｓ）。判定部６６は、設定を同期はずれ状態に変更し、同期監視部６５に通知する。（ステップＳ３４）。
【００６３】
予測部６３は、比較部６４からＰｉｎとＰｎｘ２が等しいことが通知されたかを判定する（ステップＳ３５）。ここで、ＰｉｎとＰｎｘ２が等しいことは、順序の逆転の発生が観測されたことを示す。そこで、予測部６３は、比較部６４からＰｉｎとＰｎｘ２が等しいことが通知されていない場合は、Ｐｎｘ１とＰｎｘ２の値を更新する（ステップＳ３５でＮｏ、ステップＳ３６）。一方、予測部６３は、比較部６４からＰｉｎとＰｎｘ２が等しいことが通知された場合、Ｐｎｘ１とＰｎｘ２の値を更新せずに処理を終了する（ステップＳ３５でＹｅｓ）。
【００６４】
図１８は、補正部７０の例を示す図である。補正部７０は、制御信号生成部７１、フラグ管理部７２、ＷＡＤＲ（Write Address）生成カウンタ７３、および、ＲＡＤＲ（Read Address）生成カウンタ７４を備える。制御信号生成部７１は、比較部６２からｍａｔｃｈ＿１、比較部６４からｍａｔｃｈ＿２、判定部６６から同期状態の判定結果を取得する。制御信号生成部７１は、比較部６２、比較部６４、および判定部６６から取得した情報を用いて、フレームバッファ８０への書き込みやフレームバッファ８０からの読み出しを制御するための信号を生成する。図１３に示すように、フレームバッファ８０には、振り分け部５１からフレームが入力されるが、フレームバッファ８０は、制御信号生成部７１から書き込みを許可する信号が入力されているタイミングで入力されている情報を格納する。また、フレームバッファ８０は、制御信号生成部７１から読み出しを要求されると、フレームをスイッチ４０に出力する。このため、制御信号生成部７１から出力される信号により、スイッチ４０に出力されるフレームの選択が行われることになる。以下、フレームバッファ８０への書き込みを許可するための信号を、「書き込みイネーブル信号」または「ＷＥ（Write Enable）」と記載する。一方、フレームバッファ８０からの読み出しを制御するための信号を、「読み出しイネーブル信号」または「ＲＥ（Read Enable）」と記載する。制御信号生成部７１は、書き込みイネーブル信号をフレームバッファ８０とＷＡＤＲ生成カウンタ７３に出力する。
【００６５】
制御信号生成部７１は、ＷＡＤＲ生成カウンタ７３に書き込みイネーブル信号を出力することにより、書き込みを行うアドレスを特定する信号の生成を、ＷＡＤＲ生成カウンタ７３に要求する。ＷＡＤＲ生成カウンタ７３は、書き込みを行うアドレスを特定する信号（書き込みアドレス信号）を生成し、書き込みアドレス信号をフレームバッファ８０に出力する。このとき、ＷＡＤＲ生成カウンタ７３は、フラグ管理部７２にアクセスすることにより、フレームバッファ８０にフレームが格納されているかを判定することができる。フレームバッファ８０にフレームが格納されている場合、ＷＡＤＲ生成カウンタ７３は、すでにフレームが格納されている領域とは異なる領域に新たなフレームが書き込まれるように、書き込みアドレスを調整する。制御信号生成部７１は、ＲＡＤＲ生成カウンタ７４に読み出しイネーブル信号を出力することにより、読み出しを行うアドレスを特定する信号の生成を、ＲＡＤＲ生成カウンタ７４に要求する。ＲＡＤＲ生成カウンタ７４は、読み出しを行うアドレスを特定する信号（読み出しアドレス信号）を生成し、読み出しアドレス信号をフレームバッファ８０に出力する。
【００６６】
フラグ管理部７２は、フレームバッファ８０にフレームが格納されているかを特定するためのフラグを管理する。以下、フレームバッファ８０にフレームが格納されているかを特定するためのフラグを「格納フラグ」と記載することがある。格納フラグ＝１は、フレームバッファ８０にフレームが格納されていることを示し、格納フラグ＝０は、フレームバッファ８０にフレームが格納されていないことを示すものとする。
【００６７】
図１９は、補正部７０とフレームバッファ８０を用いて行われる処理の例を説明するテーブルである。図１９において、ｄ．ｃ．は、don’t careの略であり、値が任意であることを示す。なお、図１９などにおいて、同期状態はｓｙｎｃ＿ｓｔａｔｅで表されている。ｓｙｎｃ＿ｓｔａｔｅ＝ＩＳは、送信側と受信側の間で同期が確立していることを表し、ｓｙｎｃ＿ｓｔａｔｅ＝ＯＯＳは、送信側と受信側の間で同期が取れていないことを表す。
【００６８】
判定部６６から同期はずれであることを通知された場合、比較部６２と比較部６４からの情報や格納フラグの値が何であっても、制御信号生成部７１は、入力フレームを廃棄することを決定する。そこで、制御信号生成部７１は、同期はずれの間は、書き込みイネーブル信号と読み出しイネーブル信号のいずれも出力しない。このため、同期はずれの間にフレームバッファ８０に入力されたフレームは、フレームバッファ８０に格納されず、スイッチ４０への出力もされないため、廃棄される。
【００６９】
判定部６６から同期していることを通知され、かつ、比較部６２から受信ポート番号の予測が正しいことが通知された場合、制御信号生成部７１は、フレームバッファ８０にフレームが格納されているかを判定する。フレームバッファ８０にフレームが格納されていない場合（格納フラグ＝０）、制御信号生成部７１は、入力フレームをスイッチ４０に出力することを決定する。そこで、制御信号生成部７１は、書き込みイネーブル信号と読み出しイネーブル信号の両方を出力する。また、ＷＡＤＲ生成カウンタ７３とＲＡＤＲ生成カウンタ７４が特定する書き込みアドレスと読み出しアドレスは、フレームバッファ８０に書き込まれているフレームがスイッチ４０に読み出されるように調整される。このため、振り分け部５１からフレームバッファ８０に入力されたフレームは、フレームバッファ８０に書き込まれつつ、スイッチ４０に読み出される。
【００７０】
一方、フレームバッファ８０にフレームが格納されている場合（格納フラグ＝１）、制御信号生成部７１は、入力フレームをスイッチ４０に出力した後で、フレームバッファ８０に格納されているフレームをスイッチ４０に出力することを決定する。そこで、制御信号生成部７１は、書き込みイネーブル信号と読み出しイネーブル信号の両方を出力する。このとき、ＷＡＤＲ生成カウンタ７３は、フレームバッファ８０に入力されるフレームが、既にフレームバッファ８０に書き込まれているフレームの続きに書き込まれるように、書き込みアドレスを設定する。また、ＲＡＤＲ生成カウンタ７４は、フレームバッファ８０に書き込んでいるフレームの読み出しが最初に行われるように、読み出しアドレスを設定する。このため、振り分け部５１からフレームバッファ８０に入力されたフレームがスイッチ４０に出力され、フレームバッファ８０に格納されているフレームは、そのまま保持される。振り分け部５１から入力されたフレームの読み出しが終了すると、フレームバッファ８０に保持されているフレームがスイッチ４０に出力される。
【００７１】
判定部６６から同期していることを通知され、かつ、比較部６４から受信ポート番号の予測が正しい（ｍａｔｃｈ＿２＝ＯＫ）ことが通知された場合、順序逆転が発生している。そこで、制御信号生成部７１は、順序の逆転を修正するために、受信フレームをフレームバッファ８０に書き込むことを決定する。このため、制御信号生成部７１は、書き込みイネーブル信号をフレームバッファ８０に出力する。
【００７２】
図２０〜図２３は、タイミングチャートの例を示す。以下、図２０〜図２３を参照しながら、図１９に示す各ケースについての信号のタイミングの例を説明する。
【００７３】
図２０は、通信装置１０ａと通信装置１０ｂの間で同期が確立しており、フレームの順序逆転が発生していない場合のタイミングチャートの例である。なお、図２０に示すケースでは、フレームバッファ８０にフレームが格納されていない（格納フラグ＝０）であるものとする。
【００７４】
図２０に示すケースでは、前回までのフレームの送受信の結果に基づいて、送信側と受信側の間で同期が取れていると判定部６６で判定されている。このため、判定部６６は、制御信号生成部７１にｓｙｎｃ＿ｓｔａｔｅ=ＩＳを出力する。振り分け部５１から同期判定部６０およびフレームバッファ８０にフレームが入力されるタイミングは、図２０の入力フレームの欄のとおりであるとする。入力フレームの１バイト目が入力ポート特定部６１と比較部６２で処理されることにより、受信ポートの予測が正しいかが判定される。図２０の例では、受信ポートの予測が正しいため、比較部６２は、ｍａｔｃｈ＿１＝ＯＫの信号を制御信号生成部７１に出力する。なお、比較部６２は、正しく受信ポートが予測できたフレームの末尾が比較部６２を通過するまで、ｍａｔｃｈ＿１＝ＯＫを制御信号生成部７１に出力し続ける。このため、フレームバッファ８０に入力フレームの２バイト目から最後の１バイトが入力されるまでの間、ｍａｔｃｈ＿１＝ＯＫが制御信号生成部７１に出力されることになる。
【００７５】
制御信号生成部７１は、ｓｙｎｃ＿ｓｔａｔｅ=ＩＳとｍａｔｃｈ＿１＝ＯＫの制御信号が入力されると、入力フレームの２バイト目の書き込みに間に合うように、フレームバッファ８０に書き込みイネーブル信号を出力する。制御信号生成部７１は、ｍａｔｃｈ＿１＝ＯＫが入力されている間、フレームバッファ８０に書き込みイネーブル信号を出力し続ける。さらに、制御信号生成部７１はＷＡＤＲ生成カウンタ７３に書き込みアドレス信号の生成を要求する。ＷＡＤＲ生成カウンタ７３は、フレームバッファ８０にフレームが格納されていないと判定すると、書き込みアドレスを０から１バイトずつカウントアップする。このため、フレームバッファ８０のアドレス０からアドレスｎまでの間に、フレームバッファ８０に入力されたフレームが格納される。
【００７６】
制御信号生成部７１は、フラグ管理部７２にアクセスすることによって、格納フラグの値を特定する。ここでは、格納フラグ＝０であるため、制御信号生成部７１は、フレームバッファ８０への書き込みが行われているフレームを、スイッチ４０に読み出すことを決定する。そこで、制御信号生成部７１は、書き込みのタイミングよりも遅れたタイミングで、読み出しイネーブル信号をフレームバッファ８０とＲＡＤＲ生成カウンタ７４に出力する。図２０の例では、書き込みイネーブル信号よりも１バイトの処理時間遅れたタイミングで、読み出しイネーブル信号が出力される。ＲＡＤＲ生成カウンタ７４は、読み出しイネーブル信号が入力されると、読み出しアドレス信号をフレームバッファ８０に出力する。このとき、ＲＡＤＲ生成カウンタ７４は、読み出しアドレスを０から１バイトずつカウントアップする。
【００７７】
さらに、制御信号生成部７１は、読み出されるフレームの先頭の１バイトに、スイッチ４０からの出力に用いられる回線側のポートの番号を指定する情報が付されるように、ポート指定部８５に制御信号を出力する。図２０の場合では、制御信号生成部７１は、書き込みイネーブル信号とほぼ同じタイミングに、ポート指定部８５に制御信号を出力する。そこで、ポート指定部８５はポート番号Ｐｔｒをスイッチ４０に出力する。制御信号生成部７１とＲＡＤＲ生成カウンタ７４からの制御信号に従って、フレームバッファ８０からフレームが読み出され、ポート番号Ｐｔｒに続いて読み出されたフレームがスイッチ４０に出力される。このため、スイッチ４０に出力されるフレームは、図２０の出力フレームに示すとおりになる。
【００７８】
図２１は、通信装置１０ａと通信装置１０ｂの間で同期が確立しており、フレームの順序逆転が発生した場合のタイミングチャートの例である。図２１の例では、最後に受信したフレームの２つ後のフレームが入力された場合の処理の例を示す。なお、図２１に示すケースでも、フレームバッファ８０にフレームが格納されていない（格納フラグ＝０）ものとする。
【００７９】
図２１に示すケースでは、同期が確立しているので、判定部６６は、制御信号生成部７１にｓｙｎｃ＿ｓｔａｔｅ=ＩＳを出力する。振り分け部５１から同期判定部６０およびフレームバッファ８０にフレームが入力されるタイミングは、図２１の入力フレームの欄のとおりであるとする。入力フレームの１バイト目が入力ポート特定部６１、比較部６２、比較部６４で処理された結果、最後に受信したフレームの２つ後のフレームを受信したと判定されたとする。すると、比較部６２はｍａｔｃｈ＿１＝ＮＧの信号を、比較部６４はｍａｔｃｈ＿２＝ＯＫの信号を制御信号生成部７１に出力する。ここで、比較部６４は、最後に受信したフレームの２つ後のフレームであると判定したフレームの末尾が比較部６４を通過するまで、ｍａｔｃｈ＿２＝ＯＫを制御信号生成部７１に出力し続ける。
【００８０】
制御信号生成部７１は、ｓｙｎｃ＿ｓｔａｔｅ=ＩＳとｍａｔｃｈ＿２＝ＯＫの制御信号が入力されると、入力フレームの２バイト目の書き込みに間に合うように、フレームバッファ８０に書き込みイネーブル信号を出力する。制御信号生成部７１は、ｍａｔｃｈ＿２＝ＯＫが入力されている間、フレームバッファ８０に書き込みイネーブル信号を出力し続ける。さらに、制御信号生成部７１はＷＡＤＲ生成カウンタ７３に書き込みアドレス信号の生成を要求する。ＷＡＤＲ生成カウンタ７３は、フレームバッファ８０にフレームが格納されていないと判定すると、書き込みアドレスを０から１バイトずつカウントアップしながら入力アドレスをフレームバッファ８０に通知する。このため、フレームバッファ８０のアドレス０からアドレスｎまでの間にフレームが格納される。
【００８１】
制御信号生成部７１は、ｍａｔｃｈ＿１＝ＮＧであるため、読み出しイネーブル信号を出力しない。このため、フレームバッファ８０に書き込まれているフレームは読み出されずに格納される。
【００８２】
図２２は、図２１を参照しながら説明した処理を行った後に、フレームバッファ８０に格納されているフレームの１つ前に送信されたフレームを受信したケースで行われる処理の例を示す。なお、図２２では、ｓｙｎｃ＿ｓｔａｔｅ、ｍａｔｃｈ＿１、書き込みイネーブル信号、および、入力フレームは、横軸の時間をそろえて記載しており、読み出しイネーブル信号および出力フレームとは異なる時系列で示している。一方、読み出しイネーブル信号および出力フレームは、フレームの順序逆転の調整方法を分かりやすくするため、時間軸の途中を省略して記載している。このため、出力フレームの２つ目のＰｔｒの前までで出力されるフレームが入力フレームであり、２つ目のＰｔｒ以降のフレームは、フレームバッファ８０に格納されていたフレームであるものとする。
【００８３】
図２２のケースでも、図２０を参照しながら説明した手順と同様の手順により、受信ポートの予測が正しいかが判定される。ここで、図２１の処理の際に順序逆転が発生しているので、図１７のステップＳ３５に示すように、Ｐｎｘ１は更新されていない。このため、比較部６２では、受信ポートの予測が正しいと判定し、ｍａｔｃｈ＿１＝ＯＫの信号を制御信号生成部７１に出力する。
【００８４】
制御信号生成部７１は、ｓｙｎｃ＿ｓｔａｔｅ=ＩＳとｍａｔｃｈ＿１＝ＯＫの制御信号が入力されるので、入力フレームの２バイト目の書き込みに間に合うように、フレームバッファ８０とＷＡＤＲ生成カウンタ７３に書き込みイネーブル信号を出力する。ＷＡＤＲ生成カウンタ７３は、格納フラグ＝１より、フレームバッファ８０にフレームが格納されていると判定すると、書き込みを開始できるアドレスを特定する。図２１の例では、フレームバッファ８０のアドレス０〜ｎは使用されている。そこで、ＷＡＤＲ生成カウンタ７３は、アドレスｎ＋１以降を、新たに受信したフレームを書き込むアドレスとして指定する。図２２の例では、アドレスｎ＋１〜ｎ＋ｋに、新たなフレームが書き込まれる。
【００８５】
制御信号生成部７１は、フレームバッファ８０への書き込みが行われているフレームを、スイッチ４０に読み出すことを決定する。そこで、制御信号生成部７１は、書き込みのタイミングよりも遅れたタイミングで、読み出しイネーブル信号をフレームバッファ８０とＲＡＤＲ生成カウンタ７４に出力する。ＲＡＤＲ生成カウンタ７４は、フラグ管理部７２にアクセスして格納フラグ＝１であることを特定し、先に読み出すフレームが格納されているメモリの先頭のアドレスを特定する。図２２の例では、アドレスｎ＋１以降に新たなフレームが記録されている。そこで、ＲＡＤＲ生成カウンタ７４は、アドレスｎ＋１以降のアドレスを読み出し対象とする読み出しアドレス信号を、フレームバッファ８０に出力する。
【００８６】
ここで、図２２のケースでも、図２０で説明したのと同様の手順により、ポート番号Ｐｔｒがフレームの先頭に付加される。さらに、制御信号生成部７１は、新たに受信したフレームの読み出しが終わると、再度、ポート指定部８５にポート番号Ｐｔｒの挿入を要求する。ポート指定部８５がポート番号をスイッチ４０に出力すると、制御信号生成部７１は、フレームバッファ８０とＲＡＤＲ生成カウンタ７４への読み出しイネーブル信号の出力を再開する。２回目に出されている読み出しイネーブル信号では、フレームバッファ８０に格納されていたフレームがスイッチ４０に出力される。このため、ＲＡＤＲ生成カウンタ７４は、読み出しアドレスをアドレス０から１バイトずつカウントアップして、読み出しアドレス信号を生成する。
【００８７】
図２３は、送信側の通信装置１０ａと受信側の通信装置１０ｂの間で同期が取れていないときの動作の例を説明するタイミングチャートである。前回までのフレームの送受信の結果に基づいて、送信側と受信側の間で同期が取れていないと判定部６６で判定されている。このため、判定部６６は、制御信号生成部７１にｓｙｎｃ＿ｓｔａｔｅ=ＯＯＳを出力する。
【００８８】
制御信号生成部７１は、入力フレームの２バイト目の書き込みに間に合うように、書き込みイネーブル信号を出力するが、ｓｙｎｃ＿ｓｔａｔｅ＝ＯＯＳであると判定すると、書き込みイネーブル信号の出力を中止する。図２３の例では、入力フレームの２バイト目の書き込みに間に合わせるためにｓｙｎｃ＿ｓｔａｔｅ＝ＯＯＳであるかの判定が終わる前に、書き込みイネーブル信号が出力されてしまうので、入力フレームの最初の１バイトはフレームバッファ８０に書き込まれる。しかし、以後の書き込みが中断されるため、格納フラグは０に設定される。このため、同期が取れた後に新たなフレームが読み込まれると、ｓｙｎｃ＿ｓｔａｔｅ＝ＯＯＳのときに受信したフレームが記録されているアドレスは、新たなフレームの記録に使用され、上書きされる。制御信号生成部７１は、ｓｙｎｃ＿ｓｔａｔｅ＝ＯＯＳである場合は、読み出しイネーブル信号も出力しない。このため、同期が確立するまでの間に受信されたフレームは廃棄される。
【００８９】
図２４は、補正部７０で行われる処理の例を説明するフローチャートである。制御信号生成部７１は、送信側の通信装置１０と受信側の通信装置１０の間で同期が確立しているかを判定する（ステップＳ４１）。同期が確立されていない間は、受信側の通信装置１０においてフレームの送信順序どおりに受信フレームを並べ替えることができない。そこで、制御信号生成部７１は、同期が確立されていない間に受信したフレームを廃棄するために、書き込みイネーブル信号と読み出しイネーブル信号のいずれも生成しない（ステップＳ４１でＮｏ、ステップＳ４２）。制御信号生成部７１は、フラグ管理部７２にアクセスすることにより、フレームバッファ８０にフレームが格納されているかを判定する（ステップＳ４３）。フレームバッファ８０が空であれば、補正部７０は処理を終了する（ステップＳ４３でＹｅｓ）。一方、フレームバッファ８０にフレームが格納されている場合、フレームバッファ８０内のフレームが廃棄される（ステップＳ４３でＮｏ、ステップＳ４４）。
【００９０】
同期が確立されている場合、受信側の通信装置１０においてフレームの送信順序どおりに受信フレームを並べ替えることができるため、補正部７０は、受信フレームをスイッチ４０に出力するための処理を行う。制御信号生成部７１は、フラグ管理部７２にアクセスし、フレームバッファ８０が空であるかを判定する（ステップＳ４１でＹｅｓ、ステップＳ４５）。フレームバッファ８０にフレームが格納されている場合、順序逆転が発生していることになる（ステップＳ４５でＮｏ）。そこで、制御信号生成部７１は、受信したフレームをスイッチ４０に出力した後で、フレームバッファ８０に格納されているフレームを出力する（ステップＳ４６、Ｓ４７）。一方、フレームバッファ８０が空であり、順序逆転が発生していない場合、制御信号生成部７１は、受信したフレームをスイッチ４０に出力する（ステップＳ４５でＹｅｓ、ステップＳ４８）。
【００９１】
スイッチ４０は、順序補正部５２から図５（ｄ）に示すフォーマットのフレームを取得する。スイッチ４０は、フレームの先頭の１バイトの値とポート番号が一致する回線側のポートに、受信フレームを出力する。このため、フレームの先頭の１バイトの値で指定されたポートに接続されているインタフェース回路２０に、受信フレームが入力される。インタフェース回路２０は、入力されたフレームの先頭の１バイトを削除することにより、入力されたフレームを、送信元の装置が端末に向けて送信したフレーム（図５（ａ））に変換する。インタフェース回路２０は、変換したフレームを、送受信部２１から端末に向けて送信する。
【００９２】
このように、実施形態に係る通信装置１０によると、受信側の通信装置１０は、受信フレームが入力されてきたポートの番号、送信元アドレス、宛先アドレスを用いて、受信フレームの送信順序を推定できる。換言すると、受信側の通信装置１０は、送信側の通信装置１０から送信されてきたフレームの順序が入れ替わってしまっても、順序逆転を補正することができる。従って、送信側の通信装置１０は、送信元と宛先の組み合わせが同じ複数のフレームを、異なる物理リンク１１を用いて、受信側の通信装置１０に送信することができる。このため、通信装置１０は、物理リンク１１の帯域を超えた帯域幅で行われる通信も中継することができる。
【００９３】
さらに、通信装置１０の間で送受信されるフレームには、複数の物理リンク１１を介して送受信されたフレームの順番を特定するためのシーケンス番号（巡回番号）が含まれていない。このため、端末間で送受信に使用するフレームのフォーマットを変更しなくても、物理リンク以上の帯域幅の通信の中継が可能である。
【００９４】
＜その他＞
なお、実施形態は上記に限られるものではなく、様々に変形可能である。以下にその例をいくつか述べる。
【００９５】
上記の説明ではハッシュ関数としてＭＤ５を用いた場合を例としたが、ハッシュ関数のアルゴリズムは、実装に応じて任意に変更できる。例えば、ＭＤ５ではなく、Cyclic Redundancy Code（ＣＲＣ３２）やSecure Hash Algorithm（ＳＨＡ−１）などが使用されても良い。
【００９６】
なお、図中の矢印は、図をわかりやすくするために、受信フレームや送信フレームなど、処理対象の情報の一部の流れを示している。従って、制御信号など、図中の矢印とは逆の方向に出力される情報もある。例えば、図１８において、ＷＡＤＲ生成カウンタ７３やＲＡＤＲ生成カウンタ７４は、制御信号生成部７１に情報を入力しうるものとする。
【符号の説明】
【００９７】
５  テーブル
１０  通信装置
１１  物理リンク
２０  インタフェース回路
２１  送受信部
２２  フレーム先頭検出部
２３  遅延生成部
２４  タイミング生成部
２５  メモリ
２６  抽出部
２７  ポート番号演算部
２８  出力部
３０  プロセッサ
３５  バス
４０  スイッチ
５０  受信処理回路
５１  振り分け部
５２  順序補正部
６０  同期判定部
６１  入力ポート特定部
６２、６４  比較部
６３  予測部
６５  同期監視部
６６  判定部
７０  補正部
７１  制御信号生成部
７２  フラグ管理部
７３  ＷＡＤＲ生成カウンタ
７４  ＲＡＤＲ生成カウンタ
８０  フレームバッファ
８５  ポート指定部
９０  インタフェース回路
【図３】
2014183350.tif 000003
【図４】
2014183350.tif 000004
【図５】
2014183350.tif 000005
【図６】
2014183350.tif 000006
【図７】
2014183350.tif 000007
【図８】
2014183350.tif 000008
【図９】
2014183350.tif 000009
【図１０】
2014183350.tif 000010
【図１１】
2014183350.tif 000011
【図１２】
2014183350.tif 000012
【図１３】
2014183350.tif 000013
【図１４】
2014183350.tif 000014
【図１５】
2014183350.tif 000015
【図１６】
2014183350.tif 000016
【図１７】
2014183350.tif 000017
【図１８】
2014183350.tif 000018
【図１９】
2014183350.tif 000019
【図２０】
2014183350.tif 000020
【図２１】
2014183350.tif 000021
【図２２】
2014183350.tif 000022
【図２３】
2014183350.tif 000023
【図２４】
2014183350.tif 000024
【図１】
2014183350.tif 000025
【図２】
2014183350.tif 000026