背景
由于目前从事桌面云相关的工作,需要经常创建虚拟机以及为该虚拟机分配IP地址。在一个局域网中,我们的IP地址要求唯一性,如果设置的IP地址已经被利用,虚拟机就无法创建成功或者出现其他无法预料的事情。
那么我们应该用什么办法来判断某个IP地址是否已经被占用呢?我们我知道的有两个方法:
- ping命令
- arping命令
ping命令
从事IT工作的基本都知道这个命令,它用来判断目标地址网络通路是否正常以及对应的主机是否存在。例如:
如果使用ping 目标主机地址,提示无法访问目标主机,一般情况下,可表明这个IP地址没有被使用或者网络不通。但是,对方主机若开启了防火墙,我们使用ping命令也会提示“无法访问主机”,实际上该IP地址已经存在了,IP地址已经存在则无法创建虚拟机。此时,则需要使用arping命令了。
另外ping命令可以之window和linux系统均支持。
ARP地址解析协议
在linux系统下面,我们还可以使用arping命令来判断某个IP的地址是否被占用。该命令主要使用了地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。
其主要过程如下:
- 主机发送信息时将包含目标IP地址的ARP请求包广播到网络上的所有主机;
- 目标主机的IP和APR请求包匹配时,目标主机返回对应的物理地址
- 主机收到返回消息后将该IP地址和物理地址存入本机ARP缓存中。
为了提高查询效率,本地的ARP缓存都会保留一段时间。下次请求时会直接查询ARP缓存以节约资源。我们可以使用命令arp -a
命令查询ARP缓存信息,例如:
arping命令
由于arping命令是基于ARP地址解析协议,我们可以在同网段中使用arping命令来判断目标主机是否存在,若存在目标主机会给出响应以及mac地址信息。
例如:
[root@xxxxx ~]# arping 103.29.xxx.xxx
ARPING 103.29.xxx.xxx from 103.29.71.92 eth0
Unicast reply from 103.29.xxx.xxx [F8:66:F2:xx:xx:41] 11.512ms
Unicast reply from 103.29.xxx.xxx [F8:66:F2:xx:xx:41] 11.966ms
Unicast reply from 103.29.xxx.xxx [F8:66:F2:xx:xx:41] 4.512ms
Unicast reply from 103.29.xxx.xxx [F8:66:F2:xx:xx:41] 5.966ms
^CSent 6 probes (1 broadcast(s))
Received 6 response(s)
以上信息表明103.29.xxx.xxx主机存在,我们不能再利用这个IP地址。否则表明这个IP地址在同网段中是没有被使用的。