2

ネットワーク経由で UDP をマイクロコントローラに送信しようとしています。マイクロコントローラは、無駄を省くためにほとんどすべての IP スタックが取り除かれているため、ARP に関与することはできません。マイクロコントローラはブロードキャスト パケットを出力しています。これを受信できるので、その IP アドレスと MAC アドレスがわかります。ブロードキャストUDPパケットを送信できますが、IPアドレスを使用してパケットを送信しようとすると、WiresharkでARPメッセージが表示されます。 micro、18は私のPCです。マイクロは MAC アドレスで応答しないため、パケットを送信できませんが、マイクロが送信しているパケットから MAC アドレスを知っています。

私の質問は、UdpClient を使用して IP アドレスと MAC アドレスを指定できるので、ARP を使用する必要がないということです。他に考慮していないことはありますか?

機能するブロードキャスト メソッドは次のようになります。

myUdpClient.EnableBroadcast = true;
myUdpClient.Connect(IPAddress.Broadcast, port);
myUdpClient.Send(dataBytes, dataBytes.Length);

現在機能していない固定IP方式はこんな感じ

IPEndPoint ep = new IPEndPoint("192.168.1.205", port);
myUdpClient.Send(dataBytes, dataBytes.Length, ep);

私は次のようなものを使用して見てきました

myUdpClient.Client.SendTo(dataBytes, SocketFlags.DontRoute, ep);

しかし、これは機能せず、まだマイクロコントローラーの MAC アドレスを使用していません.. 私のアプリケーションはそれを知っていて、使用する必要があります (私はそう思います)。また、ネットワーク上の一部のARPテーブルが、この情報を含むパケットがそこから送信されているため、MACアドレスがどこを見ているかを知っていることを望んでいました..

注意として、ネットワーク上の他のマイクロコントローラーの負荷を軽減するために、ブロードキャストを最小限に抑えたいと考えています。

前もってありがとう、ガレス

4

1 に答える 1

1

私が見る限り、あなたには 2 つの選択肢があります。他の誰かがもっと多くの選択肢を持っていると確信しています。

  • アプリケーションを起動する前に、OS で静的 ARP エントリを設定します。arp -s <ip> <mac>などは、ほとんどの OS でこれを設定し、IP への以降の要求に対して ARP をバイパスします。

  • Jpcap を使用して IP スタックを完全にバイパスし、独自の raw パケットを構築して送信します。

于 2012-08-07T13:02:53.887 に答える