当网卡收到一个包的目的地址不是自己的地址时

Posted honpey

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当网卡收到一个包的目的地址不是自己的地址时相关的知识,希望对你有一定的参考价值。

当网卡收到一个包的目的不是自己的IP

或者问题变成了,多网卡的机器路由选择

机器有两张网卡A和B,我将pingB的包发送给A这个时候是能ping通的,所以这里涉及到一个问题,网卡怎么知道这个数据包是不是自己的?拿到ICMP数据包后会怎么做呢?所以这里就涉及到ICMP协议了xx

这是因为这台机器上所有的网卡都标志了这台机器的身份,所以

那这么说的话,我从树莓派里面去ping我主机上的这些地址其实也是能ping通的shi 。

在树莓派上玩了,确实是这样的,和tap机制一样,当我给与树莓派直连的网卡上

但是无论是从qemu上ping还是从树莓派ping,宿主机上直连的网卡必须与树莓派和宿主机是同一个网段,这里不是很明白啊,为啥一定要是同一个网段的呢?

这里涉及到ARP协议,ARP协议发送的是一个地址的信息;

所以ARP协议接收端发生了啥?

tap0和虚机中的eth0是直连的,但是tap0:192.168.11.3/24, 但是虚机eth0是:192.168.0.110/24,增加了一条路由:route add default eth0,也就是说,其实tap0能收到来自eth0的包,并且实际从tap0上确实也观测到了相关的包,BUT。。。就是ping不同;也就是说掩码只在发送端才有意义,这是个错的之前假设ARP中是不会发送掩码的!这个也是错的么?

当把eth0的掩码换成255.255.0.0 即18的时候,奇迹发生了,这个时候就ping通了,这说明:ARP协议的接受端会判断来的IP地址和自己是不是一个子网(通过自己的IP地址和netmask),如果是那就直接返回了。【ARP接受部分的代码

还有问题宿主机上除了tap0,还有另外一块网卡是enp0s25,这个网卡的IP地址是11.11.11.11/255.255.255.0, 此时从虚拟机中去ping这个地址能ping通么?

答案是:能ping通

直接上wiresharp抓到的包:不方便截图,下次自己手动操作一下吧

 eth0 虚机 <-----> tap0 <-------> enp0s25

监控tap0,发现了:who has 11.11.11.11 tell 192.168.0.110 MAC 地址是86:04:41是tap0的mac地址

也就是说tap0收到了从虚机中eth0中来的包之后,开始在自己的广播域中发起了一条ARP广播,谁的IP地址是11.11.11.11,告诉192.168.0.110,那么都有谁在这个广播域中,问题就来了,我这台机器上有docker0,enp0s25,等等诸多的网卡,是所有人都能听到这个ARP信息么?docker0看不到. 看下arp的代码

 

以上是关于当网卡收到一个包的目的地址不是自己的地址时的主要内容,如果未能解决你的问题,请参考以下文章

当网卡收到的包的目的地址是主机上另一个网卡的地址.arp总结

主机网卡如何处理组播MAC地址

linux网络配置相关杂项

网桥的自学习算法原理

不同局域网内2个电脑MAC地址一样,会影响上网吗?

本机开发时 , 网关进行转发转发的不是本机的IP地址