zoukankan      html  css  js  c++  java
  • 对付小白的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。

  • 相关阅读:
    usaco-ariprog1-pass
    usaco-crypt1-pass
    usaco-barn-repair-pass-KISS
    usaco-mixing milk-pass
    面试HR
    LCS求最长公共子序列(DP)
    毕业随想(转载)
    0-1背包问题(DP)
    排序算法
    二叉搜索树的实现 java
  • 原文地址:https://www.cnblogs.com/liuxgcn/p/11077095.html
Copyright © 2011-2022 走看看