OSPF(开放最短路径优先协议)整理
一、OSPF特点
- 无环性:天然无环,避免路由环路。
- 支持区域划分:通过划分区域,优化路由计算。
- 链路状态:基于链路信息发现并计算路由。
- 维护LSDB(链路状态数据库):保存链路状态信息。
- 路由传递:不直接传递路由,而是通过链路状态更新。
二、OSPF作用
- 发现、计算和维护最优IP路由。
三、OSPF工作过程
- 建立邻居并维护邻居关系。
- 同步链路信息。
- 更新链路状态信息。
- 同步计算路由。
- 维护路由表。
四、OSPF报文
报文格式
- 通用报文头 + 具体类型细节。
报文类型
- Hello报文
- DB描述报文(DD)
- 链路状态请求报文(LSR)
- 链路状态更新报文(LSU)
- 链路状态确认报文(LSAck)
五、OSPF网络类型
- 广播网络:有DR/BDR选举。
- 点到点(P2P)网络:无DR/BDR选举。
- 非广播多点可达(NBMA)网络:通过手动配置模拟广播。
- 点到多点(P2MP)网络:无需DR/BDR,直接通信。
- 虚链路(VLink)网络:
- 用于将非骨干区域连接到骨干区域。
- 应用场景:
- 非骨干区域与骨干区域无直连。
- 骨干区域被分割。
- 建立方式:通过Router-ID建立。
六、OSPF通信地址
hello | DD报文 | LSU | LSA | |
---|---|---|---|---|
Broadcast | 224.0.0.5 | 单播 | 单播 | 224.0.0.5或者224.0.0.6 |
组播 | 224.0.0.5 | 单播 | 单播 | 224.0.0.5或单播 |
PtoP | 224.0.0.4 | 224.0.0.4 | 224.0.0.4 | 224.0.0.4 |
NBMA | 单播 | 单播 | 单播 | 单播 |
VLink | 单播 | 单播 | 单播 | 单播 |
七、OSPF认证
认证类型
- 接口认证:仅对特定接口生效,需链路中所有接口一致。
- 区域认证:对整个区域生效,需区域内所有设备一致。
认证模式
- 明文认证:密码以明文传递(例如:
simple
)。 - 密文认证:密码通过加密方式传递(例如:
md5
、HMAC
)。
密码保存方式
- 明文保存:密码以明文存储。
- 密文保存:密码加密存储。
注意:
- 认证类型和模式需一致,否则无法建立邻居。
- 接口认证优先于区域认证。
八、OSPF状态机
- Down:未建立邻居。
- Attempt:NBMA网络中尝试发现邻居。
- Init:发送Hello报文但未收到回应。
- 2-Way:邻居协商成功,建立邻接关系。
- ExStart:主从协商,发送首个DD报文。
- Exchange:同步LSA摘要(LSA Header)。
- Loading:发送LSR、LSU以同步链路详细信息。
- Full:完成链路同步。
九、OSPF邻居建立
通过发送Hello报文实现邻居建立
邻居建立的步骤:
-
发送初始Hello报文
- 本端设备发送第一个Hello报文,此时对端设备也会发出自己的第一个Hello报文。
- 这些Hello报文中的邻居信息字段为空(共2个Hello报文交互)。
-
收到对端Hello报文并更新邻居信息
- 本端设备收到对端第一个Hello报文后,会结合自身的配置信息进行邻居协商。
- 协商成功后,本端会向对端发送一个包含邻居信息的Hello报文(这是本端的第二个Hello报文,网络中的第3个Hello报文)。
- 此时,本端的邻居关系已经建立完成。
-
对端处理并确认邻居关系
- 对端设备按照同样的逻辑,回复一个包含邻居信息的Hello报文(网络中的第4个Hello报文)。
- 至此,双方的邻居关系完全建立。
邻居建立完成的标志性事件:
- 状态进入 2-Way
邻居关系进入 2-Way 状态,表明基础的Hello交互已完成。 - 在收到的Hello报文中找到自己的 Router-ID
表示对端设备已将本端作为邻居。 - 收到对端的回复Hello报文
最后一个确认Hello报文标志着邻居关系稳定。
邻居协商的成功条件:
以下字段必须协商一致,才能成功建立邻居:
- OSPF版本一致
确保通信协议兼容性。 - Router-ID 不同
Router-ID是设备唯一标识,必须不同。 - 区域ID相同
OSPF同一区域的设备才能建立邻居关系。 - 认证类型相同
双方需要配置相同的认证方式(如明文、MD5等)。 - 认证密钥相同
如果启用了认证,双方密钥必须一致。 - 子网掩码相同
确保设备在同一个逻辑子网中。 - Hello周期一致
双方发送Hello报文的时间间隔必须一致。 - 邻居超时时间一致
超时时间是Hello报文丢失后等待的时间。 - Option字段一致
描述设备支持的OSPF功能。 - 网络类型相同
如广播、点对点等网络类型必须匹配。 - 邻居地址不是子接口地址
子接口地址不能发送协议报文。 - 接口启动OSPF功能
接口需要启用OSPF协议。 - 接口状态为双UP
接口的物理和协议状态都必须处于UP。 - NBMA或vLink中必须手动指定邻居
在非广播多路访问网络(NBMA)或虚链路(vLink)中,必须显式配置邻居。
Hello报文的关键字段:
- 子网掩码
确保设备在同一子网中。 - Hello周期
表示发送Hello报文的时间间隔。 - Hello老化时间
邻居超时时间,超时后邻居关系失效。 - Option字段
描述设备支持的OSPF功能(如外部路由等)。 - DR优先级
确定设备在网络中的角色(如DR、BDR)。 - DR设备和BDR设备
当前网络中选举出的指定路由器和备份指定路由器。 - 邻居信息
包含本设备已知的邻居列表。
通过上述Hello报文交互和字段协商,OSPF能够确保邻居关系的正确建立,为后续的链路状态同步和路由计算奠定基础。
OSPF邻接建立过程整理
1. 主从协商
确定摘要信息同步的顺序,通过 两个DD报文 完成:
- 主从设备选举规则:根据设备的 Router-ID 值决定,值越大者为主(Master)。
- 完成标志:
- 主设备收到 I、M、MS 比特位为0 的 DD 报文。
- 从设备发送 I、M、MS 比特位为0 的 DD 报文。
2. 摘要同步
同步 LSA 的头信息,基于 三个DD报文 实现:
- 完成标志:
- 从设备发送第三个 DD 报文(不携带LSA头)。
- 主设备收到从设备发送的不带LSA头的DD报文。
DD报文字段
- 接口MTU:描述分片信息,默认关闭。
- Option:
- I位:初始化标志,第一次发送携带。
- M位:如果携带,表示后续还有更多DD报文。
- MS位:标志主设备。
- DD序列号:描述LSA新旧程度。
- LSA头:描述LSA唯一性。
3. 明细同步
通过 LSR 和 LSU 报文 实现:
- LSR报文:请求LSA更新,包含:
- LS Type:LSA类型。
- LS ID:链路状态ID。
- Advertising Router:通告路由器的 Router-ID。
- LSU报文:传输具体的LSA明细,内容包括:
- LSA头 + 各类型LSA明细内容。
LSA头字段
- LS Age:生存时间。
- Options:设备支持的OSPF功能。
- LS Type:LSA类型。
- Link State ID:描述的具体内容视LSA类型而定。
- Advertising Router:通告路由器的Router-ID。
- LS Sequence Number:描述LSA新旧。
- LS Checksum:校验字段。
- Length:总大小。
LSA新旧判断
- Sequence Number:越大越新。
- Checksum:越大越新。
- Age:越小越优;差值超过 900秒 时,更新为新LSA。
4. 维护确认
在邻接关系建立后,定期发送Hello报文保持邻接关系。
问题整理
-
版本不同不能建立邻居原因
OSPF版本不兼容,无法协商。 -
Router-ID相同对邻居关系的影响
- 直连设备:Router-ID相同无法建立邻居。
- 非直连设备:邻居关系可建立,但可能影响路由计算。
- 跨区域设备:需手动调整 Router-ID,避免计算错误。
-
区域ID不同能否建立邻居
无法建立。只有在相同区域内设备才能同步路由。 -
掩码不同的影响
- 广播网络、NBMA:掩码需一致。
- 点到点网络:掩码可不同。
- 点到多点网络:可通过命令跳过掩码检查。
-
Option字段的作用及影响
描述路由器功能支持,功能不一致则无法同步路由,邻居无法建立。 -
网络类型不同的邻居关系
- 广播与点到点:无法计算路由。
- 广播与点到多点:需修改时间参数。
- 广播与NBMA:报文发送方式不同,不可建立。
- V-Link与其他类型:因单播/组播差异,无法建立。
-
子接口地址限制
子接口地址不能发送协议报文。 -
V-Link不建议使用原因
路由计算复杂,性能占用高,维护困难。 -
V-Link建立邻居的报文源地址
V-Link会在区域内自动查找邻居路径,通过物理接口发送单播Hello报文。 -
NBMA的Attempt状态
每30秒发送Hello,探测邻居是否支持OSPF。 -
LSR无Option字段的原因
- Option字段已包含在DD和LSU报文中。
- LSR仅针对摘要请求,无需再次携带Option。