对付小白的ARP的简单介绍

地址解析协议(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。

posted @ 2019-06-24 14:56  _liuxg  阅读(197)  评论(0编辑  收藏  举报