vrrp报文格式

77 阅读5分钟

一、VRRP 报文的基本性质

首先澄清一个常见误解:

❌ VRRP 报文不是“广播”(Broadcast),而是 组播(Multicast)

  • 协议类型:网络层协议(IP 协议号 112
  • 封装方式:直接封装在 IP 包中(不是 TCP/UDP)
  • 目的地址:组播地址 224.0.0.18
  • TTL255(防止跨路由传播,限制在本地子网)
  • 源 IP:发送接口的真实 IP(不是 VIP)
  • 目的 IP224.0.0.18(IANA 分配给 VRRP 的组播地址)
  • IP 协议号112(IANA 注册)

✅ 二、VRRP 报文格式(IP 层 + VRRP 头)

1. IP 层封装

字段
源 IP 地址发送节点的 真实接口 IP(如 192.168.1.10
目的 IP 地址224.0.0.18(VRRP 组播地址)
协议(Protocol)112(VRRP)
TTL255(典型值,防跨网段)
DF(Don't Fragment)通常为 0

2. VRRP 报文头(RFC 3768)

深色版本
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| Type  | Virtual Rtr ID|   Priority    |   Auth Type   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Adver Int   |                                               |
+-+-+-+-+-+-+-+-+                                               +
|                         Checksum                              |
|                                                               |
|                  Authentication Data (optional)               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

字段解释:

字段说明
Version通常是 2(IPv4)或 3(IPv6)
Type固定为 1(Advertisement 报文)
Virtual Rtr ID (VRID)虚拟路由器 ID(1-255),用于区分同一网络中的多个 VRRP 组
Priority优先级(1-254),255 保留给拥有 VIP 的节点(IP Address Owner)
Auth Type认证类型(0=无,1=简单密码,2=IP Authentication Header)
Adver Int广告间隔(单位:秒,默认 1s,Keepalived 可设为 0.1)
Checksum校验和
Authentication Data密码(明文,不安全)

🔐 注意:VRRP 认证不安全,建议在可信网络使用。


✅ 三、主节点发送 VRRP 报文的接口

主节点通过哪个接口发送 VRRP 报文?是配置了 VIP 的接口吗?

✅ 正确答案:

是的,主节点通过 vrrp_instance 中配置的 interface 指定的接口发送 VRRP 报文,这个接口通常也是 VIP 所在的接口。

示例配置:

conf
深色版本
vrrp_instance VI_1 {
    interface eth0        # ← VRRP 报文从此接口发出
    virtual_ipaddress {
        192.168.1.100     # ← VIP 也绑定在此接口(或子接口)
    }
}
  • VRRP 报文从 eth0 发出
  • 源 IP 是 eth0 的真实 IP(如 192.168.1.10
  • VIP 是逻辑 IP,绑定在 eth0 或 eth0:0 上

📌 所以:发送 VRRP 报文的接口 = 配置 VIP 的接口


✅ 四、备节点收到 VRRP 报文后的处理过程

备节点收到 VRRP 报文后,会进行一系列判断,决定是否触发主备切换。

🔄 处理流程如下:

text
深色版本
收到 VRRP 报文
   ↓
检查目的地址是否为 224.0.0.18 且协议号为 112
   ↓
验证 VRID 是否匹配本地配置(virtual_router_id)
   ↓
检查优先级(Priority)
   ├─ 如果收到的优先级 < 本地优先级 → 忽略
   ├─ 如果收到的优先级 > 本地优先级 → 重置超时计时器
   └─ 如果收到的优先级 == 本地优先级 → 比较 IP 地址(数值大的优先)
   ↓
重置 **Master_Down_Timer**(默认 = 3 × Adver_Int)
   ↓
如果在 Master_Down_Timer 超时前未收到下一个 VRRP 报文
   ↓
判定主节点失效
   ↓
本地节点发起选举:
   - 检查自己健康状态(track_script 是否通过)
   - 如果健康,提升为 MASTER
   - 执行:
        1. ip addr add VIP
        2. 发送 Gratuitous ARP
        3. 执行 notify_master 脚本

⚠️ 关键点:

  • Master_Down_Timer = 3 × Adver_Int

    • 默认 advert_int 1 → 超时 3s
    • 优化为 advert_int 0.1 → 超时 300ms
  • 备节点不会立即抢占,除非主节点失效

  • 如果配置了 preempt(默认开启),备节点在恢复后可抢回主角色


✅ 五、完整通信示例

假设:

  • 主节点:192.168.1.10/24 on eth0,VIP: 192.168.1.100
  • 备节点:192.168.1.11/24 on eth0
  • VRID: 51

主节点发送的 VRRP 报文:

字段
源 IP192.168.1.10(真实 IP)
目的 IP224.0.0.18(组播)
协议112(VRRP)
VRID51
Priority100
Adver Int100ms

备节点行为:

  • 监听所有协议号为 112 的 IP 包
  • 收到后匹配 VRID 51
  • 更新 Master_Down_Timer = 300ms
  • 每 100ms 收到一次,计时器重置
  • 若 300ms 内未收到 → 触发切换

✅ 六、面试常见问题 & 回答

Q1:VRRP 是广播还是组播?

:是 组播,目的地址 224.0.0.18,协议号 112

Q2:VRRP 报文源 IP 是 VIP 吗?

:❌ 不是。源 IP 是发送接口的 真实物理 IP,如 192.168.1.10

Q3:备节点如何知道主节点是否存活?

:通过连续接收 VRRP 报文。若 3 × advert_int 时间内未收到,则判定主节点失效。

Q4:VRRP 报文走的是 UDP 吗?

:❌ 不是。VRRP 直接封装在 IP 层,协议号 112,不是 UDP/TCP。

Q5:能否跨 VLAN/VXLAN 发送 VRRP?

:理论上可以,但需三层路由支持组播转发。生产中通常限制在 同一二层域,避免复杂性。


✅ 总结

问题答案
VRRP 报文类型IP 层组播报文(协议号 112)
源 IP发送节点的真实接口 IP(非 VIP)
目的 IP224.0.0.18(VRRP 组播地址)
发送接口interface 配置的网卡(通常也是 VIP 所在接口)
备节点处理验证 VRID → 比较优先级 → 重置超时计时器 → 超时则切换

💡 一句话总结
“VRRP 使用 IP 协议号 112,以组播方式发送到 224.0.0.18,源 IP 是节点真实 IP。主节点通过配置的接口(如 eth0)周期性发送通告,备节点监听并维护一个超时计时器,超时未收到则接管 VIP。”

掌握这些细节,说明你不仅会配置,更懂底层原理,面试官会眼前一亮。