動作原理

 » 概要 
 » 全体の動作 
 » 個別機能 
» この項目の先頭に戻る
» この文書の先頭に戻る

概要

エージェント = IP Messenger for Windows
サーバ = IP Messenger Exchange Server を意味します。

エージェントは...

起動した時や「更新」ボタンを押したとき、終了するとき、不在モードが変わったときにローカルネットワークと設定されている IP アドレスにメッセージを投げます。

サーバはそのメッセージをキャプチャしてホストリストを作成し、そのエージェントに対してホストリストをこのエージェントに送信します。

これでエージェントは何もしなくても、完全なホストリストを得ることが出来るわけです。

サーバも...

これと同じ原理で、起動したときと一定時間ごとにローカルネットワークと登録されているネットワークにブロードキャストを行います。するとエージェントは返事を返します。

これでサーバは、一定時間毎に最新のホストリストを作成することが出来るわけです。

これが Exchage Server の基本原理です。

つまりサーバは

1. ブロードキャストをしてエージェントを探す
2. エージェントに対してホストリストを送信する

という 2点の仕事しか行っていません。
» この項目の先頭に戻る
» この文書の先頭に戻る

全体の動作

 » 遷移図 ( ネットワーク構成 ) 
 » メッセージの流れとホストリストの構築 ( ユーザの探索 ) 
 » エージェントのサーバ接続 
 » サーバからエージェントへホストリストの送信 
 » エージェントが動的にホストリストを更新するには? 
» この項目の先頭に戻る
» この文書の先頭に戻る

遷移図 ( ネットワーク構成 )

以下にネットワーク構成を書きましたので動作を解説します。ややこしいので飛ばしてもかまいません。

Exchage Server をお使いになる人は一般的に以下のようなネットワーク構成になると思います。

  1. Segment A, B, B2 はルータなどでセグメントを分けてある。
  2. ルータはブロードキャストアドレスを通さない。
  3. 各セグメントは、互いに UDP/IP のやりとりができる。( ファイアウォールがなく、ルーティングが適切に行われる )
  4. Segment A には 3 エージェントが Group A として動作しています。
  5. Segment B には 3 エージェントが Group B として動作しています。
  6. Segment B2 には 3 エージェントが Group B として動作しています。
  7. ネットワークはお互いブロードキャストが流れない。
を前提条件として説明します。

※ここでいう Group は IP Messenger で設定された「グループ」のことです。
Domain というのは Exchange Server が管理しているネットワークの事です。つまりブロードキャストを行いホストリストを作成する対象のネットワークです。



» この項目の先頭に戻る
» この文書の先頭に戻る

メッセージの流れとホストリストの構築 ( ユーザの探索 )

まず以下のように遷移してサーバはユーザを見つけ、ホストリストを配布します、

メッセージの流れ サーバホストリストの内容 Seg.A
Clients GroupA
Seg.B
Clients GroupB
Seg.B2
Clients BroupB
1.Exchage Server-A はローカルネットワークにブロードキャスト 'IPMSG_BR_ENTRY' を行い、ローカルのエージェントを探します。 - GroupA GroupB GroupB
2.その結果 'IPMSG_ANSENTRY' を返信してきた Group A が見つかりました。 Server
GroupA
Server
GroupA
GroupB GroupB
3.そしてこのエージェントたちに 'IPMSG_ANSLIST' でホストリストを送信します。 Server
GroupA
Server
GroupA
GroupB GroupB
4.次に「ブロードキャストエミュレート機能」に設定されたネットワークに 'IPMSG_BR_ENTRY' を送信します。
その結果 Segment B から Group B が見つかりました。
Server
GroupA
GroupB
Server
GroupA
GroupB GroupB
5.そしてこのエージェントたちに 'IPMSG_ANSLIST' でホストリストを送信します。 Server
GroupA
GroupB
Server
GroupA
Server
GroupA
GroupB
GroupB
6. 次に Segment B2 から GroupB が見つかりました。 Server
GroupA
GroupB
Server
GroupA
Server
GroupA
GroupB
Server
GroupA
GroupB

ネットワークの混雑状況や各エージェントの応答の速さなどで多少前後することがありますが、大体上のように遷移します。
ここで分かることは最後に発見されたグループが一番多く情報を受け取るということです。

» この項目の先頭に戻る
» この文書の先頭に戻る

エージェントのサーバ接続

エージェントからサーバへ接続するには特別な操作は必要ありません。
・IP Messenger の起動・終了・不在モード変更を行うと自動的メッセージを投げますので、サーバはエージェントからのメッセージを受信したら、ホストリストの
をします。

つまり、接続方法は
  1. 新規参加 ( IPMSG_BR_ENTRY の送信 ・「更新」ボタンを押す)
  2. 退場 ( IPMSG_BR_EXIT の送信・IP Messenger を終了させる )
  3. 不在モード変更 ( IPMSG_BR_ABSENCE の送信 )
の 3 点しかありません。以上のメッセージをサーバが受け取った場合、

サーバの受信メッセージ サーバの動作
新規参加 ( IPMSG_BR_ENTRY ) 新規参加したユーザをホストリストに追加する。
新規参加したユーザに対し、IPMSG_ANSENTRY を返信する。
新規参加したユーザに対し、ホストリストを送信する。
退場 ( IPMSG_BR_EXIT ) 退場したユーザをホストリストから削除する。
不在モード変更 ( IPMSG_BR_ABSENCE ) ホストリストにある不在モードを変更したユーザのモードを変更する。

の動作を行います。

» この項目の先頭に戻る
» この文書の先頭に戻る

サーバからエージェントへホストリストの送信

上記 3. で説明したようにサーバがエージェントへホストリストを送信するタイミングは基本的に

  1. 新規参加したとき
  2. 「更新」ボタンを押したとき
だけです。
しかしサーバ側で一定時間ごとにユーザ探索を行うので、そのタイミングでもエージェントへホストリストを送信します。

» この項目の先頭に戻る
» この文書の先頭に戻る

エージェントが動的にホストリストを更新するには?

エージェントは起動時や「更新」ボタンを押したときにローカルと登録されている IP に新規参加を知らせるわけですが、その時自分のホストリストに DialUp 接続のユーザがいた場合には、
5 秒後に再び新規参加を送信する
という機能があります。

エージェントは、
  1. 最初の新規参加でサーバからホストリストを受け取る
  2. その 5 秒後に、自分のホストリストに DialUp ユーザがいた場合、彼らに向かって新規参加を知らせる。
  3. 他のエージェントは新規参加を知る
という動きをするわけです。
つまり全部のエージェントが「DialUp 接続のチェックをすれば」、「更新」ボタンを押さなくても動的にホストリストが更新されるわけです。
さらに「不在モード変更」や「終了」などでも DialUp 接続のユーザに対してメッセージを送信するので、「不在モード」や「終了」も動的に更新されます。

» この項目の先頭に戻る
» この文書の先頭に戻る

個別機能

 » ブロードキャストエミュレート機能 
 » グループ別送信機能 
 » リフレッシュ機能 
 » 同期機能 
» この項目の先頭に戻る
» この文書の先頭に戻る

ブロードキャストエミュレート機能

たとえば、
ローカルネットワーク 192.168.0.0 / 255.255.255.0
隣のセグメント-A 192.168.1.0 / 255.255.255.0
隣のセグメント-B 192.168.2.0 / 255.255.255.0

というネットワーク構成で IP Messenger を動作させる場合ブロードキャストが届けば問題ありませんが無い場合は IP アドレスを

192.168.1.1
192.168.1.2
192.168.1.3
:
:
:

と延々指定していくわけですが、Exchange Server では

BroadCast[0] = '192.168.1.0/255.255.255.0'
BroadCast[1] = '192.168.2.0/255.255.255.0'

と設定します。すると

192.168.1.0 〜 192.168.1.255
192.168.2.0 〜 192.168.2.255

へブロードキャストをエミュレートして送信します。実際は

192.168.1.1
192.168.1.2
192.168.1.3
:
:
:

へ送信しています。

※詳しくは IP Messenger Win版の README.TXT
「■ 6. ルータ越えの設定について(LocalNetwork以外へのBroadcast設定)」を参照してください。

» この項目の先頭に戻る
» この文書の先頭に戻る

グループ別送信機能

グループ別送信機能」とは
エージェントが設定しているグループが A だとしたら、サーバはそのエージェントに対して「グループ A」のホストリストしか送らない機能です。

たとえば上図で、Exchange Server-A を「グループ別送信機能を ON 」にしている場合、

Segment -A の Group A は Group A と Server しか見えない。
Segment -B / B2 の Group B は Segment B / B2 の Group B しか見えません。
営業部の人は「営業部グループ」しか見えないとか、技術部は「技術部グループ」しか見えない。というような使い方ができます。

» この項目の先頭に戻る
» この文書の先頭に戻る

リフレッシュ機能

Exchange Server は一定の間隔で
を行います。( 一定間隔のホスト探索 )

これは退場 ( IPMSG_BR_EXIT ) を送信せずに消えたエージェントや退場を取りこぼしした場合にゾンビユーザがホストリストに保持されてしまうからです。
リフレッシュ間隔は ipmsgex.conf の RefreshInterval で設定します。

» この項目の先頭に戻る
» この文書の先頭に戻る

同期機能

同期のメカニズムと構成
同期メッセージ
逐次同期のメッセージ
» この項目の先頭に戻る
» この文書の先頭に戻る

同期のメカニズムと構成

同期の構成 - 1
同期の構成 - 2
同期の構成 - 3
Ver. 0.1 から同期機能がサポートされました。この機能は Exchange Server 間でホストリストを交換しあうことが出来ます。
これによって 1台のサーバにエージェントからのアクセスが集中することを防ぐことができます。

※Exchange Server は同期動作でも通常の UDP Port 2425 を使用しますので、ルータなどでパケットがふさがれている場合は、同期することができません。

同期の流れはまず、
  1. 起動したら他のサーバにホストリストを要求し ( IPMSG_GETLIST )、他のネットワークのホストリストを入手します。
  2. エージェントの新規参加があった場合、他のサーバに伝えます ( IPMSG_SENDMSG+SENDCHECKOPT )。
  3. エージェントの退場があった場合、他のサーバに伝えます( IPMSG_SENDMSG+SENDCHECKOPT )。
  4. エージェントの不在モード変更があった場合、他のサーバに伝えます( IPMSG_SENDMSG+SENDCHECKOPT )。
  5. 一定間隔で他のサーバにホストリストを要求し、他のネットワークの最新のホストリストを入手します。これは リフレッシュ と同時に行われます。
という風に行われます。エージェントに動きがあった場合に逐次サーバに伝え、一定間隔毎に同期ホストリストをリフレッシュします。

細かい流れはここです。

» この項目の先頭に戻る
» この文書の先頭に戻る
同期の構成 - 1
サーバを同期させて動作させる構成としては、以下のようにネットワークに 1 台ずつの構成が考えられます。



» この項目の先頭に戻る
» この文書の先頭に戻る
同期の構成 - 2
次のように、1 台のサーバが 2 つのネットワークを担当させるやり方もあります。



» この項目の先頭に戻る
» この文書の先頭に戻る
同期の構成 - 3
いけない構成

Exchange Server はエージェントとも同期をとることができます。SyncAddr にエージェントの IP アドレスを指定すれば、サーバは起動時と一定間隔で指定した時間でエージェントに対しホストリストを要求します。

もしエージェントが最新のホストリストを保持していれば、サーバが取得するデータも最新になるはずです。

ホストリストの重複の原因になりかねませんのでおやめください。



» この項目の先頭に戻る
» この文書の先頭に戻る

同期メッセージ

サーバ同士が同期を行う方法は二種類あります。
1. IPMSG_GETLIST による一括同期
2. IPMSG_SENDMSG による逐次同期

一括同期は起動時とリフレッシュ時に登録されている SyncAddr に IPMSG_GETLIST を送信し、IPMSG_ANSLIST を受信する事で行います。

逐次同期は IP Messenger から IPMSG_BR_ENTRY, IPMSG_ANSENTRY, IPMSG_BR_ABSENCE,IPMSG_BR_EXIT を受信した時に、そのメッセージを送信したホストの情報を、SyncAddr の Exchange Server に送信して行います。

» この項目の先頭に戻る
» この文書の先頭に戻る

逐次同期のメッセージ

逐次同期のメッセージは IPMSG_SENDMSG+IPMSG_SENDCHECKOPT を用いて通常のメッセージとして送信します。

フォーマットはメッセージの拡張部に以下のメッセージを入れます。

・追加・更新時
( IPMSG_BR_ENTRY, IPMSG_ANSENTRY, IPMSG_BR_ABSENCE 受信時 )

add UserName:HostName:6356995 ( コマンド・オプション番号 ):192.168.0.1:2425:NickName:GroupName

・削除時
( IPMSG_BR_EXIT 受信時 )

del 192.168.0.1:2425

» この項目の先頭に戻る
» この文書の先頭に戻る

Last Updated : 2006-9-13

http://smart-pda.net/isourou/
Copyright © 2006 Mikio Fukushima. All rights reserved.

info@smart-pda.net
( 迷惑メール防止のため @ を大文字にしています。 )

Converted by Outliner