当一台主机把以太网数据帧发送到位于同一局域网上的另一台主机时,是根据 48 bit的以太网地址来确定目的接口的。设备驱动程序从不检查 IP数据报中的目的IP地址。
ARP为IP地址到对应的硬件地址之间提供动态映射。之所以用动态这个词是因为这个过程是自动完成的,一般应用
程序用户或系统管理员不必关心。
一个例子
敲入下面这个形式的命令:
% ftp bsdi
会进行以下这些步骤:
1、应用程序FTP客户端调用gethostbyname把主机名转为32bit的IP地址,用到DNS或在较小网络中使用一个静态的主机文件(/etc/hosts)。
2、FTP客户端用获得的IP地址发出建立TCP连接请求。
3、TCP发送一个连接请求分段到远端的主机,即用上述 IP地址发送一份IP数据报。
4、主机在本地网络上(如以太网、令牌环网或点对点链接的另一端),那么IP数据报可以直接送到目的主机上。如果目的主机在一个远程网络上,那么就通过IP选路
函数来确定位于本地网络上的下一站路由器地址,并让它转发IP数据报。
5、假定是一个以太网,那么发送端主机必须把 32bit的IP地址通过ARP变换成48bit的以太网地址。
6、ARP发送一份称作ARP请求的以太网数据帧给以太网上的每个主机。这个过程称作广播,如图4-2中的虚线所示。ARP请求数据帧中包含目的主机的IP地址(主机名为bsdi),其意思是“如果你是这个IP地址的拥有者,请回答你的硬件地址。”
7、目的主机的ARP层收到这份广播报文后,识别出这是发送端在寻问它的IP地址,于是发送一个A R P应答。这个ARP应答包含IP地址及对应的硬件地址。
8、收到ARP应答后,使ARP进行请求—应答交换的IP数据报现在就可以传送了。
9、发送IP数据报到目的主机。
ARP高度缓存
高速缓存中每一项的生存时间一般为 20分钟。
可用arp -a 命令查看ARP缓存。
ARP的分组格式
两个字节长的以太网帧类型表示后面数据的类型。ARP为0x0806。
硬件类型字段表示硬件地址的类型。1表示以太网地址。
协议类型字段表示要映射的协议地址类型。0x0800表示IP地址。
硬件地址长度字段、协议地址长度字段,以字节为单位,对于以太网上IP地址的ARP请求或应答来说,它们的值分别为6和4。
操作字段指出四种操作类型,它们是ARP请求(值为1)、ARP应答(值为2)、RARP请求(值为3)和RARP应答(值为4)。
ARP举例:一般的例子
在终端1输入
tcpdump -e
-e表示显示硬件地址。
在终端2输入
telnet www.baidu.com discard
可以在终端1看到(截取了一部分):
ARP代理
如果ARP请求是从一个网络的主机发往另一个网络上的主机,那么连接这两个网络的路由器就可以回答该请求,这个过程称作委托ARP或ARP代理(Proxy ARP)。
sun和子网140.252.1之间之间实际存在一个路由器netb,就是这个具有ARP代理功能的路由器使得sun就好像在子网140.252.1上一样。当子网140.252.1上的一个主机gemini有一份IP数据报要传给140.252.1.29的sun时,gemini比较网络号(140.252)和子网号(1),因为它们都是相同的,以太网中发送IP地址140.252.1.29的ARP请求。路由器netb识别出该IP地址属于它的一个拔号主机,于是把它的以太网接口地址140.252.1作为硬件地址来回答。主机gemini通过以太网发送IP数据报到netb,netb通过拨号SLIP链路把数据报转发到sun。这个过程对于所有140.252.1子网上的主机来说都是透明的,主机sun实际上是在路由器netb后面进行配置的。
如果在主机gemini上执行arp命令,经过与主机sun通信以后,可发现在同一个子网140.252.1上的netb和sun的IP地址映射的硬件地址是相同的。这通常是使用委托ARP的线索。
gemini % arp -a
这里是子网140.252.1上其他主机的输出行
netb (140.252.1.183) at 0:80:ad:3:6a:80
sun (140.252.1.29) at 0:80:ad:3:6a:80
免费ARP
发送自己IP地址的ARP请求,一般发生在引导过程中。
作用:
1、一个主机可以通过它来确定另一个主机是否设置了相同的 IP地址。
2、如果发送免费ARP的主机正好改变了硬件地址,那么这个分组就可以使其他主机高速缓存中旧的硬件地址进行相应的
更新。