本章咱们要讨论的问题是只对 T C P / I P 协议簇有意义的 I P 地址。数据链路如以太网或令牌
环网都有本身的寻址机制(经常为 48 bit 地址),这是使用数据链路的任何网络层都必须听从
的。一个网络如以太网能够同时被不一样的网络层使用。例如,一组使用 T C P / I P 协议的主机和
另外一组使用某种 P C 网络软件的主机能够共享相同的电缆。缓存
当一台主机把以太网数据帧发送到位于同一局域网上的另外一台主机时,是根据 48 bit 的以
太网地址来肯定目的接口的。设备驱动程序从不检查 I P 数据报中的目的 I P 地址。
地址解析为这两种不一样的地址形式提供映射: 32 bit 的 I P
地址和数据链路层使用的任何类型的地址。 RFC 826 [Plummer
1 9 8 2 ]是 A R P 规范描述文档。服务器
A R P 为 I P 地址到对应的硬件地址之间提供动态映射。咱们
之因此用动态这个词是由于这个过程是自动完成的,通常应用
程序用户或系统管理员没必要关心。网络
R A R P 是被那些没有磁盘驱动器的系统使用(通常是无盘工做站或 X 终端),它须要系统
管理员进行手工设置。ui
在 A R P 背后有一个基本概念,那就是网络接口有一个硬件地址(一个 48 bit 的值,标识不
同的以太网或令牌环网络接口)。在硬件层次上进行的数据帧交换必须有正确的接口地址。但
是,T C P / I P 有本身的地址:32 bit 的 I P 地址。知道主机的 I P 地址并不能让内核发送一帧数据给
主机。内核(如以太网驱动程序)必须知道目的端的硬件地址才能发送数据。 A R P 的功能是
在 32 bit 的 I P 地址和采用不一样网络技术的硬件地址之间提供动态映射。
点对点链路不使用 A R P。当设置这些链路时(通常在引导过程进行),必须告知内核链路
每一端的 I P 地址。像以太网地址这样的硬件地址并不涉及。命令行
A R P 高效运行的关键是因为每一个主机上都有一个 A R P 高速缓存。这个高速缓存存放了最
近 I n t e r n e t 地址到硬件地址之间的映射记录。高速缓存中每一项的生存时间通常为 2 0 分钟,起
始时间从被建立时开始算起。
咱们能够用 a r p(8)命令来检查 ARP 高速缓存。参数-a 的意思是显示高速缓存中全部的内容代理
在以太网上解析 I P 地址时,A R P 请求和应答分组的格式如图 4 - 3 所示(A R P 能够用于其余
类型的网络,能够解析 I P 地址之外的地址。紧跟着帧类型字段的前四个字段指定了最后四个
字段的类型和长度)。日志
通常状况下,当系统收到 A R P 请求或发送 A R P 应答时,都要把请求端的硬件地址和 I P 地
址存入 A R P 高速缓存。在逻辑上能够假设,若是请求端要发送 I P 数据报,那么数据报的接收
端将极可能会发送一个应答blog
在 A R P 高速缓存中的表项通常都要设置超时值(在 4 . 8 小节中,咱们将看到管理员能够用
a r p 命令把地址放入高速缓存中而不设置超时值)。从伯克利系统演变而来的系统通常对完整
的表项设置超时值为 2 0 分钟,而对不完整的表项设置超时值为 3 分钟(在前面的例子中咱们已
见过一个不完整的表项,即在以太网上对一个不存在的主机发出 A R P 请求。)当这些表项再次
使用时,这些实现通常都把超时值从新设为 2 0 分钟。
Host Requirements RFC 代表即便表项正在使用时,超时值也应该启动,可是大多数从伯
克利系统演变而来的系统没有这样作 — 它们每次都是在访问表项时重设超时值接口
若是 A R P 请求是从一个网络的主机发往另外一个网络上的主机,那么链接这两个网络的路
由器就能够回答该请求,这个过程称做委托 A R P 或 A R P 代理(Proxy ARP)。这样能够欺骗发起
A R P 请求的发送端,使它误觉得路由器就是目的主机,而事实上目的主机是在路由器的“另
一边”。路由器的功能至关于目的主机的代理,把分组从其余主机转发给它路由
A R P 代理也称做混合 A R P(p r o m i s c u o u s A R P)或 ARP 出租(ARP hack)。这些名字来自于
A R P 代理的其余用途:经过两个物理网络之间的路由器能够互相隐藏物理网络。在这种状况
下,两个物理网络可使用相同的网络号,只要把中间的路由器设置成一个 A R P 代理,以响
应一个网络到另外一个网络主机的 A R P 请求。这种技术在过去用来隐藏一组在不一样物理电缆上
运行旧版 T C P / I P 的主机。分开这些旧主机有两个共同的理由,其一是它们不能处理子网划分,
其二是它们使用旧的广播地址(全部比特值为 0 的主机号,而不是目前使用的全部比特值为 1
的主机号)。
咱们能够看到的另外一个 A R P 特性称做免费 ARP (gratuitous ARP)。它是指主机发送 A R P 查
找本身的 I P 地址。一般,它发生在系统引导期间进行接口配置的时候
免费 A R P 能够有两个方面的做用: 1) 一个主机能够经过它来肯定另外一个主机是否设置了相同的 I P 地址。主机 b s d i 并不但愿
对此请求有一个回答。可是,若是收到一个回答,那么就会在终端日志上产生一个错误消息
“以太网地址:a : b : c : d : e : f 发送来重复的 I P 地址”。这样就能够警告系统管理员,某个系统有不
正确的设置。 2) 若是发送免费 A R P 的主机正好改变了硬件地址(极可能是主机关机了,并换了一块接
口卡,而后从新启动),那么这个分组就可使其余主机高速缓存中旧的硬件地址进行相应的
更新。一个比较著名的 A R P 协议事实[Plummer 1982]是,若是主机收到某个 I P 地址的 A R P 请求,
并且它已经在接收者的高速缓存中,那么就要用 A R P 请求中的发送端硬件地址(如以太网地
址)对高速缓存中相应的内容进行更新。主机接收到任何 A R P 请求都要完成这个操做( A R P
请求是在网上广播的,所以每次发送 A R P 请求时网络上的全部主机都要这样作)
文献[ B h i d e、E l n o z a h y 和 M o rgan 1991]中有一个应用例子,经过发送含有备份硬件地址和
故障服务器的 I P 地址的免费 A R P 请求,使得备份文件服务器能够顺利地接替故障服务器进行
工做。这使得全部目的地为故障服务器的报文都被送到备份服务器那里,客户程序不用关心
原来的服务器是否出了故障。
不幸的是,做者却反对这个作法,由于这取决于全部不一样类型的客户端都要有正
确的 ARP 协议实现。他们显然碰到过客户端的 ARP 协议实现与规范不一致的状况
咱们已经用过这个命令及参数- a 来显示 A R P 高速缓存中的全部内容。这里介绍其余参数
的功能。
超级用户能够用选项- d 来删除 A R P 高速缓存中的某一项内容(这个命令格式能够在运行
一些例子以前使用,以让咱们看清楚 A R P 的交换过程)。
另外,能够经过选项- s 来增长高速缓存中的内容。这个参数须要主机名和以太网地址:
对应于主机名的 I P 地址和以太网地址被增长到高速缓存中。新增长的内容是永久性的(好比,
它没有超时值),除非在命令行的末尾附上关键字 t e m p。
位于命令行末尾的关键字 p u b 和- s 选项一块儿,可使系统起着主机 A R P 代理的做用。系统
将回答与主机名对应的 I P 地址的 A R P 请求,并以指定的以太网地址做为应答。若是广播的地
址是系统自己,那么系统就为指定的主机名起着委托 A R P 代理的做用。
在大多数的 T C P / I P 实现中,A R P 是一个基础协议,可是它的运行对于应用程序或系统管
理员来讲通常是透明的。 A R P 高速缓存在它的运行过程当中很是关键,咱们能够用a r p 命令对高
速缓存进行检查和操做。高速缓存中的每一项内容都有一个定时器,根据它来删除不完整和
完整的表项。a r p 命令能够显示和修改A R P 高速缓存中的内容。
咱们介绍了 A R P 的通常操做,同时也介绍了一些特殊的功能:委托 A R P(当路由器对来
自于另外一个路由器接口的 A R P 请求进行应答时)和免费 A R P(发送本身 I P 地址的 A R P 请求, 通常发生在引导过程当中)