ARP协议中逻辑地址和物理地址是如何转换的?

1个回答

写回答

小翟没烦恼

2025-11-03 03:50

+ 关注

身份证
身份证

ARP简述。ARP协议是如何定义的?地址解析协议(ARP,即Address Resolution Protocol)能把IPv4地址(逻辑地址的一种)转化为不同网络所需的硬件地址(物理地址)。换个说法,地址解析的目的就是找出逻辑地址和物理地址间的映射关系。ARP只用于IPv4协议,IPv6则用邻居发现协议(NDP)来替代它。ARP协议当前被广泛用于查找32位IPv4地址和以太网48位MAC地址间的映射关系。在掌握ARP协议之前,要明白逻辑地址与物理地址是什么。物理地址是什么?物理地址之于主机,犹如身份证之于人类。每个网络适配器,制造商会给定一个永久的物理地址,存于设备的永久性内存里。物理地址就像网络适配器的身份证,是其ID。要知道,物理地址与网络适配器相绑定,主机若更换网络适配器,其物理地址也会随之改变。(网络适配器的物理地址虽为固定的,但也能用特殊方法修改,不过这种情况很少见,不影响我们的理解。)在TCP/IP分层体系结构里,物理层与数据链路层用的是物理地址,网络层、传输层和应用层使用的则为IP地址(逻辑地址)。逻辑地址是啥?逻辑地址也就是我们常说的IP地址。由于IP地址由软件来实现,故而被叫做逻辑地址。IP地址不固定,一般从某个网络的IP地址池获取,网络环境改变时,IP地址也会随之改变。为何要有2级地址?分组传输需要二级地址:逻辑地址与物理地址。IP地址与物理地址在不同层次运行。一个目的IP地址可能会跨越多段链路,各链路的链路层和物理层协议或许不同,物理地址格式可能差异很大;同样,同一段链路也可能接收不同网络层协议,像IPv4或者IPX。有人或许会想,直接拿物理地址取代IP地址不就好了吗?这是由于对IP地址缺乏足够认识。实际上,链路层和物理层存在诸多协议,这些协议都有各自不同的物理地址。要是完全依靠物理地址,路由表就得为每个物理地址设立一项,没有哪个路由器能承受如此巨大的表项数量。IP地址是更高层次的抽象,把不同物理地址抽象成统一的逻辑地址。IP地址分层性良好。分组转发到同一子网时,路由表只需记录统一的网络前缀就行。例如,一个子网含6000个IP地址,相应有6000个物理地址,记录IP地址网络前缀仅需1行,而记录物理地址却要6000行。有了IP地址后,分组路由(找路)工作就像在同一网络里开展。若传输IPv4分组,其传输过程中经过的所有网络都使用IPv4协议,就好像这些网络处于一个逻辑上的网络之中。ARP工作机制是怎样的。ARP协议重点依靠ARP高速缓存(ARP cache)。ARP高速缓存属于映射表,其中记录着IP地址与物理地址的映射关系。每台主机和路由器都设置有ARP高速缓存,在实际传输时,一般能先知晓下一跳的目的IP地址(这由查询路由表得知,不在本文讲述范围内),查询ARP高速缓存就能得到对应的物理地址。怎样构建ARP高速缓存?高速缓存映射表并非初始就存在。已知下一跳目的IP地址时,怎样借ARP协议获取下一跳的物理地址?答案为广播ARP请求分组。ARP请求分组包含3个重要信息:源IP地址、源物理地址以及目的IP地址。所查询的内容是对应的目的物理地址。具体步骤如下:源主机或路由器会向该网络内的所有主机发送ARP请求分组,即向这个网络广播此分组。所有主机都会检查分组的目的IP地址是否与自己的IP地址一致。若不一致,就扔掉该分组;若一致,则表明自己就是被找寻的目的主机或路由器。目的主机(或目的路由器)收到ARP请求分组后,将做两件事情。把源主机的IP地址与物理地址添加到自身ARP高速缓存映射表。源主机会与自己通信的话,自己之后也可能主动与源主机通信,所以提前建立源主机映射表项很有必要,这样之后主动与源主机通信时就无需广播ARP请求分组了。2.向源主机发送单播的ARP响应报文。目的主机要向源主机发送ARP响应报文,把自己的物理地址告诉源主机。源主机收到该ARP响应报文后,就能向目的主机发送帧了。为何是单播而非广播?因为目的主机已有源主机物理地址,能直接向源主机发送对应帧,无需广播。源主机收到ARP响应报文时,会把目的主机的IP地址及其物理地址添入自身ARP高速缓存映射表。下次与该主机通信就不必广播ARP分组,随后便能依据物理地址向目的主机发帧了。ARP协议使用的4种不同情形。ARP协议在单个网络内运行,源主机与目的主机若不在同一网络,就需多次使用该协议。不管情况有多复杂,都由以下4种情况组合而成。

源主机与目的主机处于同一网络时很简单,源主机可直接借助ARP协议查找目的主机的物理地址。情况1:源主机借助ARP协议,直接查找同一网络中目的主机的物理地址。

源主机与目的主机若不在同一网络,就得经路由器路由。查找路由表把目的主机IP地址转成下一跳IP地址,然后借助ARP协议把下一跳IP地址变为相应物理地址。细分存在三种情况:源主机寻找下一跳路由器物理地址的情况2。情况3:路由器查找同一网络内目的主机的物理地址。情况4:路由器与目的主机不在同一网络,路由器A要查找下一跳路由器B的物理地址。这4种情况很好理解,只要明白路由表和ARP映射表的作用就可以了。高速缓存的生命周期。ARP高速缓存为动态,其缓存记录的映射项存在生存周期,通常默认20分钟,一旦超期,该映射将从映射表中被移除。为何要设置生存周期?物理地址和IP地址都有改变的可能,像目的主机更换网络适配器时,其物理地址就会发生改变。若源主机查看ARP映射表获取到目的主机以前的物理地址,必然无法正常通信。待该表项生存周期结束,源主机会再次广播ARP请求分组,进而得到目的主机新的物理地址,最终实现与目的主机正常通信。ARP报文有着怎样的格式?

人类
人类

硬件类型:此字段为16bit,用于指定运行ARP协议的物理网络类型,ARP可在任何物理网络运行,以太网类型为1。协议类型:此字段共16bit,用来指定高层协议类型。任何高层协议都可使用ARP,IPv4协议对应的值为0x0800。硬件长度字段共8bit,用来定义物理地址长度(单位:字节),以太网中该值为6字节。协议长度字段共8bit,用于定义逻辑地址长度(单位为字节),如IPv4的逻辑地址长度为4字节。操作:此字段为16bit,用于定义分组类型,当前常用ARP请求分组、ARP响应分组这2种。发送方硬件地址,即用来记录发送方的物理地址。发送方协议地址:用以记录发送方的逻辑地址。接收方硬件地址:若为ARP请求报文,因不知接收方物理地址(请求报文以广播形式询问此地址,肯定事先不知),所以该字段全填为0。接收方协议地址:用于记录接收方的逻辑地址。对ARP协议进行封装。ARP协议十分特殊,仿佛是处于网络层与链路层之间的协议。ARP协议封装于帧内,如同IPv4协议封装在以太网帧中,从这一角度看,ARP协议类似网络层协议。ARP协议服务于网络层协议,但从服务角度看,它又类似链路层协议。在实际情况里,ARP协议常被封装于以太网帧之中。广播ARP请求分组时,网络内所有主机都会从以太网帧提取ARP协议分组。检查接收方协议地址字段,若与自身IP地址不同则丢弃该分组;若相同,表明自身物理地址为被查找的地址,就要(以单播方式)给发送方回复ARP响应分组。ARP的响应报文会把自身的物理地址和IP地址填入发送方硬件地址字段与发送方协议地址字段,同时将ARP请求报文的发送方硬件地址和发送方协议地址填进接收方硬件地址和接收方协议地址。进行抓包分析。抓取ARP请求的报文。

由上图能看出,ARP协议是被封装于Ethernet(以太网)协议里的。我们先来看看Ethernet II这部分内容:目的物理地址(Destination)字段的值为:ff:ff:ff:ff:ff:ff。此以太网帧为广播帧,这与ARP请求分组以广播形式发送相符。源物理地址(Source)字段的值是:50:eb:f6:56:ca:57。这是发送方主机的物理地址,与ARP协议的Sender MAC address字段值完全一致。Type字段为ARP(0x0806)。表明此以太网帧封装的为一个ARP协议分组。再来看ARP协议这部分内容。前4个字段体现物理地址与逻辑地址的类型和长度,与之前所讲一致。第五个字段Opcode值为1,表示这是ARP请求报文。后面四个字段分别为源物理地址、源IP地址、目标物理地址和目标IP地址。需要注意的是,目标物理地址像之前讲的那样全填为0。此地址是ARP请求报文要获取的内容,当前不知道,所以只能全填0。获取ARP响应报文。

先来看Ethernet II这部分:目的物理地址字段的值恰为ARP请求报文源字段的值。即此ARP响应报文是对之前ARP请求分组的回应。该值与Target MAC address的值也是相同的。源物理地址字段的值是目的端的物理地址,这一值与发送端MAC地址的值相同。Padding为填充字段,其作用是将以太网帧填充至最小帧长。再来看ARP协议这部分内容:前四个字段没什么可说的。第五个字段Opcode的值是2,意味着这是ARP响应分组。后面的4个字段中,源MAC地址就是ARP请求报文要找的物理地址,源IP地址即为ARP请求分组的目的IP地址,而目的物理地址与目的IP地址正是ARP请求分组的源物理地址和源IP地址。查看ARP高速缓存内容。

在Windows系统终端输入arp -a命令,就能显示ARP缓存里的全部条目。能够发现,源主机192.168.1.1向目的主机192.168.1.2发送ARP请求分组,在获取到相应的ARP响应分组之后。192.168.1.2 8e - 47 - af - ef - a2 - 66这一表项被添加到ARP高速缓存中(第二项)。静态映射和动态映射。能看到ARP高速缓存里有静态映射,也有动态映射。动态映射是经ARP协议动态配置的表项。发送方会检查ARP缓存,若未找到所需物理地址,便发送ARP请求报文并获取响应报文,然后把相应映射添至ARP映射表,这样得到的映射表项即为动态映射。静态映射是手动添加的表项。这种添加方式下的表项较死板,因其映射关系可能并非固定不变。不过,静态映射安全性更高,攻击者无法通过ARP请求响应报文添加错误映射关系。

举报有用(0分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号