当前位置: 移动技术网 > 科技>操作系统>Linux > ARP协议

ARP协议

2020年01月11日  | 移动技术网科技  | 我要评论

廊坊跳楼,小窝足球秦协,冰河世纪3:恐龙的黎明

一台pc a(192.168.1.2),想和另一台pc b(192.168.1.3)通信,pc a对自己所在局域网络内的所有主机,也包括路由器的接口喊(发送arp查询信息):ip地址是192.168.1.3的pc的mac地址是多少,请告诉我。pc b听到了,告诉pc a我是,并把自己的ip地址和mac地址,一起发送给了pc a。

  • arp协议:address resolution protocol。广播请求,单播更新。
  • arp的作用:通过广播的方式,找出已知的ip地址的主机的mac地址。
  • arp的request和response报文的格式是一样的,用一个标识位去区分是request还response
  • arp发送方报文的目的mac地址是广播地址:ffffffffffff(48个bit)。
  • arp接收方,接到发送方的请求报文后,会自动把请求方的ip地址和mac地址加入到自己的mac地址表里,然后用单播的方式,使用arp报文,给发送方发送自己的mac地址。

ping使用的是icmp协议,这个协议的报文里必须有对方的mac地址,但是当第一次ping一个ip地址时,由于不知道对方的mac地址,所以需要发送一个arp广播,也就是arp协议的报文,到mac为ffffffffffff的广播地址。

分析首次ping一个在同一个网络内的ip地址

在ios里第一次ping(r1的f0/0上的ip地址是192.168.1.1/24)一个ip地址的结果如下:

r1#ping 192.168.1.2

type escape sequence to abort.
sending 5, 100-byte icmp echos to 192.168.1.2, timeout is 2 seconds:
.!!!!
success rate is 80 percent (4/5), round-trip min/avg/max = 40/72/92 ms

发现有1个点4个叹号,第一点就是代表发送的arp广播,从而得知了对方的mac地址,所以后面4次使用icpm协议和对方通信就成功了。第一次是用arp协议和对方通信的,不是用icmp协议通信的。

ping一下,是要跟对方沟通5次,一来一回算1次通信,所以就应该有10次通信。用抓包工具查看ping一下的结果

发现前2次不是icmp协议通信,前面说过,ping使用的协议是icmp,前2次为什么不是icmp呢?因为第一次ping,不知道对方的mac,所以要先用arp报文,找到对方的mac地址。

  • arp的request报文的head:

    head里有:

    • 目的地的mac地址:12个f,是广播地址。
    • 源mac地址:自己接口的mac地址。
    • 协议的类型:0x0806(arp协议)
  • arp的request报文的body:

    body里有:

    • hardwar type:ethernet(1)
    • protocol type:ipv4
    • hardware size:6
    • opcode:request(1)。这个字段是区分arp报文是request报文,还是response报文。占2个字节。
    • sender mac addr:源mac
    • sender ip addr:源ip
    • target mac addr:目的mac
    • target ip addr:目的ip
  • arp的response报文的head:

    source就是应答方的mac地址

  • arp的response报文的body:

    opcode:reply(2)。标识出是应答报文。

  • 执行ping 192.168.1.2前,查看路由器1和2的arp映射表。

    在路由器1,执行ping路由器2的一个接口上的ip地址前,路由器1的arp映射表:

    r1#show arp
    protocol  address          age (min)  hardware addr   type   interface
    internet  192.168.1.1             -   cc01.44f0.0000  arpa   fastethernet0/0

    在路由器1,执行ping路由器2的一个接口上的ip地址前,路由器2的arp映射表:

    r2#show arp
    protocol  address          age (min)  hardware addr   type   interface
    internet  192.168.1.2             -   cc02.5574.0000  arpa   fastethernet0/0
  • 执行ping 192.168.1.2后,查看路由器1和2的arp映射表。

    路由器1的arp映射表:

    r1#show arp
    protocol  address          age (min)  hardware addr   type   interface
    internet  192.168.1.1             -   cc01.44f0.0000  arpa   fastethernet0/0
    internet  192.168.1.2             0   cc02.5574.0000  arpa   fastethernet0/0

    路由器2的arp映射表:

    r2#show arp
    protocol  address          age (min)  hardware addr   type   interface
    internet  192.168.1.1             0   cc01.44f0.0000  arpa   fastethernet0/0
    internet  192.168.1.2             -   cc02.5574.0000  arpa   fastethernet0/0
  • 清空arp映射表:clear arp-cache

    路由器上的arp映射表的生命周期大概是4个小时。

分析首次ping一个在不同局网络内的ip地址

ping的主机和自己不在一个局域网,发送的广播它就接收不到,怎么办?

pc也好,路由器也好,当要请求一个目的地的mac和自己,不在同一个广播域下的时候:

  • pc:把请求发给网关,ethernet头部的目的mac是,网关的mac。
    • 然后网关会拆开ethernet头部,看到了icmp里面的目的ip地址,根据ip地址,看自己能不能到达,能到的话,
    • 就封一个新的icmp协议的ethernet头部,ethernet头部里面目的地mac是fffffffffff。icmp报文里的ip地址是不变的。
  • 路由器:把请求发给下一跳,ethernet头部的目的mac是,下一跳接口的mac。
    • 然后路由器会拆开ethernet头部,看到了icmp里面的目的ip地址,根据ip地址,看自己能不能到达,能到的话,
    • 就封一个新的icmp协议的ethernet头部,ethernet头部里面目的地mac是ffffffffff。icmp报文里的ip地址是不变的。

代理arp

当路由器没有指定下一跳,或者pc没有指定网关的时候,就有可能产生代理arp。

路由器r1,添加了一条静态路由,指定了出接口,但没有指定下一跳

r1#show ip route
c    192.168.1.0/24 is directly connected, fastethernet0/0
s    192.168.2.0/24 is directly connected, fastethernet0/0

当ping 192.168.2.1(和自己不在同一个网络),可以ping通,然后查看arp映射表:

r1#show arp
protocol  address          age (min)  hardware addr   type   interface
internet  192.168.1.1             -   cc01.44f0.0000  arpa   fastethernet0/0
internet  192.168.2.1             0   cc02.5574.0000  arpa   fastethernet0/0
internet  192.168.1.2           197   cc02.5574.0000  arpa   fastethernet0/0

发现添加了192.168.2.1条目,但mac不是192.168.2.1的mac,而是出接口r2 f0/0(192.168.1.2)的mac地址。由于只有出接口有能力到达目的地,所以当出接口接到了arp请求后,就把自己的mac地址,返回给源了,所以源端把返回的mac,加到了自己的arp映射表了,其实这就是arp欺骗。所以说明,出接口(192.168.1.2)就是代理arp。

然后,再ping 192.168.2.2(和自己不在同一个网络),可以ping通,然后查看arp映射表:

r1#show arp
protocol  address          age (min)  hardware addr   type   interface
internet  192.168.2.2             0   cc02.5574.0000  arpa   fastethernet0/0
internet  192.168.1.1             -   cc01.44f0.0000  arpa   fastethernet0/0
internet  192.168.2.1             0   cc02.5574.0000  arpa   fastethernet0/0
internet  192.168.1.2           197   cc02.5574.0000  arpa   fastethernet0/0

发现添加了192.168.2.2条目,但mac不是192.168.2.2的mac,而是出接口r2 f0/0(192.168.1.2)的mac地址。由于只有出接口有能力到达目的地,所以当出接口接到了arp请求后,就把自己的mac地址,返回给源了,所以源端把返回的mac,加到了自己的arp映射表了,其实这就是arp欺骗。所以再次说明,出接口(192.168.1.2)就是代理arp。

所以我们发现了代理arp的弊端(由于没有指定下一跳而产生的弊端):会产生很多arp条目,占系统的内存,效率降低。

如果指定了下一跳,则arp映射表里,只需要有下一跳的条目就足够了。

接口的代理arp功能,打开了,在没有下一跳的时候,它就代理了,查看mac映射表,发现ping一个ip地址就多了一个条目,而且条目的mac地址很多都是打开arp代理功能的接口的mac地址。

由于cisco路由器,接口的代理arp功能,默认是开启的。

关闭r2的f0/0的arp代理功能:no ip proxy-arp后,就无法再ping通了。

r2(config)#int f0/0
r2(config-if)#no ip proxy-arp

arp后到优先

下图,从r7要访问r11,指定下一跳的话,应该指定到r8的f0/0,这条路径最短。但如果没有指定下一跳,r8的f0/0和r9的f1/0都是代理arp,都会给r11返回arp响应,那么r7使用哪个呢?后到arp响应会覆盖先到的,所以r11有可能使用的是r9给的arp响应。但r9要多一跳才能到达r11,所以这也是代理arp的弊端。

arp攻击

  • arp攻击症状:局域网的很多病毒都利用arp协议攻击(window用arp -a可以查看arp表)。病毒特征是,断网,重启后又可以上网了,一会又断了。

  • 攻击原理:pc a要想连外网必须通过网关,pc a知道网关的ip地址,但是不知道网关的mac地址,所以pc a发广播问局域网内的所有主机,这时有一台主机pc b中了arp病毒,由于是广播,pc b接到了pc a的问询,这时pc b强先回答pc a(在网关pc a之前),告诉pc a一个不存在的mac地址。pc a拿到了不存在的mac地址,向这个不存在的mac地址发送数据后,交换机就蒙了,发现没有这个mac地址,交换机就不知道该发给谁了,所以交换机就drop这个请求了,所以导致pc a无法上网了。arp表是过一段时间就动态更新的,所以过一段时间又能上网了,如此反复。

  • arp欺骗(挂马):和arp攻击类似,上面的pc b强先回答pc a(在网关回答pc a之前),告诉pc a一个假的mac地址,这个mac地址就是pc b自己,pc a接到假的mac地址(pc b的mac地址)后,发送的信息就,直接跑到pc b那里了,这时pc b就能够记录下pc a浏览的网站等私密信息,然后pc b知道网关的mac地址,它把pc a的请求又转发了出去,外面的server收到了pc a信息后,把回复信息发了回来,server的回复信息,网关,网关又转给了pc b,pc b这时就可以在server回的网页上,植入各种病毒,然后把带病毒的网页发给pc a,然后pc a在有病毒的网页上输入了密码后,想把信息发给server,可惜的是:这个密码信息又先到了pc b,黑客就获得了pc a上用户的密码了。

  • 如何解决arp攻击:双向静态绑定。

    pc端静态绑定网关/下一跳的mac地址;网关/路由器静态绑定所以交换机上的pc端的mac地址。

    原理:静态的mac地址,优先级高于动态的,所以即便动态得到的mac是错的,发现有静态的绑定,优先使用静态的。

    静态绑定mac地址命令:

    r4(config)#arp 192.168.1.3 0005.0002.adef arpa
    r4(config)#do show arp
    protocol  address          age (min)  hardware addr   type   interface
    internet  192.168.1.3             -   0005.0002.adef  arpa
    internet  192.168.2.1           121   cc05.4bf8.0010  arpa   fastethernet0/0

    静态绑定mac地址命令的帮助:

    r4(config)#arp 192.168.1.3 0005.0002.adef ?
      arpa   arp type arpa
      sap    arp type sap (hp's arp type)
      smds   arp type smds
      snap   arp type snap (fddi and tokenring)
      srp-a  arp type srp (side a)
      srp-b  arp type srp (side b)

c/c++ 学习互助qq群:877684253

本人微信:xiaoshitou5854

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网