マルチキャストプログラムについて

解決


noritsuu  2003-08-22 14:00:37  No: 51971  IP: [192.*.*.*]

いつもお世話になっております。
マルチキャストプログラムを作ってルータを介してデータ一斉送信はできましたが、誰が一斉放送しているのかって分からないのでしょうか?
たとえば、
  A
  |
ルータ
 |  |
 B  C

とし、Aがマルチキャストグループアドレスに対してデータ送信すると、ルータはABCにそれぞれデータが送りますが、B、Cは、誰が投げたのか分からない(ルータを経由しているので)。どうやれば、Aが投げてきたってことが分かるのでしょうか?

編集 削除
岡田 之仁  2003-08-24 00:33:09  No: 51972  IP: [192.*.*.*]

私の知人にこの手のプロが居りますので、少々聞いてみたところ・・・
以下をご参照下さい。

世の IP-Multicast は、アドレスグループに所属する
ネットワーク機器に対して一斉配信をする思想で、
Broadcast とも異なります。

Source Node は UDP で投げっぱなしで、
アドレスグループへの参加は Router や Client NODE毎
申告する(しておく)仕組みです。
個別の IP-Address はあまり意識しない実装ですね。
# サーバから片方向のイメージ。

最近は N対Nの考えなどちょっと前進してきていますが、
まだ RFC でもあまり決まっておらず、ネットワーク屋
(and ルータ屋)ががんばらないと普及しない状況です。

ですので、、
source address や data recoverly, authentication などなどは、
アプリケーション層での実装になります。
RFC2327 で SDP(Session Description Protocol)が定義されてます
ので、これをつかい、TCP で Server <--> Client NODE の Session
管理を実装するのが良いでしょう。

# QuickTime や RealServer などもこれ使ってます。

後はルータ屋の世界ですが、IGMP(Internet Group Membership
Protocol) v1/v2/v3で local subnet 上の Client/Server が
どんなアドレスグループに所属するか調べる手立てもあります。
また、RFC 2710では MLD(Multicast Listener Discoverly)も
あります。

どのようなデータを Multicast配信されるかわかりませんが、
RFC 2365, RFC 2770, RFC2373, RFC2375 はさっと目を通し、
もし、
MFTP の仕組みを考えておられるなら OmniCast あたりを
ご覧になるのがいいでしょうね。

と言うことでした。
ストリーミングサーバーのソフト開発を行っている都合上、この手
の話題には、プロがいないことには、どうしようもないので・・・
ご参考になりましたでしょうか。

以上。

編集 削除
noritsuu  2003-08-26 18:16:48  No: 51973  IP: [192.*.*.*]

岡田さん、有難うございます。

マルチキャスト配信のイメージはつかむことが出来ました。
C言語では、このマルチキャストモジュール(winsock)が用意されており、IGMPやSDPを意識する必要もなく、マルチキャストのサンプルプログラム程度ならすぐにできます。

>マルチキャストプログラムを作ってルータを介してデータ一斉送信はできましたが、誰が一斉放送しているのかって分からないのでしょうか?(質問内容が悪くて済みません!!)

という点で困っていましたが、recvfrom関数の引数から送信側IPアドレスを取得できました。
これで、誰から配信されたデータか分かるようになりました。

編集 削除