arp
why's arp
背景
- 二层交换机通过mac地址表转发数据包,但PC1(1.1.1.1)只知道PC2(1.1.1.2)的IP地址,那PC1和PC2如何通信呢?于是有了arp协议,PC1如果访问PC2,PC1首先发送arp数据包请求PC2的mac地址,PC1得知后(PC2同时也知道了PC1 的IP和mac地址),在数据包中的目的mac封装上PC2的mac地址,交换机根据目的mac将数据包转发给PC2,因为PC2已知PC1的信息,可以直接回给PC1,无需再发送arp请求PC1的mac地址。
[^Tips]: arp只存在ipv4网络中,因为arp是广播协议,ipv6不再使用广播。
what's arp
arp request包
Ethernet II, Src: IntelCor_f8:8e:00 (5c:87:9c:f8:8e:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
Address Resolution Protocol (request)
Hardware type: Ethernet (1)
Protocol type: IPv4 (0x0800)
Hardware size: 6
Protocol size: 4
Opcode: request (1)
Sender MAC address: IntelCor_f8:8e:00 (5c:87:9c:f8:8e:00)
Sender IP address: 192.168.0.105
Target MAC address: 00:00:00_00:00:00 (00:00:00:00:00:00)
Target IP address: 192.168.0.1
- Ethernet II
Src:PC1的mac地址;
Dst:因为不知道PC2的mac地址,所以要广播请求,交换机收到后将该数据包广播给网络中所有设备。ff:ff:ff:ff:ff:ff(广播mac)。
- Address Resolution Protocol
Opcode:为1 表示 request数据包;
Sender MAC address:PC1的mac地址;
Sender IP address:PC1的IP地址;
Target MAC address:因为PC1不知道PC mac,所以设为全0,00:00:00:00:00:00(该字段二层交换机不会识别,所以不会设备广播mac,没有必要);
Target IP address:PC2的IP地址。
arp reply包
Ethernet II, Src: Tp-LinkT_d2:01:59 (74:05:a5:d2:01:59), Dst: IntelCor_f8:8e:00 (5c:87:9c:f8:8e:00)
Address Resolution Protocol (reply)
Hardware type: Ethernet (1)
Protocol type: IPv4 (0x0800)
Hardware size: 6
Protocol size: 4
Opcode: reply (2)
Sender MAC address: Tp-LinkT_d2:01:59 (74:05:a5:d2:01:59)
Sender IP address: 192.168.0.1
Target MAC address: IntelCor_f8:8e:00 (5c:87:9c:f8:8e:00)
Target IP address: 192.168.0.105
- Ethernet II
Src:PC2的mac地址;
Dst:PC1的mac地址(因为PC2收到了PC1的arp请求包,所以PC2知道了PC1的mac);
- Address Resolution Protocol
Opcode:为2 表示 reply数据包;
Sender MAC address:PC2的mac地址;
Sender IP address:PC2的IP地址;
Target MAC address:PC1的mac地址;
Target IP address:PC1的IP地址。
[^Tips]: 通过arp请求、arp回复,PC1和PC2就可以建立起通信。
免费arp包
Frame 1: 60 bytes on wire (480 bits), 60 bytes captured (480 bits) on interface -, id 0
Ethernet II, Src: HuaweiTe_33:74:05 (4c:1f:cc:33:74:05), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
Address Resolution Protocol (ARP Announcement)
Hardware type: Ethernet (1)
Protocol type: IPv4 (0x0800)
Hardware size: 6
Protocol size: 4
Opcode: request (1)
[Is gratuitous: True] //wireshark分析出来的,免费arp。
[Is announcement: True] //wireshark分析出来的,arp通告。
Sender MAC address: HuaweiTe_33:74:05 (4c:1f:cc:33:74:05)
Sender IP address: 1.1.1.1
Target MAC address: 00:00:00_00:00:00 (00:00:00:00:00:00)
Target IP address: 1.1.1.1
- Ethernet II
Src:PC的mac地址;
Dst:因为是免费arp包,所以PC要让全网知道PC的mac地址,所以目的mac是广播mac,ff:ff:ff:ff:ff:ff。
- Address Resolution Protocol
Opcode:为1 和 arp request包一样;
Sender MAC address:PC的mac地址;
Sender IP address:PC的IP地址;
Target MAC address:设为全0,00:00:00:00:00:00;
Target IP address:PC的IP地址(免费arp数据包 源目IP都是PC的IP地址,这是和arp request包唯一的区别)。
arp probe包
数据包:565
Ethernet II, Src: WistronI_cd:e0:52 (98:ee:cb:cd:e0:52), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
Address Resolution Protocol (ARP Probe)
Hardware type: Ethernet (1)
Protocol type: IPv4 (0x0800)
Hardware size: 6
Protocol size: 4
Opcode: request (1)
[Is probe: True]
Sender MAC address: WistronI_cd:e0:52 (98:ee:cb:cd:e0:52)
Sender IP address: 0.0.0.0
Target MAC address: 00:00:00_00:00:00 (00:00:00:00:00:00)
Target IP address: 25.9.52.1
背景:当PC3从DHCP server收到分配的IP地址时,首先发arp probe数据包探测网络中这个地址是否被使用(好像并不是所有操作系统都会发arp去探测地址,win10是会的),如果网络中有arp回复(PC4),说明这个地址被使用了,PC便会拒绝使用这个IP地址。
- Ethernet II
Src:PC3的mac地址;
Dst:PC3要探测全网,所以目的mac是广播mac,ff:ff:ff:ff:ff:ff。
- Address Resolution Protocol
Opcode:为1 和 arp request包一样;
Sender MAC address:PC3的mac地址;
Sender IP address:因为DHCP server给分配的地址还没有正式使用,所以该字段设为全0;
Target MAC address:不知道网络中谁使用这个地址,所以目的mac设置全0;
Target IP address:DHCP server分配给PC3的地址,也是PC3要探测地址。
数据包:570
Ethernet II, Src: WistronI_ce:61:f9 (98:ee:cb:ce:61:f9), Dst: WistronI_cd:e0:52 (98:ee:cb:cd:e0:52)
Address Resolution Protocol (reply)
Hardware type: Ethernet (1)
Protocol type: IPv4 (0x0800)
Hardware size: 6
Protocol size: 4
Opcode: reply (2)
Sender MAC address: WistronI_ce:61:f9 (98:ee:cb:ce:61:f9)
Sender IP address: 25.9.52.1
Target MAC address: WistronI_cd:e0:52 (98:ee:cb:cd:e0:52)
Target IP address: 0.0.0.0
[Duplicate IP address detected for 25.9.52.1 (98:ee:cb:ce:61:f9) - also in use by 98:ee:cb:cd:e0:52 (frame 559)] //wireshark分析出来的结果-IP地址冲突。
- Ethernet II
Src:PC4的mac地址;
Dst:PC3的mac地址;
- Address Resolution Protocol
Opcode:为2 和 arp reply包一样;
Sender MAC address:PC4的mac地址;
Sender IP address:PC4的mac地址;
Target MAC address:PC3的mac地址;
Target IP address:因为DHCP server给PC4和PC3分配的地址冲突了,PC4回复PC3,PC3还没有正式使用的IP地址,所以该字段为0。
other arp
静态arp
- 静态arp不会老化,在华为或H3C交换机上, reset arp static 清除全部静态arp,清除单条静态arp :undo arp static 1.1.1.1 1111-1111-1111
动态arp
- 华为交换机默认20分钟arp老化时间(display arp可以看到老化时间)
reset arp dynamic,清除动态arp;
reset arp interface g0/0/1,清除某一接口的某个ip地址的arp 或该接口的全部arp
arp learning strict
- 用户通过命令行arp learning strict { forcr-enable | forcr-disable | trust }或者arp learning strict使能了ARP严格学习功能,使得设备只学习自己发送的ARP请求报文的应答报文。
arp learning strict { force-enable | force-disable | trust }
[^Tips]: 配置trust参数与配置undo arp learning strict命令的功能效果一致。
arp miss
- 如果网络中有用户向设备发送大量目标IP地址不能解析的IP报文(即路由表中存在该IP报文的目的IP对应的路由表项,但设备上没有该路由表项中下一跳对应的ARP表项),将导致设备触发大量的ARP Miss消息。这种触发ARP Miss消息的IP报文(即ARP Miss报文)会被上送到主控板进行处理,设备会根据ARP Miss消息生成和下发大量临时ARP表项并向目的网络发送大量ARP请求报文,这样就增加了设备CPU的负担,同时严重消耗目的网络的带宽资源。如图1所示,攻击者向网关发送目的地址为10.2.1.5/24且不能解析的IP报文。

为了避免这种IP报文攻击所带来的危害,设备提供了如下几类针对ARP Miss消息的限速功能:
-
根据源IP地址进行ARP Miss消息限速
当设备检测到某一源IP地址的IP报文在1秒内触发的ARP Miss消息数量超过了ARP Miss消息限速值,就认为此源IP地址存在攻击。
如果指定了IP地址,则针对指定源IP址的ARP Miss消息根据限速值进行限速;如果不指定IP地址,则针对每一个IP地址的ARP Miss消息根据限速值进行限速。
-
当IP报文触发ARP Miss消息时,设备会根据ARP Miss消息生成临时ARP表项,并且向目的网段发送ARP请求报文。
- 在临时ARP表项老化时间范围内:
- 设备收到ARP应答报文前,匹配临时ARP表项的IP报文将被丢弃并且不会触发ARP Miss消息。
- 设备收到ARP应答报文后,则生成正确的ARP表项来替换临时ARP表项。
- 当老化时间超时后,设备会清除临时ARP表项。此时如果设备转发IP报文匹配不到对应的ARP表项,则会重新触发ARP Miss消息并生成临时ARP表项,如此循环重复。
当判断设备受到攻击时,可以增大临时ARP表项的老化时间,减小设备ARP Miss消息的触发频率,从而减小攻击对设备的影响。
1.执行命令interface G0/x/x,进入接口视图(三层接口)。
2.执行命令arp fake timeout expire-time,配置临时ARP表项的老化时间。
缺省情况下,临时ARP表项的老化时间是5秒。 - 在临时ARP表项老化时间范围内:
该部分引用华为交换机产品文档-arp安全原理描述-ARP Miss消息限速
代理arp
PC1:1.1.1.1/16,不配置网关
PC2:1.1.2.1/16,不配置网关
设备配置-路由器:
interface GigabitEthernet0/0/0
ip address 1.1.1.254 255.255.255.0
arp-proxy enable
#
interface GigabitEthernet0/0/1
ip address 1.1.2.254 255.255.255.0
arp-proxy enable
PC1 与路由器 G0/0/0接口链路抓包:包1
PC2与路由器 G0/0/1接口链路抓包:包2

过程分析:
1.PC1发送arp请求包,请求PC2的mac地址;包1:8
2.路由器收到PC1 arp请求包后,发送请求1.1.2.1 的arp请求包;包2:2
3.PC2 回复arp请求包;包2:3
4.路由器代替PC2 回复PC1的arp请求包;包1:9
5.PC1 发送ping包;包1:10-11
6.路由器 请求PC1的mac地址(arp请求包);包1:12-13
7.路由器将ping包转发给PC2;包2:4
8.PC2 回复PC1 (二层封装路由器接口mac;包2:5
9.路由器 转发PC2的icmp reply(二层封装路由器接口mac;包1:15
rarp
Reverse arp-反向arp,已知对方的mac地址,但是不知道对方的IP地址,发送rarp数据包请求对方的IP地址。该协议用的相对很少,不对其详细说明。

浙公网安备 33010602011771号