当C#

时间:2015-05-13 07:42:58

标签: c# udp ethernet

我尝试过如下程序: -

 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地址对应的MAC ID,或者是否有其他原因。

我之所以这样问是因为,我现在需要通过UDP协议与微控制器进行通信。由于我无法在C#中更新目标MAC地址,如果我只提供IP地址就足够了。 MAC Id是否会自动解决?

希望问题很清楚,谢谢你的帮助!

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

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

1 个答案:

答案 0 :(得分:1)

简而言之,IP并不关心MAC地址,以太网软件/驱动程序。

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

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