协议介绍
地址解析协议ARP(Address Resolution Protocol)是一种通过解析网络层IP地址来寻找数据链路层MAC地址的网络传输协议。由互联网工程任务组(IETF)在1982年11月发布的RFC 826中描述制定。
协议原理
下图是以太网帧结构:
媒体访问控制地址MAC( Media Access Control Address),也称为局域网地址(LAN Address),以太网地址(Ethernet Address)或硬件地址(Physical Address),是用来唯一标识网络接口的地址。
局域网中两台设备进行以太网通讯,必须要知道对方接口的MAC地址。这时即可利用对方(目标)IP发送ARP广播请求帧获得对方(目标)MAC地址。并存入本机对应接口A R P高速缓存的ARP列表中。
ARP帧格式如下:
协议工作流程
局域网中两台主机:
主机A的IP地址为192.168.1.1,MAC地址为0A-11-22-33-44-01
主机B的IP地址为192.168.1.2,MAC地址为0A-11-22-33-44-02
以主机A(192.168.1.1)向主机B(192.168.1.2)发送数据为例:
1.当发送数据时,主机A会在自己的ARP缓存表中寻找是否有目标IP地址。如果找到就知道目标MAC地址为(0A-11-22-33-44-02),直接把目标MAC地址写入帧中发送即可。
2.如果在ARP缓存表中没有找到相对应的IP地址,主机A就会在网络上发送一个广播(ARP request),广播帧中目标MAC地址是“FF.FF.FF.FF.FF.FF”,这表示向同一网段内的所有主机发出这样的询问:“192.168.1.2的MAC地址是什么?”
3.网络上其他主机并不响应ARP询问,只有主机B接收到这个帧时,才向主机A做出这样的回应(ARP response):“192.168.1.2的MAC地址是0A-11-22-33-44-02”,此回应为单播方式。这样,主机A就知道主机B的MAC地址,它就可以向主机B发送数据。同时它还更新自己的ARP高速缓存(ARP cache),下次再向主机B发送信息时,直接从ARP缓存表里查找即可。
ARP命令
Windows中ARP命令用于显示和修改地址解析协议(ARP)缓存中的条目。
语法:
arp [/a [<Inetaddr>] [/n <ifaceaddr>]]
arp [/d <Inetaddr> [<ifaceaddr>]]
arp [/s <Inetaddr> <Etheraddr> [<ifaceaddr>]]
参数:
参数 | 描述 |
/a [] [/n ] | 显示所有接口的当前 arp 缓存表。 若要显示特定 IP 地址的 arp 缓存条目,请将arp /a与Inetaddr参数一起使用,其中Inetaddr是一个 IP 地址。 若要显示特定接口的 arp 缓存表,请结合 /a参数使用 /n ifaceaddr 参数,其中ifaceaddr是分配给接口的 IP 地址。 |
/d [] | 删除具有特定 IP 地址的条目,其中Inetaddr是 ip 地址。 若要删除表中特定接口的条目,请使用ifaceaddr参数,其中ifaceaddr是分配给接口的 IP 地址。 若要删除所有条目,请使用星号(*)通配符替代Inetaddr。 |
/s [] | 将一个静态条目添加到 arp 缓存,将 IP 地址Inetaddr解析为物理地址Etheraddr。 若要为特定接口将静态 arp 缓存条目添加到表中,请使用ifaceaddr参数,其中ifaceaddr是分配给接口的 IP 地址。 |
说明:
-
Inetaddr和ifaceaddr的 IP 地址以点分隔的十进制表示法表示。Inetaddr为条目IP地址,ifaceaddr为接口IP。
-
Etheraddr的物理地址包含六个用十六进制表示法表示并由连字符分隔的字节(例如,FF-FF-FF-FF-FF-FF)。
-
用 /s 参数添加的条目是静态的(需要管理员身份操作),不会在 arp 缓存中超时。 如果重启 TCP/IP 协议(如重启主机、禁用网卡),则会删除这些条目。
示例:
显示所有接口的 ARP 缓存表
这里,arp -a 不会列出已断开或已禁用的网络接口的ARP缓存。
ARP高速缓存
为最大限度地减少广播 ARP 请求帧的数量,许多 TCP/IP 堆栈实现都包含一个 ARP 缓存,它是一个记录了最近解析过的 IPv4 地址及其对应的 MAC 地址的表。在发送 ARP 请求帧之前,ARP 将首先检查此缓存。每个接口都有其自己的 ARP 缓存。
ARP 缓存条目可以是动态的(基于 ARP 应答),也可以是静态的。静态 ARP 缓存条目是永久性的。动态 ARP 缓存条目拥有与之相关的老化时间,在超过指定的时间后,将从缓存中删除它们。
ARP代理
当发送主机和目的主机不在同一个局域网中时,即便知道对方的MAC地址,两者也不能直接通信,必须经过路由转发才可以。所以此时,发送主机通过ARP协议获得的将不是目的主机的真实MAC地址,而是一台可以通往局域网外的路由器的MAC地址。此后发送主机发往目的主机的所有帧,都将发往该路由器,通过它向外发送。这种情况称为委托ARP或ARP代理(ARP Proxy)。
免费ARP
免费ARP(gratuitous ARP),他是指主机发送ARP查询自己的IP地址。通常发生在系统引导期间进行接口配置的时候。
两个作用:
-
一个主机可以通过它来确定其他主机是否设置了相同的I P地址。
-
如果发送免费A R P的主机正好改变了MAC地址,那么这个分组就可以使其他主机高速缓存中其旧的MAC地址进行相应的更新。如果主机收到某个I P地址的A R P请求,而且它已经在接收者的高速缓存中,那么就要用A R P请求中的发送端MAC地址对高速缓存中相应的内容进行更新。主机接收到任何A R P请求都要完成这个操作( A R P请求是在网上广播的,因此每次发送A R P请求时网络上的所有主机都要这样做)。
ARP相关问题
下面是西门子SIMATIC自动化系统中两个与ARP有关的问题,可以帮助大家加深对ARP的理解。
CP 343/443 修改MAC地址后,使用TCP/IP协议的诊断连接被拒绝
文档类型 常问问题 文档编号 15144693, 文档发布日期 2004年1月30日
https://support.industry.siemens.com/cs/cn/zh/view/15144693
在网络中分配了两次的IP地址的识别
文档类型 常问问题 文档编号 14450682, 文档发布日期 2004年1月30日
https://support.industry.siemens.com/cs/cn/zh/view/14450682