ARP/代理ARP

1.ARP
首先讲到ARP,ARP是地址解析协议,它的作用是在以太网环境下,通过3层的IP地址来找寻2层的MAC地址,得到一张ARP缓存表。转发数据的时候根据ARP缓存表来进行传输。下图详细说明数据传输时ARP是如何一步步操作的。
在配置IP地址后,不做任何ping操作,ARP缓存表是这样的:

当PC去ping R1的时候,你会发现第一个丢包了。像这样
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 100 percent (5/5), round-trip min/avg/max = 8/25/56 ms

第一个包其实是做ARP请求去了。PC发现ping的是本网段,会发出ARP广播,向R1请求192.168.1.2的MAC地址。得到回应后ARP表会添加ARP请求得来的相应内容。

PC:这个时候PC再去ping 10.1.1.3会发现ping的不是本网段,由于PC没有路由功能所以不知道该往哪里发送,会按照之前已经配好的默认网关发送出去,一般默认网关会配置成路由器的接口IP,在这里是192.168.1.2。查看ARP缓存表发现了192.168.1.2对应的MAC地址,就把包交给路由器处理了。

R1:路由器收到去往10.1.1.0网段的数据包会查询路由表,首先查看路由表发现数据该发往FastEthernet 0/1
#show ip route
C       10.1.1.0 is directly connected, FastEthernet0/1
然后查看ARP表是否有下一跳10.1.1.3的MAC地址信息,如果有则按MAC把数据发到下一跳;如果没有则发出ARP查询,查询后获得下一跳地址10.1.1.3的MAC地址,存到ARP缓存表中,然后转发。

数据包发送到R2(已做好静态路由)。同理数据包返回,成功ping通。

2.代理ARP
“什么是代理ARP?代理ARP就是通过使用一个主机(通常为router),来作为指定的设备对另一设备的ARP请求作出应答。”这个可以说是一个官方解释了。大家可以用同一个拓扑来验证一下,在这里我们最常使用Router关闭路由功能来模拟成PC完成这个实验(左方PC为路由器模拟,在做此实验前请把前一实验的ARP信息清除,建议重启):

PC上不配置默认网关,此时用PC去ping 192.168.1.2和10.1.1.3。会得到以下ARP表

由此可见,PC发出ARP请求10.1.1.3的MAC地址,R2以自己的FastEthernet0/0口地址代理R3去回应PC,告诉PC自己的FastEthernet0/0就是10.1.1.3的MAC地址。
结论:有默认网关的的时候PC按默认网关走,没有默认网关的时候路由器通过代理ARP完成通信。
到目前为止一切都看起来那么的合理,那么的顺利。这个实验是一些培训班常做的实验之一。其实,错了!

问题出在哪里?问题就出在我们是用一台路由器去模拟PC。不管是否关闭路由功能,它始终不是PC,它处理数据的方式与PC也不一样。请大家思考一下,如果是一台PC,在没有默认网关的情况下去ping一个非本网段地址,会出现什么情况?

在没有默认网关的情况下ping一个非本网段地址,显示目标网络不可达,然后直接丢包,根本不会发出ARP查询。
PC在什么时候会发出ARP查询呢?ping一个本网段地址的时候(大家可以抓包来验证一下)。其实就是思科文档的这种情况了:

看清楚了,PC-A的IP地址是/16位,PC-D的IP地址是/24位,所以当PC-A去ping PC-D的时候,PC-A认为是ping同一个网段,会发出ARP请求,这个时候ARP请求就到了路由器上了。路由器如果开启了代理ARP功能,会代替PC-D给PC-A回应,告诉PC-A路由器的e0口MAC地址00-00-0c-94-36-ab就是PC-D的MAC地址,完成代理ARP操作,保护了PC-D的MAC地址隐私。

我认同这种说法,是合情合理的。但是不禁有个问题,谁会用这么脑残的方法配置IP地址呢?好吧,就当是有。
以下转自鸟哥的Linux私房菜:
“如果你一開始設計的網路環境就是同一個 C class 的網域,例如 192.168.10.0/24 , 後來因為某些因素必須要將某些主機搬到比較內部的環境中,例如圖一的 PC2 ~ PC4 。 然後又因為某些因素,所以你不能變更 PC2 ~ PC4 的 IP ,也就是說,有點像底下這樣的圖示:”

代理ARP作为这种特殊情况的解决方案是无可厚非的,但是按道理说这种情况万中无一。既然这种情况出现的概率那么低,为什么要把代理ARP设置为默认启动?这不是浪费资源吗?还存在ARP欺骗等安全隐患,完全可以把代理ARP功能设置为默认关闭。个人意见,有朋友知道原因请告知。

3.三层交换机不同网段关闭路由互通问题
破烂熊的问题:
一个三层交换机,f0/1设置成指定为pc同网段的网关的IP,f0/2指定为另一个网段的ip,关闭交换机的路由功能.pc可以ping通f0/2吗?

破烂熊的答案:
我用dy做实验是可以通的,
pc的目的和自己是不同网段的,pc通过arp学习到网关的mac后,发ping请求给网关,这个ping请求包是一个三层包,这个数据包的格式是 目标mac(网关的),源mac(pc的), 源IP(pc的),目标ip(f0/2的IP)    网关收到此包后检测数据帧的头部,发现是给自己的,于是解封装,除去帧头部,然后查看ip头部,网关发现目标IP和自己不是处于同一网段,由于三层已经没有了路由功能,所以没有去查找路由表,正常情况下是先查找路由表的.在有过第一次的转发数据记录后才会去查看arp表而不是路由表,要不然一收到和自己不网段的包就去找路由表,那arp表有啥用?于是通过查找找到了此IP已经被解析的mac,因为是交换机自身的接口配的IP的地址,当然是存在在路由器arp中的.也就是说这个目标的ip是不需要学习就可以找到的.查找到后就对帧进行重新封装.然后返回给pc,
纯个人见解,有不同看法的请指证......

个人认为非常正确,说的很透彻。但是有一点保留意见,“在有过第一次的转发数据记录后才会去查看arp表而不是路由表,要不然一收到和自己不网段的包就去找路由表,那arp表有啥用?”
这里我已经修正过来了.路由器收到数据包还是先查路由表,然后查看发出去的下一跳地址ARP缓存表中是否有MAC地址,有则转发.

还想补充一点的是,三层交换机只有一个MAC地址。所以以上问题的情况在三层交换机中的ARP缓存表会这样显示:

F0/1和F0/2对应的MAC地址是相同的。

最后留个问题:同样关闭路由功能的情况下,我在三层交换机上用F0/1去ping F0/2口能否通?

时间: 2024-08-08 22:00:20

ARP/代理ARP的相关文章

图解ARP协议(四)代理ARP原理与实践(“善意的欺骗”)

一.代理ARP概述 我:当电脑要访问互联网上的服务器,目标MAC是什么? 很多小伙伴在刚学习网络协议的时候,经常这样直接回应:不就是服务器的MAC嘛! 这时我会反问:那电脑怎么拿到这个服务器的MAC地址呢? 小伙伴一般都自信的抛出下面两个点: ①根据网络通信中数据封装的原则,通信双方需要封装源目IP和MAC地址: ②如果要拿到目标MAC地址,就需要通过ARP协议进行交互. 我:好,确实没毛病,你是指的下面这个意思吧 ==> 小伙伴:对对对,是这个意思的. 我:好,你再看看下面这个图,再确认下.

华为s5700交换机代理ARP功能配置

拓扑图如下 配置如下: # sysname Huawei # undo info-center enable # vlan batch 10 20 # interface Vlanif1 # interface Vlanif10 ip address 10.0.1.1 255.255.255.0 arp-proxy enable #开启arp代理 # interface Vlanif20 ip address 10.0.2.1 255.255.255.0 arp-proxy enable #开启

代理ARP配置要点及实例

 ARP配置要点 第一.连接好路由器与目的主机.路由器与源主机 第二.配置路由器与源主机.目的主机的ip地址 第三.一定保证目标主机的ip地址和源主机在同一个网段或则目标主机 的网络号包括在源主机的网段中,即要确保源主机能够发送出arp广播包. 第四.在路由器与源主机相连的以太端口中配置启动代理arp命令: arp-proxy enable(H3C命令) 实验图如下: 第一步:如图配置好各个端口的IP 第二步:在路由的GE0/0/0端口中:arp-proxy enable  启动ARP代理即

代理arp技术介绍及实验

路由器收到ARP Request时,若发现查询的目的IP地址在不同子网,路由器会扮演代理的ARP的角色,代为回答,告诉查询者它所要做的MAC地址 如果ARP请求是从一个网络的主机发往同一网段却不在同一物理网络上的另一台主机,那么连接它们的具有代理ARP功能的设备就可以回答该请求,这个过程称作代理ARP(Proxy ARP). 代理ARP功能屏蔽了分离的物理网络这一事实,使用户使用起来,好像在同一个物理网络上. 代理ARP分为普通代理ARP和本地代理ARP,二者的应用场景有所区别: ·      

Linux ARP代理 与 NAT

有时候我们会在一个已有网络(10.10.10.0/24)内组建一个实验网络(192.168.1.0/24),网络结构如上图所示. 假设我们不能控制(修改)A网络内除D主机以外的系统配置,但可以完全控制网络B内的主机. 此时Server D实际上要承担一个路由的角色(它有两张网卡分别在两个网络A,B内) 所以先打开其上的内核路由转发功能,修改/etc/sysctl.conf中的如下配置 net.ipv4.ip_forward = 1 保存后应用查看 # sysctl -p net.ipv4.ip_

代理ARP实验

代理ARP实验 一.ARP简介 ARP(Address Resolution Protocol,地址解析协议)是将 IP 地址解析为以太网 MAC 地址(或称物理地址)的协议.在局域网中,当主机或其它网络设备有数据要发送给另一个主机或设备时,它必须知道对方的网络层地址(即 IP 地址).但是仅仅有 IP 地址是不够的,因为 IP 数据报文必须封装成帧才能通过物理网络发送,因此发送站还必须有接收站的物理地址,所以需要一个从 IP 地址到物理地址的映射.ARP 就是实现这个功能的协议. 二.代理AR

Juniper Junos SRX NAT ARP代理

SRX所使用的地址池使用的地址在SRX是虚拟的,它不是一个真正物理存在的.那么这个地址的可达性必然依赖于简单的IP路由查找.SRX也支持将自己的物理接口配置到Pool中,如图5-8. Figure5-8. Source NAT with ProxyARP 为保证这些Pool的可达性,Proxy ARP功能使能.由于Pool内有可路由的IP网络(或者SRX设备本身是不可达),关键是要在以太网层面(二层)提供可达性,而不是IP层的可达性. 最后一跳IP路由设备必须在本地以太网络上发送一个ARP请求,

对代理ARP技术的误读、无法完成代理ARP实验的故障分析

对代理ARP技术的误读.无法完成代理ARP实验的故障分析 问题的提出:     网络工程技术人员和或者学习者面对ARP代理技术时,通常能理解ARP代理的作用和技术要点是什么,但是无法根据技术描述去实现ARP代理的功能!   首先来看一般对代理ARP的定义: 通常根据上述文字的描述,就意味着在如图1所示的环境中,主机192.168.2.2/24可以在不配置默认网关的情况下成功的与路由器R2的192.168.3.2/24通信.其实这种理解是没有错的,但是当用户使用实验来证实代理ARP的作用时,结果却

路由与代理ARP的介绍

网络设备管理 软件 系统文件 - IOS.bin 配置文件 启动配置文件 - sstartup-config 正在运行配置文件 - running-config 硬件 flash - 硬盘 系统文件 nvram - sstartup-config ram   - running-config   (save) 管理: 本地管理 - console 远程管理 - telnet MAC: -作用 在全球范围内,唯一的,标识一个网络设备 -表示 共48bit,即6个字节 通过16进制进行表示 -结构