(57)【要約】【課題】パケットの伝送時間が変動する場合でも、時刻同期を実現すること。【解決手段】中継装置３０は、所定の時間毎に値が加算されるカウンタ３１０と、入力ポート３０１ａで受信されたパケットが時刻同期のためのパケットである場合に、パケットにカウンタ３１０の値を付与するカウンタ値付与部３０２ａと、出力ポート３０９ｂから送出されるパケットが時刻同期のためのパケットである場合に、カウンタ値付与部３０２ａによってパケットに付与された値と、カウンタ３１０の値との差分を算出し、算出した差分を遅延値としてパケットに付与する遅延値付与部３０７ｂとを備える。【選択図】        図３
2010062729.tif 000002
【特許請求の範囲】
【請求項１】
第１の装置と第２の装置の時刻を同期させる時刻同期方法であって、
前記第１の装置の装置が、前記第２の装置へ、前記第１の装置の時刻を含んだパケットを送信する送信工程と、
前記パケットを中継する中継装置が、前記パケットの受信時に受信時刻を示す値を前記パケットに付与する受信時刻付与工程と、
前記中継装置が、前記パケットの送信時に、前記受信時刻付与において前記パケットに付与した値と現時刻の差分を、遅延値として前記パケットに付与する遅延値付与工程と、
前記第２の装置が、前記パケットに含まれる前記第１の装置の時刻と、前記パケットに付与された前記遅延値とに基づいて時刻同期のための制御を実行する制御工程と
を含むことを特徴とする時刻同期方法。
【請求項２】
パケットの中継を行う中継装置であって、
所定の時間毎に値が加算されるカウンタと、
パケットを受信する第１のポートと、
前記第１のポートで受信されたパケットを送出する第２のポートと、
前記第１のポートで受信されたパケットが時刻同期のためのパケットである場合に、該パケットに前記カウンタの値を付与するカウンタ値付与手段と、
前記第２のポートから送出されるパケットが時刻同期のためのパケットである場合に、前記カウンタ値付与手段によって該パケットに付与された値と、前記カウンタの値との差分を算出し、算出した差分を遅延値として該パケットに付与する遅延値付与手段と
を備えたことを特徴とする中継装置。
【請求項３】
前記第１のポートで受信されたパケットを他の装置へ送出する第３のポートと、
前記他の装置から送信されたパケットを受信する第４のポートとをさらに備え、
前記第２のポートは、前記第１のポートで受信され、前記第３のポートと前記第４のポートを経由したパケットを送出することを特徴とする請求項２に記載の中継装置。
【請求項４】
前記遅延値付与手段は、前記遅延値を付与した後のパケットのチェックサムを更新することを特徴とする請求項２または３に記載の中継装置。
【請求項５】
前記カウンタ値付与手段は、前記カウンタの値を付与した後のパケットのチェックサムを更新することを特徴とする請求項３に記載の中継装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、時刻同期方法および中継装置に関し、特に、パケットの伝送時間が変動する場合でも、時刻同期を実現することができる時刻同期方法および中継装置に関する。
【背景技術】
【０００２】
ネットワーク接続された複数の機器の時刻をマイクロ秒以下の精度で同期させるための技術として、ＰＴＰ（Precision Time Protocol）が知られている。ＰＴＰは、マスタとスレーブの間で時刻情報を含んだパケットをやりとりすることによって時刻同期を実現するためのプロトコルである。ここで、マスタは、基準となる時刻を管理する機器であり、スレーブは、マスタの時刻に自身の時刻を同期させる機器である。
【０００３】
図１３を参照しながら、ＰＴＰによる時刻同期の一例について説明する。図１３に示すように、マスタは、まず、ｓｙｎｃ／ｆｏｌｌｏｗ＿ｕｐメッセージを用いて、スレーブにマスタの時刻を通知する。そして、スレーブは、ｓｙｎｃ／ｆｏｌｌｏｗ＿ｕｐメッセージを受信すると、以下の式（１）および式（２）によって算出されるＴｉｍｅを自身の時刻として設定する。
【０００４】
ｏｆｆｓｅｔ  ＝  ＴＳｘ  −  ＴＭｘ  −  ｄｅｌａｙ    ・・・式（１）
Ｔｉｍｅ  ＝  Ｔｓ  −  ｏｆｆｓｅｔ                    ・・・式（２）
【０００５】
ここで、ＴＭｘは、ｓｙｎｃ／ｆｏｌｌｏｗ＿ｕｐメッセージによって通知されたマスタの時刻である。ＴＳｘは、ｓｙｎｃ／ｆｏｌｌｏｗ＿ｕｐメッセージを受信した際のスレーブの時刻である。ｄｅｌａｙは、伝送路遅延であり、初期値として０が設定される。Ｔｓは、スレーブの現在の時刻である。
【０００６】
図１３の例では、ｓｙｎｃ／ｆｏｌｌｏｗ＿ｕｐメッセージによって通知されたマスタの時刻が「１０」であり、通知された際のスレーブの時刻は「１１０」であるので、この時点でスレーブの時刻は、「１０」に設定される。実際には、マスタとスレーブ間には、「２０」の伝送路遅延があるため、この段階では、スレーブに設定された時刻はマスタの時刻から「２０」だけ遅れている。
【０００７】
続いて、スレーブは、マスタとスレーブ間の伝送路遅延の大きさを取得するために、ｄｅｌａｙ＿ｒｅｑメッセージをマスタに送信する。マスタは、ｄｅｌａｙ＿ｒｅｑメッセージを受信すると、ｄｅｌａｙ＿ｒｅｑメッセージの受信時刻を格納したｄｅｌａｙ＿ｒｅｓｐメッセージをスレーブに応答する。そして、スレーブは、ｄｅｌａｙ＿ｒｅｓｐメッセージを受信すると、以下の式（３）によって伝送路遅延ｄｅｌａｙを設定する。
【０００８】
ｄｅｌａｙ  ＝  （（ＴＳｘ−ＴＭｘ）＋（ＴＭｙ−ＴＳｙ））／２  ・・・式（３）
【０００９】
ここで、ＴＳｙは、スレーブがｄｅｌａｙ＿ｒｅｑメッセージをマスタに送信した時刻である。ＴＭｙは、マスタがｄｅｌａｙ＿ｒｅｑメッセージを受信した時刻であり、ｄｅｌａｙ＿ｒｅｓｐメッセージから取得される。ＴＳｘとＴＭｘは、式（１）と同じものであるが、スレーブの時刻は上記の処理によって変更されているため、ＴＳｘは、変更後の時刻を基準とした値となる。
【００１０】
図１３の例では、スレーブがｄｅｌａｙ＿ｒｅｑメッセージをマスタに送信した時刻が「５０」であり、ｄｅｌａｙ＿ｒｅｓｐメッセージに格納されていた時刻が「９０」であるので、ｄｅｌａｙは「２０」に設定される。
【００１１】
こうしてｄｅｌａｙの大きさが取得された後、マスタは、ｓｙｎｃ／ｆｏｌｌｏｗ＿ｕｐメッセージを用いて、再び、スレーブにマスタの時刻を通知する。そして、スレーブは、ｓｙｎｃ／ｆｏｌｌｏｗ＿ｕｐメッセージを受信すると、上記の式（１）および式（２）によって算出されるＴｉｍｅを自身の時刻として設定する。
【００１２】
図１３の例では、２回目のｓｙｎｃ／ｆｏｌｌｏｗ＿ｕｐメッセージによって通知されたマスタの時刻が「１１０」であり、通知された際のスレーブの時刻は「１１０」であり、この時点でのｄｅｌａｙの値は「２０」である。したがって、この段階で、スレーブの時刻は、「１３０」に設定される。そして、この段階以降、マスタとスレーブの時刻は、図１３の通り同期した状態となる。
【００１３】
ＰＴＰは、ＵＤＰ（User Datagram Protocol）ベースのプロトコルであるが、ＰＴＰに関連する技術として、ＰＴＰと同様の機能をレイヤ２レベルで実現する技術も知られている（特許文献１参照）。
【００１４】
【特許文献１】特開２００７−２０１８３号公報
【発明の開示】
【発明が解決しようとする課題】
【００１５】
しかしながら、上述したＰＴＰによる時刻同期は、ネットワーク環境によっては適切に機能しないことがあった。具体的に説明すると、ＰＴＰによる時刻同期は、マスタからスレーブへパケットが伝送されるのに要する時間と、スレーブからマスタへパケットが伝送されるのに要する時間が同一であることを前提としている。このため、これらの時間が一致しない環境では、ＰＴＰを用いても時刻を正確に同期させることができなかった。
【００１６】
ＰＴＰのパケットの伝送時間が一致しない典型的な環境の１つは、マスタとスレーブが、スイッチングハブやレイヤ３スイッチ等の中継装置を介して接続されている環境である。これらの中継装置は、一般に、パケットを内部にバッファリングし、所定の優先度に基づいて出力するように構成されているため、通信状況によって、パケットの伝送時間にゆらぎ（ジッタ）が生じることがある。
【００１７】
パケットの伝送時間について具体例を示して説明する。図１４は、理想的な通信環境の一例を示す図である。図１４に示した環境では、ｓｙｎｃ／ｆｏｌｌｏｗ＿ｕｐメッセージのバッファリングによって生じる遅延Ａと、ｄｅｌａｙ＿ｒｅｑメッセージのバッファリングによって生じる遅延Ｂと、ｄｅｌａｙ＿ｒｅｓｐメッセージのバッファリングによって生じる遅延Ｃとが一致している。このような環境では、ＰＴＰによる時刻同期は、適切に機能する。
【００１８】
図１５は、パケットの伝送時間が一致しない通信環境の一例を示す図である。図１５に示した環境では、遅延Ｃが、遅延ＡおよびＢに比べて大きくなっている。遅延Ｃの増大は、例えば、ｄｅｌａｙ＿ｒｅｓｐメッセージの応答時に大量のパケットが他の機器から中継装置へ送信された場合に生じる。この場合、図１６に示すように、ｄｅｌａｙ＿ｒｅｓｐメッセージの後にマスタからスレーブへ送信されるｓｙｎｃ／ｆｏｌｌｏｗ＿ｕｐメッセージの遅延も大きくなるため、時刻の同期は失敗してしまう。
【００１９】
開示の技術は、上述した従来技術による問題点を解消するためになされたものであり、パケットの伝送時間が変動する場合でも、時刻同期を実現することができる時刻同期方法および中継装置を提供することを目的とする。
【課題を解決するための手段】
【００２０】
上述した課題を解決し、目的を達成するため、本願の開示する中継装置は、一つの態様において、パケットの中継を行う中継装置であって、所定の時間毎に値が加算されるカウンタと、パケットを受信する第１のポートと、前記第１のポートで受信されたパケットを送出する第２のポートと、前記第１のポートで受信されたパケットが時刻同期のためのパケットである場合に、該パケットに前記カウンタの値を付与するカウンタ値付与手段と、前記第２のポートから送出されるパケットが時刻同期のためのパケットである場合に、前記カウンタ値付与手段によって該パケットに付与された値と、前記カウンタの値との差分を算出し、算出した差分を遅延値として該パケットに付与する遅延値付与手段とを備える。
【００２１】
開示した態様によれば、パケットの伝送中に生じる遅延の大きさをパケットに付与することとしたので、この値を考慮することにより、パケットの伝送時間が変動する場合でも、時刻同期を実現することができる。
【００２２】
なお、本願の開示する中継装置の構成要素、表現または構成要素の任意の組合せを、方法、装置、システム、コンピュータプログラム、記録媒体、データ構造などに適用したものも上述した課題を解決するために有効である。
【発明の効果】
【００２３】
本願の開示する時刻同期方法および中継装置の一つの態様によれば、パケットの伝送時間が変動する場合でも、時刻同期を実現することができるという効果を奏する。
【発明を実施するための最良の形態】
【００２４】
以下に添付図面を参照して、本願の開示する時刻同期方法および中継装置の好適な実施の形態を詳細に説明する。なお、以下の実施例では、時刻同期のためのプロトコルとしてＰＴＰを用いる場合を例にして説明するが、本願の開示する技術は、時刻同期のために他のプロトコルが利用される場合にも有効である。
【実施例１】
【００２５】
まず、本実施例に係る時刻同期方法について説明する。図１は、本実施例に係る時刻同期システムの構成を示す図である。図１に示すように、本実施例に係る時刻同期システムは、マスタ１０とスレーブ２０を、中継装置３０を介してネットワーク接続している。
【００２６】
マスタ１０は、基準となる時刻を管理する機器であり、スレーブ２０は、マスタ１０の時刻に自身の時刻を同期させる機器である。中継装置３０は、通信を中継する装置であり、例えば、スイッチングハブやレイヤ３スイッチである。中継装置３０は、ポートＰ１によってマスタ１０と接続され、ポートＰ２によってスレーブ２０と接続されている。
【００２７】
中継装置３０は、図示しないカウンタを有する。このカウンタは、所定の時間毎（例えば、１μ秒毎）に、カウントアップされる。そして、中継装置３０は、ポートＰ１においてＰＴＰのパケットが受信されると、カウンタの値をパケットに付加する。そして、そのパケットのバッファリングが完了し、パケットがポートＰ２から出力される際に、中継装置３０は、カウンタの最新の値と、受信時にパケットに付与した値の差分を算出し、差分を中継装置３０における遅延値としてパケットに付加する。
【００２８】
また、中継装置３０は、ポートＰ２においてＰＴＰのパケットが受信されると、カウンタの値をパケットに付加する。そして、そのパケットのバッファリングが完了し、パケットがポートＰ１から出力される際に、中継装置３０は、カウンタの最新の値と、受信時にパケットに付与した値の差分を算出し、差分を中継装置３０における遅延値としてパケットに付加する。
【００２９】
このように、中継装置３０は、ＰＴＰのパケットが受信されると、そのパケットを中継装置３０が受信してから出力するまでの時間の長さを示す値をパケットに付与する。そして、マスタ１０とスレーブ２０は、中継装置３０によってパケットに付与された値に基づいて、中継装置３０における遅延が０であったように時刻情報を補正して、時刻同期のための処理を実行する。
【００３０】
図２は、本実施例に係る時刻同期システムの動作を示す概念図である。図２に示すように、中継装置３０における遅延が０であったように時刻情報を補正して、時刻同期のための処理を実行することにより、各パケットの伝送時間が同一である場合と同様に、時刻同期を適切に機能させることができる。
【００３１】
次に、図１に示した各機器の構成について図面を参照しながら説明する。なお、以下の説明においては、本実施例に係る時刻同期方法と関連する部位についてのみ説明することとする。
【００３２】
図３は、図１に示した中継装置３０の構成を示すブロック図である。なお、図３においては、中継装置３０がポートＰ１とポートＰ２のみを有するものとしているが、中継装置３０は、３個以上のポートを有していてもよい。
【００３３】
図３に示すように、中継装置３０は、入力ポート３０１ａおよび３０１ｂと、カウンタ値付与部３０２ａおよび３０２ｂと、パケット種別判定部３０３ａおよび３０３ｂと、入力バッファ３０４ａおよび３０４ｂと、スイッチ部３０５と、出力バッファ３０６ａおよび３０６ｂと、遅延値付与部３０７ａおよび３０７ｂと、パケット種別判定部３０８ａおよび３０８ｂと、出力ポート３０９ａおよび３０９ｂと、カウンタ３１０とを有する。
【００３４】
入力ポート３０１ａおよび３０１ｂは、外部からパケットを受信する処理部であり、出力ポート３０９ａおよび３０９ｂは、外部へパケットを送信する処理部である。入力ポート３０１ａと出力ポート３０９ａの組合せが、図１に示したポートＰ１に相当し、入力ポート３０１ｂと出力ポート３０９ｂの組合せが、図１に示したポートＰ２に相当する。
【００３５】
カウンタ値付与部３０２ａは、入力ポート３０１ａで受信されたパケットが時刻同期のためのものであるか否かをパケット種別判定部３０３ａに判定させる。そして、パケットが時刻同期のためのものであると判定された場合は、カウンタ値付与部３０２ａは、カウンタ３１０の値をカウンタ値としてパケットに付与し、付与後のパケットを入力バッファ３０４ａへ出力する。なお、カウンタ値の付与は、パケットの末尾等に新たな項目を追加することによって行ってもよいし、パケット中の未使用の項目を利用して行ってもよい。一方、パケットが時刻同期のためのものでないと判定された場合は、カウンタ値付与部３０２ａは、カウンタ値を付与することなく、パケットを入力バッファ３０４ａへ出力する。
【００３６】
パケット種別判定部３０３ａは、パケットのヘッダの項目の値等に基づいて、パケットが時刻同期のためのものであるか否かを判定する。入力バッファ３０４ａは、パケットをバッファリングし、所定のタイミングでスイッチ部３０５へ出力する。スイッチ部３０５は、経路制御情報等に基づいて、パケットを出力バッファ３０６ａ〜３０６ｂのいずれかへ出力する。出力バッファ３０６ａは、パケットをバッファリングし、所定のタイミングで遅延値付与部３０７ａへ出力する。
【００３７】
遅延値付与部３０７ａは、出力バッファ３０６ａから出力されたパケットが時刻同期のためのものであるか否かをパケット種別判定部３０８ａに判定させる。そして、パケットが時刻同期のためのものであると判定された場合は、遅延値付与部３０７ａは、カウンタ３１０の値と、パケットに付与されているカウンタ値の差分を算出する。そして、遅延値付与部３０７ａは、パケットに付与されているカウンタ値を除去し、算出した差分を遅延値としてパケットに付与する。なお、遅延値の付与は、パケットの末尾等に新たな項目を追加することによって行ってもよいし、パケット中の未使用の項目を利用して行ってもよい。
【００３８】
さらに、遅延値付与部３０７ａは、伝送中にデータが化けたと判断されることがないように、パケットのチェックサムを更新して出力ポート３０９ａへ出力する。なお、チェックサムの更新は、パケット全体について演算して行うこととしてもよいし、演算時間と演算のための処理負荷を抑制するために、遅延値の付与部分についてのみ演算を行って差分更新することとしてもよい。下流の機器においてパケットのチェックサムの検査が実行されないことが予め分かっている場合には、チェックサムの更新を省略してもよい。一方、パケットが時刻同期のためのものでないと判定された場合は、遅延値付与部３０７ａは、遅延値を付与することなく、パケットを出力ポート３０９ａへ出力する。
【００３９】
カウンタ３１０は、保持する値を所定の時間毎にカウントアップする。なお、本実施例では、カウンタ３１０が保持する値をカウントアップさせる時間の単位と、時刻同期のためのパケットに時刻情報として設定される時間の単位が共通であるものとする。
【００４０】
カウンタ値付与部３０２ｂと、パケット種別判定部３０３ｂと、入力バッファ３０４ｂと、出力バッファ３０６ｂと、遅延値付与部３０７ｂと、パケット種別判定部３０８ｂは、それぞれ、カウンタ値付与部３０２ａと、パケット種別判定部３０３ａと、入力バッファ３０４ａと、出力バッファ３０６ａと、遅延値付与部３０７ａと、パケット種別判定部３０８ａと同様の部位であるので説明を省略する。
【００４１】
図４は、図１に示したマスタ１０の構成を示すブロック図である。図４に示すように、マスタ１０は、入力ポート１０１と、出力ポート１０２と、時刻同期制御部１０３と、計時部１０４と、遅延補正部１０５とを有する。入力ポート１０１は、外部からパケットを受信する処理部であり、出力ポート１０２は、外部へパケットを送信する処理部である。
【００４２】
時刻同期制御部１０３は、時刻同期のための各種処理を制御する。具体的には、時刻同期制御部１０３は、ＰＴＰに基づいて、時刻同期用のパケットの生成や解析等を行う。計時部１０４は、時刻同期の基準となる時刻を計時する。遅延補正部１０５は、中継装置３０によって付与された遅延値に基づいて、中継装置３０における遅延が０であったように時刻情報を補正する。
【００４３】
図５は、図１に示したスレーブ２０の構成を示すブロック図である。図５に示すように、スレーブ２０は、入力ポート２０１と、出力ポート２０２と、時刻同期制御部２０３と、計時部２０４と、遅延補正部２０５とを有する。入力ポート２０１は、外部からパケットを受信する処理部であり、出力ポート２０２は、外部へパケットを送信する処理部である。
【００４４】
時刻同期制御部２０３は、時刻同期のための各種処理を制御する。具体的には、時刻同期制御部２０３は、ＰＴＰに基づいて、時刻同期用のパケットの生成や解析等を行う。また、時刻同期制御部２０３は、時刻同期用のパケットに設定されていた時刻情報に基づいて計時部２０４の時刻を更新する。計時部２０４は、時刻を計時する。遅延補正部２０５は、中継装置３０によって付与された遅延値に基づいて、中継装置３０における遅延が０であったように時刻情報を補正する。
【００４５】
次に、図３に示した中継装置３０の処理手順について説明する。図６は、カウンタ値付与部３０２ａの処理手順を示すフローチャートである。図６に示すように、カウンタ値付与部３０２ａは、受信されたパケットの種別をパケット種別判定部３０３ａに判定させる（ステップＳ１０１）。
【００４６】
ここで、パケットの種別がＰＴＰに関するもの、すなわち、時刻同期に関するものであれば（ステップＳ１０２肯定）、カウンタ値付与部３０２ａは、カウンタ３１０の値を取得し（ステップＳ１０３）、取得した値をカウンタ値としてパケットに付与する（ステップＳ１０４）。一方、パケットの種別がＰＴＰに関するもの、すなわち、時刻同期に関するものでなければ（ステップＳ１０２否定）、カウンタ値付与部３０２ａは、パケットへのカウンタ値の付与を行わない。
【００４７】
図７は、遅延値付与部３０７ａの処理手順を示すフローチャートである。図７に示すように、遅延値付与部３０７ａは、出力バッファ３０６ａから出力されたパケットの種別をパケット種別判定部３０８ａに判定させる（ステップＳ２０１）。
【００４８】
ここで、パケットの種別がＰＴＰに関するもの、すなわち、時刻同期に関するものであれば（ステップＳ２０２肯定）、遅延値付与部３０７ａは、カウンタ３１０の値を取得する（ステップＳ２０３）。そして、遅延値付与部３０７ａは、パケットに付与されているカウンタ値と、カウンタから取得した値の差分を算出する（ステップＳ２０４）。続いて、遅延値付与部３０７ａは、パケットからカウンタ値を除去し（ステップＳ２０５）、ステップＳ２０４で算出した値を遅延値としてパケットに付与し（ステップＳ２０６）、パケットのチェックサムを更新する（ステップＳ２０７）。一方、パケットの種別がＰＴＰに関するもの、すなわち、時刻同期に関するものでなければ（ステップＳ２０２否定）、遅延値付与部３０７ａは、パケットへの遅延値の付与を行わない。
【００４９】
次に、本実施例に係る時刻同期システムにおける時刻同期の具体例について説明する。なお、以下の説明においては、既に図１３等を用いて説明済みの部分については、説明を省略する。
【００５０】
図８は、本実施例に係る時刻同期システムにおける時刻同期の一例を示す図である。図８に示すように、マスタ１０は、まず、ｓｙｎｃ／ｆｏｌｌｏｗ＿ｕｐメッセージを用いて、スレーブ２０にマスタ１０の時刻を通知する。ここで、これらのメッセージを中継する際の中継装置３０における遅延時間は「０」であったものとする。スレーブ２０は、ｓｙｎｃ／ｆｏｌｌｏｗ＿ｕｐメッセージを受信すると、以下の式（４）および式（５）によって算出されるＴｉｍｅを自身の時刻として設定する。
【００５１】
ｏｆｆｓｅｔ  ＝  ＴＳｘ  −  （ＴＭｘ＋ｓｙｎｃｄｅｌａｙ）
−  ｄｅｌａｙ    ・・・式（４）
Ｔｉｍｅ  ＝  Ｔｓ  −  ｏｆｆｓｅｔ                    ・・・式（５）
【００５２】
ここで、ｓｙｎｃｄｅｌａｙは、ｓｙｎｃ／ｆｏｌｌｏｗ＿ｕｐメッセージを中継する際に、中継装置３０においてバッファリングのために生じた遅延時間であり、遅延値としてパケットに付与されている。
【００５３】
図８の例では、ｓｙｎｃ／ｆｏｌｌｏｗ＿ｕｐメッセージによって通知されたマスタ１０の時刻が「１０」であり、通知された際のスレーブ２０の時刻は「１１０」であり、バッファリングのために生じた遅延時間は「０」である。したがって、この時点でスレーブ２０の時刻は、「１０」に設定される。
【００５４】
続いて、スレーブ２０は、マスタ１０とスレーブ２０の間の伝送路遅延の大きさを取得するために、ｄｅｌａｙ＿ｒｅｑメッセージをマスタ１０に送信する。ここで、ｄｅｌａｙ＿ｒｅｑメッセージを中継する際の中継装置３０における遅延時間は「０」であったものとする。マスタ１０は、ｄｅｌａｙ＿ｒｅｑメッセージを受信すると、ｄｅｌａｙ＿ｒｅｑメッセージの受信時刻を、以下の式（６）のように、パケットに設定されていた遅延値で補正した時刻Ｔｉｍｅ＿ｒを格納したｄｅｌａｙ＿ｒｅｓｐメッセージをスレーブ２０に応答する。
【００５５】
Ｔｉｍｅ＿ｒ  ＝  ＴＭｒ  −  ｒｅｑｄｅｌａｙ              ・・・式（６）
【００５６】
ここで、ＴＭｒは、ｄｅｌａｙ＿ｒｅｑメッセージの受信時刻である。ｒｅｑｄｅｌａｙは、ｄｅｌａｙ＿ｒｅｑメッセージを中継する際に、中継装置３０においてバッファリングのために生じた遅延時間であり、遅延値としてパケットに付与されている。
【００５７】
図８の例では、ｄｅｌａｙ＿ｒｅｑメッセージの受信時刻が「９０」であり、ｒｅｑｄｅｌａｙは「０」である。したがって、ｄｅｌａｙ＿ｒｅｓｐメッセージには、時刻情報として「９０」が設定される。
【００５８】
そして、スレーブ２０は、ｄｅｌａｙ＿ｒｅｓｐメッセージを受信すると、以下の式（７）によって伝送路遅延ｄｅｌａｙを設定する。
【００５９】
ｄｅｌａｙ  ＝  （（ＴＳｘ−（ＴＭｘ＋ｓｙｎｃｄｅｌａｙ））
＋（ＴＭｙ−ＴＳｙ））／２              ・・・式（７）
【００６０】
図８の例では、スレーブ２０がｄｅｌａｙ＿ｒｅｑメッセージをマスタ１０に送信した時刻が「５０」であり、ｄｅｌａｙ＿ｒｅｓｐメッセージに格納されていた時刻が「９０」であり、ｓｙｎｃｄｅｌａｙは、この時点では「０」である。したがって、ｄｅｌａｙは「２０」に設定される。
【００６１】
こうしてｄｅｌａｙの大きさが取得された後、マスタ１０は、ｓｙｎｃ／ｆｏｌｌｏｗ＿ｕｐメッセージを用いて、再び、スレーブ２０にマスタ１０の時刻を通知する。ここで、これらのメッセージを中継する際の中継装置３０における遅延時間は「１１０」であったものとする。スレーブ２０は、ｓｙｎｃ／ｆｏｌｌｏｗ＿ｕｐメッセージを受信すると、上記の式（４）および式（５）によって算出されるＴｉｍｅを自身の時刻として設定する。
【００６２】
図８の例では、２回目のｓｙｎｃ／ｆｏｌｌｏｗ＿ｕｐメッセージによって通知されたマスタ１０の時刻が「１１０」であり、通知された際のスレーブ２０の時刻は「２２０」である。また、中継装置３０によって付加された遅延値は「１１０」であり、この時点でのｄｅｌａｙの値は「２０」である。したがって、この段階で、スレーブ２０の時刻は、「２４０」に設定される。そして、この段階以降、マスタ１０とスレーブ２０の時刻は、図８の通り同期した状態となる。
【００６３】
図９は、本実施例に係る時刻同期システムにおける時刻同期の他の一例を示す図である。図９に示すように、マスタ１０は、まず、ｓｙｎｃ／ｆｏｌｌｏｗ＿ｕｐメッセージを用いて、スレーブ２０にマスタ１０の時刻を通知する。ここで、これらのメッセージを中継する際の中継装置３０における遅延時間は「０」であったものとする。スレーブ２０は、ｓｙｎｃ／ｆｏｌｌｏｗ＿ｕｐメッセージを受信すると、上記の式（４）および式（５）によって算出されるＴｉｍｅを自身の時刻として設定する。
【００６４】
図９の例では、ｓｙｎｃ／ｆｏｌｌｏｗ＿ｕｐメッセージによって通知されたマスタ１０の時刻が「１０」であり、通知された際のスレーブ２０の時刻は「１１０」であり、バッファリングのために生じた遅延時間は「０」である。したがって、この時点でスレーブ２０の時刻は、「１０」に設定される。
【００６５】
続いて、スレーブ２０は、マスタ１０とスレーブ２０の間の伝送路遅延の大きさを取得するために、ｄｅｌａｙ＿ｒｅｑメッセージをマスタ１０に送信する。ここで、ｄｅｌａｙ＿ｒｅｑメッセージを中継する際の中継装置３０における遅延時間は「４０」であったものとする。マスタ１０は、ｄｅｌａｙ＿ｒｅｑメッセージを受信すると、ｄｅｌａｙ＿ｒｅｑメッセージの受信時刻を、上記の式（６）のように、パケットに設定されていた遅延値で補正した時刻Ｔｉｍｅ＿ｒを格納したｄｅｌａｙ＿ｒｅｓｐメッセージをスレーブ２０に応答する。
【００６６】
図９の例では、ｄｅｌａｙ＿ｒｅｑメッセージの受信時刻が「１３０」であり、ｒｅｑｄｅｌａｙは「４０」である。したがって、ｄｅｌａｙ＿ｒｅｓｐメッセージには、時刻情報として「９０」が設定される。
【００６７】
そして、スレーブ２０は、ｄｅｌａｙ＿ｒｅｓｐメッセージを受信すると、上記の式（７）によって伝送路遅延ｄｅｌａｙを設定する。
【００６８】
図９の例では、スレーブ２０がｄｅｌａｙ＿ｒｅｑメッセージをマスタ１０に送信した時刻が「５０」であり、ｄｅｌａｙ＿ｒｅｓｐメッセージに格納されていた時刻が「９０」であり、ｓｙｎｃｄｅｌａｙは、この時点では「０」である。したがって、ｄｅｌａｙは「２０」に設定される。
【００６９】
こうしてｄｅｌａｙの大きさが取得された後、マスタ１０は、ｓｙｎｃ／ｆｏｌｌｏｗ＿ｕｐメッセージを用いて、再び、スレーブ２０にマスタ１０の時刻を通知する。ここで、これらのメッセージを中継する際の中継装置３０における遅延時間は「１０」であったものとする。スレーブ２０は、ｓｙｎｃ／ｆｏｌｌｏｗ＿ｕｐメッセージを受信すると、上記の式（４）および式（５）によって算出されるＴｉｍｅを自身の時刻として設定する。
【００７０】
図９の例では、２回目のｓｙｎｃ／ｆｏｌｌｏｗ＿ｕｐメッセージによって通知されたマスタ１０の時刻が「１５０」であり、通知された際のスレーブ２０の時刻は「１６０」である。また、中継装置３０によって付加された遅延値は「１０」であり、この時点のｄｅｌａｙの値は「２０」である。したがって、この時段階で、スレーブ２０の時刻は、「１８０」に設定される。そして、この段階以降、マスタ１０とスレーブ２０の時刻は、図９の通り同期した状態となる。
【００７１】
図１０は、本実施例に係る時刻同期システムにおける時刻同期の他の一例を示す図である。図１０に示すように、マスタ１０は、まず、ｓｙｎｃ／ｆｏｌｌｏｗ＿ｕｐメッセージを用いて、スレーブ２０にマスタ１０の時刻を通知する。ここで、これらのメッセージを中継する際の中継装置３０における遅延時間は「３０」であったものとする。スレーブ２０は、ｓｙｎｃ／ｆｏｌｌｏｗ＿ｕｐメッセージを受信すると、上記の式（４）および式（５）によって算出されるＴｉｍｅを自身の時刻として設定する。
【００７２】
図１０の例では、ｓｙｎｃ／ｆｏｌｌｏｗ＿ｕｐメッセージによって通知されたマスタ１０の時刻が「１０」であり、通知された際のスレーブ２０の時刻は「１４０」であり、バッファリングのために生じた遅延時間は、「３０」である。したがって、この時点でスレーブ２０の時刻は、「４０」に設定される。
【００７３】
続いて、スレーブ２０は、マスタ１０とスレーブ２０の間の伝送路遅延の大きさを取得するために、ｄｅｌａｙ＿ｒｅｑメッセージをマスタ１０に送信する。ここで、ｄｅｌａｙ＿ｒｅｑメッセージを中継する際の中継装置３０における遅延時間は「４０」であったものとする。マスタ１０は、ｄｅｌａｙ＿ｒｅｑメッセージを受信すると、ｄｅｌａｙ＿ｒｅｑメッセージの受信時刻を、上記の式（６）のように、パケットに設定されていた遅延値で補正した時刻Ｔｉｍｅ＿ｒを格納したｄｅｌａｙ＿ｒｅｓｐメッセージをスレーブ２０に応答する。
【００７４】
図１０の例では、ｄｅｌａｙ＿ｒｅｑメッセージの受信時刻が「１３０」であり、ｒｅｑｄｅｌａｙは「４０」である。したがって、ｄｅｌａｙ＿ｒｅｓｐメッセージには、時刻情報として「９０」が設定される。
【００７５】
そして、スレーブ２０は、ｄｅｌａｙ＿ｒｅｓｐメッセージを受信すると、上記の式（７）によって伝送路遅延ｄｅｌａｙを設定する。
【００７６】
図１０の例では、スレーブ２０がｄｅｌａｙ＿ｒｅｑメッセージをマスタ１０に送信した時刻が「５０」であり、ｄｅｌａｙ＿ｒｅｓｐメッセージに格納されていた時刻が「９０」であり、ｓｙｎｃｄｅｌａｙは、この時点では「３０」である。したがって、ｄｅｌａｙは「２０」に設定される。
【００７７】
こうしてｄｅｌａｙの大きさが取得された後、マスタ１０は、ｓｙｎｃ／ｆｏｌｌｏｗ＿ｕｐメッセージを用いて、再び、スレーブ２０に自身の時刻を通知する。ここで、これらのメッセージを中継する際の中継装置３０における遅延時間は「１０」であったものとする。スレーブ２０は、ｓｙｎｃ／ｆｏｌｌｏｗ＿ｕｐメッセージを受信すると、上記の式（４）および式（５）によって算出されるＴｉｍｅを自身の時刻として設定する。
【００７８】
図１０の例では、２回目のｓｙｎｃ／ｆｏｌｌｏｗ＿ｕｐメッセージによって通知されたマスタ１０の時刻が「１５０」であり、通知された際のスレーブ２０の時刻は「１６０」である。また、中継装置３０によって付加された遅延値は「１０」であり、この時点でのｄｅｌａｙの値は「２０」である。したがって、この段階で、スレーブ２０の時刻は、「１８０」に設定される。そして、この段階以降、マスタ１０とスレーブ２０の時刻は、図１０の通り同期した状態となる。
【００７９】
上述してきたように、本実施例１では、中継装置をパケットが経由する際に生じる遅延の大きさをパケットに付与することとしたので、この値を考慮することにより、パケットの伝送時間が変動する場合でも、時刻同期を実現することができる。
【実施例２】
【００８０】
実施例１では、スイッチングハブ等が、内部遅延の大きさを示す遅延値をパケットに付与する例を示したが、既に運用中のネットワークにおいては、このような機能をスイッチングハブ等に追加することができない場合がある。そこで、本実施例では、遅延値をパケットに付与する機能をスイッチングハブ等に追加できない場合でも、時間同期を実現することができる技術について説明する。
【００８１】
なお、以下の説明では、既に説明した部位と同一の部位については、既に説明した部位と同一の符号を付して、重複する説明を省略することとする。
【００８２】
図１１は、本実施例に係る時刻同期システムの構成を示す図である。図１１に示すように、本実施例に係る時刻同期システムは、マスタ１０とスレーブ２０を、中継装置３１とスイッチ４０を介してネットワーク接続している。
【００８３】
スイッチ４０は、遅延値をパケットに付与する機能をもたない従来のスイッチングハブである。なお、スイッチ４０は、パケットの伝送時間にゆらぎを生じさせる可能性のある機器であればどのようなものであってもよい。
【００８４】
中継装置３１は、ポートＰ１ａによってマスタ１０と接続され、ポートＰ１ｂによってスイッチ４０のポートの１つと接続され、ポートＰ２ｂによってスイッチ４０の他のポートと接続され、ポートＰ２ａによってスレーブ２０と接続されている。そして、ポートＰ１ａとポートＰ１ｂは、中継装置３１の内部で接続され、ポートＰ２ａとポートＰ２ｂは、中継装置３１の内部で接続されている。したがって、マスタ１０、スレーブ２０、中継装置３１およびスイッチ４０は、マスタ１０〜中継装置３１のポートＰ１ａ〜中継装置３１のポートＰ１ｂ〜スイッチ４０〜中継装置３１のポートＰ２ｂ〜中継装置３１のポートＰ２ａ〜スレーブ２０という経路で接続されている。
【００８５】
中継装置３１は、図示しないカウンタを有する。このカウンタは、所定の時間毎（例えば、１μ秒毎）に、カウントアップされる。そして、中継装置３１は、ポートＰ１ａにおいてＰＴＰのパケットが受信されると、カウンタの値をパケットに付加する。そして、そのパケットがスイッチ４０を経由してポートＰ２ａから出力される際に、中継装置３１は、カウンタの最新の値と、ポートＰ１ａでの受信時にパケットに付与した値の差分を算出し、差分を遅延値としてパケットに付加する。
【００８６】
また、中継装置３１は、ポートＰ２ａにおいてＰＴＰのパケットが受信されると、カウンタの値をパケットに付加する。そして、そのパケットがスイッチ４０を経由してポートＰ１ａから出力される際に、中継装置３１は、カウンタの最新の値と、ポートＰ２ａでの受信時にパケットに付与した値の差分を算出し、遅延値としてパケットに付加する。
【００８７】
すなわち、中継装置３１は、ＰＴＰのパケットが受信されると、そのパケットがスイッチ４０を経由して中継装置３１から出力するまでの時間の長さを示す値をパケットに付与する。そして、マスタ１０とスレーブ２０は、中継装置３１によってパケットに付与された値に基づいて、中継装置３１とスイッチ４０における遅延が０であったように時刻情報を補正して、時刻同期のための処理を実行する。このような構成とすることにより、スイッチ４０における伝送時間のゆらぎの影響を排除して時刻同期を実行することが可能になる。
【００８８】
次に、図１１に示した中継装置３１の構成について説明する。図１２は、中継装置３１の構成を示すブロック図である。図１２に示すように、中継装置３１は、入力ポート５０１ａおよび５０１ｂと、カウンタ値付与部３０２ａおよび３０２ｂと、パケット種別判定部３０３ａおよび３０３ｂと、出力ポート５０２ａおよび５０２ｂと、入力ポート５０３ａおよび５０３ｂと、遅延値付与部３０７ａおよび３０７ｂと、パケット種別判定部３０８ａおよび３０８ｂと、出力ポート５０４ａおよび５０４ｂと、カウンタ３１０とを有する。
【００８９】
入力ポート５０１ａは、マスタ１０から送信されたパケットを受信し、カウンタ値付与部３０２ａへ出力する。出力ポート５０２ａは、カウンタ値付与部３０２ａから出力されたパケットをスイッチ４０へ送信する。入力ポート５０３ａは、スイッチ４０から送信されたパケットを受信し、遅延値付与部３０７ａへ出力する。出力ポート５０４ａは、遅延値付与部３０７ａから出力されたパケットをマスタ１０へ送信する。入力ポート５０１ａと出力ポート５０４ａの組合せが、図１１に示したポートＰ１ａに相当し、入力ポート５０３ａと出力ポート５０２ａの組合せが、図１１に示したポートＰ１ｂに相当する。
【００９０】
また、入力ポート５０１ｂは、スレーブ２０から送信されたパケットを受信し、カウンタ値付与部３０２ｂへ出力する。出力ポート５０２ｂは、カウンタ値付与部３０２ｂから出力されたパケットをスイッチ４０へ送信する。入力ポート５０３ｂは、スイッチ４０から送信されたパケットを受信し、遅延値付与部３０７ｂへ出力する。出力ポート５０４ｂは、遅延値付与部３０７ｂから出力されたパケットをマスタ１０へ送信する。入力ポート５０１ｂと出力ポート５０４ｂの組合せが、図１１に示したポートＰ２ａに相当し、入力ポート５０３ｂと出力ポート５０２ｂの組合せが、図１１に示したポートＰ２ｂに相当する。
【００９１】
カウンタ値付与部３０２ａおよび３０２ｂと、パケット種別判定部３０３ａおよび３０３ｂと、出力ポート５０２ａおよび５０２ｂと、遅延値付与部３０７ａおよび３０７ｂと、パケット種別判定部３０８ａおよび３０８ｂと、カウンタ３１０の機能と処理内容については、実施例１と同様である。なお、カウンタ値付与部３０２ａおよび３０２ｂについては、カウンタ値を付与した後のパケットがスイッチ４０を経由することになるため、スイッチがパケットのチェックサムを検証する機能を有している場合には、チェックサムの更新を行う。
【００９２】
上述してきたように、本実施例２では、スイッチングハブ等をパケットが経由する際に生じる遅延の大きさを中継装置がパケットに付与することとしたので、この値を考慮することにより、パケットの伝送時間が変動する場合でも、時刻同期を実現することができる。
【図面の簡単な説明】
【００９３】
【図１】実施例１に係る時刻同期システムの構成を示す図である。
【図２】実施例１に係る時刻同期システムの動作を示す概念図である。
【図３】実施例１に係る中継装置の構成を示すブロック図である。
【図４】実施例１に係るマスタの構成を示すブロック図である。
【図５】実施例１に係るスレーブの構成を示す機能ブロック図である。
【図６】カウンタ値付与部の処理手順を示すフローチャートである。
【図７】遅延値付与部の処理手順を示すフローチャートである。
【図８】実施例１に係る時刻同期システムにおける時刻同期の一例を示す図である。
【図９】実施例１に係る時刻同期システムにおける時刻同期の他の一例を示す図である。
【図１０】実施例１に係る時刻同期システムにおける時刻同期の他の一例を示す図である。
【図１１】実施例２に係る時刻同期システムの構成を示す図である。
【図１２】実施例２に係る中継装置の構成を示すブロック図である。
【図１３】従来の時刻同期方法による時刻同期の一例を示す図である。
【図１４】理想的な通信環境の一例を示す図である。
【図１５】パケットの伝送時間が一致しない通信環境の一例を示す図である。
【図１６】時刻同期の失敗の一例を示す図である。
【符号の説明】
【００９４】
１０  マスタ
１０１  入力ポート
１０２  出力ポート
１０３  時刻同期制御部
１０４  計時部
１０５  遅延補正部
２０  スレーブ
２０１  入力ポート
２０２  出力ポート
２０３  時刻同期制御部
２０４  計時部
２０５  遅延補正部
３０、３１  中継装置
３０１ａ、３０１ｂ、５０１ａ、５０１ｂ、５０３ａ、５０３ｂ  入力ポート
３０２ａ、３０２ｂ  カウンタ値付与部
３０３ａ、３０３ｂ  パケット種別判定部
３０４ａ、３０４ｂ  入力バッファ
３０５  スイッチ部
３０６ａ、３０６ｂ  出力バッファ
３０７ａ、３０７ｂ  遅延値付与部
３０８ａ、３０８ｂ  パケット種別判定部
３０９ａ、３０９ｂ、５０２ａ、５０２ｂ、５０４ａ、５０４ｂ  出力ポート
３１０  カウンタ
４０  スイッチ
【図１】
2010062729.tif 000003
【図２】
2010062729.tif 000004
【図３】
2010062729.tif 000005
【図４】
2010062729.tif 000006
【図５】
2010062729.tif 000007
【図６】
2010062729.tif 000008
【図７】
2010062729.tif 000009
【図８】
2010062729.tif 000010
【図９】
2010062729.tif 000011
【図１０】
2010062729.tif 000012
【図１１】
2010062729.tif 000013
【図１２】
2010062729.tif 000014
【図１３】
2010062729.tif 000015
【図１４】
2010062729.tif 000016
【図１５】
2010062729.tif 000017
【図１６】
2010062729.tif 000018