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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

本节书摘来自异步社区《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地址以外的更多信息,而且还可以跨越本地数据链路。

相关文章
|
3月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
171 3
|
10天前
|
网络协议 安全 网络安全
探索网络模型与协议:从OSI到HTTPs的原理解析
OSI七层网络模型和TCP/IP四层模型是理解和设计计算机网络的框架。OSI模型包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,而TCP/IP模型则简化为链路层、网络层、传输层和 HTTPS协议基于HTTP并通过TLS/SSL加密数据,确保安全传输。其连接过程涉及TCP三次握手、SSL证书验证、对称密钥交换等步骤,以保障通信的安全性和完整性。数字信封技术使用非对称加密和数字证书确保数据的机密性和身份认证。 浏览器通过Https访问网站的过程包括输入网址、DNS解析、建立TCP连接、发送HTTPS请求、接收响应、验证证书和解析网页内容等步骤,确保用户与服务器之间的安全通信。
55 1
|
2月前
|
网络协议
网络通信的基石:TCP/IP协议栈的层次结构解析
在现代网络通信中,TCP/IP协议栈是构建互联网的基础。它定义了数据如何在网络中传输,以及如何确保数据的完整性和可靠性。本文将深入探讨TCP/IP协议栈的层次结构,揭示每一层的功能和重要性。
69 5
|
2月前
|
监控 网络协议 网络性能优化
网络通信的核心选择:TCP与UDP协议深度解析
在网络通信领域,TCP(传输控制协议)和UDP(用户数据报协议)是两种基础且截然不同的传输层协议。它们各自的特点和适用场景对于网络工程师和开发者来说至关重要。本文将深入探讨TCP和UDP的核心区别,并分析它们在实际应用中的选择依据。
61 3
|
16天前
|
传感器
Modbus协议深入解析
Modbus协议是由Modicon公司(现施耐德电气)于1979年发明的串行通信协议,主要用于工业自动化系统中的PLC通信。本文深入解析了Modbus协议的主从模式、数据类型(线圈、离散输入、保持寄存器、输入寄存器)、帧结构和通信过程,并介绍了其应用场景和重要性。
18 0
|
2月前
|
网络协议 网络安全 网络虚拟化
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
116 3
|
2月前
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
99 2
|
2月前
|
网络协议 安全 Go
Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
【10月更文挑战第28天】Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
70 13
|
2月前
|
网络协议 算法 网络性能优化
计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议
计算机网络常见面试题(一):TCP/IP五层模型、应用层常见的协议、TCP与UDP的区别,TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议、ARP协议
|
2月前
|
负载均衡 网络协议 算法
OSPF与其他IGP协议的比较:全面解析与应用场景
OSPF与其他IGP协议的比较:全面解析与应用场景
52 0

推荐镜像

更多