【★】交换层网关协议大总结!

网关冗余与负载分担

读这篇文档之前,请读者先理清有关的专业术语和名词,尤其其中的同义词和并列词。

还要知道,人们之所以把计算机中的一些非常简单的逻辑复杂化,形成一个难以理解的协议,是由于“电脑实在没人脑聪明”,cpu对逻辑语言的计算能力实在有限,所以只能把一个简单逻辑拆分成更多更简单的逻辑让计算机识别。

网关的概念在企业网中有多种含义,本章主要探索交换层(本地接入网)的网关。

首跳冗余性协议FHRPfirst hop redundancy protocols)包括:

1.热备份路由器协议HSRPhot standby router protocol)。

2.虚拟路由冗余协议VRRP(virtual router redundancy protocol)

3.网关负载均衡协议GLBPgateway load balancing protocol)。

它们是工作在接入层与汇聚层(交换与路由)之间的网关路由器或多层交换机上的网关协议。其中HSRPVRRP的功能机制基本相同但只能实现网关备份,GLBP既能备份网关又能均衡负载(充分利用资源)。

先给大家普及一下需要用到的底层知识:

一般来说,一个网段就是一个子网(即使某一主类网没划分子网,它也可以看成是一子网网段)。一般一个子网内有以下设备:若干个主机,若干个二层交换机,若干个网关(它们是分层的,即交换机连接主机和网关)。可以看出,一个子网网络属于交换层,在子网中流量是通过mac地址来“寻路”的(子网内的主机之间通讯前通过发送arp广播来获取对方mac),其中交换机帮助转发流量。当主机想要与子网外的PC或服务器通讯,它不需要知道对方的mac,只要知道该子网的网关mac(由arp获得)就行,将信息流量发给网关,剩下的事情交给网关解决就行(路由到其他子网)。所以一台主机刚开始需要知道自身ip地址,对方电脑ip地址以及网关ip地址这三个基本信息才能正常通讯。

然后暂且先附上一张关于三个协议的表格(方便之后返回查看):

HSRP

VRRP(模仿HSRP

GLBP

思科私有RFC2281

IEEE标准RFC3768

思科私有

UDP1985

IP协议112(端口号)

UDP3222

224.0.0.2

224.0.0.18(通告地址)

224.0.0.102

每组通常2台网关

最多16个网关

最多4个网关

最多16组?

最多255组(每个路由器)

最多1024

0000.0c07.acXX

0000.5e00.01XX(虚拟mac

0007.b4XX.XXYY

1个活跃和备份(其余候选)

1个主用,若干备用

1AVG若干AVF

一个ip一个mac

一个ip一个mac

一个ip多个mac

虚拟ip与接口ip不同

虚拟ip可与接口ip相同

虚拟ip与真接口ip不同

可追踪接口或对象

只可追踪对象

只可追踪对象

默认hello 3shold 10s

默认hello 1s,有skew时间

默认hello 3shold 10s

明文认证

/密文认证

明文认证

好了,先来聊聊HSRPVRRP。理想化的情况下子网中有一台路由器充当网关,它的一个接口的ip充当网关ip。为了防止单点故障,子网中又添加了几个备用网关(处于闲置状态)。为了使故障发生后其中一个备用网关能够自动切换成主用(活跃)网关,才诞生了这两个网关冗余协议。

因为站在子网内的主机的角度,子网内只能存在一个网关,不然流量就不知道该发向哪一个网关了(不知为什么,交换层不能自动负载均衡,必须选出唯一的路径,而路由表中只要ADmetric相同就会出现负载均衡)(优先级相同就比较接口ip)。所以这个冗余机制的基本思想是:将多个路由器组合成一个虚拟网关(一个备份组),它有一个虚拟ip和一个虚拟mac。子网内的主机们只知道有一个(虚拟)网关的存在,并不知情真实网关的情况。而所有通往子网外的流量只经过这个组中的某一个路由器(竞选选出)。其余备份网关处于不工作状态但一直监听active/master的工作状态,在必要时刻替代它的角色。

HSRPVRRP的三个重要区别:

一:HSRP组内通常只放2台网关,一台active一台standby,若不止两台,再添入的网关都保持在初始状态(可以给备份做备份,但客户难以接受);VRRP中却有一台master和若干个backup

二:备份组正常运行时activestandby之间默认间隔3秒相互发送hello包(包含:active信息,standby信息,自身信息,认证口令,时间参数等信息)(有点类似BPDU)(组播地址映射mac地址)以维护组内关系,而master默认间隔一秒向外发送hello包,backup只接收不发送。

三:standby的默认holdtime3*3+1=10秒(可手动改),backup的默认holdtime=3*1+skew)秒,其中skew=256-priority/256(取值范围01,与优先级反比)。!!注意,此区别与前两个区别有重要联系,以为HSRP组中只有一台standbyholdtime到期后自觉上任,但VRRP组中有多个backupholdtime到期后并不要竞选出某一个去上任,因为优先级最大的backupholdtime最小!

此外HSRP默认关闭抢占而VRRP默认开启,所谓的的抢占机制就是确保备份组中优先级最大的网关成为active/master(前提是网关连接子网的接口没有出错,即可以向其他网关发送hello包)。在非抢占情况下备份网关收到active/masterhello包中更大的优先级也不会去抢占它。给一副拓扑图:

【★】交换层网关协议大总结!



该图也适用于glbp。接下来实现网关备份的具体过程:

若这些PCip都在同一个子网内,那给这个子网分配一个网关备份组(组编号)将若干路由器(不同协议有数量限制)加入到这个组中给这个组分配唯一的一个虚拟ip(即该子网内随便一个主机号),系统给这个组自动分配一个虚拟mac(注:虚拟ip可以与路由器接口真实ip在同一子网,也可以是接口真实ip所在子网下再划分的子网的主机号~)。将每台PC的网关ip都手动设置成这个虚拟ip(因为在交换层“寻路”都是通过mac地址,PC解析这个ip时,备份组回复给它虚拟mac值,同时备份组告诉交换机这个虚拟mac指向active/master)(!!!二层交换机“寻路”依靠mac地址表中的三个条目:PCmac,网关接口mac,邻居交换机接口mac),由此PC向外通讯都将数据帧中目的mac字段值写为该虚拟mac

    Active/master有两种情况被取代。第一种情况:因备份网关的holdtime到期后接任;第二种情况:Active/master所追踪的对象“挂了”导致自降优先级至小于某台开启了抢占的备份机,于是被抢占。

    当然,这幅物理拓扑图可以按组划分为多幅逻辑图,即有多个子网多个备份组,一台PC只能加入一个组但一个网关可以加入到多个组中。!注:若网关是多层交换机则可以使用SVIswitch virtual interface),为每个vlan安排一个备份组,在SVI下设置ip

!!补充实验:

问题描述:子网内只有一个多层交换机充当网关,要实现网关的链路冗余,即使用EC将连接多层交换机的两个接口捆绑在一起(路由器貌似做不到)。拓扑图:

【★】交换层网关协议大总结!

这是用Packet Tracer模拟实验的截图,可以看出,子网中只有vlan1但出现了“环路”,其实是因为EC逃避了stp计算(注:EC只能在交换网中玩儿)。

GLBPGLBP除了提供冗余还可以让组中所有成员共同承担流量的转发。它的具体思想如下:

前期与HSRP一样,将多个物理网关加入到一个备份组中。组中的成员都叫AVFactive virtual forwarder)(顾名思义,所有AVF都负责转发数据),其中某一个AVF还叫做AVGactive virtual gateway)(竞选而来)。该组有一个虚拟ip但有多个虚拟mac地址:AVG给每个AVF分配一个虚拟mac。当备份组对应的子网内的某个PC解析虚拟ip时,AVG返回其中的一个虚拟mac

这里有一个简单易懂的循环负载分担算法:当收到一个个PC发来的arp时,AVG在自己的虚拟mac列表中按顺序循环的分发这些地址给PC,以保证每个AVF所负责的PC数量相同(或相差不超过一台)。

其实用HSRPVRRP也能实现负载分担,方法是:将多个物理网关共同加入到多个组,每个组虚拟ip都属于同一个子网,物理网关在不同组有不同角色,为每个PC分配不同的网关ip(其实一个子网可以有多个网关,关键看给PC设置的网关ip,但一个PC只能有一个对应网关)。但这个方法配置工作量很大,因此才出现了GLBP

!!!补充知识:

【1】      FHRP的配置都是在接口下(除了多层交换机的svi)。网关因此知道,这个接口连接的是该接口ip所在的子网。

【2】      FHRP的认证机制是为了防止恶意网关加入到某个备份组中。和动态路由协议的认证原理相同,都是相互hello时自动进行的。

【3】      当某vlan生成树的根桥与该vlan热备份组的active/master不是同一台多层交换机时,可能会产生次优路径(同理于没有备份组只有唯一网关的子网)。

【4】      数据流量从互联网回来的时候,可能从active/master走也可能从备份网关走(假如它们都将子网宣告进路由协议)。

    以上就是FHRP机制原理详解。若发现遗漏或错误之处,还请自行纠正。欲求更多信息请登录思科官网查询。(www.cisco.com

上一篇:Spring中bean的scope


下一篇:使用VS2010编译OpenSSL的过程记录