(57)【特許請求の範囲】
【請求項１】
送信データ量を制限する、輻輳が検知される前の輻輳ウィンドウのサイズを記憶する記憶部と、
前記輻輳が検知された場合に、現在の輻輳ウィンドウのサイズを所定のサイズに縮小する輻輳制御部と、
前記輻輳が検知された後に経路切替が発生した場合、切替後の経路の往復遅延時間または帯域情報を用いて、前記記憶部に記憶される輻輳検知前の輻輳ウィンドウのサイズを補正する補正部と、
前記記憶部に記憶される輻輳検知前の輻輳ウィンドウのサイズと、前記補正部によって補正された後の輻輳ウィンドウのサイズのうち、大きい方のサイズに、前記縮小された輻輳ウィンドウのサイズを変更する変更部と
を有することを特徴とする情報処理装置。
【請求項２】
送信データの宛先である情報処理装置への通信を中継する中継装置から、前記往復遅延時間または帯域情報を含む、前記経路切替を通知する制御パケットを受信した場合に、前記経路切替が発生したことを検知する経路切替検知部をさらに有し、
前記補正部は、前記経路切替検知部によって受信された制御パケットから抽出した前記往復遅延時間または帯域情報を用いて、前記輻輳検知前の輻輳ウィンドウのサイズを補正することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
送信データの宛先である情報処理装置への通信を中継する中継装置から、前記経路切替を通知する制御パケットを受信した場合に、前記経路切替が発生したことを検知する経路切替検知部をさらに有し、
前記補正部は、前記経路切替検知部によって制御パケットが受信された場合に、切替後の経路の往復遅延時間または帯域情報を測定し、測定した往復遅延時間または帯域情報を用いて、前記輻輳検知前の輻輳ウィンドウのサイズを補正することを特徴とする請求項１に記載の情報処理装置。
【請求項４】
前記変更部は、送信データの宛先である情報処理装置への通信を中継する中継装置から輻輳によるキュー遅延が発生していることを示す通知を受信した場合、前記縮小された輻輳ウィンドウのサイズを変更することを抑止することを特徴とする請求項１に記載の情報処理装置。
【請求項５】
送信データ量を制限する、輻輳が検知される前の輻輳ウィンドウのサイズを記憶する記憶部と、
前記輻輳が検知された場合に、現在の輻輳ウィンドウのサイズを所定のサイズに縮小する輻輳制御部と、
送信データの宛先である情報処理装置への通信を中継する中継装置から、切替後の経路の往復遅延時間または帯域情報と経路切替にかかる予測時間とを含む、前記経路切替を通知する制御パケットを受信する経路切替検知部と、
前記経路切替検知部によって受信された制御パケットから抽出した前記往復遅延時間または帯域情報を用いて、前記記憶部に記憶される輻輳検知前の輻輳ウィンドウのサイズを補正する補正部と、
前記経路切替検知部によって受信された制御パケットに含まれる予測時間経過後に、前記補正部によって補正されたサイズに、前記縮小された輻輳ウィンドウのサイズを変更する変更部と
を有することを特徴とする情報処理装置。
【請求項６】
送信データ量を制限する、輻輳が検知される前の輻輳ウィンドウのサイズを記憶する記憶部と、
前記輻輳が検知された場合に、現在の輻輳ウィンドウのサイズを所定のサイズに縮小する輻輳制御部と、
送信データの宛先である情報処理装置への通信を中継する中継装置から、経路切替にかかる予測時間を含む、前記経路切替を通知する制御パケットを受信する経路切替検知部と、
前記経路切替検知部によって制御パケットが受信された場合に、切替後の経路の往復遅延時間または帯域情報を測定し、測定した往復遅延時間または帯域情報を用いて、前記記憶部に記憶される輻輳検知前の輻輳ウィンドウのサイズを補正する補正部と、
前記経路切替検知部によって受信された制御パケットに含まれる予測時間経過後に、前記補正部によって補正されたサイズに、前記縮小された輻輳ウィンドウのサイズを変更する変更部と
を有することを特徴とする情報処理装置。
【請求項７】
コンピュータが、
送信データ量を制限する、輻輳が検知される前の輻輳ウィンドウのサイズを記憶部に記憶し、
前記輻輳が検知された場合に、現在の輻輳ウィンドウのサイズを所定のサイズに縮小し、
前記輻輳が検知された後に経路切替が発生した場合、切替後の経路の往復遅延時間または帯域情報を用いて、前記記憶部に記憶される輻輳検知前の輻輳ウィンドウのサイズを補正し、
前記記憶部に記憶される輻輳検知前の輻輳ウィンドウのサイズと、補正された後の輻輳ウィンドウのサイズのうち、大きい方のサイズに、縮小された輻輳ウィンドウのサイズを変更する
処理を実行することを特徴とする輻輳制御方法。
【請求項８】
コンピュータに、
送信データ量を制限する、輻輳が検知される前の輻輳ウィンドウのサイズを記憶部に記憶し、
前記輻輳が検知された場合に、現在の輻輳ウィンドウのサイズを所定のサイズに縮小し、
前記輻輳が検知された後に経路切替が発生した場合、切替後の経路の往復遅延時間または帯域情報を用いて、前記記憶部に記憶される輻輳検知前の輻輳ウィンドウのサイズを補正し、
前記記憶部に記憶される輻輳検知前の輻輳ウィンドウのサイズと、補正された後の輻輳ウィンドウのサイズのうち、大きい方のサイズに、縮小された輻輳ウィンドウのサイズを変更する
処理を実行させることを特徴とする輻輳制御プログラム。
【請求項９】
コンピュータが、
送信データ量を制限する、輻輳が検知される前の輻輳ウィンドウのサイズを記憶部に記憶し、
前記輻輳が検知された場合に、現在の輻輳ウィンドウのサイズを所定のサイズに縮小し、
送信データの宛先である情報処理装置への通信を中継する中継装置から、切替後の経路の往復遅延時間または帯域情報と経路切替にかかる予測時間とを含む、前記経路切替を通知する制御パケットを受信し、
受信された制御パケットから抽出した前記往復遅延時間または帯域情報を用いて、前記記憶部に記憶される輻輳検知前の輻輳ウィンドウのサイズを補正し、
受信された前記制御パケットに含まれる予測時間経過後に、補正されたサイズに、前記縮小された輻輳ウィンドウのサイズを変更する
処理を実行することを特徴とする輻輳制御方法。
【請求項１０】
コンピュータに、
送信データ量を制限する、輻輳が検知される前の輻輳ウィンドウのサイズを記憶部に記憶し、
前記輻輳が検知された場合に、現在の輻輳ウィンドウのサイズを所定のサイズに縮小し、
送信データの宛先である情報処理装置への通信を中継する中継装置から、切替後の経路の往復遅延時間または帯域情報と経路切替にかかる予測時間とを含む、前記経路切替を通知する制御パケットを受信し、
受信された制御パケットから抽出した前記往復遅延時間または帯域情報を用いて、前記記憶部に記憶される輻輳検知前の輻輳ウィンドウのサイズを補正し、
受信された前記制御パケットに含まれる予測時間経過後に、補正されたサイズに、前記縮小された輻輳ウィンドウのサイズを変更する
処理を実行させることを特徴とする輻輳制御プログラム。
【請求項１１】
コンピュータが、
送信データ量を制限する、輻輳が検知される前の輻輳ウィンドウのサイズを記憶部に記憶し、
前記輻輳が検知された場合に、現在の輻輳ウィンドウのサイズを所定のサイズに縮小し、
送信データの宛先である情報処理装置への通信を中継する中継装置から、経路切替にかかる予測時間を含む、前記経路切替を通知する制御パケットを受信し、
前記制御パケットが受信された場合に、切替後の経路の往復遅延時間または帯域情報を測定し、測定した往復遅延時間または帯域情報を用いて、前記記憶部に記憶される輻輳検知前の輻輳ウィンドウのサイズを補正し、
受信された前記制御パケットに含まれる予測時間経過後に、補正されたサイズに、前記縮小された輻輳ウィンドウのサイズを変更する
処理を実行することを特徴とする輻輳制御方法。
【請求項１２】
コンピュータに、
送信データ量を制限する、輻輳が検知される前の輻輳ウィンドウのサイズを記憶部に記憶し、
前記輻輳が検知された場合に、現在の輻輳ウィンドウのサイズを所定のサイズに縮小し、
送信データの宛先である情報処理装置への通信を中継する中継装置から、経路切替にかかる予測時間を含む、前記経路切替を通知する制御パケットを受信し、
前記制御パケットが受信された場合に、切替後の経路の往復遅延時間または帯域情報を測定し、測定した往復遅延時間または帯域情報を用いて、前記記憶部に記憶される輻輳検知前の輻輳ウィンドウのサイズを補正し、
受信された前記制御パケットに含まれる予測時間経過後に、補正されたサイズに、前記縮小された輻輳ウィンドウのサイズを変更する
処理を実行させることを特徴とする輻輳制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、輻輳制御方法および輻輳制御プログラムに関する。
【背景技術】
【０００２】
ノード間でセッションを確立して通信を実行するコネクション型の通信プロトコルとしてＴＣＰ（Transmission  Control  Protocol）が知られている。ＴＣＰは、ＯＳＩ参照モデルにおけるトランスポート層の通信プロトコルで、ＩＥＴＦのＲＦＣ７９３に基本仕様が規定されている。
【０００３】
ＴＣＰのセッションは、ポート番号で管理され、上位アプリケーションと関連付けられる。上位アプリケーションから受け取ったバイトデータを送信する際、送信ノードは、送信パケットに収容されているバイトデータのオフセットをシーケンス番号で通知する。当該パケットを受信した受信ノードは、受信応答（ＡＣＫ）パケットのAcknowledgment番号に、次に送信して欲しいバイトデータのオフセットを入れて送信ノードへ送ることで、Acknowledgment番号までのバイトデータを受信したことを送信ノードに伝える。送信ノードは、ＡＣＫパケットを受信することで、どこまでデータが届いているかを把握し、送信したにも関わらず到達していないデータパケットを再送することで、データの到達性を保証する。
【０００４】
ＴＣＰは、受信ノードの処理が追いつかずにデータを取りこぼしたりするのを防いだり、他の通信との公平性を保つために、ウィンドウ管理によって送信レートを制御する。ＴＣＰで管理されるウィンドウサイズには、受信ウィンドウサイズと輻輳ウィンドウサイズとがある。受信ウィンドウサイズは、受信ノードがＴＣＰヘッダのＷｉｎｄｏｗフィールドで送信ノードに広告するものであり、受信ノードの受信バッファの空き容量を示す。輻輳ウィンドウサイズは、送信ノードが管理するものであり、送信ノードが輻輳を起こさずに送信可能と推測したデータ量を示す。送信ノードは、これらのウィンドウサイズのうち、小さい方の値を基に、送信データ量を制限する。
【０００５】
輻輳ウィンドウを使ったＴＣＰの輻輳制御は、ＩＥＴＦ  ＲＦＣ２５８１で規定される。送信ノードは、ＡＣＫを受信する毎に輻輳ウィンドウサイズを増やす一方で、経路上の輻輳を検知すると、輻輳ウィンドウサイズを小さくすることで送信レートを抑える輻輳制御を実行する。例えば、送信ノードは、同一セグメントに対するＡＣＫを３回重複受信すると輻輳によるパケットロスが発生したとして、輻輳ウィンドウサイズを小さくする。同様に、送信ノードは、一定期間ＡＣＫを受信しないままに再送タイムアウト（ＲＴＯ）が発生すると、輻輳ウィンドウサイズを最小にする。そして、送信ノードは、輻輳ウィンドウサイズを小さくした後、時間経過とともに、輻輳ウィンドウサイズを徐々に広げていく。
【０００６】
最近では、輻輳検知前の輻輳ウィンドウサイズを記憶しておき、輻輳検知後は輻輳ウィンドウサイズを徐々に戻すのではなく、輻輳が解除された場合に、記憶しておいた輻輳ウィンドウサイズに一気に戻す技術も知られている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００６−３０３９２５号公報
【特許文献２】特開２００４−１６５８１７号公報
【特許文献３】特開２００２−１３５３３０号公報
【特許文献４】特開２０１１−１５２８８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、従来技術の輻輳制御では、輻輳検知後に本来得られるはずのスループットが得られない場合があるという問題がある。
【０００９】
一般に、ＴＣＰのウィンドウサイズの最適値は、ネットワーク帯域と往復遅延時間との積で表される帯域遅延積である。送信ノードは、他のセッションとの公平性を図りネットワーク全体を最適化するために、個々のセッションで輻輳ウィンドウサイズを帯域遅延積に近づけるように輻輳回避制御を実行する。
【００１０】
従来技術では、輻輳検知としてパケットロスが発生した場合に、輻輳ウィンドウサイズを小さくして輻輳制御を実行する。ところが、輻輳が検知された後に、経路が切り替わることもある。この場合、経路が変わると往復遅延時間や帯域も変わり、帯域遅延積で表される輻輳ウィンドウサイズの最適値も増減する。つまり、従来技術では、輻輳検知後は、輻輳が発生した経路に対する最適値に戻すように、輻輳ウィンドウサイズを制御するので、必ずしも本来得られるはずのスループットが得られるものではない。
【００１１】
開示の技術は、上記に鑑みてなされたものであって、スループットの低下を抑制することができる情報処理装置、輻輳制御方法および輻輳制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１２】
本願の開示す情報処理装置、輻輳制御方法および輻輳制御プログラムは、一つの態様において、送信データ量を制限する、輻輳が検知される前の輻輳ウィンドウのサイズを記憶する記憶部を有する。また、情報処理装置、輻輳制御方法および輻輳制御プログラムは、前記輻輳が検知された場合に、現在の輻輳ウィンドウのサイズを所定のサイズに縮小する輻輳制御部を有する。また、情報処理装置、輻輳制御方法および輻輳制御プログラムは、前記輻輳が検知された後に経路切替が発生した場合、切替後の経路の往復遅延時間または帯域情報を用いて、前記記憶部に記憶される輻輳検知前の輻輳ウィンドウのサイズを補正する補正部を有する。また、情報処理装置、輻輳制御方法および輻輳制御プログラムは、前記補正部によって補正されたサイズに、前記縮小された輻輳ウィンドウのサイズを変更する変更部を有する。
【発明の効果】
【００１３】
本願の開示する情報処理装置、輻輳制御方法および輻輳制御プログラムの一つの態様によれば、スループットの低下を抑制することができるという効果を奏する。
【図面の簡単な説明】
【００１４】
【図１】図１は、実施例１に係るシステムの全体構成例を示す図である。
【図２】図２は、ＴＣＰセグメントのフォーマットの例を示す図である。
【図３】図３は、輻輳制御を説明する図である。
【図４】図４は、実施例２に係る輻輳制御を説明する図である。
【図５】図５は、実施例２に係るネットワークのＲＴＴ測定例を説明する図である。
【図６】図６は、切替通知パケットのフォーマット例を示す図である。
【図７】図７は、ＲＴＴを通知するオプションの例を示す図である。
【図８】図８は、ＴＣＰノードのハードウェア構成例を示す図である。
【図９】図９は、実施例２に係る中継ノードの構成を示す機能ブロック図である。
【図１０】図１０は、実施例２に係るＴＣＰノードの構成を示す機能ブロック図である。
【図１１】図１１は、実施例２に係る輻輳制御処理の流れを示すフローチャートである。
【図１２】図１２は、経路切替後の輻輳ウィンドウサイズの変化を示す図である。
【図１３】図１３は、実施例３に係る輻輳制御を説明する図である。
【図１４】図１４は、実施例４に係る輻輳制御を説明する図である。
【図１５】図１５は、切替時間を通知するパケットのオプションの例を示す図である。
【図１６】図１６は、帯域を通知するオプションの例を示す図である。
【図１７】図１７は、補正を抑止させるパケットの例を示す図である。
【発明を実施するための形態】
【００１５】
以下に、本願の開示する情報処理装置、輻輳制御方法および輻輳制御プログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例１】
【００１６】
図１は、実施例１に係るシステムの全体構成例を示す図である。図１に示すように、このシステムは、ＴＣＰ（Transmission  Control  Protocol）ノード１０とＴＣＰノード７０とが、中継ノード３０と中継ノード５０とを介して、通信可能に接続されている。
【００１７】
中継ノード３０と中継ノード５０は、ＴＣＰノード間のデータ転送を中継するスイッチやルータなどの中継装置である。また、中継ノード３０と中継ノード５０との間の通信経路は、冗長化されている。具体的には、中継ノード３０と中継ノード５０の各々は、経路Ａを現用系として用い、経路Ａに輻輳や障害が発生した場合に、経路Ｂに切替えて通信を維持する。
【００１８】
ＴＣＰノード１０は、ＴＣＰノード７０とコネクションを確立して、ＴＣＰでデータ送受信を実行するサーバ等である。同様に、ＴＣＰノード７０は、ＴＣＰノード１０とコネクションを確立して、ＴＣＰでデータ送受信を実行するサーバ等である。各ＴＣＰノードは、受信ウィンドウサイズを交換し、輻輳ウィンドウサイズと比較して小さい方の値を基に、送信データ量を制限する。ここでは、受信ウィンドウサイズは十分大きいものとし、送信側のＴＣＰノードは、輻輳ウィンドウサイズにしたがって、ＴＣＰセグメント言い換えるとＴＣＰパケットを制御する。
【００１９】
図２は、ＴＣＰセグメントのフォーマットの例を示す図である。図２に示すように、ＴＣＰセグメントは、Source  Port、Destination  Port、Sequence  Number、Acknowledgement  Number、HLEN、Reserved、Flags、Window、Checksum、Urgent  Pointer、Options、Dataから構成される。
【００２０】
Source  Portは、送信元のポート番号を示す１６ビットの情報である。Destination  Portは、受信先のポート番号を示す１６ビットの情報である。Sequence  Numberは、データのシーケンシャルな順番を示す３２ビットの情報である。Acknowledgement  Numberは、相手先から送信された送信シーケンス番号を示す３２ビットの情報である。
【００２１】
HLENは、ＴＣＰヘッダの長さを３２ビット単位で指定する４ビットの情報である。Reservedは、拡張のための予約領域であり、通常は０である。Flagsは、制御内容を示す６ビットの情報である。例えば、Flagsには、URG（緊急）、ACK（応答）、PUSH（プッシュ機能）、RST（強制切断）、SYN（接続要求）、FIN（返信）などがある。Windowは、受信先の受信バッファに格納できるデータ量、言い換えると、受信ウィンドウサイズを示す１６ビットの情報である。Checksumは、誤り制御用のフィールドであり、１６ビットの情報である。Urgent  Pointerは、Flags内のURGフラグが「１」の場合、緊急処理を要するデータの位置を示す１６ビットの情報である。Optionsは、ユーザが任意に使用できる領域である。Dataは、送信対象のデータが格納される領域である。
【００２２】
また、各ＴＣＰノードは、輻輳が検出された場合に、輻輳制御を実行する。図３は、輻輳制御を説明する図である。例えば、図３に示すように、送信側であるＴＣＰノード１０は、受信側のＴＣＰノード７０との間でコネクションを確立し、輻輳ウィンドウサイズを（Ａ）に設定して、ＴＣＰセグメントをＴＣＰノード７０に送信する。そして、ＴＣＰノード１０は、時刻ｔの時点で、パケットロスを検出し輻輳が発生したことを検知する。すると、ＴＣＰノード１０は、輻輳ウィンドウサイズを（Ａ）から（Ｂ）に変更し、輻輳ウィンドウサイズ（Ｂ）にしたがってＴＣＰセグメントをＴＣＰノード７０に送信する。その後、ＴＣＰノード１０は、時間経過とともに、輻輳ウィンドウサイズを（Ｂ）から（Ａ）に到達するまで徐々に広げていく。このように、ＴＣＰノードは、輻輳発生時に送信レートを制御することで、輻輳の早期回復やパケットロスの抑止を実現する。
【００２３】
ここで、実施例１に係るＴＣＰノードは、送信データ量を制限する、輻輳が検知される前の輻輳ウィンドウのサイズを記憶する。そして、ＴＣＰノードは、輻輳が検知された場合に、現在の輻輳ウィンドウのサイズを所定のサイズに縮小する。その後、ＴＣＰノードは、輻輳が検知された後に経路切替が発生した場合、切替後の経路の往復遅延時間または帯域を用いて、記憶される輻輳検知前の輻輳ウィンドウのサイズを補正する。そして、ＴＣＰノードは、補正されたサイズに、縮小された輻輳ウィンドウのサイズを変更する。
【００２４】
このように、実施例１に係るＴＣＰノードは、輻輳後に切替った経路の往復遅延時間又は帯域を用いて、輻輳前のサイズを補正したサイズに、輻輳ウィンドウを変更することで、切替後の経路に適した送信レートでデータ送信することができる。この結果、輻輳検知後のスループットの低下を抑制することができる。
【実施例２】
【００２５】
次に、実施例２では、送信側のＴＣＰノードが、中継ノードが実行した経路切替を受信ノードから受信する例について説明する。ここでは、ＴＣＰノード１０が送信側のノードであり、ＴＣＰノード７０が受信側のノードである例で説明する。
【００２６】
［実施例２の輻輳制御］
図４は、実施例２に係る輻輳制御を説明する図である。図４に示すように、実施例２のネットワーク構成は、図１と同様とする。実施例２では、ＴＣＰノード１０が、パケットロスによって輻輳を検知すると、輻輳ウィンドウのサイズを正常時の「ｃｗｎｄ」を縮小する。このとき、ＴＣＰノード１０は、変更前のウィンドウサイズ「ｃｗｎｄ」を「ｃｗｎｄ´」として保持しておく。
【００２７】
その後、中継ノード間で経路切替が発生すると、中継ノード５０が、ＴＣＰノード７０に切替通知とＲＴＴとを通知する。ＴＣＰノード７０は、中継ノード５０から受信した切替通知とＲＴＴとをＴＣＰノード１０に通知する。ＴＣＰノード１０は、この通知によって経路切替が発生したことを検出する。そして、ＴＣＰノードは、通知されたＲＴＴを用いて、保持しておいた輻輳ウィンドウのサイズ「ｃｗｎｄ´」を補正し、縮小させた輻輳ウィンドウのサイズを補正後のサイズに変更する。
【００２８】
ここで、図５を用いてＲＴＴについて説明する。図５は、実施例２に係るネットワークのＲＴＴ測定例を説明する図である。ＴＣＰノード１０は、ＴＣＰノード７０との間の往復遅延時間としてＲＴＴ０を測定する。なお、ＴＣＰノード１０は、ＴＣＰの標準動作として、ＴＣＰパケット送信からＡＣＫ受信までの時間をＲＴＴとして測定している。
【００２９】
各中継ノードは、現用系経路の往復遅延時間としてＲＴＴ１を測定し、予備系経路の往復遅延時間としてＲＴＴ２を測定する。なお、各中継ノードは、各経路の遅延を事前に測定しておく。そして、各中継ノードは、現用系経路と予備系経路とのＲＴＴの差「ＲＴＴ´＝ＲＴＴ２−ＲＴＴ１」を計算して保持する。
【００３０】
次に、図６と図７とを用いて、中継ノードが経路切替とＲＴＴとを通知する手法について説明する。図６は、切替通知パケットのフォーマット例を示す図である。図７は、ＲＴＴを通知するオプションの例を示す図である。中継ノードは、図６に示すように、通常のＴＣＰパケットのフォーマット内のReservedフィールドに、経路切替フラグを示すＳＷフィールドを新たに設け、このＳＷフィールドに０１を挿入することで、経路切替の発生を通知する。このとき、中継ノードは、ＴＣＰパケットのOptionフィールドを図７に示した値を代入して送信する。具体的には、中継ノードは、図７に示すように、ＲＴＴを通知することを示すkindに１０を設定し、オプション長を示すlengthに４を設定し、ＲＴＴ´を代入したOptionフィールドを生成する。
【００３１】
ＴＣＰノード７０は、中継ノードから受信した切替通知パケットのＳＷフィールドを１０に設定変更して、ＴＣＰノード１０に送信する。ＴＣＰノード１０は、ＴＣＰノード７０からＴＣＰパケットを受信した場合に、当該パケットのＳＷフィールが１０であることから、経路切替が発生したことを検出することができる。また、ＴＣＰノード１０は、経路切替が通知されたＴＣＰパケットのOptionからＲＴＴ´を読み出し、このＲＴＴ´を用いて輻輳ウィンドウのサイズを補正する。
【００３２】
［ハードウェア構成］
次に、実施例２に係る各ノードのハードウェア構成を説明する。各ノードは、同様の構成を有するので、ここでは、送信ノードを例にして説明する。図８は、ＴＣＰノードのハードウェア構成例を示す図である。
【００３３】
図８に示すように、ＴＣＰノード１０は、ＣＰＵ１０ｂ、入力装置１０ｃ、出力装置１０ｄ、通信インタフェース１０ｅ、ＨＤＤ（Hard  Disk  Drive）１０ｆ、ＲＡＭ（Random  Access  Memory）１０ｇを有する。また、図８に示した各部は、バス１０ａで相互に接続される。
【００３４】
入力装置１０ｃは、マウスやキーボードであり、出力装置１０ｄは、ディスプレイなどであり、通信インタフェース１０ｅは、ＮＩＣ（Network  Interface  Card）などのインタフェースである。ＨＤＤ１０ｆは、ＣＰＵ１０ｂが実行するプログラムやデータ等を記憶する。記録媒体の例としてＨＤＤ１０ｆを例に挙げたが、ＲＯＭ（Read  Only  Memory）、ＲＡＭ、ＣＤ−ＲＯＭ等の他のコンピュータが読み取り可能な記録媒体に各種プログラムを格納しておき、コンピュータに読み取らせることとしてもよい。なお、記録媒体を遠隔地に配置し、コンピュータが、その記憶媒体にアクセスすることでプログラムを取得して利用してもよい。また、その際、取得したプログラムをＴＣＰノード１０自身の記録媒体に格納して用いてもよい。
【００３５】
ＣＰＵ１０ｂは、ＴＣＰノード１０の全体的な処理を司る処理部であり、実施例２で説明する各処理部と同様の処理を実行するプログラムを読み出してＲＡＭ１０ｇに展開することで、各機能を実行するプロセスを動作させる。すなわち、このプロセスは、後述する図９や図１０と同様の機能を実行する。このようにＴＣＰノード１０は、プログラムを読み出して実行することで、実施例２で説明する輻輳制御方法を実行する情報処理装置として動作する。
【００３６】
［中継ノードの構成］
図９は、実施例２に係る中継ノードの構成を示す機能ブロック図である。中継ノード３０と中継ノード５０は同様の構成を有するので、ここでは、中継ノード３０について説明する。図９に示すように、中継ノード３０は、記憶部３０ａ、送信部３１、受信処理部３２、受信処理部３３、送信処理部３４、送信処理部３５を有する。また、中継ノード３０は、スイッチ３６、転送処理部３７、スイッチ３８、障害検知部３９、切替通知処理部４０を有する。なお、各処理部は、ＣＰＵが実行する処理部であり、記憶部３０ａは、メモリなどの記憶装置である。
【００３７】
記憶部３０ａは、プログラムや各種データを記憶する記憶部である。例えば、記憶部３０ａは、現用系と予備系の使用状況を記憶し、図５で説明したＲＴＴ１、ＲＴＴ２やＲＴＴ´を記憶する。また、記憶部３０ａは、経路情報等も記憶する。
【００３８】
送信部３１は、ＴＣＰノードとの間の通信を制御する処理部である。例えば、送信部３１は、ＴＣＰノード７０に経路切替とＲＴＴとを通知するＴＣＰパケットを送信する。
【００３９】
受信処理部３２は、現用系の経路を用いた受信処理を制御する処理部である。例えば、受信処理部３２は、現用系の経路を介して、対向する中継ノード５０が送信したＴＣＰパケットを受信する。受信処理部３３は、予備系の経路を用いた受信処理を制御する処理部である。例えば、受信処理部３３は、予備系の経路を介して、対向する中継ノード５０が送信したＴＣＰパケットを受信する。
【００４０】
送信処理部３４は、現用系の経路を用いた送信処理を制御する処理部である。例えば、送信処理部３４は、現用系の経路を介して、対向する中継ノード５０にＴＣＰパケットを送信する。また、送信処理部３５は、予備系の経路を用いた送信処理を制御する処理部である。例えば、送信処理部３４は、予備系の経路を介して、対向する中継ノード５０にＴＣＰパケットを送信する。
【００４１】
スイッチ３６は、受信経路の切替を実行する処理部である。例えば、スイッチ３６は、障害検知部３９や切替通知処理部４０等の指示により、受信経路を受信処理部３２から受信処理部３３に切り替える。そして、スイッチ３６は、受信処理部３２または受信処理部３３から入力されたＴＣＰパケットを転送処理部３７に出力する。
【００４２】
転送処理部３７は、ＴＣＰパケットを宛先に転送する処理部である。例えば、転送処理部３７は、スイッチ３６から入力されたＴＣＰパケットから宛先を特定し、記憶部３０ａに記憶される経路情報にしたがって送信先の送信処理部を特定する。そして、転送処理部３７は、決定した送信処理部に接続されるスイッチに、当該ＴＣＰパケットを出力する。
【００４３】
スイッチ３７は、送信経路の切替を実行する処理部である。例えば、スイッチ３７は、障害検知部３９や切替通知処理部４０等の指示により、送信経路を送信処理部３４から送信処理部３５に切り替える。そして、スイッチ３７は、転送処理部３７から入力されたＴＣＰパケットを、送信処理部３４または送信処理部３５に出力する。
【００４４】
障害検知部３９は、現用系経路または予備系経路で発生した障害を検知する処理部である。例えば、障害検知部３９は、ポーリングなど一般的に広く利用される監視手法によって、障害を検知する。そして、障害検知部３９は、障害を検知した場合に、現用系から予備系に経路を切り替える指示を、スイッチ３６とスイッチ３８に出力する。また、障害検知部３９は、障害検知によって経路が切り替わったことを、切替通知処理部４０に出力する。
【００４５】
切替通知処理部４０は、ＴＣＰノードに切替通知およびＲＴＴを通知する処理部である。例えば、切替通知処理部４０は、経路切替が発生したことが障害検知部３９から通知されると、記憶部３０ａからＲＴＴ´を読み出し、図７に示したオプションフィールドを生成する。その後、切替通知処理部４０は、図６に示した、当該オプションフィールドを挿入した切替通知パケットを生成して、ＴＣＰノード７０に送信する。実施例２では、このように送信された切替通知パケットは、ＴＣＰノード７０を経由してＴＣＰノード１０に受信される。
【００４６】
［ＴＣＰノードの構成］
続いて、ＴＣＰノードの構成を説明する。ＴＣＰノード１０とＴＣＰノード７０は同様の構成を有するので、ここでは、ＴＣＰノード１０を例にして説明する。図１０は、実施例２に係るＴＣＰノードの構成を示す機能ブロック図である。
【００４７】
図１０に示すように、ＴＣＰノード１０は、ＩＰ（Internet  Protocol）処理部１１と、ＴＣＰ受信処理部１２と、ＡＣＫ受信部１３と、ＴＣＰセグメント送信部１４と、ＴＣＰ送信処理部１５とを有する。
【００４８】
ＩＰ処理部１１は、中継ノードとの間の通信を制御する処理部である。例えば、ＩＰ処理部１１は、ＴＣＰセグメント送信部１４から出力されたＴＣＰセグメントにＩＰヘッダを付加したＴＣＰパケットを生成して、中継ノード３０に送信する。また、ＩＰ処理部１１は、中継ノード５０から受信したＴＣＰパケットからＩＰヘッダを削除してＴＣＰセグメントを生成し、ＴＣＰ受信処理部１２、ＡＣＫ受信部１３等の処理部に出力する。
【００４９】
ＴＣＰ受信処理部１２は、受信されたＴＣＰパケットに受信処理を実行する処理部である。例えば、ＴＣＰ受信処理部１２は、ＩＰ処理部１１から出力されたＴＣＰセグメントからデータを取り出してアプリケーションに出力する。また、ＴＣＰ受信処理部１２は、受信されたＴＣＰパケットの応答として、正常に受信したことを示すＡＣＫを、ＴＣＰパケットの送信元に送信する。
【００５０】
ＡＣＫ受信部１３は、ＡＣＫを受信し、受信結果をＴＣＰセグメント送信部１４の再送制御部１４ｂと、ＴＣＰ送信処理部１４ａのウィンドウ制御部１５ｄに出力する。例えば、ＡＣＫ受信部１３は、ＩＰ処理部１１が受信したＴＣＰパケットのうち、ＴＣＰセグメント送信部１４から送信されたＴＣＰセグメントに対するＡＣＫを受信して、再送制御部１４ｂとウィンドウ制御部１５ｄに出力する。
【００５１】
ＴＣＰセグメント送信部１４は、送信制御部１４ａと再送制御部１４ｂとを有し、ＴＣＰセグメントを送信する処理部である。ＴＣＰセグメント送信部１４から出力されたＴＣＰセグメントは、ＩＰ処理部１１に入力され、ＩＰ処理部１１によってＴＣＰパケットとなって、宛先に送信される。ＴＣＰセグメント送信部１４は、送信したＴＣＰセグメントを再送制御部内の再送キューに一旦入れる。
【００５２】
送信制御部１４ａは、ＴＣＰセグメントを送信する処理部である。例えば、送信制御部１４ａは、ＴＣＰセグメントを生成して、ＴＣＰ送信処理部１５からウィンドウサイズを受け付けて、受け付けたウィンドウサイズで帯域制御しながら宛先に出力する。
【００５３】
再送制御部１４ｂは、ＴＣＰセグメントを再送信する処理部である。例えば、再送制御部１４ｂは、ＴＣＰ送信処理部１５やＡＣＫ受信部１３から再送指示を受け付けた場合に、指示されたＴＣＰセグメントの再送を実行する。また、再送制御部１４ｂは、ＡＣＫ受信部１３によって受信されたＡＣＫから、相手装置が正常に受信できていないことを検知した場合に、再送処理を実行する。また、ＡＣＫ受信部から正常に受信できたことを確認したＴＣＰセグメントを再送キューから削除する。
【００５４】
ＴＣＰ送信処理部１５は、輻輳検知部１５ａと切替検知部１５ｂと補正部１５ｃとウィンドウ制御部１５ｄとを有し、ＴＣＰセグメントの送信に関する各種処理を実行する。輻輳検知部１５ａは、ＡＣＫ受信部１３によるＡＣＫ受信結果に基づいて、パケットロスを検知し、輻輳を検知する処理部である。例えば、輻輳検知部１５ａは、同一セグメントに対するＡＣＫを３回重複受信した場合、一定期間ＡＣＫを受信しないままに再送タイムアウトが経過した場合など様々な手法を用いてパケットロスを検知する。そして、輻輳検知部１５ａは、パケットロスを検知した場合に、輻輳が発生したと検知する。その後、輻輳検知部１５ａは、輻輳を検知したことを補正部１５ｃとウィンドウ制御部１５ｄに通知する。
【００５５】
切替検知部１５ｂは、経路の切替が発生したことを検知する処理部である。具体的には、切替検知部１５ｂは、経路切替が発生したことを示すパケットがＩＰ処理部１１によって受信された場合に、経路切替の発生を検知する。例えば、切替検知部１５ｂは、受信されたＴＣＰパケットの経路切替フラグを示すＳＷフィールドを参照し、このＳＷフィールドが１０である場合に、当該ＴＣＰパケットを経路切替パケットと判定する。そして、切替検知部１５ｂは、当該経路切替パケットを補正部１５ｃに出力する。
【００５６】
補正部１５ｃは、輻輳が検知された後に経路切替が発生した場合、切替後の経路の往復遅延時間または帯域を用いて、記憶部１６に記憶される輻輳検知前の輻輳ウィンドウのサイズを補正する。例えば、補正部１５ｃは、輻輳検知部１５ａから輻輳が発生したことが通知された後に、切替検知部１５ｂから経路切替が発生したことが通知された場合に、記憶部１６から輻輳前のウィンドウサイズ「ｃｗｎｄ´」と往復遅延時間「ＲＴＴ０」とを取得する。また、補正部１５ｃは、切替検知部１５ｂから入力された経路切替パケットのOptionフィールドから「ＲＴＴ´」を読み出す。
【００５７】
その後、補正部１５ｃは、「ｃｗｎｄ´×（ＲＴＴ０＋ＲＴＴ´）／ＲＴＴ０」を算出し、これを補正後の輻輳ウィンドウサイズ「ｃｗｎｄ´´」とする。そして、補正部１５ｃは、補正後の輻輳ウィンドウサイズ「ｃｗｎｄ´´」をウィンドウ制御部１５ｄに出力する。なお、記憶部１６は、輻輳前のウィンドウサイズである「ｃｗｎｄ´」、現在の輻輳ウィンドウサイズである「ｃｗｎｄ」、往復遅延時間である「ＲＴＴ０」を記憶する記憶装置である。
【００５８】
ウィンドウ制御部１５ｄは、ウィンドウサイズを制御する処理部である。このウィンドウ制御部１５ｄは、ＴＣＰノードが正常にＴＣＰパケットが送信されているときの輻輳ウィンドウのサイズ、言い換えると輻輳検知前の輻輳ウィンドウのサイズを記憶部１６に格納する。
【００５９】
例えば、ウィンドウ制御部１５ｄは、輻輳検知部１５ａによって輻輳が検知された場合に、輻輳ウィンドウのサイズを所定の値に減少させて輻輳制御を実行する。一例を挙げると、ウィンドウ制御部１５ｄは、輻輳ウィンドウのサイズを最小値まで減少させる。その後、ウィンドウ制御部１５ｄは、時間経過とともに、輻輳ウィンドウのサイズを徐々に大きくする。なお、ウィンドウ制御部１５ｄは、サイズを変更するたびに、ＴＣＰセグメント送信部１４に変更後のサイズを通知する。
【００６０】
また、ウィンドウ制御部１５ｄは、補正部１５ｃから補正値「ｃｗｎｄ´´」を受信した場合、輻輳ウィンドウのサイズを変更する。例えば、ウィンドウ制御部１５ｄは、補正部１５ｃから受け付けた「ｃｗｎｄ´´」と、現在の輻輳ウィンドウのサイズ「ｃｗｎｄ」とを比較し、大きい方を選択する。そして、ウィンドウ制御部１５ｄは、選択したサイズに輻輳ウィンドウのサイズを変更し、変更したサイズをＴＣＰセグメント送信部１４に通知する。
【００６１】
［ＴＣＰノードの処理］
図１１は、実施例２に係る輻輳制御処理の流れを示すフローチャートである。図１１に示すように、ＴＣＰノード１０のウィンドウ制御部１５ｄは、輻輳を検知すると（Ｓ１０１Ｙｅｓ）、輻輳前の輻輳ウィンドウのサイズ「ｃｗｎｄ´」を記憶部１６に保持する（Ｓ１０２）。
【００６２】
そして、ＴＣＰセグメント送信部１４の送信制御部１４ａは、輻輳ウィンドウのサイズを「ｃｗｎｄ」を減らす（Ｓ１０３）。続いて、送信制御部１４ａは、ウィンドウ制御部１５ｄが指定する、減少したウィンドウサイズ「ｃｗｎｄ」にしたがって、ＴＣＰセグメントの送信処理を実行する（Ｓ１０４）。
【００６３】
そして、切替検知部１５ｂは、経路切替が発生したか否かを判定する（Ｓ１０５）。すなわち、切替検知部１５ｂは、経路切替を通知する経路切替パケットを受信したか否かを判定する。
【００６４】
そして、経路切替が発生していない場合に（Ｓ１０５Ｎｏ）、ウィンドウ制御部１５ｄは、減少したウィンドウサイズ「ｃｗｎｄ」を、徐々に所定サイズ大きくしていく（Ｓ１０６）。送信制御部１４ａは、ウィンドウ制御部１５ｄによって制御されるウィンドウサイズ「ｃｗｎｄ」にしたがって、ＴＣＰセグメントの送信処理を実行する（Ｓ１０４）。
【００６５】
一方、切替検知部１５ｂによって経路切替が発生した場合（Ｓ１０５Ｙｅｓ）、補正部１５ｃは、経路切替パケットから「ＲＴＴ´」を抽出する（Ｓ１０７）。そして、補正部１５ｃは、記憶部に記憶する「ｃｗｎｄ´」を補正して「ｃｗｎｄ´´」を算出する（Ｓ１０８）。その後、ウィンドウ制御部１５ｄは、現在の輻輳ウィンドウのサイズ「ｃｗｎｄ」と、補正された「ｃｗｎｄ´´」とを比較し、大きい方のウィンドウサイズで送信処理を実行するように、ＴＣＰセグメント送信部１４に指示する（Ｓ１０９）。その後、送信制御部１４ａは、ウィンドウ制御部１５ｄが指定するウィンドウサイズにしたがって、ＴＣＰセグメントの送信処理を実行する（Ｓ１１０）。
【００６６】
なお、ウィンドウ制御部１５ｄは、輻輳を検知しない場合（Ｓ１０１Ｎｏ）、ウィンドウサイズ「ｃｗｎｄ」を徐々に所定サイズ大きくし（Ｓ１０６）、送信制御部１４ａは、Ｓ１０４以降の処理を実行する。
【００６７】
［効果］
実施例１に係るＴＣＰノードは、パケットロスを検知した場合、元の輻輳ウィンドウサイズを記憶しておき、通常の輻輳制御を行う。一方、経路切替を実施した中継ノードは、往復遅延時間の差分に関する情報を伴った切替通知を行う。切替通知を受けたＴＣＰノードは、自分が保持する輻輳検知前の輻輳ウィンドウサイズを元に、往復遅延時間の差分による補正を行った値に変更する。このようにすることで、切替経路によって変化した往復遅延時間を用いた輻輳ウィンドウサイズの最適値に変更することができるので、輻輳検知後に本来得られるはずのスループットを得ることができる。
【００６８】
図１２は、経路切替後の輻輳ウィンドウサイズの変化を示す図である。図１２に示すように、ＴＣＰノード１０は、コネクション確立後、輻輳ウィンドウサイズを徐々に増やし、最終的に輻輳ウィンドウサイズの最適値「Ｘ」にしたがって、ＴＣＰセグメントを送信する。その後、ＴＣＰノード１０は、時刻ｔ０において、パケットロスによる輻輳を検知すると、輻輳ウィンドウのサイズを「Ｙ」に減少させて、輻輳制御を実行する。
【００６９】
その後、ＴＣＰノード１０は、時刻ｔ１において、経路切替パケットを受信する。すると、ＴＣＰノード１０は、経路切替パケットに含まれる経路切替前後の往復遅延時間の差に基づいて、元のウィンドウサイズ「Ｘ」からウィンドウサイズ「Ｚ」を算出する。その後、ＴＣＰノード１０は、通常の輻輳制御を停止し、輻輳ウィンドウのサイズを「Ｚ」に変更して、ＴＣＰセグメントの送信処理を実行する。
【００７０】
このように、ＴＣＰノード１０は、輻輳検知後に経路切替が発生した場合には、切替後の経路のＲＴＴを用いた最適な輻輳ウィンドウサイズに変更することができる。したがって、ＴＣＰノード１０は、切替えられた経路に適した輻輳ウィンドウサイズで送信処理を実行することができる。
【実施例３】
【００７１】
実施例２では、中継ノードが切替通知と往復遅延時間の差とを受信ノード経由で送信ノードに送信する例について説明したが、これに限定されるものではない。実施例３では、中継ノードが切替通知を受信ノード経由で送信ノードに送信し、送信ノードが往復遅延時間を測定する例について説明する。
【００７２】
図１３は、実施例３に係る輻輳制御を説明する図である。図１３に示すように、ネットワーク構成は、実施例１や実施例２と同様とする。ＴＣＰノード１０のウィンドウ制御部１５ｄが、パケットロスによって輻輳を検知すると、輻輳ウィンドウのサイズ「ｃｗｎｄ」を縮小する。このとき、ＴＣＰノード１０のウィンドウ制御部１５ｄは、変更前のウィンドウサイズ「ｃｗｎｄ´」を保持しておく。この後、ウィンドウ制御部１５ｄは、通常の輻輳処理を実行し、現在の輻輳ウィンドウサイズ「ｃｗｎｄ」を徐々に広げていく。
【００７３】
その後、中継ノード間で経路切替が発生すると、中継ノード５０が、ＴＣＰノード７０に切替通知を通知する。ＴＣＰノード７０は、中継ノード５０から受信した切替通知をＴＣＰノード１０に通知する。このときの切替通知は、図６に示したＳＷフィールドに０１が設定されたパケットである。実施例２と異なる点は、OptionフィールドにＲＴＴ´が設定されていない点である。
【００７４】
ＴＣＰノード７０は、中継ノード５０から受信した切替通知パケットのＳＷフィールドを０１から１０に変更した後、ＴＣＰノード１０に送信する。ＴＣＰノード１０の切替検知部１５ｂは、この通知によって経路切替が発生したことを検出する。そして、ＴＣＰノードの切替検知部１５ｂは、受信ノードとの往復遅延時間「ＲＴＴ３」を測定する。なお、ＲＴＴ０は、切替前の現用系の経路における往復遅延時間であり、ＲＴＴ３は、切替後の予備系の経路における往復遅延時間である。
【００７５】
その後、ＴＣＰノード１０の補正部１５ｃは、「ｃｗｎｄ´×ＲＴＴ３／ＲＴＴ０」を算出し、これを補正後の輻輳ウィンドウサイズ「ｃｗｎｄ´´」とする。ウィンドウ制御部１５ｄは、補正部１５ｃから受け付けた「ｃｗｎｄ´´」と、現在の輻輳ウィンドウのサイズ「ｃｗｎｄ」とを比較し、大きい方を選択する。そして、ウィンドウ制御部１５ｄは、選択したサイズに輻輳ウィンドウのサイズを変更し、変更したサイズをＴＣＰセグメント送信部１４に通知する。
【００７６】
このように、ＴＣＰノード１０は、経路切替が発生したことが通知されると、切替後の経路における往復遅延時間を測定し、測定した結果に基づいて輻輳ウィンドウのサイズを補正することができる。したがって、ＴＣＰノード１０は、現実の正確な往復遅延時間に基づいて輻輳ウィンドウサイズを補正することができるので、経路切替後の最適なスループットを確保することができる。
【実施例４】
【００７７】
実施例４では、送信側のＴＣＰノード１０が、受信側のＴＣＰノード７０を介さずに、中継ノード３０から切替通知を直接受信する例について説明する。ここでも、ネットワーク構成は、実施例１や実施例２と同様とする。
【００７８】
図１４は、実施例４に係る輻輳制御を説明する図である。図１４に示すように、ＴＣＰノード１０のウィンドウ制御部１５ｄが、パケットロスによって輻輳を検知すると、輻輳ウィンドウのサイズを縮小する。このとき、ＴＣＰノード１０のウィンドウ制御部１５ｄは、変更前のウィンドウサイズ「ｃｗｎｄ」を「ｃｗｎｄ´」として保持しておく。この後、ウィンドウ制御部１５ｄは、通常の輻輳処理を実行し、現在の輻輳ウィンドウサイズ「ｃｗｎｄ」を徐々に広げていく。
【００７９】
その後、中継ノード間で経路切替が発生すると、中継ノード３０が、ＴＣＰノード１０に切替通知を通知する。このときに送信される切替通知パケットを図１５に示す。図１５は、切替時間を通知するパケットのオプションの例を示す図である。中継ノード５０は、図１５に示すように、ＲＴＴ´および切替予測時間を通知することを示す「Kind」に１１を設定し、オプション長を示す「Length」に４を設定し、「ＲＴＴ´」と「切替時予測時間」を代入したOptionフィールドを生成する。そして、中継ノード３０は、経路切替フラグを示すＳＷフィールドに１０を設定し、図１５に示したオプションを含む経路切替パケットをＴＣＰノード１０に送信する。なお、「ＲＴＴ´」の算出方法は、実施例２と同様なので、詳細な説明は省略する。また、切替時予測時間は、管理者等が予め指定することを想定する。
【００８０】
ＴＣＰノード１０の切替検知部１５ｂは、中継ノード３０から受信したパケットのＳＷフィールドが１０であることから、経路切替が発生すると予測する。そして、ＴＣＰノード１０の補正部１５ｃは、当該パケットのOptionフィールドから、往復遅延時間「ＲＴＴ´」と切替予測時間「ＳＷ  Ｄｅｌａｙ」とを抽出する。
【００８１】
その後、ＴＣＰノード１０の補正部１５ｃは、実施例２と同様の手法で、「ｃｗｎｄ´」を補正した「ｃｗｎｄ´´」を算出する。そして、ＴＣＰノード１０のウィンドウ制御部１５ｄは、補正部１５ｃから受け付けた「ｃｗｎｄ´´」と、現在の輻輳ウィンドウのサイズ「ｃｗｎｄ」とを比較し、大きい方を選択する。
【００８２】
このようにしてウィンドウサイズを選択したウィンドウ制御部１５ｄは、経路切替パケットから抽出された切替予測時間「ＳＷ  Ｄｅｌａｙ」経過後に、選択したサイズに輻輳ウィンドウのサイズを変更する。このようにすることで、中継ノード３０における不要なパケットロスを軽減することができる。
【００８３】
ここでは、中継ノード３０が切替予測時間を通知する例を説明したが、これに限定されるものではない。例えば、中継ノード３０は、経路切替が完了した後に、往復遅延時間をＴＣＰノード１０に通知してもよい。この場合、中継ノード３０は、図１５に示した「ＳＷ  Ｄｅｌｙ」を「０」にした切替通知パケットを送信すればよい。このようにすることで、中継ノード３０は、経路切替が発生したことおよび往復遅延時間の差を、遅滞なくＴＣＰノード１０に送信することができる。
【実施例５】
【００８４】
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下に異なる実施例を説明する。
【００８５】
（帯域）
実施例１から４では、往復遅延時間の差を用いて輻輳前の輻輳ウィンドウサイズを補正する例を説明したが、これに限定されるものではなく、帯域を用いることもできる。例えば、図１６は、帯域を通知するオプションの例を示す図である。中継ノードは、図１６に示すように、帯域を通知することを示す「Kind」に１２を設定し、オプション長を示す「Length」に４を設定し、経路切替後の帯域を示す「Bandwidth」を代入したOptionフィールドを生成する。そして、中継ノードは、図１６に示したOptionフィールドを有する経路切替パケットをＴＣＰノード１０に送信する。
【００８６】
ＴＣＰノード１０は、中継ノードから受信した経路切替パケットのOptionフィールドから「Bandwidth」に設定される「ＢＷ１」を読み出す。そして、ＴＣＰノード１０は、事前に保持していた経路切替前の帯域「ＢＷ０」と輻輳検知前のウィンドウサイズ「ｃｗｎｄ´」を用いて、「ｃｗｎｄ´´＝ｃｗｎｄ´×ＢＷ１／ＢＷ０」を算出する。その後、ＴＣＰノード１０は、現在の輻輳ウィンドウサイズ「ｃｗｎｄ」と上記算出した「ｃｗｎｄ´´」のうち、大きい方を用いてデータ送信を実行する。このように、往復遅延時間以外にも切替前後の帯域の変化に応じて、適切な輻輳ウィンドウサイズに補正することができる。例えば、帯域１０Ｇｂｐｓのネットワークの場合、半減した輻輳ウィンドウサイズが開ききるまでに数時間かかることがあるが、これを数秒のオーダーにまで短縮できる。
【００８７】
（補正抑止）
実施例１−４では、中継ノードから経路切替が通知された場合に、輻輳ウィンドウのサイズを補正する例について説明したが、中継ノードは、輻輳によるキュー遅延が発生している場合には、ＴＣＰノードに補正を抑止するように指示してもよい。
【００８８】
例えば、ＴＣＰノードは、中継ノードから受信した経路切替パケットに基づいて、輻輳ウィンドウのサイズの補正処理を開始する。その後、中継ノードが、ＴＣＰノードに対して、補正を抑止させるパケットを送信する。ＴＣＰノードは、このパケットを受信すると、補正処理を抑止し、保持していた輻輳前のウィンドウサイズを破棄する。
【００８９】
ここで、補正を抑止させるパケットについて説明する。図１７は、補正を抑止させるパケットの例を示す図である。図１７は、ＩＰパケットのＩＰヘッダを示している。ここで示されるVersionは、ＩＰのバージョンを示す情報であり、IHLは、ＩＰヘッダの長さを示す情報である。Type  of  Serviceは、優先度を示す情報であり、Total  Lengthは、ＩＰパケットの長さを示す情報である。Identificationは、パケットを識別する識別子であり、Flagsは、パケット分割に関する情報を表すフラグであり、Fragment  Offsetは、分割後のデータが元のデータのどの位置にあったかを表す情報である。
【００９０】
Time  to  Liveは、このパケットがネットワークに生存してもよい時間を示す情報であり、Header  Checksumは、ＩＰヘッダが壊れていないかを確認するための符号を示す情報である。Source  Addressは、送信元ＩＰアドレスであり、Destination  Addressは、宛先ＩＰアドレスである。
【００９１】
このようなＩＰヘッダに対して、中継ノードは、輻輳によるキュー遅延が発生している場合、ＴＯＳフィールドのＥＣＮを１１にセットして輻輳を通知する。このようすることで、ＴＣＰノードは、キュー遅延が発生していることを検知できるので、補正による輻輳制御を抑止し、通常の輻輳制御による輻輳回避を実行することができる。
【００９２】
（実施例の組み合わせ）
上述した実施例は、任意に組み合わせることができる。例えば、ＴＣＰノードは、中継ノードから帯域と切替予測時間とを受信し、切替予測時間経過後に、通知された帯域で補正した輻輳ウィンドウサイズに変更することもできる。また、ＴＣＰノードは、中継ノードから切替予測時間を受信すると、往復遅延時間を測定する。そして、ＴＣＰノードは、切替予測時間経過後に、測定した往復遅延時間で補正した輻輳ウィンドウサイズに変更することもできる。
【００９３】
（システム）
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともできる。あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【００９４】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られない。つまり、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【符号の説明】
【００９５】
１０、７０  ＴＣＰノード
１１  ＩＰ処理部
１２  ＴＣＰ受信処理部
１３  ＡＣＫ受信部
１４  ＴＣＰセグメント送信部
１４ａ  送信制御部
１４ｂ  再送制御部
１５  ＴＣＰ送信処理部
１５ａ  輻輳検知部
１５ｂ  切替検知部
１５ｃ  補正部
１５ｄ  ウィンドウ制御部
１６  記憶部
３０、５０  中継ノード
３０ａ  記憶部
３１  送信部
３２、３３  受信処理部
３４、３５  送信処理部
３６、３８  スイッチ
３７  転送処理部
３９  障害検知部
４０  切替通知処理部
【図１】
0005867188.tif 000002
【図２】
0005867188.tif 000003
【図３】
0005867188.tif 000004
【図４】
0005867188.tif 000005
【図５】
0005867188.tif 000006
【図６】
0005867188.tif 000007
【図７】
0005867188.tif 000008
【図８】
0005867188.tif 000009
【図９】
0005867188.tif 000010
【図１０】
0005867188.tif 000011
【図１１】
0005867188.tif 000012
【図１２】
0005867188.tif 000013
【図１３】
0005867188.tif 000014
【図１４】
0005867188.tif 000015
【図１５】
0005867188.tif 000016
【図１６】
0005867188.tif 000017
【図１７】
0005867188.tif 000018