地址解析协议 ARP的高速缓存、分组格式和代理以及arp命令( 二 )


点对点链路不使用ARP 。当设置这些链路时(一般在引导过程进行),必须告知内核链路每一端的IP地址 。像以太网地址这样的硬件地址并不涉及 。

4.3 ARP高速缓存
ARP高效运行的要害是由于每个主机上都有一个ARP高速缓存 。这个高速缓存存放了最近Internet地址到硬件地址之间的映射记录 。高速缓存中每一项的生存时间一般为2 0分钟,起始时间从被创建时开始算起 。
我们可以用ARP(8)命令来检查ARP高速缓存 。参数-a的意思是显示高速缓存中所有的内容 。
bsdi % arp -a
sun (140.252.13.33) at 8:0:20:3:f6:42
svr4 (140.252.13.34) at 0:0:c0:c2:9b:26
48 bit的以太网地址用6个十六进制的数来表示,中间以冒号隔开 。在4.8小节我们将讨论ARP命令的其他功能 。
4.4 ARP的分组格式
在以太网上解析IP地址时,ARP请求和应答分组的格式如图4-3所示( ARP可以用于其他类型的网络,可以解析IP地址以外的地址 。紧跟着帧类型字段的前四个字段指定了最后四个字段的类型和长度) 。

(点击查看原图)
以太网报头中的前两个字段是以太网的源地址和目的地址 。目的地址为全1的非凡地址是广播地址 。电缆上的所有以太网接口都要接收广播的数据帧 。
两个字节长的以太网帧类型表示后面数据的类型 。对于ARP请求或应答来说,该字段的值为0x0806 。
形容词hardware (硬件)和protocol (协议)用来描述ARP分组中的各个字段 。例如,一个ARP请求分组询问协议地址(这里是IP地址)对应的硬件地址(这里是以太网地址) 。
硬件类型字段表示硬件地址的类型 。它的值为1即表示以太网地址 。协议类型字段表示要映射的协议地址类型 。它的值为0x0800即表示IP地址 。它的值与包含IP数据报的以太网数据帧中的类型字段的值相同,这是有意设计的(参见图2-1) 。
接下来的两个1字节的字段,硬件地址长度和协议地址长度分别指出硬件地址和协议地址的长度,以字节为单位 。对于以太网上IP地址的ARP请求或应答来说,它们的值分别为6和4 。
操作字段指出四种操作类型,它们是ARP请求(值为1)、ARP应答(值为2)、R ARP请求(值为3)和R ARP应答(值为4)(我们在第5章讨论R ARP) 。这个字段必需的,因为ARP请求和ARP应答的帧类型字段值是相同的 。
接下来的四个字段是发送端的硬件地址(在本例中是以太网地址)、发送端的协议地址(IP地址)、目的端的硬件地址和目的端的协议地址 。注重,这里有一些重复信息:在以太网的数据帧报头中和ARP请求数据帧中都有发送端的硬件地址 。
对于一个ARP请求来说,除目的端硬件地址外的所有其他的字段都有填充值 。当系统收到一份目的端为本机的ARP请求报文后,它就把硬件地址填进去,然后用两个目的端地址分别替换两个发送端地址,并把操作字段置为2,最后把它发送回去 。
4.5 ARP举例
在本小节中,我们用TCPdump命令来看一看运行像Telnet这样的普通TCP工具软件时ARP会做些什么 。附录A包含TCPdump命令的其他细节 。
4.5.1 一般的例子
为了看清楚ARP的运作过程,我们执行telnet命令与无效的服务器连接 。
bsdi % arp -a 检验ARP高速缓存是空的
bsdi % telnet svr4 discard 连接无效的服务器
Trying 140.252.13.34...
Conneted to svr4.
Escape character is "^]".
^] ;;;;键入Ctrl和右括号,使Telnet回到提示符并关闭
telnet > quit
Connection closed.
图4 - 4中的TCP dump的原始输出如附录A中的图A-3所示 。由于这是本书第一个TCP dump输出例子,你应该去查看附录中的原始输出,看看我们作了哪些修改 。

(点击查看原图)
我们删除了TCP dump命令输出的最后四行,因为它们是结束连接的信息(我们将在第1 8章进行讨论),与这里讨论的内容不相关 。

推荐阅读