私たちはLinuxを実行する通信インタフェースコンバータを開発しています。
このデバイスはユニキャストまたはマルチキャストIPを受信し、それを他の物理層に変換できます。一方、このデバイスは、最初のデバイスが受信した内容を変更せずにデータを受信し、ユニキャスト/マルチキャストIPを送信します。データはアプリケーション構成に従って送信されます。
また、最初のデバイスには、2番目のデバイスに送信されるいくつかのマルチキャストデータを生成するいくつかの内部機器があります。
私の問題は、tcpdumpを実行したときにのみ2番目のデバイスがこのデバイスからマルチキャストを受信することです。
'tcpdump -i すべてのホスト'
どうなりますか? tcpdumpは何をしますか?
ベストアンサー1
重要な要約:ip link set dev eth0 allmulticast on
問題を解決するには、実行してください(カードの名前の調整)。この問題を正しく修正することは、マルチキャストを認識し、関心のある(IPv4)マルチキャストグループに参加するようにアプリケーションを変更することを意味します。
tcpdump
インターフェイスを置きます。無差別モード特に明記しない限り(-p
)、これはカード(MACアドレス)に特に送信されていない場合でも、システムに見えるすべてのイーサネットフレームを送信することを意味します。tcpdump
追加-p
オプションを使用しても、設定が機能しなくなったことを確認できます。
これに基づいて、これは、インターフェイスがマルチキャストトラフィックを受信するように指示されず、独自のMACアドレスのみを宛先アドレスとして使用するユニキャストイーサネットフレーム(ブロードキャストフレームも含む)のみを受信することを意味します。通常、アプリケーションはIPv4マルチキャストグループに参加するためにソケットオプションを使用する必要があります。ストレス:
setsockopt(5, SOL_IP, IP_ADD_MEMBERSHIP, {imr_multiaddr=inet_addr("239.255.1.5"), imr_interface=inet_addr("192.0.2.2")}, 12) = 0
...他の効果の中でもイーサネットMACにマッピングされたIPハッシュカードの特定のマルチキャストMACテーブルとしてフォーマットします。マルチキャストイーサネットフレームはカードで簡単に認識されます。宛先 MAC アドレスの最初のバイトの下位ビットを最も重要な 1 に設定します。ターゲットMAC電線に送られます。
使用しているすべての(IPv4)マルチキャストグループを事前に知っていて、その数が制限されている場合は、結果を直接計算できます。マルチキャストイーサネットMACアドレス次に、次のようなコマンドを使用してカードのマルチキャストテーブルに直接追加します(239.255.1.5のハッシュ)。
ip maddress add dev eth0 01:00:5e:7f:01:05
これができない場合でも、カードを受信するように設定できます。みんなマルチキャストトラフィック:
ip link set dev eth0 allmulticast on
後で切り替えるとIGMPスヌーピング挿入後、適切なアプリケーションの変更がなければ十分ではありません。
あなたはそれを使用することができますsocat
到着マルチキャストによるテスト。