问题背景:假设本机ip设为172.29.26.1。自己这有一个cpu,内存到外设的软件仿真环境,有基本的网卡功能,上面跑一个elf格式linux内核。将该仿真环境运行在本地机器上,仿真环境中运行linux内核,给linux内核设定网卡的ip地址为172.29.26.200,mac自定。发现26.200发送arp给本机,本机不回应;本机发送arp给26.200,26.200有arp应答但是本机不更新arp缓存表导致ping不通。
遂写两个小程序测试,发现具体:
比如源ip:172.29.26.200,目的ip(本机ip地址):172.29.26.1
用raw socket写arp发送和接收的程序,通过本地网卡发送arp包给本机ip地址。
接收的程序通过recv()接收不到本地的arp回应。
另一个程序源ip为本机ip地址:172.29.26.1,目的ip:172.29.26.200(本机运行着上面提到的elf格式linux内核)
用raw socket写arp发送和接收的程序,通过本地网卡发送arp包给26.200。
接收的程序通过recv()确实接收到26.200的arp应答包,tcpdump也收到了,但是本地linux并没有更新arp缓存表,仿佛给过滤掉了。
能跟发送和接收arp包都是通过本地网卡有关系么?哪位大牛能帮忙解释下原因?为什么本机都收到arp应答包了仍然获取不到26.200的mac地址?