自学教程 从零学编程

ARP 协议

一、ARP 是什么

ARP(Address Resolution Protocol,地址解析协议),属于网络层协议(也有教材将其归为链路层辅助协议),工作在同一个局域网内。
作用:根据目标IP地址,查询对应的MAC地址。

IP地址:三层逻辑地址,跨网段路由;
MAC地址:二层物理地址,只在同一个广播域生效。

简单一句话:已知IP,查MAC。

二、背景

以太网二层通信,数据包封装必须填写源MAC、目的MAC。
主机要把数据发给同网段另一台机器:只知道对方IP,不知道MAC,这时就需要ARP。

三、ARP报文封装

ARP报文封装在以太网帧里面:

  • 以太网头部:源MAC,目的MAC(广播 FF:FF:FF:FF:FF:FF)
  • ARP报文:硬件类型、协议类型、硬件地址长度、协议地址长度、操作码(请求/响应)、源MAC、源IP、目标MAC、目标IP

操作码:

  • 1:ARP请求
  • 2:ARP应答

四、ARP工作流程(同网段举例:主机A:192.168.1.10 → 主机B:192.168.1.20)

  1. 主机A先查本机ARP缓存表,缓存表保存 IP <-> MAC 映射;
  2. 如果缓存命中,直接拿到MAC,封装以太网帧发送;
  3. 缓存没有,则发送 ARP广播请求: 广播帧,发给局域网内所有设备:“谁的IP是192.168.1.20,请告诉我你的MAC地址,我的IP是192.168.1.10,MAC是AA:AA:AA:AA:AA:AA”
  4. 局域网所有主机收到广播,核对目标IP;只有主机B匹配;
  5. 主机B回复ARP单播应答,直接发给A:“192.168.1.20 的MAC是BB:BB:BB:BB:BB:BB”
  6. 主机A收到应答,将 192.168.1.20 + MAC 存入本机ARP缓存(带TTL超时老化);
  7. 之后A就可以封装二层帧,直接和B通信。

重点:ARP请求是广播;ARP应答是单播。

五、ARP缓存

主机维护ARP缓存表,存放IP-MAC映射,有老化时间。
Windows查看:arp -a
Linux查看:arp -n

缓存作用:减少ARP广播,提升网络效率;超时后条目自动失效,重新发起ARP查询。

六、跨网段通信时ARP的行为

A和B不在同一网段:
A不会直接ARP查询B的IP,而是ARP查询网关的MAC。
数据包目的IP仍然是B,目的MAC改为网关MAC;网关收到包后路由转发。

口诀:跨网段ARP只找网关,不找目标主机。

七、ARP相关安全问题

  1. ARP欺骗(ARP中毒)
    攻击者发送伪造ARP应答,篡改目标主机ARP缓存,把网关IP绑定到攻击者MAC。所有流量被劫持。
  2. 防护方案:DAI(Dynamic ARP Inspection)、静态ARP绑定。

八、ARP、IP、MAC三者关系

  • IP:三层,逻辑地址,跨路由器路由
  • MAC:二层,物理地址,仅同一广播域
  • ARP:完成同网段 IP → MAC 解析

反向解析RARP:已知MAC查IP,现在基本淘汰,被DHCP替代。

九、优缺点

✅ 优点

  1. 简单高效,局域网内快速完成地址映射;
  2. 广播机制,无需预先配置IP-MAC对应关系。

❌ 缺点

  1. 基于广播,广播域大时会产生大量广播流量;
  2. 协议原生无身份校验,极易遭受ARP欺骗。

十、小结

  1. ARP:地址解析协议,同网段内由IP查MAC;
  2. ARP请求广播,应答单播;结果存入ARP缓存,超时老化;
  3. 跨网段通信时,主机ARP查询网关MAC,不是目标主机MAC;
  4. 原生协议无认证,存在ARP欺骗风险;
  5. 只在同一个二层广播域生效,不能跨路由器。

思考题:ARP广播包能不能被路由器转发?为什么?

标签:

0 条笔记