这还是昨天我问别人的问题,今天被导师点醒了,为了防止忘记,今天记录一下。
现实问题:我之前的主机A的IP地址是10.0.0.12/16,最近来了个服务器B,配个IP是10.0.1.136/24,结果在测试网络是否配置正确的时候发现B去ping谁都可以通,但是A去pingB总是这个结果:time out
问题解析:time out 说明A的request消息发出去了,要么B没收到,要么B收到没有理会。
1)假设B没收到:
检查了一下B的防火墙,确定已经 systemctl stop firewalld (关闭防火墙)和 systemctl disable firewalld(禁用防火墙),重启之后用 systemctl status firewalld 查看防火墙确实是关闭的
2)假设B收到却直接丢弃了:
按照这个思路的话,可以想象这样一个流程:
A ping B:A给B发request消息:who has 10.0.1.136,把10.0.1.136、10.0.0.12和255.255.0.0(A的子网掩码)逐位相与,得到10.0.0.0/16和10.0.0.0/16,认为在同一个网段,通过二层转发询问B的MAC地址。
B收到二层转发的ARP,将里面的10.0.0.12和自己的IP(10.0.1.136)分别与255.255.255.0(B的子网掩码)逐位相与,得到10.0.0.0/24和10.0.1.0/24,认为与请求者不在同一个网段内,于是丢弃
而反过来,B ping A:B给A发request消息:who has 10.0.0.12,把10.0.1.136、10.0.0.12和255.255.255.0(B的子网掩码)逐位相与,得到10.0.0.0/24和10.0.1.0/24,认为与请求者不在同一个网段内,通过三层转发给默认网关10.0.0.1询问A的MAC地址。
A收到三层转发的ARP,将自己的IP和MAC地址发给负责三层转发的网关,网关再转发给B,这样B就ping通了。
这样,为了A能ping通B,我把B的子网掩码也改成了255.255.0.0
就这样,两边都能ping通了