OSPF Router-LSA详解
帧中继环境下DR和BDR的选举
1、DR和BDR在同一网段而不是同一区域,因为在同一区域里面可能会存在多个DR,多个BDR;DR和BDR是接口的概念。
2、在NBMA网络环境中一般是不能通过组播去建立邻居关系的,在NBMA环境中如何通过组播去建立邻居关系?
需要把网络类型改成点到多点,会从接口发送组播报文,需要将PVC修改一下:
需要开启伪广播:
开启brocast以后,帧中继也是支持组播和广播
加broadcast关键字,更改网络类型,R2上可以有正常路由条目,和算法是有关系的。
或者把网络类型改成点到多点:
改成点到多点网络类型,是不会选举DR和BDR的,只是通过单播的方式:点到点的方式去维护邻居关系。
横杠:表示接口的状态机是点到点(网络类型是点到多点):
点到多点、非广播网(帧中继、ATM非广播网的 环境,低速链路)
网络类型 hello timer dead timer DR/BDR选举
广播 10 40 有
非广播网 30 120 有
点到点 10 40 无
点到多点 30 120 无
虚链路 无 无 无
点到多点非广播(cisco) 30 120 无
结论:由于DR和BDR的选举会造成DR会通告2类LSA,造成SPF算法错误 ,所以才引申出一个点到多点的网络类型去解决这个问题。
*******************************************************
OSPF LSA(LSA在OSPF里面是一个最重要的内容)
LSA:链路状态通告,不同的LSA通告不同的内容
LSDB:在链路状态数据库保存的是不同类型的LSA
有了LSA以后,才可以执行SPF算法,计算一个最短路径
ASBR:将Rip、Eigrp重分发进OSPF的话,它的角色就是ASBR
ASBR:自治系统边界路由器(如果将一些外部路由重分发进OSPF,这样的设备就是ASBR)
ABR:区域边界路由器,连接了多个区域
OSPF常用的LSA?(R/S)
1类LSA(Router LSA) :
由谁通告:所有配置OSPF的设备;
传递范围:本区域内通告
2不会将 1的1类LSA传递到3中,但可以在本区域内传递的;最终,在这个区域的所有设备都会有这条1类LSA
通告的内容:通告所有宣告进OSPF的链路信息
【分解实验】31:01
show ip ospf database //查看LSDB
Router Link states:1类LSA
ADV Router:通告路由器
Age: age时间-LSA的一个老化时间;LSA的 最大老化时间:3600秒;
Seq#序列号:0X 80 00 00 02 有4个字节,1个字节8个比特,2的32次方比特
checksum:对LSA的 一个校验
Link count:在这个LSA里面,通告了几条链路信息
show ip ospf database ? //查看各种LSA
为什么router-id不能重复?
因为LSA通告的时候,会标识这个LSA是由谁通告的,而标识者就是自己的Router-id。
show ip ospf database router 12.1.1.1 //加router参数,后见指定一个链路状态ID,实际上这个链路状态ID等于自己的Router-ID
LSA的头部内容:
1类LSA的内容:
R1#show ip ospf database router 12.1.1.1
OSPF Router with ID (12.1.1.1) (Process ID 1)
Router Link States (Area 0)
LS age: 331 \LSA的保存时间,老化时间为3600S, LSA的更新时间为1800S。
Options: (No TOS-capability, DC)
LS Type: Router Links \ 1类LSA
Link State ID: 12.1.1.1 \1类LSA中LS ID等于发送者的Router-id
Advertising Router: 12.1.1.1 \LSA通告者的Router-id(填充LSA通告者的Router-id)
LS Seq Number: 80000002 \LSA序列号为32个bit,第一个比特代表符号(1=负数 0=整数),同时用到线性增长和棒棒糖算法。每个LSA更新序列号都会加1,这样来表示每个LSA都是最新的
Checksum: 0xCF25
Length: 36
Number of Links: 1
Link connected to: a Transit Network 链路类型 -LINK类型
(Link ID) Designated Router address: 12.1.1.2
(Link Data) Router Interface address: 12.1.1.1
Number of TOS metrics: 0 服务类型
TOS 0 Metrics: 1
如何去比较一个LSA的新旧?(大体流程)
1.用LSU去通告LSA,判断这个LSA是否在LSDB里面?
2.如果在的话,比较序列号,看序列号是否一致?
如果一致,Ignore LSA;如果 不一致,看这个序列号是否大于本地保存的一个LSA?如果 大于,接收,替换掉本地保存的LSA;如果不是,继续将LSA发给我的邻居
3.如果这条LSA不在LSDB里面,需要将这条LSA添加到LSDB,并发送LSACK,去泛洪LSA,给邻居,后续去运行SPF算法做一个计算
1类LSA中其实用31bit去表示序列号,如果到达最大序列号,会重复执行最小序列号,开始重新执行算法,这种算法是棒棒糖算法
增长方法:线性增长
32个bit位里面,其中的31bit是代表序列号的,第一个bit位代表正负,1为负数,0为正数
最小的序列号十六进制数:0x80000001 = 1000 0000(80)
-0000 0001
-ffff ffff
00000000
7f ff ff ff
OSPF序列号增长需要100多年用完
LSA序列号用到两个算法:(1)线性增长 (2)棒棒糖算法
checksum:对LSA做一个哈希,保证LSA的可靠性,防止窜改
链路类型有4种:
LINK类型 LINK-ID LINK-DATA
Transit DR接口IP地址 本接口IP地址
Poinit-to-point(P2P) 邻居的Router-id 本接口IP地址
Stubnet 网络前缀地址 掩码地址
Virtul-link 虚链路 邻居的Router-id MIB的接口ID(本接口IP地址)
//看OSPF里面的LSU报文
Do Not Age:如果这个比特位置位,1,这个LSA永远不老化
Flags:只有在routerLSA里面才包含,如何知道网络中是 虚链路/ASBR/ABR - V / E /B
注:在Router-LSA中包含3个flag位。
1、Vbit 标识虚链路
2、Ebit 标识是ASBR
3、Bbit 标识是ABR
在OSPF中的序列号如何判断LSA的新旧?
(收到一条LSA之后需要和我的LSA做个比对,用新的LSA去代替旧LSA)
1、比较序列号,序列号越大越新。
2、如果序列号一样,比较checksum值,越大越新。
3、如果checksum一样,比较LSA AGE,如果LSA AGE等于MAX AGE(3600)为最新。说明这条LSA是需要马上被老化掉的
4、如果LSA AGE不等于MAX AGE,需要运行Maxage diff算法,比较接收到的LSA和本地保存的LSA的AGE时间差,如果时间差大于15分钟,LSA AGE越小越新,如果小于15分钟则认为是一样的,忽略。
1.R4转发时延设为500s,经过R2加500,经过R3加500s,变为1000s
,约等于16分钟
2.R3到R4的时间1000多s,而R4到R3约为2秒
3.现在LSA age> max age 15分钟,R4到R3的LSA会变为新的替换掉R3到R4的 LSA
【实验演示】1:21
2类LSA(Network LSA):
3类LSA(Network summary LSA):
4类LSA(ASBR summary LSA):
5类LSA (AS External LSA):AS外部的LSA
6类LSA:组播的LSA,用于MSPF
7类LSA(NSSA LSA):
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">