質問: udpのマルチキャストについて。 趣味でネットワークゲームを作成しているのですが、質問があります。 リアルタイム性が強く比較的失われても構わない情報をudp通信にてlinuxサーバーから複数のクライントに送信しています。 今回、このようなケースの場合マルチキャストを利用するとネットワーク負担が減るのではないか?と考えました。 そこで調べてみたのですが、サンプルがどれも同一ネットワーク内のものばかりです。 動画配信などで利用されているという記事を見たのでできると考えているのですが、実際問題どうなのでしょうか? またルーターを超える場合はルーターが対応していなければならないと知りました。 知りたい内容は以下です。 ・一般家庭にあるルーターはマルチキャストに対応しているのかどうか? ・そもそものマルチキャストの考え方はあっているのか? ・もし対応していないルーターがあった場合このようなシステムを利用しているプログラムはどうしているのか? 用語を知ったばかりで的を外れた質問をしていたらすいません。 自分でも調べてみますが、参考urlや用語などをいただけると大変助かります。 よろしくお願いいたします。
回答: マルチキャスト通信が可能なのは、事実上、次のいずれかの場合です。 1. 同一lan内の通信 同一lan(ブロードキャストドメイン)内のマルチキャスト通信は、きちんと動作することが多いので、upnpやdlnaといったアプリケーションをはじめとして、それなりに使われています。マルチキャスト通信の例が同一lan内のものが多いは。このためです。 ちなみに、同一lan内の場合、マルチキャストといいつつほぼブロードキャストと同じ通信になっています。つまり、lan内の誰かがマルチキャストパケットを送出すると、同じlan内の全端末にそれが届きます。 (マルチキャストグループにjoinしていない端末にパケットが届いても捨てられる) 2. 明示的にマルチキャスト通信が可能なように構築されたipネットワーク ルータを超えて(≒異なるlanの端末同士で)マルチキャスト通信をするには、ルータにマルチキャストをルーティングする機能が必要です。ユニキャストをルーティングできないルータは無いと思いますが、マルチキャストをルーティングできないルータは多いです。インターネット上のルータは、できない(しない)ものが圧倒的に多いので、インターネットに接続した端末同士が自由にマルチキャスト通信することはできません。 企業や大学のイントラネット内や、特定プロバイダ内部の通信に限り、できるように構築されている場合がありますが、できないネットワークのほうが圧倒的に多いですし、できる場合でもユーザ同士が自由にマルチキャスト通信できないように制限していることが多いです。 できないようになっている理由は詳しく述べませんが、マルチキャスト通信が可能なネットワークを構築・運用すること自体に高度な技術を要することが理由の一つです。特に、インターネットのような超巨大なネットワークで、ユーザ同士のマルチキャスト通信を安定して行えるような決定的な技術はまだ無いと思います。 > 動画配信などで利用されているという記事を見たので > できると考えているのですが、実際問題どうなのでしょうか? 上述のように、マルチキャスト通信が可能のように構築されたネットワーク内に限り、マルチキャストの動画配信が行われているのが実情です。 > ・一般家庭にあるルーターはマルチキャストに対応しているのかどうか? 対応するものはほとんどありません。 マルチキャストによる動画配信サービスを、自社のユーザに対して行っているプロバイダから提供される(宅内)ルータは、限定的に対応していると言えますが、それでも、ユーザ同士のマルチキャスト通信はできない場合が多いです。 > ・そもそものマルチキャストの考え方はあっているのか? あっていると言えると思います。ただし、同一lan内を除き、マルチキャスト通信が可能なように構築されたネットワークは少数であるのが実情です。 > ・もし対応していないルーターがあった場合このような > システムを利用しているプログラムはどうしているのか? これまで述べてきたように、そもそもマルチキャスト通信できるケースがきわめて限定されるため、「一部の端末同士はマルチキャストが通るが、一部は通らない」という事態を想定して作られているプログラムはほとんどないでしょう。次のいずれかに分類されると思います。 - 同一lan内や、マルチキャスト通信可能のように構築されたネットワーク内だけで使用することが前提で作られているプログラム ⇒マルチキャストを完全にサポートする特定ネットワーク専用 - そもそもマルチキャストを使用しないように作られているプログラム ⇒インターネット上で利用されているのはこっち。