我尝试过如下程序: -
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地址。
有谁能告诉我如何解决这个问题。 谢谢你的帮助
答案 0 :(得分:1)
简而言之,IP并不关心MAC地址,以太网软件/驱动程序。
IP层及以上(包括TCP / UDP)完全独立于较低层。它甚至不知道以太网在下面,它不应该(也许它不是以太网?)。用于IP的软件只是构建其数据包并将它们发送到下面的层,并且这个层的含义并不重要。这意味着IP级别上没有MAC地址的概念,这是一件好事,它允许在没有MAC地址的网络上运行IP。
现在,如您所观察到的,该MAC地址如何更新为正确的MAC地址?这其实很简单。网络上的每个设备都知道下一个朝向数据包目的地的设备,并相应地填充MAC源和目的地。每个设备通过填充正确的MAC地址来中继以太网上的数据包。