ARP协议分析
ARP(Address Resolution Protocol ,地址解析协议)是根据IP地址获取物理地址的一个TCP/IP协议。
深入分析ARP工作流程
同网段通信:
假设主机PC1(192.168.0.102)要和PC2(192.168.0.100)通信。
(1)PC1在本地ARP缓存表中检查PC2匹配的MAC地址。
(2)如果PC1没有找到对应的条目,它将询问主机2的MAC地址,从而将ARP请求帧广播到本地网络上的所有主机,如图1。本地网络上的每台主机都会接收到ARP请求并且检查是否与自己的IP地址匹配,如果不匹配,它就会丢弃ARP请求。
如果有对应条目,那么它会发送一个ARP请求单播给PC2,以进行确认,如图3。
(3)主机PC2确定ARP请求中的目的IP地址与自己的IP地址匹配,于是将包含其mac地址的ARP回复(单播)直接发送给PC1。
不过,PC2似乎没有将PC1的IP地址和MAC地址缓存到自己本地,在它发送ICMP响应前还是会广播查询一下PC1的MAC地址,如图2。
(4)当主机PC1收到回复消息时,会将PC2的IP和MAC地址添加到自己的ARP缓存表。
抓包:
图1 当ARP缓存中无对应MAC地址,执行ping命令,抓取ARP协议包
图2 执行ping命令后,ARP和ICMP报文序列
图3 当ARP缓存中有对应MAC地址,执行ping命令,抓取ARP协议包
跨网段通信:
当目标IP与主机不在同一个网段时,主机查询ARP,ARP回应:“我在192.168.0.1/24网段,目标地址在192.168.2.0/24,不属于同一个网段,需要使用默认网关”,主机知道默认网关的地址,但没有网关的MAC地址,需要先进行查询。
一般来说,当我们ping一个不同网关的主机时,并没有ARP请求包(假设可以ping通),这是因为本地主机的ARP缓存中已经有默认网关的mac地址了。当发现目标主机与自己不在同一个网段时,它直接封装默认网关的mac地址为目的物理地址,然后发送单包给网关。
使用 arp -d * 清空缓存表,同时抓包,可看到主机请求网关192.168.0.1的mac地址的过程:
ARP报文格式
ARP请求报文(广播)
帧头部:
目标MAC为ff:ff:ff:ff:ff:ff(广播地址),源MAC地址为70:1c:e7:7e:ef:73
0x0806代表封装的上层协议是ARP协议
ARP协议内容:
硬件类型(2字节):表示协议实现在哪种类型的网络上,这里是以太网
协议类型(2字节):表示解析协议(上层协议),一般是0800,即IP
硬件地址长度(1字节):MAC地址长度,此处为6个字节
协议地址长度(1字节):IP地址长度,此处为4个字节
操作类型(2字节):表示ARP协议数据包类型。1表示ARP请求,2表示ARP应答
源MAC地址:发送端MAC地址,70:1c:e7:7e:ef:73
源IP地址:表示发送端协议地址,192.168.0.102
目标MAC地址:目标端MAC地址,由于还不知道,所以是,00:00:00:00:00:00
目的IP地址:目的端IP地址,192.168.0.100
ARP响应报文
ARP报文就是蓝色背景的这一串,具体字段的含义,参照请求报文。