一些上下文信息:

我正在用FPGA实现以太网通信 . FPGA没有实现ARP和其他协议如icmp for ping,它只是发送和接收UDP数据包 . 为了在FPGA上实现以太网接收功能,我正在用C#编写一个程序来发送数据包,然后从FPGA中读取答案(如果我的接收功能正在工作,FPGA应该发送相同的数据包) . 它是FPGA与计算机之间的点对点连接,无交换机或路由器 .

现在问题:如果我尝试发送到正常网络(与其他计算机,200.200.200.x),现有或不是IP,一切都很好,wireshark显示数据包已发送 . 但是,如果我尝试使用我的FPGA发送到网络,192.168.25.x(192.168.25.25是FPGA),我看到没有数据包发送到wireshark .

我做了什么 :

  • 我为FPGA添加了一个静态arp条目:
arp -s 192.168.25.25 00-00-DE-AD-BE-EF
  • 我为FPGA添加了一个静态arp条目 .

  • 试图添加静态路由,然后将其删除,好吧,路由播放很多(顺便说一下,我的PC网络接口是192.168.25.10):

route add 192.168.25.25 192.168.25.10
  • 设置Windows防火墙以允许此应用程序上的UDP流量

现在的程序,在C#中(删除了windows窗体GUI,不要膨胀帖子,我只保留网络细节 . 无论如何,我们知道程序工作一般,我们只是调试网络):

using System.Net;
using System.Net.Sockets;


Socket udpSocket;    
udpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
udpSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.DontRoute, true);
ipDestinationEndPoint = new IPEndPoint(IPAddress.Parse("192.168.25.25"), 4096);
ipLocalEndPoint = new IPEndPoint(IPAddress.Parse("192.168.25.10"), 4096);
udpSocket.Bind(ipLocalEndPoint);
udpSocket.SendTo(data, ipDestinationEndPoint);// (data is a byte array defined earlier)

编辑:当我检查Windows适配器统计信息时,它显示一些数据包已经发送,netstat也显示它,该数据包是通过正确的接口发送的 . 但是wireshark没有显示任何内容,当我将示波器的探针连接到我的phy(FPGA端)上的接收线时,我什么都没看到 .