HSRP 工作机制


简介:HSRP 选举实验
目的:HSRP的选举过程 (Lab)。包括状态、时间、超时。
拓扑:两个路由器、一个交换机、一个主机。
过程:1) R1, R2 都认为这自己是Active, R2收到R1的Hello后,变成Speak,并启动Standby timer. .
      2)R1, R2周期性的方式Hello.
      3) 当R2的Standby timerr超时发生时,R2变成Standby,并发送Heelo.
      4) R1收到了R2的Hello, 知道了R2就是Standby.
一、配置HSRP路由器
要让R1参与HSRP选举,先配置其局域网接口 "Standby 1 ip 192.168.1.1",使得R1参加HSRP第一组。然后配置”Standby 1 priority 105“: 把R1的priority设为105 (R2没设, 默认是100)。这将导致R1被选为Active。

二、R2发送Hello: 我是Active
一开始,R2先发送一个Hello, 告诉其它的HSRP路由器:“R2是Active, priority是100。这个Hello的IP目的地址224.0.0.2是个多播地址 (All routers),用来通知网段上所有的路由器, 目的地址是01:00:5e:00:00:02, 是个多播Mac地址与 All routers IP多播地址相应。 当S1收到Hello,把它洪泛, 送往R1, H1。

三、R1发送Hello: 我是Active
R1发送Hello, 宣告:我是Active。S1收到R1的Hello,发现虚拟MAC的输入接口改了,就更新MAC表。
【注】Active路由器用虚拟 MAC来配置LInk报头的源地址。上一个Hello是R2发的,输入接口是F0/1, 这个Hello是R1发的,输入接口是F0/1。交换机得反应最新的虚拟MAC的输入接口位置。

四、R1收Hello, 发Coup: 竞选Active
R1收到R2的Hello时, 看到R2自称是Active,但priority比自己低, 就发送4个包: 1) Coup (R1宣称:我要当Active)。2) Hello 3) Arp回复广播包 (ff:ff:ff:ff:ff:ff),让交换机都更新MAC表,把虚拟MAC的接口指向R1。4) Arp回复组播包 (01:00:0c:cd:cd:cd) 通知生成树协议 (STP Uplink Fast )。
这四个包的 MAC源地址都是虚拟路由器的MAC,00:00:0c:07:ac:01。

五、R2发Resign:我不再竞选Active
在收到R1的Coup后,R2看到自己的priority比较低,就宣告落选,发送三个包:1) Adv, 2) Resign, 3) Hello. 告诉HSRP路由器: 我不竞选Active了。在发送Hello时也启动了Hello timer (3 秒)。

六、R1发Coup:竞选Active
收到R2的退选通知后,R1再发送四个包: Coup声明要竞选Active,Hello让别的路由器知道我是Active,ARP reply广播虚拟路由器的虚拟MAC的位置。

七、R2周期性的发送Hello:我是Speak
R2的Hello计时器超时,再发Hello. HSRP路由器周期性的发送Hello, 以保持沟通,知道彼此的状态变化。
方法是在路由器每次发送Hello时, 就启动Hello timer, 时限是三秒 (Hello timer的默认值), 相当于动画实验的15个tick。当Hello timerr超时,路由器就发送Hello.
例,R2上一个Hello是在tick 10所发 (与Resign 同时发送),过了15个tick, Hello timer逾时,就再发送Hello。

八、R1周期性的发Hello: 我是Active
R1在tick 14发送Hello时, 启动了为时3秒的Hello timer。在tick 29, Hello timer 超时,R1再发送一个Hello, 宣称:我是Active. (这个动画的tick是 0.2 秒,3秒等于15个tick。)

九、R2周期性的发送Hello:Speak
R2 的 Hello timer 超时, 再发送Hello。

十、R1周期性的发送Hello: 我是Active
过了3秒 (15个tick),Hello timer超时,R1再发送Hello.
R2周期性的发送Hello:Speak
R1周期性的发送Hello:Active
R1的Hello timer 超时,R1再发送Hello。
R2 Standby timerr超时,发Hello
在tick 10 R2退出Active选举变成Speak时,启动了Standby timer (10 秒)。到了tick 60, Standby timer超时,根据 HSRP的状态表,R2成为 Standby. 并发送 Hello, 宣称:我是Standby. (见附录:分析)
R1收到Hello: R2被选上Standby
R1收到R2的Hello, 宣称自己是Standby,更新R1的HSRP status table, 把Standby router从unknow变成R2 (192.168.1.3)
附录一: 分析
1. 地址
    -  虚拟IP地址: 外面的路由器和内部的主机只知道虚IP地址, 不用HSRP路本身的IP地址。
    - 虚拟Mac地址:交换机转发、主机传送只用虚拟Mac地址,它们不用HSRP路本身的Mac地址。
   - HSRP选举:HSRP路由器间的选举及路由协议所用的是HSRP路由器本身的地址,不是虚拟地址。
2. R2怎么从Active变成Speak?
    结合R2收到R1的Hello, 及HSRP协议标准RFC2281的状态表,外面可以做出以下分析:
     R2目前的状态是Active, 收到一个R1所发的Hello, 知道R1是Active, priority是105,比自己高。
     那么, 根据RFC2281的状态表,R2应把状态从Active改为Speak.
     参考: RFC2281 > 5.7 State Transitions > AB/4 (row g, colum 6 Active
                  RFC2281 > 5.5 Events > g
3. R2怎么从Speak变成Standby?
     - Tick 10, 当R2收到R1的Hello, 看到R1是Active,prioority也比自己大,就启动Standby timer,其值为10秒 (50 tick)。
        参考: RFC2281 > 5.6 Actions > B
     - Tick 60: 当R2 standby timer 超时,R2状态从Speak变成Standby. 这个动画的状态改变时间与RFC吻合。
        参考: RFC2281 > 5.7 State Transitions > D/5 (row d, colum 4- Speak
                     RFC2281 > 5.5 Events > d

4. R1是怎么知道R2变成Standby?
     在tick 64, R1收到R2所发的Hello, 其中状态是Standby. R1得知Standby就是R2.
附录二: Switching, Arp
HSRP结合了三种技术:
  - HSRP主要是选举。它用比较priority 及 timer 超时来改变状态,并不复杂。
  - 交换机也比较简单:它用数据包的Mac源地址来“发现”新Mac, 用Mac目的地址来转发。
  - Arp只有两种数据包:Arp request以广播方式来查询Mac, Arp reply告知所查询的Mac地址。
  HSRP可说是一个局网的应用,要得妥善的使用switching及Arp技术,HSRP就不那么简单了。

问一:为什么R1在发生Coup时,也发送Arp reply? 
问二:为什么Arp reply用广播地址0xffffff, 而不是递补地址?
问三:这个实验用了五个数据包,你能写出他们的IP 及Mac的目的地址、源地址吗?
            Hello, Coup, Resign, Arp reply, Ping.
问四:H1要ping H2. ping的Mac地址应该怎么配置?这和H2是否在同一局网有关系吗?

的默认网关是虚拟路由器(IP 192.168.1.1),
简介:HSRP选举。
1)网关down掉怎么办?
问题:若网关坏了,局网中的主机、服务器对外通讯中断,得几小时才能修复,影响很大。
解决方案:用一个虚拟路由器 (virtual router) 作为网关,从几个路由器中选出一个Active, 一个Standby 。Active 
    路由器代表虚拟路由器,处理路由器的具体工作。当Active出问题,Standby马上取代,通讯中断在数秒后恢复。
什么是HSRP? Hot Standby Router Protocol是Cisco为解决网关中断问题的协议。协议招标是RFC2281.

2)动画简介
      动画所用的数据是采集实验中路由器发送的数据包、监听路由器状态改变而来的。动画把HSRP实验过程中的数据包、状态改变可视化。例: 
    - 用动画表达数据包 (Hello, Coup, Resign, Arp reply)。使得动画与抓包根据相结合。
   - 用状态表显示HSRP状态改变 (Active, Standby, Speak)。使得动画与路由器状态演变相结合。
   - 用命令行表现路由器运行时所使用的配置、Show命令,使得动画与路由器命令行相结合。
  - HSRP包括以下动画:
    1.HSRP basic: 是手工编辑,突出HSRP协议的重点,略过一些细节,使初学者能较快的得到整体了解。
    2. HSRP election (这个动画). 用路由器上采集的数据来说明选举过程。
    3. HSRP link down: 用路由器上采集的数据来说明断线处理。

3)实验简介
实验目的: 把HSRP选举Active, Standby的过程可视化。用户可以看到命令行、数据包、事件、状态间的互动关系。
拓扑:两个路由器 (R1, R2), 两个主机 (H1, H2), 一个交换机 (S1)。
 - R1, R2是HSRP选举候选人, 经交换机S1相连。它们都有连线接到外面的网络云层。
      - 交换机S1连线到R1, R2, H1,是局网主机和网关间的必经之路, 其Mac表记录虚拟路由器的Mac地址。
     - 主机H1位于局网之内,H2位于云层之后,它们经相连路由器相连。   
 实验环境:
 - 用Dynamips模拟Cisco 3620路由器,3640交换机。捕捉的数据包,用Pacp保存。
    - 运行时,监听路由器状态。
实验过程: 整个过程可分为以下阶段:
   第一步:一开始R1, R2都自认为是Active, 发送Hello。(tick 0)
   第二步: 收到Hello后,重新定位。R1继续竞选Active, 发Coup。R2变成Speak, 发送Resign退选。(tick 8)
   第三步:Hello timer超时事件每3秒发生一次,R2周期性的发送Hello. (tick 25~59,)
   第四步:Standby timer 超时事件发生,R2变成Standby. ( tick 60)
   第五步:分析。用HSRP RFC2281的状态表,结合实验数据,解读这个实验中 R1, R2所发生的状态改变。

4. 知识点
 HSRP知识点:
   - Virtual router (虚拟路由器):这是一个逻辑路由器,扮演网关的角色。具体工作由Active router处理。
   - Virtual IP addrss。 这是虚拟路由器的IP地址,局网内的主机、外面的路由器只和这个IP地址打交道。
   - Virtail mac address。这是虚拟路由器的Mac地址,局网内的主机、交换机用这个地址作为物理目的地址。。
   - Priroity.  HSRP选举根据priority大小而定,若priority相同,则比较router id (路由器的ip地址)。 
   - Active router。HSRP路由器中priority最高的被选为Actyive, 处理虚拟路由器的工作。.
   - Standby router。HSRP路由器中priority第二高的被选为Standby, 当Active出问题,它马上递补,成为Active。.
  - Speak router。一个路由器既不是Active,也不是 Standby, 它参与选举,但是个老百姓。。
  - Hello timer。HSRP 路由器发送Hello的频率。默认值3秒。
   - Hold timer。Hello的有效期。若Active过时没有发送新的Hello,  它可能下线了。默认值10秒。
   - 如何用 Arp reply 广播来让交换机发现Active的改变,更新Mac表, 。
相关知识点:
    - 交换机转发、Mac表。
    - Arp reply (Arp回复)
    - Default gateway (默认网关) 
参考:HSRP., Wikipedia  http://en.wikipedia.org/wiki/Hot_Standby_Router_Protocol
           HSRP RFC2881. http://www.faqs.org/rfcs/rfc2281.html
            Multicastaddress, Wikipediahttp://en.wikipedia.org/wiki/Multicast_address
           IP multicast: IP to Mac multicast address translation. http://www.rhyshaden.com/multicas.htm
附录三:HSRP路由器配置命令行
R1(config)#interface eth0/0                          ;R1的E0/0接口运行HSRP.
R1(config-if)#standby 1 ip 192.168.1.1      ;R1在HSRP 第一组,这组的虚拟路由器IP地址是192.168.1.1.
R1(config-if)#standby 1 priority 105             ;R1的priority是105
R1(config-if)#standby 1 preempt                  ;若发现自己的priority比Active高,立即反应,要求替代现任Actove
R1#

R2(config)#interface eth0/0                          ;R2的E0/0接口运行HSRP.
R2(config-if)#standby 1 ip 192.168.1.1        ;R2在HSRP 第一组
R2#

posted @ 2020-04-03 10:55  cyrusxx  阅读(306)  评论(0编辑  收藏  举报