vm1:eth0=192.168.1.10/24, eth1=192.168.56.10/24
vm2:eth0=192.168.1.11/24
问几个关于本地网络最本质的问题:
为什么在vm1本地上ping自己的地址,不管是ping 1.10还是56.10, tcpdump -p icmp 都收不到任何流量?
理论上来说这俩网卡属于2个子网,那么ARP 层面需要网关处理吗,ARP层面是怎么获取的呢,也就是说smac和dmac分别是啥呢,截取不到所以也没法看到
在vm2上没加指定路由的情况下,从vm2直接ping 192.168.56.10并不通,但是为什么可以直接arping 192.168.56.10呢,得到的响应告诉vm1 192.168.56.104的mac地址你写我192.168.1.10的mac地址就行。这里的arp代理过程是怎么样的呢,跟实际的router有什么区别呢?加上路由后,vm2 ping 56.10时
下面三段的smac和dmac分别是怎么样呢?
a、vm2.eth0--->vm1.eth0: smac=vm2.eth0.mac dmac=vm1.eth0.mac?
b、vm1.eth0--->vm1.eth1: smac and dmac? 我怎么觉得只需要经过路由表,然后就在三层被内核送到vm1.eth1网卡了,还需要普通的以太网帧吗
c、返回的时候呢?
关于第一个问题,因为ping自己的地址不需要进行ARP操作,因为不需要知道自己的MAC地址,也就不存在在ARP表中。此外,因为在本机上进行ping操作,所以在网络层面实际上是调用了本地的协议栈,因此不会有经过物理网卡的流量。
对于第二个问题,如果vm2直接ping 192.168.56.10并不通,但是可以直接arping 192.168.56.10,这是因为当vm2的ARP请求到达vm1时,vm1会将自己的MAC地址作为响应返回给vm2,而不需要知道vm2的网关,这就是ARP代理的过程。而加上路由后,vm2 ping 56.10时,根据路由表信息,将在vm1.eth0和vm1.eth1之间进行路由选择,如果是在同一网段内,则不需要经过路由器,直接以MAC地址作为目标地址进行通信。
对于第三个问题,如果是在同一网段内,那么a中vm1.eth0的MAC地址和vm2.eth0的MAC地址应该分别是vm1.eth0的MAC地址和vm2.eth0的MAC地址;在b中,smac应该是vm1.eth0的MAC地址,dmac应该是vm1.eth1的MAC地址,因为在VM1上面需要经过以太网帧进行转发;在c中,smac应该是vm1.eth1的MAC地址,dmac应该是vm1.eth0的MAC地址,因为返回数据时需要经过以太网帧进行转发。