假设host A 向host B发起arp请求:
ARP request报文:
Ethernet transmission layer (not necessarily accessible to the user:链路层驱动搞定):
48.bit: 广播地址
48.bit: Ethernet address of sender(host A)
16.bit: Protocol type = ether_type$ADDRESS_RESOLUTION(0x0806)
Ethernet packet data:
16.bit: (ar$hrd) Hardware address space (硬件地址类型e.g., Ethernet,Packet Radio Net.)
16.bit: (ar$pro) Protocol address space. For Ethernet hardware, this is from the set of type fields ether_typ$<protocol>,(三层协议地址类型,如ipv4)
8.bit: (ar$hln) byte length of each hardware address(硬件地址长度,单位字节)
8.bit: (ar$pln) byte length of each protocol address(三层协议地址长度,单位字节)
16.bit: (ar$op) opcode (ares_op$REQUEST )(arp报文类型:arp请求、arp响应、rarp请求、rarp响应)
nbytes: (ar$sha) Hardware address of sender of this packet, n from the ar$hln field.(host A)
mbytes: (ar$spa) Protocol address of sender of this packet, m from the ar$pln field.(host A)
nbytes: (ar$tha) 不关心,任意值,填0
mbytes: (ar$tpa) Protocol address of target.(host B)
ARP reply报文
Ethernet transmission layer (not necessarily accessible to the user:链路层驱动搞定):
48.bit: Ethernet address of target(host A)
48.bit: Ethernet address of sender(host B)
16.bit: Protocol type = ether_type$ADDRESS_RESOLUTION
Ethernet packet data:
16.bit: (ar$hrd) Hardware address space (e.g., Ethernet,Packet Radio Net.)
16.bit: (ar$pro) Protocol address space. For Ethernet hardware, this is from the set of type fields ether_typ$<protocol>,如ipv4
8.bit: (ar$hln) byte length of each hardware address
8.bit: (ar$pln) byte length of each protocol address
16.bit: (ar$op) opcode (ares_op$REPLY)
nbytes: (ar$sha) Hardware address of sender of this packet, n from the ar$hln field.(host B)
mbytes: (ar$spa) Protocol address of sender of this packet, m from the ar$pln field.(host B)
nbytes: (ar$tha) Hardware address of target。(host A)
mbytes: (ar$tpa) Protocol address of target.(host A)
主机/路由器接收到arp request报文的处理:
说明:如果ip地址为以下几种地址的任何一种,则认为该ip地址等于本接口的ip地址:
1、本接口的ip地址(主接口、子接口、vlanif)
2、本接口的vrrp虚拟ip地址
3、本接口的NAT表中的地址
报文处理:
1、如果目的ip地址为本主机接口的ip地址,则回应arp response报文,arp response的发送者硬件地址为本接口的硬件地址
2、如果目的ip地址不是本主机接口的ip地址,则不回应arp response报文
Arp cache处理
1、如果目的ip地址为本主机接口的ip地址,且arp cache中没有发送者ip地址对应的arp表项,则在arp cache中新建一条{发送者ip,发送者硬件地址}对应表项
2、如果目的ip地址为本主机接口的ip地址,且arp cache中已经存在发送者ip地址对应的arp表项(动态arp),则用报文中的硬件地址更新发送者ip地址对应的arp表项,同时更新表项对应的老化时间
3、如果目的ip地址不是本主机接口的ip地址,且arp cache中没有发送者ip地址对应的arp表项,不修改arp cache
4、如果目的ip地址不是本主机接口的ip地址,且arp cache中已经存在发送者ip地址对应的arp表项(动态arp),则用报文中的硬件地址更新发送者ip地址对应的arp表项,同时更新表项对应的老化时间
主机/路由器接收到arp response报文的处理:
报文处理:
1、一律不响应报文
Arp cache处理
1、如果目的ip地址为本主机接口的ip地址,且arp cache中没有发送者ip地址对应的arp表项,则在arp cache中新建一条{发送者ip,发送者硬件地址}对应表项
2、如果目的ip地址为本主机接口的ip地址,且arp cache中已经存在发送者ip地址对应的arp表项(动态arp),则用报文中的硬件地址更新发送者ip地址对应的arp表项,同时更新表项对应的老化时间
3、如果目的ip地址不是本主机接口的ip地址,一律不修改arp cache
交换机接收到arp request/arp response的处理
需要学习源mac地址
Arp cache的老化
每一条arp表项有一个老化时间,当老化时间内该表项没有被查找,也没有被更新,则该表项将会从cache中删除。
Arp cache表项到达老化时间时往往不会马上将该表项删除,而是会发送arp request报文进行探测,探测了规定的次数后发现表项的协议地址和硬件地址绑定关系确实已经不存在,才将表现删除。
动态arp
是指arp cache中的表项是通过arp协议获得的,这样的表项叫做动态arp表项
Arp抑制
为了避免频繁更新和操作arp cache,对于源ip超过一定数量的arp报文不更新arp表,只发送响应报文。
缺省情况下,vlanif口会使能arp抑制功能。其他的接口需要配置。Eth-trunk接口也往往会使能arp抑制功能
二层拓扑探测功能
当接口状态由down转为up时,将该接口对应的arp表项的老化时间设为0,并发送arp探测报文(应该是arp-ping ip报文),更新相应的arp表项。
静态arp
是指arp cache中的表项是通过静态配置的,这样的表项叫做静态arp表项。静态arp不会被老化。
静态arp的好处:
1、满足arp 安全要求,避免arp欺骗
2、静态arp的ip地址和硬件地址可以不是同一局域网的ip网段内某接口的一对地址。比如:源、目的主机不属于同一网段,这时arp cache中目的ip对应的mac地址填源主机网关的mac地址,这样源、目的主机就可以通过网关进行通信了
3、将目的ip地址绑定到一个不存在的mac地址,这样相当于过滤掉了这个ip地址的报文。
免费ARP
作用:
1)向其他路由器or主机主动通告自己的protocol address和hardware address,其它路由器虽然不会响应arp response报文,但是会将新的mac地址和ip地址对应关系更新arp cache
2)检测LAN中是否有其他路由器or主机使用的ip地址与自己的相同,如果有,会收到arp response报文
3)vrrp主、备切换时,发送GARP,让交换机学习新的接口
报文格式:
与arp request的报文格式一样,不同点为:
Hardware address of target和Protocol address of target的值为自己的protocol address和hardware address,即报文的Hardware address of sender of this packet和
Protocol address of sender of this packet域的值
其他主机、路由器、交换机接收免费arp的路由器和主机的处理:
1)如果Protocol地址与自己的Protocol地址不一致,不回应arp response
2) 如果Protocol地址与自己的Protocol地址一致,产生arp response
3)如果cache中有目的ip地址表项,更新表项
4)交换机会对garp进行学习
代理ARP(proxy arp)
arp request的Protocol address of target不是自己interface的Protocol地址,但是是自己所代理的Protocol地址,回应arp response,但是Hardware address of sender of this packet是自己的hardware地址
分为路由式proxy arp、vlan内proxy arp、vlan间proxy arp。三种proxy arp都是因为种种原因通信双方不能通过二层直接通信,需要经过一个三层网关,这个三层网关则将自己的硬件地址作为arp response。
Arp安全
主要原因是arp request报文时广播的,同一局域网内的任何设备都可以接收到报文,分析报文和响应报文。ip地址和mac地址没有认证,任何设备可以伪造。
1、攻击arp表项资源
攻击方式:伪造arp request(目的ip地址是设备的,源ip和源mac是伪造的),arp response(目的ip地址是设备的,源ip和源mac是伪造的),主机学习arp,导致arp cache满,无法学习新的表项
避免方式:
1)严格arp学习:只有自己发送的arp request报文的response响应才学习。其他的arp request和arp response不学习
2)基于接口的arp表项限制:限制某个接口的arp表项最大学习个数,超过个数则不学习
2、攻击设备的计算能力(arp洪范攻击)
攻击方式:
1)发送大量的arp request、arp response报文,设备忙于处理arp报文,没有时间处理其他的业务
2)发送大量的ip报文,是设备忙于处理arp miss,没有时间处理其他的业务
避免方式:
1)arp时间戳抑制:基于目的ip进行,当对应的arp报文在规定时间内超过了限制值,则不处理报文,也不更新arp cache表项
2)当ip报文查路由表,发现没有对应的arp表项。这时设备上报arp miss,控制面下发arp假表项,这样同一个ip再次出现arp miss时,不在上报arp miss消息。Arp假表项有一个老化时间。超过了老化时间,将假表项老化掉。重新出现arp miss,又会上报arp miss消息。控制面接收到arp miss消息后会发送arp请求,尝试获得有效的arp表项。
Arp ping
Arp ping-ip
利用主机接收到arp request会响应arp response这个特点,可以有意识的发送目的ip为某特定ip的arp request报文,如果在超时时间内,接收到相应的arp response,表示这个ip已经有设备在使用。否则表示该ip没有设备在使用。Arp ping-ip表icmp ping报文的优势是,icmp ping报文可能被防火墙拦截,不进行ping响应。但是arp运行在二层,防火墙无法屏蔽
Arp ping-mac
其实是icmp ping在局域网内的应用。