ARP:地址解析协议

时间:2009-09-24

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

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

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

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

  ARP通过广播(ARP采用底层链路层的广播约定,而不是IP广播的约定)这种形式的包“有人知道128.138.11*的硬件地址吗?”来发挥作用。被搜索的计算机会识别出这是自己的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地址。
  “本文由华清远见https://www.embedu.org/index.htm提供”


  
上一篇:C语言静态函数库的制作和使用方法
下一篇:Linux USB gadget设备驱动解析(4)--编写一个gadget驱动

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料