マルチキャスト(UDP)ソケットをバインドするとはどういう意味ですか?
質問内容
私は、複数のネットワークインターフェイスを持つホスト間でマルチキャスト UDP を使用しています。 boost::asioを使用していますが、受信者が行わなければならない2つの操作(bindとjoin-group)に困惑しています。
参加するすべてのマルチキャストグループでそうしているのに、なぜバインド中にインターフェイスのローカルアドレスを指定する必要があるのでしょうか?
姉妹問題で、マルチキャストポートに関しても質問があります。送信時に、マルチキャストアドレスとポートに送信するので、なぜ、マルチキャスト グループへの加入時に、ポートではなく、アドレスだけを指定するのでしょうか - ポートは、バインドするための混乱した呼び出しで指定されます。
注意: "join-group"は
setsockopt(IP_ADD_MEMBERSHIP)
のラッパーで、ドキュメントにあるように、異なるグループ (異なるネットワーク上?) に加入するために同じソケット上で複数回呼び出される可能性があります。したがって、バインド呼び出しを省略して、グループにサブスクライブするたびにポートを指定することは完全に理にかなっています。
私が見たところ、常に "0.0.0.0" にバインドし、グループに参加するときにインターフェース アドレスを指定することは、非常によく機能します。混乱しました。
どのように解決するのですか?
マルチキャスト受信時にUDPソケットをバインドするとは、データを受信するアドレスとポートを指定することです(TCPアクセプタバインドのようなローカルインタフェースではありません)。このとき指定するアドレスは フィルタリング の役割を持ちます。つまり、ソケットはそのマルチキャストアドレスとポートに送られたデータグラムのみを受信し、その後にどのグループがソケットに参加したかは関係ありません。これは、INADDR_ANY (0.0.0.0) にバインドすると、私のマルチキャスト グループに送られたデータグラムを受信し、一方、ローカル インターフェイスのいずれかにバインドすると、データグラムがそのインターフェースが対応するネットワーク上で送信されているにもかかわらず、何も受信しない理由を説明します。
UNIX® ネットワーク プログラミング第 1 巻、第 3 版より引用。W.R Stevens 著「The Sockets Networking API」からの引用です。 21.10. 送信と受信
[...] 受信側ソケットにマルチキャストグループと ポート、例えば 239.255.1.2 ポート 8888 をバインドしてほしいのです。(単に をバインドすることもできますが、マルチキャストアドレスをバインドすると ポート8888を宛先とする他のデータグラムをソケットが受信できないようにします。 を受信できないようにします)。次に、受信側ソケットに をマルチキャストグループに参加させます。送信側ソケットは、このマルチキャストアドレスとポートにデータグラムを送信します。 この同じマルチキャストアドレスとポート、例えば239.255.1.2ポート8888にデータグラムを送信します。
関連
-
[解決済み] ai_socktypeではServnameはサポートされません。
-
[解決済み] クライアントソケットアプリケーションは、同じホストコンピュータ上のサーバーアプリケーションをどのように識別するのでしょうか
-
[解決済み] コネクション・リセット・バイ・ピア」とはどういう意味ですか?
-
[解決済み] JavaScriptの「bind」メソッドの使い方を教えてください。
-
[解決済み] TCPソケットとWebソケットの違い、もう一回 [重複].
-
[解決済み] TCP:2つの異なるソケットでポートを共有することができますか?
-
[解決済み] ネットワークプログラミングにおけるストリームとデータグラムの違いは何ですか?
-
[解決済み] TCPソケットとUDPソケットは同じポートを使用することができますか?
-
[解決済み] TCPコネクションをオープンにしておくためにハートビートは必要ですか?
-
[解決済み] TCPオプションSO_LINGER(0)はいつ必要ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ai_socktypeではServnameはサポートされません。
-
[解決済み] クライアントソケットアプリケーションは、同じホストコンピュータ上のサーバーアプリケーションをどのように識別するのでしょうか
-
[解決済み] ソケットプログラミングのためのINADDR_ANYの理解
-
[解決済み] TCP:2つの異なるソケットでポートを共有することができますか?
-
[解決済み] ネットワークプログラミングにおけるストリームとデータグラムの違いは何ですか?
-
[解決済み] TCPループバック接続とUnixドメインソケットの性能比較
-
[解決済み] TCPソケットとUDPソケットは同じポートを使用することができますか?
-
[解決済み] TCPコネクションをオープンにしておくためにハートビートは必要ですか?
-
[解決済み] TCPオプションSO_LINGER(0)はいつ必要ですか?
-
[解決済み] Chromeが一定量のデータ転送後にハングアップする - 利用可能なソケットを待つ