-
OSPF(IP封装 协议号89)
OSPF基本原理
运行链路状态协议(包括OSPF)的路由器,首先建立邻居关系,然后交互链路状态信息LSA(拓扑信息、路由信息)。LSA会被泛洪到整个区域,使每台路由器对网络拥有一致认知。区域中所有路由器将LSA存储到本地链路状态数据库LSDB中,然后每台路由器独立使用Dijsk算法,得到一棵以自己为根、无环的最短路径树,即知道了到达网络各个节点的最佳路由。
- OSPF协议号89(IP报头中)
- 224.0.0.5 / FF02::5 所有OSPF路由器
- 224.0.0.6 / FF02::6 所有OSPF DR/BDR
OSPF路由器的角色
- 内部路由器(Internal Router,IR):所有接口处于一个OSPF域的路由器。R1、R4、R5
- 区域边界路由器(Area Border Router,ABR):接入多个区域路由器(因为OSPF区域必须与area0相连,所以ABR至少有一个接口位于area0)。R2、R3
- 骨干路由器(Backbone Router,BR):位于area0的路由器,包裹area0的ABR。R1、R2、R3、R6
- AS边界路由器(AS Boundary Router,ASBR):OSPF自治区域边界的路由器。R6
LSA类型
作用 |
产生设备 |
泛洪区域 |
|
LSA1 Router-LSA |
“自我介绍”,描述本路由器拓扑+路由 |
ALL |
区域内泛洪 |
LSA2 Network-LSA |
描述MA网络邻接关系(P2P没有LSA2) |
DR |
区域内泛洪 |
LSA3 Network-sum-LSA |
区域间路由 |
ABR |
仅在一个区域* |
LSA4 ASBR-sum-LSA |
描述ABR到ASBR的拓扑 |
ABR |
仅在一个区域 |
LSA5 AS-external-LSA |
描述AS外部的路由 |
ASBR |
所有区域(除了Stub、NSSA) |
LSA7 NSSA LSA |
NSSA区域描述AS外部的路由 |
NSSA ASBR |
NSSA区域(NSSA的ABR会将LSA7转为LSA5注入area0) |
*仅在同一区域,注:
area1中产生的路由由ABR2向area0内泛洪(泛洪区域为area0)
这些路由又通过ABR R1,向area2内泛洪(泛洪区域为area2)
LSA的Ad R、泛洪范围
Ad R 泛洪范围 作用
LSA1 所有ospf R 本区域 描述自身拓扑信息、Stub网段信息
LSA2 DR 本区域 描述一个MA网络的拓扑
LSA3 ABR 区域间 描述其他区域的路由信息
LSA4 ABR 区域间 描述到达其他区域ASBR的拓扑(配合LSA5)
LSA5 ASBR ospf域 描述ospf域外路由信息
LSA7 NSSA ASBR NSSA 描述NSSA区域外部路由信息
Router-ID
[R] ospf 1 router-id 1.1.1.1
RID选举规则:手动配置 > 最先配置的IP
默认RID=0.0.0.0(全局RID,抢占),非0的RID不抢占
- 修改Router-ID后需要重启ospf进程<R> reset ospf process
RID作用: 1. 标识一台ospf路由器,作为ospf的拓扑信息
2. DR/BDR选举、master选举
Router-ID冲突的影响
直连:无法建立ospf邻居/邻接关系
同区域非直连:导致SPF拓扑计算错误
区域间R与ABR、ASBR冲突:导致SPF拓扑计算错误
不同区域R冲突:可以正确通信(LSA3中的Advertise R=ABR),但不建议这么配
拓扑信息、路由信息
拓扑信息:邻居信息(Router-ID)。LSA1/2/4
路由信息:叶子信息(节点上的网段)。LSA1中的StubNet、LSA3/5/7
- 关于路由信息的Link-State ID:
同一种LSA,同一个Adv Router如果网络号一样、掩码不同,
则掩码最短的LSA,LS-ID=网络号
其他LSA的LS-ID=网段的广播地址
Eg. 同一个ASBR上引入了10.0.0.0/8、10.0.0.0/16、10.0.0.0/24产生3条LSA5
则, 10.0.0.0/8 LS-ID=10.0.0.0 //掩码最短的LS-ID=网络号
10.0.0.0/16 LS-ID=10.0.255.255
10.0.0.0/24 LS-ID=10.0.0.255
开销计算 = 100M/链路带宽
- 向上取整,1000M、100M链路,cost=1
[ospf] bandwidth-reference 1000
确认机制
- OSPF基于IP协议,IP协议不可靠(没有确认机制)
显式确认: 通过LSAck确认对方发来的LSU报文
隐式确认:
- Hello报文:首个Hello邻居列表=空,收到邻居Hello后填充邻居列表
- DD:邻居之间选出Master/Slave并互传DD报文。master规定DD SN,slave用DD SN回复,master再用DD SN+1传下一个,直至传完。
- 收到LSR/LSU后,回复LSU携带LSA Header(LS SN)做确认
- DD、LSR、LSU报文需要确认,路由器会维护重传列表,5s内没有收到确认,重传
OSPF三张表
- 邻居表 [R] display ospf peer
- 链路状态数据库LSDB [R] display ospf lsdb
- OSPF路由表 [R] display ospf routing
OSPF报文类型
- HELLO报文:周期性发送,发现、维持邻居关系
- DD报文:Database Description,描述本地LSDB摘要信息,用于两台路由器LSDB同 步
- LSR报文:请求对方LSA的报文,只有两台路由器成功交换DD报文后才会发送
- LSU报文:向对方发送需要的LSA 或者 主动泛洪新的LSA
- LSAck报文:确认收到LSA
OSPF报文头部
Version: OSPFv2=2 OSPFv3=3
Type: 1=HELLO 2=DD 3=LSR 4=LSU 5=LSAck
Length:OSPF报文总长度,包括报文头
验证类型(Au Type): 0=不验证 1=明文验证 2=MD5认证
认证数据(64bit): 0=不含验证信息
1=明文密码
2=Key ID或MD5或SHA256的验证数据信息,Hash验证数据在OSPF报文末尾(因为放不下)
HELLO、DD、所有LSA中Options字段
DN:MPLS VPN场景下,PE在VRF中生成LSA3/5/7发给CE时,DN置位。用于CE双归PE防环
E =1 普通区域(能接收LSA5)
N/P =1 (Totally)NSSA
E=N/P=0 (Totally)Stub
HELLO报文
- 发现、建立、维持邻居关系
- 目的地址:224.0.0.5
- Hello周期: 广播、P2P 10s
NBMA、P2MP 30s
Network Mask:发送HELLO报文接口的网段掩码(掩码不同不能建立邻居)
Hello Interval:发送HELLO报文的时间间隔(Hello/Dead时间不一致不能建立邻居)
Options:标志位
Rtr Pri: DR优先级(默认为1),若该值为0则不参与DR/BDR选举
Router Dead Interval:邻居失效时间(默认为4倍Hello Interval)
Neighbor:邻居列表,用Router-ID标识
DD报文(单播)
Interface MTU:用于邻居MTU协商,华为默认不填充此选项=0
Options:可选项
I位:Initialization起始位, I位=1标识第一个空DD报文
M位:More位,1=后续还有DD报文,0=最后一个DD报文
M/S位:Master/Slave,交换DD报文的路由器需要确定主从关系(Router-ID大=master),Master=1
DD Sequence Number:DD报文序列号
LSA Headers:本路由器LSDB中的LSA头(DD报文不传输完整的LSA)
LSR报文(单播)
LSA三元组(LS Type、LS ID、Ad R)唯一标识一条LSA
LSU报文
LSU携带多个LSA
Numbers of LSAs:报文中所含LSA的数量
LSAck报文
LSA Headers:OSPF通过多个LSA头部对收到的多个LSA做确认
LSA Header
Link-State Advertisement
LSA封装关系:
IP头 |
OSPF头+LSU |
LSA头+LSA |
LS Age:LSA产生后经过的时间,单位为s。若最高位=1,则LSA用不老化。LSA每秒LS Age+1;LSA存放在LSDB中,LS Age+1;LSA经过一台路由器LS Age+1。LS Age最大值=3600s。
LS Sequence Number:LSA的序列号(序列号越大,LSA越新)
- LS SN一般用不完,如果用完会重置,导致路由震荡并重新收敛
LS Checksum:校验和(不包括LS Age,因为随时在变)
Length:LSA总长度,包括LSA头部
- LSA最大生存时间= 3600 s(1小时)
LSA周期泛洪时间= 1800 s(半小时)
- LSA三元组:LS Type、LS ID、Ad R
LSA的新旧
本地始发的> LSA SN↑ > checksum↑ > LS Age
LS Age: 1. 两条LSA时间间隔超过15min,则LS Age↓被认为更“新”
2. 两条LSA时间间隔在15min内,被认为一样“新”,保留先前收到的
3. 特殊LS Age=Max Age=3600s,用于强制更新LSA并立即过期该LSA
- 通常, LSA SN相同,校验和就相同
- 如果全部一样,就优选本地的(不会更新,以防路由震荡)
LSA的撤销
1: Stub路由撤销,SN+1
2: MA中部分邻居撤销,网段路由SN+1
MA中全部撤销,向其他MA中发3600s
4: 3600s(取决于ASBR产生的E置位的LSA1撤销)
3/5/7:3600s(一条LSA只携带一条路由)