工作过程
1、建立邻居和邻接关系
建议邻居关系
状态:Down->Init->2-Way;
- Down:RTA的所有接口以组播的形式发送Hello用来发现邻居。
- Init:RTB接收到RTA的Hello报文但报文的邻居表中没有RTB的router ID,进入到Init状态,RTB发送包含有自己router ID的Hello给RTA(在Neighbor字段中)。
- 2-Way:RTA接收到RTB的Hello报文,把RTB加入到自己的邻居表中并发送含有自己router ID发送给RTB,RTA进入到2-Way状态,RTB接收到RTA发送过来的含有RTA中router ID添加到自己的邻居表中,进入到2-Way状态,邻居关系建立完成。
注意:路由器可以由Down状态过度到2-Way状态。
列如:如上面的RTA就是从Down到2-2way。
建立邻接关系
状态:Exstart->Exchange->loading->full
- Exstart:
- ①建立完邻居关系之后RTA生产一个带有随机序列号X和自身Router ID的DD报文给RTB。
- ②并对比Router ID大的成为主设备,RTB也生成一个随机的的序列号Y和自己的Router ID给RTA,RTA进入到Exchange状态。
- Exchange:(类似三次握手)
- ③RTA收到RTB的DD报文后和自己的Router ID对比确定RTB为主设备后,发送一个带有序列号为Y和LSDB摘要的DD报文给RTB。
- ④RTB收到RTA的报文后进入到Exchange状态后发送一个序列号为Y+1说明自己为主设备和LASB摘要的DD报文给RTA,RTA进入到loading状态。
- ⑤RTA收到RTB的DD报文后发送序列号为Y+1的DD报文给RTB。
- loading:
- RTA对比RTB发过来的LSDB摘要后,发送一个LSR报文给RTB,请求本地没有的链路状态信息(LSA)。
- RTB收到RTA的LSR报文后发送一个LSU报文给RTA,里面有有详细的链路状态信息。
- RTA收到RTB的LSU报文后,且没有其他请求的LSA进入到Full状态再发送一个LSACK报文给RTB。
- RTB收到RTA的LSACK报文表示链路状态信息同步完成进入到Full状态。建立起邻接关系。
- Full:链路状态同步完成
注意
建立了邻居关系不一定是邻接关系,建立了邻接关系一定是邻居关系。
- OSPF邻居建立的条件
- 版本一致。
- Router ID不能冲突。
- 区域ID一致。
- 认证类型和认证密钥一致。
- 两端接口的IP要在同一网段。
- 两端接口的掩码要相同。
- Hello的发送时间间隔要一致。
- Dead的时间要一致。
- Option选项中Nbit和Ebit要一致。
- 两端的接口MTU要一致(ospfv2默认不开启,ospfv3默认开启)。
2、DR和BDR
作用
- 选举DR和BDR解决了在MA网络中多台设备建立很复杂的邻居关系,多台设备发送的LSA泛洪就会占用大量的网络带宽问题。
- 在一个OSPF网络中只有一个DR(指定路由器)和BDR(备份指定路由器),其他的都是Drouter(非指定路由器)
- DR、BDR和DRouter之间的关系
- 在P2P网络中建立OSPF邻居不要求网段一致掩码一致
- 在P2MP网络中建立OSPF邻居默认要求网段和掩码一致,可以设置不一致
- 在广播或MA网络中要求网段和掩码要一致
OSPF网络类型
- p2p:点对点链路,不需要选举DR,Hello报文10s发送一次
- MA:广播网络,会选举DR,Hello报文也是10s发送一次
- NBMA:帧中继网络,会选举DR,但是Hello报文30s发送一次
- p2mp:需要手动指定,不需要选举DR,Hello报文也是30s发送一次