前段时间面试的时候被问到了,面试官说答得不够细,所以再回来抠一下。
ARP协议本人

ARP协议是数据链路层协议,编号0x0806,有 ARP Request 和 ARP Reply 报文,能够通过设备的IP地址查询其 MAC地址。
ARP 报文用以太网帧承载。
首部内容是:
<硬件类型,协议类型,硬件地址,协议长度>
负载是:
<源MAC,源IP,目的MAC,目的IP>
ARP查询
同网段查询
- 主机A希望向主机B发送IP报文。先根据主机B的IP,检查自己的ARP 表中是否有主机B的MAC,有就将IP与MAC地址填入IP报文头直接发送;
- 若没有,则缓存IP报文并广播发送 ARP Request 报文;
- 收到 ARP Request 报文的主机检查自己是否为目的主机,若不是则忽略该报文;
- 如果发现自己是目的主机,将 ARP Request 报文中主机A的IP地址和MAC地址存入自己的ARP表中,同时主机B以单播方式向主机A回应一个ARP Reply 报文;
- 最后主机A将根据ARP Reply得到主机B的MAC地址。它将主机B的<IP地址,MAC地址>存入自己的ARP表并将这两个字段填入IP报文头并发送。
不同网段查询
- 主机A希望向主机B发送IP报文。先向ARP查询主机B的IP地址,ARP根据掩码发现自己与目的IP不在同一个网段,此时ARP将查询网关(默认路由)的MAC地址,如果连网关的MAC地址都没有的话则对网关地址再进行同网段ARP查询,查询后将<网关IP,网关MAC>和<主机B IP,网关MAC>两项放入ARP表中;
- 主机A将IP报文发往网关。此时:目的IP=主机B,目的MAC=网关,源IP和源MAC=主机A;
- 网关收到IP报文后发现目的IP根本不是他,于是网关一方面将主机A的IP与MAC地址放入ARP表,另一方面去自己的ARP表中查找目的IP的MAC地址,如果没有的话在主机B所在的网段进行同网段ARP查询,查询后将主机B的IP与MAC地址放入自己的ARP表;
- 网关向主机B发送IP数据报。此时:目的IP=主机B,目的MAC=主机B,源IP=主机A,源MAC=网关;
- 最后主机B收到IP数据报并将<主机A的IP,网关的MAC>放进自己的ARP表中。
一点补充
1.上文中不同网段查询是配置了缺省网关的情况。如果主机A没有配置缺省网关,还需要在网关上开始 ARP Proxy 功能才能实现跨网段ARP 查询。(不然网关会把IP数据报丢掉
2.关于ARP Request报文:帧头与ARP头中,源MAC地址都是发送者的MAC地址。而帧头中的目的MAC地址是:ff-ff-ff-ff-ff-ff,表广播;ARP头中目的地址是:00-00-00-00-00-00,表未知
网友评论