《TCP/IP路由技术(第一卷)(第二版)》一1.4 地址解析协议(ARP)-阿里云开发者社区

开发者社区> 异步社区> 正文

《TCP/IP路由技术(第一卷)(第二版)》一1.4 地址解析协议(ARP)

简介:
+关注继续查看

本节书摘来自异步社区《TCP/IP路由技术(第一卷)(第二版)》一书中的第1章,第1.4节,作者【美】Jeff Doyle,CCIE #1919,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.4 地址解析协议(ARP)

第1章解释了通过读取和操作数据包的网络地址,路由器可以沿逻辑路径传送数据包,其中逻辑路径包括多个数据链路。沿独立的数据链路传送数据包时,需要把数据包封装在帧中,并且使用数据链路标识(如MAC地址)让帧可以从链路的源点到达目的地。本书的主题之一是为了进行路由选择,路由器利用何种机制发现并共享地址信息。类似的,数据链路上的设备也需要一种方法发现邻居的数据链路标识,以便将数据帧传送到正确的目的地。

有几种机制可以提供这些信息;[15] IPv4使用地址解析协议(ARP),详见RFC826。图1-13给出了ARP的工作机制。当一台设备需要发现另一台设备的数据链路标识符时,它将建立一个ARP请求数据包。这个请求数据包中包括目标设备的IPv4地址以及请求设备(发送者)的源点IPv4地址和数据链路标识符(MAC地址)。然后ARP请求数据包被封装在数据帧中,其中带有作为源的发送者的MAC地址和作为目标的广播地址(参见示例1-6)。[16]


4f5e0eb5199fc520fec14f7cf9f4dfc5386d612e

示例1-6 协议分析器捕捉到图1-13所描述的ARP请求数据包及封装帧


02b23213d13e870d1f030b9a6395bfd12cf763c4

广播地址意味着数据链路上的所有设备都将收到该帧,并且要检查帧内封装的数据包。除了目标机可以识别此数据包外,其他所有设备都会丢弃此数据包。目标机将向源地址发送ARP响应数据包,提供它的MAC地址(参见示例1-7)。

示例1-7 协议分析器捕捉的图1-13所描述的ARP响应数据包


0877f27a0a87814e36144cfd10733975be134c49

当调用调试功能debug arp时,Cisco路由器可以显示ARP的活动情况,参见示例1-8。

示例1-8 路由器Aretha(172.21.5.1)响应来自主机172.19.35.2的ARP请求


7e234b5b623717f8bf12129f363b76b6f4c4a9b1

图1-14给出了ARP数据包的格式。这里可以把图中描述的各字段同示例1-6和示例1-7的ARP数据包相对照。


d8efca886e58d1d451aa123b71fe69bbd472afaa
  • 硬件类型(Hardware Type)——指定了硬件的类型,详见IETF的规范说明。[17] 一些常用的类型编号如表1-5所示。


da60d47204a1e9edf4898bf69e792f8fdcfafdd8
  • 协议类型(Protocol Type)——指定了发送者映射到数据链路标识符的网络层协议的类型;IP对应0x0800。
  • 硬件地址长度(Hardware Adress Length)——指定了数据链路标识符的长度,单位是八位组。MAC地址的长度为6。
  • 协议地址长度(Protocol Address Length)——指定了网络层地址的长度,单位是八位组。IPv4地址的长度为4。
  • 操作(Operation)——指明了一个数据包是ARP请求(1)还是ARP响应(2)。这里还可以发现有其他的值表明ARP数据包的其他用途。如反向ARP请求(3)、反向ARP响应(4)、反转ARP请求(8)、反转ARP响应(9)。

最后20个八位组是发送者和目标机的数据链路标识符和IPv4地址。

在示例1-9所示屏幕的最上面,命令show arp用于检查Cisco路由器内的ARP表。

示例1-9 连接到相同网络上的3台设备的ARP表:Cisco路由器,Windows主机和Linux主机


175205cc1a6d92efde11cf3f994080e79f957322

请注意年龄一栏,这一栏表明为了防止陈旧信息充满ARP表,每经过一个特定的实际间隔,ARP信息将会被刷新。Cisco路由器保存ARP表项的时间为4个小时(14 400s);这个缺省值可以修改。下面的例子就是将ARP的超时值修改为30min(1 800s):

Martha(config)# interface Ethernet 0
Martha(config-if)# arp timeout 1800

示例1-9所示屏幕的中间给出了Windows PC的ARP表,屏幕底部给出了Linux机器的ARP表。虽然它们的格式不同于Cisco路由器的ARP表,但是3个表中的实质性信息是相同的。

ARP表项还可以永久地保存在表中。为了实现地址172.21.5.131到硬件地址0000.00a4.b74c的静态映射,并且采用SNAP(Subnetwork Access Protocol)封装类型,可以使用以下命令完成:

Martha(config)# arp 172.21.5.131 0000.00a4.b74c snap

命令clear arp-cache可以从ARP表中强制删除所有动态表项。并且此命令也可以清除快速交换高速缓冲区和IP路由高速缓冲区中的内容。

ARP还有几种变形,其中至少有一种对路由选择十分重要,它就是代理ARP。

1.4.1 代理ARP

代理ARP有时也被叫做混杂ARP,详见RFC925和RFC1027,代理ARP被路由器作为向主机表明自身可用的一种手段。例如,主机192.168.12.5/24需要向主机192.168.20.101/24发送数据包,但是它没有配置缺省网关信息,因而也就不知道如何到达路由器。这时它可以向192.168.20.101发送一个ARP请求;本地路由器收到这一请求,并且路由器知道如何到达网络192.168.20.0,因此路由器将回复以上请求,其中把自己的数据链路标识符作为ARP回复数据包中的硬件地址。事实上,路由器欺骗了本地的主机,让它认为路由器的接口就是192.168.20.101的接口。最终所有发向192.168.20.101的数据包都被送往路由器。

图1-15给出了代理ARP的另一种用途。这里特别关注的是地址掩码。路由器配置的掩码是28位掩码(4个子网位的C类地址),而主机配置的是标准的C类地址掩码(24位)。


74ed7b1961d5dbcf39f5c7f64e6e1f658c5bf597

其结果是主机并不知道子网的存在。当主机192.168.20.66想发送数据包到192.168.20.25时,它首先将发送ARP请求。这时路由器识别出数据包的目标地址属于另一个子网,因而向请求主机回复自己的硬件地址。这种代理ARP使得子网化网络拓扑结构对主机来说是透明的。

示例1-10所示的ARP高速缓冲暗示了代理ARP的又一用途。注意,有多个IPv4地址映射到单一的MAC标识符;其中IP地址对应着主机,而硬件MAC标识符属于路由器接口。

示例1-10 图1-15中主机192.168.20.66的ARP表显示出多个IPv4地址映射到单一MAC标识符,这说明正在使用代理ARP


452b79d1114de57c308f08371609fb2ade971548

在IOS系统中,缺省情况下代理ARP功能是打开的,当然也可以在每个接口上使用命令no ip proxy-arp关闭此功能。

1.4.2 无故ARP

主机偶尔也会使用自己的IPv4地址作为目标地址发送ARP请求。这种ARP请求称为无故ARP,主要有两个用途:

无故ARP可以用于检查重复地址。一台设备可以向自己的IPv4地址发送ARP请求,如果收到ARP响应则表明存在重复地址。
无故ARP还可以用于通告一个新的数据链路标识符。当一台设备收到一个ARP请求,如果ARP高速缓冲中已有发送者的IPv4地址,那么与此IPv4地址相对应的硬件地址将会被发送者新的硬件地址所更新。这种无故ARP用途正是基于此事实。
某个子网内运行热备份路由器协议(HSRP协议)的路由器如果从其他路由器变成了主路由器,它就会发出一个无故ARP来更新该子网上主机的ARP缓存。
许多IP实现中都没有实现无故ARP功能,但是读者应该知道它的存在。在IOS系统中缺省情况下是关闭的,但可以通过命令ip gratuitous-arps激活它。

1.4.3 反向ARP

代替映射硬件地址到已知IPv4地址,反向ARP(RARP)可以实现IPv4地址到已知硬件地址的映射。某些设备,如无盘工作站在启动时可能不知道自己启动时的IPv4地址。嵌入这些设备固件中的RARP程序可以允许它们发送ARP请求,其中硬件地址为设备的硬件编入地址。RARP服务器将会向这些设备回复相应的IPv4地址。

RARP在很大程度上正在被动态主机配置协议(DHCP)和自举协议(BOOTP)的扩展协议所替代,不同于RARP,这两种协议都可以提供IPv4地址以外的更多信息,而且还可以跨越本地数据链路。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【Elastic Engineering】Elasticsearch 中的一些重要概念: cluster, node, index, document, shards 及 replica
Elasticsearch 中的一些重要概念: cluster, node, index, document, shards 及 replica
13 0
【Elastic Engineering】Elasticsearch 中的一些重要概念: cluster, node, index, document, shards 及 replica
Elasticsearch 中的一些重要概念: cluster, node, index, document, shards 及 replica
3 0
从时延毛刺问题定位到 Netty 的性能统计设计(上)
从时延毛刺问题定位到 Netty 的性能统计设计(上)
11 0
Android WebSocket即时通信
  HTTP与WebSocket响应方式区别   WebSocket存在的理由   我们已经有了 HTTP 协议,为什么还需要另一个协议?因为只靠Http通信有一个缺陷:通信只能由客户端发起,HTTP 协议做不到服务器主动向客户端推送信息。这种单向请求的特点,注定了如果服务器有连续的状态变化,服务端想主动通知客户端,就难以实现。因此,工程师们一直在思考,有没有更好的方法,而 WebSocket 就是这样诞生的。
8 0
【Elastic Engineering】Kibana:如何在 Linux,MacOS 及 Windows 上安装 Elastic 栈中的 Kibana
Kibana:如何在 Linux,MacOS 及 Windows 上安装 Elastic 栈中的 Kibana
10 0
Redis高可用架构演进
Redis是目前使用最广泛的缓存程序之一,也被应用于多种场景,例如数据缓存、分布式锁等,Redis官方提供了多种部署架构,以满足不同应用场景下对于高可用和扩展性的要求。
9 0
MySQL高可用架构演进
MySQL是数据库领域当之无愧的霸主之一,其在各行各业被广泛应用,随着广泛使用,对于MySQL本身的高可用性的要求就是不可避免的话题,而MySQL的高可用方案也随着MySQL功能的完善经历了多次升级,本文将对MySQL的各种高可用架构进行分析,以此来了解架构的演进。
11 0
+关注
异步社区
异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
12049
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载