(57)【要約】【課題】  フラグメントパケットが複数の内部転送装置に分散しても、適切な内部処理装置へ転送できるようにする。【解決手段】  パケットを受信して処理する通信装置であって、パケットを処理する複数の処理装置と、前記通信装置の外部からパケットを受信し、前記複数の処理装置の中のいずれかの処理装置へパケットを転送する複数の転送装置とを備え、前記複数の転送装置の中の第１の転送装置は、前記通信装置の外部から第１のパケットを受信し、前記複数の転送装置の中の第２の転送装置から第２のパケットを受信し、第１のパケットと第２のパケットを用いてパケットを再構成し、前記複数の処理装置の中から、設定されたポリシー情報に基づいて処理装置を選択し、選択された処理装置へ再構成されたパケットを転送する。【選択図】図１
2017139680.tif 000002
【特許請求の範囲】
【請求項１】
パケットを受信して処理する通信装置であって、
パケットを処理する複数の処理装置と、
前記通信装置の外部からパケットを受信し、前記複数の処理装置の中のいずれかの処理装置へパケットを転送する複数の転送装置と
を備え、
前記複数の転送装置の中の第１の転送装置は、
前記通信装置の外部から第１のパケットを受信し、
前記複数の転送装置の中の第２の転送装置から第２のパケットを受信し、
第１のパケットと第２のパケットを用いてパケットを再構成し、
前記複数の処理装置の中から、設定されたポリシー情報に基づいて処理装置を選択し、選択された処理装置へ再構成されたパケットを転送すること
を特徴とする通信装置。
【請求項２】
請求項１に記載の通信装置であって、
前記第２の転送装置は、
前記通信装置の外部から第２のパケットを受信し、
受信した第２のパケットを前記第１の転送装置へ送信すること
を特徴とする通信装置。
【請求項３】
請求項２に記載の通信装置であって、
前記第２の転送装置は、
受信した第２のパケットをカプセリングして前記第１の転送装置へ送信し、
前記第１の転送装置は、
前記第２の転送装置から受信した第２のパケットがカプセリングされているかを判定し、
カプセリングされていると判定すると、第２のパケットをデカプセリングすること
を特徴とする通信装置。
【請求項４】
請求項３に記載の通信装置であって、
前記第２の転送装置は、
受信した第２のパケットを前記第１の転送装置を含む前記複数の転送装置へ送信すること
を特徴とする通信装置。
【請求項５】
請求項２〜４のいずれか一項に記載の通信装置であって、
前記第２の転送装置は、
タイマを有し、
前記通信装置の外部から第２のパケットを受信すると、受信した第２のパケットが分割された先頭のパケットであるかを判定し、分割された先頭のパケットでないと判定すると、前記タイマを起動し、
前記タイマが予め設定された値になると、受信した第２のパケットを送信すること
を特徴とする通信装置。
【請求項６】
請求項１に記載の通信装置であって、
前記第１の転送装置は、
タイマを有し、
前記第２の転送装置から第２のパケットを受信すると、受信した第２のパケットが分割された先頭のパケットであるかを判定し、分割された先頭以外のパケットであると判定すると、前記タイマを起動し、
前記通信装置の外部から第１のパケットを受信すると、受信した第１のパケットが分割された先頭のパケットであるかを判定し、分割された先頭のパケットであると判定すると、前記タイマを停止し、
第１のパケットと第２のパケットを用いて分割される前のパケットを再構成するための処理を実行し、再構成に成功したかを判定し、
再構成に成功したと判定すると、設定されたポリシー情報に基づいた転送先へ再構成されたパケットを送信すること
を特徴とする通信装置。
【請求項７】
請求項６に記載の通信装置であって、
前記第１の転送装置は、
第１のパケットのデータグラムと第２のパケットのデータグラムを連結して分割される前のパケットのデータとし、第１のパケットのヘッダを用いて、分割される前のパケットを再構成するための処理を実行すること
を特徴とする通信装置。
【請求項８】
請求項７に記載の通信装置であって、
前記第１の転送装置は、
受信した第２のパケットのＩＰヘッダに含まれる情報を用いて、受信した第２のパケットが分割された先頭のパケットであるかを判定し、
受信した第１のパケットのＩＰヘッダに含まれる情報を用いて、受信した第１のパケットが分割された先頭のパケットであるかを判定すること
を特徴とする通信装置。
【請求項９】
請求項６〜８のいずれか一項に記載の通信装置であって、
前記第１の転送装置は、
第１のパケットのＴＣＰヘッダに含まれる情報を用いて、設定されたポリシー情報を検索し、前記複数の処理装置の中から処理装置を選択すること
を特徴とする通信装置。
【請求項１０】
パケットを送受信する転送装置の制御方法であって、
パケットを受信し、
受信されたパケットが、分割された先頭のパケットであるかを判定し、
分割された先頭以外のパケットであると判定すると、タイマを起動し、受信されたパケットを用いて、分割される前のパケットを再構成するための処理を実行し、再構成に成功したかを判定し、
再構成に成功したと判定すると、設定されたポリシー情報に基づいて処理装置を選択し、選択された処理装置へ再構成されたパケットを送信すること
を特徴とする転送装置の制御方法。
【請求項１１】
請求項１０に記載の転送装置の制御方法であって、
受信されたパケットが、分割された先頭のパケットであると判定すると、前記タイマを停止し、受信されたパケットを用いて、分割される前のパケットを再構成するための処理を実行し、再構成に成功したかを判定し、
再構成に成功したと判定すると、設定されたポリシー情報に基づいた転送先へ再構成されたパケットを送信すること
を特徴とする転送装置の制御方法。
【請求項１２】
請求項１１に記載の転送装置の制御方法であって、
前記タイマが予め設定された値になると、受信されたパケットを送信すること
を特徴とする転送装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信装置及び転送装置の制御方法に関する。
【背景技術】
【０００２】
送信元装置と宛先装置、およびいくつかの転送装置から構成されるネットワークシステムにおいて、１回のパケット転送で転送できるパケットサイズにはＭＴＵ（最大転送単位）が定められている。送信元装置から宛先装置へのパケット転送において、送信元装置は、ＭＴＵを超えるサイズのパケットを、ＭＴＵを超えないようにフラグメントパケットに分割して送信する。宛先装置は、フラグメントパケットを受信すると、それらから分割前のオリジナルパケットをリアセンブル（再構成）する。以下では分割前のパケットをオリジナルパケットと称する。
【０００３】
また、オリジナルパケットのデータは複数のデータグラムに分割され、分割された各データグラムにＩＰヘッダをつけたパケットがフラグメントパケットとなる。ＩＰレイヤ（レイヤ３）より上位レイヤの情報は、分割される際にいずれか一つのフラグメントパケットに含まれ、その他のフラグメントパケットには含まれない。
【０００４】
フラグメントパケットはどのオリジナルパケットから分割されたかを判別する情報として、同じオリジナルパケットから分割されたフラグメントパケットは、同一のＩＰヘッダ識別子を有している。宛先装置は受信した各フラグメントパケットが同じＩＰヘッダ識別子を有する場合、同じＩＰヘッダ識別子を有するフラグメントパケットからリアセンブルによりオリジナルパケットを生成する。
【０００５】
また、ネットワークにおいて複数の転送経路がある場合、主に２種類のパケット転送方法がある。一方は、最も一般的な宛先ＩＰアドレスをもとにした経路表による転送方法である。他方は、ＴＣＰ／ＵＤＰのポート番号やトンネリングプロトコルのトンネル識別子などのＩＰレイヤ（レイヤ３）よりも上位のレイヤ情報を転送条件にして、特定の経路にパケットを転送する転送方法（ポリシーベースルーティング）である。ポリシーベースルーティングは宛先ＩＰアドレスをもとにした転送方法より柔軟で細かな経路制御が可能であるという特徴がある。
【０００６】
上位のレイヤ情報が必要であるため、ポリシーベースルーティングを行う転送装置でフラグメントパケットを受信した場合、フラグメントパケットをそのまま転送できないので、オリジナルパケットにリアセンブルし、オリジナルパケットのＩＰ（レイヤ３）よりも上位のレイヤ情報を復元して、転送先ポリシー情報により転送先を選択する必要がある。
【０００７】
特許文献１は、「フラグメントされたＩＰパケットとフラグメント元のＩＰパケットに適合するフローテーブルのエントリとを対応付けるフラグメントパケットＩＤテーブル３と、フラグメント情報を取得し、ＩＰパケットのヘッダ情報に基づいてパケットＩＤを生成し、フラグメントパケットＩＤテーブルを参照して、パケットＩＤを有するＩＰパケットに適用するアクションを記載したフローエントリを取得し、アクションをＩＰパケットに適用するフラグメントパケット処理機能１０３と、先頭のＩＰパケットを受信時に、当該エントリをフラグメントパケットＩＤテーブルに追加し、最後尾のパケットの受信時に、当該エントリをフラグメントパケットＩＤテーブルから削除するフラグメントパケットＩＤテーブル更新機能１０７と、を備える」（要約）というＯｐｅｎＦｌｏｗ（登録商標）でのフラグメントパケット処理について開示している。
【０００８】
特許文献２は、「再構成処理部２４によって、受信されたＩＰパケットが分割されているかどうか判断し、分割されている場合には、このＩＰパケットを一旦パケット蓄積部２５に蓄積し、全部の分割されたＩＰパケットが蓄積されてから、フラグメント処理前のもとの１つのＩＰパケットデータに再構成する。その後に受信処理部２６がアドレス変換テーブル２７を検索して、ＩＰパケットのヘッダ内のアドレスを宛先ネットワークで設定されているアドレスに変換して、ネットワーク間のデータ中継を可能にする」（要約）というデータ中継装置を開示している。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２０１５−７０４３４号公報
【特許文献２】特開２００５−１２６９８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
近年、ネットワーク帯域や装置信頼性の向上を目的として、宛先装置が、複数の内部転送装置（複数台冗長構成）と複数の内部処理装置（複数台冗長構成）を含むことがある。外部ネットワーク内に存在する送信元装置が生成したオリジナルパケットは、いずれか一つの内部転送装置を介して、いずれか一つの処理装置に転送される。その後、処理装置は、取得したオリジナルパケットに基づいて処理を行う。
【００１１】
さらに、細かな経路制御を行うために、外部ネットワーク内の転送装置ではポリシーベースルーティングを行い、内部転送装置についても転送先ポリシー情報に基づきオリジナルパケットを各処理装置へ分散して転送する。
【００１２】
フラグメントパケットの転送の場合、送信元装置は、オリジナルパケットを分割して生成した複数のフラグメントパケットを宛先装置へ送信する。送信されたフラグメントパケットは、いくつかの転送装置を介して宛先装置内の内部転送装置へ到着する。
【００１３】
例えば、宛先装置より前段にある転送装置は宛先ＩＰアドレスをもとにした転送方法を行った場合、転送装置からフラグメントパケットが、ある一つの内部転送装置へ転送される。フラグメントパケットを受信した内部転送装置は、ＩＰヘッダ識別子からオリジナルパケットをリアセンブルし、転送先ポリシー情報をもとに内部処理装置へ転送する。
【００１４】
しかし、宛先装置より前段にある転送装置がポリシーベースルーティングを行った場合や、転送装置と宛先装置内の内部転送装置との間でリンク障害が発生した場合、同一オリジナルパケットから分割された各フラグメントパケットが、宛先装置内の異なる内部転送装置に到着する可能性がある。
【００１５】
そして、フラグメントパケットを受信した各内部転送装置は、オリジナルパケットをリアセンブルするために、フラグメントパケットを保持する。しかし、フラグメントパケットはそれぞれ異なる内部転送装置へ転送されてしまっているため、一つの内部転送装置では、一部のフラグメントパケットが受信できず、受信されたフラグメントパケットも所定の時間で破棄されてしまう。
【００１６】
これに対して、特許文献１のパケット処理では、フローテーブルとフラグメントパケットを結びつけるフラグメントパケットＩＤテーブルを用いることで、フラグメントパケットをそのまま転送することはできるが、異なる内部転送装置にフラグメントパケットが到着する場合については開示されていない。
【００１７】
また、特許文献２のデータ中継装置は、同一の内部転送装置へフラグメントパケットが到着した場合に、適切な処理装置を選択し、パケット転送することはできるが、異なる内部転送装置にフラグメントパケットが到着する場合については開示されていない。
【００１８】
そこで、本発明の目的は、フラグメントパケットが複数の内部転送装置に分散しても、適切な内部処理装置へ転送できるようにすることにある。
【課題を解決するための手段】
【００１９】
本発明に係る代表的な通信装置は、パケットを受信して処理する通信装置であって、パケットを処理する複数の処理装置と、前記通信装置の外部からパケットを受信し、前記複数の処理装置の中のいずれかの処理装置へパケットを転送する複数の転送装置とを備え、前記複数の転送装置の中の第１の転送装置は、前記通信装置の外部から第１のパケットを受信し、前記複数の転送装置の中の第２の転送装置から第２のパケットを受信し、第１のパケットと第２のパケットを用いてパケットを再構成し、前記複数の処理装置の中から、設定されたポリシー情報に基づいて処理装置を選択し、選択された処理装置へ再構成されたパケットを転送することを特徴とする。
【発明の効果】
【００２０】
本発明によれば、フラグメントパケットが複数の内部転送装置に分散しても、適切な内部処理装置へ転送できる。
【図面の簡単な説明】
【００２１】
【図１】ネットワークシステムの例を示す図である。
【図２】宛先装置内の構成の例を示す図である。
【図３】内部転送装置の構成の例を示す図である。
【図４】内部転送装置の論理的な構成の例を示す図である。
【図５】転送先ポリシー情報の構成の例を示す図である。
【図６】フラグメントパケットのフォーマットの例を示す図である。
【図７】パケットの判定テーブルの構成の例を示す図である。
【図８】フラグメントパケットの転送シーケンスの一例を示す図である。
【図９】フラグメントパケットの転送シーケンスの一例を示す図である。
【図１０】フラグメントパケットの転送シーケンスの一例を示す図である。
【図１１】フラグメントパケットの転送シーケンスの一例を示す図である。
【図１２】内部転送装置のパケット受信から転送まで例を示すフローチャートである。
【図１３】内部転送装置のブロードキャスト送信の例を示すフローチャートである。
【発明を実施するための形態】
【００２２】
以下、図面を参照して本発明の実施例を説明する。本実施例は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではないことに注意すべきである。各図において共通の構成には同一の符号が付されている。
【００２３】
本実施例において、装置内の構成は、例えば、内部転送装置に転送先ポリシー情報を設定するポリシー設定装置と、外部ネットワークからパケットを受信し、転送先ポリシー情報にもとづきパケットを転送する内部転送装置と、転送されたパケットを受信して処理する処理装置からなる。内部転送装置と処理装置はそれぞれ複数台冗長構成をとる。
【００２４】
内部転送装置は、転送先の処理装置を決定するための転送先ポリシー情報をもつ。各内部転送装置は、パケットを受信すると、複数プロセスから参照可能な共有メモリに保持される転送先ポリシー情報を参照し、転送先となる処理装置を選択し、パケットを転送する。例えば、転送先ポリシー情報には受信パケットの送信元／送信先ＩＰアドレスやＴＣＰ又はＵＤＰのポート番号が用いられる。ここで記載されたパケットという用語は、分割前のオリジナルパケットと、分割された後のフラグメントパケットを含む上位語である。
【００２５】
また、処理装置は外部に向けて、複数の処理装置で共通の代表ＩＰアドレスを一つ有している。外部ネットワーク内にある送信元装置は、代表ＩＰアドレスへ向けてパケットを送信することにより、処理装置の台数が増減した場合にも、送信先のＩＰアドレスを変える必要がない。そして、内部転送装置の転送先ポリシー情報に振り分け先の処理装置の台数を増減することにより、送信元装置で変更することなく、処理装置の台数の増減に対応が可能である。
【００２６】
内部転送装置がフラグメントパケットを受信した場合、先頭のフラグメントパケット以外を受信した内部転送装置は、ブロードキャスト送信タイマを起動し、ブロードキャスト送信タイマ満了後に、受信したフラグメントパケットをＧＲＥ（Generic Routing Encapsulation）プロトコルでカプセリング（カプセル化）し、他の内部転送装置へブロードキャスト送信する。
【００２７】
先頭のフラグメントパケットを受信した内部転送装置は、その時点でブロードキャスト送信タイマが起動されていた場合、ブロードキャスト送信タイマを停止し、他の内部転送装置から先頭以外のフラグメントパケットを待ち受け、全てのフラグメントパケットがそろった後、オリジナルパケットをリアセンブルする。そして、リアセルブルされた後のオリジナルパケットのヘッダ情報と転送先ポリシー情報とを参照し、転送先となる処理装置を選択し、選択された処理装置へオリジナルパケットを転送する。
【００２８】
以下、さらに具体的に説明する。図１は、本実施例におけるネットワークシステムの例に示す。外部ネットワーク１０１から宛先装置１０８に向けてパケットが送信される。外部ネットワーク１０１から宛先装置１０８へ向けて送信されたパケットは、転送装置１０２を経由して、宛先装置１０８へ到達する。このため、外部ネットワーク１０１と転送装置１０２が接続され、転送装置１０２と宛先装置１０８が接続される。また、宛先装置１０８は、パケットを受信する通信装置である。
【００２９】
転送装置１０２は外部ネットワーク１０１から受信したオリジナルパケットをフラグメントパケットに変換し、複数の通信回線を経由してフラグメントパケットを宛先装置１０８へ送信したり、オリジナルパケットをそのまま宛先装置１０８へ送信したりする。複数の通信回線はＥＣＭＰ（Equal Cost Multi Path）であり、複数の通信回線のそれぞれで通信コストが等しくなるように、フラグメントパケットを振り分ける。
【００３０】
宛先装置１０８の中の複数の内部転送装置１０４（内部転送装置１０４−１〜１０４−Ｎを区別せずに代表的に指し示す場合は内部転送装置１０４と記載する。他の符号も同じように記載する）は、宛先装置１０８の中の複数の処理装置１０７のそれぞれと論理的に接続される。
【００３１】
複数の内部転送装置１０４−１〜１０４−Ｎは内部転送装置複数台冗長構成１０３を構成し、複数の処理装置１０７−１〜１０７−Ｍは処理装置複数台冗長構成１０６を構成する。ここで、ＮとＭは２以上の整数であり、ＮとＭが同じ数であってもよいし、異なる数であってもよい。また、宛先装置１０８の中のポリシー設定装置１０５は、内部転送装置複数台冗長構成１０３および処理装置複数台冗長構成１０６と接続される。
【００３２】
なお、転送装置１０２と内部転送装置１０４とは、それらの相対的な位置関係から、それぞれ外部転送装置と転送装置と呼ぶこともできる。
【００３３】
図２は、宛先装置１０８内の構成の例を示す。ポリシー設定装置１０５、全ての内部転送装置１０４−１〜１０４−Ｎ、全ての処理装置１０７−１〜１０７−Ｍは、レイヤ２スイッチ１０９に接続され、レイヤ２スイッチ１０９で接続された各装置の間では、通信を行うことが可能である。
【００３４】
レイヤ２スイッチ１０９を経由する１回の送信で送信されるパケットは、分割されていないオリジナルパケット、又はオリジナルパケットから分割されたフラグメントパケットである。本実施例では、ＴＣＰ／ＩＰパケットの例を説明するが、これに限定されるものではない。本実施例におけるパケット転送は、フラグメントパケットをカプセリングして内部転送装置１０４の間でやり取りし、オリジナルパケットをリアセンブルするため、他のプロトコルを用いたパケット転送であってもよい。
【００３５】
なお、図１と図２ではポリシー設定装置１０５が宛先装置１０８の中に含まれる例を示したが、ポリシー設定装置１０５は宛先装置１０８の外に接続されてもよい。また、レイヤ２スイッチ１０９に接続される代わりに、図１の例のように宛先装置１０８内の各装置は直接に接続されてもよい。
【００３６】
図３は、内部転送装置１０４の構成の例を示す。内部転送装置１０４−１〜１０４−Ｎは物理的に別の物であるが、同じ構成を有する。内部転送装置１０４は、プロセッサであるＣＰＵ２０１、主メモリ２０２、プロセス間共有メモリ２０４、ローカルディスク２０６、ネットワークＩ／Ｆ（インターフェース）部２０８、及び、これらを接続するバス２０９を含む。内部転送装置１０４は、不図示の入力デバイスや出力デバイスを有してもよい。
【００３７】
ネットワークＩ／Ｆ部２０８は、外部Ｉ／Ｆ部２０９及び内部Ｉ／Ｆ部２１０を含む。外部Ｉ／Ｆ部２０９は、転送装置１０２と接続され、外部ネットワーク１０１から転送装置１０２を介してパケットを受信し、バス２０９を介して主メモリ２０２へ格納する。
【００３８】
内部Ｉ／Ｆ部２１０は、レイヤ２スイッチ１０９と接続され、主メモリ２０２に格納されたパケットをバス２０９経由で取得し、レイヤ２スイッチ１０９を介して他の内部転送装置１０４、処理装置１０７へパケットを送信したり、ポリシー設定装置１０５、他の内部転送装置１０４、処理装置１０７からレイヤ２スイッチ１０９を介して受信した情報又はパケットを、バス２０９を介してプロセス間共有メモリ２０４又は主メモリ２０２へ格納したりする。
【００３９】
ローカルディスク２０６には転送プログラム２０７が格納される。また主メモリ２０２には、ＣＰＵ２０１によってローカルディスク２０６からロードされた転送プログラム２０３が格納される。主メモリ２０２は、転送プログラム２０３以外に不図示のプログラム、プログラムの実行に必要なデータ、パケットなどが格納され、格納されるプログラムにはＯＳ（Operating System）などが含まれる。
【００４０】
プロセス間共有メモリ２０４は、パケットの転送先を示す転送先ポリシー情報２０５を一時的に保持しており、ＣＰＵ２０１により実行される複数のプロセスから参照される。ＣＰＵ２０１は、主メモリ２０２に格納された転送プログラム２０３を実行することにより、以下で説明するように動作する。なお、ＣＰＵ２０１はタイマを内蔵してもよく、タイマはハードウェアにより実現されてもプログラムの実行により実現されてもよい。
【００４１】
なお、主メモリ２０２又はプロセス間共有メモリ２０４とネットワークＩ／Ｆ部２０８との間の情報又はパケットのバス２０９を介しての転送は、ＣＰＵ２０１が行ってもよい。また、ローカルディスク２０６に格納される転送プログラム２０７は、可搬型の記憶媒体に格納されて、可搬型の記憶媒体の読み取り装置により、ローカルディスク２０６へ読み込まれてもよいし、ネットワーク経由でローカルディスク２０６へ読み込まれてもよい。
【００４２】
図４は、内部転送装置１０４−１の論理的な構成の例を示す。内部転送装置１０４−２〜１０４−Ｎも同じ構成を有する。転送先ポリシー情報２０５は、処理装置１０７それぞれの負荷状況に応じて、ポリシー設定装置１０５により設定される情報であり、図５を用いてさらに説明する。パケットバッファ３０２は、転送装置１０２から転送されたパケットが一時的に格納されるバッファであり、主メモリ２０２の領域の一部であってもよいし、ネットワークＩ／Ｆ部２０８の中にあってもよい。
【００４３】
パケット判定モジュール３０１は、ＣＰＵ２０１が転送プログラム２０３を実行することにより実現されるモジュールであり、パケット判定モジュール３０１は複数のプロセスとして実現されてもよい。パケット判定モジュール３０１は、パケットバッファ３０２からパケットを取り出し、取り出されたパケットを解析してフラグメントパケットか否か判定する。
【００４４】
取り出されたパケットがフラグメントパケットではないと判定された場合、パケット判定モジュール３０１は、転送先ポリシー情報２０５に従って、処理装置１０７−１〜１０７−Ｍの中から転送先を選択し、パケットを転送する。
【００４５】
取り出されたパケットがフラグメントパケットであると判定された場合、パケット判定モジュール３０１は、それまでにパケット判定モジュール３０１が取得したフラグメントパケットからオリジナルパケットをリアセンブルする。オリジナルパケットのリアセンブルに成功した場合は転送先ポリシー情報２０５に基づいて、処理装置１０７−１〜１０７−Ｍの中から転送先を選択し、リアセンブルしたオリジナルパケットを転送する。
【００４６】
オリジナルパケットのリアセンブルに失敗した場合、パケット判定モジュール３０１は処理装置１０７へのパケットの転送を保留する。フラグメントパケットが２番目以降のフラグメントパケットであると判定した場合、内部転送装置１０４−１以外の内部転送装置１０４−２〜１０４−Ｎへのブロードキャスト送信タイマを起動する。その後、ブロードキャスト送信タイマが予め設定された時間の経過により満了すると、フラグメントパケットをカプセリングして他の内部転送装置１０４−２〜１０４−Ｎへブロードキャスト送信する。
【００４７】
また、パケット判定モジュール３０１は、他の内部転送装置１０４−２〜１０４−Ｎからブロードキャスト送信されたフラグメントパケットを取得し、フラグメントパケットからオリジナルパケットへのリアセンブルに利用する。他の内部転送装置１０４−２〜１０４−Ｎからブロードキャスト送信されたフラグメントパケットは、パケットバッファ３０２に格納され、転送装置１０２から転送されたパケットと同じように処理されてもよい。
【００４８】
転送先ポリシー情報２０５は、ポリシー設定装置１０５から設定されたフラグメントパケットの転送先に関する情報が格納され、管理される。図５は、転送先ポリシー情報２０５の構成の例を示す。転送先ポリシー情報２０５は、プロトコルカラム４０１、送信元ＩＰアドレスカラム４０２、送信先代表ＩＰアドレスカラム４０３、送信元ポート番号カラム４０４、送信先ポート番号カラム４０５、転送先内部ＩＰアドレスカラム４０６を有する。
【００４９】
プロトコルカラム４０１は、オリジナルパケットのレイヤ４プロトコルの種別を示す。本実施例では、ＴＣＰプロトコルとしているが、ＵＤＰなどその他レイヤ４プロトコルでもよい。送信元ＩＰアドレスカラム４０２は、オリジナルパケットの送信元、図１の例においては、外部ネットワーク１０１に存在する送信装置のＩＰアドレスを示す。
【００５０】
送信先代表ＩＰアドレスカラム４０３は、外部ネットワーク１０１から送信されるオリジナルパケットの送信先である処理装置複数台冗長構成１０６を代表するＩＰアドレスを示す。外部ネットワーク１０１から送信されるオリジナルパケットは、処理装置１０７−１〜１０７−Ｍを個別に送信先とするのではなく、宛先装置１０８あるいは処理装置複数台冗長構成１０６を送信先の代表とする。
【００５１】
送信先代表ＩＰアドレスカラム４０３のＩＰアドレスは宛先装置１０８あるいは処理装置複数台冗長構成１０６に一つであってもよいし、一つでなくてもよい。例えば処理装置１０７の複数種類の処理内容それぞれを代表するＩＰアドレスであってもよく、一つの処理内容を処理装置１０７−１と処理装置１０７−２が担当し、処理装置１０７−Ｍが担当しない場合、送信先代表ＩＰアドレスカラム４０３において、処理装置１０７−１と処理装置１０７−２は同じＩＰアドレスであり、処理装置１０７−Ｍは異なるＩＰアドレスであってもよい。
【００５２】
送信元ポート番号カラム４０４は、オリジナルパケットの送信元のＴＣＰヘッダにおける送信元ポート番号を示す。送信先ポート番号カラム４０５は、オリジナルパケットの送信先のＴＣＰヘッダにおける送信先ポート番号を示す。転送先内部ＩＰアドレスカラム４０６は、宛先装置１０８内の内部通信で使用する各処理装置１０７のＩＰアドレスを示す。内部転送装置１０４は転送先ポリシー情報２０５のカラム４０１〜４０５に一致するパケットを転送先内部ＩＰアドレスカラム４０６のＩＰアドレスへ転送する。
【００５３】
図６は、フラグメントパケットのフォーマット例を示す。オリジナルパケット５０１は、ＭＴＵ値を超えるパケットサイズになると、フラグメント化される。特に先頭のフラグメントパケット５０２は、それ以降のフラグメントパケット５０３とは異なるフォーマットを有する。具体的には、先頭のフラグメントパケット５０２は、オリジナルパケット５０１のデータから分割されたデータグラムに加え、ＩＰヘッダとＴＣＰヘッダを有する。
【００５４】
一方、２番目以降のＫ番目のフラグメントパケット５０３は、オリジナルパケット５０１の残りのデータから分割されたデータグラムとＩＰヘッダを有しているが、ＴＣＰヘッダを有していない。図６は、ＴＣＰヘッダを有するＩＰパケットを例示するが、ＵＤＰヘッダなどその他のレイヤ４プロトコルを有するＩＰパケットにおいても同様である。以下では、先頭のフラグメントパケットをＦＰ−１、２番目以降のＫ番目のフラグメントパケットをＦＰ−Ｋとする。
【００５５】
なお、各フラグメントパケット５０２、５０３のＩＰヘッダには、オリジナルパケット５０１と同じＩＰアドレス、同一のオリジナルパケット５０１から分割されたことを示すＩＰ識別子、フラグメントされているか否かなどを示すフラグメントフラグ、先頭から何番目のフラグメントパケットなのかを示すフラグメントオフセットが付与される。
【００５６】
図７は、パケット判定モジュール３０１の参照するパケット判定テーブル６０１の構成例を示す。転送プログラム２０３は、パケット判定テーブル６０１を含む。パケット判定テーブル６０１のフラグメントフラグ（以下、ＦＦとする）、フラグメントオフセット（以下、ＦＯとする）はＩＰヘッダのＦＦとＦＯを判定の基準となる情報である。これらの値は、後述のフラグメントパケットの判定に用いられ、その判定の結果として、パケット判定テーブル６０１のパケット種別に示す情報が得られる。
【００５７】
具体的には、ＩＰヘッダのＦＦの値が「０」、ＦＯの値が「０」であれば、フラグメント化されていないパケットであることを示し、ＦＦの値が「１」、ＦＯの値が「０」であれば、先頭のフラグメントパケットであることを示す。また、ＦＦの値が「１」、ＦＯの値が「１」以上のＫであれば、２番目以降のＫ番目のフラグメントパケットであることを示し、ＦＦの値が「０」、ＦＯの値が「１」以上であれば、末尾のフラグメントパケットであることを示す。
【００５８】
なお、パケット判定テーブル６０１は同一のオリジナルパケットから分割されたフラグメントパケット（同一のＩＰヘッダ識別子が付与されたフラグメントパケット）の判定に使用される。
【００５９】
以下、図８〜１３を参照して、フラグメントパケットを転送するシーケンスのいくつかの例を説明する。これらの例では、各フラグメントパケットが異なる内部転送装置１０４に到着した場合に、適切にパケットを転送するシーケンスが含まれる。
【００６０】
図８の例は、フラグメントパケットが先頭のフラグメントパケットから順番に同一の内部転送装置１０４−１に到着した場合のシーケンスである。まず、事前にポリシー設定装置１０５から各内部転送装置１０４−１〜１０４−３へ転送先ポリシー情報２０５が設定される（ステップ１５１−１〜１５１−３）。このステップ１５１−１〜１５１−３は、以降の図９〜１１でも同様の設定であるため、図９〜１１では設定の図示を省略する。
【００６１】
そして、内部転送装置１０４−１が先頭のフラグメントパケットＦＰ−１を受信する（ステップ１５２）。受信後、内部転送装置１０４−１はリアセンブルを実行するが、フラグメントパケットがそろっていないため、リアセンブルに失敗する（ステップ１５３）。リアセンブル失敗後、フラグメントパケットＦＰ−１の転送を保留し、２番目以降のフラグメントパケットＦＰ−Ｋを待ち受ける。
【００６２】
内部転送装置１０４−１はＫ番目フラグメントパケットＦＰ−Ｋを受信後（ステップ１５４）、再度リアセンブルを実行し（ステップ１５５）、リアセンブルを成功してオリジナルパケットのＴＣＰヘッダに含まれる情報で転送先ポリシー情報２０５を検索し（ステップ１５６）、転送先となる処理装置１０７−Ｍを選択する。その後、内部転送装置１０４−１は、オリジナルパケットを処理装置１０７−Ｍへ転送する（ステップ１５７）。
【００６３】
図９の例は、フラグメントパケットの順番が逆転して、同一の内部転送装置１０４−１に到着した場合のシーケンスである。まず、内部転送装置１０４−１がＫ番目のフラグメントパケットＦＰ−Ｋを受信する（ステップ２５１）。受信後、内部転送装置１０４−１は先頭フラグメントパケット以外のフラグメントパケットを受信したため、ブロードキャスト送信タイマを起動する（ステップ２５２）。
【００６４】
ブロードキャスト送信タイマ起動後、内部転送装置１０４−１はリアセンブルを実行するが、フラグメントパケットがそろっていないため、リアセンブルに失敗する（ステップ２５３）。リアセンブル失敗後、ブロードキャスト送信タイマ満了まで、Ｋ番目のフラグメントパケットＦＰ−Ｋの送信を保留する。
【００６５】
その後、ブロードキャスト送信タイマ満了前に内部転送装置１０４−１へ先頭フラグメントパケットＦＰ−１が到着すると（ステップ２５４）、先頭のフラグメントパケットＦＰ−１を受信した内部転送装置１０４−１はブロードキャスト送信タイマを停止し（ステップ２５５）、再度リアセンブルを実行し（ステップ２５６）、リアセンブルを成功してオリジナルパケットのＴＣＰヘッダに含まれる情報で転送先ポリシー情報２０５を検索し、転送先となる処理装置１０７−Ｍを選択する（ステップ２５７）。そして、内部転送装置１０４−１は、オリジナルパケットを処理装置１０７−Ｍへ転送する（ステップ２５８）。
【００６６】
図１０の例は、フラグメントパケットが先頭のフラグメントパケットＦＰ−１から順番に、異なる内部転送装置１０４−１、１０４−２に到着した場合のシーケンスである。まず、内部転送装置１０４−１が先頭のフラグメントパケットＦＰ−１を受信する（ステップ３５１）。受信後、内部転送装置１０４−１はリアセンブルを実行するが、フラグメントパケットがそろっていないため、リアセンブルに失敗する（ステップ３５２）。リアセンブル失敗後、フラグメントパケットＦＰ−１の転送を保留し、２番目以降のフラグメントパケットＦＰ−Ｋを待ち受ける。
【００６７】
そして、内部転送装置１０４−２がＫ番目のフラグメントパケットＦＰ−Ｋを受信すると（ステップ３５３）、先頭のフラグメントパケットＦＰ−１以外のフラグメントパケットを受信したため、ブロードキャスト送信タイマを起動する（ステップ３５４）。ここで、ブロードキャスト送信タイマの時間は、ＯＳのフラグメントパケット破棄タイマの設定値（ＯＳがフラグメントパケットを破棄するまでの時間）と、予め設定された１未満の係数とを乗算して算出される。ブロードキャスト送信タイマはＣＰＵ２０１に含まれるタイマであってもよい。
【００６８】
ブロードキャスト送信タイマ起動後、内部転送装置１０４−２はリアセンブルを実行するが、フラグメントパケットがそろっていないため、リアセンブルに失敗する（ステップ３５５）。リアセンブル失敗後、ブロードキャスト送信タイマ満了まで、Ｋ番目のフラグメントパケットＦＰ−Ｋの送信を保留する。
【００６９】
ブロードキャスト送信タイマ満了後、内部転送装置１０４−２は、Ｋ番目のフラグメントパケットＦＰ−ＫのＧＲＥカプセリングを実行し（ステップ３５６）、内部転送装置１０４−２以外の全ての内部転送装置１０４−１、１０４−３へブロードキャスト送信する（ステップ３５７、ステップ３５８）。ステップ３５７、ステップ３５８のブロードキャスト送信は、内部転送装置１０４−２以外の全ての内部転送装置１０４−１、１０４−３を送信先としたマルチキャスト送信であってもよい。
【００７０】
内部転送装置１０４−１がＧＲＥカプセリングされたＫ番目のフラグメントパケットＦＰ−Ｋを受信すると（ステップ３５８）、デカプセリングを実行し（ステップ３５９）、再度リアセンブルを実行し（ステップ３６０）、リアセンブルを成功してオリジナルパケットのＴＣＰヘッダに含まれる情報で転送先ポリシー情報２０５を検索し、転送先の処理装置１０７−Ｍを選択する（ステップ３６１）。そして、内部転送装置１０４−１は、オリジナルパケットを処理装置１０７−Ｍへ転送する（ステップ３６２）。
【００７１】
また、内部転送装置１０４−２は、ＯＳのフラグメントパケット破棄タイマ満了後、Ｋ番目のフラグメントパケットＦＰ−Ｋを破棄する（ステップ３６３）。
【００７２】
図１１の例は、フラグメントパケットの順番が逆転して、異なる内部転送装置１０４−１、１０４−２へ到着した場合のシーケンスである。まず、内部転送装置１０４−１がＫ番目のフラグメントパケットＦＰ−Ｋを受信すると（ステップ３７１）、先頭フラグメントパケットＦＰ−１以外のフラグメントパケットを受信したため、ブロードキャスト送信タイマを起動する（ステップ３７２）。
【００７３】
ブロードキャスト送信タイマ起動後、内部転送装置１０４−１はリアセンブルを実行するが、フラグメントパケットがそろっていないため、リアセンブルに失敗する（ステップ３７３）。リアセンブル失敗後、ブロードキャスト送信タイマ満了まで、Ｋ番目のフラグメントパケットＦＰ−Ｋの送信を保留する。
【００７４】
ブロードキャスト送信タイマ満了後、内部転送装置１０４−１は、Ｋ番目のフラグメントパケットＦＰ−ＫのＧＲＥカプセリングを実行し（ステップ３７４）、内部転送装置１０４−１以外の全ての内部転送装置１０４−２、１０４−３へ送信する（ステップ３７５、ステップ３７６）。
【００７５】
内部転送装置１０４−２がＫ番目のフラグメントパケットＦＰ−Ｋを受信すると（ステップ３７５）、デカプセリングを実行し（ステップ３７７）、内部転送装置１０４−２は先頭フラグメントパケットＦＰ−１以外のフラグメントパケットを受信したため、ブロードキャスト送信タイマを起動する（ステップ３７８）。
【００７６】
ブロードキャスト送信タイマ起動後、内部転送装置１０４−２はリアセンブルを実行するが、フラグメントパケットがそろっていないため、リアセンブルに失敗する（ステップ３７９）。リアセンブル失敗後、ブロードキャスト送信タイマ満了まで、Ｋ番目のフラグメントパケットＦＰ−Ｋの送信を保留する。
【００７７】
その後、ブロードキャスト送信タイマ満了前に内部転送装置１０４−２へ先頭フラグメントパケットＦＰ−１が到着すると（ステップ３８０）、先頭フラグメントパケットＦＰ−１を受信した内部転送装置１０４−２はブロードキャスト送信タイマを停止し（ステップ３８１）、再度リアセンブルを実行し（ステップ３８２）、リアセンブルを成功してオリジナルパケットのＴＣＰヘッダに含まれる情報で転送先ポリシー情報２０５を検索し、転送先となる処理装置１０７−Ｍを選択する（ステップ３８３）。そして、内部転送装置１０４−２は、オリジナルパケットを処理装置１０７−Ｍへ転送する（ステップ３８４）。
【００７８】
また、内部転送装置１０４−１と内部転送装置１０４−３のそれぞれはＯＳのフラグメントパケット破棄タイマ満了後、Ｋ番目のフラグメントパケットＦＰ−Ｋを破棄する（ステップ３８５、ステップ３８６）。
【００７９】
図１２の例は、内部転送装置１０４におけるパケット受信から処理装置１０７への転送までのフローチャートである。まず、内部転送装置１０４のパケット判定モジュール３０１は、パケットバッファ３０２からパケットを取得する（ステップ４５１）。パケット判定モジュール３０１は取得したパケットがＧＲＥカプセリングされているかを判定し（ステップ４５２）、取得したパケットがＧＲＥカプセリングされていると判定した場合、デカプセリングを行う（ステップ４５３）。
【００８０】
次に、パケット判定モジュール３０１は、取得したパケットのＩＰヘッダからＦＦ（フラグメントフラグ）とＦＯ（フラグメントオフセット)の値を抽出し（ステップ４５４）、パケット判定テーブル６０１を参照して、パケット種別を判定する。なお、ＦＦの値とＦＯの値を直接に判定してもよい（ステップ４５５）。
【００８１】
パケット判定モジュール３０１によるパケット種別の判定結果が、先頭のフラグメントパケット（ＦＦ＝１、ＦＯ＝０）の場合、内部転送装置１０４はブロードキャスト送信タイマの状態を取得し（ステップ４５９）、ブロードキャスト送信タイマが起動しているかを判定する（ステップ４６０）。ブロードキャスト送信タイマが起動していた場合は、ブロードキャスト送信タイマを停止する（ステップ４６１）。
【００８２】
これにより、先頭のフラグメントパケットを受信した内部転送装置１０４は、先頭のフラグメントパケットをブロードキャストせず、他の内部転送装置１０４のリアセンブルを失敗させ、全てのフラグメントパケットを受信してリアセンブルする。
【００８３】
ブロードキャスト送信タイマ関連の処理の後、ステップ４６２の実行時までに他の内部転送装置１０４から受信したフラグメントパケットと、先頭のフラグメントパケットとのリアセンブルを実行し（ステップ４６２）、リアセンブルの実行結果を判定する（ステップ４６３）。
【００８４】
実行結果がリアセンブルの成功である場合は、リアセンブルしたオリジナルパケットのＴＣＰヘッダなどの情報に基づいて転送先ポリシー情報２０５（カラム４０１〜４０５のＩＰアドレスやポート番号）を検索し、転送先となる処理装置１０７のＩＰアドレスを転送先内部ＩＰアドレスカラム４０６から取得する（ステップ４６４）。そして、リアセンブルしたオリジナルパケットを、取得したＩＰアドレス宛に転送する（ステップ４６５）。また、ステップ４６３で実行結果がリアセンブルの失敗である場合は、ステップ４６２でリアセンブルの対象となったフラグメントパケットを保持しておく。
【００８５】
ステップ４５５におけるパケット種別の判定結果が、フラグメント化されていないパケット（ＦＦ＝０、ＦＯ＝０）の場合、内部転送装置１０４は、取得したパケットのＴＣＰヘッダなどの情報に基づいて転送先ポリシー情報２０５（カラム４０１〜４０５のＩＰアドレスやポート番号）を検索し、転送先となる処理装置１０７のＩＰアドレスを転送先内部ＩＰアドレスカラム４０６から取得する（ステップ４６４）。そして、取得したパケットを取得したＩＰアドレス宛に転送する（ステップ４６５）。
【００８６】
ステップ４５５におけるパケット種別の判定結果が、２番目以降のフラグメントパケット（ＦＦ＝１、ＦＯが1以上）もしくは末尾のフラグメントパケット（ＦＦ＝０、ＦＯが１以上）の場合、内部転送装置１０４は他の内部転送装置１０４へフラグメントパケットを転送するために、ブロードキャスト送信タイマを起動し（ステップ４５８）、ステップ４６２へ進む。
【００８７】
なお、ステップ４６２のリアセンブルで内部転送装置１０４は、先頭のフラグメントパケット（ＦＦ＝１、ＦＯ＝０）から末尾のフラグメントパケット（ＦＦ＝０、ＦＯが１以上）まで、ＦＯの値が連続するようにデータグラムが存在するのであれば、それらのデータグラムを連結してもよい。また、ステップ４６３で内部転送装置１０４は、先頭のフラグメントパケット（ＦＦ＝１、ＦＯ＝０）と末尾のフラグメントパケット（ＦＦ＝０、ＦＯが１以上）が存在し、ＦＯの値が連続することを判定して、リアセンブルの成功を判定してもよい。
【００８８】
図１３の例は、内部転送装置１０４におけるブロードキャスト送信タイマ満了後のブロードキャスト送信のフローチャートである。ブロードキャスト送信タイマが満了すると割り込みなどが発生し、まず、内部転送装置１０４は、保持していたフラグメントパケットを取得し（ステップ５５１）、フラグメントパケットをＧＲＥカプセリングする（ステップ５５２）。
【００８９】
その後、内部転送装置１０４は、ＧＲＥカプセリングされたフラグメントパケットを他の全ての内部転送装置１０４へブロードキャスト送信し（ステップ５５３）、保持していた全てのフラグメントパケットをブロードキャスト送信したか判定する（ステップ５５４）。保持していた全てのフラグメントパケットを送信していないと判定した場合、フラグメントパケットの取得（ステップ５５１）へ戻り、他の未送信のフラグメントパケットを取得して同様の処理を繰り返す。
【００９０】
ブロードキャスト送信のために、内部転送装置１０４はレイヤ２スイッチ１０９へＧＲＥカプセリングされたフラグメントパケットを送信してもよく、レイヤ２スイッチが内部転送装置１０４−１〜１０４−Ｎの一部又は全てへ転送するアドレスを、ＧＲＥカプセリングされたブロードキャスト送信されるフラグメントパケットは含んでもよい。ブロードキャスト送信は処理装置１０７へは送信されなくてもよい。
【００９１】
以上では、パケット判定モジュール３０１と内部転送装置１０４の処理として説明したが、パケット判定モジュール３０１は判定だけを行い、他の処理は転送プログラム２０３をＣＰＵ２０１が実行することにより他のモジュールが行ってもよい。また、内部転送装置１０４内のＣＰＵ２０１が実行する全ての処理を、パケット判定モジュール３０１が行ってもよい。
【００９２】
以上で説明したように、複数の内部転送装置１０４へフラグメントパケットが分散して到着しても、先頭のフラグメントパケットが到着した内部転送装置１０４によりオリジナルパケットへリアセンブルすることができる。ここで、フラグメントパケットのブロードキャスト送信により、リアセンブルに必要なフラグメントパケットを得られるため、リアセンブルのための特別な管理なども不要である。
【００９３】
そして、オリジナルパケットをリアセンブルできるため、ポリシー情報に基づいて適切な処理装置へ転送することも可能になる。
【符号の説明】
【００９４】
１０１：外部ネットワーク、１０２：転送装置、１０４：内部転送装置、１０５：ポリシー設定装置、１０７：処理装置、１０８：宛先装置、２０５：転送先ポリシー情報、３０１：パケット判定モジュール
【図１】
2017139680.tif 000003
【図２】
2017139680.tif 000004
【図３】
2017139680.tif 000005
【図４】
2017139680.tif 000006
【図５】
2017139680.tif 000007
【図６】
2017139680.tif 000008
【図７】
2017139680.tif 000009
【図８】
2017139680.tif 000010
【図９】
2017139680.tif 000011
【図１０】
2017139680.tif 000012
【図１１】
2017139680.tif 000013
【図１２】
2017139680.tif 000014
【図１３】
2017139680.tif 000015