在局域网中,当主机或其它网络设备有数据要发送给另一个主机或设备时,它必须知道对方的IP地址。但是仅仅有IP地址是不够的,因为IP数据报文必须封装成帧才能通过物理网络发送,因此发送站还必须有接收站的物理地址,所以需要一个从IP地址到物理地址的映射。APR就是实现这个功能的协议。
ARP的报文结构
在同一网段
假设PCA和PCB在同一个网段,PCA要向PCB发送信息。具体的地址解析过程如下:
(1) PCA首先查看自己的ARP表,确定其中是否包含有PCB对应的ARP表项。如果找到了对应的MAC地址,则PCA直接利用ARP表中的MAC地址,对IP数据包进行帧封装,并将数据包发送给PCB。
(2) 如果PCA在ARP表中找不到对应的MAC地址,则将缓存该数据报文,然后以广播方式发送一个ARP请求报文。ARP请求报文中的发送端IP地址和发送端MAC地址为PCA的IP地址和MAC地址,目标IP地址和目标MAC地址为PCB的IP地址和全0的MAC地址。由于ARP请求报文以广播方式发送,该网段上的所有主机都可以接收到该请求,但只有被请求的主机(即PCB)会对该请求进行处理。
(3) PCB比较自己的IP地址和ARP请求报文中的目标IP地址,当两者相同时进行如下处理:将ARP请求报文中的发送端(即PCA)的IP地址和MAC地址存入自己的ARP表中。之后以单播方式发送ARP响应报文给PCA,其中包含了自己的MAC地址。
(4) PCA收到ARP响应报文后,将PCB的MAC地址加入到自己的ARP表中以用于后续报文的转发,同时将IP数据包进行封装后发送出去。
不在同一网段
1、当PCA和PCB不在同一网段时,查看自己的ARP表,发现没有包含有PCB的ARP表项 ,如果有,则直接利用ARP表中的MAC地址,对于IP数据包进行帧的封装,并将数据包发送给网关。
2、如果PCA在ARP表中找不到对应的MAC地址,则将缓存该数据报文,,PCA向网关发出ARP请求,ARP请求报文中的目标IP地址为网关的IP地址。网关收到ARP请求报文后,再回发送一个ARP回应报文。
3、当PCA从收到的响应报文中获得网关的MAC地址后,将报文封装并发给网关。
4、如果网关没有PCB的ARP表项,网关会广播ARP请求,目标IP地址为PCB的IP地址,当网关从收到的响应报文中获得PCB的MAC地址后,就可以将报文发给PCB;
转载于:https://blog.51cto.com/hciewd/1151733