VRRP协议具体解释

转帖:http://blog.chinaunix.net/space.php?uid=11654074&do=blog&id=2857384

Contents                                                                                                                                   Page

文件夹

入木三分学网络第一篇--VRRP协议具体解释... 1

1. VRRP产生背景及应用环境... 2

1.1为什么要用VRRP. 2

2VRRP基本原理及实现过程... 5

2.1 VRRP基本概念... 5

2.2 VRRP报文组成... 6

2.3  VRRP协议状态机... 8

2.3.1初始状态(Initialize... 8

2.3.2备份路由器状态(Backup... 9

2.3.3 Master路由器(Master state... 10

2.4 VRRP通告报文的发送与接收处理流程... 11

3. VRRP的两种应用需求:... 12

冗余备份、负载均衡... 12

4. 实例研究... 14

4.1 VRRPCisco路由器上的实现... 14

4.2 VRRPRedback路由器上的实现... 15

4.3 VRRPJuniper路由器上的实现... 18

5. VRRP的安全性... 19

6. 一个典型的VRRP故障分析... 20

7.后记... 22

 

  • 作者:张蒙 (zmouc)
  • 电子邮箱:qdzhangmeng@163.com
  • MSN:qdzhangmeng@163.com
  • QQ  : 407-960-134
  • 博客地址:http://zmouc.cublog.cn
  • 建立日期:2010年07月23日
  • 版    本:1.0
  • 版权说明:本文基于创作共用约定,内容归作者版权全部,欢迎大家转载,但要保留        作者的完整信息和出处,谢谢!

1. VRRP产生背景及应用环境

1.1为什么要用VRRP

VRRPVirtual Router Redundancy Protocol------虚拟路由器冗余协议,其最新技术标准是RFC3768

 

为什么要用VRRP呢,主要是为了实现数据链路层互通设备的冗余备份功能,我们来看图一:

 

图一(常规网络架构)

 

通过上图能够看到,常规的局域网一般都是多个终端接到交换机上,然后通过单独的出口路由器连接到Internet,这时候问题来了,假设这个出口路由器坏掉了,那么整个上行的流量就会所有断掉,这就是传说中的单点故障。

  所以说我们要避免出现这样的情况,本着冗余备份的思想,我们对上面的网络进行物理改造,例如以下图:

图二(消除了单点故障的常规网络架构)

 

如今,这个网络一共同拥有两个Internet出口,这样不论什么一个出口路由器出现问题都不会导致终端用户的上行流量断掉。

 

另外一个问题出现了,我们怎么让终端PC知道局域网中有两个出口路由器,并在当中一个出现问题后自己主动选择另外一个呢?可採用的方案包含让终端PC执行动态路由协议,比方RIPOSPF,或者ICMP router Discovery clientDISC),或者指定一条静态缺省路由。

 

可是这三种实现方法都有其劣势及不可行之处,我们来详细分析一下。首先对于在每个终端PC上执行动态路由协议来讲,差点儿是不可能的,这当中牵涉到网管的技术能力和日常维护、安全性问题、以及某些终端平台不支持动态路由协议,比方我们经常使用的XPWindows7都不支持,而windows Server系列OS支持。

 

假定我们在终端PC上部署了动态路由协议,那么每个终端用户都会遇到以下这种情况:

10086:尊敬的用户您好,申报RIP故障请按1,申报OSPF故障请按2,申报ISIS故障请按3……….

用户:( o )啊!我家是OSPF,按2

10086:您好,您申报的故障是OSPF,请进一步选择,OSPF邻居无法建立请按1OSPF密钥不正确请按2,链路状态数据库异常请按3,路由表错误请按4…………..

用户:( o )啊!……………然后吐血身亡………….

 

所以说,N多现实问题和困难导致在终端PC上部署动态路由协议具有不可行性。

 

  那么对于在终端PC上部署DISC等邻居或路由器发现协议呢?也存在种种问题,例如在网络内存在大量主机,每一台都须要执行DISC,除了添加主机的处理负担外,也会导致协议收敛缓慢,从而不能及时发现不可用邻居路由器,产生路由黑洞,这是不可接受的。

 

  如今仅仅剩下在终端PC上配置静态缺省路由了(其详细表现形式通常是设置网关),这是差点儿每个IP平台都支持的配置功能,即使是一部IP电话机,依据这个思路,我们在终端上配置多个默认网关就可以实现路由备份了,可是存在下面两个问题:

 

1.       对于下行设备是PC来讲,配置了多个默认网关之后,当中一个会作为活动默认

网关,其他的作为备份默认网关,其依照下列过程运行流量转发和失效网关检測:

TCP/IP在通过活动默认网关向某个目标IP地址进行TCP通信时,假设失败的尝试次数达到TcpMaxDataRetransmissions注冊表值(默觉得5)的一半(3)还没有收到响应,TCP/IP将到达该目标IP地址的通信改为使用列表中的下一默认网关,这一步是通过更改该远程IP地址的路由缓存项(Route Cache EntryRCE)来实现的,从而使用列表中的下一个默认网关来作为下一跳地址。当中RCE是路由表中的一个条目,用于存储目的地的下一跳IP地址。当超过25%TCP连接转向下一默认网关时,TCP/IP将活动默认网关改动为这些连接当前使用的默认网关。

  假设此时原始默认网关从故障中回复,TCP/IP将继续使用当前的活动默认网关,而不会转移到原始默认网关,除非重新启动计算机。假设当前的活动默认网关也出现故障,那么TCP/IP就会继续尝试使用列表中的下一个默认网关,在尝试完整个列表后将返回到列表的開始,又从第一个默认网关開始进行尝试。

  死网关检測仅监视TCP流量,假设其它类型的流量连接失败,不会切换默认网关。另外TCP是端到端的协议,因此即使当前默认网关全然正常,本地计算机的TCP通信失败也可能会导致切换默认网关。

  当不同网络接口所连接的网络之间没有连接性时(如一个网络接口连接到Internet,而一个网络接口连接到内部网络),假设在多个网络接口上同一时候配置默认网关,在活动默认网关出现故障导致切换默认网关时,就可能会引起连接性故障。比如活动默认网关为Internet连接,当它出现故障时,此时默认网关切换为内部连接,此时,本地计算机将无法再訪问位于Internet连接上的主机。对于这样的情况,微软建议使用 route add 来加入相应目的网络的匹配路由,而不是设置多个默认网关,这其实就是最长匹配原则,精确路由优先于缺省路由。

 

2.对于下行设备是路由器的情况,其不会切换默认路由,仅仅会依照配置好的缺省

路由优先级进行流量转发,从而导致路由黑洞。

 

结合上面两个原因,在网络出口路由器的下行设备上配置缺省路由的方法也不可

 

综上所述,要想消除单点故障,又同一时候实现下行设备在故障发生时的流量无障碍

发,以上的三个方法均不可行,所以人们开发出了一种全新的协议:VRRP,这

协议无需下行设备与出口路由器进行交互性操作,却全然实现了网络出口的冗

余备份,下一节,我们就来具体讨论下VRRP的基本原理及实现过程。

 

2VRRP基本原理及实现过程

2.1 VRRP基本概念

VRRP路由器:执行VRRP协议一个或多个实例的路由器

 

虚拟路由器:由一个Master路由器和多个Backup路由器组成。当中,不管Master由器还是Backup路由器都是一台VRRP路由器,下行设备将虚拟路由器当做默认网关。

 

VRID虚拟路由器标识,在同一个VRRP组内的路由器必须有相同的VRID,事实上VRID就相当于一个公司的名称,每一个员工介绍自己时都要包括公司名称,表明自己是公司的一员,相同的道理,VRID表明了这个路由器属于这个VRRP组。

 

Master路由器:虚拟路由器中承担流量转发任务的路由器

 

Backup路由器:当一个虚拟路由器中的Master路由器出现问题时,可以取代Master路由器工作的路由器

 

虚拟IP地址:虚拟路由器的IP地址,一个虚拟路由器能够拥有一个或多个虚拟IP址。

 

IP地址拥有者:接口IP和虚拟路由器IP地址同样的路由器就叫做IP地址拥有者。

 

IP地址:从物理接口设置的IP地址中选择,一个选择规则是总是选用第一个IP址,VRRP通告报文总是用主IP地址作为该报文IP包头的源IP

 

虚拟MAC地址:组成方式是00-00-5E-00-01-{VRID},前三个字节00-00-5EIANA组织分配的,接下来的两个字节00-01是为VRRP协议指定的,最后的VRID是虚拟路由器标识,取值范围[1255]

2.2 VRRP报文组成

以下我们来看VRRP报文的详细组成:

 

图三(VRRP报文格式,取自RFC3768)

 

详细字段含义:

 

Version:VRRP协议版本号号,RFC3768定义了版本号2.

 

Type:该字段指明了VRRP报文的类型,RFC3768仅仅定义了一种VRRP报文,那就是

VRRP通告报文,所以该字段总是置为1,若收到的VRRP通告报文拥有非1的类型

值,那么会被丢弃。

 

Virtual Rtr ID:也就是我们上面介绍过的VRID,一个VRID唯一地标识了一个虚拟

路由器,取值范围是[1,255],所以一台路由器的接口能够同一时候执行最多255个VRRP

实例,此字段没有缺省值,必须人为设定。

 

Priority:优先级,在一个虚拟路由器中用来选取Master路由器和Backup路由器,值越大表明优先级越高,此字段共同拥有8个bit,取值范围[1,254],若没有人为指定,缺省值是100。当中,VRRP协议会将IP地址拥有者路由器的该字段永远设置为255,若人为指定为其他值,也不会影响VRRP协议的默认行为,即IP地址拥有者路由器的该字段总是255。另外,此字段设置为0会出如今以下这样的情形中,当Master路由器出现故障后,它会立马发送一个Priority置0的VRRP通告报文,当Backup路由器收到此通告报文后,会等待Skew time时间,然后将自己切换为Master路由器,当中Skew time=(256-Backup路由器的优先级)/256,单位为秒,比如若Backup路由器的优先级为100,那么Skew time=156/256=0.609秒,对于主路由器来说,Skew time并没有实际意义,尽管cisco的路由器也会计算并显示出来。

 

Count IP Addrs:VRRP通告报文中包括的IP地址数量,这个字段事实上就是为一个VRRP虚拟路由器所分配的IP地址的数量,我们来看一个cisco的实际样例:

配置例如以下:

 

interface Ethernet1/0

 ip address 192.168.10.102 255.255.255.0

 duplex half

 vrrp 1 ip 192.168.10.52

 vrrp 1 ip 192.168.10.51 secondary

 vrrp 1 ip 192.168.10.53 secondary

end

 

我们来看一下上面的配置在封装成VRRP通告报文的时候,是怎样进行的,例如以下

 

图:

图四(VRRP报文的抓包分析)

 

大家能够看到,VRRP通告报文中的Count IP Addrs字段的值为3,这是由于我们配置了3个虚拟IP地址,另外,以下的IP Address字段也依照我们配置虚拟IP的顺序进行了封装。

 

Auth Type:认证类型字段,是一个8位的无符号整数,一个虚拟路由器仅仅能使用一种认证类型,假设Backup路由器收到的通告报文中认证类型字段是未知的或和本地配置的不匹配,那么它将丢弃该数据包。

 

值得注意的是,在RFC2338中为VRRP定义了3种认证类型:无认证、明文认证、MD5认证,可是在兴许的实践中发现,这些手段无法提供行之有效的安全性,而且还会导致多个Master路由器的问题,所以在最新的VRRP标准:RFC3768中已经去掉了全部的认证类型。

 

眼下认证类型字段的定义例如以下:

 

0 – 无认证,此时以下的Authentication Data字段将会被置为全0,接收到的路由器也会忽略此字段。

 

1 – 保留,是为了向前一个版本号的RFC2338提供兼容性

 

2 – 保留,是为了向前一个版本号的RFC2338提供兼容性

 

Adver Int::此字段规定了Mater路由器向外发送VRRP通告报文的时间间隔,以秒为单位,取值范围是[1,255],若没有人工配置,缺省为1秒。

 

Checksum:整个VRRP报文的校验和,计算过程中,将Checksum字段置为0,计算完毕后将结果填入此字段。若希望进一步了解Checksum的计算,能够查看RFC1071(CKSM)。

 

IP Address:此字段存放3个VRRP虚拟路由器的虚拟IP地址,配置了几个就封装几个,在上面的cisco实例中我们配置了三个,那么VRRP通告报文就会封装3个。

 

Authentication Data:RFC3768中规定,此字段仅仅是为了向RFC2338兼容,在实际的封装时,全置为0.,接收方也会忽略此字段。

2.3  VRRP协议状态机

 

 对一个VRRP虚拟路由器来讲,,參与它的每一台VRRP路由器,都仅仅有3VRRP状态:InitializeMasterBackup,在讲述这三种状态时会碰到一些新的概念,我们会在第一次遇到时做详解。

 

2.3.1初始状态(Initialize

 

这是配置好VRRP后,VRRP等待一个開始事件时的状态,当本地VRRP进程切换到此状态后,会依次运行下列操作:

 

2.3.1.1假设本地优先级为255,也就是说自己是IP拥有者路由器,那么接下来它会:

 

1.发送VRRP通告报文

 

2.广播免费ARP请求报文,内部封装是虚拟MAC和虚拟IP的相应,有几个虚拟IP址,那么就发送几个免费ARP请求报文。

 

3.启动一个Adver_Timer计时器,初始值为Advertisement_Interval(缺省是1秒),当该计时器超时后,会发送下一个VRRP通告报文

 

4.本地VRRP进程将自己切换为Master路由器

 

2.3.1.2假设,本地优先级不是255,,那么接下来它会:

 

1.设置Master_Down_Timer计时器等于Master_Down_Interval,也就是主路由器死亡时

间间隔,假设此计时器超时,那么Backup路由器就会宣布主路由器死亡。

当中Master_Down_Interval = 3*Advertisement_Interval+ Skew_time举例来说,一个VRRP实例(也就是一个VRRP虚拟器)的优先级是100,报文发送

间隔是1秒,那么Master_Down_Interval = 3*1s + 256-100/256s = 3.609秒。

 

2.本地VRRP进程将自己切换为Backup路由器

 

2.3.2备份路由器状态(Backup

2.3.2.1

 

备份路由器是为了监控Master路由器的状态,假设一个VRRP路由器处于此状态,那么它会:

 

1.       不响应对虚拟IP地址的ARP请求报文

 

2.       丢弃帧头目的MAC地址是虚拟MAC的帧

 

3.       丢弃IP头中目的IP地址是虚拟IPIP

 

2.3.2.2

 

假设此时该VRRP路由器收到了一个shutdown事件,那么它会:

 

1.    取消Master_Down_Timer

 

2.    转换为初始状态(Initialize state

 

2.3.2.3

 

假设Master_Down_Timer超时,那么该VRRP路由器会运行:

 

1.发送一个VRRP通告报文,

 

2.广播免费ARP请求报文,内部封装是虚拟MAC和虚拟IP的相应,有几个虚拟IP

地址,那么就发送几个免费ARP请求报文。

 

3.设置Adver_Timer计时器为Advertisement_Interval(缺省为1秒)

 

4.切换到Master状态

 

2.3.2.4

 

假设该Backup状态的VRRP路由器收到了一个VRRP通告报文;

 

当该VRRP通告报文的优先级字段为0时,那么路由器会将当前的

Master_Down_Timer 设置为Skew_Time

假设优先级不为0,而且大于或等于本地优先级,那么本地路由器会重置Master_Down_Timer计时器并保持Backup状态;

 

假设优先级不为0,而且小于本地优先级,假设开启了抢占模式(Preempt mode),

那么该Backup路由器等待指定的抢占延迟时间后将自己切换为Master路由器;并执

Master路由器的全部动作;比如:vrrp 1 preempt delay minimum 10,表示等待10

后切换自己为Master

 

假设优先级不为0,而且小于本地优先级,假设没有开启抢占模式(Preempt mode),那么本地路由器保持Backup状态。

 

2.3.3 Master路由器(Master state

 

处于Master状态的路由器会运行目的MAC为虚拟MAC数据帧的转发,这里要清楚是对于下行设备的arp表里,该虚拟MAC是和虚拟IP地址相相应的。

 

2.3.3.1

 

当路由器处于Master状态时,会进行以下的动作:

 

1.    响应对虚拟IP地址的ARP请求

 

2.    转发目的MAC地址是虚拟MAC的数据帧

 

3.    拒绝目的IP地址是虚拟IP的数据包,除非它是IP地址拥有者(也就是优先级是

255的那个路由器)。

 

2.3.3.2

 

假设处于Master状态的VRRP进程收到了一个shutdown事件,那么它会:

 

1.    取消Adver_Timer计时器

 

2.    发送一个优先级字段置零的VRRP通告报文

 

3.    切换为初始状态(Intialize state

 

2.3.3.3

 

假设Adver_Timer计时器超时,那么:

 

1.    发送一个VRRP通告报文

 

2.    重置Adver_Timer计时器

 

2.3.3.4

 

假设收到了一个VRRP报文且其优先级为0,那么:

 

1.  发送一个VRRP通告报文

 

2.  重置Adver_Timer计时器

 

2.3.3.5

 

假设收到了一个VRRP报文且其优先级高于本地优先级,或者收到的VRRP报文优先级等于本地优先级可是主IP地址高于本地的主IP地址,那么:

 

1.    取消Adver_Timer计时器

 

2.    设置Master_Down_Timer计时器为Master_Down_Interval

 

3.    切换为Backup状态

转载于:https://www.cnblogs.com/mfrbuaa/p/4201622.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/375385.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPF笔记(1.1 WPF基础)——Hello,WPF!

WPF笔记(1.1 WPF基础)——Hello,WPF! 原文:WPF笔记(1.1 WPF基础)——Hello,WPF!Example 1-1. Minimal C# WPF application//MyApp.csusingSystem;usingSystem.Windows; //the root WPF namespacenamespaceMyFirstAvalonApp { cla…

c#入门系列——类和对象的代码实现

面向对象 说起面向对象,大家因该都听说过,也知道是一个编程的方法,简称oop技术。它将对象的算法和数据结构看作一个整体,而一个程序就是由多个对象结合的整体。这样做可以提高代码的复用率,提高了软件的可维护性。 属性…

安卓TCP通信版本2

PC做服务器,安卓做客户端。 安卓获取输入框的内容并发送,然后等待接收服务器的消息 服务器先行开启,接收到客户端的数据,然后回复消息。 实现了对线程类的封装,通过按钮启动线程发送并接收 服务器代码(java…

简述WebService的使用(一)

环境: vs版本:vs2013 windows版本:win7 IIS版本:IIS7.0 (如果觉得对您有用,请点击右下角【推荐】一下,让更多人看到,谢谢) 配置环境: 主要针对于IIS 首先&…

透过WinDBG的视角看String

摘要 : 最近在博客园里面看到有人在讨论 C# String的一些特性. 大部分情况下是从CODING的角度来讨论String. 本人觉得非常好奇, 在运行时态, String是如何与这些特性联系上的. 本文将侧重在通过WinDBG来观察String在进程内的布局, 以此来解释C# String的一些特性. 问题 C# Stri…

ueditor富文本编辑器 修改框宽度和高度的方法

在使用ueditor的时候&#xff0c;用的textarea <textarea name"content" id"myEditor">这里写这条规则的回复内容</textarea> 给它加style"width:300" 属性的时候&#xff0c;发现不起作用。 正确的方法应该是&#xff1a; <scri…

Win32ASM学习[9]: 标志寄存器

TF(Trap Flag)——位8&#xff0c;跟踪标志。置1 则开启单步执行调试模式&#xff0c;置0 则关闭。在单步执行模式下&#xff0c;处理器在每条指令后产生一个调试异常&#xff0c;这样在每条指令执行后都可以查看执行程序的状态。如果程序用POPF、POPFD 或者ET 指令设置TF 标志…

JavaScript消息框

1.警告框 function myTest(){alert("这里的内容会弹出");} 2.确认框 其返回的值是 true 或 false 。 function myTest(){confirm("这里的内容会弹出");} 3.提示框 prompt prompt(参数1&#xff0c;参数2)&#xff1a;其参数1 是显示提示要输入的信息&…

.Net 事务

在分布式应用程序中&#xff0c;不可避免地会经常使用到事务控制。事务有一个开头和一个结尾&#xff0c;它们指定了事务的边界&#xff0c;事务在其边界之内可以跨越进程和计算机。事务边界内的所有资源都参与同一个事务。要维护事务边界内资源间的一致性&#xff0c;事务必须…

Android WifiDisplay分析一:相关Service的启动

网址&#xff1a;http://www.2cto.com/kf/201404/290996.html 最近在学习Android 4.4上面的WifiDisplay(Miracast)相关的模块&#xff0c;这里先从WifiDisplay用到的各个Service讲起&#xff0c;然后再从WifiDisplaySettings里面讲解打开wfd的流程。首先看下面的主要几个Servic…

Cortex-A15 Memory Hierarchy

ARM 平台为实现速度和成本的平衡&#xff0c;使用多个层次的内存架构。对于多核 CPU 组成的 SOC&#xff0c;每个CPU 内部都有一组高速缓存&#xff0c;包含&#xff1a;ICache、DCache 和 TLB。多个 CPU 共享一个更大的 L2 缓存。L2缓存再和 CPU 外部的DDR3 内存交互。ICache …

Android 图片的缩略图

<1>简介 之前往往是通过Bitmap、Drawable和Canvas配合完成&#xff0c;需要写一系列繁杂的逻辑去缩小原有图片&#xff0c;从而得到缩略图。 现在我给大家介绍一种比较简单的方法&#xff1a;&#xff08;网上有&#xff09; 在Android 2.2版本中&#xff0c;新增了一个T…

《JavaScript权威指南》学习笔记 第二天 下好一盘大棋

前段学习js的时候总是零零散散的&#xff0c;以至于很多东西都模棱两可。时间稍微一久&#xff0c;就容易忘记。最主要的原因是这些东西&#xff0c;原来学的时候就不是太懂&#xff0c;以至于和其他知识无法形成记忆链&#xff0c;所以孤零零的知识特别容易忘记。重温犀牛书&a…

SUID或SGID程序中能不能用system函数

system()函数的声明和说明如下&#xff1a; 注意它的描述那里&#xff0c;system()执行一个由command参数定义的命令&#xff0c;通过调用/bin/sh -c命令来实现这个功能。也就是说它的逻辑是这样的&#xff01; 进程调用system函数&#xff0c;system函数调用fork创建一个子进程…

Xamarin iOS编写第一个应用程序创建工程

Xamarin iOS编写第一个应用程序创建工程 在Xcode以及Xamarin安装好后&#xff0c;就可以在Xamarin Studio中编写程序了。本节将主要讲解在Xamarin Studio中如何进行工程的创建以及编写代码等内容XamariniOS编写第一个应用程序创建工程本文选自Xamarin iOS开发实战大学霸。 1.3.…

Birt使用总结

把report放到其他服务器要重新建立Data Source ,这是配置&#xff0c;拷贝项目时不会同时拷贝 (1)在EXTJs中利用Report实现报表的刷新 Ext.getCmp("showview").body.update("<iframe idshowviewframe src" "> </iframe>"…

【线性代数公开课MIT Linear Algebra】 第二十三课 微分方程与exp(At)

本系列笔记为方便日后自己查阅而写&#xff0c;更多的是个人见解&#xff0c;也算一种学习的复习与总结&#xff0c;望善始善终吧~ 一阶常系数微分方程 Aududt 将一阶常系数微分方程转换为线性代数问题的关键在于常系数微分方程的解一定是指数形式的。那么我们的需要求解的东西…

iOS学习之基本概念

学习iOS最重要的是态度和兴趣&#xff0c;如果你对于学习始终抱有不断的热情和端正的态度&#xff0c;那么&#xff0c;无论是什么&#xff0c;你总会成功的&#xff01; 有一句话与大家共勉&#xff1a;过程中跌倒多少次都没有关系&#xff0c;重要的是&#xff0c;跌倒后你能…

【转】gvim配置及相关插件安装

0.准备软件及插件。(a)gvim72.exe 地址ftp://ftp.vim.org/pub/vim/pc/gvim72.exe。(b)vimcdoc-1.7.0-setup.exe 地址http://prdownloads.sourceforge.net/vimcdoc/vimcdoc-1.7.0-setup.exe?download(c)ec57w32.zip 地址http://prdownloads.sourceforge.net/ctags/ec57w32.zip(…

Android 高级编程 RecyclerView 控件的使用

RecyclerView 是Android 新添加的一个用来取代ListView的控件&#xff0c;它的灵活性与可替代性比listview更好。 看一下继承关系&#xff1a; ava.lang.Object ↳android.view.View ↳android.view.ViewGroup ↳android.support.v7.widget.RecyclerViewKnown Direct …