诸暨广电毛艳阳:浅谈ARP - 朝花夕拾 - 51CTO技术博客

来源:百度文库 编辑:偶看新闻 时间:2024/05/05 08:43:36
浅谈ARP
2011-01-17 11:04:06
标签:arp地址解析协议IP地址
版权声明:原创作品,谢绝转载!否则将追究法律责任。
ARP(Address Resolution Protocol) -----地址解析协议。根据百度百科:” ARP,即地址解析协议,实现通过IP地址得知其物理地址。在tcp/ip网络环境下,每个主机都分配了一个32位的IP地址,这种互联网地址是在网际范围标识主机的一种逻辑地址。为了让报文在物理网路上传送,必须知道对方目的主机的物理地址。这样就存在把IP地址变换成物理地址的地址转换问题。以以太网环境为例,为了正确地向目的主机传送报文,必须把目的主机的32位IP地址转换成为48位以太网的地址。这就需要在互连层有一组服务将IP地址转换为相应物理地址,这组协议就是ARP协议。”
详见rfc826中的定义:
Presentedhere is a protocol that allows dynamic distribution of the informationneeded to build tables to translate an address A in protocol P's addressspace into a 48.bit Ethernet address.
注:P指的是一台设备。
arp其实就将32位ip地址解析成48位的mac地址。因为链路层不识别ip地址,另外mac地址具有唯一性。Arp用的很广,从硬件类型就可以看出,常见的支持ethernet,frame-relay,atm,hdlc等,个人认为,只要是ma(multi-access)都需要arp。但在p2p环境中,就不需要arp了,因为在p2p环境中(比如ppp),他只要将报文从接口中扔出即可,接受者只有对方。拨号(pppoe)也是如此。
先看看ARP数据包的格式:
Dest mac
Sou
mac
type
Hardware
type
Protocol
type
Hardware
size
Protocol
size
opcode
Sender
mac
Sender
ip
Target
mac
Target
ip
从硬件类型(hardware type)开始就是ARP数据包了,前面是以太网的帧头。
先看各个字段
硬件类型(hardware type)为16bit,指定了硬件类型,常见的有:
编号
硬件类型
1
以太网
15
帧中继
16
hdlc
17
ATM(异步传输模式)
20
串型链路
协议类型(protocol type)为16bit.,指定了发送者映射到硬件地址(在ethernet中的mac地址,hdlc中的pvc等)的网络层协议。
Ip 为0X0800(这里与以太网的frame头中的type字段很相似,这里标识的是上层的用的是什么传输协议来封装,比如说ip, ipv6, ipx, appletalk 等)
硬件地址大小(hardware address size)为8个bit,指定了硬件地址的大小(ethernet中的mac地址大小,mac为6(字节))
协议地址大小(protocol address size)为8个bit,指定了网络层地址的大小(ipv4为4(字节))
操作(opcode)为16个bit,指明这个arp数据包是arp request (1)还是 arp reply(2)。还有反转arp request(8),反转 arp reply(9)。
发送者硬件地址(sender hardware address)为48个bit-----这里以 ethernet 为例
发送者网络层地址 (sender ip address)为32个bit ------这里以ip 为例
目的者硬件地址(target hardware address)为48个bit
目的者网络层地址(target ip address)为32个bit
看看arp request包

Arp relay 包

免费arp
免费arp即链路中的设备将自己的ip地址做为目的地址来发送arp请求,设备是很不愿意收到这样的arp回复的,如果收到说明链路中有设备与自己的ip地址相同。
主要作用:
1、 检查链路中是否有重复地址
2、 用于hsrp中standby---》active
其实每个配置了ip地址的设备刚开机或者刚连接到链路上,都会发送免费arp
看看windows主机发送的免费arp:

再看看router发送的免费arp
cisco

路由器与主机发送的免费arp并不一致。而且个数也不相同。主机是一次发送3个request 包。而router是一次发2个relay包。也许router之间是不会将免费arp放进自己的arp缓存中,而主机可能将router发送的免费arp放进自己的arp缓存中,可能hsrp中设备更改standby---》active状态就是这样更改主机的arp缓存的吧(这个与arp欺骗很相似)
如果设备没有配置ip地址,他会发送免费arp吗?

答案是不会。
看看router收到免费arp是否放进自己的arp-cache中
其实arp-cache的作用就是方便再一段时间再去访问该设备不需要去请求对方的mac地址,节省链路的带宽与cpu的处理------很多地方都是这样。为高速包交换
看topology

R1与R2、R3为192.168.1.0/24
R2与R4为24.1.1.0/24
R3与R4为34.1.1.0/24
R4的lookback1 地址为4.4.4.4
那些ARP包会被设备放进自己的ARP-CACHE中
R2上面开启debug arp

首先是免费arp,R2收到R3的免费arp,但是并没有放进arp缓存。
请求目的mac的请求者与被请求者
这里以R1请求R2的mac地址,与R3请求R1的mac地址为例
先清空arp-cache
R1

R2

R3

首先R1请求R2的mac地址

访问后R1的arp-cache

R2的ARP-Cache

无关人----R3的arp-cache

然后R3请求R1的mac地址


R3访问R1后访问后,R1的arp-cache

R3访问R1后访问后,R2的arp-cache

R3访问R1后访问后,R3的arp-cache

总结:
ARP数据包是一个broadcast frame,    整个broadcast domain中所以的设备都会收到。只有请求者与应答者会将对方的ip-mac的映射放进自己的arp-cache中,而其他设备解包后丢弃,不会放进自己的arp-cache中。如果自己arp-cache中有该映射的ip地址,后接受的会覆盖先接受的。
代理arp
代理arp应该算是一种arp欺骗,网关设备向主机或者网段之间的其他设备作出的一个代理应答。因为router并不转发广播包,而且有去往目的的路由。所以将自己与之直连的接口的mac地址和目的设备的ip地址做一个映射来应答请求的设备。
这里让我想起来,红头发曾经遗留的一道题目:下一
条是直连设备的ip地址与下一条是自己的接口有什么不同。
根据上面的top
我在R1配置一条静态路由
R1(config)# ip route 0.0.0.0 0.0.0.0 192.168.1.2

R1(config)# ip route 0.0.0.0 0.0.0.0 fa 0/0
现在在R1上面去访问R4的lookback0地址:4.4.4.4
先是配置成
R1(config)# ip route 0.0.0.0 0.0.0.0 192.168.1.2
而且开启了proxy ARP(default开启)

R1访问目的地址为4.4.4.4后的arp-cache

R1请求的是gateway的mac地址(里面没有用到proxy arp),只是将数据包扔给Gateway,由Gateway来转发(这里不管目的是什么网段,都交由GATEWAY, 如果Gateway路由表里面没有到达的路由,就会回复一个icmp报文:目的不可达)

将前面那条default route no掉,配置成
R1(config)# ip route 0.0.0.0 0.0.0.0 fa 0/0
再去访问4.4.4.4
R1请求4.4.4.4的设备的mac地址,这时R2与R3同时将自己的mac给予回应(这里就是代理arp)
收到2个arp relay
先是R3回应的:

再是R2回应的:

看R3的回应的ARP报文,还出现了多个ip地址映射成一个mac地址。而后回应的ARP,会取代先形成的映射(ip地址相同的),与arp欺骗差不多吧
看R2 debug结果

R1访问4.4.4.4成功,Arp-Cache中出现4.4.4.4映射的MAC(是R2做的Proxy Arp)

总结:这里都能访问目的网段,有什么问题呢。这里配置下一条为接口的,谁后回应arp,将谁的mac与目的网段做映射,如果在R2与R4之间设置了加密,而你却走R3,如果R3是一个非法者,R1发送的包全给R3监听了。
既然开启proxy arp都可以访问,现在关闭proxy arp功能,R2关闭后debug的结果

R3关闭Proxy ARP:

R2与R3关闭Proxy Arp后,R1访问4.4.4.4

压根就没有设备回应R1的ARP request ,R1都没有封装成功。

将默认路由的下一下换成R2的ip地址,R2成为R1的网关:
R1的ARP Request

R2的ARP Reply:

结果看到了吧,ping成功了。在看R1的Arp­-cache:

本来想做个Arp欺骗的实验,可以环境搭建不起来,就说说原理吧:
就上面的top:
R1是主机,R2是Gateway,R3做为攻击者,R3主动向R1发送Arp relay报文,发送者的ip地址是R2的地址(192.168.1.2),而发送者的mac是自己的mac地址,R1收到后会覆盖之前R2的IP地址与MAC地址映射,将R2的IP地址与R3的MAC地址形成映射。而R1要向其他网段访问,就不会将数据包发给R2,而是R3,这个过程就是ARP欺骗。