Proxy ARP

  什么是Proxy ARP?

    一个主机A(通常是路由器)有意应答另一个主机B的ARP请求(ARP requests)。主机A通过伪装其身份,承担起将分组路由到真实目的地的责任。代理ARP可以帮助一个子网上的计算机到达远程子网,而无需配置路由或者默认网关。

  Proxy ARP是如何工作的?

  如图所示,子网A上的主机A(172.16.10.100)要给子网B上的主机D(172.16.20.200)发送数据包。主机具有/16掩码,这意味着Host A认为他直连网络172.16.0.0中的主机。当主机A想要与他认为是直连的任何主机通信时,它便向目的地发送ARP Request。因此,当主机A需要向主机D发送数据包时,主机A认为主机D和自己直连,因此向主机D发送ARP请求。

  为了到达主机D (172.16.20.200),主机A(172.16.10.100)需要主机D的MAC地址。因此主机A在子网A上百个广播ARP Request,如下图所示:

  ARP Request封装在以Host A的MAC地址作为源MAC,以广播(FFFF.FFFF.FFFF)作为目的MAC地址的以太网帧中。由于ARP请求时广播,他会到达子网A中的所有节点,包括Router的E0口。但是不会到达主机D,因为路由器是不转发广播的。

  由于Router知道目标地址 (172.16.20.200)在另一个只晚上并非切可以到达主机D,他用自己的MAC地址回答主机A。    

  这是Router发送到主机A的代理ARP回复。代理ARP回复数据包被封装在以Router的MAC地址作为源MAC,以主机A的MAC作为目的MAC的以太网帧中。ARP应答始终是单播到原始请求者。在收到此ARP应答后,主机A更新其ARP缓存,如图所示:

  从现在起,主机A将其想要到达172.16.20.200(主机D)的所有分组转发到MAC地址00-00-0c-94-36-ab(路由器)。 由于路由器知道如何到达主机D,路由器将数据包转发到主机D。子网A中的主机上的ARP缓存,凡是到子网B上的主机,都用路由器的MAC地址填充。因此,所有数据包目的地到子网B发送到路由器。 路由器将这些数据包转发到子网B中的主机。主机A的ARP缓存如下表所示:

  多个IP地址映射到单个MAC地址,即此路由器的MAC地址,表明Proxy ARP正在使用。

  当子网A上的主机B(172.16.10.200/24)尝试向子网B上的目的地主机D(172.16.20.200)发送数据包时,它查找其IP路由表并相应地路由该数据包。 主机B(172.16.10.200/24)不对主机D IP地址172.16.20.200进行ARP,因为它属于与在主机B以太网接口172.16.20.200/24上配置的子网不同的子网。

   proxy ARP有哪些优点?   

    最主要的一个优点就是能 够在不影响其他router的路由表的情况下在网络上添加一个新的router,这样使得子网的变化对主机是透明的 中国网管联盟www.bitscn.com
    proxy ARP应该使用在主机没有配置默认网关或没有任何路由策略的网络上     

  proxy ARP带来的哪些负面影响?    

    1.增加了某一网段上ARP流量
    2.主机需要更大的ARP table来处理IP地址到MAC地址的映射
    3.安全问题,比 如ARP欺骗(spoofing)
    4.不会为不使用ARP来解析地址的网络工作
    5.不能够概括和推广网络拓扑

Gratuitous ARP(免费ARP)

  问题引入:

    我们很多系统都是使用双机热备份系统(即一个主用,另一个备用,如果主用没有问题,备用一直处于空闲状态;如果主用出现问题,备用立刻接管)。假设主用服务器的MAC地址为:1111-1111-1111,备用服务器的MAC地址为:2222-2222-2222,通过某种软件,两台服务器共同对外共同使用一个IP,例如10.10.10.1,这样客户机在需要同服务器进行通信的时候(第一次通信的例子,在这时候ARP的缓存是空的,或至少没有10.10.10.1的MAC地址),先向局域网发送广播ARP请求报文请求10.10.10.1这个IP地址的MAC地址,得到主用服务器响应后,将10.10.10.1和对应的MAC地址放入自己的ARP缓存中,然后向这个IP发送请求就可以进行通信了。如果在通信的过程中,主用服务器突然发生故障,down机了,这时备用服务器立刻接管10.10.10.1这个IP进行服务,可是刚才那台客户机的ARP缓存表中10.10.10.1这个IP对应的MAC地址是1111-1111-1111,再往这个MAC地址发送数据包肯定是石沉大海的,怎样才能让备用接管了服务之后立刻能起作用呢?

    我们能想到的方法有两种,一种就是在使用双机热备份系统,接管那个IP的时候,生成一个不依赖于任何一个主机的虚拟MAC地址,接管IP的同时也接管那个虚拟的MAC地址,这样客户机不需要做任何更改动作,ARP缓存表不变。另外一种就是在接管的同时,接管的服务器对外广播一个ARP报文给所有主机,例如在刚才的例子中,ARP广播报文的数据字段中源IP地址是10.10.10.1,源MAC地址是2222-2222-2222,目的IP地址也是10.10.10.1,目的MAC地址也是2222-2222-2222,IP报文的目的地址是:FFFF-FFFF-FFFF,这样让所有的广播网络上的主机接收该报文,并更新自己的ARP缓存表,已告知10.10.10.1这个IP的对应MAC地址已经变为2222-2222-2222,这样,刚才的那个客户机就能正确地同服务器进行通信了。

    第一种方法在大多数系统中已经被采用,例如Cisco的HSRP技术中,虚拟出来的MAC地址是以0000.0c07.ac+HSRP的group ID组成,并且限制局域网上不会存在不同应用的相同Group ID,以确保局域网上不会重复MAC地址生成。在VRRP中也是如此,原理和HSRP同。这样无论主备用如何切换,客户机不需要做任何动作。

    第二种方法就是免费ARP技术(gratuitous ARP),目前应用也很广泛。

  免费ARP目前的作用有两种:

   第一种就是刚才上面所说的宣告广播的作用,以告诉整个广播域,目前这个IP所对应的MAC地址是什么。

  第二种是看看广播域内有没有别的主机使用自己的IP,如果使用了,则在界面上弹出“IP冲突”字样。普通ARP请求报文广播发送出去,广播域内所有主机都接收到,计算机系统判断ARP请求报文中的目的IP地址字段,如果发现和本机的IP地址相同,则将自己的MAC地址填写到该报文的目的MAC地址字段,并将该报文发回给源主机。所以只要发送ARP请求的主机接收到报文,则证明广播域内有别的主机使用和自己相同的IP地址(这里不考虑路由器的ARP代理问题)。免费ARP的报文发出去是不希望收到回应的,只希望是起宣告作用;如果收到回应,则证明对方也使用自己目前使用的IP地址。在所有网络设备(包括计算机网卡)up的时候,都会发送这样的免费ARP广播,以宣告并确认有没有冲突。

  一个关于局域网分配IP的问题

  如上图所示,假设交换机上连接了200台计算机。单位刚接好电脑,这时候彼此都不知道对方IP地址,更谈不上MAC地址(ARP这时候都是扯淡)。电脑接到交换机上,即使不上外网(eg:百度),那彼此之间也要通信,别忘了交换机作用就是这个。交换机作为二层设备,适用MAC地址通信,MAC地址再网卡NIC出厂的时候就唯一了。那每台计算机的IP地址是咋获取的呢?可以手动给添加,太麻烦了(200台不嫌烦,2000台估计疯了)。这时候DHCP就出现了。

  为了获取IP地址,各台主机发送DHCP Discover消息,在第2层和第3层都发广播,指出“帮帮我,我不知道自己的IP地址”

DHCP是无连接的,意味着其传输层适用UDP协议。

  客户端向DHCP 服务器请求IP 地址的4 个步骤如下:
    (1) DHCP 客户端广播一条DHCP 发现消息,旨在寻找DHCP 服务器(端口67 );
    (2) 收到DHCP 发现消息的DHCP 服务器向主机发回一条单播DHCP 提议消息;
    (3) 客户端向服务器广播一条DHCP 请求消息,请求提议的IP 地址和其他信息:
    (4) 服务器以单播方式发回一条DHCP 确认消息,完成交互。

  DHCP冲突

  两台主机使用相同的IP 地址时,就发生了DHCP 地址冲突。这昕起来很糟糕,不是吗?当然糟糕!在介绍IPv6 的那章,根本不需要讨论这个问题。在分配IP 地址的过程中, DHCP 服务器在分配地址池中的地址前,将使用ping 程序来测试其可用性。如果没有主机应答, DHCP 服务器将认为该E 地址未分配出去。这有助于服务器知道它要分配的地址未被占用,但主机呢?为进一步避免如此糟糕的E 地址冲突问题,主机可广播自己的地址。主机使用免费ARP (gratuitous ARP )来帮助避免地址重复。为此, DHCP 客户端在本地LAN 或VLAN 中发送A盯广播,并要求解析分配新给它的地址,从而将冲突消灭在萌芽状态。如果检测到IP 地址冲突,相应的IP 地址将从DHCP 地址池中删除;且在管理员手工解决冲突前,该地址不全被分配给任何主机,牢记这一点很重要。

ARP、Proxy ARP、Gratuitous ARP的更多相关文章

  1. ARP协议具体解释之Gratuitous ARP(免费ARP)

    ARP协议具体解释之Gratuitous ARP(免费ARP) Gratuitous ARP(免费ARP) Gratuitous ARP也称为免费ARP.无故ARP.Gratuitous ARP不同于 ...

  2. ARP协议详解之Gratuitous ARP(免费ARP)

    ARP协议详解之Gratuitous ARP(免费ARP) Gratuitous ARP(免费ARP) Gratuitous ARP也称为免费ARP,无故ARP.Gratuitous ARP不同于一般 ...

  3. Kali Linux Web 渗透测试视频教程—第十四课-arp欺骗、嗅探、dns欺骗、session劫持

    Kali Linux Web 渗透测试视频教程—第十四课-arp欺骗.嗅探.dns欺骗.session劫持 文/玄魂 目录 Kali Linux Web 渗透测试—第十四课-arp欺骗.嗅探.dns欺 ...

  4. 中间人攻击——ARP欺骗的原理、实战及防御

    ​ 1.1 什么是网关 首先来简单解释一下什么是网关,网关工作在OSI七层模型中的传输层或者应用层,用于高层协议的不同网络之间的连接,简单地说,网关就好比是一个房间通向另一个房间的一扇门. 1.2 A ...

  5. IP地址、MAC地址、ARP地址解析协议

    互联网中一台主机要和另一台主机实现通信首先需要知道彼此在互联网中的位置,主机在互联网中的位置是通过ip地址标记的,当找到ip地址后,再通过端口号标识运行在主机中的进程从而实现通信. IP地址: IP地 ...

  6. 计算机网络之IPv4(IPv4分组、IPv4地址、NAT、子网划分与子网掩码、CIDR、ARP协议、DHCP、ICMP)

    文章转自:https://blog.csdn.net/weixin_43914604/article/details/105138313 学习课程:<2019王道考研计算机网络> 学习目的 ...

  7. ARP攻击的发现、攻击原理、攻击方式、防护,竟然这么简单?!

    ARP协议概述 ARP协议(address resolution protocol)地址解析协议. 一台主机和另一台主机通信,要知道目标的IP地址,但是在局域网中传输数据的网卡却不能直接识别IP地址, ...

  8. 在ensp上的ARP及Proxy ARP

    啥是ARP?啥又是Proxy ARP? ARP是用来将 IP 地址解析为 MAC 地址的协议. ARP 表项可以分为动态和静态两种类型.动态 ARP ,是利用 ARP 广播报文,动态执行并自动进行 I ...

  9. ARP协议抓包之帧长度和Gratuitous ARP的问题

    用Winpcap编程构造ARP包选择网卡并发出,遇到若干问题,学到了许多新知识,但是有的还尚未解决,在这里记录下没解决的和解决的问题. 先来看下ARP协议的格式,ARP字段有28个字节,发到以太网中还 ...

随机推荐

  1. jsplumb 流程图,常用功能配置记录

    前言: jsplumb 有2个版本一个Toolkit Edition(付费版),另外一个就是Community Edition(社区版本).Toolkit Edition版本功能集成的比较丰富,社区版 ...

  2. TEC-2机微程序设计

    了解TEC-2机的结构和基本的指令知识很重要,不理解而只知一味地照抄是学不到知识的.建议先阅读课件,再结合例子进行理解.以下例子只供参考,有些地方可以合并,具体的操作仍需见仁见智.理解并学会使用微指令 ...

  3. Ubuntu16.04下KeepAlived+Nginx 布署

    前言         网上已经有很多相关文章,对各种概念介绍的比较清楚,也有各种详细的步骤,这里主要记录本要在ubuntu16.04下的布署过程,主要记录编译安装keepalived时遇到的坑及解决办 ...

  4. NASA HEG tool安装心得

    自从NASA对MRT工具停止支持后,这个工具的官网也随之打不开无法下载.处理数据当然还是需要官方的工具好一些. 现在NASA推荐使用HEG工具来处理MODIS系列产品,除此之外工具对ASTER, MI ...

  5. vue时间戳转换(10位数)/(13位)

    <template> <!-- time为时间戳 --> <div>{{time | formatDate}}</div> <!-- 结果为 20 ...

  6. Java程序的编写与执行、Java新手常见问题及解决方法|乐字节Java学习

    今天,我们来写一段Java程序.然后看看Java程序是如何执行的,以及Java新手小白遇到的问题和解决办法.   一.HelloWorld的编写 ① 新建一个XXX.java (文件的扩展名显示出来) ...

  7. Appium 基于控件左滑操作

    def swipe_ele_left(self, ele, dur=800): """ 基于控件元素左滑操作 :param ele: 控件元素 :param dur: 在 ...

  8. C/C++内存知识(一)

    一.C/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)- 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈. 2.堆区(heap)- 由程序 ...

  9. js基础——数组的概念及其方法

    数组: 概念:是一种特殊的对象. 与普通对象的区别:a.普通对象使用字符串作为属性名,而数组使用数字作为索引来操作元素: b.数组的存储性能比普通对象好 数组的标志:[ ] 数组的索引:是从0开始的整 ...

  10. python--接口自动化测试(接口状态)

    本节开始,开始介绍python的接口自动化测试,首先需要搭建python开发环境,到https://www.python.org/下载python 版本直接安装就以了,建议 下载python2.7.1 ...