链路状态(link state)路由算法:
利用最短路径算法(例如:Dijkstra最短路径算法)求出一个节点(源节点)到所有其它节点的最短路径。
(Dijkstra算法可参考如下:点击打开链接 点击打开链接)
利用这些最短路径上的下一个节点作为下一跳得到源节点的转发表(路由表)。
OSPF协议(open short path first)采用链路状态路由算法,他可能是在大型企业使用最广泛的内部网关协议(IGP)。
OSPF协议的简单描述:
- 周期性的收集链路状态,并扩散给AS中的所有路由器;
- 用收到的链路状态建立整个AS的拓扑结构图;
- 利用Dijkstra算法计算到AS表中所有网络的最短路径;
- 利用这些了路径上的下一跳建立路由表。
问:一个OSPF路由器通常使用什么算法来求到所有目的地的最短路径?
答:Dijkstra算法
把网络转变成图:
链路状态通告(Link State Advertisement)
- N1和N2是多路访问网络,例如:以太网
- N3为点到点网络,例如:ppp
对于每个中转网,要选举一个直连路由器作为其指定路由器(designated router, DR)
如果图中点到点网络没有配置IP地址,则不要节点N3
例:下图的OSPF网络中,R1~R5的router LSA是什么?
链路类型取值:
1 Point-to-point network
2 Link to transit network
3 Link to stub network
从R1:
到(to:) | 开销(metric) | 链路类型(link type) |
N1 | 6 | 3 |
N2 | 10 | 2 |
从R2:
到 | 开销 | 链路类型 |
N5 | 5 | 1 |
N2 | 10 | 2 |
R5 | 5 | 1 |
从R3:
到 | 开销 | 链路类型 |
N2 | 10 | 2 |
N3 | 3 | 3 |
从R4:
到 | 开销 | 链路类型 |
N2 | 10 | 2 |
N4 | 5 | 3 |
N6 | 6 | 1 |
R5 | 6 | 1 |
从R5:
到 | 开销 | 链路类型 |
N5 | 4 | 1 |
R2 | 4 | 1 |
N6 | 7 | 1 |
R4 | 7 | 1 |
N2的Network LSA是什么?
从N2:
到 | 开销 |
R1 | 0 |
R2 | 0 |
R3 | 0 |
R4 | 0 |
R5的路由表是什么?
目的 | 开销 | 下一跳 |
N1 | 20 | R2 |
N2 | 14 | R2 |
N3 | 17 | R2 |
N4 | 12 | R4 |
N5 | 4 | - |
N6 | 7 | - |
OSPF协议的详细描述:
- 发现邻居:OSPF路由器每10s(Hello Inverval)向邻居发送Hello分组。如果40s(Dead Interval,4 times hello interval)都收不到邻居发来的Hello分组,则把到邻居的链路标记为失效。多路访问网络采用多播(224.0.0.5,all OSPF routers)发送Hello分组。一个Hello分组包含优先权、已知的邻居(收到过Hello)、DR和BDR。
- 完全相邻:在发现邻居之后,OSPF路由器将与邻居交换链路状态数据库中的LSA,请求得到更新的或者没有的LSA。在与邻居的链路状态数据库变得完全一样时,他们就处于完全相邻状态(fully adjacency)。
- 生成LSA:每30分钟或链路变化时,每个OSPF路由器会生成router LSA,中转网的DR会生成network LSA。
- 扩散LSA:产生的LSA立即封装为Update分组,被可靠地扩散出去(需要认证)。每次产生的LSA的序号会加1.序列号越大表示越新。若通过收到多个LSA,由发出此LSA的路由器ID(发通告路由器),链路状态和序列号唯一确定。通过序号,也可以防止扩散形成回路,第二次1收到来自相同的发通告路由器、相同LSA类型和相同序号的LSA将丢弃它。
- 收集LSA:路由器收集到LSA之后,用新LSA替换链路状态数据库中旧LSA。如果一个LSA在60分钟(max age)没有被更新,它将从链路状态数据库移除。
- 计算最短路径:当链路状态数据库被改变时,OSPF路由器将利用Dijkstra算法计算到所有网络的最短路径。
- 建立路由表:利用得到的最短路径产生路由表。
OSPF开销:
开销必须为大于 0 的整数, reference-bandwidth 的默认值为 100 。
修改reference-bandwidth的方法:#ospf auto-cost reference-bandwidth 1000
数据库同步:
DROther把所有DD多播(224.0.0.6)给DR和BDR, DR单播确认, DR把新的DD多播(224.0.0.5)给该网络的所有OSPF路由器。对于无DR网络, OSPF路由器直接多播(224.0.0.5)DD和LSU给所有OSPF路由器。
路由器ID:
- OSPF协议采用路由器ID(Router ID,RID)标识每一个路由器
- 路由器ID由以下方法得到:
- 使用直接配置的RID(#router-id id)
- 所有所动环回接口中最大的IP地址
- 所有活动物理接口中最大的IP地址
- 除非路由器重启、所选接口故障或关闭或IP地址改变、重新执行了router-id命令, RID将保持不变。
LSA定时器:
- 每10秒(Hello Interval)向邻居发送一次Hello, 4倍的hello interval(Dead Interval, 40秒)没有收到邻居的Hello就认为邻居失效。
- 每30分钟会产生新的LSA,最小间隔时间为5秒。
- 每个LSA都有年龄字段(age),发给邻居时被设置为0,在链路状态数据库中age会不断增长,增长到Max Age(默认为60分钟)时LSA被标记为失效。失效的LSA会被扩散到整个AS,令AS的所有路由器把该LSA从链路状态数据库中移除。
- 存储在链路状态数据库中的LSA每10分钟会被计算校验和,如果有错将被删除。
- 接收来自邻居的LSA的最小间隔时间为1秒。
- 计算最短路径的最小间隔时间为10秒。
问:如果一个OSPF路由器的链路没有变化,它每隔多长时间会扩散它的LSA?
A.60分钟
B.30分钟
C.30秒
D.60秒
答:B
OSPF分组格式:
OSPF分组类型:
1--Hello Packet
2--Database Description Packet
3--Link State Request Packet
4--Link State Update Packet
5--Link-State Acknowledge Packet
224.0.0.5 -- All OSPF Router
224.0.0.6 -- OSPF DR or BDR
OSPF可以分区,至少要有一个区,即主干区(0.0.0.0)
LS Update分组:
- 发出通告路由器ID为产生本分组的路由器ID。
- 链路状态ID用于区分不同的。 Router LSA的链路状态ID与发出通告路由器ID相同,Network LSA的链路状态ID为网络号。
- LS类型:
1--Router LSA
2--Network LSA
3--Network Summary LSA
4--ASBR Summary LSA(E1和E2)
5--AS-External LSA
6--Group Membership LSA
7--NSSA External LSA(N1和N2)* type1~4都被限制在本区扩散。
Router LSA:
10.1.1.1的router LSA:
- V位:本路由器为虚链路的一个端点。
- E位:本路由器为一个ASBR。
- B位:本路由器为一个ABR。
- 长度: OSPF主体的长度,即LSA头的长度加上LSA主体的长度。
Network LSA:
网络10.4.7.0/24的Network LSA :
OSPF的特点:
- 所有的OSPF消息都要认证(防止恶意入侵)
- 路由表中允许多个相同开销的路径存在(RIP只允许存在一条路径),可以实现负载均衡。
- 对于每条链路,允许同时有多个(TOS)开销。
- 多播OSPF (MOSPF)使用与OSPF相同的链路状态数据库(思科路由器不支持)
-
在大型路由选择域中 OSPF 可以 分区 。
-
比 RIP 收敛快而且更安静 。
-
实现起来 更复杂 ,需要 更多的计算开销 。