大家好,我是圈圈,一个喜欢结交朋友的老网工!
每天一个网络知识,今天我们要聊聊:什么是ARP协议?
网络通信分层:IP层用逻辑地址(IP,如192.168.1.10),负责端到端路由;以太网层用物理地址(MAC,如00:1A:2B:3C:4D:5E),负责本地帧转发。IP包封装进以太网帧时,需要知道目的MAC——但发送方只知道目的IP,怎么办?
这就是ARP的使命:动态解析IP到MAC的映射。ARP是RFC 826(1982年)定义的协议,工作在OSI的链路层,但常归为网络层。它像“小区广播”:问“谁有这个IP?报上你的MAC!”。在IPv6中,用ICMPv6的NDP取代,但IPv4仍靠ARP。
ARP不加密,简单高效,但也易被攻击。根据Cisco数据,ARP相关问题占LAN故障的20%。理解它,能让你快速定位“连不上网”的根源。
ARP的核心是“解析”:从IP(32位)到MAC(48位)的双向映射。每个主机维护ARP缓存表(ARP Table),存储最近解析的IP-MAC对。缓存有超时(默认几分钟),避免无限广播。
关键消息类型:
- ARP请求(Request)
:广播(目的MAC=FF:FF:FF:FF:FF:FF),问“谁的IP是X.X.X.X?你的MAC是啥?” - ARP应答(Reply)
:单播,直接回复“我的IP是X.X.X.X,MAC是YY:YY:YY:YY:YY:YY”。 - RARP/反向ARP
:老协议,反向解析MAC到IP,今已弃用。
ARP包结构(以太网帧内):
- 硬件类型
:1=以太网。 - 协议类型
:0x0800=IPv4。 - 操作码
:1=请求,2=应答。 - 发送者/目标IP和MAC
:填充解析信息。
在Windows/Linux,用arp -a查看缓存;在Cisco,用show arp。
ARP流程像“寻人启事”:
- 触发
:主机A想发包给主机B(同子网),知B的IP,但不知MAC。A查本地ARP缓存,若无,发起请求。 - 广播请求
:A构建ARP请求包:源IP/MAC=自己的,目标IP=B的,目标MAC=广播。全网设备收到(交换机洪泛)。 - 目标响应
:B收到,匹配目标IP,立即发单播应答:源IP/MAC=自己的,目标IP/MAC=A的。A收到,更新缓存。 - 后续通信
:A用B的MAC封装帧,发包。B的应答只A收到,其他设备忽略或更新自己的缓存(Gratuitous ARP,用于公告变化)。
超时与重试:无应答,重发3-5次。缓存条目有软/硬超时,防止陈旧。
在路由器场景:跨子网时,A发给默认网关IP,网关再路由。但ARP只限本地链路(TTL=1广播)。
安全扩展:如ARP检查(DAI,Dynamic ARP Inspection),交换机验证绑定,防欺骗。
假设学校LAN:主机A(192.168.1.10,MAC=AA:AA:AA:AA:AA:AA)和B(192.168.1.20,MAC=BB:BB:BB:BB:BB:BB),连交换机。
- A ping B
:A输入ping 192.168.1.20。 - ARP请求
:A查缓存无,广播ARP Req:
以太帧头:源MAC=AA,目的=FF:FF... ARP部分:操作=1,发送者IP/MAC=192.168.1.10/AA,目标IP=192.168.1.20,目标MAC=00:00...
以太帧头:源MAC=BB,目的=AA。 ARP部分:操作=2,发送者IP/MAC=192.168.1.20/BB,目标IP/MAC=192.168.1.10/00:00...(忽略)。
用Wireshark捕获:过滤arp,見Req(Who has...)和Reply(... is at ...)。
配置示例(Windows):
# 清缓存arp -d# 添加静态(防欺骗)arp -s 192.168.1.20 BB-BB-BB-BB-BB-BB# 查看arp -a
Cisco交换机防ARP攻击:
ip arp inspection vlan 10ip dhcp snooping
绑定IP-MAC,丢弃非法包。
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……




还没有评论,来说两句吧...