在 C# 中为 UDP 帧指定目标 IP 地址时,目标 MAC 地址如何自动更新

How is the destination MAC address automatically updated when the destination IP address is geven for an UDP frame in C#

我试过如下所示的程序:-

 class Program
{
    static IPEndPoint Mypoint = new IPEndPoint(IPAddress.Parse("10.169.20.30"), 8050);
    static IPEndPoint UrPoint = new IPEndPoint(IPAddress.Parse("10.169.20.15"), 8051);
    static UdpClient TxClient;
    static void Main(string[] args)
    {
        int i = 0;
        byte[] data= new byte[1472];
        TxClient = new UdpClient(Mypoint);
        while (i < 500)
        {
            data[i]++;
            try
            {
                TxClient.Send(data, data.Length, UrPoint);
            }
            catch { }
            Console.WriteLine("Sent frame " + ++i + " times\n");

        }
        Console.ReadKey();
    }
}

在此,我向 IP 地址为 10.169.20.15 的系统发送一系列帧。我没有为这个系统提供任何 MAC ID。 但是当我通过 wireshark 查看帧的传输时,我发现目标 MAC Id 自动更新为该系统的 MAC Id。

谁能告诉我这是怎么回事。是系统自动找出IP地址对应的MACid,还是有其他原因。

我问这个问题的原因是,我现在需要使用 UDP 协议与微控制器通信。由于我无法在 C# 中更新目标 MAC 地址,如果我只提供 IP 地址就足够了吗? MAC id 会自动解析吗?

希望问题清楚,感谢您的帮助!!!

编辑:- 我尝试在命令提示符下使用 arp -s ipaddress mac 地址,然后使用 运行 我的程序,但发送的帧仍然没有传输到给定的 mac 地址。

谁能告诉我如何解决这个问题。 感谢您的帮助

简而言之,IP 不关心 MAC 地址,以太网 software/drivers 关心。

IP 层及以上(包括 TCP/UDP)完全独立于较低层。它甚至不知道下面有以太网,也不应该知道(也许它不是以太网?)。 IP 软件只是构建它的数据包并将它们发送到正下方的层,这一层是什么并不重要。这意味着在 IP 级别上没有 MAC 地址的概念,这是一件好事,它允许在没有 MAC 地址的网络上使用 运行 IP。

现在,这个 MAC 地址如何更新为您观察到的正确地址?这其实很简单。网络上的每个设备都知道下一个到数据包目的地的设备,并相应地填充 MAC 源和目的地。每个设备通过填写正确的 MAC 地址在以太网上中继数据包。