图解ARP协议(四)代理ARP:善意的欺骗

来源:互联网 发布:db2 恢复数据库 编辑:程序博客网 时间:2024/04/30 09:14


图解ARP协议(四)代理ARP:善意的欺骗

图解ARP协议(四)代理ARP:善意的欺骗

拼客学院陈鑫杰拼客学院陈鑫杰
24 天前

一、代理ARP概述

我:当电脑要访问互联网上的服务器,目标MAC是什么?

很多小伙伴在刚学习网络协议的时候,经常这样直接回应:不就是服务器的MAC嘛!


这时我会反问:那电脑怎么拿到这个服务器的MAC地址呢?

小伙伴一般都自信的抛出下面两个点:

①根据网络通信中数据封装的原则,通信双方需要封装源目IP和MAC地址;

②如果要拿到目标MAC地址,就需要通过ARP协议进行交互。


我:好,确实没毛病,你是指的下面这个意思吧 ==>



小伙伴:对对对,是这个意思的。

我:好,你再看看下面这个图,再确认下。


小伙伴:好像不太对唉,刚才没注意看...... 互联网这么多路由器,根据之前学过的:

①路由器隔离广播域,每个接口/网段都是独立的广播域;

②ARP请求是二层广播包,广播包没法过路由器,

这样的话,ARP请求广播包根本没法穿越互联网到达目标服务器。


我:那我们平常上微博逛知乎去京东剁手基本都依据上面这张图,通过DNS协议将域名解析为IP地址,通过ARP协议将IP解析为MAC地址。现在ARP请求无法穿越过去,电脑便无法获取目标服务器的MAC地址,怎么跟它通信呢?

小伙伴:。。。。。。


上面这个疑惑,我相信每个学习网络协议的初学者经常会问到,更普遍的情况是,很多工作多年的工程师,也未必能够将下面这几个问题完全搞清楚:


①电脑访问互联网服务器的时候,ARP询问的内容,真的是问服务器的吗?

②什么是代理ARP?跟ARP有什么区别?什么场景下会用到代理ARP?

③代理ARP跟网关(默认路由)设置有什么关系?


所以,这一篇文章虽然是讲代理ARP,但其实核心内容是围绕代理ARP,解读跨网段通信过程中,ARP/代理ARP/网关(默认路由)/数据封装等相关问题



二、代理ARP原理

当ARP请求目标跨网段时,网关设备收到此ARP请求,会用自己的MAC地址返回给请求者,这便是代理ARP(Proxy ARP)。


上面这张图中,电脑发送ARP请求服务器8.8.8.8的MAC地址,路由器(网关)收到这个请求时会进行判断,由于目标8.8.8.8不属于本网段(即跨网段),此时便返回自己的接口MAC地址给PC,后续电脑访问服务器时,目标MAC直接封装为MAC254。


代理ARP本质是一个"善意的欺骗",是一个"错位"的映射。从图中我们看到服务器地址的正常映射是<8.8.8.8-MAC2>,而路由器返回给电脑的,却是 <8.8.8.8-MAC254>。不管是不是"欺骗",至少最终电脑可以与外网的服务器实现通信,以PC Ping Server为例=>


实际网络中,代理ARP由网络中的网关设备来执行,包括路由器、多层交换机、无线路由器、防火墙等设备。并且,网关即便有代理ARP功能,也未必一定执行,还必须满足两个条件:①网关已经开启代理ARP功能;②网关有目标的路由信息。我们来看下面这张图=>



上面这张图中,我们假设路由器已具备全网的路由,但连接电脑的接口没有开启(或不支持)代理ARP功能,此时便造成一个尴尬的情况:电脑反复询问到8.8.8.8的MAC地址,路由器收到之后,处理流程跟正常ARP是一致的,"问自己的回复,不是问自己的丢弃"。因此,当网络通信采用代理ARP时,可能会"受制于沿途网关设备",造成网络通信故障


进一步思考:既然代理ARP不是一种特别流畅的实现,会"受限于别人",那我们没必要一定要使用它。甚至,这里我们需要搞清一个事实:实际网络中,无论是同网段还是跨网段通信(例如访问互联网),绝大情况下都是使用正常的ARP,而不是代理ARP。生活中的上网的经验也已经告诉我们,好像从来没有遇到或听到过"XXX设备不支持代理ARP功能,导致通信故障"这样的问题。


很多小伙伴看到这里,会有大大的疑惑:

① "什么! 我们才刚学习了代理ARP的实现原理,现在居然告诉说它没怎么用?"

② 那为什么要创造代理ARP,它的真正使用场景在哪里??

③ 上述图解中,电脑跨网段通信时ARP到底是如何工作的???


接下来给大家划重点:

第一,代理ARP仅仅是正常ARP的一个拓展使用,是可选项而不是必要项;

第二:代理ARP有特定的应用场景,与网关/路由的设置有直接关系:当电脑没有网关/路由功能时,并且需要跨网站通信时,则会触发代理ARP。换句话说,如果有网关/路由功能,则不需要代理ARP;

第三:正常环境下,当用户接入网络时,都会通过DHCP协议或手工配置的方式得到IP和网关信息(所以不需要代理ARP)。



三、ARP与代理ARP:不是互斥而是互补

在大家理解了代理ARP的工作原理和应用场景之后,接下来我们终于可以更加全面的分析开篇的这个经典问题:当用户访问互联网的时候,到底用ARP还是代理ARP?跟网关/路由设置有什么关系?数据封装又有什么区别?


我们通过下面两张图做个对比=>

当电脑没有网关时,PC Ping 8.8.8.8,采用代理ARP =>


当电脑有网关时,PC Ping 8.8.8.8,采用正常ARP =>


通过上面的对比,我们得到以下信息:

①电脑没有网关时,ARP直接询问目标IP对应的MAC地址(跨网段),采用代理ARP;

②电脑有网关时,ARP只需询问网关IP对应的MAC地址(同网段),采用正常ARP;

③无论是正常ARP还是代理ARP,电脑最终都拿到同一个目标MAC地址:网关MAC。


为了让上面这个总结更加的通用性,我们将原有的网络拓扑稍微复杂化 =>

当电脑没有网关时(采用代理ARP ),PC 依次Ping 8.8.8.8、8.8.4.4、114.114.114.114=>



当电脑有网关时(采用正常ARP ),PC 依次Ping 8.8.8.8、8.8.4.4、114.114.114.114=>


通过上面的拓扑,我们可以得到更加通用性的总结,归纳如下:

①当电脑没有网关(采用代理ARP)时:"跨网段访问谁,就问谁的MAC"

②当电脑有网关(采用正常ARP)时:"跨网段访问谁,都问网关的MAC"

③无论哪种ARP,跨网段通信时,发送方请求得到的目标MAC地址都是网关MAC。


注明:网关(Gateway)、下一跳(Next-hop)、路由器(Router)都指的是离发送方最近的三层(或多层)设备,具备三层和路由转发功能。举例:我们通过WiFi上网时,网关就是无线路由器,它帮忙将电脑和手机的数据转发到互联网;所以,我们访问互联网时(无论访问谁),电脑和手机采用的目的MAC,都是无线路由器的MAC。有兴趣的小伙伴都可以跟着我验证下(请见下面章节)。



四、ARP与代理ARP实战指南

为了让大家更直观理解,真正"亲眼所见"上面学到的技术原理,这里我带大家在真实网络和虚拟环境分别验证。第一个实验,主要是针对没任何命令基础的小伙伴,大家可以在家就可以实验;第二个实验,主要针对有一定网络和安全基础的小伙伴,通过构造网络虚拟实验环境来验证。


(一)真实网络下ARP与代理ARP实验


这个网络中,我的电脑地址是192.168.199.177,连接到极路由(无线路由器),通过极路由器访问互联网。这个WiFi网络的主机列表情况如下,这里的PC就是我的Macbook。



接下来再看看极路由MAC地址=>


查看我的电脑(Macox系统)IP地址和网关信息,通过命令"ifconfig"查看ip地址=>(Windows系统则通过"ipconfig /all"查看IP地址和网关信息)


通过命令"netstat -rn"查看我的电脑网关设置=>


接下来,我的电脑连续PING 8.8.8.8和114.114.114.114或其他外网地址=>


重点来了,在我的电脑连续访问这么多外网地址之后,我们来看看ARP表项是怎样的,是否有8.8.8.8、114.114.114.114、pinginglab.net(120.24.59.68)对应的MAC呢?


通过命令"arp -a"查看电脑的ARP缓存信息=>


从最终的ARP内容来看,我的电脑只记录着本机和网关的MAC地址,MAC地址"d4:ee-07:54:c1:9e"就是上面给大家截图的极路由MAC。

通过这个真实网络的实验,我们可以验证了以下内容:

①真实网络中一般都是正常ARP,而不是代理ARP;

②当电脑有网关(采用正常ARP)时,无论跨网段访问谁,都直接问网关的MAC;

③当第一次获取网关MAC之后,后续的通信都不再需要重新进行ARP请求。(这个是比较容易忽略的,而代理ARP每次访问新的外网地址,都需要再次请求)



(二)虚拟环境下ARP与代理ARP实验

网络拓扑采用GNS3搭建,采用C3640操作系统镜像=>

① 首先为各个设备打开接口并配置IP地址:

PC(config)#int f0/0

PC(config-if)#no shutdown

PC(config-if)#ip address 192.168.1.1 255.255.255.0

Router(config)#int f0/0

Router(config-if)#no shutdown

Router(config-if)#ip address 192.168.1.254 255.255.255.0

Router(config-if)#int f1/0

Router(config-if)#no shutdown

Router(config-if)#ip address 8.8.8.1 255.255.255.0

Server(config)#int f0/0

Server(config-if)#no shutdown

Server(config-if)#ip address 8.8.8.8 255.255.255.0


②为各个设备设置路由信息:

a.关闭PC上路由功能,模拟主机并查看路由表(此时的电脑没有设置网关)

PC(config)#no ip routing

PC#show ip route

Default gateway is not set

Host Gateway Last Use Total Uses Interface

b.设置并查看Router和Server路由表,保证联通,模拟互联网(这里Router已有全网的直连路由,Server需要设置返回内网的路由;实际环境应该通过NAT返回,这里不再深入)


Router#show ip route

Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP

D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area

N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2

E1 - OSPF external type 1, E2 - OSPF external type 2

i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2

ia - IS-IS inter area, * - candidate default, U - per-user static route

o - ODR, P - periodic downloaded static route


Gateway of last resort is not set


8.0.0.0/24 is subnetted, 1 subnets

C 8.8.8.0 is directly connected, FastEthernet1/0

C 192.168.1.0/24 is directly connected, FastEthernet0/0


Server(config)#ip route 192.168.1.0 255.255.255.0 8.8.8.1

Server#show ip route

Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP

D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area

N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2

E1 - OSPF external type 1, E2 - OSPF external type 2

i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2

ia - IS-IS inter area, * - candidate default, U - per-user static route

o - ODR, P - periodic downloaded static route


Gateway of last resort is not set


8.0.0.0/24 is subnetted, 1 subnets

C 8.8.8.0 is directly connected, FastEthernet0/0

S 192.168.1.0/24 [1/0] via 8.8.8.1


③查看PC/Router/Server的接口MAC地址:

PC#show int f0/0

FastEthernet0/0 is up, line protocol is up

Hardware is AmdFE, address is cc05.1f56.0000 (bia cc05.1f56.0000)

Internet address is 192.168.1.1/24

Router#show int f0/0

FastEthernet0/0 is up, line protocol is up

Hardware is AmdFE, address is cc07.1f56.0000 (bia cc07.1f56.0000)

Internet address is 192.168.1.254/24

Router#show int f1/0

FastEthernet1/0 is up, line protocol is up

Hardware is AmdFE, address is cc07.1f56.0010 (bia cc07.1f56.0010)

Internet address is 8.8.8.1/24

Server#show int f0/0

FastEthernet0/0 is up, line protocol is up

Hardware is AmdFE, address is cc06.1f56.0000 (bia cc06.1f56.0000)

Internet address is 8.8.8.8/24


④通过Wireshark抓取PC和Router链路的数据包,并让PC ping Server(8.8.8.8),查看ARP问答信息:


PC#ping 8.8.8.8

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 8.8.8.8, timeout is 2 seconds:

.!!!! (一个ping来回为一个 ! 标识,而第一个点 . 代表此时正在arp)

Success rate is 80 percent (4/5), round-trip min/avg/max = 44/47/48 ms



从数据包可以看到,由于PC没有设置默认网关,所以直接采用代理ARP方式询问:即直接询问跨网段目的8.8.8.8的IP地址。而由于路由器Router默认开启了代理ARP功能,所以直接用自己的MAC地址回应了。这里的cc:07:1f:56:00:00即路由器的MAC地址。这里顺便查看下PC的arp表:


PC#show arp

Protocol Address Age (min) Hardware Addr Type Interface

Internet 8.8.8.8 9 cc07.1f56.0000 ARPA FastEthernet0/0

Internet 192.168.1.1 - cc05.1f56.0000 ARPA FastEthernet0/0


因此,这里便验证了:当电脑没有设置网关信息,则采用代理ARP。

我们接着验证另外一个点:当采用代理ARP时,会"受限于沿途网关设备",例如网关设备(路由器)可能不支持代理ARP或关闭代理ARP功能,此时电脑就无法与外网IP实现通信


怎么验证呢?这里我们需要关闭路由器接口的代理ARP功能,并且清空电脑PC的arp表=>

Router(config)#int f0/0

Router(config-if)#no ip proxy-arp

PC#clear arp

PC#ping 8.8.8.8

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 8.8.8.8, timeout is 2 seconds:

.....

Success rate is 0 percent (0/5)


查看底层数据包交互过程=>


当路由器关闭代理ARP时,此时电脑"苦苦哀求"外网8.8.8.8的MAC地址,而路由器直接丢弃不再返回,由于电脑没有目标IP对应的MAC信息,所以通信失败,即 ...... 我们来看下此时PC的arp表是怎样的=>


PC#show arp

Protocol Address Age (min) Hardware Addr Type Interface

Internet 8.8.8.8 0 Incomplete ARPA

Internet 192.168.1.1 - cc05.1f56.0000 ARPA FastEthernet0/0


⑤为PC设置默认网关,重新ping 8.8.8.8,看看能不能通=>

PC(config)#ip default-gateway 192.168.1.254

PC#ping 8.8.8.8

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 8.8.8.8, timeout is 2 seconds:

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 44/244/1040 ms


可以看到,当电脑具备网关信息之后,此时直接采用ARP询问网关的MAC,即去往8.8.8.8的时候直接询问192.168.1.254的MAC,这个时候不管Router有没有开启代理ARP,也会正常回应PC的ARP询问,我们来看看底层数据包截图=>


四、代理ARP总结

① 本章节我们深入学习了代理ARP的原理和实践,在文章的开头,我们通过一个引子,帮大家矫正一个误区:跨网段通信时,就一定要用到代理ARP;

②代理ARP是一个"善意的欺骗",当电脑要跨网段访问外网设备时,网关设备用自己的MAC返回;

③代理ARP和ARP的具体实现,跟电脑是否有设置网关有直接的关系;有网关通过ARP,没网关通过代理ARP;代理ARP可以看成是ARP的补充;

④代理ARP会"受限于沿途网络设备",真实网络里面一般都直接用ARP获取MAC地址。



预告:

什么是免费/无故ARP?

免费ARP的功能是什么?在什么时候出现?

免费ARP的数据包结构是如何的?



【相关推荐】

图解ARP协议(三)ARP防御篇-如何揪出"内鬼"并"优雅的还手"?

图解ARP协议(二)ARP攻击篇

图解ARP协议(一)

《TCP/IP协议栈视频教程》

《Wireshark协议分析从入门到精通》

新浪微博:@拼客学院陈鑫杰

微信公众号:拼客院长陈鑫杰

拼客学院:pinginglab.net

「不会吧?这么认真看完了居然还想给我打赏!」
1 人赞赏
不要脸的小黑
文章被以下专栏收录
  • 跟杰哥学网络与安全

    绝无仅有的网络与安全技术图解教程

    进入专栏
9 条评论
评论由作者筛选后显示

华莱士
华莱士
楼主高产,前三篇看完了。怎么在干净的环境抓包做实验用过滤器还是不太方便,楼主说的用模拟器啥意思?只过滤模拟器地址?
24 天前
拼客学院陈鑫杰
拼客学院陈鑫杰(作者)回复华莱士
在gns3里面桥接wireshark,wireshark只抓取虚拟环境的包。如果没有玩过gns3,可以到「拼客学院」搜“gns3”,有这块免费的视频教程。
24 天前
雄大
雄大
感谢楼主分享,从事网络工作三年多,对于这些概念很模糊,看完前三篇,终于知道ARP这个工作原理了。谢谢!有空期待更新啦。
24 天前
肖智轩
肖智轩
支持!感觉计网课学的知识得到了应用,期待更多文章
23 天前
Jtung lee
Jtung lee
配图好有意思。。
23 天前
yuan
yuan

当主机没有设置默认网关时, ping 8.8.8.8 会发ARP请求吗? 不是直接显示网络不可达吗?

22 天前
拼客学院陈鑫杰
拼客学院陈鑫杰(作者)回复yuan
嗯嗯,不同操作系统的解决思路有差异。例如cisco ios在没有网关(关闭路由功能)时候,访问其他网段时,仍然会发送请求。
22 天前
Rammer
Rammer
大赞 一连看了3篇文章 巩固了以前学的知识 还弄懂了代理ARP的工作机制
13 天前
郑宇
郑宇

大学上网络课, 毛线不懂, 现在居然一看就懂. 赞

9 天前
图解ARP协议(四)代理ARP:善意的欺骗

图解ARP协议(四)代理ARP:善意的欺骗

拼客学院陈鑫杰拼客学院陈鑫杰
24 天前

一、代理ARP概述

我:当电脑要访问互联网上的服务器,目标MAC是什么?

很多小伙伴在刚学习网络协议的时候,经常这样直接回应:不就是服务器的MAC嘛!


这时我会反问:那电脑怎么拿到这个服务器的MAC地址呢?

小伙伴一般都自信的抛出下面两个点:

①根据网络通信中数据封装的原则,通信双方需要封装源目IP和MAC地址;

②如果要拿到目标MAC地址,就需要通过ARP协议进行交互。


我:好,确实没毛病,你是指的下面这个意思吧 ==>



小伙伴:对对对,是这个意思的。

我:好,你再看看下面这个图,再确认下。


小伙伴:好像不太对唉,刚才没注意看...... 互联网这么多路由器,根据之前学过的:

①路由器隔离广播域,每个接口/网段都是独立的广播域;

②ARP请求是二层广播包,广播包没法过路由器,

这样的话,ARP请求广播包根本没法穿越互联网到达目标服务器。


我:那我们平常上微博逛知乎去京东剁手基本都依据上面这张图,通过DNS协议将域名解析为IP地址,通过ARP协议将IP解析为MAC地址。现在ARP请求无法穿越过去,电脑便无法获取目标服务器的MAC地址,怎么跟它通信呢?

小伙伴:。。。。。。


上面这个疑惑,我相信每个学习网络协议的初学者经常会问到,更普遍的情况是,很多工作多年的工程师,也未必能够将下面这几个问题完全搞清楚:


①电脑访问互联网服务器的时候,ARP询问的内容,真的是问服务器的吗?

②什么是代理ARP?跟ARP有什么区别?什么场景下会用到代理ARP?

③代理ARP跟网关(默认路由)设置有什么关系?


所以,这一篇文章虽然是讲代理ARP,但其实核心内容是围绕代理ARP,解读跨网段通信过程中,ARP/代理ARP/网关(默认路由)/数据封装等相关问题



二、代理ARP原理

当ARP请求目标跨网段时,网关设备收到此ARP请求,会用自己的MAC地址返回给请求者,这便是代理ARP(Proxy ARP)。


上面这张图中,电脑发送ARP请求服务器8.8.8.8的MAC地址,路由器(网关)收到这个请求时会进行判断,由于目标8.8.8.8不属于本网段(即跨网段),此时便返回自己的接口MAC地址给PC,后续电脑访问服务器时,目标MAC直接封装为MAC254。


代理ARP本质是一个"善意的欺骗",是一个"错位"的映射。从图中我们看到服务器地址的正常映射是<8.8.8.8-MAC2>,而路由器返回给电脑的,却是 <8.8.8.8-MAC254>。不管是不是"欺骗",至少最终电脑可以与外网的服务器实现通信,以PC Ping Server为例=>


实际网络中,代理ARP由网络中的网关设备来执行,包括路由器、多层交换机、无线路由器、防火墙等设备。并且,网关即便有代理ARP功能,也未必一定执行,还必须满足两个条件:①网关已经开启代理ARP功能;②网关有目标的路由信息。我们来看下面这张图=>



上面这张图中,我们假设路由器已具备全网的路由,但连接电脑的接口没有开启(或不支持)代理ARP功能,此时便造成一个尴尬的情况:电脑反复询问到8.8.8.8的MAC地址,路由器收到之后,处理流程跟正常ARP是一致的,"问自己的回复,不是问自己的丢弃"。因此,当网络通信采用代理ARP时,可能会"受制于沿途网关设备",造成网络通信故障


进一步思考:既然代理ARP不是一种特别流畅的实现,会"受限于别人",那我们没必要一定要使用它。甚至,这里我们需要搞清一个事实:实际网络中,无论是同网段还是跨网段通信(例如访问互联网),绝大情况下都是使用正常的ARP,而不是代理ARP。生活中的上网的经验也已经告诉我们,好像从来没有遇到或听到过"XXX设备不支持代理ARP功能,导致通信故障"这样的问题。


很多小伙伴看到这里,会有大大的疑惑:

① "什么! 我们才刚学习了代理ARP的实现原理,现在居然告诉说它没怎么用?"

② 那为什么要创造代理ARP,它的真正使用场景在哪里??

③ 上述图解中,电脑跨网段通信时ARP到底是如何工作的???


接下来给大家划重点:

第一,代理ARP仅仅是正常ARP的一个拓展使用,是可选项而不是必要项;

第二:代理ARP有特定的应用场景,与网关/路由的设置有直接关系:当电脑没有网关/路由功能时,并且需要跨网站通信时,则会触发代理ARP。换句话说,如果有网关/路由功能,则不需要代理ARP;

第三:正常环境下,当用户接入网络时,都会通过DHCP协议或手工配置的方式得到IP和网关信息(所以不需要代理ARP)。



三、ARP与代理ARP:不是互斥而是互补

在大家理解了代理ARP的工作原理和应用场景之后,接下来我们终于可以更加全面的分析开篇的这个经典问题:当用户访问互联网的时候,到底用ARP还是代理ARP?跟网关/路由设置有什么关系?数据封装又有什么区别?


我们通过下面两张图做个对比=>

当电脑没有网关时,PC Ping 8.8.8.8,采用代理ARP =>


当电脑有网关时,PC Ping 8.8.8.8,采用正常ARP =>


通过上面的对比,我们得到以下信息:

①电脑没有网关时,ARP直接询问目标IP对应的MAC地址(跨网段),采用代理ARP;

②电脑有网关时,ARP只需询问网关IP对应的MAC地址(同网段),采用正常ARP;

③无论是正常ARP还是代理ARP,电脑最终都拿到同一个目标MAC地址:网关MAC。


为了让上面这个总结更加的通用性,我们将原有的网络拓扑稍微复杂化 =>

当电脑没有网关时(采用代理ARP ),PC 依次Ping 8.8.8.8、8.8.4.4、114.114.114.114=>



当电脑有网关时(采用正常ARP ),PC 依次Ping 8.8.8.8、8.8.4.4、114.114.114.114=>


通过上面的拓扑,我们可以得到更加通用性的总结,归纳如下:

①当电脑没有网关(采用代理ARP)时:"跨网段访问谁,就问谁的MAC"

②当电脑有网关(采用正常ARP)时:"跨网段访问谁,都问网关的MAC"

③无论哪种ARP,跨网段通信时,发送方请求得到的目标MAC地址都是网关MAC。


注明:网关(Gateway)、下一跳(Next-hop)、路由器(Router)都指的是离发送方最近的三层(或多层)设备,具备三层和路由转发功能。举例:我们通过WiFi上网时,网关就是无线路由器,它帮忙将电脑和手机的数据转发到互联网;所以,我们访问互联网时(无论访问谁),电脑和手机采用的目的MAC,都是无线路由器的MAC。有兴趣的小伙伴都可以跟着我验证下(请见下面章节)。



四、ARP与代理ARP实战指南

为了让大家更直观理解,真正"亲眼所见"上面学到的技术原理,这里我带大家在真实网络和虚拟环境分别验证。第一个实验,主要是针对没任何命令基础的小伙伴,大家可以在家就可以实验;第二个实验,主要针对有一定网络和安全基础的小伙伴,通过构造网络虚拟实验环境来验证。


(一)真实网络下ARP与代理ARP实验


这个网络中,我的电脑地址是192.168.199.177,连接到极路由(无线路由器),通过极路由器访问互联网。这个WiFi网络的主机列表情况如下,这里的PC就是我的Macbook。



接下来再看看极路由MAC地址=>


查看我的电脑(Macox系统)IP地址和网关信息,通过命令"ifconfig"查看ip地址=>(Windows系统则通过"ipconfig /all"查看IP地址和网关信息)


通过命令"netstat -rn"查看我的电脑网关设置=>


接下来,我的电脑连续PING 8.8.8.8和114.114.114.114或其他外网地址=>


重点来了,在我的电脑连续访问这么多外网地址之后,我们来看看ARP表项是怎样的,是否有8.8.8.8、114.114.114.114、pinginglab.net(120.24.59.68)对应的MAC呢?


通过命令"arp -a"查看电脑的ARP缓存信息=>


从最终的ARP内容来看,我的电脑只记录着本机和网关的MAC地址,MAC地址"d4:ee-07:54:c1:9e"就是上面给大家截图的极路由MAC。

通过这个真实网络的实验,我们可以验证了以下内容:

①真实网络中一般都是正常ARP,而不是代理ARP;

②当电脑有网关(采用正常ARP)时,无论跨网段访问谁,都直接问网关的MAC;

③当第一次获取网关MAC之后,后续的通信都不再需要重新进行ARP请求。(这个是比较容易忽略的,而代理ARP每次访问新的外网地址,都需要再次请求)



(二)虚拟环境下ARP与代理ARP实验

网络拓扑采用GNS3搭建,采用C3640操作系统镜像=>

① 首先为各个设备打开接口并配置IP地址:

PC(config)#int f0/0

PC(config-if)#no shutdown

PC(config-if)#ip address 192.168.1.1 255.255.255.0

Router(config)#int f0/0

Router(config-if)#no shutdown

Router(config-if)#ip address 192.168.1.254 255.255.255.0

Router(config-if)#int f1/0

Router(config-if)#no shutdown

Router(config-if)#ip address 8.8.8.1 255.255.255.0

Server(config)#int f0/0

Server(config-if)#no shutdown

Server(config-if)#ip address 8.8.8.8 255.255.255.0


②为各个设备设置路由信息:

a.关闭PC上路由功能,模拟主机并查看路由表(此时的电脑没有设置网关)

PC(config)#no ip routing

PC#show ip route

Default gateway is not set

Host Gateway Last Use Total Uses Interface

b.设置并查看Router和Server路由表,保证联通,模拟互联网(这里Router已有全网的直连路由,Server需要设置返回内网的路由;实际环境应该通过NAT返回,这里不再深入)


Router#show ip route

Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP

D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area

N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2

E1 - OSPF external type 1, E2 - OSPF external type 2

i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2

ia - IS-IS inter area, * - candidate default, U - per-user static route

o - ODR, P - periodic downloaded static route


Gateway of last resort is not set


8.0.0.0/24 is subnetted, 1 subnets

C 8.8.8.0 is directly connected, FastEthernet1/0

C 192.168.1.0/24 is directly connected, FastEthernet0/0


Server(config)#ip route 192.168.1.0 255.255.255.0 8.8.8.1

Server#show ip route

Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP

D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area

N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2

E1 - OSPF external type 1, E2 - OSPF external type 2

i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2

ia - IS-IS inter area, * - candidate default, U - per-user static route

o - ODR, P - periodic downloaded static route


Gateway of last resort is not set


8.0.0.0/24 is subnetted, 1 subnets

C 8.8.8.0 is directly connected, FastEthernet0/0

S 192.168.1.0/24 [1/0] via 8.8.8.1


③查看PC/Router/Server的接口MAC地址:

PC#show int f0/0

FastEthernet0/0 is up, line protocol is up

Hardware is AmdFE, address is cc05.1f56.0000 (bia cc05.1f56.0000)

Internet address is 192.168.1.1/24

Router#show int f0/0

FastEthernet0/0 is up, line protocol is up

Hardware is AmdFE, address is cc07.1f56.0000 (bia cc07.1f56.0000)

Internet address is 192.168.1.254/24

Router#show int f1/0

FastEthernet1/0 is up, line protocol is up

Hardware is AmdFE, address is cc07.1f56.0010 (bia cc07.1f56.0010)

Internet address is 8.8.8.1/24

Server#show int f0/0

FastEthernet0/0 is up, line protocol is up

Hardware is AmdFE, address is cc06.1f56.0000 (bia cc06.1f56.0000)

Internet address is 8.8.8.8/24


④通过Wireshark抓取PC和Router链路的数据包,并让PC ping Server(8.8.8.8),查看ARP问答信息:


PC#ping 8.8.8.8

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 8.8.8.8, timeout is 2 seconds:

.!!!! (一个ping来回为一个 ! 标识,而第一个点 . 代表此时正在arp)

Success rate is 80 percent (4/5), round-trip min/avg/max = 44/47/48 ms



从数据包可以看到,由于PC没有设置默认网关,所以直接采用代理ARP方式询问:即直接询问跨网段目的8.8.8.8的IP地址。而由于路由器Router默认开启了代理ARP功能,所以直接用自己的MAC地址回应了。这里的cc:07:1f:56:00:00即路由器的MAC地址。这里顺便查看下PC的arp表:


PC#show arp

Protocol Address Age (min) Hardware Addr Type Interface

Internet 8.8.8.8 9 cc07.1f56.0000 ARPA FastEthernet0/0

Internet 192.168.1.1 - cc05.1f56.0000 ARPA FastEthernet0/0


因此,这里便验证了:当电脑没有设置网关信息,则采用代理ARP。

我们接着验证另外一个点:当采用代理ARP时,会"受限于沿途网关设备",例如网关设备(路由器)可能不支持代理ARP或关闭代理ARP功能,此时电脑就无法与外网IP实现通信


怎么验证呢?这里我们需要关闭路由器接口的代理ARP功能,并且清空电脑PC的arp表=>

Router(config)#int f0/0

Router(config-if)#no ip proxy-arp

PC#clear arp

PC#ping 8.8.8.8

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 8.8.8.8, timeout is 2 seconds:

.....

Success rate is 0 percent (0/5)


查看底层数据包交互过程=>


当路由器关闭代理ARP时,此时电脑"苦苦哀求"外网8.8.8.8的MAC地址,而路由器直接丢弃不再返回,由于电脑没有目标IP对应的MAC信息,所以通信失败,即 ...... 我们来看下此时PC的arp表是怎样的=>


PC#show arp

Protocol Address Age (min) Hardware Addr Type Interface

Internet 8.8.8.8 0 Incomplete ARPA

Internet 192.168.1.1 - cc05.1f56.0000 ARPA FastEthernet0/0


⑤为PC设置默认网关,重新ping 8.8.8.8,看看能不能通=>

PC(config)#ip default-gateway 192.168.1.254

PC#ping 8.8.8.8

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 8.8.8.8, timeout is 2 seconds:

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 44/244/1040 ms


可以看到,当电脑具备网关信息之后,此时直接采用ARP询问网关的MAC,即去往8.8.8.8的时候直接询问192.168.1.254的MAC,这个时候不管Router有没有开启代理ARP,也会正常回应PC的ARP询问,我们来看看底层数据包截图=>


四、代理ARP总结

① 本章节我们深入学习了代理ARP的原理和实践,在文章的开头,我们通过一个引子,帮大家矫正一个误区:跨网段通信时,就一定要用到代理ARP;

②代理ARP是一个"善意的欺骗",当电脑要跨网段访问外网设备时,网关设备用自己的MAC返回;

③代理ARP和ARP的具体实现,跟电脑是否有设置网关有直接的关系;有网关通过ARP,没网关通过代理ARP;代理ARP可以看成是ARP的补充;

④代理ARP会"受限于沿途网络设备",真实网络里面一般都直接用ARP获取MAC地址。



预告:

什么是免费/无故ARP?

免费ARP的功能是什么?在什么时候出现?

免费ARP的数据包结构是如何的?



【相关推荐】

图解ARP协议(三)ARP防御篇-如何揪出"内鬼"并"优雅的还手"?

图解ARP协议(二)ARP攻击篇

图解ARP协议(一)

《TCP/IP协议栈视频教程》

《Wireshark协议分析从入门到精通》

新浪微博:@拼客学院陈鑫杰

微信公众号:拼客院长陈鑫杰

拼客学院:pinginglab.net

「不会吧?这么认真看完了居然还想给我打赏!」
1 人赞赏
不要脸的小黑
文章被以下专栏收录
  • 跟杰哥学网络与安全

    绝无仅有的网络与安全技术图解教程

    进入专栏
9 条评论
评论由作者筛选后显示

华莱士
华莱士
楼主高产,前三篇看完了。怎么在干净的环境抓包做实验用过滤器还是不太方便,楼主说的用模拟器啥意思?只过滤模拟器地址?
24 天前
拼客学院陈鑫杰
拼客学院陈鑫杰(作者)回复华莱士
在gns3里面桥接wireshark,wireshark只抓取虚拟环境的包。如果没有玩过gns3,可以到「拼客学院」搜“gns3”,有这块免费的视频教程。
24 天前
雄大
雄大
感谢楼主分享,从事网络工作三年多,对于这些概念很模糊,看完前三篇,终于知道ARP这个工作原理了。谢谢!有空期待更新啦。
24 天前
肖智轩
肖智轩
支持!感觉计网课学的知识得到了应用,期待更多文章
23 天前
Jtung lee
Jtung lee
配图好有意思。。
23 天前
yuan
yuan

当主机没有设置默认网关时, ping 8.8.8.8 会发ARP请求吗? 不是直接显示网络不可达吗?

22 天前
拼客学院陈鑫杰
拼客学院陈鑫杰(作者)回复yuan
嗯嗯,不同操作系统的解决思路有差异。例如cisco ios在没有网关(关闭路由功能)时候,访问其他网段时,仍然会发送请求。
22 天前
Rammer
Rammer
大赞 一连看了3篇文章 巩固了以前学的知识 还弄懂了代理ARP的工作机制
13 天前
郑宇
郑宇

大学上网络课, 毛线不懂, 现在居然一看就懂. 赞

9 天前