(57)【要約】      （修正有）【課題】通信装置の処理負荷を低減する。【解決手段】通信システムは、第１の通信装置１０ａと第２の通信装置１０ｂを含む。第１の通信装置は、送信データの分割で得られる分割データを含むフレームのペイロード長を、フレームに含まれる分割データの順序に対応付ける所定の条件に従って調整することにより、分割データを含む複数のフレームを生成する。第２の通信装置は、所定の条件を保持し、第１のパスと第２のパスを用いて第１の通信装置と通信可能である。第１の通信装置は、第１のパスと第２のパスを用いて、複数のフレームを第２の通信装置に送信する。第２の通信装置は、複数のフレームの各々のヘッダから抽出したペイロード長の情報と所定の条件から、複数のフレームの各々に含まれた分割データの順序を特定する。【選択図】図２
2018037702.tif 000002
【特許請求の範囲】
【請求項１】
送信データの分割で得られる分割データを含むフレームのペイロード長を、前記フレームに含まれる分割データの順序に対応付ける所定の条件に従って調整することにより、前記分割データを含む複数のフレームを生成する第１の通信装置と、
前記所定の条件を保持し、第１のパスと第２のパスを用いて前記第１の通信装置と通信可能な第２の通信装置
を含み、
前記第１の通信装置は、前記第１のパスと前記第２のパスを用いて、前記複数のフレームを第２の通信装置に送信し、
前記第２の通信装置は、前記複数のフレームの各々のヘッダから抽出したペイロード長の情報と前記所定の条件から、前記複数のフレームの各々に含まれた分割データの順序を特定する
ことを特徴とする通信システム。
【請求項２】
前記第２の通信装置は、
前記分割データの順序ごとに当該順序に対応する分割データを受信したかを判定し、
前記複数のフレームの全てを受信していなくても、前記複数のフレームのうちで、受信処理の対象としている対象フレームに含まれる分割データの順序よりも早い順序に対応付けられた未受信の分割データがない場合、前記対象フレーム中の分割データを処理する
ことを特徴とする請求項１に記載の通信システム。
【請求項３】
前記第２の通信装置は、前記対象フレームに含まれる分割データの順序よりも早い順序に対応付けられた未受信の分割データがある場合、前記未受信の分割データを受信するまで、前記対象フレーム中の分割データの処理を遅らせる
ことを特徴とする請求項２に記載の通信システム。
【請求項４】
前記第１の通信装置は、前記第１のパスを介して前記第２の通信装置に送信するデータ量と、前記第２のパスを介して前記第２の通信装置に送信するデータ量の差が小さくなるように、前記複数のフレームの各々の送信に使用する経路を前記第１のパスと前記第２のパスから選択する
ことを特徴とする請求項１〜３のいずれか１項に記載の通信システム。
【請求項５】
第１のパスと第２のパスを用いて他の通信装置と通信可能な通信装置であって、
分割して送信するデータを含むフレームのペイロード長を、前記フレームに含まれるデータの順序に対応付ける所定の条件を記憶する記憶部と、
前記他の通信装置に送信する送信データを分割することにより分割データを生成するとともに、前記分割データを含む送信フレームのペイロード長を、前記所定の条件に従って調整することにより、複数の送信フレームを生成する生成部と、
前記複数の送信フレームを、前記第１のパスと前記第２のパスを用いて送信する送信部
を備えることを特徴とする通信装置。
【請求項６】
第１の通信装置と、第１のパスと第２のパスを用いて前記第１の通信装置と通信可能な第２の通信装置を含むネットワークにおいて、
前記第１の通信装置は、
送信データの分割で得られる分割データを含むフレームのペイロード長を、前記フレームに含まれる分割データの順序に対応付ける所定の条件に従って調整することにより、前記分割データを含む複数のフレームを生成し、
前記第１のパスと前記第２のパスを用いて、前記複数のフレームを第２の通信装置に送信し、
前記第２の通信装置は、前記複数のフレームの各々のヘッダから抽出したペイロード長の情報と前記所定の条件を用いて、前記複数のフレームの各々に含まれた分割データの順序を特定する
ことを特徴とするデータ分割制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信システムや通信装置で用いられるデータ分割制御に関する。
【背景技術】
【０００２】
通信装置間で送受信されるデータ量の増大に伴い、通信の際に複数のパスを並行して用いる通信が行われることがある。あるデータが複数に分割され、複数のフレームを用いて送信される場合もある。ここで、データが複数のフレームを用いて送信されるときに、複数のパスを用いた通信が行われると、受信側の通信装置に到達する際に、分割されたデータの順序が変動することある。
【０００３】
図１は、データの分割送信の例を説明する図である。図１に示す例では、データを送信する送信側の通信装置を送信装置２、データを受信する通信装置を受信装置４と記載する。また、送信装置２と受信装置４が０系パスと１系パスの両方を用いて通信するものとする。例えば、送信装置２から受信装置４にデータＤ１が送信されるとする。このとき、送信装置２は、データＤ１の送信の際に、データＤ１を複数の分割データｄ１〜ｄ５に分割するものとする。
【０００４】
図１のシーケンスＳＥ１は、分割データｄ１〜ｄ５を含むフレームの各々についての送信と受信の例を示す。送信装置２は、０系パスを介して分割データｄ１と分割データｄ２を送信した後で、１系パスを介して分割データｄ３〜ｄ５を送信したとする。ここで、０系パスを介して転送されるデータ量が１系パスを介して転送されるデータ量よりも多いため、送信装置２から送信されたフレームが受信装置４に到達するまでにかかる時間は、０系パスを介した場合の方が１系パスを介したときより長いとする。このため、送信装置２からは、分割データがｄ１、ｄ２、ｄ３、ｄ４、ｄ５の順に送信されても、受信装置４では、分割データｄ１、ｄ３、ｄ２、ｄ４、ｄ５の順に到達したとする。このような順序逆転が起こる可能性があるため、受信装置４では、各フレーム中のデータの順序を、ペイロード中の情報を用いることにより特定し、分割された各データを正しい順序で並べ替える処理を行う。例えば、フレーム中にＩＰパケットが含まれている場合、受信装置４は、パケット中のフラグやフラグメントオフセットなどの情報を用いることができる。
【０００５】
関連する技術として、入力したデータをデータパケットに分割し、送信順序を含むデータパケットを冗長化し、受信装置までの冗長経路ごとに異なる送信順序でデータパケットを送信する方法が提案されている（例えば、特許文献１など）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１５−０９７３４９号
【発明の概要】
【発明が解決しようとする課題】
【０００７】
フレームを受信した装置において、順序逆転が発生する場合があるので、フレームを受信する装置では、フレームに含まれているペイロード中の情報を解析することにより、フレーム中のデータの順序を適宜、並べ替える。従って、受信側の装置はアプリケーション等によるデータの処理の前にも、受信側の装置でフレーム中のデータの順序の並べ替えを行うために、ペイロードの処理をすることになるため、受信側の装置の処理負荷が高くなってしまう。
【０００８】
本発明は、１つの側面として、通信装置の処理負荷を低減することを目的とする。
【課題を解決するための手段】
【０００９】
ある１つの態様にかかる通信システムは、第１の通信装置と第２の通信装置を含む。第１の通信装置は、送信データの分割で得られる分割データを含むフレームのペイロード長を、前記フレームに含まれる分割データの順序に対応付ける所定の条件に従って調整することにより、前記分割データを含む複数のフレームを生成する。第２の通信装置は、前記所定の条件を保持し、第１のパスと第２のパスを用いて前記第１の通信装置と通信可能である。前記第１の通信装置は、前記第１のパスと前記第２のパスを用いて、前記複数のフレームを第２の通信装置に送信する。前記第２の通信装置は、前記複数のフレームの各々のヘッダから抽出したペイロード長の情報と前記所定の条件から、前記複数のフレームの各々に含まれた分割データの順序を特定する。
【発明の効果】
【００１０】
通信装置の処理負荷を低減できる。
【図面の簡単な説明】
【００１１】
【図１】データの分割送信の例を説明する図である。
【図２】実施形態にかかる通信方法の例を説明するシーケンス図である。
【図３】通信装置の構成の例を説明する図である。
【図４】システム中の装置のハードウェア構成の例を説明する図である。
【図５】フレームのフォーマットの例を説明する図である。
【図６】データの分割処理の例を説明する図である。
【図７】データの送信処理の例を説明するフローチャートである。
【図８】分割データの格納領域の例を説明する図である。
【図９】分割データの格納処理の例を説明するフローチャートである。
【図１０】分割データの格納処理の例を説明するフローチャートである。
【図１１】分割データの読み出し処理の例を説明するフローチャートである。
【図１２】通信処理の例を説明するシーケンス図である。
【図１３】実施形態にかかる方法と受信状況の確認を伴う切り替え処理を比較する図である。
【図１４】実施形態にかかる方法とリオーダリング後に読み出し処理を行う方法を比較する図である。
【図１５】パディングを用いてフレーム長を調整する場合の例を説明する図である。
【図１６】通信システムの例を説明する図である。
【発明を実施するための形態】
【００１２】
図２は、実施形態にかかる通信方法の例を説明するシーケンス図である。図２では、通信装置１０ａが通信装置１０ｂ宛てにデータを送信する場合を例として説明する。実施形態にかかる方法では、通信装置１０ａと通信装置１０ｂのいずれも、予め、フレームに含まれるペイロード長の情報（ｌｅｎｇｔｈ値）を、フレーム中のデータの順序に対応付けるための条件を記憶している。なお、ペイロード長を表すｌｅｎｇｔｈ値は、フレームのヘッダに含まれている。
【００１３】
通信装置１０ａは、通信装置１０ｂ宛ての送信データを生成する（ステップＳ１）。次に、通信装置１０ａは、送信データの分割数を決定する（ステップＳ２）。通信装置１０ａは、分割したデータの送信に使用するフレームに適用するｌｅｎｇｔｈ値を、データの順序をペイロード長に対応付けている条件に従って、分割数だけ生成する（ステップＳ３）。通信装置１０ａは、送信データを、分割数と同数の分割データに分割する。通信装置１０ａは、ｌｅｎｇｔｈ値で表される順序の分割データを用いて、ｌｅｎｇｔｈ値で表される長さのペイロードを生成し、ペイロードを含むフレームを生成する（ステップＳ４）。従って、ステップＳ４の処理により、各フレームは、ヘッダ中のｌｅｎｇｔｈ値によって分割データの順序を表すことができるように生成されている。
【００１４】
さらに、通信装置１０ａは、生成したフレームを宛先に向けて送信する。以下、ステップＳ５以降の処理を、通信装置１０ａから通信装置１０ｂに宛てて送信されたフレームの１つに注目して説明する。通信装置１０ａは、生成した複数のフレームの１つを、通信装置１０ｂに宛てて送信する（ステップＳ５）。通信装置１０ｂでは、フレームを受信すると、ヘッダ中のｌｅｎｇｔｈ値を用いて、フレーム中の分割データの順序を特定する（ステップＳ６）。通信装置１０ｂは、受信したフレーム中の分割データが、未受信の分割データのうちで最も先頭に近いデータであるかを判定する（ステップＳ７）。受信したフレーム中の分割データが、未受信の分割データのうちで最も先頭に近いデータである場合、通信装置１０ｂは、フレーム中の分割データを処理する（ステップＳ７でＹｅｓ、ステップＳ８）。受信したフレーム中の分割データが、未受信の分割データのうちで最も先頭に近いデータではない場合、通信装置１０ｂは、フレーム中の分割データより前のデータを処理するまで、フレーム中の分割データの処理を保留する（ステップＳ７でＮｏ、ステップＳ９）。
【００１５】
なお、図２では、通信装置１０ａがデータを送信して通信装置１０ｂがデータを送信するケースを例として説明したが、各通信装置１０は、データの送信と受信のいずれも行うことができるものとする。
【００１６】
このように、実施形態にかかる通信装置１０は、フレームのヘッダに含まれているｌｅｎｇｔｈ値を用いて、フレームに含まれている分割データの順序を特定できる。従って、ペイロードを読み込まなくても分割データの順序を特定することができ、フレームの受信に際して通信装置１０にかかる負荷は、ペイロード中の情報を用いてリオーダリングを行う装置よりも軽くなる。
【００１７】
＜装置構成＞
図３は、通信装置１０の構成の例を説明する図である。通信装置１０は、送信部１１、受信部１２、順序制御部２０、受信処理部３０、アプリケーション処理部３５、記憶部４０、送信処理部５０を備える。順序制御部２０は、送信元特定部２１、決定部２２、データ格納部２３、判定部２４、読み出しアドレス生成部２５を有する。記憶部４０は分割条件情報４１を保持する。送信処理部５０は、計算部５１とフレーム生成部５２を有する。
【００１８】
送信部１１と受信部１２は、いずれも、０系パスと１系パスの両方にアクセスできる。送信部１１は、フレームを他の装置に送信する。受信部１２は、他の装置からフレームを受信する。受信部１２は、受信したフレームを、送信元特定部２１、決定部２２、データ格納部２３に出力する。
【００１９】
送信元特定部２１は、受信フレームの送信元を特定する。例えば、送信元特定部２１は、フレームの送信元のＭＡＣアドレスを特定しても良い。また、システム中の各通信装置１０に識別情報が割り当てられている場合、送信元特定部２１は、フレームの送信元の通信装置１０に対応付けられた識別情報を取得しても良い。決定部２２は、フレームのヘッダからｌｅｎｇｔｈ値を取得し、ｌｅｎｇｔｈ値を用いて、ペイロード中のデータの順序を決定する。さらに、決定部２２は、ペイロード中のデータの順序に応じて、ペイロード中のデータを格納するメモリ領域を、送信元の通信装置１０からのデータの格納に割り当てられた領域のうちから選択する。データ格納部２３は、データの格納に使用されるメモリを含む。データ格納部２３は、送信元特定部２１からフレームの送信元を特定する情報を取得するとともに、決定部２２からフレーム中のデータの格納に使用する領域の情報を取得する。データ格納部２３は、送信元特定部２１と決定部２２から取得した情報の組み合わせで特定される領域に、フレーム中のデータを格納する。
【００２０】
判定部２４は、フレームを用いて受信した分割データの各々について、その分割データが未処理のデータのうちで先頭に最も近いデータであるかを判定する。判定部２４は、判定に際して、送信元特定部２１と決定部２２で得られた情報を適宜使用する。判定部２４は、判定結果を読み出しアドレス生成部２５に通知する。読み出しアドレス生成部２５は、未処理のデータのうちで先頭に最も近いデータであると判定されたデータの格納領域に割り当てられたアドレスを読み出し対象のデータの格納領域として生成する。データ格納部２３は、読み出しアドレス生成部２５から通知されたアドレスの情報を、受信処理部３０に出力する。受信処理部３０は、入力された分割データを順番に処理し、適宜、データをアプリケーション処理部３５に出力する。アプリケーション処理部３５は、アプリケーションによるデータ処理を行う。
【００２１】
アプリケーション処理部３５は、他の通信装置１０への送信データを生成すると、計算部５１に出力する。計算部５１は、分割条件情報４１を用いて、データの分割数と、分割したデータを含むフレーム中のペイロード長を決定する。分割条件情報４１は、フレームに含まれるペイロード長の情報と、フレーム中のデータの順序を対応付けるための条件である。フレーム生成部５２は、計算部５１によって決定された分割数とｌｅｎｇｔｈ値を用いて、フレームを生成する。
【００２２】
図４は、システム中の装置のハードウェア構成の例を説明する図である。通信装置１０（１０ａ、１０ｂ）は、プロセッサ１０１（１０１ａ、１０１ｂ）、メモリ１０２（１０２ａ、１０２ｂ）、バス１０３（１０３ａ、１０３ｂ）、ネットワーク接続装置１０４（１０４ａ、１０４ｂ）を備える。０系パスと１系パスは、いずれもスイッチ回路１１０で実現される。例えば、０系パスはスイッチ回路１１０ａで実現され、１系パスはスイッチ回路１１０ｂで実現される。プロセッサ１０１は、任意の処理回路であり、例えば、ＣＰＵ（Central Processing Unit）やＬＳＩ（Large-Scale Integration）とすることができる。プロセッサ１０１は、メモリ１０２をワーキングメモリとして使用して、プログラムを実行することにより、様々な処理を実行する。メモリ１０２には、ＲＡＭ（Random Access Memory）が含まれ、さらに、ＲＯＭ（Read Only Memory）等の不揮発性のメモリも含まれる。メモリ１０２は、プログラムやプロセッサ１０１での処理に使用されるデータの格納に使用される。ネットワーク接続装置１０４は、ネットワークを介した他の装置との通信に使用される。
【００２３】
さらに、オプションとして、通信装置１０は、可搬記憶媒体にアクセス可能であっても良い。この場合、通信装置１０は、メモリ１０２中のデータを可搬記憶媒体に出力することができ、また、可搬記憶媒体からプログラムやデータ等を読み出すことができる。ここで、可搬記憶媒体は、持ち運びが可能な任意の記憶媒体である。
【００２４】
いずれの通信装置１０においても、送信元特定部２１、決定部２２、判定部２４、読み出しアドレス生成部２５、受信処理部３０、アプリケーション処理部３５、送信処理部５０は、プロセッサ１０１によって実現される。データ格納部２３は、プロセッサ１０１とメモリ１０２によって実現される。記憶部４０は、メモリ１０２によって実現される。送信部１１と受信部１２は、ネットワーク接続装置１０４とプロセッサ１０１によって実現される。
【００２５】
＜フレームの例＞
図５は、フレームのフォーマットの例を説明する図である。実施形態にかかる方法に適用されるフレームは、ヘッダ部分にフレームのペイロード長が記録される任意のフレームである。図５の例では、イーサネットフレームが使用される場合の例を示している。図５の例では、フレームは、ヘッダ、ペイロード、ＦＣＳ（Frame Check Sequence）を備える。ヘッダには、宛先ＭＡＣ（Media Access Control）アドレス、送信元ＭＡＣアドレス、ペイロード長（ｌｅｎｇｔｈ値）が含まれる。ＦＣＳは、フレームの正常性のチェックに使用され、ＣＲＣ（Cyclic Redundancy Check）の格納に使用される。ペイロードには、送信元から送信されたデータが含まれているが、他の情報もペイロード中に含まれ得る。例えば、図５に示す例では、フレームのペイロードにＩＰ（Internet Protocol）パケットが含まれている。
【００２６】
ＩＰパケットは、データの他にＩＰヘッダを含む。ＩＰヘッダは、バージョン情報、ヘッダ長、サービスタイプ、パケット長、識別子、フラグ、フラグメントオフセット、ＴＴＬ（Time to live）プロトコル番号、ヘッダチェックサム、送信元ＩＰアドレス、宛先ＩＰアドレスを含む。さらに、ＩＰヘッダには、オプション領域と、ＩＰヘッダの長さを調整するためのパディングが含まれていてもよい。ＩＰヘッダのデータ部は、送信処理を行う通信装置１０で生成された分割データの格納に使用される。
【００２７】
＜実施形態＞
以下、実施形態を、送信側の通信装置１０でのフレームの生成と、受信側の通信装置１０でのフレームの受信と解析に分けて説明する。なお、以下の説明では、送受信されるフレームは、図５で説明したフォーマットを有しているものとする。
【００２８】
（１）送信対象のフレームの生成
図６は、データの分割処理の例を説明する図である。ステップＳ２１に示すように、アプリケーション処理部３５において送信データが生成されたとする。アプリケーション処理部３５は、送信データを計算部５１に出力する。
【００２９】
計算部５１は、予め、分割データの大きさの基準となる基準値を記憶しているとする。計算部５１は、送信データが入力されると、送信データの大きさと基準値を用いて、分割数を決定する。ここで、基準値は、０系パスと１系パスの両方に均等にデータを転送可能な数の分割データの生成に有効であると見込まれる値の基準であり、通信システム中で送受信されるデータの大きさなどから計算される。このとき、計算部５１は、送信データの長さと、分割数分のＩＰヘッダの合計分をペイロードとして送信することができるフレームの数を、基準値を用いて設定する。すなわち、分割数をＮとすると、ペイロードを用いて送信されるデータの総量は、送信データ＋ＩＰヘッダ長×Ｎで求められる。計算部５１は、データの総量を分割数で割った値が基準値に近い値になるように、分割数を決定する。
【００３０】
例えば、送信データが１１００バイト、ＩＰヘッダ長が２０バイトであり、基準値として２５６バイトを記憶しているとする。計算部５１は、
（送信データ長＋ＩＰヘッダ長×Ｎ）／Ｎ
が基準値に近くなるようにＮの値を設定する。例えば、計算部５１は、分割数Ｎ＝５としたとする。ステップＳ２２は、送信データを５つに分割した様子の例を示す。ステップＳ２２では、分割データのうちの先頭のデータ（先頭データ）をＳ、分割データのうちの末尾の分割データ（最終データ）をＥ（Ｅｎｄ）、先頭データと最終データの間の分割データをＭ（Ｍｉｄｄｌｅ）と記載している。
【００３１】
次に、計算部５１は、分割条件情報４１を用いて、分割される各データを含むペイロード長を決定する。例えば、分割条件情報４１が以下の条件１〜条件４の組み合わせであるとする。
【００３２】
条件１：先頭データと最終データ以外の分割データを含むペイロードの長さ（ｌｅｎｇｔｈ値）を２進数で表したときに、下位４ビットが００００である。
【００３３】
条件２：先頭データを含むペイロードの長さを２進数で表すと、下位５ビット目の値が０になり、下位４ビットはデータの分割数を表わす。
【００３４】
条件３：中間データを含むペイロード長は、中間データが先頭に近いほど短く、末尾に近づくたびに１６ビットずつ長くなる。
【００３５】
条件４：最終データを含むペイロードの長さを２進数で表すと、下位５ビット目の値が１になり、下位４ビットは００００以外の値である。
【００３６】
例えば、図６のステップＳ２３に示すように、送信データが５つに分割され、送信データが１１００、ＩＰヘッダが２０バイトである場合、ペイロードに含められるデータの総量は、１１００＋２０×５＝１２００バイトである。以下、ペイロード長をアルファベットのＬと、そのペイロードに含まれているデータの順序を表わす数字の組み合わせで示す。例えば、先頭データを含むペイロードの長さをＬ１、２番目の分割データを含むペイロードの長さをＬ２、３番目の分割データを含むペイロードの長さをＬ３と表すとする。さらに、４番目の分割データを含むペイロードの長さをＬ４、最終データを含むペイロードの長さをＬ５とする。すると、計算部５１は、以下のように、Ｌ１〜Ｌ５を決定したとする。
Ｌ１：１６５バイト（００００  ００００  １０１０  ０１０１）
Ｌ２：２５６バイト（００００  ０００１  ００００  ００００）
Ｌ３：２７２バイト（００００  ０００１  ０００１  ００００）
Ｌ４：２８８バイト（００００  ０００１  ００１０  ００００）
Ｌ５：２１９バイト（００００  ００００  １１０１  １０１１）
この例では、分かりやすくするために、ペイロード長の２進数表記をカッコ書きとし、各フレーム中のペイロード長も併記している。計算部５１は、得られたペイロード長をフレーム生成部５２に出力する。なお、Ｌ１〜Ｌ５の値は一例であり、条件１〜条件４の全てを満たしていれば、他の値がＬ１〜Ｌ５として求められても良い。
【００３７】
フレーム生成部５２は、計算部５１から入力されたペイロード長を用いて、送信対象とするフレームを生成する。以下、フレームをアルファベットのＦと、そのフレームのペイロードに含まれているデータの順序を表わす数字の組み合わせで示す。例えば、先頭のデータが含まれているフレームをＦ１と表わす。
【００３８】
フレーム生成部５２は、各分割データの長さを、計算部５１から通知されたペイロード長からＩＰヘッダ長を差し引いた長さとする。例えば、Ｌ１＝１６５バイトであるので、フレーム生成部５２は、送信データのうちの先頭の１４５バイトを先頭データとし、先頭データにＩＰヘッダを付加してＩＰパケットを生成する。さらに、フレーム生成部５２は、先頭データを含むＩＰパケットをペイロードに含めたフレームＦ１を生成し、フレームＦ１を送信部１１に出力する。さらに、フレーム生成部５２は、同様の処理を行うことにより、２番目の分割データを含むフレームＦ２、３番目の分割データを含むフレームＦ３、４番目の分割データを含むフレームＦ４、最終データを含むフレームＦ５を生成する。フレーム生成部５２は、フレームＦ２〜Ｆ５も送信部１１に出力する。
【００３９】
送信部１１は、フレーム生成部５２から入力されたフレームを送信する。このとき、送信部１１は、なるべく、０系パスからの送信データ量と、１系パスのからの送信データ量の差が小さくなるように、０系パスと１系パスの両方を用いる。例えば、送信部１１は、フレームＦ１〜Ｆ５を、０系パスと１系パスを交互に用いて送信してもよい。また、送信部１１は、０系パスと１系パスを２フレームずつ交代に使用してもよく、フレーム長に合わせて、０系パスから送信されたデータ量と、１系パスから送信されたデータ量の差が小さくなるように、通信に使用するパスを選択しても良い。
【００４０】
図７は、データの送信処理の例を説明するフローチャートである。なお、図７は一例であり、実装に応じて処理は変更され得る。例えば、送信部１１が最初に使用する送信先のパスは、実装に応じて変更され得る。図７では、処理対象のフレーム数をカウントするために、変数Ｎを使用する。
【００４１】
送信部１１は、最初に使用する送信先を０系パスに設定する（ステップＳ１１）。アプリケーション処理部３５は送信データを生成し、計算部５１は、送信データのサイズを特定する（ステップＳ３２）。なお、ステップＳ３２で特定される値は、送信データのトータルサイズである。
【００４２】
ステップＳ３３において、計算部５１は、分割数を決定するとともに、各分割データを含めるペイロード長を決定する。ここで、ペイロード長とＩＰヘッダ長より分割データのサイズが決まるので、計算部５１は、ペイロード長を決定することにより、分割データの各々の長さを決定しているといえる。さらに、計算部５１は、変数Ｎを分割数に設定する。
【００４３】
フレーム生成部５２は、計算部５１で決定されたペイロード長を用いて、フレームを生成し、送信部１１に出力する（ステップＳ３４）。送信部１１は、変数Ｎが０より大きいかを判定する（ステップＳ３５）。変数Ｎが０より大きい場合、送信部１１は、送信先が０系パスであるかを判定する（ステップＳ３５でＹｅｓ、ステップＳ３６）。送信先が０系パスである場合、送信部１１は、処理対象のフレームを０系パスに送信し、送信先の設定を１系パスに変更する（ステップＳ３６でＹｅｓ、ステップＳ３７、Ｓ３８）。一方、送信先が０系パスではない場合、送信部１１は、処理対象のフレームを１系パスに送信し、送信先の設定を０系パスに変更する（ステップＳ３６でＮｏ、ステップＳ３９、Ｓ４０）。ステップＳ３８かＳ４０の処理後、送信部１１は、変数Ｎを１つデクリメントし、ステップＳ３５に戻る（ステップＳ４１）。変数Ｎが０になるまでステップＳ３５〜Ｓ４１の処理が繰り返される。変数Ｎが０になると、送信部１１は処理を終了する（ステップＳ３５でＮｏ）。
【００４４】
（２）フレームの受信と解析
フレームを受信した装置は、受信フレーム中の分割データをデータ格納部２３に格納しておき、データの順序に応じて、分割データをデータ格納部２３から読み出すことにより、順序の調整を行う。
【００４５】
図８は、分割データの格納領域の例を説明する図である。データ格納部２３には、データ格納領域２６と最終データ格納領域２７が含まれている。データ格納領域２６は、最終データではない分割データの格納に使用される領域である。データ格納領域２６には、フレームの送信元の通信装置１０ごとに、その通信装置１０から受信した分割データを格納する領域が設けられている。個々の送信元に対応付けられた領域には、データの格納領域が複数設けられ、個々の格納領域には、その格納領域の位置を表わす数値が対応付けられている。ここで、分割データを格納する領域は、その分割データを含む受信フレームの送信元と、分割データの順序に応じて決定される。最終データ格納領域２７には、フレームの送信元の通信装置１０ごとに、その通信装置１０から受信した最終データが格納される。
【００４６】
フレームを受信した通信装置１０中では、送信元特定部２１がフレームのＭＡＣアドレスの情報などを用いて送信元を特定し、決定部２２がフレーム中に含まれている分割データの順序を特定する。決定部２２の処理の詳細については後述する。従って、送信元特定部２１と決定部２２の処理結果により、受信フレーム中のデータの格納領域が決定される。
【００４７】
例えば、図８は、通信装置１０ｂが通信装置１０ａ、通信装置１０ｄ、通信装置１０ｆなどからフレームを受信している場合に、通信装置１０ｂが備えるデータ格納部２３の例であるとする。図８では、通信装置１０ａが送信元であるフレームに含まれている分割データの格納領域のうち、０番目から４番目の領域を図示している。なお、１つの送信元に対応付けられる格納領域の数は、システムにおいて１つのデータの分割に使用され得る分割数の最大値以上に設定されている。図８の例では、２番目の分割データｄ２と３番目の分割データｄ３が格納されているが、先頭の分割データｄ１を含むフレームは、通信装置１０ｂに到達していないので、データ格納領域２６に格納されていない。さらに、通信装置１０ｂは通信装置１０ａから最終の分割データを含むフレームを受信すると、最終の分割データを、最終データ格納領域２７のうちで通信装置１０ａに対応付けられた領域に格納する。
【００４８】
図９は、フレームを受信した通信装置１０で行われる分割データの格納処理の例を説明するフローチャートである。なお、図９の例では、判定部２４は、分割データに対する受信済みフラグを使用するものとする。受信済みフラグ＝１は、そのフラグに対応付けられた分割データをデータ格納部２３へ格納済みであることを表わし、受信済みフラグ＝０は、そのフラグに対応付けられた分割データをデータ格納部２３から読出し済みであることを表わす。
【００４９】
通信装置１０の受信部１２は、フレームを受信する（ステップＳ５１）。送信元特定部２１は、フレームの送信元を特定する（ステップＳ５２）。決定部２２は、フレームのヘッダからｌｅｎｇｔｈ値を取得すると共に、分割条件情報４１を用いて、ｌｅｎｇｔｈ値が先頭データを表わす値であるかを判定する（ステップＳ５３、Ｓ５４）。ｌｅｎｇｔｈ値が先頭データを表わす値である場合、決定部２２は、受信フレーム中のデータが先頭データであると判定する（ステップＳ５４でＹｅｓ）。さらに、決定部２２は、ｌｅｎｇｔｈ値に含まれているビット列を用いて、分割数（Ｍ）を特定する（ステップＳ５５）。判定部２４は、フレームの送信元に対応付けられた先頭データの受信済みフラグを１に設定し、データ格納部２３は受信フレーム中の先頭データを、フレームの送信元に対応付けられた先頭データの格納領域に格納する（ステップＳ５６）。
【００５０】
ｌｅｎｇｔｈ値が先頭データを表わす値ではない場合、決定部２２は、分割条件情報４１を用いて、ｌｅｎｇｔｈ値が最終データを表わす値であるかを判定する（ステップＳ５４でＮｏ、ステップＳ５７）。ｌｅｎｇｔｈ値が最終データを表わす値である場合、決定部２２は、受信フレーム中のデータが最終データであると判定する（ステップＳ５７でＹｅｓ）。すると、判定部２４は、フレームの送信元に対応付けられた最終データの受信済みフラグを１に設定し、データ格納部２３は、最終データ格納領域２７のうちで、フレームの送信元に対応付けられた格納領域に、最終データを格納する（ステップＳ５８）。
【００５１】
ｌｅｎｇｔｈ値が最終データを表わす値でもない場合、決定部２２は、分割条件情報４１とｌｅｎｇｔｈ値に含まれているビット列を用いて、分割データの順序を特定する（ステップＳ５９）。判定部２４は、フレームの送信元と特定された順序に対応付けられた分割データの受信済みフラグを１に設定し、データ格納部２３は受信フレーム中の分割データを、フレームの送信元と特定された順序に対応付けられた格納領域に格納する（ステップＳ６０）。
【００５２】
図１０は、分割データの格納処理の例を説明するフローチャートである。図１０を参照しながら、通信装置１０ｂが通信装置１０ａと同じ分割条件情報４１を保持している場合を例として、通信装置１０ａからフレームを受信した通信装置１０ｂ中の決定部２２の判定処理の具体例を含めて通信装置１０ｂでの処理の例を説明する。なお、図１０の説明において、通信装置１０ａから送信されたフレームのペイロード長は、図６を参照しながら説明したと同様であるとする。
【００５３】
以下の説明では、動作を行っている通信装置１０を明確にするために、符号の最後に動作を行っている通信装置１０に割り当てられているアルファベットを記載することがある。例えば、送信部１１ａは通信装置１０ａの送信部１１であり、受信部１２ｂは通信装置１０ｂの受信部１２である。さらに、図１０では、通信システム中に含まれている各通信装置１０に識別情報（ＩＤ）が割り当てられており、各通信装置１０の送信元特定部２１は、ＩＤを用いて送信元を特定するものとする。
【００５４】
図１０の例では、分割数によらずにデータの管理を簡便化するために、最終データ以外の受信済みフラグと最終データの受信済みフラグを分けて管理しているものとする。ＦＬＧ（Ｘ）［ｎ］は、ＩＤ＝Ｘが割り当てられた通信装置１０から送信されたｎ番目の分割データを受信したかを表わすフラグである。一方、ＦＬＧ＿ＬＡＳＴ（Ｘ）は、ＩＤ＝Ｘが割り当てられた通信装置１０から送信された最終データを受信したかを表わすフラグである。ＦＬＧ（Ｘ）［ｎ］とＦＬＧ＿ＬＡＳＴ（Ｘ）のいずれのフラグも、そのフラグに対応付けられたデータの受信に伴って、１に設定されるものとする。なお、最終データ以外の受信済みフラグと最終データの受信済みフラグのいずれも、通信装置１０の起動の際に初期化されているものとする。
【００５５】
通信装置１０ｂの受信部１２ｂは、フレームを受信する（ステップＳ７１）。通信装置１０ｂ中の受信部１２ｂは、フレームを受信すると、受信フレームを送信元特定部２１ｂ、決定部２２ｂ、データ格納部２３ｂに出力する。送信元特定部２１ｂは、受信フレームに含まれている送信元のＩＤ（ＳｏｕｒｃｅＩＤ）を用いて、フレームの送信元が通信装置１０ａであることを特定する（ステップＳ７２）。例えば、通信装置１０ａにはＩＤ＝Ｘが割り当てられているとする。送信元特定部２１ｂは得られた結果をデータ格納部２３ｂに出力する。
【００５６】
決定部２２ｂは、受信フレーム中のペイロード長をイーサネットヘッダのｌｅｎｇｔｈ値から取得する（ステップＳ７３）。以下、ｌｅｎｇｔｈ値中の処理対象のビットを表わす際に、Ｌ［ｎ］という表記を用いる。Ｌ［ｎ］という表記のうち、ｎは処理対象のビットの範囲を示す。処理対象のビットが１ビットである場合、ｎはビット列の最下位のビットから処理対象のビットまでのビット数である。例えば、Ｌ［０］はｌｅｎｇｔｈ値の最下位のビットの値を表わす。一方、処理対象のビットが２ビット以上である場合、ｎとして処理対象のビット列の開始位置と終了位置の間をコロンで区切った値が用いられる。なお、処理対象のビット列の開始位置と終了位置のいずれも、最下位ビットからのビット数として表わされる。例えば、ｌｅｎｇｔｈ値の１６ビット全体を表わす場合、Ｌ［１５：０］と記載される。
【００５７】
決定部２２ｂは、受信フレームのｌｅｎｇｔｈ値を表わすビット列のうち、下位４ビット（Ｌ［３：０］）が００００ではないかを判定する（ステップＳ７４）。受信フレームのｌｅｎｇｔｈ値の下位４ビットが００００ではない場合、分割条件情報４１中の条件２および条件４より、分割データは先頭データか、最終データのいずれかである（ステップＳ７４でＹｅｓ）。そこで、決定部２２ｂは、受信フレームのｌｅｎｇｔｈ値の下位から５ビット目（Ｌ［４］）の値が０であるかを判定する（ステップＳ７５）。
【００５８】
受信フレームのｌｅｎｇｔｈ値の下位から５ビット目（Ｌ［４］）の値が０である場合、決定部２２ｂは、分割条件情報４１中の条件２より、処理対象のフレームは先頭データであると判定する（ステップＳ７５でＹｅｓ）。決定部２２ｂは、得られた判定結果をデータ格納部２３ｂに出力する。従って、データ格納部２３ｂは、送信元特定部２１ｂと決定部２２ｂの処理結果より、受信フレーム中のデータがＳｏｕｒｃｅＩＤ＝Ｘ（通信装置１０ａ）からの先頭データであると認識する。さらに、分割条件情報４１の条件２により、先頭データを含むフレームのペイロード長の下位４ビットは分割数に設定されているので、決定部２２ｂは、ｌｅｎｇｔｈ値の下位４ビット（Ｌ［３：０］）が表わす値を、分割数とする（ステップＳ７６）。データ格納部２３ｂは、ＩＤ＝Ｘに対応付けられた０番目の領域に、受信フレーム中のデータを保持する。ここで、送信元特定部２１ｂと決定部２２ｂの処理結果は、判定部２４ｂにも出力されている。このため、判定部２４ｂは、ＳｏｕｒｃｅＩＤ＝Ｘ（通信装置１０ａ）からの先頭データの受信状況を表わすフラグ（ＦＬＧ（Ｘ）［０］）を１に設定する（ステップＳ７７）。
【００５９】
受信フレームのｌｅｎｇｔｈ値の下位から５ビット目（Ｌ［４］）の値が１である場合、決定部２２ｂは、分割条件情報４１中の条件４より、処理対象のフレームは最終データであると判定する（ステップＳ７５でＮｏ）。データ格納部２３ｂは、送信元特定部２１ｂと決定部２２ｂの処理結果より、受信フレーム中のデータがＳｏｕｒｃｅＩＤ＝Ｘ（通信装置１０ａ）から送信された最終データであると認識する（ステップＳ７８）。データ格納部２３ｂは、最終データ格納領域２７中で、通信装置１０ａ（ＩＤ＝Ｘ）に対応付けられた領域に、受信フレーム中のデータを保持する。一方、判定部２４ｂは、ＳｏｕｒｃｅＩＤ＝Ｘ（通信装置１０ａ）からの最終データの受信状況を表わすフラグ（ＦＬＧ＿ＬＡＳＴ（Ｘ）［０］）を１に設定する（ステップＳ７９）。
【００６０】
受信フレームのｌｅｎｇｔｈ値の下位４ビットが００００である場合、分割条件情報４１中の条件１より、分割データは先頭データではなく、最終データでもない（ステップＳ７４でＮｏ）。そこで、決定部２２ｂは、取得したｌｅｎｇｔｈ値と分割条件情報４１を用いて、受信したフレーム中に含まれているデータの順序を決定する。例えば、決定部２２ｂは、分割条件情報４１の条件３に基づいて、ペイロード長が短い順にフレーム中のデータの順序を特定する。中間の分割データでは、データの末尾に近づくたびに１６ビットずつペイロードが長くなるので、決定部２２ｂは、下位５ビットよりも上位のビット列の値を中間データ同士で比較する。例えば、データが５つに分割されている場合、中間の分割データは３つである。また、分割条件情報４１中の条件３より、中間の分割データを含むペイロード長は、データの末尾に近づくにつれ、１６ビットずつ長くなる。そこで、決定部２２ｂは、ｌｅｎｇｔｈ値の下位５ビット目と６ビット目のビット列（Ｌ［５：６］）が表わす値に応じて、ペイロード中に含まれている分割データの順序を決定する。
【００６１】
ｌｅｎｇｔｈ値の下位５ビット目と６ビット目のビット列（Ｌ［５：６］）が０である場合、決定部２２ｂは、受信フレームに中間の分割データの中で最も先頭に近いデータ（２番目の分割データ）が含まれていると判定する。（ステップＳ８０でＹｅｓ）。データ格納部２３ｂは、送信元特定部２１ｂと決定部２２ｂの処理結果より、受信フレーム中のデータがＳｏｕｒｃｅＩＤ＝Ｘ（通信装置１０ａ）からの２番目の分割データであると認識する（ステップＳ８１）。データ格納部２３ｂは、ＩＤ＝Ｘに対応付けられた１番目の領域に、受信フレーム中のデータを保持する。一方、判定部２４ｂは、ＳｏｕｒｃｅＩＤ＝Ｘ（通信装置１０ａ）からの２番目の分割データの受信状況を表わすフラグ（ＦＬＧ（Ｘ）［１］）を１に設定する（ステップＳ８２）。
【００６２】
ｌｅｎｇｔｈ値の下位５ビット目と６ビット目のビット列（Ｌ［５：６］）が０でない場合、決定部２２ｂは、ｌｅｎｇｔｈ値の下位５ビット目と６ビット目のビット列の値が１であるかを判定する（ステップＳ８０でＮｏ、ステップＳ８３）。ｌｅｎｇｔｈ値の下位５ビット目と６ビット目のビット列の値が１である場合、決定部２２ｂは、受信フレームに中間の分割データの中で２番目に先頭に近いデータ（３番目の分割データ）が含まれていると判定する。（ステップＳ８３でＹｅｓ）。データ格納部２３ｂは、送信元特定部２１ｂと決定部２２ｂの処理結果より、受信フレーム中のデータがＳｏｕｒｃｅＩＤ＝Ｘ（通信装置１０ａ）からの３番目の分割データであると認識する（ステップＳ８４）。データ格納部２３ｂは、ＩＤ＝Ｘに対応付けられた２番目の領域に、受信フレーム中のデータを保持する。一方、判定部２４ｂは、ＳｏｕｒｃｅＩＤ＝Ｘ（通信装置１０ａ）からの３番目の分割データの受信状況を表わすフラグ（ＦＬＧ（Ｘ）［２］）を１に設定する（ステップＳ８５）。
【００６３】
ｌｅｎｇｔｈ値の下位５ビット目と６ビット目のビット列（Ｌ［５：６］）の値が１でない場合、決定部２２ｂは、ｌｅｎｇｔｈ値の下位５ビット目と６ビット目のビット列の値が２を表わすかを判定する（ステップＳ８３でＮｏ、ステップＳ８６）。ｌｅｎｇｔｈ値の下位５ビット目と６ビット目のビット列の値が２を表わす場合、決定部２２ｂは、受信フレームに中間の分割データの中で３番目に先頭に近いデータ（４番目の分割データ）が含まれていると判定する。（ステップＳ８６でＹｅｓ）。データ格納部２３ｂは、送信元特定部２１ｂと決定部２２ｂの処理結果より、受信フレーム中のデータがＳｏｕｒｃｅＩＤ＝Ｘ（通信装置１０ａ）からの４番目の分割データであると認識する（ステップＳ８７）。データ格納部２３ｂは、ＩＤ＝Ｘに対応付けられた３番目の領域に、受信フレーム中のデータを保持する。一方、判定部２４ｂは、ＳｏｕｒｃｅＩＤ＝Ｘ（通信装置１０ａ）からの４番目の分割データの受信状況を表わすフラグ（ＦＬＧ（Ｘ）［３］）を１に設定する（ステップＳ８８）。
【００６４】
なお、図１０は処理の一例であり、実装に応じて処理の順序は変更され得る。例えば、ステップＳ８０の判定の前に、ステップＳ８３の判定やステップＳ８６の判定が行われてもよい。さらに、図１０では、中間の分割データの順序の判定にｌｅｎｇｔｈ値の下位から５ビット目と６ビット目を使用する場合の例を説明したが、中間の分割データの順序の特定に使用されるビット数は任意である。
【００６５】
図１１は、分割データの読み出し処理の例を説明するフローチャートである。図１１では、変数Ａと定数Ｍを使用する。変数Ａは読み出し対象の分割データの格納に使用されている領域の位置を示す番号である。定数Ｍは、データの分割数である。なお、図１１の処理を開始する時点では、変数Ａの値は０に初期化されているとする。なお、以下の説明でも、通信装置１０ａが通信装置１０ｂへフレームを送信した場合を例として説明する。また、通信装置１０ａに割り当てられたＩＤはＸであるとする。
【００６６】
ループ端Ｌ１とＬ２で挟まれたステップＳ１０１〜Ｓ１０３の処理は、ループ端Ｌ１に記載された条件を満たす間、繰り返される。判定部２４ｂは、ＩＤ＝Ｘが割り当てられた通信装置１０から送信されたＡ番目の分割データの受信状況を表すフラグ（ＦＬＧ（Ｘ）［Ａ］）が１に設定されているかを判定する（ステップＳ１０１）。ＦＬＧ（Ｘ）［Ａ］が１に設定されていない場合、判定部２４ｂは待機する（ステップＳ１０１でＮｏ）。ＦＬＧ（Ｘ）［Ａ］が１である場合、読み出しアドレス生成部２５ｂは、ＩＤ＝Ｘに対応付けられたＡ番目の領域を読み出しアドレスに指定し、データ格納部２３ｂに通知する（ステップＳ１０１でＹｅｓ）。この処理により、読み出しアドレス生成部２５ｂは、指定したアドレスに格納されたデータの読み出しをデータ格納部２３ｂに行わせる（ステップＳ１０２）。その後、判定部２４ｂは、変数Ａを１つインクリメントする（ステップＳ１０３）。
【００６７】
変数ＡがＭ−２に達すると、判定部２４ｂは、ループ端Ｌ１とＬ２で挟まれた処理を終了する。判定部２４ｂは、ＩＤ＝Ｘが割り当てられた通信装置１０から送信された最終データの受信状況を表すフラグ（ＦＬＧ＿ＬＡＳＴ（Ｘ））が１に設定されているかを判定する（ステップＳ１０４）。ＦＬＧ＿ＬＡＳＴ（Ｘ）が１に設定されていない場合、判定部２４ｂは待機する（ステップＳ１０４でＮｏ）。ＦＬＧ＿ＬＡＳＴ（Ｘ）が１である場合、読み出しアドレス生成部２５ｂは、最終データ格納領域２７のうちでＩＤ＝Ｘに対応付けられた領域のアドレスを生成し、データ格納部２３ｂに通知する（ステップＳ１０４でＹｅｓ）。この処理により、読み出しアドレス生成部２５ｂは、生成したアドレスに格納されたデータの読み出しをデータ格納部２３ｂに行わせる（ステップＳ１０５）。ステップＳ１０５の処理後、判定部２４ｂは、ＩＤ＝Ｘが割り当てられた通信装置１０（通信装置１０ａ）から受信するデータの受信状態の判定に使用するＦＬＧ（Ｘ）とＦＬＧ＿ＬＡＳＴ（Ｘ）を初期化する（ステップＳ１０６）。
【００６８】
図１２は、通信処理の例を説明するシーケンス図である。図１２を参照しながら、通信装置１０ｂが通信装置１０ａから受信したフレームに対して図１０と図１１を用いて説明した処理を行ったときにデータがどの順序で受信処理部３０ｂに出力されるかを時系列で説明する。図１２の例では、フレームＦ１〜Ｆ５が、フレームＦ１、Ｆ２、Ｆ３、Ｆ４、Ｆ５の順に通信装置１０ａから送信されている。送信部１１ａは、フレームＦ１、Ｆ３、Ｆ５を、０系パスを介して送信し、フレームＦ２とＦ４を、１系パスを介して送信している。ここで、０系パスを介して通信装置１０ａから送信されたフレームが通信装置１０ｂに到達するまでにかかる時間は、１系パスを介して通信装置１０ａから送信されたフレームが通信装置１０ｂに到達するまでにかかる時間よりも長いとする。このため、通信装置１０ｂの受信部１２ｂには、フレームＦ２、Ｆ１、Ｆ４、Ｆ３、Ｆ５の順にフレームＦ１〜Ｆ５が到達しているとする。
【００６９】
さらに、フレームＦ１〜Ｆ５のペイロード長は以下のとおりであるとする。
Ｌ１：１６５バイト（００００  ００００  １０１０  ０１０１）
Ｌ２：２５６バイト（００００  ０００１  ００００  ００００）
Ｌ３：２７２バイト（００００  ０００１  ０００１  ００００）
Ｌ４：２８８バイト（００００  ０００１  ００１０  ００００）
Ｌ５：２１９バイト（００００  ００００  １１０１  １０１１）
なお、図１２の例では、予め、分割数の最大値は１６に設定されているとする。この場合、ペイロード長を表すｌｅｎｇｔｈ値の下位５ビット目から８ビット目のビット列で表される数値によって、中間の分割データの順序が特定される。
【００７０】
通信装置１０ｂ中の受信部１２ｂは、フレームＦ２を受信すると、フレームＦ２を送信元特定部２１ｂ、決定部２２ｂ、データ格納部２３ｂに出力する。送信元特定部２１ｂは、送信元が通信装置１０ａであることを特定する。決定部２２ｂは、フレームＦ２のペイロード長Ｌ２を２進数で表わすと、００００  ０００１  ００００  ００００であり、下位４ビットが００００であることから、受信フレームには中間の分割データが含まれていると判定する。さらに、ペイロード長Ｌ２の下位５〜８ビット目の値が０であるので、決定部２２ｂは、分割条件情報４１中の条件３より、フレームＦ２には、２番目の分割データが含まれていると判定する。フレームＦ２中のデータは、データ格納部２３ｂが備えるデータ格納領域２６中の１番目の領域に格納される。判定部２４ｂは、２番目の分割データの受信状況を表すＦＬＧ（Ｘ）［１］を１に設定する。
【００７１】
受信部１２ｂは、フレームＦ１を受信すると、フレームＦ１を送信元特定部２１ｂ、決定部２２ｂ、データ格納部２３ｂに出力する。決定部２２ｂは、フレームＦ１のペイロード長Ｌ１（００００  ００００  １０１０  ０１０１）を取得すると、下位４ビットが００００でなく、下位５ビット目が０であることから、フレームＦ１には先頭データが含まれていると判定する。決定部２２ｂは、さらに、ペイロード長Ｌ１の下位４ビットの値が０１０１であることから、分割数が５であると判定する。フレームＦ１中のデータは、データ格納部２３ｂが備えるデータ格納領域２６中の０番目の領域に格納される。判定部２４ｂは、先頭データの受信状況を表すＦＬＧ（Ｘ）［０］を１に設定する。すると、読み出しアドレス生成部２５ｂは、ＦＬＧ（Ｘ）［０］が１に設定されたことから、読み出しアドレスをデータ格納領域２６中の０番目の領域のアドレスに設定するので、データ格納部２３ｂは、先頭データを受信処理部３０ｂに出力する（矢印Ａ１）。
【００７２】
先頭データの読み出しが終わると、判定部２４ｂは、２番目の分割データの受信状況を表すフラグＦＬＧ（Ｘ）［１］が１に設定されているかを判定する。この時点では、ＦＬＧ（Ｘ）［１］が１に設定されているので、読み出しアドレス生成部２５ｂは、読み出しアドレスをデータ格納領域２６中の１番目の領域のアドレスに設定する。すると、データ格納部２３ｂは、指定された領域から、２番目の分割データを読み出して、受信処理部３０ｂに出力する（矢印Ａ２）。
【００７３】
受信部１２ｂは、フレームＦ４を受信する。決定部２２ｂは、フレームＦ４のペイロード長Ｌ４（００００  ０００１  ００１０  ００００）を取得すると、下位４ビットが００００であることから、受信フレームには中間の分割データが含まれていると判定する。さらに、ペイロード長Ｌ４の下位５〜８ビット目の値が２であるので、決定部２２ｂは、フレームＦ４には、４番目の分割データが含まれていると判定する。フレームＦ４中のデータは、データ格納部２３ｂが備えるデータ格納領域２６中の３番目の領域に格納される。判定部２４ｂは、４番目の分割データの受信状況を表すＦＬＧ（Ｘ）［３］を１に設定する。
【００７４】
受信部１２ｂは、フレームＦ３を受信する。決定部２２ｂは、フレームＦ３のペイロード長Ｌ３（００００  ０００１  ０００１  ００００）を取得すると、下位４ビットが００００であることから、受信フレームには中間の分割データが含まれていると判定する。さらに、ペイロード長Ｌ４の下位５〜８ビット目の値が１であるので、決定部２２ｂは、フレームＦ３には、３番目の分割データが含まれていると判定する。フレームＦ３中のデータは、データ格納部２３ｂが備えるデータ格納領域２６中の３番目の領域に格納される。判定部２４ｂは、３番目の分割データの受信状況を表すＦＬＧ（Ｘ）［２］を１に設定する。読み出しアドレス生成部２５ｂは、ＦＬＧ（Ｘ）［２］が１に設定されたことから、読み出しアドレスをデータ格納領域２６中の２番目の領域のアドレスに設定し、データ格納部２３ｂに読み出しアドレスを通知する。このため、データ格納部２３ｂは、３番目の分割データを受信処理部３０ｂに出力する（矢印Ａ３）。
【００７５】
３番目の分割データの読み出しが終わると、判定部２４ｂは、４番目の分割データの受信状況を表すフラグＦＬＧ（Ｘ）［３］が１に設定されているかを判定する。この時点では、ＦＬＧ（Ｘ）［３］が１に設定されている。そこで、読み出しアドレス生成部２５ｂは、読み出しアドレスをデータ格納領域２６中の３番目の領域のアドレスに設定する。すると、データ格納部２３ｂは、指定された領域から、４番目の分割データを読み出して、受信処理部３０ｂに出力する（矢印Ａ４）。
【００７６】
ここで、分割数Ｍ＝５であり、データ格納領域２６ｂの領域の読み出しはＭ−２である３番目の領域まで終了している。このため、判定部２４ｂは、最終データ以外が受信処理部３０ｂに出力されていると判定し、最終データの受信状況のモニタを開始する。このとき、ＦＬＧ＿ＬＡＳＴ（Ｘ）の値がモニタされる。
【００７７】
受信部１２ｂは、フレームＦ５を受信する。決定部２２ｂは、フレームＦ５のペイロード長Ｌ５（００００  ００００  １１０１  １０１１）を取得すると、下位４ビットが００００でなく、下位５ビット目が１であることから、受信フレームには最終データが含まれていると判定する。フレームＦ５中のデータは、データ格納部２３ｂが備える最終データ格納領域２７中で通信装置１０ａに対応付けられた領域に格納される。判定部２４ｂは、最終データの受信状況を表すＦＬＧ＿ＬＡＳＴ（Ｘ）を１に設定する。読み出しアドレス生成部２５ｂは、ＦＬＧ＿ＬＡＳＴ（Ｘ）が１に設定されたことから、最終データ格納領域２７中で通信装置１０ａに対応付けられた領域を読み出し先のアドレスに設定する。このため、データ格納部２３ｂは、最終データを受信処理部３０ｂに出力する（矢印Ａ５）。
【００７８】
図１２を参照しながら説明したように、通信装置１０ｂでは、フレームＦ１〜Ｆ５を、各フレーム中のデータの順番どおりに受信していなくても、フレームの受信と並行して、順序修正を行いながらフレームを処理できる。また、実施形態にかかる方法を用いると、フレームの受信の際に、ヘッダ中のペイロード長の情報を用いてデータの順序を制御できるので、ペイロード中の情報を用いてデータの順序が制御される場合に比べて、受信側の通信装置１０での負荷が低くなる。さらに、図１２の矢印Ａ１〜Ａ５に示すように、通信装置１０ｂでは、受信した分割データは、未処理のデータのうちの先頭のデータとなったときに処理されている。このため、実施形態にかかる通信装置１０では、分割データを含む全てのフレームを受信し終わる前に、フレーム中のデータの処理を行うことができる。従って、受信側での受信処理が早い段階で開始されるので、効率的に処理が行われる。
【００７９】
図１３は、実施形態にかかる方法と受信状況の確認を伴う切り替え処理を比較する図である。ケースＣ１は、順序逆転の発生を防ぐために、送信装置２が送信に使用するパスを切り替える前に、受信装置４での受信状況を確認する場合でのフレームの送受信のタイミングの例を示す。一方、ケースＣ２は、実施形態にかかる方法を用いて通信装置１０ａが通信装置１０ｂにフレームを送信する場合のフレームの送受信のタイミングを示す。
【００８０】
ケースＣ１では、送信装置２が０系パスを用いてフレームｆ１とフレームｆ２を送信した後、受信装置４からフレームｆ２の受信を通知する情報を取得するまで、１系のパスを介したフレームの送信を行っていない。受信装置４は、フレームｆ２を受信した後、フレームｆ２を受信したことを通知する受信フラグを含むフレームを送信装置２に送信している。このため、ケースＣ１では、送信装置２は、フレームｆ２を送信してから、フレームｆ２についての受信フラグを含むフレームを受信するまで、フレームの送信を中断する。従って、フレームｆ２の送信後、送信装置２と受信装置４の間の往復遅延時間だけ（ＲＴＴ、Round Trip Time）、フレームの送信が中断されることになり、結果として、送信装置２と受信装置４の間の通信速度が遅くなってしまう。
【００８１】
一方、実施形態にかかる方法を用いた場合、通信装置１０ａは、フレームのペイロード長を、フレーム中に含める分割データの順序に応じて調整する。さらに、受信側の通信装置１０ｂは、ペイロード長をヘッダ中の情報から取得可能であるため、図８〜図１２などを参照しながら説明したように、ペイロードを読み込まずにデータの順序を制御できる。このため、受信側の通信装置１０ｂでフレームの受信順序の逆転が起こっても、通信装置１０ｂでの処理に支障が出ない。従って、ケースＣ２に示すように、通信装置１０ａは、フレームの送信に使用するパスを変更する際に、受信側の通信装置１０ｂでの受信状況を確認しないため、フレームの送信が中断されない。従って、実施形態にかかる方法を用いているケースＣ２では、ケースＣ１に比べて、通信速度が向上する。なお、ケースＣ２での通信の詳細は、図１２を参照しながら説明したとおりである。
【００８２】
図１４は、実施形態にかかる方法とリオーダリング後に読み出し処理を行う方法を比較する図である。ケースＣ１１は、ペイロードを用いたリオーダリング後に読み出し処理が行われる場合のフレームの処理のタイミングの例を示す。一方、ケースＣ１２は、実施形態にかかる方法を用いて通信装置１０ａが通信装置１０ｂにフレームを送信する場合のフレームの送受信や処理のタイミングを示す。
【００８３】
ケースＣ１１では、送信装置２から送信されたフレームを受信する受信装置５は、両系受信部６、リオーダリング部７、受信処理部８を備える。ここで、両系受信部６は、０系と１系の両方のパスからの受信を行う。リオーダリング部７は、フレーム中のペイロードの情報を用いて、ペイロードに含まれている分割データの順序を特定する。受信処理部８は、リオーダリング部７から出力されたデータを処理する。従って、ケースＣ１１では、送信装置２が０系と１系のパスの切り替えの際に受信装置５の受信状態を確認しないので、受信装置５では、フレームの順序逆転が発生しうる。ケースＣ１１の例では、送信装置２がフレームｆ１、ｆ２、ｆ３、ｆ４、ｆ５の順に送信しているが、受信装置５には、フレームｆ１、ｆ３、ｆ２、ｆ４、ｆ５の順に届いている。そこで、リオーダリング部７は、フレームｆ１〜ｆ５の受信が終わると、各フレーム中のペイロードの情報に基づいて、フレームの順序を入れ替え、各フレームを、送信された順に受信処理部８に出力する。このため、ケースＣ１１では、すべてのフレームの受信が終わるまで、受信フレーム中のデータが処理されないことになる。
【００８４】
一方、実施形態にかかる方法を用いた場合、通信装置１０ｂは、フレームのペイロード長を用いて、フレーム中の分割データの順序を特定できるので、ペイロードを読み込まずにデータの順序を制御できる。従って、ケースＣ１１に示すように、受信装置５でペイロード中の情報を用いたリオーダリングを行う場合に比べて、通信装置１０ｂでの処理負荷は低くなる。さらに、通信装置１０ｂは、フレームの受信と並行して、送信対象のデータの先頭側から順に、分割データが受信処理部３０ｂに出力されるので、フレームの受信と並行してデータの処理が可能である。なお、ケースＣ１２での通信の詳細は、図１２を参照しながら説明したとおりである。
【００８５】
＜変形例＞
なお、実施形態は上記に限られるものではなく、様々に変形可能である。以下にその例をいくつか述べる。
【００８６】
図１５は、パディングを用いてフレーム長を調整する場合の例を説明する図である。データを送信する通信装置１０において、計算部５１がフレーム中のペイロード長を計算しても、計算したペイロード長の合計が、送信データのデータ長とフレーム数分のＩＰヘッダの合計と一致しない場合があり得る。例えば、計算部５１は、２つの送信フレームのペイロード長として、Ｌ１とＬ２を計算したとする。フレーム生成部５２は、Ｌ１からＩＰヘッダの長さを差し引いた分のデータを、分割データｄ１１とする。フレーム生成部５２は、分割データｄ１１にＩＰヘッダを付加することにより、Ｌ１のパケット長のパケットを得る。すると、フレーム生成部５２は、Ｌ１のパケット長のパケットをペイロードとして、フレームＦ１１を生成する。
【００８７】
送信データＤ１１から分割データｄ１１に含められたデータを差し引くと、分割データｄ１２が未送信分のデータとして残ったとする。フレーム生成部５２は、分割データｄ１２にＩＰヘッダを付加することにより、パケット長がＹのパケットを得たとする。しかし、パケット長Ｙは、分割データｄ１２を含めるフレームのペイロード長Ｌ２よりも短いとする。すると、フレーム生成部５２は、分割データｄ１２を含むパケットの後に、ペイロード長がＬ２となるように、パディングを含める。従って、分割データｄ１２を含むフレームのペイロードの長さは、分割データｄ１２、ＩＰヘッダ、パディングの合計となり、Ｌ２に一致する。なお、図５を参照しながら説明したように、フレーム中のＩＰパケットのＩＰヘッダには、そのＩＰパケットのパケット長やヘッダ長が記録されている。従って、分割データｄ１２を含むパケットのヘッダには、パケット長がＹであることが記録されている。フレーム生成部５２は、ペイロード長Ｌ２のフレームを、送信部１１を介して送信する。
【００８８】
パディングを含むフレームが受信された場合、受信側の通信装置１０中の受信処理部３０でデータを処理する場合、受信処理部３０は、ＩＰヘッダに含まれているパケット長を用いて、受信フレーム中のパケットをパディングから分離することができる。
【００８９】
なお、パディングが含められるフレームは、最終データを含むフレームに限られない。例えば、図６などを参照しながら説明したケースにおいて、３番目の分割データを含むペイロードの長さが２７２バイトと計算されているが、フレーム生成部５２が生成したＩＰパケットが２７０バイトであるとする。この場合、フレーム生成部５２は、生成したＩＰパケットの後ろに２バイト分のバディングを付加して、２７２バイトのフレームを生成する。なお、パディングとして含められるデータは任意である。
【００９０】
図１６は、実施形態にかかる方法を適用可能なシステムの例を説明する図である。以上の説明では、図４に示すように、通信装置１０ａと通信装置１０ｂの２台が、スイッチ回路１１０ａとスイッチ回路１１０ｂを介して通信する場合を例として説明したが、システム中に含まれる通信装置１０の数は任意である。例えば、図１６では、複数の通信装置１０（１０ａ〜１０ｅ）の各々が、スイッチ回路１１０ａとスイッチ回路１１０ｂの両方に接続されている。以下の説明では、スイッチ回路１１０ａは、各通信装置１０間での通信の際の０系パスとして機能し、スイッチ回路１１０ｂは、各通信装置１０間での通信の際の１系パスとして機能するものとする。通信装置１０は、スイッチ回路１１０ａとスイッチ回路１１０ｂの両方を用いて、他の通信装置１０と通信する。例えば、通信装置１０は、コンピュータなどで実現されてもよく、また、通信装置１０が１つのＮＩＣ（Network Interface Card）として実現されてもよい。各通信装置１０がＮＩＣとして実現される場合、複数の通信装置１０（１０ａ〜１０ｅ）、スイッチ回路１１０ａ、スイッチ回路１１０ｂの通信システム全体で、１つの装置が形成されてもよい。
【００９１】
実施形態にかかる通信装置１０は、個々の通信装置１０がデータの送信の際に、０系のパスの通信量と１系のパスの通信量の差が小さくなるように設定している。このため、システム全体での負荷分散を行うための制御装置をシステム中に設けなくてもよいという利点がある。また、負荷分散を行うための制御装置をシステム中に設けないため、通信装置１０の増設、削除、あるいは変更を行う際の処理も簡単である。
【００９２】
さらに、実施形態にかかる通信方法では、送信処理を行う通信装置１０は、送信するデータ量が通信に使用する各パスで同程度になるように送信先のパスを変更することができる。例えば、送信処理を行う通信装置１０は、フレームの送信に使用するパスを交互に変更しても良く、また、所定のフレーム数毎に、パスを変更してもよい。さらに、送信処理を行う通信装置１０は、フレーム数ではなく、送信データのバイト数を用いて、送信処理に使用するパスの切り替え時期を決定してもよい。
【００９３】
以上の説明に使用した分割条件情報４１は一例であり、分割条件情報４１は実装に応じて変更され得る。
【００９４】
以上の説明では、計算部５１が分割数を決定する際に基準とする数値を計算部５１が予め保持している場合の例を説明したが、計算部５１は、トラフィックに応じて、分割数の決定に使用する基準値を変更してもよい。例えば、送受信されるデータの大きさが比較的小さいシステムでは、計算部５１は基準値を小さめに設定し、送受信されるデータの大きさが比較的大きいシステムでは、計算部５１は基準値を比較的大きくできる。さらに、計算部５１は、送信データの平均的な大きさから、平均的な大きさのデータを複数の分割データに分割できるように、基準値を決定してもよい。
【００９５】
上述の実施形態に関し、さらに以下の付記を開示する。
（付記１）
送信データの分割で得られる分割データを含むフレームのペイロード長を、前記フレームに含まれる分割データの順序に対応付ける所定の条件に従って調整することにより、前記分割データを含む複数のフレームを生成する第１の通信装置と、
前記所定の条件を保持し、第１のパスと第２のパスを用いて前記第１の通信装置と通信可能な第２の通信装置
を含み、
前記第１の通信装置は、前記第１のパスと前記第２のパスを用いて、前記複数のフレームを第２の通信装置に送信し、
前記第２の通信装置は、前記複数のフレームの各々のヘッダから抽出したペイロード長の情報と前記所定の条件から、前記複数のフレームの各々に含まれた分割データの順序を特定する
ことを特徴とする通信システム。
（付記２）
前記第２の通信装置は、
前記分割データの順序ごとに当該順序に対応する分割データを受信したかを判定し、
前記複数のフレームの全てを受信していなくても、前記複数のフレームのうちで、受信処理の対象としている対象フレームに含まれる分割データの順序よりも早い順序に対応付けられた未受信の分割データがない場合、前記対象フレーム中の分割データを処理する
ことを特徴とする付記１に記載の通信システム。
（付記３）
前記第２の通信装置は、前記対象フレームに含まれる分割データの順序よりも早い順序に対応付けられた未受信の分割データがある場合、前記未受信の分割データを受信するまで、前記対象フレーム中の分割データの処理を遅らせる
ことを特徴とする付記２に記載の通信システム。
（付記４）
前記第１の通信装置は、前記第１のパスを介して前記第２の通信装置に送信するデータ量と、前記第２のパスを介して前記第２の通信装置に送信するデータ量の差が小さくなるように、前記複数のフレームの各々の送信に使用する経路を前記第１のパスと前記第２のパスから選択する
ことを特徴とする付記１〜３のいずれか１項に記載の通信システム。
（付記５）
第１のパスと第２のパスを用いて他の通信装置と通信可能な通信装置であって、
分割して送信するデータを含むフレームのペイロード長を、前記フレームに含まれるデータの順序に対応付ける所定の条件を記憶する記憶部と、
前記他の通信装置に送信する送信データを分割することにより分割データを生成するとともに、前記分割データを含む送信フレームのペイロード長を、前記所定の条件に従って調整することにより、複数の送信フレームを生成する生成部と、
前記複数の送信フレームを、前記第１のパスと前記第２のパスを用いて送信する送信部
を備えることを特徴とする通信装置。
（付記６）
前記第１のパスと前記第２のパスを介してフレームを受信する受信部と、
前記受信部で受信した受信フレームに、前記受信フレームの送信元で分割されたデータが含まれている場合、前記受信フレームのヘッダに記録されているペイロード長と、前記所定の条件を用いて、前記送信元で分割されたデータのうちでの前記受信フレームに含まれているデータの順序を決定する決定部と、
前記送信元で分割されたデータの全てを受信していなくても、前記送信元で分割されたデータのうちで、前記受信フレームに含まれているデータの順序よりも早い順序に対応付けられた未受信のデータがない場合、前記受信フレームに含まれているデータを処理する処理部
ことを特徴とする付記５に記載の通信装置。
（付記７）
前記受信フレームに含まれるデータの順序よりも早い順序に対応付けられた未受信のデータがある場合、前記未受信のデータを受信してから、前記受信フレームに含まれるデータが格納された領域のアドレスを読み出しアドレスとして生成する読み出しアドレス生成部
をさらに備えることを特徴とする付記６に記載の通信装置。
（付記８）
前記送信部は、前記第１のパスを介して送信するデータ量と、前記第２のパスを介して前記他の通信装置に送信するデータ量の差が小さくなるように、前記複数のフレームの各々の送信に使用する経路を前記第１のパスと前記第２のパスから選択する
ことを特徴とする付記５〜７のいずれか１項に記載の通信装置。
（付記９）
第１の通信装置と、第１のパスと第２のパスを用いて前記第１の通信装置と通信可能な第２の通信装置を含むネットワークにおいて、
前記第１の通信装置は、
送信データの分割で得られる分割データを含むフレームのペイロード長を、前記フレームに含まれる分割データの順序に対応付ける所定の条件に従って調整することにより、前記分割データを含む複数のフレームを生成し、
前記第１のパスと前記第２のパスを用いて、前記複数のフレームを第２の通信装置に送信し、
前記第２の通信装置は、前記複数のフレームの各々のヘッダから抽出したペイロード長の情報と前記所定の条件を用いて、前記複数のフレームの各々に含まれた分割データの順序を特定する
ことを特徴とするデータ分割制御方法。
（付記１０）
前記第２の通信装置は、
前記分割データの順序ごとに当該順序に対応する分割データを受信したかを判定し、
前記複数のフレームの全てを受信していなくても、前記複数のフレームのうちで、受信処理の対象としている対象フレームに含まれる分割データの順序よりも早い順序に対応付けられた未受信の分割データがない場合、前記対象フレーム中の分割データを処理する
ことを特徴とする付記９に記載のデータ分割制御方法。
（付記１１）
前記第２の通信装置は、前記対象フレームに含まれる分割データの順序よりも早い順序に対応付けられた未受信の分割データがある場合、前記未受信の分割データを受信するまで、前記対象フレーム中の分割データの処理を遅らせる
ことを特徴とする付記１０に記載のデータ分割制御方法。
（付記１２）
前記第１の通信装置は、前記第１のパスを介して前記第２の通信装置に送信するデータ量と、前記第２のパスを介して前記第２の通信装置に送信するデータ量の差が小さくなるように、前記複数のフレームの各々の送信に使用する経路を前記第１のパスと前記第２のパスから選択する
ことを特徴とする付記９〜１１のいずれか１項に記載のデータ分割制御方法。
【符号の説明】
【００９６】
２  送信装置
４、５  受信装置
６  両系受信部
７  リオーダリング部
８、３０  受信処理部
１０  通信装置
１１  送信部
１２  受信部
２０  順序制御部
２１  送信元特定部
２２  決定部
２３  データ格納部
２４  判定部
２５  読み出しアドレス生成部
２６  データ格納領域
２７  最終データ格納領域
３５  アプリケーション処理部
４０  記憶部
４１  分割条件情報
５０  送信処理部
５１  計算部
５２  フレーム生成部
１０１  プロセッサ
１０２  メモリ
１０３  バス
１０４  ネットワーク接続装置
１１０  スイッチ回路
【図１】
2018037702.tif 000003
【図２】
2018037702.tif 000004
【図３】
2018037702.tif 000005
【図４】
2018037702.tif 000006
【図５】
2018037702.tif 000007
【図６】
2018037702.tif 000008
【図７】
2018037702.tif 000009
【図８】
2018037702.tif 000010
【図９】
2018037702.tif 000011
【図１０】
2018037702.tif 000012
【図１１】
2018037702.tif 000013
【図１２】
2018037702.tif 000014
【図１３】
2018037702.tif 000015
【図１４】
2018037702.tif 000016
【図１５】
2018037702.tif 000017
【図１６】
2018037702.tif 000018