旨在碎片时间学习碎片知识,不搞长篇大论。
1.ospf包的类型
1.Hello 2.DBD 3.LSR 4.LSU 5.LSAck
OSPF包分为5种类型:
1.Hello: 默认时间间隔10s或30s ,路由死亡时间间隔为hello的四倍 40s 或120s (后面详细写网络类型的hello间隔时间)。 Hello用来建立邻居以及维护邻居关系的,如果4倍的hello时间收不到邻居发来的hello,则认为邻居down掉。
2.DBD:数据库描述 里面包含了LSA的摘要
3.LSR:包含了LSA的详细信息,向其他路由器请求缺少的LSA信息。
4.LSU:包含完整的LSA条目。一个LSU包含多个LSA。用来应答LSR的请求,发送完整的LSA信息。
5.LSAck:用来对LSU的报文做确认的。
2.LSA传递时处理规则
当一台路由器收到一个LSA他是怎么处理的呢?
首先路由器会判断:链路数据库中有该条目吗?
{如果没有,
A: 则把该条目加入LSDB中,并且以达则兼济天下的心态把此信息泛洪给其他路由器,自己再运行SPF算法形成新的路由条目加入路由表。
如果有,
则比较序列号是否相同?
{如果相同
则忽略该LSA;
如果不相同,
则比较哪个序列号更大?如果该条目序列号更大则转到A点;如果自己的大则把自己的LSU发送给对方。
}
}
3.LSA中的序列号
一台路由器收到LSA后怎样确定,该条目是不是最新的LSA呢?比较序列号的大小以确定。
LSA的序列号是一个有符号数,它的最左边一位被置为1。它的范围是0x80000001----0x7FFFFFFF。序列号越大LSA越新。
OSPF每隔30分钟对LSA都会刷新一次,序列号都会+1.试想一下每个30min刷新一次,这样的序列号总会有用完的时候。所以序列号的+1不是一个线性+1.而是类似于棒棒糖型一样的计算。
1.线性规则:首先线性的序列号计算路由器的LSA泛洪总会达到最大值。如果达到最大值一台路由器被重启之后他的邻居仍然会是比他大的值,所以要等到所有的LSA老化,或者都同时重启路由器。试想这是不可能的。
2.循环规则:当LSA的序列号达到最大值以后,再重新开始,试想一下如果x>y,这时候x是最新的LSA条目,如果在循环后会变成x
3.棒棒糖规则:
棒棒糖序列号规则,假设有两个序列号a、b和一个序列号空间n,当且仅当:
1.a < 0 且 a < b ,或
2.a > 0 ,a < b ,且 ( b - a )< n/2 或
3.a > 0,b > 0 ,a > b ,且 (a - b ) > n/2
认为b比a更新。
4.OSPF建立邻居的过程
首先路由器AR1的处于down状态,如上图(ospf包的类型)他首先以组播的方式发送hello报文到224.0.0.5
这时候AR2也同样通过ospf接口发送hello报文。
----------------------此时AR2路由器收到AR1的hello并且把它加入邻居表进入init状态--------------
AR2回复AR1hello, AR1在回复的hello报文中看到了自己的路由器ID。把AR2加入到自己的邻居表。
-----------------------此时AR1路由器处于two-way状态-------------------------------------------------
当AR1回复了AR2后,AR2看到了自己的路由器ID也处于two-way状态。此时如果在p2p网络中不需要选举DR/BDR。如果在MA网络中会在40s内选举出DR/BDR
这时有个问题到底谁先发送DBD呢?谁作为主(master)谁作为从(slave)呢?
AR1发送fistDBD 来比较谁的路由器ID大,如下图:
I位:置1代表是第一个报文
M位:置1代表后续还有其他更多DBD
M/S位:置1代表都认为自己是master
所以值为0x07
当两个路由器选举出主从关系后,按照主路由器的序列号交互报文。
---------此时两台路由器处于Exstart状态------------
两台路由器开始交互自己的LSDB
---------此时两台路由器处于Exchenge状态-------
交换LSR和LSU已补充自己的LSDB
----------此时两台路由器处于Loading状态---------
邻居处于完全邻接状态
--------此时两台路由器处于Full状态-----------
5.DR/BDR
DR监听224.0.0.6
BDR监听224.0.0.5和224.0.0.6
DRother监听224.0.0.5
本文关键词:OSPF邻居建立过程 LSA 华为路由器 华为交换机 DR BBR 网络工程师
感谢您的阅读,您的“关注”是我最大的动力。本文完于20211208,by[仰观星辰]