前言
OSPF配置好的路由器接口在进入Two-way状态(双向通信已经建立,但是没有与邻居建立邻接关系)后,会进行第二步操作——LSDB链路状态数据库的同步,在实验中,我们先配置一个路由器跑OSPF,在对端进行抓包测试,
![](https://img.haomeiwen.com/i14535918/45bb26dd41b208bc.png)
由上图可以看出,在此期间,只能收到对端周期性的hello报文,但是没有回包现象。
配置对端之后,
![](https://img.haomeiwen.com/i14535918/06e393ee31cf444b.png)
我们发现了DD报文 即DB Description,简称DD报文,对端路由器此时进入exstart状态。
exstart:预启动,这是形成邻居关系的第一步,发送不携带LS摘要信息的DD报文,进行主从选举。
1、DD报文分析
1.1、DD报文有两种情况,
1、不携带LS摘要信息的DD报文
2、携带LS摘要信息的DD报文
![](https://img.haomeiwen.com/i14535918/9a34667538f1e2c4.png)
![](https://img.haomeiwen.com/i14535918/284bc41cbfa2d4f2.png)
1.2、DD报文I More MS字段含义
![](https://img.haomeiwen.com/i14535918/e736118b7147c828.png)
I,代表Init, 0:不是第一次发送DD报文,1:是第一次发送DD报文
M,代表More 0:最后一个DD报文, 1: 还要继续发送DD报文
MS,代表Master 1: 我是主路由器 Master 0:我是从路由器 Slaver
首次发送DD报文不携带摘要信息,各自先比较router-id,大的当选为主路由器,之后再携带LSA信息继续发送。
使用命令查看对端MS状态
dis ospf peer
![](https://img.haomeiwen.com/i14535918/7ffc0bf2847bbda1.png)
2、LSDB的同步
exstart:交换不携带摘要信息的DD报文后,完成主从选举,进入到exchange状态
exchange:将LSDB中所有的LSA信息的摘要通过DD报文进行交换,实现LSDB的同步。
2.1LSA的摘要
![](https://img.haomeiwen.com/i14535918/e3f57e9f55205f60.png)
至于LSA,LSA的摘要,也称为LSA的头部信息,我们可以使用此条命令进行查看
dis ospf lsdb router
lsa的头部摘要
----用于标识LSA---
Type : Router#描述lsa的种类
Ls id : 1.1.1.1#LSA的名字,LS id的取值由type决定
Adv rtr : 1.1.1.1 #产生这条LSA的路由器的router id
--//用于标识LSA--
--除了Options、Len外其他几项用于判断新旧--
Ls age : 1585 老化时间
Len : 48
Options : E
seq# : 80000002 序列号
chksum : 0xdcaf 校验和
--用于判断新旧
进行抓包测试,发现DD报文中携带的也是以上信息。
1、摘要信息的用途:
1、唯一的标识一条LSA
2、用于判断LSA的新旧
总结:
LSDB的同步就是同步邻居之间的LSA信息,保持LSA的新旧一致。
DD、LSU、LSR、LSACK各自携带什么信息?这样做的优点?
DD携带LSDB中所有LSA的摘要信息 ,
LSR 携带LSA标识,(标识信息如下)
Type : Router#描述lsa的种类
Ls id : 1.1.1.1#LSA的名字,LS id的取值由type决定
Adv rtr : 1.1.1.1 #产生这条LSA的路由器的router id
LSU 携带LSA的头部以及链路状态
LSACK 携带LSA的摘要信息
优点:实现LSDB的信息对比,按需同步LSA,提高邻居收敛速度,节省设备资源。
2.2、LSA的新旧判断
1、seq越大的越新,起始值0x80000001,最大值0x7fffffff
2、次之(seq相同),比较chksum,越大越新
3、chksum相同,则判断LS age是否等于3600s,等于3600s的最新
4、如果都不等于3600s则判断ls age差值,如果大于900s,则ls gae小的最新,如果小于900s,则认为是相同的,lsa不需要交换信息
3、OSPF的LSDB同步
1、主从未选举之前,各自都保持ExStart预启动状态,各自发送不携带LS摘要信息的DD报文,进行主从选举,各自先比较router-id,大的当选为主路由器,
2、之后各自依序进入Exchange状态,携带LSA信息继续发送DD报文,进行主从同步。
3、主从同步期间,主路由器发送seq并在之后做加一操作,从路由器收到命令,开始比较LSA新旧,新的继续发送更新命令(LSR)更新自己的,旧的就舍弃,继续进行相同序列号的未比较出新旧的lsa摘要信息发送操作(不改变seq序列号的值)以此更新主路由器信息,这就是发送DD报文的可靠性机制。
4、当主从同步完毕(从路由器没有要发送的lsa摘要信息),主路由器最后发送DD报文与从路由器进行信息同步后,从路由器会继续回复该序列号下的lsa摘要信息即发送null(代表当前DB中无有要发送的lsa摘要信息),以及其他标识(i=0,more=0, ms=0)。
4、OSPF邻居建立的可靠性的体现
由于OSPF是被IP协议直接封装的路由协议(工作在网络层之上的路由协议),IP协议不具备可靠性机制。因此OSPF需要自己建立一套可靠性机制保障邻居能成功的同步。
1、三次握手,形成two-way
2、DD报文序列号+1机制,隐式确认(主通过收到当前序列号确认直接加一,不对内容做进一步的分析),确认收到了数据包
3、LSACK 是对LSU中的LSA内容的确认,不是对LSU整个报文的确认(精确保障)显式确认。确认了数据包中的内容
5、OSPF协议报文头部信息
![](https://img.haomeiwen.com/i14535918/cada2dd36767445b.png)
1、OSPF有五种报文类型,均有相同的OSPF报文头部, 协议号是89,包数据内容取决于包头部类型。
2、发现邻居并保持是通过hello机制实现的;
LSA同步是通过双方互相发送LSA实现的,DD报文的LSA摘要信息处理机制会使得同时同步速度更快,占用的资源更少;
可靠性是通过DD报文三次握手形成two-way、序列号加一机制和LSACK确认LSU中的LSA内容方式实现的。
6、OSPF的度量方式
OSPF是接口敏感性协议,接口敏感是因为ospf是依据接口建立的,度量值计算的时候应该是某接口的度量值cost=参考带宽/实际带宽
更改cost的两种方式:
1、直接在接口下配置
2、修改参考带宽,(所有路由器都需要修改,确保选路一致性)
一般情况下,OSPF根据接口的带宽自动计算其链路开销值,也可以通过ospf cost命令直接修改接口开销值。
一个AS内的所有OSPF路由器应使用相同的bandwidth-reference值
在万兆链路和千兆链路混合使用的场景下,按照接口度量值cost的计算规则,会出现以下情况: 链路带宽相差大,GE和FE链路的cost都是1。
为了防止cost值不准,我们需要将参考带宽设置为最大带宽,从而调整OSPF的路由选路变为符合实际应用场景的ospf拓扑场景。
[Huawei]ospf 1
[Huawei-ospf-1]ban
[Huawei-ospf-1]bandwidth-reference ?
INTEGER<1-2147483648> The reference bandwidth (Mbits/s)
[Huawei-ospf-1]bandwidth-reference 10000
Info: Reference bandwidth is changed. Please ensure that the reference bandwidth
that is configured for all the routers are the same.
开销值改变之前:
![](https://img.haomeiwen.com/i14535918/231ede6d7c2c95ab.png)
开销值改变后:
![](https://img.haomeiwen.com/i14535918/6059c917ebf4e4ea.png)
网友评论