1. 程式人生 > >當網卡收到一個包的目的地址不是自己的地址時

當網卡收到一個包的目的地址不是自己的地址時

body mac 奇跡 判斷 諸多 gpo style 是不是 路由

當網卡收到一個包的目的不是自己的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的代碼

當網卡收到一個包的目的地址不是自己的地址時