工作过程概览
- <---------通过Hello报文发现直连链路上的邻居---------> 邻居关系
- <---------协商主/从(master/slave)--------->
- <---------相互描述各自的LSDB(摘要信息)--------->
- <---------更新LSA,同步双方LSDB---------> 邻接关系
- <---------计算路由--------->
两个路由器要建立邻居关系的前提:Hello Interval要相同,RouterDeadInterval要相同,两边接口配置的区域要相同,Router ID不能相同,认证要相同,接口MTU值要相同(默认未开启MTU检查)
邻居关系
- OSPF使用Hello报文发现和建立邻居关系
- 在以太网链路上,缺省时,OSPF采用组播的形式发送Hello报文(目的地址224.0.0.5)
- OSPF Hello报文中包含了路由器的Router ID,邻居列表等信息
- DR和BDR给DRother发送消息使用的是组播224.0.0.5
- DRother给DR和BDR发送消息使用的是组播224.0.0.6。
建立过程
R2(10.0.2.2)<------------------> R1(10.0.1.1)Down
R2(10.0.2.2)<---------Hello(Router ID:10.0.1.1 neighbor:null)--------- R1(10.0.1.1)Init
R2(10.0.2.2)---------Hello(Router ID:10.0.2.2 neighbor:null)---------> R1(10.0.1.1)Init
R2(10.0.2.2)<---------Hello(Router ID:10.0.1.1 neighbor:10.0.2.2)--------- R1(10.0.1.1)2-way
R2(10.0.2.2)---------Hello(Router ID:10.0.2.2 neighbor:10.0.1.1)---------> R1(10.0.1.1)2-way
邻居状态:Down->Init->2-way
Down:这是邻居的初始状态,表示没有从邻居收到任何信息
Init:在此状态下,路由器已经从邻居收到了Hello报文,但是自己的Router ID不在所收到的Hello报文的邻居列表中
2-way:在此状态下,路由器发现自己的Router ID存在于收到的Hello报文的邻居列表中
邻接关系
建立过程
R2(10.0.2.2)<------------------> R1(10.0.1.1)2-way
R2(10.0.2.2)<---------DD(Seq=X,I=1,M=1,MS=1)--------- R1(10.0.1.1)ExStart
R2(10.0.2.2)---------DD(Seq=Y,I=1,M=1,MS=1)---------> R1(10.0.1.1)ExStart
R2(10.0.2.2)<---------DD(Seq=Y,LSDB摘要)--------- R1(10.0.1.1)Exchange
R2(10.0.2.2)---------DD(Seq=Y+1,LSDB摘要,MS=1)---------> R1(10.0.1.1)Exchange
R2(10.0.2.2)<---------LSR--------- R1(10.0.1.1)Loading
R2(10.0.2.2)---------LSU---------> R1(10.0.1.1)Loading
R2(10.0.2.2)<---------LSAck--------- R1(10.0.1.1)Full
邻居状态:2-way->ExStart->Exchange->Loading
ExStart:邻居状态变成此状态以后,路由器开始向邻居发送DD报文。在此状态下发送的DD报文不包含链路状态描述
Exchange:在此状态下,路由器与邻居之间相互发送包含链路状态信息摘要的DD报文
Loading:在此状态下,路由器与邻居之间相互发送LSR报文,LSU报文,LSAck报文
Full:路由器已完成了与邻居的LSDB同步
DR与BDR选举
- DR负责MA网络建立和维护邻接关系并负责LSA的同步
- DR与其他所有路由器形成邻接关系并交换链路状态信息,其他路由器之间不直接交换链路状态信息
- 为了规避单点故障风险,通过选举BDR,在DR失效时快速接管DR的工作
- 接口优先级数字越大越优先(0-255,0 优先级不能参与 DR、BDR 选举)
- Router ID越大越优先
为什么DR不可以抢占?
因为在MA网络中所有DRothers是和DR建立邻居的,如果新加入的路由器抢占DR位置,会导致其他所有路由器断掉现在的邻居,和新加入的路由器建立邻居,由于需要重新选举DR、建立邻居、传递更新计算路由,会导致短时间的断网现象,会导致网络的不稳定。
报文类型
- OSPF一共定义了5种类型的报文,不同类型的OSPF报文有相同的头部格式
- OSPF报文直接采用IP封装,在报文的IP头部中,协议号为89
| Type | 报文名称 | 报文功能 |
|---|---|---|
| 1 | Hello | 发现和维护邻居关系 |
| 2 | Database Description | 交互链路状态数据库摘要 |
| 3 | Link State Request | 请求特定的链路状态信息 |
| 4 | Link State Update | 发送详细的链路状态信息 |
| 5 | Link State Ack | 确认LSA |
| IP Packet header(协议号89) | OSPF Packet header | OSPF Packet data |
|---|---|---|
| OSPF Packet header | ||
| Version | Type | Packet Length(OSPF头部长度) |
| Router ID | ||
| Area ID | ||
| Checksum | Auth Type | |
| Authentication |
| Hello报文 | ||
|---|---|---|
| Network Mask | ||
| Hello Interval | Options | Router Priority |
| RouterDeadInterval | ||
| Designated Router | ||
| Backup Designated Router | ||
| Neighbor | ||
| ... |
Hello报文字段解释:
- Network Mask:发送Hello报文的接口的网络掩码
- Hello Interval:发送Hello报文的时间间隔,通常为10s
- Options:
-
- E:是否支持外部路由
-
- MC:是否支持转发组播数据包
-
- N/P:是否为NSSA区域
- Router Priority:DR优先级。默认为1。如果设置为0,则路由器不能参与DR或BDR的选举
- RouterDeadInterval:失效时间。如果在此时间内未收到邻居发来的Hello报文,则认为邻居失效,通常是Hello Interval的四倍,40s
- Designated Router:DR的接口地址
- Backup Designated Router:BDR的接口地址
- Neighbor:邻居列表,以Router ID标识
| DD报文 | ||
|---|---|---|
| Interface MTU | Options | 0 0 0 0 0 I M MS |
| DD sequence number | ||
| LSA Header |
DD报文字段解释:
- Interface MTU:指示在不分片的情况下,此接口最大可发出的IP报文长度。在两个邻居发送DD报文中包含MTU参数,如果收到的DD报文中MTU和本端的MTU不相等,就丢弃该DD报文,缺省情况下,华为设备未开启MTU检查
- Options:字段同Hello报文
- I:当发送连续多个DD报文时,如果这是第一个DD报文,则置为1,否则为0
- M(more):当发送连续多个DD报文时,如果这是最后一个DD报文,则置为0;否则置为1,表示后面还有其他的DD报文
- MS(master/slave):当两台OSPF路由器交换DD报文时,首先需要确定双方的主从关系,Router ID大的一方会成为master,当值为1时表示发送方为master
- DD sequence number:DD报文序列号,主从双方利用序列号来保证DD报文传输的可靠性和完整性
不同网络类型中DR与BDR的选举操作
| OSPF网络类型 | 常见链路层协议 | 是否选举DR | 是否和邻居建立邻接关系 | Hello Interval | RouterDeadInterval |
|---|---|---|---|---|---|
| Point-To-Point | PPP链路:HDLC链路 | 否 | 是 | 10s | 40s |
| Broadcast | 以太网链路 | 是 | DR与BDR、DRother建立邻接关系;BDR与DR、DRother建立邻接关系;DRother之间只建立邻居关系 | 10s | 40s |
| NBMA | 帧中继网络 | 是 | DR与BDR、DRother建立邻接关系;BDR与DR、DRother建立邻接关系;DRother之间只建立邻居关系 | 30s | 120s |
| P2MP | 需手工指定 | 否 | 是 | 30s | 120s |
相关配置命令
display ospf peer brief//查看ospf邻居的相关信息
ospf 1 router-id x.x.x.x//启动ospf进程,编号1,同时设置routerid为x.x.x.x
display router id//查看全局routerid
reset ospf process//重启ospf进程
bandwidth-reference ?//修改参考带宽值
ospf cost ?//修改接口cost值
ospf dr-priority ?//修改dr优先级