エージェント = IP Messenger for Windows
サーバ = IP Messenger Exchange Server を意味します。
エージェントは...
起動した時や「更新」ボタンを押したとき、終了するとき、不在モードが変わったときにローカルネットワークと設定されている IP アドレスにメッセージを投げます。
サーバはそのメッセージをキャプチャしてホストリストを作成し、そのエージェントに対してホストリストをこのエージェントに送信します。
これでエージェントは何もしなくても、完全なホストリストを得ることが出来るわけです。
サーバも...
これと同じ原理で、起動したときと一定時間ごとにローカルネットワークと登録されているネットワークにブロードキャストを行います。するとエージェントは返事を返します。
これでサーバは、一定時間毎に最新のホストリストを作成することが出来るわけです。
これが Exchage Server の基本原理です。
つまりサーバは
1. ブロードキャストをしてエージェントを探す
2. エージェントに対してホストリストを送信する
という 2点の仕事しか行っていません。
以下にネットワーク構成を書きましたので動作を解説します。ややこしいので飛ばしてもかまいません。
Exchage Server をお使いになる人は一般的に以下のようなネットワーク構成になると思います。
- Segment A, B, B2 はルータなどでセグメントを分けてある。
- ルータはブロードキャストアドレスを通さない。
- 各セグメントは、互いに UDP/IP のやりとりができる。( ファイアウォールがなく、ルーティングが適切に行われる )
- Segment A には 3 エージェントが Group A として動作しています。
- Segment B には 3 エージェントが Group B として動作しています。
- Segment B2 には 3 エージェントが Group B として動作しています。
- ネットワークはお互いブロードキャストが流れない。
を前提条件として説明します。
※ここでいう
Group は IP Messenger で設定された「グループ」のことです。
Domain というのは Exchange Server が管理しているネットワークの事です。つまりブロードキャストを行いホストリストを作成する対象のネットワークです。
まず以下のように遷移してサーバはユーザを見つけ、ホストリストを配布します、
ネットワークの混雑状況や各エージェントの応答の速さなどで多少前後することがありますが、大体上のように遷移します。
ここで分かることは最後に発見されたグループが一番多く情報を受け取るということです。
エージェントからサーバへ接続するには特別な操作は必要ありません。
・IP Messenger の起動・終了・不在モード変更を行うと自動的メッセージを投げますので、サーバはエージェントからのメッセージを受信したら、ホストリストの
をします。
つまり、接続方法は
- 新規参加 ( IPMSG_BR_ENTRY の送信 ・「更新」ボタンを押す)
- 退場 ( IPMSG_BR_EXIT の送信・IP Messenger を終了させる )
- 不在モード変更 ( IPMSG_BR_ABSENCE の送信 )
の 3 点しかありません。以上のメッセージをサーバが受け取った場合、
サーバの受信メッセージ
| サーバの動作
|
新規参加 ( IPMSG_BR_ENTRY )
| 新規参加したユーザをホストリストに追加する。 新規参加したユーザに対し、IPMSG_ANSENTRY を返信する。 新規参加したユーザに対し、ホストリストを送信する。
|
退場 ( IPMSG_BR_EXIT )
| 退場したユーザをホストリストから削除する。
|
不在モード変更 ( IPMSG_BR_ABSENCE )
| ホストリストにある不在モードを変更したユーザのモードを変更する。
|
の動作を行います。
上記 3. で説明したようにサーバがエージェントへホストリストを送信するタイミングは基本的に
- 新規参加したとき
- 「更新」ボタンを押したとき
だけです。
しかしサーバ側で一定時間ごとにユーザ探索を行うので、そのタイミングでもエージェントへホストリストを送信します。
エージェントは起動時や「更新」ボタンを押したときにローカルと登録されている IP に新規参加を知らせるわけですが、その時自分のホストリストに DialUp 接続のユーザがいた場合には、
5 秒後に再び新規参加を送信する
という機能があります。
エージェントは、
- 最初の新規参加でサーバからホストリストを受け取る
- その 5 秒後に、自分のホストリストに DialUp ユーザがいた場合、彼らに向かって新規参加を知らせる。
- 他のエージェントは新規参加を知る
という動きをするわけです。
つまり全部のエージェントが「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 で設定します。
Ver. 0.1 から
同期機能がサポートされました。この機能は Exchange Server 間でホストリストを交換しあうことが出来ます。
これによって 1台のサーバにエージェントからのアクセスが集中することを防ぐことができます。
※Exchange Server は同期動作でも通常の UDP Port 2425 を使用しますので、ルータなどでパケットがふさがれている場合は、同期することができません。
同期の流れはまず、
- 起動したら他のサーバにホストリストを要求し ( IPMSG_GETLIST )、他のネットワークのホストリストを入手します。
- エージェントの新規参加があった場合、他のサーバに伝えます ( IPMSG_SENDMSG+SENDCHECKOPT )。
- エージェントの退場があった場合、他のサーバに伝えます( IPMSG_SENDMSG+SENDCHECKOPT )。
- エージェントの不在モード変更があった場合、他のサーバに伝えます( IPMSG_SENDMSG+SENDCHECKOPT )。
- 一定間隔で他のサーバにホストリストを要求し、他のネットワークの最新のホストリストを入手します。これは リフレッシュ と同時に行われます。
という風に行われます。エージェントに動きがあった場合に逐次サーバに伝え、一定間隔毎に同期ホストリストをリフレッシュします。
細かい流れは
ここです。
サーバを同期させて動作させる構成としては、以下のようにネットワークに 1 台ずつの構成が考えられます。
次のように、1 台のサーバが 2 つのネットワークを担当させるやり方もあります。
いけない構成
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