1. ARP到底在解决什么问题
1.1 为什么有了IP地址还不够
很多刚接触网络的朋友都会有这个疑问:两台设备通信,直接用IP地址定位不就行了,为什么还要搞一个ARP去解析MAC地址?这个问题想明白了,ARP就学懂了一半。
IP地址是逻辑地址,它解决的是“这台设备在哪个网络里”的问题。但数据在局域网里传输,靠的是以太网帧,以太网帧在链路上寻址用的是MAC地址,也就是物理地址。你可以这么理解:IP地址是人的姓名,MAC地址是人的身份证号。你在一个小区里找人,光喊名字是不够的,你得知道对方具体住哪栋楼、哪一户,才能真正把东西递到手上。ARP干的事情,就是“根据姓名查到身份证号”,或者说“根据IP地址查到对应的MAC地址”。
从HCIA考试的角度看,ARP是数据链路层和网络层之间的桥梁协议,它本身工作在数据链路层,但服务对象是网络层的IP协议。这个定位很容易考到,也是理解后续所有ARP细节的基础。
1.2 ARP在通信流程中的位置
假设有两台主机A和B,IP分别是192.168.1.10和192.168.1.20,它们在同一个网段,中间可能只隔着一台交换机。A要向B发送数据,流程是这样的:
- A检查自己的路由表,发现B跟自己同网段,不需要走网关;
- A需要构造一个以太网帧,帧里有源MAC和目的MAC,但A只知道B的IP,不知道B的MAC;
- A先发一个ARP请求广播,问“谁是192.168.1.20,请把你的MAC地址告诉我”;
- B收到这个请求后,发现问的是自己,就回一个ARP应答,把自己的MAC地址告诉A;
- A拿到这个MAC地址,把数据封装成以太网帧发出去,同时把这个IP和MAC的对应关系放进自己的ARP缓存表里,下次再通信就不用重新问了。
如果A和B不在同一个网段,情况又不一样了。A会把数据先发给网关,这时候ARP解析的对象就不是B,而是网关的MAC地址。很多初学者在这里容易懵:明明我要访问的是远处那台服务器,为什么抓包看到的ARP请求问的是网关的IP?因为跨网段通信时,数据帧的目的MAC必须是下一跳设备的MAC,只有到了路由器,路由器才会再通过ARP去解析下一跳或最终主机的MAC。
2. ARP报文结构和原理拆解
2.1 ARP报文格式逐字段分析
HCIA考试对ARP报文格式的考查不像思科认证那么深,但你要能说出来每个字段是干什么的,至少要能看懂抓包结果。ARP报文分为两部分:前面的ARP头部加上后面的四个地址字段,总共28字节。
先看硬件类型,占2字节,以太网环境下值为1,表示以太网。协议类型占2字节,表示上层协议,IP协议对应的值是0x0800。紧跟着是硬件地址长度和协议地址长度,各占1字节,以太网环境下分别固定为6和4——这个“6和4”很好记,MAC地址是48位也就是6字节,IP地址是32位也就是4字节。
接下来是操作码,占2字节,取值1表示ARP请求,2表示ARP应答。这一个字段在抓包时最重要,你看到Opcode等于1就知道这是请求,等于2就知道这是应答。后面依次是发送端MAC地址(6字节)、发送端IP地址(4字节)、目的MAC地址(6字节)、目的IP地址(4字节),这4个字段合起来占20字节。
需要注意一点,ARP请求里“目的MAC地址”字段是全0,因为请求方本来就想问“这个IP对应的MAC是谁”,所以在请求报文里这个字段是空的。而“发送端MAC”和“发送端IP”是填写请求方自己的信息,应答方收到之后可以顺便学习到请求方的MAC地址,这也是ARP缓存表填充的一个来源——不一定非要主动发请求才能学到对端信息,收到别人的请求也能学到。
2.2 请求为什么是广播,应答为什么是单播
这是HCIA常考的一个细节,也是理解ARP行为逻辑的关键。
ARP请求帧的目的MAC地址是FF-FF-FF-FF-FF-FF,也就是广播地址。为什么必须用广播?因为A不知道B的MAC地址,也不知道B在哪儿,只能在本地网络里“喊一嗓子”,让所有人都听到,然后等待目标自己回应。广播域内所有设备都会收到这个帧,网卡发现目的MAC是广播地址,就会把帧交给上层协议栈处理。
但这不代表局域网里每个人都会回应。协议栈收到ARP请求后,会检查“目的IP地址”字段是不是自己的IP,只有IP匹配的设备才会回应,其他设备默默丢弃,不回复。
应答帧就不一样了。B既然收到了A的广播请求,自然就知道了A的MAC地址,所以B可以直接构造一个单播帧回复给A,目的MAC填A的MAC地址。这个设计很聪明,避免了一台设备广播应答造成网络上的无谓流量。如果应答也广播,每台主机发起一次解析,整个广播域就要跟着广播一轮,二层网络早就被淹没了。
2.3 ARP缓存机制
ARP缓存是为了避免每次通信都发广播解析地址。发一次广播是有成本的,尤其是大广播域里,一次ARP广播要打扰到所有设备。所以每台设备都会把最近解析到的IP-MAC对应关系缓存起来,下次通信直接查缓存,没有命中才再发ARP。
华为设备上用命令display arp查看ARP表项,输出的每一行基本包含IP地址、MAC地址、VLAN、接口、类型和老化时间这几列。这个命令是HCIA实操考试里极可能考到的,也是日常排障第一步必敲的命令。
缓存表项分两类:动态表项是设备通过ARP协议自动学习的,会老化;静态表项是管理员手工配置的,不会老化。老化时间在华为设备上默认是120秒,也就是说一条动态ARP表项如果120秒没有被使用,就会被删除。下次再通信,需要重新走一遍ARP解析流程。
我之前遇到过不少同事在排障时忽略老化时间:明明ping断了,但只要还有ARP缓存,某些业务还是能通信;反过来,有些设备ARP表项刚老化,突然要发包,第一包丢了、第二包才通,就是因为新解析需要时间,第一包等不到应答就被缓存的报文上报丢弃了。这个问题后面在排障部分还会展开说。
3. 华为设备上的ARP分类与配置
3.1 动态ARP、静态ARP和代理ARP
华为设备的ARP体系,从考试角度核心要掌握三类:动态ARP、静态ARP、代理ARP。免费ARP也算一个特殊的类型,后面单独说。
动态ARP是默认工作方式,设备自动发送ARP请求、自动接收ARP应答、自动维护缓存表。优点是不用手工干预,网络拓扑变化后能自适应。缺点也明显:ARP报文没有认证机制,任何人都可以伪造,动态学习到的表项不一定可信,这就为ARP欺骗留下了空间。
静态ARP是管理员手动指定的固定映射关系。命令格式大概是这样:
[Huawei] arp static 192.168.1.20 00e0-fc12-3456这样配置之后,设备查ARP表时优先用静态表项,不再动态学习这条映射。静态ARP适用于对安全性要求高的场景,比如网关设备的MAC地址手工固定下来,防止网关被伪造。但它的维护成本高,IP地址如果变了,要及时同步修改静态表,否则整段通信直接断掉。
代理ARP是路由器代答的一种机制。当设备发出的ARP请求找不到目标时,如果路由器接口开了代理ARP功能,路由器就会代替目标来应答:“你要找的那个IP我知道,你把帧发给我就行,我来转。”这种情况下,设备以为对方跟自己在一个二层网络里,实际上数据是先发给路由器转发的。华为接口下开启代理ARP的命令是:
[Huawei-GigabitEthernet0/0/0] arp-proxy enable代理ARP在HCIA里更多是概念性考查,让你判断在某种组网下设备能不能通信。记住一个核心场景:主机配置了错误的子网掩码,以为目标跟自己同网段,实际不在,如果不开代理ARP,通信就失败;开了之后,路由器代答,数据发到路由器,路由器替它转发,通信就通了。
3.2 免费ARP的作用
免费ARP(Gratuitous ARP)是指主机在接口up或IP地址配置完成后,主动发一个ARP请求,询问自己的IP地址对应的MAC地址是谁。
这个请求有两个作用:一是通告自己。主机主动把自己的IP-MAC映射广播出去,让局域网里其他设备的ARP缓存表都刷新成自己的信息,这样后续别人想找我,直接查缓存就能拿到正确MAC。二是探测IP地址冲突。如果局域网里已经有别的设备占用了这个IP,那台设备会回应这个免费ARP,发请求的设备就知道自己IP跟别人冲突了,接口会被置为down状态或者打印冲突告警。
抓包软件里看到免费ARP的特征是:ARP请求的发送端IP和目的IP都是本机自己的IP。这一点太好认了,一眼就能看出来。
在华为设备上,如果接口下配置了IP地址,系统会自动发送免费ARP。日常看到“IP address conflicts”之类的日志提示,多半就是免费ARP探测出来的。
4. 实际业务中的ARP排障实战
4.1 网关ARP表项丢失去哪查
先说一个最常见的故障场景:电脑能ping通同一交换机下的其他电脑,但ping不通网关,也就上不了外网。
第一步先确认网关设备是否正常,这个不展开。第二步看电脑的ARP表——Windows下用arp -a命令查看。重点看默认网关的IP对应的MAC地址是否正常。如果网关的MAC地址显示为全0或者显示成了另外一台设备的MAC,那基本就可以判断ARP解析出了问题。
如果电脑里根本查不到网关的ARP表项,说明电脑发出的ARP请求没有回应。可能是网关接口down了,也可能是中间的二层链路有问题,还可能网关设备开启了类似“抑制ARP广播”的安全策略,把请求拦掉了。这时候在网关设备上做抓包,或者直接在网关设备上ping一下这台电脑,触发网关主动发起ARP解析,看能不能学到电脑的MAC。
4.2 ARP欺骗的判断和应对
ARP欺骗是最常见的二层攻击手段,原理就是利用了ARP无认证的特性。攻击者不停发送伪造的ARP应答,说自己就是网关,于是受害者的ARP缓存表里,网关IP对应的MAC被改成了攻击者的MAC。受害者发出去的流量都会先经过攻击者的网卡,数据被截获后再转发出去,中间人攻击就成立了。
在华为交换机上排ARP欺骗,最直接的方法是查看端口下的ARP表项数量和MAC地址是否异常。一个物理端口下有大量不同的IP对应同一个MAC,或者一个MAC地址在多个端口上反复横跳,这都是典型特征。
更稳妥的防范思路是三层设备上开启ARP表项严格学习,限制接口下动态学习ARP表项的数量;安全要求更高的网络,核心设备网关的MAC最好配置成静态ARP。这些配置在HCIA阶段不用实操,但理解思路对日后工作很有帮助。
有人问过:ARP欺骗是不是只能靠防火墙防?防火墙有专门的防ARP欺骗模块,但这不是唯一手段。交换机端口安全、动态ARP检测(DAI)都是有效方案,只是不同方案的部署位置和原理不一样。HCIA不要求这么深,但至少要知道“有这些手段存在”。
4.3 常见ARP问题速查表
| 现象 | 可能原因 | 排查方向 |
|---|---|---|
| 电脑能ping同网段,ping不通网关 | 网关接口故障或网关IP错误 | 检查网关设备接口状态和IP配置 |
| 首次ping不通,第二次通 | ARP缓存老化后重新解析丢第一包 | 延长老化时间或业务侧重试规避 |
| 电脑频繁掉线,但设备本身正常 | ARP表项被伪造或冲突 | 抓包看重复MAC,检查端口安全 |
| 抓包看到大量ARP广播 | 局域网内主机过多且流量模型碎片化 | 划分VLAN缩小广播域 |
| ping外网通,访问业务系统卡顿 | 核心设备ARP表项过多导致CPU处理慢 | 清理无用ARP表项,配置ARP表项限制 |
5. HCIA考试中ARP的高频考点与实操要点
5.1 笔试考点逐条梳理
HCIA笔试对ARP这块考得不难,但覆盖面广,容易出概念辨析题。我把做模拟题和实际考试中反复出现的考点整理一下。
第一个考点是“ARP解决了什么问题”。选项一般设置成“IP地址和MAC地址的映射”之类,这个就算不懂网络也能选对,算是送分题。
第二个考点是“ARP请求和应答的寻址方式”。请求是广播、应答是单播,这个知识点我前面强调过,考试会直接考,而且会换着花样考,比如给你一个抓包截图,让你判断这个帧是请求还是应答。
第三个考点是“ARP缓存老化”。题目会给一个场景:设备A和B通信,过了一段时间又断了一会儿,再通信时第一包丢了,问原因。记忆点就是老化时间到期后重新解析的时延。
第四个考点是“免费ARP”。会问你免费ARP的功能,重点记住“IP冲突检测”和“通告自身映射”这两个作用。
第五个考点是“代理ARP”。一般会结合子网划分的题目一起出,判断在不开代理ARP的情况下,两台主机能不能通信。
5.2 实验考试中必会的三条命令
任子网络实验操作题里,跟ARP相关的操作就这么几条,熟练了就行。
第一条就是display arp。任何涉及网络连通性排查的实验,敲这个命令能看到当前设备的ARP学习情况。如果实验要求你验证某台主机是否在线,ping完之后用这个命令查看,能看到对应IP的MAC已经被学习到,就说明二层通信正常。
第二条是display arp packet statistics,查看ARP报文统计信息。这个命令可以看总的学习报文数、表项刷新次数等。如果发现表项一直在刷新,说明网络里有设备在频繁发送ARP报文,很可能有异常。
第三条是静态ARP配置,也就是前面写过的:
[Huawei] arp static 192.168.1.20 00e0-fc12-3456实验场景里如果需要固定某个IP的MAC,就用这个。配置完记得用display arp确认表项类型是静态的。
5.3 一个容易忽略的细节:ARP表项的老化时间配置
华为设备默认ARP动态表项老化时间是120秒,但这个值是可以调的。老化时间配置在系统视图下用arp expired-time调整,可以设置的范围一般是0到1440分钟。你没看错,单位是分钟,不是秒。
有些现场网络对时延敏感,业务报文一有丢包就告警,排下来发现是ARP老化重解析导致的第一包丢失。很多运维为了避免这个问题,直接把老化时间调大,比如调到240分钟甚至更大。但调大的代价是,主机换IP或者换网卡之后,设备里的ARP表项长期不变,在一段时间内会持续往旧MAC地址上发数据,业务中断时间反而更长。
所以这个参数不是越大越好,要根据业务实际情况折中。默认的120秒对大部分场景是合理的,如果现场确实第一包丢包影响业务,建议先抓包确认是不是ARP重解析导致的,再决定要不要调老化时间,不要盲调。
6. 我个人的一点实操体会
做运维这些年,Arp相关的坑踩了不少,有几个体会不得不说。
排网络故障,第一步永远是查ARP表。很多看似复杂的“怎么会不通”“怎么时通时断”的问题,最后落地就是一串ARP表项的事情。先把二层地址对应关系理清楚,再往上层查,效率高很多。我之前有个现场组网,前端设备反复报错,后台查了一圈IP路由都正常,最后就是前端设备的ARP缓存里网关MAC变成了另一台终端的MAC,被伪造了。这种问题如果不从ARP入手,可能排查一整天都找不到方向。
另外,在广播域较大、终端数量很多的网络里,ARP广播报文本身就是一个不可忽视的负载来源。几百台终端同时上线,ARP请求瞬间爆发,核心交换机的CPU占用率会明显上升。这种场景下不仅要合理规划VLAN减小广播域,还可以关注设备CPU是否承担了不必要的ARP处理。你在规划网络时把ARP因素考虑进去,比事后加防护策略从容得多。