文档章节

代理ARP--善意的欺骗

o
 osc_4nmshwhm
发布于 2018/08/07 01:43
字数 1855
阅读 13
收藏 0

精选30+云产品,助力企业轻松上云!>>>

1. 代理ARP(Proxy ARP)是什么?

  顾名思义,它指通过中间设备(通常为Router)代替其他主机响应ARP请求。对于没有配置默认网关的主机想要与其他网络的另一台主机通信时,网关收到源主机的ARP请求时,会使用自己的MAC地址和目的主机的IP对源主机的ARP请求进行应答。 (可能当你读到这里时,脑子里对Proxy ARP这个东西还不太明白,不要急,慢慢来)

2. 一个拓扑

图中,假设路由器左边接口是子网A,路由器右边接口是子网B,且路由器上没有NAT

3. 细心的读者可能发现,PC2掩码是16位,同时没有网关,而其他的PC和路由器的两个接口都是24位掩码。

3.1  PC2 ping PC3

  PC2组装ICMP报文(源IP是192.168.1.3,目的IP是192.168.2.2),此时组装会失败,因为PC2不知道PC3的MAC地址。

  PC2就会想办法得到PC3的MAC地址。因为PC2是16位掩码,因此它认为PC3与自己是同一网段的,因此它会直接广播ARP请求,去询问PC3的MAC地址。ARP请求部分格式如下:

字   段:     |Serder MAC|            |Serder IP|            |Target MAC|            |Target IP|

值      :           MAC2                 192.168.1.3       00:00:00:00:00:00       192.168.2.2

  然而,这里我们会发现,这个ARP请求报文压根就不能到达PC3,因为路由器不会转发广播包,因此这个ARP请求广播包只能到达路由器(路由器会更新ARP表: 192.168.1.3---MAC2)。

  若是路由器支持ARP代理功能,且启用ARP代理后,路由器会查看ARP请求,发现IP地址192.168.2.2属于它连接的另一个网络(子网B),因此路由器用自己左边接口的MAC地址(MAC4)代替PC2的MAC地址,向PC2发送了一个ARP应答。ARP应答部分格式如下:

字   段:     |Serder MAC|            |Serder IP|            |Target MAC|            |Target IP|

值      :           MAC4                192.168.2.2                     MAC2             192.168.1.3

  当PC2收到这个ARP应答,会认为PC3的MAC地址是MAC4,根本不会感知到Proxy ARP的存在。PC1会更新自己的ARP表:  192.168.2.2----MAC4 。 此时路由器的行为就叫代理ARP,这实质上是一种ARP欺骗----善意的谎言(瞧瞧,这多有意思)。

 

 

  接着PC2重新组装ICMP报文(源IP为192.168.1.3,目的IP为192.168.2.2;源MAC为MAC2,目的MAC为MAC4),这个报文会先到路由器,之后再由路由器转发到PC3上,同样道理,路由器会寻求PC3的MAC地址,这个ARP请求的部分格式如下:

字   段:     |Serder MAC|            |Serder IP|            |Target MAC|            |Target IP|

值      :           MAC5                 192.168.2.1       00:00:00:00:00:00       192.168.2.2

  当PC3收到这个ARP请求报文时,会记录下路由器右边接口的IP(192.168.2.1)和MAC(MAC5)地址映射(即更新ARP表: 192.168.2.1----MAC5),之后单播回复APR应答到路由器。此时ARP应答部分格式如下: 

字   段:     |Serder MAC|            |Serder IP|            |Target MAC|            |Target IP|

值      :           MAC3                 192.168.2.2                  MAC5               192.168.2.1

  当路由器收到这个ARP应答,更新自己的ARP表:  192.168.2.2----MAC3,此时ICMP包能够到达PC3

  最后就是PC3回应ICMP应答报文给PC1,这个报文同样会经过路由器转发,只是这次不会再经历ARP过程了。

3.2 PC1 ping PC3

  PC1发现和PC3不在同一网段,会先把报文扔向网关(192.168.1.1)。这里PC1广播ARP请求获取网关的MAC地址时,ARP请求报文部分格式为:

字   段:     |Serder MAC|            |Serder IP|            |Target MAC|            |Target IP|

值      :           MAC1                 192.168.1.2       00:00:00:00:00:00       192.168.1.1

  这个ARP请求包到达路由器后,路由器会进行ARP应答,回复PC1自己的MAC地址,此时ARP应答报文部分格式为:

字   段:     |Serder MAC|            |Serder IP|            |Target MAC|            |Target IP|

值      :           MAC4                 192.168.1.1                   MAC1              192.168.1.2

  当这个ARP应答到达PC1时,PC1更新自己的ARP表:  192.168.1.1----MAC4

  接下来的过程和3.1中相同,这里不一一赘述。

 

  可以看出,PC1和PC2的ARP表项不一样。其实这一切都是为了通信而服务的。

4. Proxy ARP的好处和缺点

  好处: 最主要的一个优点就是能够在不影响其他路由器的路由表的情况下在网络上添加一个新的路由器,这样使得子网的变化对主机是透明的。用户的路由器和客户端不用做任何修改,用户甚至感觉不到透明接入的路由器的存在

  缺点: 1. 安全问题,Proxy ARP本身就是利用ARP欺骗,所以自己也很容易被ARP欺骗(其实ARP协议本身就有这个缺陷); 2. 整个网络看起来是透明的,不利于概括和推广网络拓扑;3. 若是路由器不支持ARP代理,会导致PC2不能访问其他网络

5. FAQ

5.1 为什么会有ARP代理?

  ARP Request是个广播包(当然也有单播的ARP请求,不在这里讨论),它询问的对象若在同一个局域网内,就会回答。但如果查询对象不在同一个局域网,那怎么办呢?为了解决这个问题,路由器就提供一个服务:Proxy ARP

5.2 Proxy ARP会自动响应到哪些网段的ARP请求

  代理ARP只响应那些自己知道网段(路由表中能找到的),而不是会用自己的MAC响应主机所有的arp请求。如PC2去ping 192.168.3.2/24,此时路由器不会响应这个ARP请求

5.3 Proxy ARP适用于哪些场景

  Proxy ARP应该使用在主机没有配置默认网关或没有任何路由策略的网络上。具体的场景我也没找到合适的,大家可以探讨

5.4 还有什么方法来解决跨局域网的地址查询?

  其实默认网关完全可以解决这个问题,直接将报文扔到网关上,让网关去转发。

5.5 如果存在多个ARP代理设备(这些设备的左边接口与PC2接在同一个傻瓜交换机上;右边接口与PC3接在同一个交换机上,PC3此时也使用16位掩码,不设置网关),那么PC2访问PC3时,PC2的ARP缓存表是怎样的?

  我使用模拟器搭建环境,发现每个设备都会回复ARP应答,这些ARP应答都是以自己左边接口的MAC对应PC3的IP,且这些ARP应答都会达到交换机,但是交换机只会转发一个到PC2上(至于选哪一个,这里没有去深究),因此PC2只会收到一个ARP应答, PC2的缓存表中,关于PC3的ARP条目只有一条。

6. 总结

  Proxy ARP其实就是中间设备利用ARP欺骗,代替某个主机响应ARP请求;

  实际应用的场合很少,用默认网关就可以解决这个问题,而且很多时候主机都支持DHCP自动获取地址,不会出现拓扑中的情况‘;

  很多设备都不支持Proxy ARP功能。我本来想使用实际的设备来搭建这个拓扑,却未找到合适的路由器,最后无奈,只好使用Cisco Packet Tracer工具来模拟(目前知道思科路由器支持这个功能)

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
代理ARP协议(Proxy ARP)

代理ARP(Proxy-arp)的原理就是当出现跨网段的ARP请求时,路由器将自己的MAC返回给发送ARP广播请求发送者,实现MAC地址代理(善意的欺骗),最终使得主机能够通信。 图中R1和R3处于不同的局...

osc_hahlqsqq
2019/03/07
13
0
arp协议的混乱引发的思考

曾几何时,人们多么淳朴,创造了arp这样的协议,这种群问一答的形式总是要么在乌托邦之类的组织能行得通要么是独裁的组织,想一下议会制,如果有一个针对全体的提问,得到的答案往往是千奇百...

晨曦之光
2012/04/10
74
0
代理ARP--善意的欺骗

1. 代理ARP(Proxy ARP)是什么?   顾名思义,它指通过中间设备(通常为Router)代替其他主机响应ARP请求。对于没有配置默认网关的主机想要与其他网络的另一台主机通信时,网关收到源主机...

Lipx9527
2018/08/07
0
0
网络协议补完计划--ARP协议和RARP协议

目录 前言 ARP协议和RARP协议概述 以太网的传输机制 ARP协议 ARP数据包格式 RARP协议 参考资料 前言 参照清华大学出版社-罗军周主编的《TCP/IP协议及网络编程技术》进行学习。 本篇主要参考...

kirito_song
2018/05/31
0
0
图解ARP协议(四)代理ARP原理与实践(“善意的欺骗”)

一、代理ARP概述 我:当电脑要访问互联网上的服务器,目标MAC是什么? 很多小伙伴在刚学习网络协议的时候,经常这样直接回应:不就是服务器的MAC嘛! 这时我会反问:那电脑怎么拿到这个服务器...

陈鑫杰
2017/08/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

使用amoeba实现mysql读写分离

转载马士兵连老师笔记 使用amoeba实现mysql读写分离 1、什么是amoeba? Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发。座落与Client、DB Server(s)之间。对客户端透明。具有负载均衡、...

兵荒马乱的青春
25分钟前
0
0
学Vue,就要学会vue JSX(二)

学习JSX,先了解一下createElement 提到JSX,不可避免的就要提到createElement,当你看完本节,你会发现,奇怪的知识又增多了。ok,我们接着上一部分继续讲。这一次的准备工作是了解createEleme...

osc_kurqu050
25分钟前
17
0
学Vue,就要学会vue JSX(三)

是时候使用JSX代替createElement了 接着上面的讲,当我们看到上面用createElement去实现组件,太麻烦了,别说工作效率提高了,就是那些嵌套可以嵌套正确就很赞了,所以我们需要用JSX去简化整...

osc_tq5hz9vv
27分钟前
13
0
protocol buffer使用

protocol buffer使用例子 protocol buffer是什么 https://developers.google.com/protocol-buffers 这是protocol buffer的官方网站,上边有详细的使用方式。 一般常见的序列和反序列方式就是...

RandomObject
27分钟前
7
0
小白的前端之路-HTMl

HTML——超文本标记语言 HTMl里面有标签,标签又分为单标签和双标签,也分为行级元素和块级元素 标签是用<>包裹起来的,而且必须要有<>,否则会直接显示在浏览器上面哦 现在介绍一下常用标签...

osc_e45irv7l
28分钟前
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部