地址解析协议(Address Resolution Protocol),已知对方IP地址查询对方MAC地址。是IPv4中网络层必不可少的协议,不过在IPv6中已不再适用,而是被邻居发现协议(NDP)所替代。
一个形象的比喻,简单理解:
相当于在国内(企业网或园区网等较大的网络)的某一个不算太大的村庄(某一个vlan)里,张三知道李四的姓名(IP地址),但是不知道李四的门牌号(MAC地址),可是又想给李四送礼(传输数据),这该怎么办???ARP来解决问题,方法就是:
喊!!!
没错,就是喊,这个时候张三在全村(vlan内)喊一嗓子(request):“谁知道李四(IP)的门牌号(MAC)是多少啊,告诉张三”,别人听到后一看不是找自己的,那就“左耳朵进右耳朵出(即丢弃)”,李四一看是找自己的,马上回应(reply):“李四的门牌号是MAC_李四”,然后张三就知道了李四的门牌号,可以送礼了。
注(完全小白的看不懂这里可以暂时先不看注释):此处用的是姓名代替而不是身份证号,因为目前IPv4的网络中还有好多都是内网私有地址(10.0.0.0/8、172.16~31.0.0/12、192.168.0.0/16),路由器默认是不转发的,也就是说存在“同名不同地”的可能性。
但是在不同局域网的两个相同的私有IP却又能通过QQ、微信进行通讯聊天,这个可以简单理解为是因为腾讯有公网服务器,在公网做了一次转发。
ARP前提是工作在同一局域网的两台或多台主机,准确说应该是同一vlan。
假设现在同一vlan内有三台主机(或者称为3个结点更合适)A、B、C,分别对应:
IP_A --- MAC_A、
IP_B --- MAC_B、
IP_C --- MAC_C.
主机A想跟主机B通信,主机A知道自己的IP地址是IP_A和自己的MAC地址是MAC_A,
但是只知道主机B的IP地址是IP_B,
这个时候主机A会先在自己的ARP缓存表中查看有没有IP_B对应的MAC地址,查询完以后发现没有IP_B对应的MAC地址;
这个时候主机A会在自己所在的vlan内发出请求广播包,向vlan内所有存活主机(虽然A也不知道有多少存活的主机)请求IP_B的MAC地址;
这个时候主机B和主机C都收到了主机A的请求包,但是C发现A请求的内容跟自己没有关系,就丢弃,
而B看到A请求的内容跟自己有关,就回应了A,A这个时候也简单地相信了“所谓B”的响应,一次简单的ARP过程到此结束。
前方ARP警告!!!
大多数网络协议都是遵循“先到先得,后道优先”原则的,
像DHCP就是典型的“先到先得”,而ARP就是典型的“后到优先”。
正是由于这个原则,导致了ARP攻击“中间人”的存在。
在A请求B的MAC地址的时候,不仅仅B能够回应A,C也能回应,但是到底谁是真的呢?
ARP规定,后收到的reply为准,因为B有可能确实就是换了MAC地址啊。
这就给了C的可乘之机,在B回应的时候C也回应,而且是多次回应,大量发送reply数据包,告诉A说:“B的MAC地址是MAC_C”,意图覆盖B回应给A的reply数据包,导致A原本想反送给B的数据发送给了C。
甚至说,在A没有发送请求的时候,C就提前响应reply数据包,让A误认为B是MAC地址就是MAC_C。