码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-02-12 20:58:16      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:操作   数据包   docker   自己   网卡   eth0   数据   out   nbsp   

当网卡收到一个包的目的不是自己的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的代码

 

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

标签:操作   数据包   docker   自己   网卡   eth0   数据   out   nbsp   

原文地址:https://www.cnblogs.com/honpey/p/8445388.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!