(57)【特許請求の範囲】
【請求項１】
音声・画像通信システムにおいて、
一つの通話グループに参加するノードが、第１及び第２の下位ノード接続部を備え、かつ、第１の下位ノード接続部から分岐する第１の側のノードの数を示す第１の値と第２の下位ノード接続部から分岐する第２の側のノードの数を示す第２の値を保持しており、通話グループの各ノードの第１の値と第２の値がほぼ等しくなるようにノードの追加を行うことにより、ノード間の結合が完全２分木構造になるように自律的に接続の調整を行い、
前記通話グループ内の一つのノードが送信したデータが、通話グループ内の全てのノードに、ノードの数の対数に比例した時間内で届くこと、
を特徴とする音声・画像通信システム。
【請求項２】
前記各ノードは、新規ノードの追加を上位のノードから指示されたとき、前記第１又は第２の下位ノード接続部のいずれかにノードが接続されていなければ接続されていない下位ノード接続部に新規ノードを接続し、いずれの下位ノード接続部にもノードが接続されていなければ第１の下位ノード接続部に新規ノードを接続し、いずれの下位ノード接続部にもノードが接続されていれば接続されているノードの数の少ない側に新規ノードを接続することを特徴とする請求項１に記載の音声・画像通信システム。
【請求項３】
全てのノード間で、定期的に上位ノードに対して、当該ノードを含めた下位ノードの合計数を伝え、上位ノードはその合計数を自己の第１及び第２の下位ノード接続部に接続された下位ノードの合計数として保持することを特徴とする請求項１又は請求項２に記載の音声・画像通信システム。
【請求項４】
システムの端末は、前記通話グループ以外に、待機時に参加する待機グループにも参加し、
この待機グループにおいても各ノードは、第１及び第２の下位ノード接続部に接続されたノードの合計数を保持しており、第１及び第２の下位ノード接続部に接続されたノードの数が同じになるようにノードの追加又は削除を行い、
さらに、各ノードは端末の利用者情報を保持しており、通話先を探すとき、待機グループの上位ノードから前記完全２分木構造の下位ノード方向に向かって通話先利用者情報を並列に検索することを特徴とする請求項１ないし請求項３のいずれかに記載の音声・画像通信システム。
【請求項５】
前記各ノードは、二つ上の上位ノードの情報を保持し、通話グループ及び待機グループのノード間で定期的にノード障害を確認する通信を行い、
いずれかのノードに障害が発生したとき、下位ノードがそれを認識し、障害発生ノードの代わりとして、障害を認識したノードが下位ノードを取り出して二つ上の上位ノードに代替ノード候補として伝え、
二つ上の上位ノードは、障害発生ノードと取り出された下位ノードを入れ替えること、
を特徴とする請求項１ないし請求項４のいずれかに記載の音声・画像通信システム。
【請求項６】
前記二つ上の上位ノードは、障害発生ノードに接続されている下位ノードから二つの代替ノード候補を受け取ったとき、早く受け取った候補を障害発生ノードと交換することを特徴とする請求項５に記載の音声・画像通信システム。
【請求項７】
グローバルネットワークに接続されている端末は、ローカルネットワークにある端末の通信を中継するため、ローカルネットワークにある端末の代理オブジェクトを持つことを特徴とする請求項１ないし請求項６のいずれかに記載の音声・画像通信システム。
【請求項８】
ローカルネットワークにある端末が、待機グループに参加するとき、グローバルネットワークの端末内にローカルネットワークにある端末の代理オブジェクトが形成され、この接続時に待機グループを構成するグローバルネットワークの端末が保持する代理オブジェクトの数が、各端末においてほぼ同数となることを特徴とする請求項７に記載の音声・画像通信システム。
【請求項９】
待機グループの各ノードは、第１及び第２の下位ノード内に保持する代理オブジェクトの数を定期的に情報交換で保持し、
上位ノードは、保持する代理オブジェクトの数が少ない下位ノードに代理オブジェクト追加の指示を行い、下位ノードが存在しないときは上位ノード自身に追加すること、
を特徴とする請求項７又は請求項８に記載の音声・画像通信システム。
【請求項１０】
多数のノードを完全２分木構造で結合した音声・画像通信システムにおいて、
前記各ノードは、少なくとも、上位ノードへのＴＣＰ接続部と、第１及び第２の下位ノードへの接続部と、制御プログラムとを有し、少なくとも、第１の下位ノードの重さ情報及び第２の下位ノードの重さ情報を備え、
完全２分木構造でグループを構成する際に、根ノードは、その第１の下位ノード接続部が空であれば新規ノードを第１の下位ノード接続部に接続して第１の下位ノードの重さ情報に"１"を加え、第１の下位ノード接続部が空ではなくかつ第２の下位ノード接続部が空であれば新規ノードを第２の下位ノード接続部に接続して第２の下位ノードの重さ情報に"１"を加え、それ以外で第１の下位ノードの重さ情報が第２の下位ノードの重さ情報以下であるなら、第１の下位ノードに、新規ノードの追加を問い合わせて第１の下位ノードの重さ情報に"１"を加え、第１の下位ノードの重さ情報が第２の下位ノードの重さ情報を超えていれば、第２の下位ノードに、新規ノードの追加を問い合わせて第２の下位ノードの重さ情報に"１"を加えること、
を特徴とする音声・画像通信システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、音声・画像通信システム、特に、インターネットでのＰ２Ｐ技術を発展させた音声・画像通信システムに関する。
【背景技術】
【０００２】
近年、インターネットの普及には目覚しいものがあり、安価な装置で世界中の利用者間で情報交換が可能となっている。特に、Ｐ２Ｐ技術は高価なサーバを使用せずに、大量の「ノード」間で直接情報交換が可能であり、機器の障害による影響の範囲が小さいなどの点で注目されている。
【０００３】
Ｐ２Ｐ技術を用いたシステムとして、従来、ＳＫＹＰＥ、電子黒板システム（非特許文献１参照）、ＢＡＴＯＮ（非特許文献２参照）などが知られている。
【０００４】
ＳＫＹＰＥは、Ｐ２Ｐ技術を使ったＩＰ電話システムであり、サーバを使用することなく、通話料金は無料であり、ファイヤーウォールがあっても使用できる。しかし、通話可能な範囲は５人までであり、大量のノードとの通信はできないという問題点を有している。
【０００５】
電子黒板システムは、Ｐ２Ｐ技術を使った教育支援システムであり、多数のノードを完全２分木構造で結合することにより、大量のノードへ大量のデータを送信することができる。しかし、ノード管理にグループマネージャを使っており、ノード数が多くなると管理が行き届かなくなる可能性があり、単一のデータの１対多のデータ転送に限定され、かつ、グループ内で一つのデータ共有しかできないという問題点を有している。
【０００６】
ＢＡＴＯＮは、平衡２分木構造を用いたＰ２Ｐ検索システムであり、Ｏ（ｌｏｇＮ）の時間でノードの追加、削除、検索が行え、根のノードに負担がかからない。しかし、ノードに含まれるテーブルの維持管理が必要となり、ノードの追加、削除で木を移動するノードが複数必要になる場合があり、短時間の間にこれらが多発すると、木の維持が困難になるという問題点を有している。
【非特許文献１】ＴＣＰを利用した分散ネットワーク環境のための電子黒板システム、情報処理学会論文誌、第４３巻、第１号、１７６〜１８４頁
【非特許文献２】BATON, A Balanced Tree Structure for Peer-to-Peer Networks, Proceedings of the 31st VLDB Conference, pp661-672
【発明の開示】
【発明が解決しようとする課題】
【０００７】
そこで、本発明の目的は、Ｐ２Ｐ技術とインターネットを用いて世界中でリアルタイムで音声・画像を安価に、かつ、ファイヤーウォールを超えて通信できることは勿論、大量のノード間で同時に送受信でき、新規ノードの参加や離脱に柔軟に対処できる音声・画像通信システムを提供することにある。
【課題を解決するための手段】
【０００８】
前記目的を達成するため、第１の発明は、
音声・画像通信システムにおいて、
一つの通話グループに参加するノードが、第１及び第２の下位ノード接続部を備え、かつ、第１の下位ノード接続部から分岐する第１の側のノードの数を示す第１の値と第２の下位ノード接続部から分岐する第２の側のノードの数を示す第２の値を保持しており、通話グループの各ノードの第１の値と第２の値がほぼ等しくなるようにノードの追加を行うことにより、ノード間の結合が完全２分木構造になるように自律的に接続の調整を行い、
前記通話グループ内の一つのノードが送信したデータが、通話グループ内の全てのノードに、ノードの数の対数に比例した時間内で届くこと、
を特徴とする。
【０００９】
また、第２の発明は、
多数のノードを完全２分木構造で結合した音声・画像通信システムにおいて、
前記各ノードは、少なくとも、上位ノードへのＴＣＰ（Transmission Control Protocol）接続部と、第１及び第２の下位ノードへの接続部と、制御プログラムとを有し、少なくとも、第１の下位ノードの重さ情報及び第２の下位ノードの重さ情報を備え、
完全２分木構造でグループを構成する際に、根ノードは、その第１の下位ノード接続部が空であれば新規ノードを第１の下位ノード接続部に接続して第１の下位ノードの重さ情報に"１"を加え、第１の下位ノード接続部が空ではなくかつ第２の下位ノード接続部が空であれば新規ノードを第２の下位ノード接続部に接続して第２の下位ノードの重さ情報に"１"を加え、それ以外で第１の下位ノードの重さ情報が第２の下位ノードの重さ情報以下であるなら、第１の下位ノードに、新規ノードの追加を問い合わせて第１の下位ノードの重さ情報に"１"を加え、第１の下位ノードの重さ情報が第２の下位ノードの重さ情報を超えていれば、第２の下位ノードに、新規ノードの追加を問い合わせて第２の下位ノードの重さ情報に"１"を加えること、
を特徴とする。
【００１０】
本発明に係る音声・画像通信システムにおいては、多数のノードを完全２分木構造で結合しているため、高価なサーバを必要とすることなく、Ｐ２Ｐ技術を発展させたかたちでファイヤーウォールを超えて世界中でリアルタイムで音声・画像を大量のノード間で同時に送受信でき、通話グループ内の全てのノードに、ノードの数の対数に比例した時間内で届く。
【００１１】
しかも、各ノードは上位ノードへのＴＣＰ接続部と、第１及び第２の下位ノードへの接続部とを有し、第１の下位ノードの重さ情報及び第２の下位ノードの重さ情報を備えているため、第１及び第２の下位ノードの重さ情報に基づいて、新規ノードの参加や離脱に柔軟に対処でき、ノードの追加、削除の時間が極めて短時間で済む。また、ノードの離脱時やノードに障害が発生したときに、全体にその影響が及ぶこともない。
【００１２】
ここで、本発明に係る音声・画像通信システムと従来知られているＳＫＹＰＥ、電子黒板システム及びＢＡＴＯＮとの比較を簡単に行う。
【００１３】
ＳＫＹＰＥはＰ２Ｐ技術を使ったＩＰ電話システムである。一つの通話グループに参加できるノード数は図１（Ａ）に示すように５までである。これに対して、本発明に係る通信システムは、図１（Ｂ）に示すように、複数のノードを完全２分木構造で結合したものであり、多数のノードが参加することが可能であり、参加ノード数の対数の時間の遅延で会話することができ、ノードの追加、検索が短時間で処理可能である。
【００１４】
電子黒板システムは、図２（Ａ）に示すように、ノード管理にグループマネージャを使用しており、ノードは完全２分木構造で結合されている。グループマネージャを使用する点で管理が煩雑になる。これに対して、本発明に係る通信システムは、図２（Ｂ）に示すように、各ノードが完全２分木構造で結合されている点は同様であるが、グループマネージャを持つことはなく、全てのノードが自律的に動いており、大量のノードをノード自身が自己管理する形態をとっている。それゆえ、ノードの参加、離脱が多発しても、特定のノードに対する負荷の集中が少ない。
【００１５】
ＢＡＴＯＮは、図３（Ａ）に示すように、平衡２分木構造を用いたＰ２Ｐシステムであり、各ノードが図３（Ｂ）に示す可変長のルーティングテーブルを持つ。それゆえ、該テーブルの維持管理が必要となる。ノードの追加、削除により、木のバランスが崩れたとき、複数のノードの移動が必要になり、このとき、ルーティングテーブルの変更も必要となる。これに対して、本発明に係る通信システムは、図３（Ｃ）に示すデータ構造を持ち、上位ノードへのＴＣＰ接続部と、左側下位ノードへの接続部（ソケット）及び右側下位ノードへの接続部（ソケット）と、制御プログラムとを有し、左側下位ノードの重さ情報及び右側下位ノードの重さ情報を備えている。木を構成するノードを維持するための可変長のデータ構造を持たないので、ノード追加時、離脱時の処理が単純で高速である。処理時間は両者ともＯ（ｌｏｇＮ）ではあるが、ＢＡＴＯＮは複雑である。また、本発明に係る通信システムの場合、ノードの追加、削除で移動するノードは１個で済む。
【発明を実施するための最良の形態】
【００１６】
以下に、本発明に係る音声・画像通信システムの実施例について添付図面を参照して説明する。
【００１７】
（基本的な利用方法）
本通信システムの端末のソフトウエアをパソコンにインストールする。または、端末のソフトウエアがインストールされた端末（携帯端末やブロードバンドルータなど）を用意する。そして、ユーザ登録などの初期設定を行う。ローカルアドレス／グローバルアドレスの区別は、ユーザ側で必要ない。次に、端末を起動する。これにより、端末が「待機状態」になる。ソフトを終了したり、端末の電源を切ったりすると、待機状態を終了する。
【００１８】
（基本的な通話）
待機状態の端末で相手のユーザＩＤ（メールアドレスを用いる）を指定して「呼出し」ボタンをクリックする。相手方が待機状態であれば、相手側端末の呼出し音が出る。または、呼出し状態の表示がでる。もし、話中であれば、呼出し側には話中の表示、受け側には呼出しがあった旨の表示が出る。このとき、呼出し側アドレス通知設定をしていれば、そのアドレスが表示される。
【００１９】
相手側で「通話」ボタンをクリックすると、通話状態になり、テレビ電話通話になる。画像を送信しないボタンを設けてもよい。そして、「切断」ボタンをクリックすると、通話を終了し、端末が待機状態になる。
【００２０】
（グループ通話）
相手を呼び出したとき、話中であれば、呼出し側には話中の表示、受け側には呼出しがあった旨の表示がでる。このとき、呼出し側がユーザＩＤ通知設定をしていれば、そのＩＤが受け側に表示される。ここで、受け側で「通話」ボタンをクリックすると、呼び出した側が会話に加わる。
【００２１】
１グループに参加できる端末（人数）の上限は１００人以上を想定しており、端末の処理速度と端末間通信速度が一定の場合、Ｎを端末数とするとき、Ｏ（ｌｏｇＮ）の遅延時間で会話が可能である。参加端末数が１０から１００に増加したとしても、遅延は２倍で済む。
【００２２】
３人以上の通話状態で、根ノードの端末以外の１人が「切断」ボタンをクリックすると、その利用者だけが通話グループから離脱し、通話を終了する。１対１の通話状態でいずれかが「切断」ボタンをクリックすると、いずれもが通話を終了する。
【００２３】
（転送）
呼び出す側をＡ、転送する側をＢ、転送される側をＣとすると、ＡがＢを呼び出し、Ｂが「通話」ボタンをクリックしてＡとＢが通話する。ＢはＡに依頼されて、ＣのユーザＩＤを指定して「呼出し」ボタンをクリックし、Ｃを呼び出す。このとき、ＢはＡに音声・画像が届かない状態にしておく。
【００２４】
Ｃが「通話」ボタンをクリックしてＢと通話し、Ａと通話する了解が得られれば、ＢはＡに音声・画像が届く状態にする。Ｂが「切断」ボタンをクリックし、Ａ−Ｂ−Ｃの会話グループから離脱することにより、Ａ−Ｃのみの会話となり、転送が成立する。
【００２５】
（本通信システムの要素）
本通信システムにおいて、端末（通話端末ソフト）は図４に示す以下のデータ構造を備えている。
・利用者のユーザＩＤ：電話番号に対応するもので、メールアドレスの使用を想定している。
・通話先キャッシュ：通話先のノードへのポインタ（ユーザＩＤ、ＩＰアドレス、ポート番号の組）の集合で、初期値は空である。
・待機ノード：ＩＰアドレス、ポート番号で識別する。
・通話ノード：ＩＰアドレス、ポート番号で識別する。
・代理オブジェクトの集合：初期値は空である。
・左側（第１）下位ノードの代理オブジェクトの集合のバックアップ：初期値は空である。
・右側（第２）下位ノードの代理オブジェクトの集合のバックアップ：初期値は空である。
・代理オブジェクトへ接続するソケット：初期値は空であり、この端末がローカルネットワークにあるとき使用する。
・代理オブジェクトのバックアップへ接続するソケット：初期値は空であり、この端末がローカルネットワークにあるとき使用する。
・制御プログラム：
【００２６】
（代理オブジェクト）
代理オブジェクトは、ローカルネットワークにある端末（ローカル端末）が本通信システムに参加するとき、グローバルネットワークのいずれかのノードが、ローカルネットワークの端末の代理として、その端末のコンピュータで起動するオブジェクト（プログラム）である。代理オブジェクトによって、ローカルネットワークの端末が、ＮＡＴ／ファイヤーウォールを超えて通話が可能になる。
【００２７】
代理オブジェクトは図５に示す以下のデータ構造を備えている。
・対応するローカルネットワークの端末の利用者のユーザＩＤ：メールアドレスの使用を想定している。
・対応するローカルネットワークの端末が接続されているソケット：
・通話ノード：ＩＰアドレス、ポート番号で識別する。
・制御プログラム：
【００２８】
（待機グループ）
待機グループは、図６に示すように、待機ノードをＴＣＰ接続で完全２分木構造で結合したものである。完全２分木構造とは、どの葉についても、根までの距離が一定に近い構造をいう。
【００２９】
端末が待機状態になると、その待機ノードは待機グループを構成する木のノードになる。ノード間を完全２分木構造に結合する機構については後述する。前記電子黒板システムのようにグループマネージャを使用することはなく、このグループに含まれるノードの数の制限を緩和することができる。節のノードに障害が発生したとき、それを他のノードと置き換えて補修する機能を持つ。この機能についても後述する。
【００３０】
なお、図６において、矢印付きの一点鎖線はノードが矢印の先（二つ上）のノードの情報を保持していることを表す。他の線はＴＣＰ接続を示している。
【００３１】
ここで、待機ノードは図７に示す以下のデータ構造を備えている。
・自分を含むノードへのポインタ：ユーザＩＤを含む。
・上位ノードへのＴＣＰ接続ソケット：根ノードの場合は空である。
・左側下位ノードが接続されたソケット：初期値は空で、葉ノードの場合は空である。
・右側下位ノードが接続されたソケット：初期値は空で、葉ノードの場合は空である。
・二つ上位のノードへのポインタ：ＩＰアドレス、ポート番号を指し、根ノードと根ノードに直接接続したノードの場合は空である。
・左側下位ノードの重さ：左のノードからたどれる全てのノードの数であり、初期値は０である。
・右側下位ノードの重さ：右のノードからたどれる全てのノードの数であり、初期値は０である。
・左側下位ノードが持つ代理オブジェクトの数：初期値は０である。
・右側下位ノードが持つ代理オブジェクトの数：初期値は０である。
・制御プログラム：
【００３２】
（通話グループ）
通話グループは、待機グループのノードのなかで、通話しているノードを、完全２分木構造に結合したものであり、図６と同様の形態で結合している。一つの通話グループ内のノードが送信したデータは、そのグループ内の全てのノードに届く。待機グループ内で、複数の通話グループを構成することが可能である。通話グループの構成方法及び管理方法は前記待機グループと同様に行う。
【００３３】
通話ノードは図８に示す以下のデータ構造を備えている。
・自分を含むノードへのポインタ：ユーザＩＤを含む。
・上位ノードへのＴＣＰ接続ソケット：初期値は空で、根ノードの場合は空である。
・左側下位ノードが接続されたソケット：初期値は空で、葉ノードの場合は空である。
・右側下位ノードが接続されたソケット：初期値は空で、葉ノードの場合は空である。
・二つ上位のノードへのポインタ：ＩＰアドレス、ポート番号を指し、初期値は空である。
・左側下位ノードの重さ：左のノードからたどれる全てのノードの数であり、初期値は０である。
・右側下位ノードの重さ：右のノードからたどれる全てのノードの数であり、初期値は０である。
・制御プログラム：
【００３４】
本通信システムが待機グループと二つの通話グループを構成している場合の例を図９に示す。ここで、端末Ａ〜Ｇがグローバルネットワークの端末で、端末Ｈ，Ｉがローカルネットワークの端末である。グローバルネットワークの端末Ａ〜Ｇの待機ノードが待機グループを構成している。ローカルネットワークの端末Ｈの代理オブジェクトは端末Ｄにあり、そのバックアップが端末Ｂにある。ローカルネットワークの端末Ｉの代理オブジェクトは端末Ｆにあり、そのバックアップが端末Ｃにある。端末Ｂの通話ノードとローカルネットワークの端末Ｈ，Ｉの通話ノードは代理オブジェクトを経由して通話グループ１を構成し、端末Ｂ，Ｈ，Ｉの間で通話が可能となっている。端末Ｃ，Ｆ，Ｇの通話ノードは通話グループ２を構成し、端末Ｃ，Ｆ，Ｇの間で通話が可能となっている。
【００３５】
（待機グループの構成方法）
本通信システムを管理する組織であり、三つの端末をグローバルアドレスで起動し、その待機グループを２分木構造に結合して（初期）待機グループとする。根のノードのＩＰアドレスをインターネットで公開すること、あるいは、間接的に公開することにより、利用者管理を行う。
【００３６】
待機グループに参加している全てのノードは、図１０〜図１２に示すように、一定期間ごとに以下の処理を実行する。
・自分に接続する二つの下位ノードの「重さ」を合計した値に"１"を加えて、自分の重さとし（ステップＳ１６）、その重さを自分が接続する上位ノードに伝える（ステップＳ１）。もし、自分が根である場合（ステップＳ１１でｙｅｓ）、上位ノードに重さを伝えない。下位ノードを持たない場合（ステップＳ１２，Ｓ１４でｙｅｓ）、下位ノードの重さを０とする（ステップＳ１３，Ｓ１５）。
・自分より二つ上位のノードのＩＰアドレスとポート番号を検索し、記憶する（ステップＳ２）。一つ上位のノードに障害が発生した場合、二つ上位のノードと情報交換を行ってグループの状態を修正する。この修正については後述する。根ノードとそれに直接接続されるノードの場合は、「空」を記憶する。
・自分のノードの代理オブジェクトの数を上位ノードに伝える（ステップＳ３）。
・自分のノードの代理オブジェクトの集合を上位ノードに伝え、上位ノードがバックアップする（ステップＳ４）。このとき、対応するローカルノードはバックアップに対するＴＣＰ接続も持つ。
・自分の上位ノードから反応がない場合（Ｓ５，Ｓ２１）、上位ノードに障害が発生したものとし、上位ノードを交換する（ステップＳ２２）。このノード交換処理については後述する。
【００３７】
新たなグローバルアドレスの新規ノードが待機グループに加わるとき、図１３に示す以下の処理を行う。このとき、新規ノードの左右の下位ノードソケットは空となっている。
・待機グループの根ノードに新規ノード追加を問い合わせる。
・任意の待機グループノードに新規ノード追加の問い合わせがあったとき、左側下位ノードソケットが空であるなら（Ｓ３１でｙｅｓ）、新規ノードをそのノードの下位ノードとして左側下位ノードソケットにリンクし（ステップＳ３２）、左の下位ノードの重さに"１"を加える（ステップＳ３３）。それ以外で、右側下位ノードソケットが空であるなら（ステップＳ３４でｙｅｓ）、新規ノードをそのノードの下位ノードとして右側下位ノードソケットにリンクし（ステップＳ３５）、右側下位ノードの重さに"１"を加える（ステップＳ３６）。それ以外で、左側下位ノードの重さが右側下位ノードの重さ以下であるなら（ステップＳ３７でｙｅｓ）、左側下位ノードに、新規ノードの追加を問い合わせ（ステップＳ３８）、左側下位ノードの重さに"１"を加える（ステップＳ３９）。それ以外であれば（ステップＳ３７でｎｏ）、右側下位ノードに、新規ノードの追加を問い合わせ（ステップＳ４０）、右側下位ノードの重さに"１"を加える（ステップＳ４１）。
【００３８】
以上のアルゴリズムによって、新規ノードが加わるとき、完全２分木構造にて結合される。しかも、Ｏ（ｌｏｇＮ）の時間で、新規ノードが待機グループに加わることができる。
【００３９】
待機グループに新たにローカルネットワークの新規端末が加わるとき、以下の処理を行う。即ち、待機グループの根のノードに新規ローカル端末の追加を問い合わせ、根ノードから返事が返ったら、その返事に含まれるＩＰアドレスとポート番号に対してＴＣＰ接続を行う。
【００４０】
任意の待機グループのノードに新規ローカル端末の追加の問い合わせがあったとき、図１４に示す以下の処理を行い、その結果を返送する。
・左右の下位ノードソケットが空であるなら（ステップＳ５１でｙｅｓ）、新規ローカル端末の代理オブジェクトを、自分の代理オブジェクトの集合に加え、代理オブジェクトのＩＰアドレスとポート番号を結果とする（ステップＳ５２）。
・それ以外で、左側下位ノードの代理オブジェクトの数が右側下位ノードの代理オブジェクトの数以下で、かつ、自分の代理オブジェクトの数以下であれば（ステップＳ５３でｙｅｓ）、左側下位ノードに、新規ローカル端末の追加の問い合わせを行う（ステップＳ５４）。
・それ以外で、右側下位ノードの代理オブジェクトの数が自分の代理オブジェクトの数以下であれば（ステップＳ５５でｙｅｓ）、右側下位ノードに、新規ローカル端末の追加の問い合わせを行う（ステップＳ５６）。
・それ以外であれば（ステップＳ５５でｎｏ）、新規ローカル端末の代理オブジェクトを、自分の代理オブジェクトの集合に加え、この代理オブジェクトのＩＰアドレスとポート番号を結果とする（ステップＳ５７）。
【００４１】
以上のアルゴリズムによって、待機グループのノードの代理オブジェクトの数が、どのノードにおいても同じ数に近くなるように追加される。
【００４２】
（相手方の呼出し）
相手方の呼出しは図１５に示す以下の処理を行う。即ち、通話相手方の「ノード検索」を行い（ステップＳ６１）、結果が空であるなら（ステップＳ６２でｙｅｓ）、相手方が見つからない旨を表示し、終了する。そうでなければ、以下の処理を行う。
・自分がグローバルネットワークの端末であれば（ステップＳ６３でｙｅｓ）、相手方の通話ノードを通話グループの根ノードとし、根ノードに対して、自分の通話ノードの接続を試みる（ステップＳ６４）。
・自分がローカルネットワークの端末であれば（ステップＳ６３でｎｏ）、相手方の通話ノードを通話グループの根ノードとし、根ノードに対して、自分の代理オブジェクトの通話ノードの接続を試みる（ステップＳ６５）。
【００４３】
（ノード検索）
ノード検索とは、通話相手方を呼び出すとき、最初に相手方のユーザＩＤを持ったノードがどこに存在するかを検索する処理である。ノード検索は図１６に示すようにして実行される。
・自分の通話先ノードの集合（キャッシュ）のなかに相手方ユーザＩＤを持ったノード情報が格納されているか調べる。格納されていれば（ステップＳ７１でｙｅｓ）、そのノードに接続を試みて（ステップＳ７２）、成功すれば（ステップＳ７３でｙｅｓ）、これを受け側ノードとする（ステップＳ７８）。通話先キャッシュを保持することにより、待機グループにおけるノード検索の負荷が削減される。
・それ以外の場合（ステップＳ７１でｎｏ）、待機ノードグループの根ノードに対して、ノード並列検索を要求する（ステップＳ７４）。結果が空でない場合（ステップＳ７５でｎｏ）、結果を自己の通話先キャッシュに加え（ステップＳ７７）、これを受け側ノードとする（ステップＳ７８）。結果が空である場合（ステップＳ７５でｙｅｓ）、相手方がネットワークに接続していない旨をユーザに伝える（ステップＳ７６）。
【００４４】
任意の待機グループノードに対してノード並列検索が要求されたとき、図１７及び図１８に示す以下の処理（ノード並列検索）を行い、結果を要求したノードに返す。
・検索アドレスが、自分（待機グループのノード）を含むノードのユーザＩＤであれば（ステップＳ８１でｙｅｓ）、自分の通話ノードのＩＰアドレスとポート番号を結果とする（ステップＳ８２，Ｓ９２）。
・検索アドレスが、自分の代理オブジェクト集合のノードのなかにあれば（ステップＳ８３でｙｅｓ）、該ノードのＩＰアドレスとポート番号を結果とする（ステップＳ８４，Ｓ９２）。
・それ以外で、左右いずれの下位ノードソケットも空であるなら（ステップＳ８５でｙｅｓ）、空であることを返す（ステップＳ８６，Ｓ９２）。
・それ以外の場合（ステップＳ８５でｎｏ）、もし、左側下位ノードソケットが空でないなら（ステップＳ８７でｙｅｓ）、左側下位ノードに対してノード並列検索を要求する（ステップＳ８８）。これと並行して右側下位ノードソケットが空でないなら（ステップＳ８９でｙｅｓ）、右側下位ノードに対してノード並列検索を要求する（ステップＳ９０）。
・前記二つの結果が返るのを待つ。左右の下位ノードソケットのいずれかから空でない結果が返った場合、すぐにこれを結果とする。いずれの下位ノードソケットも空であるなら、空を結果とする（ステップＳ９１，Ｓ９２）。
【００４５】
（通話処理）
端末の通話ノードが他のノードから接続要求を受けたとき、以下の処理を行う。
・ユーザに着信音発生／着信表示を行う。
・ユーザが「通話」ボタンをクリックした後、以下に説明する通話グループ構成方法に従って、このノードを根ノードとして、接続要求元ノードをメンバーに持つ通話グループを構成する。
【００４６】
（通話グループ構成方法）
通話グループに参加している全てのノードは、一定期間ごとに以下の処理を行う。
・自分に接続する二つの下位ノードの「重さ」を合計した値に"１"を加えて自分の重さとし、その重さを自分が接続する上位ノードに伝える。自分が根である場合、上位ノードに重さを伝えない。下位ノードを持たない場合は、下位ノードの重さを０とする。
・自分より二つ上位のノードのＩＰアドレスとポート番号を検索し、記憶する。一つ上位のノードに障害が発生した場合、二つ上位のノードと情報交換を行ってグループの状態を修正する。この修正については後述する。根とそれに直接接続されたノードの場合は、「空」を記憶する。
・自分の上位ノードから反応がない場合、上位ノードに障害が発生したものとし、上位ノードを交換する。このノード交換処理についても後述する。
【００４７】
新規ノードが通話グループに加わるとき、以下の処理を行う。この場合、新規ノードの通話ノードの左右の下位ノードソケットは空である。
・通話グループの根の通話ノードに新規ノードの追加を問い合わせる。
・任意の通話グループノードに新規ノードの追加の問い合わせがあったとき、左側下位ノードソケットが空であれば、新規ノードをそのノードの下位ノードとして左側下位ノードソケットにリンクする。
・それ以外で、右側下位ノードソケットが空であれば、新規ノードをそのノードの下位ノードとして右側下位ノードソケットにリンクする。
・それ以外で、左側下位ノードの重さが右側下位ノードの重さ以下であるなら、左側下位ノードに、新規ノードの追加を問い合わせ、左側下位ノードの重さに"１"を加える。
・それ以外であれば、右側下位ノードに、新規ノードの追加を問い合わせ、右側下位ノードの重さに"１"を加える。
【００４８】
以上のアルゴリズムによって、新規ノードが加わるとき、完全２分木構造にて結合される。しかも、Ｏ（ｌｏｇＮ）の時間内で、新規ノードが通話グループに加わることができる。
【００４９】
（代理オブジェクトの通信処理）
代理オブジェクトはローカル端末と一対一で対応している。代理オブジェクトに届いた情報は、そのままローカル端末に伝わり、ローカル端末が発信する情報はそのまま代理オブジェクトに伝わる。このことにより、ローカル端末はグローバルネットワークの端末と同様に通信が行われる。
【００５０】
代理オブジェクトは、これと対応するローカル端末との間で定期的に、生き死に確認などの情報交換を行う。バックアップの代理オブジェクトも、同様にローカル端末と情報交換を行う。代理オブジェクトが反応しなくなったとき、これに対応するローカル端末は、バックアップの代理オブジェクトを新たな代理オブジェクトとする。
【００５１】
バックアップノードも含めて全ての代理オブジェクトから反応がなくなると、待機グループに対してこのローカル端末を新規ローカル端末として追加処理を行う。代理オブジェクトに対応するローカル端末の反応がなくなると、この代理オブジェクトは消滅する。
【００５２】
（ノードの障害対策）
以下に説明するノードの障害対策は、実質的にノード交換処理であり、待機グループ及び通話グループに共通である。
【００５３】
定期的なノード間情報交換時に、上位ノードからの反応がない場合、上位ノードに障害が発生したとして、図１９及び図２０に示す以下のノード交換処理を行う。なお、この交換処理の間に、その二つ上の上位ノードに各種問い合わせがあった場合、これを保留しておき、交換処理が終了した後に問い合わせに対応する。
【００５４】
以下の手順で、二つ上の上位ノードが、二つ上の上位ノードから見ると一つ下位のノード（障害が発生したノード）のＩＰアドレス及びポート番号と新規ノード候補を入手する（ステップＳ１０１）。
・以下に説明する葉ノード取出し処理を行い（ステップＳ１１１）、自分のＩＰアドレス及びポート番号、上位ノードのＩＰアドレス及びポート番号とともに、結果を新規ノード候補として二つ上の上位ノードに伝える（ステップＳ１１２）。
【００５５】
二つ上の上位ノードは、先に受け取った新規ノード候補を新規ノードとする。これに加えて、結果とともに送られてくる障害ノードの左右の下位ノードの情報を入手して、以下に説明する接続変更処理を行う（ステップＳ１０２）。
【００５６】
ノード交換処理により、処理を行った部分で木の重さは一つ減少し、木のバランスが崩れる場合がある。しかしながら、重さの変化が全ノードに反映されるＯ（ｌｏｇＮ）時間後より新たなノードが追加されるとき、重さが軽い部分で木に追加されるため、常に、ノードが完全２分木構造になるように自律的に調整される。
【００５７】
（葉ノード取出し処理）
葉ノード取出し処理は、待機グループ及び通話グループに共通であり、障害発生時でノード置換えのために行われる。即ち、ノードは自ら重い方の枝を繰り返し辿っていき、葉に到達すればその葉を取り出すことで実現できる。
【００５８】
以上のアルゴリズムによって、Ｏ（ｌｏｇＮ）の時間内で葉ノードを取り出すことができる。
【００５９】
（接続変更処理）
図２１及び図２２に示すように、補われるノードをＡ、ノードＡの新規上位ノードをＢ、ノードＡの新規な左側下位ノードをＣ、ノードＡの新規な右側下位ノードをＤとする（ステップＳ１３１）。この場合、ノードＢはノードＡ，Ｃ，ＤのＩＰアドレス及びポート番号を入手する（ステップＳ１３２）。ノードＣ，ＤのＩＰアドレス及びポート番号はノード欠落時にそれぞれ自身からノードＢに通知されている。ノードＡはノードＣ，Ｄそれぞれが葉ノード取出し処理により候補を探し、どちらか早くノードＢに通知されたものである。
【００６０】
ノードＢの左側下位ノードが障害発生ノードの場合、ノードＢの左側下位ノードソケットにノードＡを接続する。ノードＢの右側下位ノードが障害発生ノードの場合、ノードＢの右側下位ノードソケットにノードＡを接続する（ステップＳ１３３）。そして、ノードＢはノードＡにノードＣ，Ｄを引き渡す（ステップＳ１３４）。
【００６１】
次に、ノードＡは左側下位ノードソケットにノードＣを接続し、右側下位ノードソケットにノードＤを接続する（ステップＳ１３５）。ノードＣ，Ｄは空である場合もある。ノードＡ，Ｃが同じ場合は、ノードＡの左側下位ノードを空とする。同様に、ノードＡ，Ｄが同じ場合は、右側下位ノードを空とする（ステップＳ１３６）。
【００６２】
（ノード交換処理）
定期的なノード間情報交換時に、左右いずれかの下位ノードからの反応がない場合、下位ノードに障害が発生したとして、以下のノード交換処理を行う。
・左右の下位ノードのうち、反応のない下位ノードの重さが２以上であるなら、二つ下のノードからノード交換処理の要求が来るのを待ち、その要求が来れば対応する処理を行う。
・そうでない場合、反応のないノードは葉ノードであるので、反応のなくなったノードの代理オブジェクトの集合の自分が持っているバックアップを、代理オブジェクトの集合に加える。
・上下いずれのノードからも反応がない場合、自分を新規モードとして待機グループに加える。
【００６３】
（その他）
家庭用ブロードバンドルータに、本通信システムをインストールすることにより、より安定した通信システムを構成できる。家庭用ブロードバンドルータは、グローバルアドレスを持っており、通常２４時間連続して電源が入っている。
【００６４】
待機グループ内のノード間通信により、自動的にソフトウエアの更新が可能である。待機グループの根ノードの持つ端末と、この端末に障害が発生したときに使う予備の端末をシステム管理組織が管理することにより、ユーザ管理も可能である。また、待機グループをアドレスの種類などで分割することにより、ノード検索の負荷をより小さくすることができる。
【００６５】
通話グループが構成されるとき、呼び出される根のノードで認証などを行うことによって、受信者を制限した通信（放送）を行うことができる。
【図面の簡単な説明】
【００６６】
【図１】（Ａ）はＳＫＹＰＥの基本構造を示す説明図、（Ｂ）は本発明に係る音声・画像通信システムの基本構造を示す説明図である。
【図２】（Ａ）は電子黒板システムの基本構造を示す説明図、（Ｂ）は本発明に係る音声・画像通信システムの基本構造を示す説明図である。
【図３】（Ａ）はＢＡＴＯＮの基本構造を示す説明図、（Ｂ）はＢＡＴＯＮの各ノードが保持するルーティングテーブルのチャート図、（Ｃ）は本発明に係る音声・画像通信システムの各ノードのデータ構造を示す説明図である。
【図４】本発明に係る音声・画像通信システムにおいて、各ノードのデータ構造を示す説明図である。
【図５】本発明に係る音声・画像通信システムにおいて、代理オブジェクトのデータ構造を示す説明図である。
【図６】本発明に係る音声・画像通信システムにおいて、完全２分木構造を示す説明図である。
【図７】本発明に係る音声・画像通信システムにおいて、待機ノードのデータ構造を示す説明図である。
【図８】本発明に係る音声・画像通信システムにおいて、通話ノードのデータ構造を示す説明図である。
【図９】本発明に係る音声・画像通信システムにおいて、９個の端末が待機グループと二つの通話グループを構成している例を示す説明図である。
【図１０】完全２分木構造とするために定期的に行う処理を示すフローチャート図である。
【図１１】左右の重さの合計を上位ノードに伝達する処理を示すフローチャート図である。
【図１２】上位ノードから反応がない場合の処理を示すフローチャート図である。
【図１３】新規ノード追加の処理を示すフローチャート図である。
【図１４】新規ローカルノード追加が問い合わされたときの処理を示すフローチャート図である。
【図１５】相手方の呼出し処理を示すフローチャート図である。
【図１６】ノード検索処理を示すフローチャート図である。
【図１７】ノード並列検索処理を示すフローチャート図である。
【図１８】ノード並列検索処理を示すフローチャート図である。
【図１９】上位ノード交換処理を示すフローチャート図である。
【図２０】障害発生時に新規ノード候補の入手処理を示すフローチャート図である。
【図２１】本発明に係る音声・画像通信システムにおいて、ノードの接続変更処理を示す説明図である。
【図２２】接続変更処理を示すフローチャート図である。
【図１】
0005186624.tif 000002
【図２】
0005186624.tif 000003
【図３】
0005186624.tif 000004
【図４】
0005186624.tif 000005
【図５】
0005186624.tif 000006
【図６】
0005186624.tif 000007
【図７】
0005186624.tif 000008
【図８】
0005186624.tif 000009
【図９】
0005186624.tif 000010
【図１０】
0005186624.tif 000011
【図１１】
0005186624.tif 000012
【図１２】
0005186624.tif 000013
【図１３】
0005186624.tif 000014
【図１４】
0005186624.tif 000015
【図１５】
0005186624.tif 000016
【図１６】
0005186624.tif 000017
【図１７】
0005186624.tif 000018
【図１８】
0005186624.tif 000019
【図１９】
0005186624.tif 000020
【図２０】
0005186624.tif 000021
【図２１】
0005186624.tif 000022
【図２２】
0005186624.tif 000023