OSPF工作原理
OSPF
####1、链路状态协议工作原理简介####
架构介绍:花瓣形状,骨干区域为0区域,其他区域1、2、3都围绕区域0相连,
及个别的特殊情况,可以通过虚拟链路来连接
信息传递:向邻居发送是自己知道的所有状态的链路状态信息
路由标识:Router-ID是网络上唯一用于标识的一台路由器,线网用路由器的环回口
来配置Router-ID,这边的地址是32位的公网IP地址,如果没有标,通过物理口
来确认
区域规划:划分多个区域是为了优化网络性能,
####2、Router-id及DR选举原则####
#选举DR、BDR是为在广播多路访问中减少连接关系的建立,优化性能
#默认Router-ID最大是DR,第二大是BDR,其他是Drother
#DR一旦被选定就不会被抢占,
#Drother会通过224.0.0.6向DR和BDR通告网络状态信息,DR会通过
224.0.0.5向所有邻居通告信息
####3、OSPF协议5种报文分析####
OSPF5种分组
| 1、Hello | 发现邻居并建立和维护邻居关系 (Hello报文)
| 2、DataBase Description | 检查所有路由器的LSDB是否同步(数据库描述报文DBD)
| 3、Link-State Request | 向另外一台路由器请求特定的链路状态记录 (链路请求报文LSR)
| 4、Link-State Update | 发送被请求的链路状态记录 (链路回应报文LSU)
| 5、Link-State Acknowledgment | 对其他类型的分组进行确认 (链路确认报文LSA)
######名词解释####
1、传送的LSA link status advertisement 链路状态通告,包括拓扑信息
具体包括:网段的前缀 掩码 连接的路由器的哪些接口 直连哪些路由器
LSA分为7中类型
某些包含的是拓扑信息 但是有些包含的是路由信息
2、LSDB 他是LSA的的集合 链路状态数据库
对此进行spf 算法 得到spf 树 (基于cost代价)再得出最优的路由 并将其加入到路由表中
3、既支持vlsm 可变掩码、又支持 cidr(无类别域间选路)
4、封装
layer2| ip |ospf| fcs
直接封装到IP报头内 上层协议号为89 eigrp为88
详解
一、hello发送周期分为10s和30s两种,hello hold的时间为发送时间*4即40s或120s
二、dbd数据库描述报文 包含lsa的报头 即告诉邻居路由器 本地的lsdb中包含哪些LSA信息
同步lsdb过程中如果没有此描述可能会发送重复的LSA 造成资源的浪费导致低效LSA中除了拓扑
或路由信息的载荷外还有LSA的报头也叫LSA的摘要,报头中包含此LSA的标识,从而避免发送重复的LSA信息
三、路由器请求邻居有但是本地没有的LSA,以保证lsdb一致,根据交互的dbd,
将没有的LSA的报头放在LSAR中,表明需要的LSA
四、根据上面的一条 将邻居请求的LSA信息 放在LSU中由本地路由器发送给邻居
LSU包含完整的LSA信息
五、LSACK为确认机制 由OSPF定义的确认机制
ospf定义了两类的确认 一种为显式的确认 另一类为隐式的确认(基于序列号的确认机制)
前者收到一个报文 针对此报文 生成一个单独的确认报文
(只有ospf支持确认)后者收到一个报文 使用相同的报文再发送回来 序列号设置为一致 既传输了信息 又做了确认
OSPF包头格式:
| Link Header | IP header | OSPF Packet Types | Link Trailer |
Protocol ID Number 89 ==== OSPF
OSPF Packert |
---|
version number |
version number : OSPF-V2 OSPF-V3
Router ID :
Area ID :
Authen-tication : 0 不认证、1明文 、2 MD5
####4、OSPF协议7种状态分析####
| | 112.18.17.1/30 112.18.17.2/30 | |
| 路由A |--------------------------------------------------------------------| 路由B |
| | | |
E0 E1
【Down State】
I am route ID 112.18.17.1/30, and I see no one
-------- ---------------
|Hello|----------》》》--------------------------------------------------------》》》----------|to 244.0.0.5|
-------- ---------------
E0 E1
【Init State】
Router B
Neighbor list
112.18.17.1/30 init E1
I am route ID 112.18.17.2/30, and I see 112.18.17.1
-------- -------
| to A |----------《《《--------------------------------------------------------《《《---------|Hello|
-------- -------
Router A
Neighbor list
112.18.17.2/30 init E0
【Two-Way State】 ###此时只是建立邻居关系,还没有建立连接关系
########################################################################################
第一个DBD不包含LSA头部吗,只是RID,
1:init=0 不是第一个DBD
M:more=1表示后读DBD
MS:master=1表示主
| | 112.18.17.1/30 112.18.17.2/30 | |
| 路由A |----------------------------------------------------------------- --| 路由B |
| | | |
E0 E1
【Exstart State】
I will start exchange because I have router ID 112.18.17.1
--------
| DBD |----------》》》--------------------------------------------------------》》》---------------
--------
No ,I will start exchange because I have a higher router ID
-------
-------------------《《《--------------------------------------------------------《《《---------|DBD|
-------
选主从的目的,是谁先发DBD,这和选DR、BDR是两个概念
【Exchange State】
Here is a summary of my LSDB -------
-------------------《《《--------------------------------------------------------《《《---------|DBD|
-------
-------- Here is a summary of my LSDB
| DBD |----------》》》--------------------------------------------------------》》》---------------
--------
########################################################################################
| | 112.18.17.1/30 112.18.17.2/30 | |
| 路由A |----------------------------------------------------------------- --| 路由B |
| | | |
E0 E1
-------- Thanks for the information ---------
|LsAck|----------《《《--------------------------------------------------------》》》----------|LsAck|
-------- ---------
【Loading State】
-------- I need the complete entry for net work 112.18.16.0
| LSR |----------》》》--------------------------------------------------------》》》---------------
--------
Here is the entry for network 112.18.16.0 ------
-------------------《《《--------------------------------------------------------《《《---------|LSU|
------
-------- Thanks for the information
|LsAck|------------》》》--------------------------------------------------------》》》----------
--------
【Full State】
####5、OSPF协议6种LSA分析####
1类:所有OSPF路由器都会产生,只在区域内传播
2类:DR产生,只在区域内传播
3类:ABR产生,在相邻的两个区域相互传播
4类:ABR产生,向和ASBR不在同一区域的其他区域传播,用于表示ASBR
5类:ASBR产生,向整个OSPF协议区传播,用于描述另一个协议域的路由信息
7类:NSSA区域中的ASBR产生,用于向NSSA区域通告外部路由
#########################################
1类LSA:OSPF路由域内每一台路由器都会产生的LSA,这是LSA通告的基础,该LSA包内列出了,
本路由器的所有参与OSPF进程的端口的IP地址与掩码与该接口Metric值,他的Link-ID与Adv Router都是
发出该LSA的路由器的Router-id,该LSA只会在发送路由器所在的区域内扩散,也就是说他的作用范围是本区域
2类LSA:此类LSA只会在网络拓扑是多路访问的情况下产生(MA或NBMA),这类LSA包内,列出了这个多路访问的掩码,
使用Router-id的方式,描述这个物理网段内有多少台路由器与DR保持联系,Link-id为DR所属的接口的IP地址,
Adv Router为DR所在的那台路由器的Router-id
3类LSA :3类LSA由BDR发出,存在这类LSA的主要原因是1类2类只能在域内域内和传播,无法跨区域,这类数据包内,
列出了网段,,掩码,出接口到达目标网段的Metric值,所以3类LSA相当于将1,2类LSA打包,通过ABR传输至其他区域,
因为这类LSA一定是由ABR发出的,所以这类LSA的Adv Router为发出发出该数据包的ABR的Router-id,
Link-id为区域外的网段,比如说192.168.10.0192.168.20.0,可以使用show ip ospf database summary 192.168.10.0来查询这条3类LSA明细信息
?
4类LSA:该类LSA并没有什么很特殊的意义,数据包中用Router-id的方法,,定位了ASBR与ASBR所在的区域的ABR,
使得其他其他路由器可以找到ABR的位置,可以使用show ip ospf database asbr-summary 命令查看4类LSA明细,
4类LSA的Link-ID为ASBR,Adv Router为ASBR所在的区域的ABR的Router-id,该类LSA会在ASBR不在的区域扩散,
也就是说ASBR所在的区域不会存在4类LSA,如果ASBR同时也是BR,那么在ASBR所在的骨干区域与非骨干区域将不会产生4类LSA,
只会在别的区域产生,因为ASBR所在的区域,其他路由器可以通过1类LSA找到它,而不是通过4类LSA
5类LSA:这类LSA数据包内列出了外部路由网段,掩码,Metric值,route tag,以及发布类型(E2/E1)Link-ID为目标网段,
Adv Router则为ASBR的Router-id,需要注意的是,这类LSA不会与区域关联,也就是说这类LSA是在整个OSPF路由域内传播
7类LSA··:如果要学习这类LSA,,那么一定要先了解NSSA区域,这里·简单的复习一下nssa区域的概念,该区域不接受5类LSA,
只接受1,2,3类LSA,但是这就存在一个问题,如果在nssa区域内有一台ASBR怎么办,因为NSSA区域不接受5类LSA,
所以当nssa区域内有一台ASBR存在的时候,ASBR会发出7类LSA,然后在NSSA区域内泛洪,ABR收到7类LSA后会将7类转换成5类,
然后向整个OSPF路由域泛洪,7类LSA的包内容与5类LSA一样,都含有网络号,掩码,Metric值,发布类型,
其中Link-ID为外部网络的网络号,Adv Router为ASBR的Router-id,还需要注意一个点,当NSSA区域存在ASBR时,
该区域的ABR会同时兼任ABR与ASBR的角色,所以区域0是不会有4类LSA的
本文地址:https://blog.csdn.net/longtiandao/article/details/107161177