飞翔飞翔
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
  • 数据库

    • SQL教程
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
  • 数据库

    • SQL教程
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
  • 学习路径
  • IP协议

    • 认识 IP 协议与网络层定位
    • IPv4 编址体系与分类地址
    • CIDR 与子网划分实战
    • IPv6 编址体系
    • ARP 协议详解
    • NDP 协议详解
    • IGMP 与 MLD 组播侦听发现
    • VRRP 与网关冗余
    • IPv4 数据报首部解析
    • IPv6 数据报与扩展首部
    • IPsec 安全扩展
    • 分片、MTU 与路径发现
    • ICMP 与 Traceroute 原理
    • 路由基础与转发流水线
    • 动态路由协议
    • NAT 网络地址转换
    • DHCP 与自动配置
    • Wireshark 与命令行工具
    • IPv6 过渡技术
    • IP 协议栈排障与攻击防御
  • TCP协议

    • 认识 TCP 协议与传输层定位
    • TCP 报文段首部解析
    • 三次握手与连接建立
    • 四次挥手与连接释放
    • TCP 有限状态机
    • 序列号与确认机制
    • 超时重传与 RTO 计算
    • 滑动窗口与流量控制
    • 拥塞控制基础
    • 现代拥塞控制算法
    • TCP 选项与扩展
    • TCP 性能调优与内核参数
    • Nagle 算法与糊涂窗口综合征
    • TCP 定时器与 Keep-Alive 机制
    • TCP 安全与攻击防御
    • TCP 与上层/下层交互
    • TCP 综合实践与排障

VRRP 与网关冗余

为什么需要网关冗余

你的电脑上网时,默认网关(Default Gateway)是唯一的出口。如果这台网关路由器坏了,整个子网断网。就像小区只有一个大门,大门一关所有人出不去。

VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议,RFC 3768) 让多台路由器组成一个"虚拟网关",一台坏了另一台无缝接管,用户完全无感知。

VRRP 的核心概念

三个角色

角色说明类比
Master实际转发数据的主路由器值班门卫
Backup待命路由器,Master 故障时接管替补门卫
Virtual Router对外暴露的虚拟身份"门卫室"这个岗位,不特指某人

关键参数

  • VRID(Virtual Router ID):0~255,同一子网内多个 VRRP 组用不同 ID 区分
  • 虚拟 IP 地址:对外暴露的网关 IP,如 192.168.1.1
  • 虚拟 MAC 地址:00:00:5e:00:01:xx,后 8 位是 VRID
  • 优先级(Priority):0~255,默认 100,越大越优先成为 Master
  • 抢占(Preempt):高优先级 Backup 是否主动抢回 Master 地位

VRRP 工作流程

选举阶段

  1. 所有路由器启动后,先比较优先级
  2. 优先级最高的成为 Master,其余成为 Backup
  3. 如果优先级相同,比较实际 IP 地址,大的优先

维持阶段

  • Master 每隔 1 秒 发送 VRRP 通告报文(目的 IP 224.0.0.18,目的 MAC 01:00:5e:00:00:12)
  • Backup 监听通告,如果 3 秒 内没收到,认为 Master 挂了,触发选举

切换阶段

Backup 升 Master 后,立即发送免费 ARP:

"192.168.1.1 的 MAC 现在是我 00:00:5e:00:01:01!"

子网内所有主机的 ARP 缓存更新,流量自动切到新 Master。整个过程通常在 3 秒以内。

具体配置示例

场景:飞翔公司核心网关冗余

设备实际 IP角色优先级
R1192.168.1.2Master110
R2192.168.1.3Backup100
虚拟192.168.1.1对外网关-

用户电脑配置:

IP: 192.168.1.10
掩码: 255.255.255.0
网关: 192.168.1.1(虚拟 IP,永远不变)

无论 R1 还是 R2 在工作,用户都不需要改配置。

对 PC 而言,它只知道网关是 192.168.1.1,完全感知不到背后有两台物理路由器。VRRP 的虚拟路由器就像"一个岗位两个人轮班",对外服务永远不间断。

状态转换

R1(Master)突然断电
  ↓
R2(Backup)3 秒内收不到通告
  ↓
R2 切换为 Master
  ↓
R2 发免费 ARP 刷新全网缓存
  ↓
用户流量无缝切换到 R2

R1 恢复上线(优先级 110 > R2 的 100,且开启抢占)
  ↓
R1 抢回 Master 地位
  ↓
R1 发免费 ARP
  ↓
流量切回 R1

上图展示了完整的 VRRP 故障切换与恢复流程。3 秒超时 + 免费 ARP 刷新 是整个切换的核心机制,PC 完全无感知,只是可能丢 1~3 个包(取决于通告间隔和 ARP 传播速度)。

HSRP 与 GLBP:Cisco 私有方案

协议厂商虚拟 MAC负载均衡标准
VRRP开放标准00:00:5e:00:01:vrid不支持(一主多备)RFC 3768
HSRPCisco00:00:0c:07:ac:group不支持(一主多备)私有
GLBPCisco00:00:0c:07:ac:group支持(多主负载均衡)私有

GLBP 的巧妙之处:多台路由器同时是 Active,各自分配不同的虚拟 MAC 地址。ARP 请求来时,网关轮流回复不同的虚拟 MAC,实现基于流量的负载均衡,而不是 VRRP 的"一主一备浪费一半带宽"。

与 ARP/NDP 的耦合

网关冗余协议的核心挑战是:切换时如何让下游设备更新 MAC 地址映射。

IPv4 场景

Master 切换时,新 Master 发送免费 ARP(Gratuitous ARP):

  • 发送方 IP = 虚拟 IP(192.168.1.1)
  • 发送方 MAC = 新 Master 的实际 MAC(或虚拟 MAC)
  • 目标方 IP = 虚拟 IP

所有收到广播的主机更新 ARP 缓存:192.168.1.1 → 新 MAC。

IPv6 场景

IPv6 没有 ARP,用 NDP。新 Master 发送主动邻居通告(Unsolicited NA):

  • 目标地址 = 虚拟 IPv6 地址
  • MAC = 新 Master 的 MAC
  • O(Override)= 1,强制覆盖旧缓存

VRRP 的排障要点

现象可能原因
双 Master两台路由器之间链路中断,互相收不到通告
频繁切换优先级配置错误、链路抖动、通告间隔不匹配
切换后部分主机不通免费 ARP 被交换机丢弃(检查端口安全/ARP Inspection)
虚拟 IP ping 不通某些厂商默认禁止 ping 虚拟 IP,需手动开启

本篇小结

  • VRRP 让多台路由器共享一个虚拟网关 IP,实现高可用
  • Master 发通告,Backup 监听,3 秒超时触发切换
  • 切换时通过免费 ARP/主动 NA 刷新下游缓存
  • HSRP/GLBP 是 Cisco 私有,GLBP 支持多主负载均衡
  • 配置时注意:优先级、抢占、通告间隔、认证(防止非法 VRRP 路由器加入)

动手实践

  1. 在 Packet Tracer 或 GNS3 中搭建 VRRP 拓扑:

    • 2 台路由器(R1、R2)+ 1 台交换机 + 1 台 PC
    • 配置 VRRP,虚拟 IP 192.168.1.1
  2. PC 上 ping 192.168.1.1 -t,然后关闭 R1,观察丢包数(理想 0~3 个)

  3. Wireshark 抓包过滤 vrrp,观察通告间隔和优先级字段

  4. 查看 ARP 缓存切换前后的变化:arp -a | findstr 192.168.1.1

上一页
IGMP 与 MLD 组播侦听发现
下一页
IPv4 数据报首部解析