赞
踩
OSPF 的路由标识是一个 32 位的数字,router id 为运行ospf路由器的身份id ,在一个ospf 网络里面 ,每台路由器的router id任意但必须都是必须是独一无二,router id 并不一定是路由器接口的ip地址 。
router id选举:华为设备手动进程指定最优先,其次为手工全局配置优先。没有指定则选取环回接口(无论是否运行ospf),如果没有环回接口则选举物理接口(接口地址越大越优先),router id 是在ospf 进程刚启动时开始选举,后面如果有必要更改router id 则需要重启ospf进程。由于接口的ip地址变动可能引发ospf router id 的变动进而对网络产生影响,因此建议给ospf 手动指定环回接口为固定的router id。
router id查看:
当选举router id 错误时一般可以用dis ospf error
查看,看不是0的记录.
手动指定router id 全局:[]router id 2.2.2.2
给动态路由协议指定id
重启ospf进程:<> reset ospf process
查看邻居ospf router id:dis ospf peer brief
查看自己ospf router id:dis ospf peer
DR:designate router 指定路由器(班长)
BDR:backup DR 备份指定路由器(副班长)
作用和目的:为了减少MA(多路访问multi-acess)环境下,不必要的ospf报文的发送减少链路带宽的占用,路由器会自动选举DR和DBR,DRother路由器只会将ospf路由信息传送给DR。
DR BDR选举规则:接口优先级(都是1)+router id ,越大越优先,DR,BDR不抢占规则,DB DBR一旦选择成功,则不会再次选择(除非重启),当优先级为0,表示不参加DR和DBR的选举。但是当有新的ospf网络加入,他换回参加选举DR。
具体过程:
1、第一个过程DR、BDR都为空(0.0.0.0)。
2、如果DR、BDR都为空,先选举BDR,先比较优先级,越大越优先(默认为1,0不参与)如果优先级相同,会比较route id,越大越优先。
3、如果DR为空 ,BDR为非空,BDR会生成DR,然后在选举BDR。
改变优先级: int g/0/0/0
ospf dr-priority 5 将接口优先级有1改为5
ospf=header+packet
ospf 在邻居刚建立的时候会发送路由信息(路由信息使用DBD、LSR、LSU、LSack四种报文来发送),路由同步以后,后面仅发送hello包来维持邻居关系即可。
Hello
:10秒发送一次,其报文小巧,用来建立和维护邻居之间的关系(查看路由信息是否有变化)。
DBD
:分为两种,一种为fristDBD和真实DBD,firstDBD没有lsa信息,只是描述自身的拓扑。真实DBD交互时才有lsa的头部信息来描述数据库报文,设备只有在OSPF邻居双方成功交换DD报文后才会向对方发出 LSR 报文。
LSR
:链路状态请求(包含只有lsa的头部信息),请求某链路的详细路由信息。
LSU
:链路状态跟新,对链路状态回应,返回具体链路状态信息。
LSack
刚开始发送:链路状态确认。
ospf邻居到邻接建立过程:
Init交换Hello报文
2Way交换Hello报文
Exstart交换DD报文
Exchange交换DD报文
Loading交换LSR和LSU报文
Full交换LSACK报文
邻居:两台路由器的状态到达2Way,建立邻居关系。不能交换信息
邻接:两台路由器的状态到达Full,建立邻接关系。可以交换信息
down
:代表换没有发现任何存在的邻居,并不是指链路down,不工作。
init
:初始化状态,开始交互hello报文,收到邻居的hello报文,但hello中没有发现自己的rid,此时你发现了邻居的从在,但并不代表邻居发现你,此过程也称为one-way。
two-way
:收到邻居的hello报文,并从hello中发现自己的rid,路由器双方都得到双方的router-id(邻居表建立完成)
功能:发现邻居和选举dr和bdr。
过程:假设有三台路由器,首先都广播发送hello报文,三台路由器之间建立邻居关系,邻居之间彼此收到第一个hello报文(报文当中只用自己的route id,没有另外两台的route id)此时建立单向init连接。这时彼此都知道对方的route id ,自己再回复hello报文,报文中包含自己的rid,当邻居收到第二个hello报文,此时建立双向邻居关系:two-way。(类似三次握手:第一次相当双方同时发送hello报文,自己再发送一次hello包告知对方自己rid)
two-way之后
:dr和bdr之间以及dother之间形成full状态,dother之间形成two-way状态,不会进行LSDB同步,其他情况会继续进行lsdb的同步,进入到exstart状态,开始发送DBA报文。
exstart
:发送的DB报文只做主从选举,而不会携带任何lsdb中的lsa的头部信息(没有lsa字段)。
DB description字段描述
:
i(init)
表示这是第一个报文,M(more)
表示这后面还有报文,ms(master)
标识自己为主(DR)
并各自表达自身是初次发送DBD报文,后续换希望发送DBD报文,并自身是master,进行主从选举,彼此交换该DBD报文后根据rid的大小完成主从选举,rid大的成为master,router id 小的成为slave。同时为实现可靠的DBD同步做准备。并随机生成DBD报文序列。
主从选举完毕后,进入到exchage状态,slave路由器开始发送携带自生LSDB中的LSA头部信息的DBD报文,并使用exstart状态master路由器的序列号作为该DBD报文的序列号。
exchange:交换链路状态数据库摘要
为何要进行DD报文交换
?
以上操作均为实现可靠传输。slave总是使用master的序列号向master发送DD报文,master将slave徐利好加1向从发送DD报文,实现DD报文的隐式确认。
为啥要采用隐式确认
?
原因DD报文携带自身LSDB中所有的头信部息,信息较多,一一确认处理起来较为繁琐,消耗设备资源,影响收敛时间,所以采用相对简单的隐式确认机制。
exchange完成后,邻居根据DBD报文的头部信息和自身LSDB的头部信息做比较,进行LSDB的同步。
同步规则:交换彼此没有的LSA以及新的lsa替换老旧的LSA,实现邻居的LSDB的一致性。
为实现同步,对lsa的数据结构做出定义要实现如下功能;
1、如何实现唯一的区分一条LSA
2、如何实现对lsa的新旧判断
而这些功能就是lsa的头部信息(摘要信息),DBD报文携带的正是lsa的头部信息。
exstart状态下DBD下不携带LSA头部。lsa通过6个参数来标志自身和新旧程度。
如何实现唯一的区分一条LSA
?
ls type 、link state id和 advertising router的组合共同标志一条LSA(LSA request请求字段)
如果都有这条lsa则需要进一步判断新旧判断,用新的去同步旧的。
如何实现对lsa的新旧判断
?
通过三个参数判读新旧
LSA序列号、比较checksum、lsa age 时间(LSA update字段)
LSA新旧判断:
1、比较LSA序列号,越大越优先。
2、如果序列号相同,比较checksum值,越大越优先。
3、如果checksum值也相同,如果lsa age 时间等于max-age时间3600秒,最优,则删除一条LSA。
例:在A路由器上面配置静态路由,A路由器就会泛洪到B路由器上面,B从而得到一条5类LSA,如果想要删除B上面的5类LSA,那么A就会发送max-age3600秒,来删除这条5类LSA。
4、如果lsa age 时间不等于3600秒,会比较两者的差值,如果差值大于900s越小越优先,如果差值小于900s可以理解为同一条LSA,忽略其中一条。
同DBD中携带的LSA的头部信息,完成LSDB差异比较,向邻居发送LSR,请求自身需要的LSA。
为什么要设计DD报文
?
实现按需同步,提高收敛速度。
loading
:加载状态,请求对方完整的明细路由(此时经历3种报文LSR、LSU、LSack)
路由器根据DBD发送LSR请求更新链路状态条目,对方用LSU进行响应。
其中LSR发送请求的报文为LSA的三要素,LSU发送的是自身的完整LSA更新信息,LSack回复的是LSU更新后发送过来的LSA的头部信息。
full
:完全邻接状态,双方数据库同步。
因为建立过程过快所以用以下命令进行调试
information -centet enable
<> debugging ospf event
<>terminal debugging
<>reset ospf process
总结
:ospt邻居建立的可靠性主要体现在:3次握手(hello报文交换)、DBD的隐式确认(通过seq+1,对报文进行确认)、LSA的显示确认、报文重传机制(默认为5秒,查看命令dis ospf inter g0/0/0)。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。