一台主机A如果要向目标主机B发送数据,无论主机B在本网段还是在远程网络,这些需要发出去的数据包中需要四样必不可少的地址,那就是源IP地址和源MAC地址,以及目标IP地址和目标MAC地址,当主机B在封装数据包时,自己的IP地址和MAC地址可以正确地,轻易地封装进去,目标IP自己也知道,可以封装进去,可是,关键就在目标MAC该如何得来,由于主机A曾经和主机B发生过通信,曾经通过ARP得到过目标主机的MAC地址,那么它就会把主机B的IP地址和MAC对应地记录下来,放在缓存表中,以备下一次再使用,但要说明的是,因为考虑到主机B有更换网卡的可能,所以无论何时当主机A再次收到关于主机B的MAC地址更新信息,它都将刷新自己的ARP缓存表,将新收到的MAC地址和主机B的IP地址对应起来,正因为主机A在任何时候收到ARP数据包,都将再次更新ARP缓存,所以导致了另外一个令人头疼的事情发生:
如果现在一台不怀好意的主机C想要窃取网络中的数据或者其它目的,那么这时它就可能向A发送一个ARP数据包,数据包中声称主机B的MAC地址已经改变,当主机A收到后,得知此消息,就立刻更新原来主机B的MAC地址,当它要和主机B进行通信时,就会在数据包中封装新的MAC地址,如果这个MAC地址是前面主机C的,那么主机A就会把本来要发给主机B的数据错误地发给了主机C,被主机C窃取成功,而主机C为了掩人耳目,“看”过数据后,再发给主机B,从而不影响主机A和主机B之间的正常通信。