原创 ARP:地址解析协议

2009-9-25 15:57 1540 4 4 分类: MCU/ 嵌入式

 


作者:孙晓明华清远见嵌入式学院讲师。


 虽然在通常情况下,IP包是根据IP地址发送的,但实际上必须用硬件地址在网络链路层上传送数据(点到点链路除外,在这种链路上,目的地址的标示有时是隐含的)。ARP,即地址解析协议,能发现与特定IP地址相关的硬件地址。它可以在所有支持广播的网络上使用,但最常见的还是按以太网的方式来介绍它。

如果主机A想把一个包发送到同一个以太网上的主机B,那么它用ARP来发现B的硬件地址。当B与A不在同一个网络上的时候,主机A用ARP来发现目标地址为B的包应发往的下一跳路由器的硬件地址。因为ARP使用广播包,这个包不能跨越网络(路由器常常可以配置成让大量广播包涌入其他网络,尽量不要这样做),所以它只能用于寻找和发送主机所在的本地网络直接连接的计算机的硬件地址。

每个计算机都在它们的内存里维护一张叫做ARP缓存的表,这张表保存了近期ARP查询的结果。正常情况下,主机在启动后很快就能发现它所需要的许多地址,所以ARP不会造成大量的网络流量。

ARP通过广播(ARP采用底层链路层的广播约定,而不是IP广播的约定)这种形式的包“有人知道128.138.116.4的硬件地址吗?”来发挥作用。被搜索的计算机会识别出这是自己的IP地址,然后返回一个应答:“是的,这是分配给我的一个网络接口的IP地址,而相应的以太网地址是8:0:20:0:fb:6a。”
初始查询包括请求方的IP地址和以太网地址,这样正被搜索的计算机可以在不发送它自己的ARP查询的情况下给予应答。这样,这两台计算机只要一次包交换就可以知道彼此的ARP映射了。其他监听到请求方的初始广播的计算机也可以记录下它的地址映射。这种被动的ARP流量检测有时叫做探听(snooping)。
arp命令可以检查和处理内核的ARP缓存。arp一般用于增加或者删除一条缓存项,它也可以刷新缓存表或者显示它。arp -a会显示ARP缓存的内容。例如:

点击看大图

一般情况下,arp命令只有在调试和涉及特殊硬件的时候有用。一些设备还没有聪明到能使用ARP协议的程度(例如,网络打印机或者特殊用途的图形显示器)。为了支持这样的设备,您可能需要配置其他计算机,作为这些功能欠缺的硬件的代理ARP服务器(proxy ARP server)。通常也可用arp命令来实现(使用-s标志)。例如:

点击看大图

Linux的2.4及以后版本的内核不支持面向整个子网的proxy ARP服务,但在有一条路由,而接口又配置了转发包的功能时,它会自动充当proxy ARP服务器。
如果一个网络上的两台主机使用了相同的IP地址,其中一台的ARP表项是正确的,而另一台的ARP表项是错误的。您可以使用arp命令找到这台出错的计算机。

有时需要将硬件地址转换为IP地址。许多功能不足的硬件(如无盘工作站、网络计算机、打印机等)需要在启动时执行这个转换。计算机可以查询中央服务器找到它自己的地址,而不是在一个配置文件中直接写入一个IP地址。

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
4
关闭 站长推荐上一条 /6 下一条