以下に、本発明の実施の形態について図面を参照して説明する。
図1は、本発明の通信装置の実施の一形態を示す図である。
本形態は図1に示すように、通信装置1−1,1−2と、メイン経路2と、迂回経路3と、通信端末4−1,4−2とから構成されている。
通信装置1−1,1−2は、通信端末4−1と通信端末4−2との間において送受信されるデータが通過する通信経路を選択する。
メイン経路2は、通信装置1−1と通信装置1−2とを接続し、通信端末4−1と通信端末4−2との間において送受信されるデータが通過する通常設定される第1の通信経路である。
迂回経路3は、通信装置1−1と通信装置1−2とを接続し、通信端末4−1と通信端末4−2との間において送受信されるデータが通過する経路の1つである。また、迂回経路3は、メイン経路2に障害が発生した場合に選択される第2の通信経路である。
通信端末4−1,4−2は、通信装置1−1,1−2のそれぞれ接続された端末である。
さらに、通信装置1−1には、経路状態確認部11と、状態算出部12と、経路選択部13と、正常カウンタ14と、異常カウンタ15とが設けられている。
経路状態確認部11は、メイン経路2の状態を確認する。確認方法としては、通信装置1−2へ経路確認要求信号を送信し、送信した経路確認要求信号に対する応答信号が受信されるかどうかに基づいて、メイン経路2に障害が発生しているかどうかを確認するものが一般的な方法である。本形態においては、この経路確認要求信号として、ICMP(Internet Control Message Protocol)のICMP ECHO_REQUESTを用いて、応答信号としてICMP ECHO_REPLYが用いるものを例に挙げて説明する。
状態算出部12は、経路状態確認部11にて確認されたメイン経路2の状態に基づいて、通信経路の切り替え/切り戻しを判断し、判断した結果を経路選択部13へ指示する。ここで、通信経路の切り替えとは、通信経路をメイン経路2から迂回経路3へ変更することを示す。また、通信経路の切り戻しとは、通信経路を迂回経路3からメイン経路2へ変更することを示す。また、状態算出部12は、経路状態確認部11が送信した経路確認要求信号に対して応答信号を受信しなかった後、経路確認要求信号に対して応答信号を受信した場合、異常カウンタ15の初期値を算出するためのマージン値を現在のマージン値と現在の異常カウンタ15の値とに基づいて算出する。ここで、マージン値とは、異常カウンタ15の初期値を補正する補正値である。また、状態算出部12は、経路状態確認部11が送信した経路確認要求信号に対して応答信号を受信した後、経路確認要求信号に対して応答信号を受信しなかった場合、算出されたマージン値に基づいて異常カウンタ15の初期値を算出する。また、状態算出部12は、初期値の算出後、異常カウンタ15に算出した初期値からカウントさせる。また、状態算出部12は、異常カウンタ15の値があらかじめ設定された閾値とを比較し、異常カウンタ15の値があらかじめ設定された閾値以上となった場合、経路選択部13へ通信経路の切り替えを指示する。
経路選択部13は、状態算出部12からの指示に基づいて、経路の切り替え/切り戻しを行う。
正常カウンタ14は、経路状態確認部11が送信した経路確認要求信号に対する応答信号を受信した連続回数(第2の回数)をカウントする。つまり、経路状態確認部11が送信した経路確認要求信号に対する応答信号を受信しない状態の後、経路状態確認部11が送信した経路確認要求信号に対する応答信号を受信した場合、次に経路確認要求信号に対する応答信号を受信しなくなるまでの間に、経路状態確認部11が送信した経路確認要求信号に対する応答信号の受信回数をカウントする。また、正常カウンタ14は、カウントした回数であるカウント値を状態算出部12へ通知する。
異常カウンタ15は、経路状態確認部11が送信した経路確認要求信号に対する応答信号を受信しなかった連続回数(第1の回数)をカウントする。つまり、経路状態確認部11が送信した経路確認要求信号に対する応答信号を受信した後、経路状態確認部11が送信した経路確認要求信号に対する応答信号を受信しなかった場合、次に経路確認要求信号に対する応答信号を受信するまでの間に、経路状態確認部11が送信した経路確認要求信号の送信回数をカウントする。また、異常カウンタ15は、カウントした回数であるカウント値を状態算出部12へ通知する。
なお、通信装置1−2は、通信装置1−1と同じ構成を有する。
以下に、図1に示した形態における経路選択方法について説明する。
図2は、図1に示した形態において、経路確認要求信号に対する応答信号が受信されなかった場合の経路選択方法を説明するためのフローチャートである。
経路状態確認部11から送信されたICMP ECHO_REQUESTに対して、応答が無い、つまりICMP ECHO_REPLYが経路状態確認部11にて受信されないと判断されると(ステップS20)、状態算出部12によって異常カウンタ15の初期値が設定される(ステップS21)。
ここで、ステップS20の判断は、ICMP ECHO_REQUESTを送信する際に起動するタイマーを用いて行うものであっても良い。このタイマーは通信装置1−1に設けられているものであり、ICMP ECHO_REPLYを受信した際にリセットされるものである。また、ICMP ECHO_REQUESTを送信したにもかかわらずICMP ECHO_REPLYを受信しない場合、所定の時間が経過した時点で「ICMP ECHO_REPLYが受信されない」と判断するものである。
ここで、ステップS21の処理について具体的に説明する。
ステップS20にてICMP ECHO_REPLYが経路状態確認部11にて受信されないと判断されると、現在選択している通信経路がメイン経路2であるかどうかが経路選択部13にて判断される(ステップS211)。
現在選択している通信経路がメイン経路2であると判断されると、異常カウンタ15の値が「0」であるかどうかが状態算出部12によって判断される(ステップS212)。
異常カウンタ15の値が「0」であると判断された場合、正常カウンタ14の値が「(マージン値)+1」よりも小さいかどうかが状態算出部12によって判断される(ステップS213)。この「マージン値」は、異常カウンタ15の初期値を算出するためのものであり、その設定方法は後述する。
正常カウンタ14の値が「(マージン値)+1」よりも小さいと判断された場合、状態算出部12によって異常カウンタ15の値が「(マージン値)+1−(正常カウンタ14の値)」に設定される(ステップS214)。この値が異常カウンタ15の初期値となる。
その後、状態算出部12によって正常カウンタ14の値が「0」にリセットされる(ステップS22)。また、ステップS211にて「No」の場合、あるいはステップS212にて「No」の場合、あるいはステップS213にて「No」の場合、ステップS22の処理が行われる。
また、状態算出部12によって異常カウンタ15の値が1つインクリメント(カウント)される(ステップS23)。
すると、異常カウンタ15の値があらかじめ設定されている切り替え閾値以上かどうかが状態算出部12によって判断される(ステップS24)。
異常カウンタ15の値が切り替え閾値以上であると判断された場合、状態算出部12から経路選択部13へ、通信経路をメイン経路2から迂回経路3へ切り替える指示が行われる。そして、通信経路をメイン経路2から迂回経路3へ切り替えるように指示された経路選択部13にて、通信経路がメイン経路2から迂回経路3へ切り替えられる(ステップS25)。
ここで、一点鎖線で囲ったステップS21の処理が、一般的な技術にはない処理である。
図3は、図1に示した形態において、経路確認要求信号に対する応答信号が受信された場合の経路選択方法を説明するためのフローチャートである。
経路状態確認部11から送信されたICMP ECHO_REQUESTに対して、応答がある、つまりICMP ECHO_REPLYが経路状態確認部11にて受信されると(ステップS30)、正常カウンタ14の値が1つインクリメント(カウント)される(ステップS31)。
その後、異常カウンタ15の値が「0」であるかどうかが状態算出部12によって判断される(ステップS321)。
異常カウンタ15の値が「0」ではないと判断された場合、異常カウンタ15の値があらかじめ設定されている切り替え閾値以上かどうかが状態算出部12にて判断される(ステップS322)。
異常カウンタ15の値が切り替え閾値以上であると判断された場合、状態算出部12によってマージン値が「0」にリセットされる(ステップS323)。このマージン値は、上述した異常カウンタ15の初期値の設定に用いられるものである。
一方、ステップS322にて異常カウンタ15の値が切り替え閾値以上ではないと判断された場合、マージン値が現在のマージン値と現在の異常カウンタ15の値とに基づいて状態算出部12によって算出(更新)される(ステップS324)。具体的な算出方法は、「(マージン値)=((現在のマージン値)+(異常カウンタ15の値))÷2」である。なお、ここで端数は切り上げられる。
その後、状態算出部12によって、異常カウンタ15の値が「0」にリセットされる(ステップS33)。
そして、正常カウンタ14の値があらかじめ設定された切り戻し閾値とマージン値とを加算した値以上かどうかが状態算出部12によって判断される(ステップS34)。
また、ステップS321にて異常カウンタ15の値が「0」であると判断された場合も、ステップS34の処理が行われる。
ステップS34にて正常カウンタ14の値が切り戻し閾値とマージン値とを加算した値以上であると判断された場合、状態算出部12によってマージン値が「0」にリセットされる(ステップS35)。そして、状態算出部12から経路選択部13へ通信経路の切り戻しの指示が通知され、経路選択部13によって通信経路が迂回経路3からメイン経路2へ切り戻される(ステップS36)。
ここで、一点鎖線で囲ったステップS32の処理が、一般的な技術にはない処理である。
以下に、2つの具体例を用いて経路選択方法について説明する。
この具体例は、切り戻し閾値が「5」、切り替え閾値が「10」、正常カウンタ14の値が「100」、異常カウンタ15の値が「0」、マージン値が「0」であり、メイン経路2の使用の状態から、ICMP ECHO_REPLYが2回連続して受信されず(以下、受信失敗と称する)、続いてICMP ECHO_REPLYが2回連続して受信される(以下、受信成功と称する)状態が繰り返される場合を例に挙げる。
また、受信失敗では図2に示したフローチャートを用いて説明した処理が行われ、受信成功では図3に示したフローチャートを用いて説明した処理が行われる。
図4は、図1に示した形態におけるそれぞれの値の状態遷移を示す図である。
まず、1サイクル目の1回目では、受信が失敗する。
ここでは、上述した状態でステップS20にて応答無しのため、ステップS211にて現在の選択経路がメイン経路2であり、ステップS212にて異常カウンタ15の値が「0」であると判断される。
そして、ステップS213にて正常カウンタ14の値「100」が「(マージン値=0)+1」よりも小さくはないため、ステップS22にて正常カウンタ14がリセットされ(正常カウンタ14の値が「0」に設定され)、ステップS23にて異常カウンタ15の値が「+1」カウントされる。この状態で、正常カウンタ14の値は「0」であり、また異常カウンタ15の値は「1」である。また、マージン値は「0」である。
そして、ステップS24にて異常カウンタ15の値「1」が切り替え閾値「10」以上ではないため、迂回経路3への切り替えは行われない。
続いて、1サイクル目の2回目では、受信が失敗する。
ステップS20にて応答無し、ステップS211にて現在の選択経路がメイン経路2であり、ステップS212にて異常カウンタ15の値が「0」ではないと判断される。
すると、ステップS22にて正常カウンタ14がリセットされ(正常カウンタ14の値が「0」に設定され)、ステップS23にて異常カウンタ15の値が「+1」カウントされる。この状態で、正常カウンタ14の値は「0」であり、また異常カウンタ15の値は「2」である。また、マージン値は「0」である。
そして、ステップS24にて異常カウンタ15の値「2」が切り替え閾値「10」以上ではないため、迂回経路3への切り替えは行われない。
続いて、1サイクル目の3回目では、受信が成功する。
受信が成功したため、ステップS30にて応答ありとなり、ステップS31にて正常カウンタ14の値が「+1」カウントされ、「1」となる。
ステップS321にて異常カウンタ15の値が「0」ではないため、ステップS322にて異常カウンタ15の値が切り替え閾値以上かどうかが判断される。ここでは、異常カウンタ15の値「2」が切り替え閾値「10」以上ではないため、ステップS324にて現在のマージン値「0」と現在の異常カウンタ15の値「2」とを足した値を2で割った数値「1」がマージン値となる。
その後、ステップS33にて異常カウンタ15がリセットされる(異常カウンタ15の値が「0」に設定される)。
ステップS34にて正常カウンタ14の値「1」が、切り戻し閾値「5」とマージン値「1」とを足した値以上ではないため、切り替えは行われない。
この状態で、正常カウンタ14の値は「1」であり、また異常カウンタ15の値は「0」である。また、マージン値は「1」である。
続いて、1サイクル目の4回目では、受信が成功する。
受信が成功したため、ステップS30にて応答ありとなり、ステップS31にて正常カウンタ14の値が「+1」カウントされ、「2」となる。
ステップS321にて異常カウンタ15の値が「0」であり、ステップS34にて正常カウンタ14の値「2」が、切り戻し閾値「5」とマージン値「1」とを足した値以上ではないため、切り替えは行われない。
この状態で、正常カウンタ14の値は「2」であり、また異常カウンタ15の値は「0」である。また、マージン値は「1」である。
続いて、2サイクル目の1回目では、受信が失敗する。
ここでは、上述した状態でステップS20にて応答無しのため、ステップS211にて現在の選択経路がメイン経路2であり、ステップS212にて異常カウンタ15の値が「0」であると判断される。
そして、ステップS213にて正常カウンタ14の値「2」が「(マージン値=1)+1」よりも小さくはないため、ステップS22にて正常カウンタ14がリセットされ(正常カウンタ14の値が「0」に設定され)、ステップS23にて異常カウンタ15の値が「+1」カウントされる。この状態で、正常カウンタ14の値は「0」であり、また異常カウンタ15の値は「1」である。また、マージン値は「1」である。
そして、ステップS24にて異常カウンタ15の値「1」が切り替え閾値「10」以上ではないため、迂回経路3への切り替えは行われない。
続いて、2サイクル目の2回目では、受信が失敗する。
ステップS20にて応答無し、ステップS211にて現在の選択経路がメイン経路2であり、ステップS212にて異常カウンタ15の値が「0」ではないと判断される。
すると、ステップS22にて正常カウンタ14がリセットされ(正常カウンタ14の値が「0」に設定され)、ステップS23にて異常カウンタ15の値が「+1」カウントされる。この状態で、正常カウンタ14の値は「0」であり、また異常カウンタ15の値は「2」である。また、マージン値は「1」である。
そして、ステップS24にて異常カウンタ15の値「2」が切り替え閾値「10」以上ではないため、迂回経路3への切り替えは行われない。
続いて、2サイクル目の3回目では、受信が成功する。
受信が成功したため、ステップS30にて応答ありとなり、ステップS31にて正常カウンタ14の値が「+1」カウントされ、「1」となる。
ステップS321にて異常カウンタ15の値が「0」ではないため、ステップS322にて異常カウンタ15の値が切り替え閾値以上かどうかが判断される。ここでは、異常カウンタ15の値「2」が切り替え閾値「10」以上ではないため、ステップS324にて現在のマージン値「1」と現在の異常カウンタ15の値「2」とを足した値を2で割った数値「2(端数切り上げ)」がマージン値となる。
その後、ステップS33にて異常カウンタ15がリセットされる(異常カウンタ15の値が「0」に設定される)。
ステップS34にて正常カウンタ14の値「1」が、切り戻し閾値「5」とマージン値「2」とを足した値以上ではないため、切り替えは行われない。
この状態で、正常カウンタ14の値は「1」であり、また異常カウンタ15の値は「0」である。また、マージン値は「2」である。
続いて、2サイクル目の4回目では、受信が成功する。
受信が成功したため、ステップS30にて応答ありとなり、ステップS31にて正常カウンタ14の値が「+1」カウントされ、「2」となる。
ステップS321にて異常カウンタ15の値が「0」であり、ステップS34にて正常カウンタ14の値「2」が、切り戻し閾値「5」とマージン値「1」とを足した値以上ではないため、切り替えは行われない。
この状態で、正常カウンタ14の値は「2」であり、また異常カウンタ15の値は「0」である。また、マージン値は「2」である。
続いて、3サイクル目の1回目では、受信が失敗する。
ここでは、上述した状態でステップS20にて応答無しのため、ステップS211にて現在の選択経路がメイン経路2であり、ステップS212にて異常カウンタ15の値が「0」であると判断される。
そして、ステップS213にて正常カウンタ14の値「2」が「(マージン値=2)+1」よりも小さいため、ステップS214にて、異常カウンタ15の値が「(マージン値=2)+1−(正常カウンタ14の値=2)」となる「1」に設定される。
すると、ステップS22にて正常カウンタ14がリセットされ(正常カウンタ14の値が「0」に設定され)、ステップS23にて異常カウンタ15の値が「+1」カウントされる。この状態で、正常カウンタ14の値は「0」であり、また異常カウンタ15の値は「2」である。また、マージン値は「2」である。
そして、ステップS24にて異常カウンタ15の値「2」が切り替え閾値「10」以上ではないため、迂回経路3への切り替えは行われない。
続いて、3サイクル目の2回目では、受信が失敗する。
ステップS20にて応答無し、ステップS211にて現在の選択経路がメイン経路2であり、ステップS212にて異常カウンタ15の値が「0」ではないと判断される。
すると、ステップS22にて正常カウンタ14がリセットされ(正常カウンタ14の値が「0」に設定され)、ステップS23にて異常カウンタ15の値が「+1」カウントされる。この状態で、正常カウンタ14の値は「0」であり、また異常カウンタ15の値は「3」である。また、マージン値は「2」である。
そして、ステップS24にて異常カウンタ15の値「3」が切り替え閾値「10」以上ではないため、迂回経路3への切り替えは行われない。
続いて、3サイクル目の3回目では、受信が成功する。
受信が成功したため、ステップS30にて応答ありとなり、ステップS31にて正常カウンタ14の値が「+1」カウントされ、「1」となる。
ステップS321にて異常カウンタ15の値が「0」ではないため、ステップS322にて異常カウンタ15の値が切り替え閾値以上かどうかが判断される。ここでは、異常カウンタ15の値「3」が切り替え閾値「10」以上ではないため、ステップS324にて現在のマージン値「2」と現在の異常カウンタ15の値「3」とを足した値を2で割った数値「3(端数切り上げ)」がマージン値となる。
その後、ステップS33にて異常カウンタ15がリセットされる(異常カウンタ15の値が「0」に設定される)。
ステップS34にて正常カウンタ14の値「1」が、切り戻し閾値「5」とマージン値「3」とを足した値以上ではないため、切り替えは行われない。
この状態で、正常カウンタ14の値は「1」であり、また異常カウンタ15の値は「0」である。また、マージン値は「3」である。
続いて、3サイクル目の4回目では、受信が成功する。
受信が成功したため、ステップS30にて応答ありとなり、ステップS31にて正常カウンタ14の値が「+1」カウントされ、「2」となる。
ステップS321にて異常カウンタ15の値が「0」であり、ステップS34にて正常カウンタ14の値「2」が、切り戻し閾値「5」とマージン値「3」とを足した値以上ではないため、切り替えは行われない。
この状態で、正常カウンタ14の値は「2」であり、また異常カウンタ15の値は「0」である。また、マージン値は「3」である。
続いて、4サイクル目の1回目では、受信が失敗する。
ここでは、上述した状態でステップS20にて応答無しのため、ステップS211にて現在の選択経路がメイン経路2であり、ステップS212にて異常カウンタ15の値が「0」であると判断される。
そして、ステップS213にて正常カウンタ14の値「2」が「(マージン値=3)+1」よりも小さいため、ステップS214にて、異常カウンタ15の値が「(マージン値=3)+1−(正常カウンタ14の値=2)」となる「2」に設定される。
すると、ステップS22にて正常カウンタ14がリセットされ(正常カウンタ14の値が「0」に設定され)、ステップS23にて異常カウンタ15の値が「+1」カウントされる。この状態で、正常カウンタ14の値は「0」であり、また異常カウンタ15の値は「3」である。また、マージン値は「3」である。
そして、ステップS24にて異常カウンタ15の値「3」が切り替え閾値「10」以上ではないため、迂回経路3への切り替えは行われない。
続いて、4サイクル目の2回目では、受信が失敗する。
ステップS20にて応答無し、ステップS211にて現在の選択経路がメイン経路2であり、ステップS212にて異常カウンタ15の値が「0」ではないと判断される。
すると、ステップS22にて正常カウンタ14がリセットされ(正常カウンタ14の値が「0」に設定され)、ステップS23にて異常カウンタ15の値が「+1」カウントされる。この状態で、正常カウンタ14の値は「0」であり、また異常カウンタ15の値は「4」である。また、マージン値は「3」である。
そして、ステップS24にて異常カウンタ15の値「4」が切り替え閾値「10」以上ではないため、迂回経路3への切り替えは行われない。
続いて、4サイクル目の3回目では、受信が成功する。
受信が成功したため、ステップS30にて応答ありとなり、ステップS31にて正常カウンタ14の値が「+1」カウントされ、「1」となる。
ステップS321にて異常カウンタ15の値が「0」ではないため、ステップS322にて異常カウンタ15の値が切り替え閾値以上かどうかが判断される。ここでは、異常カウンタ15の値「4」が切り替え閾値「10」以上ではないため、ステップS324にて現在のマージン値「3」と現在の異常カウンタ15の値「4」とを足した値を2で割った数値「4(端数切り上げ)」がマージン値となる。
その後、ステップS33にて異常カウンタ15がリセットされる(異常カウンタ15の値が「0」に設定される)。
ステップS34にて正常カウンタ14の値「1」が、切り戻し閾値「5」とマージン値「4」とを足した値以上ではないため、切り替えは行われない。
この状態で、正常カウンタ14の値は「1」であり、また異常カウンタ15の値は「0」である。また、マージン値は「4」である。
続いて、4サイクル目の4回目では、受信が成功する。
受信が成功したため、ステップS30にて応答ありとなり、ステップS31にて正常カウンタ14の値が「+1」カウントされ、「2」となる。
ステップS321にて異常カウンタ15の値が「0」であり、ステップS34にて正常カウンタ14の値「2」が、切り戻し閾値「5」とマージン値「4」とを足した値以上ではないため、切り替えは行われない。
この状態で、正常カウンタ14の値は「2」であり、また異常カウンタ15の値は「0」である。また、マージン値は「4」である。
続いて、5サイクル目の1回目では、受信が失敗する。
ここでは、上述した状態でステップS20にて応答無しのため、ステップS211にて現在の選択経路がメイン経路2であり、ステップS212にて異常カウンタ15の値が「0」であると判断される。
そして、ステップS213にて正常カウンタ14の値「2」が「(マージン値=4)+1」よりも小さいため、ステップS214にて、異常カウンタ15の値が「(マージン値=4)+1−(正常カウンタ14の値=2)」となる「3」に設定される。
すると、ステップS22にて正常カウンタ14がリセットされ(正常カウンタ14の値が「0」に設定され)、ステップS23にて異常カウンタ15の値が「+1」カウントされる。この状態で、正常カウンタ14の値は「0」であり、また異常カウンタ15の値は「4」である。また、マージン値は「4」である。
そして、ステップS24にて異常カウンタ15の値「4」が切り替え閾値「10」以上ではないため、迂回経路3への切り替えは行われない。
続いて、5サイクル目の2回目では、受信が失敗する。
ステップS20にて応答無し、ステップS211にて現在の選択経路がメイン経路2であり、ステップS212にて異常カウンタ15の値が「0」ではないと判断される。
すると、ステップS22にて正常カウンタ14がリセットされ(正常カウンタ14の値が「0」に設定され)、ステップS23にて異常カウンタ15の値が「+1」カウントされる。この状態で、正常カウンタ14の値は「0」であり、また異常カウンタ15の値は「5」である。また、マージン値は「4」である。
そして、ステップS24にて異常カウンタ15の値「5」が切り替え閾値「10」以上ではないため、迂回経路3への切り替えは行われない。
続いて、5サイクル目の3回目では、受信が成功する。
受信が成功したため、ステップS30にて応答ありとなり、ステップS31にて正常カウンタ14の値が「+1」カウントされ、「1」となる。
ステップS321にて異常カウンタ15の値が「0」ではないため、ステップS322にて異常カウンタ15の値が切り替え閾値以上かどうかが判断される。ここでは、異常カウンタ15の値「5」が切り替え閾値「10」以上ではないため、ステップS324にて現在のマージン値「4」と現在の異常カウンタ15の値「5」とを足した値を2で割った数値「5(端数切り上げ)」がマージン値となる。
その後、ステップS33にて異常カウンタ15がリセットされる(異常カウンタ15の値が「0」に設定される)。
ステップS34にて正常カウンタ14の値「1」が、切り戻し閾値「5」とマージン値「5」とを足した値以上ではないため、切り替えは行われない。
この状態で、正常カウンタ14の値は「1」であり、また異常カウンタ15の値は「0」である。また、マージン値は「5」である。
続いて、5サイクル目の4回目では、受信が成功する。
受信が成功したため、ステップS30にて応答ありとなり、ステップS31にて正常カウンタ14の値が「+1」カウントされ、「2」となる。
ステップS321にて異常カウンタ15の値が「0」であり、ステップS34にて正常カウンタ14の値「2」が、切り戻し閾値「5」とマージン値「5」とを足した値以上ではないため、切り替えは行われない。
この状態で、正常カウンタ14の値は「2」であり、また異常カウンタ15の値は「0」である。また、マージン値は「5」である。
続いて、6サイクル目の1回目では、受信が失敗する。
ここでは、上述した状態でステップS20にて応答無しのため、ステップS211にて現在の選択経路がメイン経路2であり、ステップS212にて異常カウンタ15の値が「0」であると判断される。
そして、ステップS213にて正常カウンタ14の値「2」が「(マージン値=5)+1」よりも小さいため、ステップS214にて、異常カウンタ15の値が「(マージン値=5)+1−(正常カウンタ14の値=2)」となる「4」に設定される。
すると、ステップS22にて正常カウンタ14がリセットされ(正常カウンタ14の値が「0」に設定され)、ステップS23にて異常カウンタ15の値が「+1」カウントされる。この状態で、正常カウンタ14の値は「0」であり、また異常カウンタ15の値は「5」である。また、マージン値は「5」である。
そして、ステップS24にて異常カウンタ15の値「5」が切り替え閾値「10」以上ではないため、迂回経路3への切り替えは行われない。
続いて、6サイクル目の2回目では、受信が失敗する。
ステップS20にて応答無し、ステップS211にて現在の選択経路がメイン経路2であり、ステップS212にて異常カウンタ15の値が「0」ではないと判断される。
すると、ステップS22にて正常カウンタ14がリセットされ(正常カウンタ14の値が「0」に設定され)、ステップS23にて異常カウンタ15の値が「+1」カウントされる。この状態で、正常カウンタ14の値は「0」であり、また異常カウンタ15の値は「6」である。また、マージン値は「5」である。
そして、ステップS24にて異常カウンタ15の値「6」が切り替え閾値「10」以上ではないため、迂回経路3への切り替えは行われない。
続いて、6サイクル目の3回目では、受信が成功する。
受信が成功したため、ステップS30にて応答ありとなり、ステップS31にて正常カウンタ14の値が「+1」カウントされ、「1」となる。
ステップS321にて異常カウンタ15の値が「0」ではないため、ステップS322にて異常カウンタ15の値が切り替え閾値以上かどうかが判断される。ここでは、異常カウンタ15の値「6」が切り替え閾値「10」以上ではないため、ステップS324にて現在のマージン値「5」と現在の異常カウンタ15の値「6」とを足した値を2で割った数値「6(端数切り上げ)」がマージン値となる。
その後、ステップS33にて異常カウンタ15がリセットされる(異常カウンタ15の値が「0」に設定される)。
ステップS34にて正常カウンタ14の値「1」が、切り戻し閾値「5」とマージン値「6」とを足した値以上ではないため、切り替えは行われない。
この状態で、正常カウンタ14の値は「1」であり、また異常カウンタ15の値は「0」である。また、マージン値は「6」である。
続いて、6サイクル目の4回目では、受信が成功する。
受信が成功したため、ステップS30にて応答ありとなり、ステップS31にて正常カウンタ14の値が「+1」カウントされ、「2」となる。
ステップS321にて異常カウンタ15の値が「0」であり、ステップS34にて正常カウンタ14の値「2」が、切り戻し閾値「5」とマージン値「6」とを足した値以上ではないため、切り替えは行われない。
この状態で、正常カウンタ14の値は「2」であり、また異常カウンタ15の値は「0」である。また、マージン値は「6」である。
続いて、7サイクル目の1回目では、受信が失敗する。
ここでは、上述した状態でステップS20にて応答無しのため、ステップS211にて現在の選択経路がメイン経路2であり、ステップS212にて異常カウンタ15の値が「0」であると判断される。
そして、ステップS213にて正常カウンタ14の値「2」が「(マージン値=6)+1」よりも小さいため、ステップS214にて、異常カウンタ15の値が「(マージン値=6)+1−(正常カウンタ14の値=2)」となる「5」に設定される。
すると、ステップS22にて正常カウンタ14がリセットされ(正常カウンタ14の値が「0」に設定され)、ステップS23にて異常カウンタ15の値が「+1」カウントされる。この状態で、正常カウンタ14の値は「0」であり、また異常カウンタ15の値は「6」である。また、マージン値は「6」である。
そして、ステップS24にて異常カウンタ15の値「6」が切り替え閾値「10」以上ではないため、迂回経路3への切り替えは行われない。
続いて、7サイクル目の2回目では、受信が失敗する。
ステップS20にて応答無し、ステップS211にて現在の選択経路がメイン経路2であり、ステップS212にて異常カウンタ15の値が「0」ではないと判断される。
すると、ステップS22にて正常カウンタ14がリセットされ(正常カウンタ14の値が「0」に設定され)、ステップS23にて異常カウンタ15の値が「+1」カウントされる。この状態で、正常カウンタ14の値は「0」であり、また異常カウンタ15の値は「7」である。また、マージン値は「6」である。
そして、ステップS24にて異常カウンタ15の値「7」が切り替え閾値「10」以上ではないため、迂回経路3への切り替えは行われない。
続いて、7サイクル目の3回目では、受信が成功する。
受信が成功したため、ステップS30にて応答ありとなり、ステップS31にて正常カウンタ14の値が「+1」カウントされ、「1」となる。
ステップS321にて異常カウンタ15の値が「0」ではないため、ステップS322にて異常カウンタ15の値が切り替え閾値以上かどうかが判断される。ここでは、異常カウンタ15の値「7」が切り替え閾値「10」以上ではないため、ステップS324にて現在のマージン値「6」と現在の異常カウンタ15の値「7」とを足した値を2で割った数値「7(端数切り上げ)」がマージン値となる。
その後、ステップS33にて異常カウンタ15がリセットされる(異常カウンタ15の値が「0」に設定される)。
ステップS34にて正常カウンタ14の値「1」が、切り戻し閾値「5」とマージン値「7」とを足した値以上ではないため、切り替えは行われない。
この状態で、正常カウンタ14の値は「1」であり、また異常カウンタ15の値は「0」である。また、マージン値は「7」である。
続いて、7サイクル目の4回目では、受信が成功する。
受信が成功したため、ステップS30にて応答ありとなり、ステップS31にて正常カウンタ14の値が「+1」カウントされ、「2」となる。
ステップS321にて異常カウンタ15の値が「0」であり、ステップS34にて正常カウンタ14の値「2」が、切り戻し閾値「5」とマージン値「7」とを足した値以上ではないため、切り替えは行われない。
この状態で、正常カウンタ14の値は「2」であり、また異常カウンタ15の値は「0」である。また、マージン値は「7」である。
続いて、8サイクル目の1回目では、受信が失敗する。
ここでは、上述した状態でステップS20にて応答無しのため、ステップS211にて現在の選択経路がメイン経路2であり、ステップS212にて異常カウンタ15の値が「0」であると判断される。
そして、ステップS213にて正常カウンタ14の値「2」が「(マージン値=7)+1」よりも小さいため、ステップS214にて、異常カウンタ15の値が「(マージン値=7)+1−(正常カウンタ14の値=2)」となる「6」に設定される。
すると、ステップS22にて正常カウンタ14がリセットされ(正常カウンタ14の値が「0」に設定され)、ステップS23にて異常カウンタ15の値が「+1」カウントされる。この状態で、正常カウンタ14の値は「0」であり、また異常カウンタ15の値は「7」である。また、マージン値は「7」である。
そして、ステップS24にて異常カウンタ15の値「7」が切り替え閾値「10」以上ではないため、迂回経路3への切り替えは行われない。
続いて、8サイクル目の2回目では、受信が失敗する。
ステップS20にて応答無し、ステップS211にて現在の選択経路がメイン経路2であり、ステップS212にて異常カウンタ15の値が「0」ではないと判断される。
すると、ステップS22にて正常カウンタ14がリセットされ(正常カウンタ14の値が「0」に設定され)、ステップS23にて異常カウンタ15の値が「+1」カウントされる。この状態で、正常カウンタ14の値は「0」であり、また異常カウンタ15の値は「8」である。また、マージン値は「7」である。
そして、ステップS24にて異常カウンタ15の値「7」が切り替え閾値「10」以上ではないため、迂回経路3への切り替えは行われない。
続いて、8サイクル目の3回目では、受信が成功する。
受信が成功したため、ステップS30にて応答ありとなり、ステップS31にて正常カウンタ14の値が「+1」カウントされ、「1」となる。
ステップS321にて異常カウンタ15の値が「0」ではないため、ステップS322にて異常カウンタ15の値が切り替え閾値以上かどうかが判断される。ここでは、異常カウンタ15の値「8」が切り替え閾値「10」以上ではないため、ステップS324にて現在のマージン値「7」と現在の異常カウンタ15の値「8」とを足した値を2で割った数値「8(端数切り上げ)」がマージン値となる。
その後、ステップS33にて異常カウンタ15がリセットされる(異常カウンタ15の値が「0」に設定される)。
ステップS34にて正常カウンタ14の値「1」が、切り戻し閾値「5」とマージン値「8」とを足した値以上ではないため、切り替えは行われない。
この状態で、正常カウンタ14の値は「1」であり、また異常カウンタ15の値は「0」である。また、マージン値は「8」である。
続いて、8サイクル目の4回目では、受信が成功する。
受信が成功したため、ステップS30にて応答ありとなり、ステップS31にて正常カウンタ14の値が「+1」カウントされ、「2」となる。
ステップS321にて異常カウンタ15の値が「0」であり、ステップS34にて正常カウンタ14の値「2」が、切り戻し閾値「5」とマージン値「8」とを足した値以上ではないため、切り替えは行われない。
この状態で、正常カウンタ14の値は「2」であり、また異常カウンタ15の値は「0」である。また、マージン値は「8」である。
続いて、9サイクル目の1回目では、受信が失敗する。
ここでは、上述した状態でステップS20にて応答無しのため、ステップS211にて現在の選択経路がメイン経路2であり、ステップS212にて異常カウンタ15の値が「0」であると判断される。
そして、ステップS213にて正常カウンタ14の値「2」が「(マージン値=8)+1」よりも小さいため、ステップS214にて、異常カウンタ15の値が「(マージン値=8)+1−(正常カウンタ14の値=2)」となる「7」に設定される。
すると、ステップS22にて正常カウンタ14がリセットされ(正常カウンタ14の値が「0」に設定され)、ステップS23にて異常カウンタ15の値が「+1」カウントされる。この状態で、正常カウンタ14の値は「0」であり、また異常カウンタ15の値は「8」である。また、マージン値は「8」である。
そして、ステップS24にて異常カウンタ15の値「8」が切り替え閾値「10」以上ではないため、迂回経路3への切り替えは行われない。
続いて、9サイクル目の2回目では、受信が失敗する。
ステップS20にて応答無し、ステップS211にて現在の選択経路がメイン経路2であり、ステップS212にて異常カウンタ15の値が「0」ではないと判断される。
すると、ステップS22にて正常カウンタ14がリセットされ(正常カウンタ14の値が「0」に設定され)、ステップS23にて異常カウンタ15の値が「+1」カウントされる。この状態で、正常カウンタ14の値は「0」であり、また異常カウンタ15の値は「9」である。また、マージン値は「8」である。
そして、ステップS24にて異常カウンタ15の値「9」が切り替え閾値「10」以上ではないため、迂回経路3への切り替えは行われない。
続いて、9サイクル目の3回目では、受信が成功する。
受信が成功したため、ステップS30にて応答ありとなり、ステップS31にて正常カウンタ14の値が「+1」カウントされ、「1」となる。
ステップS321にて異常カウンタ15の値が「0」ではないため、ステップS322にて異常カウンタ15の値が切り替え閾値以上かどうかが判断される。ここでは、異常カウンタ15の値「9」が切り替え閾値「10」以上ではないため、ステップS324にて現在のマージン値「8」と現在の異常カウンタ15の値「9」とを足した値を2で割った数値「9(端数切り上げ)」がマージン値となる。
その後、ステップS33にて異常カウンタ15がリセットされる(異常カウンタ15の値が「0」に設定される)。
ステップS34にて正常カウンタ14の値「1」が、切り戻し閾値「5」とマージン値「9」とを足した値以上ではないため、切り替えは行われない。
この状態で、正常カウンタ14の値は「1」であり、また異常カウンタ15の値は「0」である。また、マージン値は「9」である。
続いて、9サイクル目の4回目では、受信が成功する。
受信が成功したため、ステップS30にて応答ありとなり、ステップS31にて正常カウンタ14の値が「+1」カウントされ、「2」となる。
ステップS321にて異常カウンタ15の値が「0」であり、ステップS34にて正常カウンタ14の値「2」が、切り戻し閾値「5」とマージン値「9」とを足した値以上ではないため、切り替えは行われない。
この状態で、正常カウンタ14の値は「2」であり、また異常カウンタ15の値は「0」である。また、マージン値は「9」である。
続いて、10サイクル目の1回目では、受信が失敗する。
ここでは、上述した状態でステップS20にて応答無しのため、ステップS211にて現在の選択経路がメイン経路2であり、ステップS212にて異常カウンタ15の値が「0」であると判断される。
そして、ステップS213にて正常カウンタ14の値「2」が「(マージン値=9)+1」よりも小さいため、ステップS214にて、異常カウンタ15の値が「(マージン値=9)+1−(正常カウンタ14の値=2)」となる「8」に設定される。
すると、ステップS22にて正常カウンタ14がリセットされ(正常カウンタ14の値が「0」に設定され)、ステップS23にて異常カウンタ15の値が「+1」カウントされる。この状態で、正常カウンタ14の値は「0」であり、また異常カウンタ15の値は「9」である。また、マージン値は「9」である。
そして、ステップS24にて異常カウンタ15の値「9」が切り替え閾値「10」以上ではないため、迂回経路3への切り替えは行われない。
続いて、10サイクル目の2回目では、受信が失敗する。
ステップS20にて応答無し、ステップS211にて現在の選択経路がメイン経路2であり、ステップS212にて異常カウンタ15の値が「0」ではないと判断される。
すると、ステップS22にて正常カウンタ14がリセットされ(正常カウンタ14の値が「0」に設定され)、ステップS23にて異常カウンタ15の値が「+1」カウントされる。この状態で、正常カウンタ14の値は「0」であり、また異常カウンタ15の値は「10」である。また、マージン値は「9」である。
そして、ステップS24にて異常カウンタ15の値「10」が切り替え閾値「10」以上であるため、ステップS25にて迂回経路3への切り替えが行われる。
このように、ICMP ECHO_REPLYの受信成功を挟んだICMP ECHO_REPLYの受信失敗を考慮することで、メイン経路2から迂回経路3への切り替えが行われる。
上述した例では、メイン経路2の品質が不安定になった場合の異常カウンタ15の初期化を現在のマージン値と正常カウンタ14との差分を基としているが、独自の値を基としてもいい。例えば、前回の異常カウンタ15の値を記憶しておき、それと正常カウンタ14の値との差分を基とするなどが考えられる。
また、ICMP ECHO_REQUEST/ICMP ECHO_REPLYによる障害監視以外の方式であっても良い。例えば独自のkeepalive方式が考えられる。
このように、本発明では異常カウンタ15の初期化部分にて異常カウンタ15をメイン経路2の状態に応じた値で初期化することで、メイン経路2が不安定で、連続したICMP ECHO_REPLYの受信失敗がなくても、メイン経路2から迂回経路3へ切り替えることができる。
これにより回線品質の不安定さのために切り替え閾値を小さく設定する必要がなくなる。
なお、上述した処理は、目的に応じて作製された論理回路で行うようにしても良い。また、処理内容を記述したプログラムを通信装置1−1,1−2にて読取可能な記録媒体に記録し、この記録媒体に記録されたプログラムを通信装置1−1,1−2に読み込ませ、実行するものであっても良い。通信装置1−1,1−2にて読取可能な記録媒体とは、フロッピーディスク(登録商標)、光磁気ディスク、DVD、CDなどの移設可能な記録媒体の他、通信装置1−1,1−2に内蔵されたHDD等を指す。この記録媒体に記録されたプログラムは、通信装置1−1,1−2内のCPU(不図示)にて読み込まれ、CPUの制御によって、上述したものと同様の処理が行われる。ここで、CPUは、プログラムが記録された記録媒体から読み込まれたプログラムを実行するコンピュータとして動作するものである。