説明

メッセージ送信方法、メッセージ送信プログラム、及びメッセージ送信装置

【課題】 TCP/IPネットワークなどの通信ネットワーク上に構成された物理的ネットワーク構成にとらわれないツリー構造の論理ネットワークにメッセージを送信する。
【解決手段】 マルチキャストメッセージ送信方法であって、メッセージを受信したサーバントが、(1)論理ネットワークにおけるアップリンクの存否と、アップリンクのサーバントIDと、ダウンリンクの存否と、ダウンリンクのサーバントIDとを記憶するステップと、(2)受信したメッセージを上位アプリケーションにわたすステップと、(3)アップリンクの存否を読み取り(S503)、アップリンクが存在する場合はアップリンクにメッセージを送信するステップ(S505)と、(4)ダウンリンクの存否を読み取り(S507)、ダウンリンクが存在する場合はダウンリンクにメッセージを送信するステップ(S507)と、を有する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、仮想的な論理ネットワーク上にトランスポート層の機能を提供するプログラム、装置及び方法に関し、具体的には、TCP/IP(Transmission Control Protocol / Internet Protocol)ネットワークなどの通信ネットワーク上に物理的ネットワーク構成にとらわれないツリー構造の論理ネットワークを自律的に構成し、その論理ネットワーク上でのユニキャスト通信やマルチキャスト通信を可能にするプログラム、装置及び方法に関する。
【背景技術】
【0002】
ユニキャスト通信(1対1の通信)については、従来の技術においても問題なく利用できている。一方、マルチキャスト通信(1対nの同報通信)については、従来の技術はいくつかの課題を抱えている。以下に従来技術とその課題を示す。
【0003】
IPマルチキャスト(ネットワーク層)では、ルータなどのネットワーク機器がIPマルチキャスト通信をサポートしている必要がある。また、それらネットワーク機器の設定・維持のためのコストが発生する。
【0004】
UDPブロードキャスト(トランスポート層)では、サブネット単位などの物理的なネットワーク構成に依存した範囲での同報しか行えない(例えば、非特許文献1参照)。
【0005】
中継サーバを介した同報通信(アプリケーション層)では、中継サーバの導入・維持のためのコストが発生する。また、中継サーバの障害への対応が困難である。
【0006】
ファイル共有等のP2P(Peer to Peer)アプリケーション(アプリケーション層)では、ノード間をアドホックな方法で接続することによって、論理ネットワークを構成する。よって、無秩序なネットワーク構成となり、通信効率が非常に悪く、リアルタイムな通信に適用できない。
【非特許文献1】竹下隆史他著「マスタリングTCP/IP入門 第2版」オーム社 平成10年5月25日発行 83頁
【発明の開示】
【発明が解決しようとする課題】
【0007】
従来のシステム構築においては、前記従来技術のデメリットについては不可避なものとして受け入れた上で、システム要件により合致する技術を選択して採用していた。
【0008】
本発明は、TCP/IP(Transmission Control Protocol / Internet Protocol)ネットワークなどの通信ネットワーク上に物理的ネットワーク構成にとらわれないツリー構造の論理ネットワークを自律的に構成し、その論理ネットワーク上でのユニキャスト通信やマルチキャスト通信を可能にするプログラム、装置及び方法の提供を目的とする。
【課題を解決するための手段】
【0009】
本発明の第1の特徴は、マルチキャストメッセージ送信方法であって、メッセージを受信したサーバントが、(1)論理ネットワークにおけるアップリンクの存否と、前記アップリンクのサーバントIDと、ダウンリンクの存否と、前記ダウンリンクのサーバントIDとを記憶するステップと、(2)受信した前記メッセージを上位アプリケーションにわたすステップと、(3)前記アップリンクの存否を読み取り、前記アップリンクが存在する場合は前記アップリンクに前記メッセージを送信するステップと、(4)前記ダウンリンクの存否を読み取り、前記ダウンリンクが存在する場合は前記ダウンリンクに前記メッセージを送信するステップと、を有することにある。
【0010】
本発明の第2の特徴は、ユニキャストメッセージ送信方法であって、メッセージを受信したサーバントが、(1)自サーバントIDと、パーティションと、前記パーティションに含まれる各スロットと、アップサーバントと、前記各スロットに属するダウンサーバントが存在する場合は当該ダウンサーバントとを記憶するステップと、(2)受信した前記メッセージから宛先サーバントIDを読み取るステップと、(3)前記宛先サーバントIDと前記自サーバントIDとを比較するステップと、(4)前記宛先サーバントIDと前記自サーバントIDとが一致する場合に、前記メッセージを上位アプリケーションにわたすステップと、(5)前記宛先サーバントIDと前記自サーバントIDとが一致しない場合に、前記宛先サーバントIDのサーバントID値を求め、前記サーバントID値と前記パーティションとを比較し、(5−1)前記サーバントID値が前記パーティションの外の場合は、前記アップサーバントに前記メッセージを送信し、(5−2)前記サーバントID値が前記パーティション内である場合は、前記アップサーバントへ前記メッセージを送信することに加えて、前記サーバントID値と前記各スロットとを比較し、前記サーバントID値が属する前記スロットの前記ダウンサーバントに前記メッセージを送信するステップと、を有することにある。
【発明の効果】
【0011】
本発明の第1の特徴によれば、ネットワーク機器の種類や物理的なネットワーク構成に関わらず、マルチキャストメッセージの送信が可能となる。
【0012】
本発明の第2の特徴によれば、ネットワーク機器の種類や物理的なネットワーク構成に関わらず、ユニキャストメッセージの送信が可能となる。
【発明を実施するための最良の形態】
【0013】
本発明の実施形態では、TCPリンクのみを用いて論理ネットワークを構成する。よって、ネットワーク機器の種類や物理的なネットワーク構成に関わらず、論理ネットワークの構成が可能である。また、この論理ネットワークはツリー構造となっており、効率的な通信を行うことができる。特に、従来のP2P技術では困難であったリアルタイム通信にも適用することができる。
【0014】
本発明の実施形態の論理ネットワークは、ノードの参加・離脱に応じて自律的に構成される。従って、構成情報の管理などのコストが不要になる。また、障害発生時にも論理ネットワークの再構築が自動的に行われるため、耐障害性が高い。
【0015】
(用語の定義)
本発明の実施形態を説明するために、下記の用語を定義する。
【0016】
図1(a)に示すように、論理ネットワーク上の仮想的なノードを「サーバント」(Servent)11と言う。アプリケーションはサーバントを生成し、これを介して通信を行う。
【0017】
論理ネットワークの「種」となるサーバントを「シードサーバント」(SeedServent)12と言う。論理ネットワークを構成するためには、少なくともひとつのシードサーバントが存在する必要がある。シードサーバントは論理ネットワークの核となるもので、シードサーバントを中心にシードサーバント以外のサーバントが連続して接続することで論理ネットワークが構成される。
【0018】
サーバントを一意に識別するための識別子を「サーバントID」と言う。サーバントIDは、物理ネットワークのアドレス(IPアドレスとポート番号)から構成することができる。また、物理ネットワークのアドレスに、かかるアドレス以外の情報を付加して構成することもできる。
【0019】
サーバントIDを0以上の一意の整数値に写像したものをサーバントID値と言う。サーバントID値から、サーバントIDへの逆変換が可能である必要はない。つまりサーバントID値から、サーバントIDを求めることは出来なくても良い。
【0020】
本発明の実施形態においては、サーバントおよびサーバント間のTCPリンクにより構成されるツリー構造の論理ネットワークを構築する。
【0021】
図1(b)に示すように、あるサーバント(図1(b)では中央のサーバント)から見て根に近い側のリンクをアップリンク(UpLink)14、葉に近い側のリンクをダウンリンク(DownLink)15と呼ぶ。また、アップリンクの先のサーバントをアップサーバント(UpServent)16、ダウンリンクの先のサーバントをダウンサーバント(DownServent)17と呼ぶ。
【0022】
本発明の実施形態においては、サーバントごとのダウンリンクの最大数を既定値とする。以下、この最大数をNと表記する。以下の例では、特に指定の無い場合、Nを10としている。
【0023】
(パーティションとスロット)
ある部分木を取り出した時、この部分木に含まれる全てのサーバントのサーバントID値をカバーする値域を「パーティション」(Partition)と呼ぶ。パーティションは、この部分木の頂点のサーバントにより管理・更新される。また、パーティションをN個の値域に分割したものを「スロット」(Slot)と呼ぶ。
【0024】
頂点のサーバントは、各スロットにダウンリンクを割り当て、ダウンリンクの先のサーバントにそのスロットにあたるパーティションの管理をまかせる。このとき、各スロット内のダウンリンクは、最大1本となるように調整する。
【0025】
(算出方法)
最小値、最大値により定義された値域を[最小値,最大値]として表記する。
【0026】
部分木のサーバントID値の値域が[vmin, vmax]であるとき、
Nx × y ≦ vmin, vmax < Nx × (y + 1)
(x, yは整数 x > 0, 0 ≦ y < N)
を満たす最小のxを求める。
【0027】
この部分木のパーティションは、[Nx × y , Nx × (y + 1) - 1]であり、パーティションの幅は、Nxとなる。また、スロットの幅は、Nx-1となる。
【0028】
(計算例)
図2に、「サーバントID値の値域」の例を挙げて、その値域から算出された「パーティション」、「パーティションの幅」及び「スロット」を示す。なお、ダウンリンクの最大数Nは10とする。
【0029】
図3(a)及び(b)にツリー全体でのパーティション計算例を示す。なお、ダウンリンクの最大数Nは10とする。図中、○の中の数値はサーバントID値である。
【0030】
(サーバントの参加)
論理ネットワークに接続する側のサーバントをコネクター(Connector)、接続を受ける側のサーバントをリスナー(Listener)と呼び、それぞれの処理を示す。あるサーバントは、アップ側に対する接続処理を行っている間にも、ダウン側からの接続要求を受け付けなければならない。よって、サーバントは、コネクターとしての処理とリスナーとしての処理を並行して行える必要がある。
【0031】
(コネクターの処理)
図4に基づいて、コネクター処理の流れを説明する。まず、対象サーバントIDリストに、シードサーバントのサーバントIDリストの内容を代入する(S101)。
【0032】
次に、対象サーバントIDリストからひとつずつ対象サーバントIDを取り出して、以下の処理を実行する(S103)。
【0033】
そして、対象サーバントに接続する(S105)。
【0034】
接続に成功しなかった場合はステップS103へ戻り、接続に成功した場合はステップS109へ進む(S107)。
【0035】
自分のサーバントIDを添付した参加要求電文を、リスナーへ送信する(S109)。
【0036】
参加応答電文をリスナーから受信する(S111)。
【0037】
参加応答電文の応答区分が「OK」ならばコネクター処理を終了する(S113)。
【0038】
参加応答電文の応答区分が「他のサーバントへの接続指示」であれば、参加応答電文から接続指示サーバントIDを取り出し、それを対象サーバントIDとして、ステップS105へ戻る(S115)。
【0039】
(リスナーの処理)
図5に基づいて、リスナー処理の流れを説明する。
【0040】
まず、参加要求電文をコネクターから受信する(S201)。
【0041】
次に、参加要求電文からコネクターのサーバントIDを取り出す(S203)。
【0042】
そして、コネクターのサーバントID値を使って部分木のサーバントID値の値域を更新する(S205)。
【0043】
サーバントID値の値域が[a,b]で、コネクターのサーバントID値がcであるとする、そして
c<aの場合、値域は[c,b]に更新され、
b<cの場合、値域は[a,c]に更新され、
a≦c≦bの場合は、値域は更新されない。
【0044】
例えば、参加要求電文受信前のサーバントID値の値域が[1,2]で、参加要求電文から取り出されたサーバントID値が「91」の場合、更新後のサーバントID値の値域は[1,91]となる。また、参加要求電文受信前のサーバントID値の値域が[18,19]で、参加要求電文から取り出されたサーバントID値が「10」の場合、更新後のサーバントID値の値域は[10,19]となる。
【0045】
部分木のサーバントID値の値域からパーティションとスロットを再計算する(S207)。このときパーティションの拡張によって、スロット内に複数のダウンリンクが該当することがある。このときは2番目以降のあふれたダウンリンクを切断する。
【0046】
前記のように、部分木のサーバントID値の値域が[vmin, vmax]であるとき、
Nx × y ≦ vmin, vmax < Nx × (y + 1)
(x, yは整数 x > 0, 0 ≦ y < N)
を満たす最小のxを求める。
【0047】
この部分木のパーティションは、[Nx × y , Nx × (y + 1) - 1]であり、パーティションの幅は、Nxとなる。
【0048】
この部分木のスロットは、
[Nx × y , Nx × y + Nx-1 - 1],
[Nx × y + Nx-1 , Nx × y + Nx-1 ×2 - 1],

[Nx × y + Nx-1 ×(N - 1), Nx × y + (Nx-1 ×N) - 1]
であり、スロットの幅は、Nx-1となる。
【0049】
例えば、参加要求電文受信前のサーバントID値の値域が[1,2]、パーティションが[0,9]の場合、参加要求電文から取り出されたサーバントID値が「91」であるなら、更新後のサーバントID値の値域は[1,91]、再計算後のパーティションは[0,99]、スロットは[0,9],[10,19],[20,29],[30,39],[40,49],[50,59],[60,69],[70,79],[80,89],[90,99]となる。
【0050】
例えば、参加要求電文受信前のサーバントID値の値域が[3,7]、パーティションが[0,9]、ダウンサーバントのサーバントID値が3,4,7の場合、参加要求電文から取り出されたサーバントID値が「91」であるなら、更新後のサーバントID値の値域は[3,91]、再計算後のパーティションは[0,99]、スロットは[0,9],[10,19],[20,29],[30,39],[40,49],[50,59],[60,69],[70,79],[80,89],[90,99]となる。
【0051】
このとき、スロット[0,9]にはサーバントID値が3,4,7のダウンサーバントが存在することになるため、サーバントID値4,7のサーバントへのリンクは切断される。
【0052】
コネクターのサーバントID値が属するスロットを求め(S209)、そのスロットが空かを判断し(S211)、そのスロットが空であれば、「OK」の応答区分を持った参加応答電文を送信して(S213)、処理を終了する。
【0053】
スロットに別のサーバントが割り当てられていれば、「他のサーバントへの接続指示」の応答区分と、スロットに既に割り当てられているサーバントのサーバントIDを接続指示サーバントとして設定した参加応答電文を送信して(S215)、処理を終了する。
【0054】
既に図3(a)に示す状態であるとして、図3(a)に基づいてステップS209〜S215を説明する。コネクターのサーバントID値が「6」の場合、このサーバントID値が属するスロットとしてスロット[0,9]が求まる(S209)。このスロットには別のサーバント(サーバントID値「5」)が既に割り当てられているので、「他のサーバントへの接続指示」の応答区分と、先行サーバントのサーバントID(サーバントID値「5」)を接続指示サーバントとして設定した参加応答電文を送信する(S215)。
【0055】
一方、コネクターのサーバントID値が「21」の場合、このサーバントID値が属するスロットとしてスロット[20,29]が求まる(S209)。このスロットは空なので、「OK」の応答区分を持った参加応答電文を送信する(S213)。
【0056】
(サーバントの離脱・リンクの切断)
物理的なネットワークの障害は、リンクの切断としてサーバントに検知される。また、サーバントの離脱についても、リンクの切断としてアップリンク側およびダウンリンク側のサーバントに検知される。リンク切断を検知したときの処理を以下に示す。
【0057】
(アップリンク切断時の処理)
図6に基づいて、アップリンク切断時の処理について説明する。
【0058】
以下では、説明のためにサーバントID値nのサーバントのサーバントIDをIDnと表記する。例えば、サーバントID値5のサーバントのサーバントIDをID5と表記する。
【0059】
まず、シブリングサーバントIDリストを取り出す(S301)。シブリングサーバントIDリストとは、同一のアップサーバントを持った兄弟のサーバントのサーバントIDリストを意味する。このリストは、アップサーバントから随時送信されるものである。図3(a)の例では、サーバントID値「5」のサーバントのシブリングサーバントIDリストには、「ID5」と「ID13」と「ID90」が記されている。また、サーバントID値「92」のサーバントのシブリングサーバントIDリストには、「ID92」と「ID95」と「ID99」が記されている。
【0060】
次に、シブリングサーバントIDリスト上の自サーバントの位置をもとめる(S303)。
【0061】
そして、自サーバントが先頭のサーバントか調べる(S305)。
【0062】
自サーバントがシブリングサーバントIDリストにおける先頭のサーバントであれば、コネクター処理を開始する(S307)。
【0063】
自サーバントがシブリングサーバントIDリストにおける先頭のサーバントでなければ、シブリングサーバントIDリストを対象サーバントIDリストに代入し(S309)、コネクター処理を開始する(S311)。
【0064】
既に図3(a)に示す状態であるとして、図3(a)に基づいてステップS301〜S311を説明する。まず、サーバントID値「90」のサーバントが離脱し、サーバントID値「92」のサーバントのアップリンクが切断された場合について説明する。サーバントID値「92」のサーバントは、シブリングサーバントIDリストを取り出す(S301)。取り出されたリストには、「ID92,ID95,ID99」のように記載されている。よって、サーバントID値「92」のサーバントは、シブリングサーバントIDリスト上における「先頭のサーバントである」(S303,305)。このため、サーバントID値「92」のサーバントは、サーバントID値「3」のシードサーバントを対象サーバントとしてコネクター処理を開始する(S307)。
【0065】
次に、サーバントID値「90」のサーバントが離脱し、サーバントID値「95」のサーバントのアップリンクが切断された場合について説明する。サーバントID値「95」のサーバントは、シブリングサーバントIDリストを取り出す(S301)。取り出されたリストには、「ID92,ID95,ID99」のように記載されている。よって、サーバントID値「95」のサーバントは、シブリングサーバントIDリスト上における位置は「先頭のサーバントではない」(S303,305)。このため、サーバントID値「95」のサーバントは、シブリングサーバントIDリストを対象サーバントIDリストに代入し(S309)、サーバントID値「92」のサーバントに対してコネクター処理を開始する(S307)。
【0066】
図3(b)にこれらの処理が完了した論理ネットワークの状態を示す。なお、サーバントID値「99」のサーバントも、サーバントID値「95」のサーバントと同様に、サーバントID値「92」のサーバントに対してコネクター処理を行う。
【0067】
このようにして、サーバントの離脱・リンクの切断が生じても、論理ネットワークは自律的に構成される。従って、構成情報の管理などのコストが不要になる。また、障害発生時にも論理ネットワークの再構築が自動的に行われるため、耐障害性が高い。
【0068】
(ダウンリンク切断時の処理)
ダウンリンク切断時は、切断されたダウンリンクが割り当てられていたスロットを求めて、そのスロットの状態を空とする。
【0069】
(論理ネットワークのツリー最適化)
本実施形態では、論理ネットワークのツリーが冗長となることを防止するために、論理ネットワーク構成処理と並行して、パーティションに基づいたツリー最適化処理を行う。ツリーの最適化処理は、ツリーの頂点となるシードサーバントとそれ以外のサーバントに分担して行われる。以下に各処理を説明する。
【0070】
(頂点のシードサーバントのツリー最適化処理)
1.一定時間おきに以下の処理を実行する。
【0071】
1.1自サーバントのパーティション情報を添付したツリー最適化電文を作成する。
【0072】
1.2全てのダウンサーバントにツリー最適化電文を送信する。
【0073】
(頂点以外のサーバントのツリー最適化処理)
図7に基づいて、頂点以外のサーバントのツリー最適化処理の流れを説明する。
【0074】
アップサーバントからの電文が受信されるのを待つ(S401)。
【0075】
受信電文がツリー最適化電文か判断する(S403)。
【0076】
ステップS403で「YES」に分岐する場合、ツリー最適化電文からアップサーバントのパーティション情報を取り出す(S405)。
【0077】
自サーバントのパーティションがアップサーバントのパーティションに含まれるか判断する(S407)。なお、自サーバントのパーティションがアップサーバントのパーティションと等しい場合は「含まれない」と判断する。
【0078】
ステップS407で「YES」に分岐する場合、自サーバントのパーティション情報を添付したツリー最適化電文を作成する(S409)。
【0079】
全てのダウンサーバントにツリー最適化電文を送信する(S411)。
【0080】
ステップS407で「NO」に分岐する場合、全てのダウンサーバントにリセット電文を送信する(S413)。
【0081】
全てのダウンリンクを切断する(S415)。
【0082】
自サーバントの、部分木の値域、パーティション、スロットをすべてクリアする(S417)。
【0083】
ステップS403で「NO」に分岐する場合、受信電文がリセット電文か判断する(S421)。
【0084】
ステップS421で「YES」に分岐する場合、コネクター処理を開始する。
【0085】
なお、リセット電文受信後、アップサーバントによってアップリンクが切断されるが、コネクター処理が重複して起動することを避けるために、アップリンク切断時の処理が起動しないように制御する。
【0086】
(通信メッセージのルーティング)
通信メッセージのルーティングについて説明する。
【0087】
宛先を指定しない同報メッセージをマルチキャストメッセージと呼び、宛先サーバントIDを指定するメッセージをユニキャストメッセージと呼ぶ。以下にそれぞれの通信メッセージのルーティング処理を示す。
【0088】
(マルチキャストメッセージのルーティング)
図8に基づいて、マルチキャストメッセージのルーティング処理について説明する。
【0089】
まず、アプリケーションにメッセージをわたす(S501)。
【0090】
次に、アップリンクが存在するか判断し(S503)、アップリンクが存在すれば、アップリンクにメッセージを送信する(S505)。具体的には、TCP/IPソフトにアップサーバントのポート番号とIPアドレスを、宛先ポート番号と宛先IPアドレスとして通知し、送信を依頼する。
【0091】
そして、ダウンリンクが存在するか判断し(S507)、ダウンリンクが存在すれば、各ダウンリンクにメッセージを送信する(S509)。具体的には、TCP/IPソフトにダウンサーバントのポート番号とIPアドレスを、宛先ポート番号と宛先IPアドレスとして通知し、送信を依頼する。
【0092】
(ユニキャストメッセージのルーティング)
図9に基づいて、ユニキャストメッセージのルーティング処理について説明する。
【0093】
まず、宛先が自分自身か判断する(S601)。具体的には、メッセージヘッダに含まれる宛先サーバントIDと、自分の記憶装置103に記憶されている自分のサーバントIDとを比較し、両サーバントIDが一致すれば宛先が自分自身であると判断する。
【0094】
ステップS601で「YES」に分岐する場合、アプリケーションにメッセージを渡して(S603)、処理を終了する。
【0095】
ステップS601で「NO」に分岐する場合、宛先サーバントIDのサーバントID値を求める(S605)。
【0096】
求めたサーバントID値が自分のパーティションの外か判断する(S607)。
【0097】
ステップS607で「YES」に分岐する場合、アップリンクにメッセージを送信する(S609)。
【0098】
ステップS607で「NO」に分岐する場合、該当するスロットのダウンリンクにメッセージを送信し(S611)かつ、アップリンクにメッセージを送信する(S613)。
【実施例1】
【0099】
本発明の適用システムとして「ニュース配信システム」を取り上げ、その実装方法および実施例について説明する。このニュース配信システムは、ニュース受信を待つ複数のコンピュータに、ニュース発信コンピュータからリアルタイムにニュース情報を配信するシステムである。
【0100】
図10に、ニュース配信システムのシステム構成を示す。
【0101】
本発明の手法を利用してニュース配信システムのための論理ネットワークを構築し、その論理ネットワーク上でのメッセージ通信を行うための通信ライブラリを「PBTC通信ライブラリ」(PBTC:Partition-Based Tree Construction)と言う。
【0102】
ニュース情報発信者の指示を受けて、ニュース情報の同報配信を行うプログラムを「ニュース発信プログラム」と言う。ニュース情報は、PBTC通信ライブラリを利用してマルチキャストメッセージとして送信される。
【0103】
PBTC通信ライブラリからのニュース情報の受信を待ち、受信時にコンピュータ画面にその情報を表示するプログラムを「ニュース受信プログラム」と言う。
【0104】
PBTC通信ライブラリが利用する定義データを「ネットワーク定義データ」と言う。論理ネットワークの構成に必要なシードサーバントのサーバントIDリストを含む。
【0105】
図10に示すように、本実施形態で使用するサーバント100は、全体を制御する主制御部(制御手段、以下「CPU」とする)101に記憶装置103が接続されている。CPU101には、また、入出力制御部105を介して送受信部107と表示装置109が接続されている。さらに、図示していないが、基本入出力システム(BIOS)などが記憶されるリードオンリーメモリ(ROM)と、プログラム領域とデータ領域を有するランダムアクセスメモリ(RAM)とがCPU101に接続されている。
【0106】
記憶装置103は、ハードディスク、フレキシブルディスク、光ディスク、光磁気ディスクなどのストレージ手段であり、ニュース送信プログラム111、ニュース受信プログラム113、PBTC通信ライブラリ115、ネットワーク定義データ117などが格納されている。
【0107】
図16(a)にネットワーク定義データ117の内容を示す。図16に示すように、ネットワーク定義データ117には、シードサーバントIDと、自サーバントIDと、サーバントID値の値域と、パーティション情報と、スロット情報と、アップ/ダウンサーバント情報とが含まれる。なお、ネットワーク定義データ117の全てを記憶装置103に格納しなくても良い。例えば、シードサーバントIDのみを記憶装置103に格納し、自サーバントID、サーバントID値の値域などはRAM上に保持するとしても良い。
【0108】
また、記憶装置103には、図示していないが、TCP/IPなどの通信プロトコルに従ってデータの送受信が可能なオペレーティングシステム(OS)などが格納されている。
【0109】
ニュース送信のみを行うサーバント100a、ニュース受信及びニュース送信を行うサーバント100b並びにニュース受信のみを行うサーバント100cは、TCP/IPネットワーク120を介してニュースを送受信する。ニュース送信のみを行うサーバント100aには、ニュース受信プログラム113は不要である。ニュース受信のみを行うサーバント100cには、ニュース送信プログラム111は不要である。
【0110】
表示装置109は、ニュース受信プログラムが受信したニュースを表示する。表示装置109には、CRT(陰極線管)ディスプレイ、TFT液晶などの液晶ディスプレイが含まれる。
【0111】
以下に、各プログラムモジュールの処理の流れを示す。
【0112】
(PBTC通信ライブラリ)
1.サーバントの生成依頼を待つ。
【0113】
2.サーバントの生成依頼を受けると以下のスレッドを起動する。
【0114】
・コネクタースレッド
・リスナースレッド
・リンク切断検知スレッド
・ルーティングスレッド
3.ルーティングスレッドは、上位プログラムからのメッセージ送受信の依頼を待つ。
【0115】
(ニュース発信プログラム)
1.PBTC通信ライブラリにサーバント生成依頼を行う。
【0116】
2.利用者からのニュース配信指示を待つ。
【0117】
3.ニュース配信指示を受けたら、ニュース情報をマルチキャストメッセージとしてPBTC通信ライブラリに送信を依頼する。
【0118】
(ニュース受信プログラム)
1.PBTC通信ライブラリにサーバント生成依頼を行う。
【0119】
2.PBTC通信ライブラリにメッセージ受信を依頼する。
【0120】
3.メッセージの受信を待つ。
【0121】
4.メッセージを受信したら、ニュース情報を取り出して、表示装置109の画面に表示する。
【0122】
5.「3.メッセージの受信を待つ。」へ戻る。
【0123】
ニュース配信システムの実施形態について、仮想的な事例を使って具体的に説明する。
【0124】
(実施例の内容)
X社では、社内横断的なニュースを従業員へ配信するために、ニュース配信システムを利用している。ニュース発信を専門とする部署Pから、受信部署S1、S2、・・・へニュース配信を行っている。受信部署の各従業員のコンピュータは、起動時にニュース受信プログラム113が起動するように設定されている。
【0125】
図11に、ニュース配信システムに関わる部分のネットワークの構成を示す。図11に示すように、発信部署Pのネットワークアドレスは192.168.1.0/24、受信部署S1のネットワークアドレスは192.168.11.0/24、受信部署S2のネットワークアドレスは192.168.12.0/24とする。
【0126】
また、発信部署Pでは、ニュース配信の確認を行うためのコンピュータを2台設置しており、常にニュース受信プログラムが起動した状態となっている。なお、以下では、ポート番号は省略して表記する。ニュース配信確認コンピュータのIPアドレスを以下に示す。
【0127】
192.168.1.1
192.168.1.2
これら2台のコンピュータには、論理ネットワークのシードサーバントの役割を持たせる。よって、ネットワーク定義データの内容は、以下のようになっている。
【0128】
SeedServent
192.168.1.1
192.168.1.2
また、PBTCは以下のように調整されている。ダウンリンクの最大数Nは「16」、サーバントIDのIPアドレスとポート番号をそのまま6バイトの整数としてサーバントID値とする。
【0129】
図12に、起動しているコンピュータの部署と、IPアドレスと、用途とを示す。図12に示すように、
発信部署PのIPアドレス192.168.1.1〜192.168.1.2のコンピュータは、ニュース受信コンピュータ兼シードサーバントであり、
発信部署PのIPアドレス192.168.1.3〜192.168.1.4のコンピュータは、ニュース発信コンピュータであり、
受信部署S1のIPアドレス192.168.11.1〜192.168.11.4のコンピュータは、ニュース受信コンピュータであり、
受信部署S2のIPアドレス192.168.12.1〜192.168.12.3のコンピュータも、ニュース受信コンピュータである。
【0130】
図13に、図12に示すコンピュータの論理ネットワークの構成を示す。図13に示すように、
頂点のサーバントは、IPアドレス192.168.1.1のコンピュータのサーバントであり、
IPアドレス192.168.1.1のコンピュータのダウンサーバントは、IPアドレス192.168.1.2, 192.168.11.4, 192.168.12.2のコンピュータのサーバントであり、
IPアドレス192.168.1.2のコンピュータのダウンサーバントは、IPアドレス192.168.1.3, 192.168.1.4のコンピュータのサーバントであり、
IPアドレス192.168.11.4のコンピュータのダウンサーバントは、IPアドレス192.168.11.1〜192.168.11.3のコンピュータのサーバントであり、
IPアドレス192.168.12.2のコンピュータのダウンサーバントは、IPアドレス192.168.12.1, 192.168.12.3のコンピュータのサーバントである。
【0131】
ニュース配信システムの動作を、以下のシナリオ1,2を例にとって説明する。以下では、図13の論理ネットワークが構成されている状況を前提とする。
【0132】
(シナリオ1:ニュース受信コンピュータ[192.168.12.4]の起動)
ニュース受信部署S2に属するニュース受信コンピュータ[192.168.12.4]が起動し、論理ネットワークに参加するまでの動作の流れを以下に示す。
【0133】
1.ニュース受信プログラムが起動し、サーバント[192.168.12.4]が生成される。
【0134】
2.サーバント[192.168.12.4]は、対象サーバントリストに[192.168.1.1]と[192.168.1.2]を設定し(S101)、先頭のシードサーバントであるサーバント[192.168.1.1]のサーバントIDを取り出し(S103)、サーバント[192.168.1.1]に接続し(S105)、自サーバントID[192.168.12.4]を添付した参加要求を送信する(S109)。
【0135】
3.サーバント[192.168.1.1]は、サーバント[192.168.12.4]から参加要求を受信し(S201)、参加要求からサーバント[192.168.12.4]のサーバントIDを取り出し(S203)、サーバント[192.168.12.4]のサーバントID値を使って部分木を更新し(S205)、部分木の値域からパーティションとスロットを再計算し(S207)、サーバント[192.168.12.4]のサーバントID値が属するスロットを求め(S209)、求められたスロットが空か判断し(S211)、求められたスロットに割り当てられているサーバント[192.168.12.2]への接続指示を参加応答として返す(S215)。
【0136】
これによって、サーバント[192.168.1.1]のサーバントID値の値域は
[192.168.1.1, 192.168.12.3]
から
[192.168.1.1, 192.168.12.4]
へ更新される。
【0137】
サーバント[192.168.1.1]のパーティションは
[192.168.0.0, 192.168.15.255]
のままである。
【0138】
そして、図16(b)に示すスロット情報に基づいて、サーバント[192.168.12.4]が属するスロット[192.168.12.0, 192.168.12.255]を求める(S209)。図16(b)に示すように、スロット[192.168.12.0, 192.168.12.255]には既にサーバント[192.168.12.2]が存在する。よって、求められたスロットは空ではないと判断し(S211)、[192.168.12.2]への接続指示を参加応答として返す(S215)。
【0139】
サーバント[192.168.12.4]は、サーバント[192.168.1.1]から参加応答を受信する(S111)。
【0140】
参加応答の内容は「OK」ではないので、参加応答からサーバント[192.168.12.2]のサーバントIDを取り出し、このサーバントIDを新たな対象サーバントIDとし(S115)、サーバント[192.168.12.2]へ接続し(S105)、参加要求を送信する(S109)。
【0141】
サーバント[192.168.12.2]は、サーバント[192.168.12.4]から参加要求を受信し(S201)、参加要求からサーバント[192.168.12.4]のサーバントIDを取り出し(S203)、サーバント[192.168.12.4]のサーバントID値を使って部分木を更新し(S205)、部分木の値域からパーティションとスロットを再計算し(S207)、サーバント[192.168.12.4]のサーバントID値が属するスロットを求め(S209)、求められたスロットが空か判断する(S211)。
【0142】
具体的には、サーバント[192.168.12.2]のサーバントID値の値域は
[192.168.12.1, 192.168.12.3]
から
[192.168.12.1, 192.168.12.4]
へ更新される。
【0143】
サーバント[192.168.12.2]のパーティションは
[192.168.12.0, 192.168.12.15]
のままである。
【0144】
サーバント[192.168.12.4]が属するスロットは空なので、サーバント[192.168.12.2]は、接続OKの参加応答を返す(S213)。この結果、サーバント[192.168.12.4]はサーバント[192.168.12.2]のダウンサーバントとなる。
【0145】
図14に、サーバント[192.168.12.4]がサーバント[192.168.12.2]のダウンサーバントとなった論理ネットワークを示す。
【0146】
このように、サーバントの参加に応じて、論理ネットワークが自律的に構成される。従って、論理ネットワーク全体の構成情報を管理するなどのコストは不要である。
【0147】
(シナリオ2:ニュース発信コンピュータ[192.168.1.4]からのニュース発信)
ニュース発信部署Pに属するニュース発信コンピュータ[192.168.1.4](論理ネットワークに参加ずみ)から、ニュース発信を行った場合の動作の流れを以下に示す。
【0148】
ニュース発信プログラムはサーバント[192.168.1.4]を使って、ニュースをマルチキャストメッセージとして送信する。
【0149】
サーバント[192.168.1.4]は、自己の記憶装置103に格納されているアップ/ダウンサーバント情報(図16(c))に基づいてアップリンクが存在するか調べ(S503)、アップリンクが存在するので、アップサーバント[192.168.1.2]へニュースをマルチキャストメッセージとして送信し(S505)、さらにダウンリンクが存在するか調べ(S507)、ダウンリンクが存在しないので、処理を終了する。
【0150】
サーバント[192.168.1.2]は、ニュース受信プログラムにニュースを渡し(S501)、ローカルの記憶装置103に格納されているアップ/ダウンサーバント情報(図16(d))に基づいてアップリンクが存在するか調べ(S503)、アップリンクが存在するので、アップサーバント[192.168.1.1]へニュースをマルチキャストメッセージとして送信し(S505)、さらにダウンリンクが存在するか調べ(S507)、ダウンリンクが存在するので、ダウンサーバント[192.168.1.3]へニュースを送信する(S509)。
【0151】
なお、サーバント[192.168.1.4]もダウンサーバントに該当するが、サーバント[192.168.1.4]はサーバント[192.168.1.2]が受信したニュースの送信元であるから、当該ニュースを送信する必要はない。このため、サーバント[192.168.1.4]は送信先から除かれる。つまり、ニュースを受信したサーバント[192.168.1.2]は、アップ/ダウンサーバント情報(図16(d))から送信先候補となるサーバントIDを取得するが、その送信先候補から当該ニュースの送信元であるサーバント[192.168.1.4]を除いた残りのサーバントにニュースを送信する。
【0152】
サーバント[192.168.1.1]は、ニュース受信プログラムにニュースを渡し(S501)、ローカルの記憶装置103に格納されているアップ/ダウンサーバント情報(図16(e))に基づいてアップリンクが存在するか調べ(S503)、アップリンクが存在しないのでステップS507へ進み、ダウンリンクが存在するか調べ(S507)、ダウンリンクが存在するので、ダウンサーバントであるサーバント[192.168.11.4]とサーバント[192.168.12.2]へニュースを送信する(S509)。
【0153】
なお、サーバント[192.168.1.2]もダウンサーバントに該当するが、サーバント[192.168.1.2]はサーバント[192.168.1.1]が受信したニュースの送信元であるから、当該ニュースを送信する必要はない。このため、サーバント[192.168.1.2]は送信先から除かれる。つまり、ニュースを受信したサーバント[192.168.1.1]は、アップ/ダウンサーバント情報(図16(e))から送信先候補となるサーバントIDを取得するが、その送信先候補から当該ニュースの送信元であるサーバント[192.168.1.2]を除いた残りのサーバントにニュースを送信する。
【0154】
サーバント[192.168.11.4]は、ニュース受信プログラムにニュースを渡し(S501)、ローカルの記憶装置103に格納されているアップ/ダウンサーバント情報(図16(f))に基づいてアップリンクが存在するか調べ(S503)、アップリンクが存在するが、アップサーバント[192.168.1.1]はメッセージ送信元であるため、かかるアップサーバント[192.168.1.1]にメッセージを送信することなく、ステップS507へ進む。
【0155】
そして、ダウンリンクが存在するか調べ(S507)、ダウンサーバントであるサーバント[192.168.11.1]、[192.168.11.2]、及び[192.168.11.3]へニュースを送信する(S509)。
【0156】
サーバント[192.168.12.2]も、サーバント[192.168.11.4]と同様に、ダウンサーバントに該当するサーバント[192.168.12.1]、[192.168.12.3]、及びサーバント[192.168.12.4]へニュースを送信する(S509)。
【0157】
図15に、マルチキャストメッセージの転送状況を示す。図15に示すように、
サーバント[192.168.1.4]からサーバント[192.168.1.2]へ、
サーバント[192.168.1.2]からサーバント[192.168.1.1],[192.168.1.3]へ、
サーバント[192.168.1.1]からサーバント[192.168.11.4],[192.168.12.2]へ、
サーバント[192.168.11.4]からサーバント[192.168.11.1],[192.168.11.2],[192.168.11.3]へ、
サーバント[192.168.12.2]からサーバント[192.168.12.1],[192.168.12.3],[192.168.12.4]へ、
マルチキャストメッセージが順次、転送される。
【0158】
マルチキャストメッセージを受信した各ニュース受信プログラムは、ニュースを画面上に表示する。
【0159】
このようにして、IPマルチキャスト通信をサポートしていないネットワーク機器であっても、設定・維持のためのコストをかけることなく、またサブネット単位などの物理的なネットワーク構成に依存することなく、マルチキャストが可能となる。
【図面の簡単な説明】
【0160】
【図1】(a)はサーバント、シードサーバントを説明するための図、(b)はアップサーバント、ダウンサーバント、アップリンク、ダウンリンクを説明するための図である。
【図2】サーバントID値の値域、パーティション、パーティションの幅、スロットを説明するための図である。
【図3】(a)は論理ネットワーク構成とそれに対応するサーバントID値、パーティション、スロットを説明し、(b)は一部のサーバントが離脱・リンクが切断した場合について説明するための図である。
【図4】コネクター処理の流れを説明するためのフローチャートである。
【図5】リスナー処理の流れを説明するためのフローチャートである。
【図6】アップリンク切断時の処理の流れを説明するためのフローチャートである。
【図7】ツリー最適化処理の流れを説明するためのフローチャートである。
【図8】マルチキャストメッセージのルーティング処理の流れを説明するためのフローチャートである。
【図9】ユニキャストメッセージのルーティング処理の流れを説明するためのフローチャートである。
【図10】ニュース配信システムのシステム構成を示す図である。
【図11】ニュース配信システムに関わる部分のネットワークの構成を示す図である。
【図12】起動しているコンピュータの部署と、IPアドレスと、用途とを示す図である。
【図13】図12に示すコンピュータの論理ネットワークの構成を示す図である。
【図14】図13に示す論理ネットワークに、サーバント[192.168.12.4]が参加して、サーバント[192.168.12.2]のダウンサーバントとなった論理ネットワークを示す図である。
【図15】図14に示す論理ネットワークにおけるマルチキャストメッセージの転送状況を示す図である。
【図16】(a)はネットワーク定義データを説明し、(b)はスロット情報を説明し、(c)〜(f)はアップ/ダウンサーバント情報を説明するための図である。
【符号の説明】
【0161】
101…主制御部(CPU)
103…記憶装置
105…入出力制御部
107…送受信部
109…表示装置
111…ニュース送信プログラム
113…ニュース受信プログラム
115…PBTC通信ライブラリ
117…ネットワーク定義データ

【特許請求の範囲】
【請求項1】
メッセージを受信したサーバントが、
論理ネットワークにおけるアップリンクの存否と、前記アップリンクのサーバントIDと、ダウンリンクの存否と、前記ダウンリンクのサーバントIDとを記憶するステップと、
受信した前記メッセージを上位アプリケーションにわたすステップと、
前記アップリンクの存否を読み取り、前記アップリンクが存在する場合は前記アップリンクに前記メッセージを送信するステップと、
前記ダウンリンクの存否を読み取り、前記ダウンリンクが存在する場合は前記ダウンリンクに前記メッセージを送信するステップと、
を有するマルチキャストメッセージ送信方法。
【請求項2】
メッセージを受信したサーバントが、
自サーバントIDと、パーティションと、前記パーティションに含まれる各スロットと、アップサーバントと、前記各スロットに属するダウンサーバントが存在する場合は当該ダウンサーバントとを記憶するステップと、
受信した前記メッセージから宛先サーバントIDを読み取るステップと、
前記宛先サーバントIDと前記自サーバントIDとを比較するステップと、
前記宛先サーバントIDと前記自サーバントIDとが一致する場合に、前記メッセージを上位アプリケーションにわたすステップと、
前記宛先サーバントIDと前記自サーバントIDとが一致しない場合に、前記宛先サーバントIDのサーバントID値を求め、前記サーバントID値と前記パーティションとを比較し、
前記サーバントID値が前記パーティションの外の場合は、前記アップサーバントに前記メッセージを送信し、
前記サーバントID値が前記パーティション内である場合は、前記アップサーバントへ前記メッセージを送信することに加えて、前記サーバントID値と前記各スロットとを比較し、前記サーバントID値が属する前記スロットの前記ダウンサーバントに前記メッセージを送信するステップと、
を有するユニキャストメッセージ送信方法。
【請求項3】
メッセージを受信したコンピュータに、
論理ネットワークにおけるアップリンクの存否と、前記アップリンクのサーバントIDと、ダウンリンクの存否と、前記ダウンリンクのサーバントIDとを記憶するステップと、
受信した前記メッセージを上位アプリケーションにわたすステップと、
前記アップリンクの存否を読み取り、前記アップリンクが存在する場合は前記アップリンクに前記メッセージを送信するステップと、
前記ダウンリンクの存否を読み取り、前記ダウンリンクが存在する場合は前記ダウンリンクに前記メッセージを送信するステップと、
を実行させるためのマルチキャストメッセージ送信プログラム。
【請求項4】
メッセージを受信したコンピュータに、
自サーバントIDと、パーティションと、前記パーティションに含まれる各スロットと、アップサーバントと、前記各スロットに属するダウンサーバントが存在する場合は当該ダウンサーバントとを記憶するステップと、
受信した前記メッセージから宛先サーバントIDを読み取るステップと、
前記宛先サーバントIDと前記自サーバントIDとを比較するステップと、
前記宛先サーバントIDと前記自サーバントIDとが一致する場合に、前記メッセージを上位アプリケーションにわたすステップと、
前記宛先サーバントIDと前記自サーバントIDとが一致しない場合に、前記宛先サーバントIDのサーバントID値を求め、前記サーバントID値と前記パーティションとを比較し、
前記サーバントID値が前記パーティションの外の場合は、前記アップサーバントに前記メッセージを送信し、
前記サーバントID値が前記パーティション内である場合は、前記アップサーバントへ前記メッセージを送信することに加えて、前記サーバントID値と前記各スロットとを比較し、前記サーバントID値が属する前記スロットの前記ダウンサーバントに前記メッセージを送信するステップと、
を実行させるためのユニキャストメッセージ送信プログラム。
【請求項5】
メッセージを受信する受信手段と、
論理ネットワークにおけるアップリンクの存否と、前記アップリンクのサーバントIDと、ダウンリンクの存否と、前記ダウンリンクのサーバントIDとを記憶する記憶手段と、
受信した前記メッセージを上位アプリケーションにわたす手段と、
前記アップリンクの存否を読み取るアップリンク読み取り手段と、
前記アップリンクが存在する場合は前記アップリンクに前記メッセージを送信するアップリンク送信手段と、
前記ダウンリンクの存否を読み取るダウンリンク読み取り手段と、
前記ダウンリンクが存在する場合は前記ダウンリンクに前記メッセージを送信するダウンリンク送信手段と、
を有するマルチキャストメッセージ送信装置。
【請求項6】
メッセージを受信する受信手段と、
自サーバントIDと、パーティションと、前記パーティションに含まれる各スロットと、アップサーバントと、前記各スロットに属するダウンサーバントが存在する場合は当該ダウンサーバントとを記憶する記憶手段と、
受信した前記メッセージから宛先サーバントIDを読み取る読み取り手段と、
前記宛先サーバントIDと前記自サーバントIDとを比較する宛先サーバントID・自サーバントID比較手段と、
前記宛先サーバントIDと前記自サーバントIDとが一致する場合に、前記メッセージを上位アプリケーションにわたす手段と、
前記宛先サーバントIDと前記自サーバントIDとが一致しない場合に、前記宛先サーバントIDのサーバントID値を求め、前記サーバントID値と前記パーティションとを比較するサーバントID値・パーティション比較手段と、
前記サーバントID値が前記パーティションの外の場合は、前記アップサーバントに前記メッセージを送信するアップサーバント向け送信手段と、
前記サーバントID値が前記パーティション内である場合は、前記アップサーバントへ前記メッセージを送信することに加えて、前記サーバントID値と前記各スロットとを比較し、前記サーバントID値が属する前記スロットの前記ダウンサーバントに前記メッセージを送信するダウンサーバント向け送信手段と、
を有するユニキャストメッセージ送信装置。


【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate


【公開番号】特開2006−222987(P2006−222987A)
【公開日】平成18年8月24日(2006.8.24)
【国際特許分類】
【出願番号】特願2006−107471(P2006−107471)
【出願日】平成18年4月10日(2006.4.10)
【分割の表示】特願2003−323683(P2003−323683)の分割
【原出願日】平成15年9月16日(2003.9.16)
【出願人】(000155469)株式会社野村総合研究所 (1,067)
【Fターム(参考)】