ARP
ARP报文格式
报文的长度是42字节。前14字节的内容表示以太网首部,后28字节的内容表示ARP请求或应答报文的内容
- 以太网目的MAC:以太网目的MAC地址,发送ARP请求报文时,该字段为广播的MAC地址0xffff-ffff-ffff
- 以太网源MAC:以太网源MAC地址
- 帧类型:数据的类型,对于ARP请求或应答来说,该字段的值为0x0806
- 硬件类型:对于以太网,该字段的值为1
- 协议类型:发送方要映射的协议地址类型,对于IP地址,该字段的值为0x0800
- 硬件地址长度:对于ARP请求或应答来说,该字段值为6
- 协议地址长度:对于ARP请求或应答来说,该字段值为4。
- OP:操作类型,1-ARP请求,2-ARP应答,3-RARP请求,4-RARP应答
- 源MAC:该源MAC地址与以太网首部中的以太网源MAC相同
- 源IP:源IP地址
- 目的MAC:目的MAC地址,发送ARP请求报文时,该字段为全0的MAC地址0x0000-0000-0000。
- 目的IP:目的IP地址
分类
- 正向ARP:将IP解析成MAC
- 反向ARP(RARP):将MAC解析成IP,用于无盘工作站
- 代理ARP(ARP Proxy):
两个互访的节点在同一网段,但广播的ARP报文无法到达,需要使用代理ARP- Vlan间代理:用于super vlan
- Vlan内代理:同一广播域,但是配置了二层或者三层隔离,双方都需要通过网关访问,双方封装的目的mac也是网关的mac
- 路由式代理:PC1访问PC2,PC1首先会判断PC2的IP是否和自己在同一个广播域,如果在同一个广播域,那么PC1会向中间的路由器发送ARP请求。如果路由器开启代理ARP的功能后,收到PC1的ARP请求,会检查自己的路由表中该路由是否可达,如果可达,路由器会将自己的Mac回复给PC1
- Vlan间代理:用于super vlan
- 免费ARP:IP地址冲突检测;用于通告一个新的MAC地址;在VRRP备份组中用来通告主备发生变换
MAC地址表和ARP表的区别?
MAC地址表,老化时间300s(5m),二层转发,接口和MAC关联;ARP地址表:老化时间1200s(20m),IP和MAC关联
交换机的一个接口是否可以关联多个MAC?
可以。交换机A接口1连接交换机B接口2,交换机B上连接n台设备,此时交换机A的接口1可以学习到交换机B上连接的那n台设备的mac地址
交换机的多个接口是否可以关联一个MAC?
不可以。否则mac地址震荡(flapping)
总结:一个接口对应多个mac,一个mac只能对应一个接口
特殊应用:在主机没有配置网关的情况下,使用代理ARP实现对外网的访问,即使用代理ARP来实现VRRP的功能,见下图
ARP攻击
1. ARP泛洪攻击(拒绝服务攻击Dos)
攻击者发送大量的ARP报文,侵占设备ARP表项资源,导致系统资源耗尽,从而使正常用户业务受到影响。
可以通过配置ARP表项限制、ARP Miss消息限速、ARP表项严格学习、ARP报文限速来防止ARP泛洪攻击。
2. ARP欺骗攻击(中间人攻击)
攻击者通过发送伪造的ARP报文,恶意修改设备或网络内其他用户主机的ARP表项,造成用户或网络的报文通信异常。
可以通过配置ARP表项固化、ARP表项严格学习、发送免费ARP报文、动态ARP检测来防止ARP欺骗攻击。
MAC地址漂移
概念
设备上一个VLAN内有两个端口学习到同一个MAC地址,后学习到的MAC地址表项覆盖原MAC地址表项的现象。
正常情况下,网络中不会在短时间内出现大量MAC地址漂移的情况。出现这种现象一般都意味着网络中存在环路,可以通过查看告警信息和漂移记录,快速定位和排除环路。
MAC地址漂移检测
原理
利用MAC地址出接口跳变的现象,检测MAC地址是否发生漂移
过程
在发生MAC地址漂移时,可以上报包括MAC地址、VLAN,以及跳变的接口等信息的告警。
其中跳变的接口即为可能出现环路的接口
防止MAC地址漂移
- 为端口配置静态MAC
- 为接口配置MAC地址学习优先级
- 禁止相同的优先级的接口发生MAC地址漂移
二层环路与三层环路的区别
环路原因
二层环路是由于物理拓扑出现环路,如3台交换机呈三角形连接。
三层环路一般物理拓扑有环路,并且设备之间路由表形成互指(物理拓扑不成环,2 台设备使用静态路由互指也可能成环,这种特殊情况除外)
二层设备和三层设备的工作行为区别
二层交换机工作行为
收到的数据帧查看二层头部,根据目的MAC地址转发
- 广播:
目的MAC为全1
收到广播报文后除了接收的端口外,向其余所有端口转发 (泛洪) - 组播:
目的MAC的第8位为1
首先判断目的MAC是否本机要接受,如收到STP的BPDU,而自身也运行STP,此报文上送协议处理,不做转发;
如果交换机自身没有运行STP,华为的交换设备也可以识别STP的数据帧,也不做转发
假如此报文自身不需要接受,则处理方式为泛洪,如运行了IGMP SNOOPING则根据snooping表项转发。 - 单播:
目的MAC的第8位为0
如果目的MAC在自身MAC表中不存在,即未知单播,处理方式为泛洪
如果目的MAC在自身 MAC表中存在,则向MAC表中的接口转发
如果该接口等于报文的接收端口,则丢弃
所以单播报文的处理方式中有三种形为:转发,泛洪,丢弃
三层设备工作行为
收到数据包查看三层目的IP,根据目的IP地址转发
- 广播:
目的IP为全 1
收到广播包,路由器会交给相应的协议去处理,比如DHCP、 RIP、ARP等都是广播的 - 组播:
目的IP为224.0.0.0-239.0.0.0
开启相关协议则转发,否则查看本路由器是否加入该组,如果加入了就接收,没有加入就丢弃 - 单播:
目的IP在路由表中存在则按出端口转发,
目的IP在路由表中不存在则丢弃,
目的IP是自己的地址,则读取协议号上送协议处理
环路的影响
- 二层环路:
广播风暴、数据帧复制和MAC地址震荡
例如交换机收到广播帧、组播帧、未知单播帧,会采用泛洪形式处理,数据帧在转发时候产生了拷贝复制,数据帧无休止被转发,最终导致整个网络带宽资源被耗尽 - 三层环路:
数据包会在设备之间有限的互相转发,因为在三层IP头部存在TTL字段,所以报文不会无休止转发
防环机制
- 二层防环
STP、SMART-LINK等技术,或使用LACP链路捆绑、设备堆叠等技术,使物理拓扑上没有环路 - 三层防环:
只要依靠路由协议自身的防环机制
总结
二层环路较易产生且环路产生的后果十分严重,需要运行破环机制经过计算,阻塞某些端口实现预防。
三层环路不容易产生且后果并不十分严重,每种路由协议都有比较完善的防环机制,三层环路比较容易发生在特殊的场景下,如双点双向路由引入等
交换机和路由器收到未知表项如何处理
交换机
根据收到的帧中目的MAC查找设备的MAC表项进行转发。
如果收到帧的目的MAC不在交换机的MAC表项中,交换机会向除了收到该帧的同VLAN所有端口进行泛洪。
路由器
路由器是根据收到报文的目的IP查找本地的路由表进行转发。
如果收到报文的目的IP无法找到相应的路由表项,则路由器会将该报文丢弃。
交换机如何识别二层转发和三层转发
- 交换机根据收到的单播帧的目的MAC来判断是进行二层转发或三层转发,当目的MAC是Vlanif对应的MAC时就是三层转发,否则就是二层转发。
- 收到组播帧,看自身交换机是否运行相应的组播协议,有运行就交给相应的协议处理,例如目的mac地址为01-80-c2-00-00-00提交给stp协议处理;目的mac地址为01-80-c2-00-00-14(15)提交给isis协议处理。
- 收到组播数据,如果有运行PIM组播协议,就根据(s,g)表项向下游接口转发,如果在交换 机上没有运行PIM协议,但是使能了igmp-snooping功能,根据snooping表象中的成员端口转发数据。
- 收到广播,目的IP为全1。交换机会交给相应的协议去处理,比如DHCP、RIP、ARP 等,三层设备是隔离广播域,不会丢弃广播报文
三层交换机与路由器的区别
交换谋快,路由谋转
硬件
三层交换机在网络收敛上慢于路由器并且抵抗网络震荡的能力也弱
三层交换机是通过交换芯片转发数据的,路由器则是通过cpu转发数据的
数据的处理方式
三层交换机在数据转发上的速度要优于路由器
三层交换机的首包通过cpu转发,同时通过arp协议建立交换芯片硬件表项(mac地址与ip地址的映射表),后续报文通过交换芯片直接硬件转发,即一次路由,多次交换
,交换机的硬件三层表项中只包含了目的地址、目的ip对应的mac地址、出口vlan及端口。
路由器通过路由表选择路由后,将该路由下发到FIB(转发信息表)表中,数据到达路由器时,通过FIB表的最长匹配原则查表转发。
功能
路由器提供包括分组过滤、分组转发、优先级、复用、加密、 压缩和防火墙等功能,并且接口类型丰富,支持的三层功能强大,支持负载分担、链路备份、nat转换等,路由器在大型网络中的协议计算,路由表大小,收敛时间等都优于三层交换机。
三层交换机的优点在于可以加快局域网内数据的交换,并且加入路由功能也是为这个目的服务的。一般将三层交换机运用于网络的核心层和汇聚层。
ICMP的常见攻击与防患
ICMP泛洪攻击
利用频率极快的icmp报文,让被攻击者疲于应付
攻击者发送速度极快的ICMP报文,被攻击者就会徒劳的回复大量ICMP报文给虚假地址,最终消耗自身的系统资源,最终导致服务器停止相应。
设备针对ICMP泛洪攻击进行CAR限速,保证CPU不被攻击,保证网络的正常运行
Ping of Death 攻击
利用非常规巨包使被攻击者无法组包
攻击者发送大于65535字节的ip数据包给对方,被攻击者接收到全部分段并重组报文时总的长度超过了65535字节,导致内存溢出,系统会出现内存分配错误而导致TCP/IP堆栈崩溃,导致死机
需要在防火墙上配置允许通过的ICMP报文的最大长度,在防火墙收到大于此长度的数据包文之后将直接丢弃
Large-ICMP 攻击
利用巨包分片后需要组包,使被攻击者疲于应付
同Ping of Death类似,也是利用一些大尺寸的ICMP报文对系统进行的一种攻击,与ping of death 不同的是,Large-ICMP报文的长度不会超过IP 报文的最大长度65535。
但此数据包在传输的过程中会被分片或在分片之后发出,主机收到之后将进行数据包的重组, 重组数据包的过程非常消耗CPU资源,导致主机的资源被大量占用
启用分片报文攻击防范,设备实时检测出分片报文并予以丢弃或者限速处理,实现对本设备的保护
ICMP-Unreachable 攻击
攻击者向目标主机发送虚假的ICMP-Unreachable报文,干扰了目标主机的路由信息,影响了报文发送。
开启ICMP不可达报文攻击防范功能,即收到ICMP不可达报文将直接忽略,依旧认为该主机可达
ICMP-Redirect 攻击
和ICMP-Unreachable攻击类似,攻击者跨越网段向另外一个网络的目标主机发送虚假的重定向报文,以改变目标主机的路由表,干扰目标主机的路由信息,影响报文发送
启动ICMP重定向攻击防范后,设备将对ICMP重定向报文进行丢弃,并记录攻击日志