問題タブ [multicast]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
1463 参照

linux - マルチキャスト + Linux カーネル

Linux カーネルでのマルチキャストに関して 1 つ疑問があります。マルチキャスト データが到着すると、Linux カーネルは MFC をチェックし、一致するエントリが見つからない場合、カーネルは制御メッセージ キャッシュ ミスとヘッダーをユーザー空間に提供します。私の質問は、データ パケットはどうなりますか? 故意に MFC 内にエントリを保持したくないが、転送情報を持つ他のテーブルがあり、そのテーブルを使用したい場合、どうすればよいでしょうか?

よろしく、バビン。

0 投票する
1 に答える
1351 参照

macos - IPv6 マルチキャスト アドレッシング: すべての「グループ ID」は有効/ユーザー割り当て可能と見なされますか?

プログラムのリンクローカル IPv6 マルチキャスト ルーチンで「興味深い」動作が見られます。112 ビットのグループ ID フィールドの上位 16 ビットのいずれかを設定すると、MacOS/X はそれらのマルチキャスト パケットを受け入れなくなります。私の質問は、これは MacOS/X ネットワーク スタックのバグですか、それともグループ ID フィールドの上位 16 ビットを設定するとルーティングの動作に影響する何らかの理由があるのでしょうか?

より具体的な情報は次のとおりです。

  • ある Mac から別の Mac へのマルチキャストは常に機能します (10.5 および 10.6 でテスト済み)。

  • Linux から Windows へのマルチキャストは常に機能します

  • Mac から Windows、Windows から Mac、または Linux から Mac へのマルチキャストは、マルチキャスト アドレスのグループ ID の上位 16 ビットがゼロに設定されている場合にのみ機能します。例えば:

  • ff02::666 作品
  • ff02:0:ffff::666 は動作します
  • ff02:1::666 は機能しません
  • ff02:8000::666 は機能しません

    • 「動作しない」場合、Mac で実行されている WireShark は、Mac がマルチキャスト パケットを受信したことを示しますが、それらのパケットは Mac 上の受信アプリケーションに渡されません。これは、Mac のネットワーク スタックにバグがあるということですか、それとも、私が気付いていないマルチキャスト アドレッシングのより深い魔法があるということですか?
  • 0 投票する
    2 に答える
    2188 参照

    c# - C# UDP マルチキャスト ソケット - リンク障害の処理方法

    私は UDP マルチキャスト ライブラリに取り組んでおり、リンク障害、NIC ケーブルの切断/再接続などを適切に処理する方法について質問を受けました。

    私のテストでは、次の設定があります。

    • 2 つのサーバー sA および sB
    • sA は UDP マルチキャスト データを送信しており、sB はマルチキャスト データを受信して​​います。
    • サーバは、レイヤ 2 Cisco ギガビット スイッチを介して接続されています

    例として、sB のマルチキャスト グループに参加すると、sA のマルチキャスト パケットからそのソケットでデータを受信し始めます。

    ここで、マルチキャスト レシーバー sB がバインドされている NIC を無効化/プラグを抜くと、ソケット レベルのエラー (Socket.ReceiveAsync など) を受信しません。マルチキャスト受信者がバインドされている IP が使用できなくなると、何らかの通知/例外が発生します。

    とにかく、その NIC を再度有効にすると、送信者がまだ同じマルチキャスト グループで送信しているにもかかわらず、それ以上データを受信しません。ハードウェア リンク障害の後に、カーネルがマルチキャスト グループへの再参加を実際に処理することを期待していましたが、そうではないようです。ただし、ソケット レベルのエラーも発生していないため、マルチキャスト レシーバーのリンク障害を検出する方法がよくわかりません。カーネルがマルチキャスト グループに再参加するために設定する必要がある特定のソケット オプションはありますか? これまでに思いついた唯一のオプションは、System.Net.NetworkInformation.NetworkChange.NetworkAddressChanged イベントをリッスンし、バインドする必要があるローカル IP が再び利用可能になったという通知を受け取ったときに再バインドを試みることです。他のマルチキャスト アプリケーションはそのシナリオをどのように処理していますか?

    ありがとう、

    トム

    0 投票する
    1 に答える
    1014 参照

    applet - OpenSUSEマルチキャストが機能していませんか?

    信頼できるJavaアプレット<->を介してOpenSuSEでマルチキャストDNSを実行しようとしていますが、ネットワーク上で何かを見つけようとすると、サイレントにブロックされます。何が問題なのですか?

    0 投票する
    1 に答える
    923 参照

    c# - C# UDP デコード データグラムがランダムに失敗する

    マルチスレッド アプリケーションで問題が発生しており、過去 3 日間デバッグしてきましたが、問題を解決できません。これを書いているのは、これを入力するときに DUH の瞬間があるか、誰かが私が提供するコード スニペットに明らかな何かを見つけてくれることを願ってです。何が起こっているかは次のとおりです。

    私は新しい UDP ネットワーク ライブラリに取り組んでおり、UDP データグラムを複数の受信アプリケーションにマルチキャストするデータ プロデューサーを持っています。送信者は、別々の UDP マルチキャスト アドレスと別々のポートにバインドされた 2 つの異なるソケットで送信します。受信側アプリケーションも 2 つのソケットを作成し、それぞれを送信側のマルチキャスト アドレス/ポートの 1 つにバインドします。

    レシーバーがデータグラムを受信すると、それを MemoryStream のバッファーからコピーし、それをスレッド セーフ キューに入れます。別のスレッドがそれを読み取り、MemoryStream からデータをデコードします。

    どちらのソケットにも独自のキューがあります。

    今起こっていることは本当に奇妙です。それはランダムに発生し、再現性がなく、複数の受信アプリケーションを実行すると、時々ランダムに発生するのはそのうちの 1 つだけです。

    基本的に、MemoryStream をキューから読み取るスレッドは、ReadInt32() などの BinaryReader を介して読み取り、それによってデータをデコードします。ただし、時々、データを読み取るときに、読み取ったデータが正しくありません。たとえば、送信者が決してエンコードしない負の整数です。

    ただし、前述のように、受信アプリケーションの 1 つでのみデコードが失敗し、他のアプリケーションではデータグラムが正常にデコードされます。おそらくUDPデータグラムにバイト破損か何かがあると言うかもしれませんが、入ってくるすべてのデータグラムをログに記録し、すべての受信者でそれらを比較したところ、すべてのアプリケーションが受信したデータグラムは完全に同一です. デコードに失敗したデータグラムをディスクにダンプし、それを読み取ってデコーダーを実行する単体テストを作成すると、問題なくデコードされます。また、デコーダーの周りに try/catch をラップし、キャッチ内の MemoryStream の位置をリセットして、デコーダーを再度実行すると、正常にデコードされます。さらに奇妙なことに、これは両方のソケットをバインドして送信者からデータを読み取るときにのみ発生します。

    何が起こっているのかに対応するコードを次に示します。

    これは、ソケットの受信コールバックです。

    データをデコードするスタブ コードを次に示します。

    catch{} の部分で、MemoryStream.Position を 0 にリセットして同じメソッドを再度呼び出すだけで、次回は問題なく動作することがわかりますか? この時点で私は本当にアイデアがありません。残念ながら、これを書いているDUHの瞬間はありませんでした。何が起こっているのか、またはこれをトラブルシューティングするために他に何ができるのか、誰にも何か考えがありますか?

    ありがとう、

    トム

    0 投票する
    6 に答える
    12212 参照

    c# - UDPマルチキャスト伝送速度を調整するには、.NETアプリでマイクロ秒の遅延が必要です

    私はC#でUDPマルチキャストクライアント/サーバーペアを作成していますが、サーバーの伝送速度を調整するには、50〜100 µsec(マイクロ秒)のオーダーの遅延が必要です。これは、重大なパケット損失を回避するのに役立ち、ディスクI/Oバウンドのクライアントに過負荷をかけないようにするのにも役立ちます。Thread.SleepまたはThread.SpinWaitを提案しないでください。どちらかが必要かどうかは尋ねません。

    私が最初に考えたのは、ある種の高性能カウンターを使用して、経過時間をチェックする単純なwhile()ループを実行することでしたが、それは厄介だと感じるので避けたいと思います。それはまた、サーバープロセスのCPU使用率を固定しませんか?

    クロスプラットフォームソリューションのボーナスポイント、つまりWindows固有ではありません。よろしくお願いします!

    0 投票する
    2 に答える
    750 参照

    jboss - マルチキャストを介したJBOSSAppServerとクライアント間の通信

    JBOSSは初めてです。JGroupsを使用してマルチキャストチャネルを介してAS内から通信するmBeanを作成しようとしています。mBeanで使用しているコードは以下のとおりです...

    }

    }

    チャネルでリッスンしているクライアントも作成しましたが、2つは通信していません..チャネルのXMLは次のとおりです..

    私はこれにいくらかのネクタイを費やし、これを理解しようとしているので、どんな助けでも大歓迎です。通信には他のメカニズムを使用したいのですが、マルチキャストの使用に限定されています...長い話です。

    ありがとう!!!

    〜ボルト

    0 投票する
    2 に答える
    3645 参照

    c# - 負荷がかかった UDP マルチキャストのパフォーマンス

    単一受信者、単一送信者のシナリオで UDP マルチキャストを使用する単純な C# アプリケーションがあります。目標は、ローカル ネットワーク環境でできるだけ速くメッセージを配信することです。

    SocketAsyncEventArgs/SendAsync/ReceiveAsync、BeginSend/BeginReceive、Threads/Send/Receive を使用し、PGM と UDP マルチキャストの両方を試しました。

    各実装の試行は、ローカル送信、ローカル受信で最大約 1000 件のメッセージを繰り返し配信する場合に問題なく機能します。その後、パフォーマンスは指数関数的に低下し始めます。1,000 件のメッセージには 100 分の数秒かかりますが、10,000 件のメッセージには 2 ~ 10 秒かかります。

    高性能 UDP/PGM マルチキャストの経験がある人はいますか? 最大のスループットを得るための最適な設計は何ですか?

    アップデート

    現時点では、ローカルで実行されているプログラムは 1 つだけです。つまり、1 つの送信側と 1 つの受信側を持つ 1 つのアプリケーションです。テスト メッセージは 4 バイトです。

    0 投票する
    1 に答える
    1547 参照

    vb.net - TCP/IP ソケットを使用して VB.NET で複数の IP にデータを送信するにはどうすればよいですか?

    IP アドレスの配列があり、それらすべてに同じデータを送信したいと考えています。データを送信するループ コードを送信することもできますが、もっと良い方法があると思います。

    マルチキャストについて聞いたことがありますが、正確には何ですか? 必要だと思うけど、どうやって使うの?

    0 投票する
    1 に答える
    1743 参照

    linux - マルチキャスト IP アドレス - recvfrom の呼び出しでブロックされました

    私は単純なマルチキャスト アプリケーションを作成しています。私はローカルホストで実行するつもりです。

    私は次のことをしました:

    実際のコードでは、すべてのシステム コールの戻り値をチェックしています。問題は、recvfrom が戻らないことです。プロセスは、recvfrom の呼び出しでブロックされたままになります。

    異なるシェルでプログラムの 2 つのインスタンスを実行しようとしました。それは役に立ちません。

    また、ループバック フラグを 0 に設定しようとしましたが、役に立ちません。

    両方のプログラムを localhost から実行したい。

    私が使用しているマルチキャスト アドレスは、本から見た 239.255.1.2 です。必要な setsockopt 呼び出しを行っているため、任意のクラス D アドレスを使用できると思います。

    ポート 1025 で接続中

    Linuxカーネル2.6.25を実行しています

    また、マルチキャスト サポートがカーネルにコンパイルされているかどうかを確認する方法も教えてください。

    更新

    シェルで route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0 を実行しました。それでも問題は存在します。