起步
在一个局域网中存在两台服务器 A, B:
- A:IP=192.168.211.110, NETMASK=255.255.255.0
- B:IP=192.168.211.3, NETMASK=255.255.255.224
此时,A B 能相互通信吗?
环境说明
A, B 服务器均为 centos7 —— 通过 vmware 启动的虚拟机。
A:IP=192.168.211.110, NETMASK=255.255.255.0, MAC=00:0c:29:69:73:ae
B:IP=192.168.211.3, NETMASK=255.255.255.224, MAC=00:0c:29:3a:1b:85
网关:IP=192.168.211.2, NETMASK=255.255.255.0, MAC=00:50:56:e3:77:90
实现过程中需要用的工具:
$ yum install tcpdump
$ yum install net-tools
为方便分析数据包,在宿主机上安装 wireshark。
B ping A
在 B 上执行 ping 192.168.211.110
之前,应该确保 B 环境上没有 arp 缓存。可通过以下命令查看:
$ arp -n
Address HWtype HWaddress Flags Mask Iface
192.168.211.2 ether 00:50:56:e3:77:90 C ens33
# 或者
$ ip neigh show
192.168.211.2 dev ens33 lladdr 00:50:56:e3:77:90 DELAY
执行 ip neigh flush dev ens33
清除 arp 缓存。
这里先说结论:B 可以 ping 通 A。问题来了,为什么 B 还可以 ping 通 A 呢?子网掩码还有意义吗?ping 通之前发生了什么?我们用“抓包”揭晓谜底。
第一步,在 B 上执行:
$ tcpdump -i ens33 -vvvvAls0 -w b_ping_a.pcap
第二步,新开一个窗口,在 B 上执行:
$ ping 192.168.211.110
一段时间后结束抓包