HSRP的工作原理和在企业网络中的应用

一、HSRP的简介


SHRP即热备份路由协议,它主要是向我们提供了这样一种机制,它的设计目的主要在于支持IP协议传输失败情况下的不中断服务,保证了网络的高可用性。具体说,就是本协议用于在源主机无法动态地学习到首跳路由器IP地址的情况下防止首跳路由的失败。它主要用于多接入,多播和广播局域网(例如以太网)。


二、HSRP的工作原理


HSRP协议利用一个优先级方案来决定哪个配置了HSRP协议的路由器成为默认的主动路由器。如果一个路由器的优先级设置的比所有其他路由器的优先级高,则该路由器成为主动路由器。路由器的默认缺省优先级是100,所以如果只设置一个路由器的优先级高于100,则该路由器将成为主动路由器。


通过在设置了HSRP协议的路由器之间广播HSRP优先级,HSRP协议选出当前的主动路由器。当在预先设定的一段时间内主动路由器不能发送hello消息时,优先级最高的备用路由器变为主动路由器。路由器之间的包传输对网络上的所有主机来说都是透明的。  

配置了HSRP协议的路由器交换以下三种多点广播消息:

Hello———hello消息通知其他路由器发送路由器的HSRP优先级和状态信息,HSRP路由器默认为每3秒钟发送一个hello消息;  

coup———当一个备用路由器变为一个主动路由器时发送一个coup消息;

Resign———当主动路由器要宕机或者当有优先级更高的路由器发送hello消息时,主动路由器发送一个resign消息。在任一时刻,配置了HSRP协议的路由器都将处于以下六种状态之一:


Initial———HSRP启动时的状态,HSRP还没有运行,一般是在改变配置或端口刚刚启动时进入该状态。   

learn———路由器已经得到了虚拟IP地址,但是它既不是活动路由器也不是等待路由器。它一直监听从活动路由器和等待路由器发来的HELLO报文。

Listen———路由器正在监听hello消息。

Speak———在该状态下,路由器定期发送HELLO报文,并且积极参加活动路由器或等待路由器的竞选。


Standby———当主动路由器失效时路由器准备接管包传输功能。

Active———路由器执行包传输功能,即路由器处于激活状态。


三、应用案例


1、案例1


(1)实施环境:思科小凡模拟器


(2)要求:


现有一网络,网络中有两个VLAN,两个VLAN通过路由器进行通信工作,现要求要实现网络的高可用性,必须保证在一个路由器损坏的情况下还能工作,并且在使用两个路由器工作时必须保证路由器的利用效率。


(3)网络拓扑图:


根据网络要求使用绘图工具绘制出网络拓扑图,如图1所示:

wKiom1Nqad7yC8EuAAHzRtDND34292.jpg

1:网络拓扑图

(4)设备实施:


1)路由器R1的配置:

//进入特权模式

Router>enable

//进入用户模式

Router#config t

Router(config)#hos

//修改名称

Router(config)#hostname R1

R1(config)#int f0/0

//启动接口

R1(config-if)#no shut

R1(config-if)#exit

R1(config)#int f0/0.1

R1(config-subif)#encapsulation d

//把子接口封装为dot1Q类型

R1(config-subif)#encapsulation dot1Q 10

//配置IP地址

R1(config-subif)#ip add 192.168.10.1 255.255.255.0

R1(config-subif)#exit

//进入子接口

R1(config)#int f0/0.2

R1(config-subif)#en

R1(config-subif)#encapsulation d

//把字节口封装为dot1Q

R1(config-subif)#encapsulation dot1Q 20

R1(config-subif)#ip add 192.168.20.1 255.255.255.0

//配置HSRP协议

R1(config)#int f0/0.1

R1(config-subif)#st

R1(config-subif)#standby ?

//把加入热备份组号10以及备份虚拟IP

R1(config-subif)#standby 10 ip 192.168.10.254

R1(config-subif)#standby pri

//配置优先级(优先级之越大越优先,默认100)

R1(config-subif)#standby priority 120

//启动立即抢占

R1(config-subif)#standby pre

R1(config-subif)#standby preempt

R1(config)#int f0/0.2

R1(config-subif)#standby

//把加入热备份组号20以及备份虚拟IP

R1(config-subif)#standby 20 ip 192.168.20.254

R1(config-subif)#standby 20 pri

//配置优先级(优先级之越大越优先,默认100)

R1(config-subif)#standby 20 priority 100

R1(config-subif)#standby pre

//启动立即抢占

R1(config-subif)#standby preempt

2)路由器R2的配置:

Router>enable

Router#config t

//修改名称

Router(config)#hostname R2

R2(config)#int f0/0

//启动接口

R2(config-if)#no shut

R2(config-if)#exit

//进入子接口

R2(config)#int f0/0.1

R2(config-subif)#encapsulation d

//把接口封装为dot1Q类型VLAN 10

R2(config-subif)#encapsulation dot1Q 10

R2(config-subif)#ip add 192.168.10.2 255.255.255.0

R2(config-subif)#exit

//进入子接口

R2(config)#int f0/0.2

//把接口封装为dot1Q类型VLAN 20

R2(config-subif)#encapsulation dot1Q 20

R2(config-subif)#ip add 192.168.20.2 255.255.255.0

R2(config)#int f0/0.1

R2(config-subif)#stan

//把加入热备份组号10以及备份虚拟IP

R2(config-subif)#standby 10 ip 192.168.10.254

R2(config-subif)#stan

R2(config-subif)#standby 10 pri

//配置优先级(优先级之越大越优先,默认100)

R2(config-subif)#standby 10 priority 100

R2(config-subif)#stan

R2(config-subif)#standby 10 pre

//启动立即抢占

R2(config-subif)#standby 10 preempt

R2(config-subif)#exit

R2(config)#int f

//进入子接口

R2(config)#int f0/0.2

R2(config-subif)#sstan

R2(config-subif)#stan

//把加入热备份组号10以及备份虚拟IP

R2(config-subif)#standby 20 ip 192.168.20.254

R2(config-subif)#stan

R2(config-subif)#standby 20 pri

//配置优先级(优先级之越大越优先,默认100)

R2(config-subif)#standby 20 priority 120

R2(config-subif)#sta

R2(config-subif)#standby 20 pre

//启动立即抢占

R2(config-subif)#standby 20 preempt


3)交换机S1的配置:

Router>ena

Router#config t

Enter configuration commands, one per line.  End with CNTL/Z.

Router(config)#hos

//修改名称

Router(config)#hostname S1

S1(config)#exit

S1#vlan database

//创建VLAN10

S1(vlan)#VLAN 10

VLAN 10 added:

Name: VLAN0010

//创建VLAN10

S1(vlan)#VLAN 20

VLAN 20 added:

   Name: VLAN0020

S1(vlan)#exit

S1#config t

//进入接口

S1(config)#int f0/0

//把接口设为trunk类型

S1(config-if)#switchport mode trunk

//trunk下允许所有VLAN通过

S1(config-if)#switchport trunk allowed vlan all

S1(config-if)#exit

S1(config)#int f0/1

S1(config-if)#switchport mode tr

//把接口设为trunk类型

S1(config-if)#switchport mode trunk

//trunk下允许所有VLAN通过

S1(config-if)#switchport trunk allowed vlan all

S1(config-if)#exit

S1(config)#int f0/2

S1(config-if)#switchport mode tr

//把接口设为trunk类型

S1(config-if)#switchport mode trunk

//trunk下允许所有VLAN通过

S1(config-if)#switchport trunk allowed vlan all

S1(config)#int f0/10

S1(config-if)#sw

S1(config-if)#switchport acc

//允许VLAN 10通过

S1(config-if)#switchport access vlan 10

S1(config-if)#exit

S1(config)#int f0/20

S1(config)#int f0/15

S1(config-if)#switchport access vlan 20


4)交换机S2的配置:

Router>ena

Router#config t

Router(config)#host

//修改名称

Router(config)#hostname S2

S2(config)#exit

S2#vlan data

S2#vlan database

//创建VLAN 10

S2(vlan)#vlan 10

VLAN 10 added:

Name: VLAN0010

     //创建VLAN 20

S2(vlan)#vlan 20

VLAN 20 added:

Name: VLAN0020

     S2#config t

S2(vlan)#exit

//进入接口

S2(config)#int f0/0

S2(config-if)#switchport mode tr

//把接口设为trunk类型

S2(config-if)#switchport mode trunk

S2(config-if)#exit

S2(config)#int f0/1

S2(config-if)#switchport mode tr

//把接口设为trunk类型

S2(config-if)#switchport mode trunk

//在trunk下允许所有VLAN通过

S2(config-if)#switchport trunk allowed vlan all

S2(config-if)#int f0/2

S2(config-if)#switchport mode tr

S2(config-if)#switchport mode trunk

S2(config-if)#switchport trunk allowed vlan all

S2(config-if)#exit

S2(config)#int f0/10

S2(config-if)#switchport ac

S2(config-if)#switchport access vlan 10

S2(config-if)#int f0/15

//把接口设为允许VLAN20通过

S2(config-if)#switchport acce

S2(config-if)#switchport access vlan 20


(5)测试验证:

1)查看R1上的HSRP协议:

在R1上查看HSRP协议如下图所示:

wKiom1NqahqyWJxrAAY4LUJ7xdI016.jpg

2)PC1 ping PC4

wKioL1NqagOB0HbDAAC6UK_kgnM026.jpg

3)断开R2的接口,即R2损坏后查看R1上的HSRP协议

wKiom1NqajrB31tmAAab2dgez_g182.jpg


2、案例2


(1)实施环境:思科小凡模拟器


(2)要求:


   现有一网络,网络中有两个VLAN,两个VLAN通过路由器进行通信工作,现在要求要实现网络的高可用性,必须保证在一个路由器损坏的情况下还能工作,并且在使用两个路由器工作时必须保证路由器的高效利用效率,并且要求两个VLAN的主机可以访问到Internet。


(3)网络拓扑图:


根据网络要求使用绘图工具绘制出网络拓扑图,如图2所示:

wKioL1Nqaj7DEE5ZAAJ0LbjXm0I244.jpg

2:网络拓扑图


(4)设备的配置:


1)路由器R1的配置:

//进入特权模式

Router>enable

//进入用户模式

Router#config t

Router(config)#hos

//修改名称

Router(config)#hostname R1

R1(config)#int s1/0

//配置IP地址

R1(config-if)#ip add 192.168.1.1 255.255.255.0

R1(config-if)#no shut

R1(config-if)#exit

R1(config)#int f0/0

R1(config-if)#no shut

R1(config-if)#exit

//进入子接口

R1(config)#int f0/0.1

R1(config-subif)#en

R1(config-subif)#encapsulation d

//把接口封装为dot1Q VLAN10

R1(config-subif)#encapsulation dot1Q 10

//配置IP地址

R1(config-subif)#ip add 192.168.10.1 255.255.255.0

R1(config-subif)#exit

R1(config)#int f0/0.2

//把接口封装为dot1Q VLAN10

R1(config-subif)#encapsulation d

R1(config-subif)#encapsulation dot1Q 20

//配置IP地址

R1(config-subif)#ip add 192.168.20.1 255.255.255.0

//配置HSRP协议

R1(config)#int f0/0.1

R1(config-subif)#st

R1(config-subif)#standby ?

//把加入热备份组号10以及备份虚拟IP

R1(config-subif)#standby 10 ip 192.168.10.254

R1(config-subif)#standby pri

//配置优先级(优先级之越大越优先,默认100)

R1(config-subif)#standby priority 120

//启动立即抢占

R1(config-subif)#standby pre

R1(config-subif)#standby preempt

//配置跟踪接口,当接口中断时优先级减小30

R1(config-subif)#standby 10 track s1/0 30

R1(config)#int f0/0.2

R1(config-subif)#standby

R1(config-subif)#standby 20 ip ?

//把加入热备份组号10以及备份虚拟IP

R1(config-subif)#standby 20 ip 192.168.20.254

R1(config-subif)#standby 20 pri

//配置优先级(优先级之越大越优先,默认100)

R1(config-subif)#standby 20 priority 100

R1(config-subif)#standby pre

//启动立即抢占

R1(config-subif)#standby preempt

//配置默认路由

R1(config)#ip route 0.0.0.0 0.0.0.0 192.168.1.1

//配置访问控制列表

R1(config)#access-list 10 permit 192.168.10.0 255.255.255.0  

R1(config)#access-list 10 permit 192.168.20.0 255.255.255.0

R1(config)#int f0/0.1

R1(config-subif)#ip nat in

//在接口上配置允许nat进入

R1(config-subif)#ip nat inside

R1(config-subif)#int f0/0.2

//在接口上配置允许nat进入

R1(config-subif)#ip nat in

R1(config-subif)#ip nat inside

R1(config-subif)#int s1/0

R1(config-if)#ip nat out

//在接口上应用nat

R1(config-if)#ip nat outside

R1(config)#ip nat source list 10 int

R1(config)#ip nat source list 10 interface s1/0

2)路由器R2的配置:

Router>enable

Router#config t

//修改名称

Router(config)#hostname R2

R2(config)#int s1/1

//配置IP地址

R2(config-if)#ip add 192.168.2.1 255.255.255.0

R2(config-if)#no shut

R2(config-if)#exit

R2(config)#int f0/0

//启动接口

R2(config-if)#no shut

R2(config-if)#exit

//进入子接口

R2(config)#int f0/0.1

R2(config-subif)#encapsulation d

//把接口封装为dot1Q类型VLAN 10

R2(config-subif)#encapsulation dot1Q 10

R2(config-subif)#ip add 192.168.10.2 255.255.255.0

R2(config-subif)#exit

//进入子接口

R2(config)#int f0/0.2

//把接口封装为dot1Q类型VLAN 20

R2(config-subif)#encapsulation dot1Q 20

R2(config-subif)#ip add 192.168.20.2 255.255.255.0

R2(config)#int f0/0.1

R2(config-subif)#stan

//把加入热备份组号10以及备份虚拟IP

R2(config-subif)#standby 10 ip 192.168.10.254

R2(config-subif)#stan

R2(config-subif)#standby 10 pri

//配置优先级(优先级之越大越优先,默认100)

R2(config-subif)#standby 10 priority 100

R2(config-subif)#stan

R2(config-subif)#standby 10 pre

//启动立即抢占

R2(config-subif)#standby 10 preempt

R2(config-subif)#exit

R2(config)#int f

//进入子接口

R2(config)#int f0/0.2

R2(config-subif)#sstan

R2(config-subif)#stan

//把加入热备份组号10以及备份虚拟IP

R2(config-subif)#standby 20 ip 192.168.20.254

R2(config-subif)#stan

R2(config-subif)#standby 20 pri

//配置优先级(优先级之越大越优先,默认100)

R2(config-subif)#standby 20 priority 120

R2(config-subif)#sta

R2(config-subif)#standby 20 pre

//启动立即抢占

R2(config-subif)#standby 20 preempt

//配置默认路由

R2(config)#ip route 0.0.0.0 0.0.0.0 192.168.2.1

//配置接口跟踪当接口出现故障时优先级减小30

R2(config-subif)#standby 20 track s1/1 30

//配置访问控制列表20允许所有通过

R2(config)#access-list 20 permit any

R2(config)#int f0/0.1

//在接口下设置nat进入

R2(config-subif)#ip nat ins

R2(config-subif)#ip nat inside

R2(config-subif)#int f0/0.2

R2(config-subif)#ip nat in

//在接口下设置nat进入

R2(config-subif)#ip nat inside

R2(config-subif)#int s1/1

R2(config-if)#ip na

//在接口下设置nat出入

R2(config-if)#ip nat ou

R2(config-if)#ip nat outside

//配置动态nat

R2(config)#ip nat source list 20 interface s1/1

3)路由器R3的配置:

Router>ena

Router#conf t

//修改名称

Router(config)#hostname R3

R3(config)#int s1/0

R3config-if)#ip add

//配置IP地址

R3(config-if)#ip address 192.168.1.1 255.255.255.0

//打开接口

R3(config-if)#no shut

R3(config-if)#exit

//进入接口

R3(config)#int s1/1

R3(config-if)#ip add

//配置IP地址

R3(config-if)#ip address 192.168.2.1 255.255.255.0

R3(config-if)#no shut

R3(config)#int loo

R3(config)#int loopback 0

R3(config-if)#ip add

R3(config-if)#ip address 1.1.1.1 255.255.255.0


(5)测试验证:

1)在PC1上ping1.1.1.1和路由跟踪,如下图:

wKiom1Nqa4fCs65fAAB8c_WvmHg253.jpg

wKioL1Nqa2ziAsl2AAA5JXcoRVA151.jpg

2)查看路由器R1的HSRP协议

wKioL1Nqa4vwCYdiAAZ2FHtkNpo772.jpg

3)断开R2的S1/1接口,查看R2的变化和R1的HSRP

R2(config-if)#shut

R2(config-if)#

*Mar  1 06:09:06.914: %HSRP-5-STATECHANGE: FastEthernet0/0.2 Grp 20 state Active -> Speak   //从这里可以看到S2的f0/0.2的接口有激活状态转变为Speek状态了。

路由器R1的HSRP变化如下图所示:

wKiom1Nqa8fzow_1AAZn-x7XsGU553.jpg

5)中断R2的S1/1接口后PC4ping1.1.1.1,如下图所示:

wKioL1Nqa6nAjnzFAADLpNjv2QY555.jpg