Appendix A: OSPF Data Formats (OSPF 数据格式)
本附录详细描述 OSPF 协议使用的所有数据包和 LSA 的字节级格式。
附录概述 (Appendix Overview)
本附录包含:
- OSPF 包头格式
- 各类 OSPF 包的详细格式
- 各类 LSA 的详细格式
- 字段位置和大小的精确定义
note
本附录提供实现者所需的完整数据格式规范。所有字段均以网络字节序(大端序)传输。
A.1 OSPF 包头格式 (OSPF Packet Header)
通用头部结构
所有 OSPF 包共享的 24 字节头部:
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 | Packet length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Router ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Area ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | AuType |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Authentication |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Authentication |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
字段说明
| 字段 | 大小 | 说明 |
|---|---|---|
| Version | 8 bits | OSPF 版本号(2) |
| Type | 8 bits | 包类型(1-5) |
| Packet length | 16 bits | 包总长度(字节) |
| Router ID | 32 bits | 发送路由器的 ID |
| Area ID | 32 bits | 区域标识 |
| Checksum | 16 bits | 校验和 |
| AuType | 16 bits | 认证类型 |
| Authentication | 64 bits | 认证数据 |
A.2 OSPF 包类型 (OSPF Packet Types)
包类型列表
| Type | 名称 | 用途 |
|---|---|---|
| 1 | Hello | 邻居发现和维护 |
| 2 | Database Description | 数据库摘要交换 |
| 3 | Link State Request | 请求特定 LSA |
| 4 | Link State Update | 泛洪 LSA |
| 5 | Link State Acknowledgment | 确认 LSA |
A.3 Hello 包格式 (Hello Packet)
格式结构
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Network Mask |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| HelloInterval | Options | Rtr Pri |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RouterDeadInterval |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Designated Router |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Backup Designated Router |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Neighbor |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... |
关键字段
- Network Mask: 接口网络掩码
- HelloInterval: Hello 间隔(秒)
- Options: 可选能力位
- Rtr Pri: 路由器优先级
- RouterDeadInterval: 死亡间隔(秒)
- Designated Router: DR 的 Router ID
- Backup Designated Router: BDR 的 Router ID
- Neighbor: 邻居路由器 ID 列表
A.4 Database Description 包格式 (DD Packet)
格式结构
包含 LSA 头部列表,用于数据库同步。
关键字段
- Interface MTU: 接口 MTU
- Options: 可选能力
- I-bit: 初始包标志
- M-bit: 更多包标志
- MS-bit: 主从标志
- DD sequence number: 序列号
- LSA Headers: LSA 头部列表
A.5 Link State Request 包格式 (LS Request)
格式结构
包含请求的 LSA 标识符列表。
请求字段
每个请求包含:
- LS Type: LSA 类型
- Link State ID: LSA ID
- Advertising Router: 通告路由器 ID
A.6 Link State Update 包格式 (LS Update)
格式结构
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| # LSAs |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+- -+
| LSAs |
+- -+
| ... |
字段说明
- # LSAs: LSA 数量
- LSAs: 完整的 LSA 列表
A.7 Link State Acknowledgment 包格式 (LS Ack)
格式结构
包含 LSA 头部列表(仅头部,无内容)。
用途
确认收到的 LSA,不包含 LSA 内容以节省带宽。
A.8 LSA 头部格式 (LSA Header)
通用 LSA 头部(20 字节)
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| LS age | Options | LS type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Link State ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Advertising Router |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| LS sequence number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| LS checksum | length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
A.9 Router-LSA 格式 (Type 1)
格式结构
包含路由器的链路列表。
关键字段
- V-bit: 虚拟链路端点
- E-bit: AS 边界路由器
- B-bit: 区域边界路由器
- # links: 链路数量
- Link entries: 链路条目列表
链路条目格式
每个链路包含:
- Link ID: 链路标识
- Link Data: 链路数据
- Type: 链路类型(1-4)
- # TOS: TOS 数量
- Metric: 链路代价
A.10 Network-LSA 格式 (Type 2)
格式结构
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Network Mask |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Attached Router |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... |
字段说明
- Network Mask: 网络掩码
- Attached Router: 连接的路由器 ID 列表
A.11 Summary-LSA 格式 (Type 3/4)
格式结构
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Network Mask |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 | metric |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| TOS | TOS metric |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... |
字段说明
- Network Mask: 目的网络掩码(Type 3)或 0(Type 4)
- Metric: 到达目的地的代价
- TOS: 服务类型(通常为 0)
A.12 AS-external-LSA 格式 (Type 5)
格式结构
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Network Mask |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|E| 0 | metric |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Forwarding address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| External Route Tag |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
关键字段
- Network Mask: 外部网络掩码
- E-bit: 外部路由类型(0=Type2, 1=Type1)
- Metric: 外部路由代价
- Forwarding address: 转发地址
- External Route Tag: 外部路由标签
数据格式要点 (Key Points)
字节序
网络字节序(大端序)
- 所有多字节字段使用大端序
- 最高有效字节在前
对齐
32 位对齐
- 所有 OSPF 包和 LSA 长度必须是 4 字节的倍数
- 必要时填充
校验和
Fletcher Checksum
- 使用 Fletcher 校验和算法
- 覆盖整个 OSPF 包(除认证字段)
参考资料 (References)
- 完整原文:RFC 2328 Appendix A
- 协议格式详解:RFC 2328 完整附录 A
注意 (Note):本附录提供数据格式的概要。实现时必须参考 RFC 2328 原文 Appendix A 的完整详细规范,确保所有字段位置、大小和语义完全准确。