赞
踩
ARP(地址解析协议)提供 IP
地址与硬件地址之间动态映射。几乎总是用于32位的 IPv4地址和以太网的 48
位 MAC
地址之间的映射。ARP
高速运行的关键是维护每个主机和路由器上的ARP缓存(或者是表)。
该缓存是为每个接口维护从网络层地址到硬件地址的最新映射,当 IPv4
地址映射到硬件地址时,它对应于高速缓存中的一个条目,其正常到期时间是条目创建开始后的 20
分钟,而不完整的条目的超时时间为 3
分钟。
所谓不完整条目指的是解析失败的条目,比如对一个不存在的主机进行
ARP
请求。
我们在 Linux
和 Windows
中可以使用 arp
命令查看缓存。具体的经常使用的 ARP
命令有几个,在下面会提到。这里我们只要知道 arp
命令以及加上 -a
参数的 arp
命令: arp -a
。
linux# arp
Address HWtype HWaddress Flags Mask Iface
_gateway ether 00:50:56:fd:7f:ea C ens33
192.168.80.254 ether 00:50:56:fe:3a:6e C ens33
linux# arp -a
_gateway (192.168.80.2) at 00:50:56:fd:7f:ea [ether] on ens33
? (192.168.80.254) at 00:50:56:fe:3a:6e [ether] on ens33
c:\> arp -a C:\Users\CXF>arp -a 接口: 192.168.80.1 --- 0x15 Internet 地址 物理地址 类型 192.168.80.254 00-50-56-fe-3a-6e 动态 192.168.80.255 ff-ff-ff-ff-ff-ff 静态 224.0.0.22 01-00-5e-00-00-16 静态 224.0.0.251 01-00-5e-00-00-fb 静态 224.0.0.252 01-00-5e-00-00-fc 静态 239.11.20.1 01-00-5e-0b-14-01 静态 239.255.255.250 01-00-5e-7f-ff-fa 静态 255.255.255.255 ff-ff-ff-ff-ff-ff 静态 接口: 192.168.8.1 --- 0x16 Internet 地址 物理地址 类型 192.168.8.255 ff-ff-ff-ff-ff-ff 静态 224.0.0.22 01-00-5e-00-00-16 静态 224.0.0.251 01-00-5e-00-00-fb 静态 224.0.0.252 01-00-5e-00-00-fc 静态 239.11.20.1 01-00-5e-0b-14-01 静态 239.255.255.250 01-00-5e-7f-ff-fa 静态 ...
第一个和第二个是在 Linux
环境下,第三个是在 Windows
环境下。
在第一个例子下,每个映射包含有五个元素的条目:主机名(对应的是一个IP地址)、硬件地址类型、硬件地址、标志和本地网络接口。除了标志 Flags
元素以外,其他的元素都很好理解。Flags
包含一个符号 C
、M
或 P
,其中 C
类指的是该条目由 ARP
协议动态学习, M
条目是指通过手工输入的条目(使用的命令是 arp -s
),而 P
类是手工发布的含义,意外就是说对于任何的 P
类条目,主机对输入的 ARP
请求返回一个 ARP
应答。
第二个例子使用的是 BSD
风格的类似信息。这里给出了主机名和对应的地址,对应的地址类型([ether]表示一个以太网类型的地址),以及映射活动在哪个接口上。
在大多数的实现中,完整条目超时时间为20分钟,而不完整的条目超时时间为3分钟。
这里给出一个使用 ARP
自动学习的例子。
我们试图访问一个不存在的主机(随便想的一个 Ip
地址),但是 ARP
还是会试图解析,最终解析的结果并找不到该 IP
对应的硬件地址,但还是会将这次的查询的结果作为一个不完成的条目放在缓存表中:
linux# arp -a 验证当前ARP缓存条目中不包含将要访问的主机地址的映射
? (192.168.80.250) at <incomplete> on ens33
_gateway (192.168.80.2) at 00:50:56:fd:7f:ea [ether] on ens33
然后我们试图登录一个不存在的主机名:
linux# telnet 192.168.1.250
Trying 192.168.80.250...
telnet: Unable to connect to remote host: No route to host #告诉我们不可达
这个时候我们再来查看本机的 ARP
缓存:
# arp -a
? (192.168.80.254) at 00:50:56:f0:25:1a [ether] on ens33
? (192.168.80.250) at <incomplete> on ens33
_gateway (192.168.80.2) at 00:50:56:fd:7f:ea [ether] on ens33
可以看到刚才访问试图访问的 IP
以及已经被记录在 ARP
缓存中,虽然是一个不完整的条目(没有硬件地址)。
有几个常见的命令可以用于操作 ARP
缓存表。
arp / arp -a
这两个命令都是用来查看本机的 ARP
缓存表;
arp -d
加上 -d
选项的命令来删除 ARP
缓存的条目(需要管理员权限或者在Linux
中需要是 root
用户);
arp -s
使用 -s
选项的命令增加条目,后面需要的是一个 IPv4
地址(或者是主机名)和一个以太网地址。这个 IPv4
地址和以太网地址作为一个条目被添加在缓存中。这个添加的条目是半永久性的(即它在缓存中不会超时,但在系统重启时消失)。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。