文章目录
-
-
- [0. 路由分类](#0. 路由分类)
- [1. OSPF介绍](#1. OSPF介绍)
-
- [1.1 概念](#1.1 概念)
- [1.2 报文类型](#1.2 报文类型)
- [2. 邻接关系的建立](#2. 邻接关系的建立)
-
- [2.1 邻居关系的建立](#2.1 邻居关系的建立)
- [2.2 邻接关系的形成](#2.2 邻接关系的形成)
- [2.3 ospf状态机](#2.3 ospf状态机)
- [3. DR与BDR](#3. DR与BDR)
-
- [3.1 为什么要有DR和BDR?](#3.1 为什么要有DR和BDR?)
- [3.2 DR和BDR的选举原则](#3.2 DR和BDR的选举原则)
- [4. ospf的配置](#4. ospf的配置)
-
- [4.1 内部优先级](#4.1 内部优先级)
- [5. 问题](#5. 问题)
-
- [5.1 三层环路如何解决?](#5.1 三层环路如何解决?)
- Ref
-
0. 路由分类
- 直连路由
- 静态路由:需要管理员手动配置的路由
- 动态路由
- IGP(internal Gateway Protocol)内部网关协议,运行在
AS
内部;主要协议有:RIP、OSPF、ISIS、EIGRP(思科) - EGP(External Gateway Protocol)外部网关协议,运行在
AS
之间
- IGP(internal Gateway Protocol)内部网关协议,运行在
1. OSPF介绍
OSPF: Open Shortest Path First 开放最短路径优先
1.1 概念
LSA
: Link State Advertcment; 链路状态通告,主要包含了网段信息。
LSDB
:Link State DataBase, ospf路由器中来存储链路状态信息的数据库。
RID
: router ID, 在ospf网络中唯一标识一台路由器。
主要工作流程:
ospf路由器通过将LSA
信息泛洪,获得整个ospf网络的链路状态信息,进而形成各自的LSDB
。根据形成了的LSDB
,使用SPF
算法生成一颗最短路径树;最终通过路由计算,比较路由表中的表项,添加到路由表中。
1.2 报文类型
- hello报文
- DD(Database Description)报文
- LSR(Link State Request)报文
- LSU(Link State Update)报文
- LSACK(Link State Acknowledgment)报文
2. 邻接关系的建立
在ospf网络中,两个路由器间要完成LSA
信息的交互,首先就要先进行邻接关系的建立。
邻接关系的建立分为两个阶段:
- 邻居关系的建立
- 邻接关系的形成
2.1 邻居关系的建立
邻居关系的建立是通过hello 报文完成的。
- 路由器A向路由器B发送Hello报文,报文中表明自己并没有发现B。
- 路由器B收到报文后意识到邻居A的存在,在发往路由器A的报文中声明这一点。路由器B的状态由Down变为Init。
- 路由器A收到路由器B的报文,自己意识到了邻居的存在。在B发来的报文中B意识到A的存在。A直接进入2-way状态。但A需要再发一个Hello报文, 在报文中声明自己知道了B邻居的存在。
- 路由器B收到报文,知道路由器A了解到自己的存在。路由器B进入2-way状态。
Hello报文除了负责邻居关系的建立,还负责维护邻居关系(保活)。
Hello报文10s发送一次(Hello Time), 如果在40s内没有收到对端的Hello报文,则认为邻居关系失效,变为Down状态。
2.2 邻接关系的形成
邻接关系的形成分为两个阶段,第一阶段主要是获取LSDB的目录,相互之间了解缺少对方的哪部分报文;第二阶段进行真正的LSA链路数据表项之间的请求交换。
第一阶段开始,会发送两个空的DD报文进行主从选举,RID大的成为主路由器。选举完成之后,开始交互真正的DD报文,真正报文在交互过程中,从路由器的DD报文序列号使用主路由器发过来的序列号,主路由器的DD报文序列号使用从路由器的序列号加一。这样一种确认的机制叫作隐式确认,它保证了DD报文之间交互的可靠性。
第二阶段就是真正的链路信息交换了,这里用到的是显示确认机制。
从路由器向主路由器发送LSR(链路信息请求)报文,主路由器发送带有链路信息LSU(链路信息更新)报文给从路由器;最后从路由器收到LSU后再发给主路由器对于这一条链路信息的确认LSACK报文。
不断重复上面的过程,直到从路由器跟主路由器的LSDB同步了。
2.3 ospf状态机
3. DR与BDR
DR(Designated Router): 指定路由器
BDR(Backup Designated Router): 备份指定路由器
DR other: 非DR各BDR的其他路由器
3.1 为什么要有DR和BDR?
对于没有DR和BDR的网络中,要知道整个网络的链路信息,两两路由器之间就需要形成邻接关系。
如果网络中有n台路由器,在没有DR和BDR的网络中, 则需要建立n(n-1)/2对邻接关系;而如果是在DR和BDR的网络中,其他路由器只需要各DR和BDR之间建立邻接关系,只需要建立2n-3对邻接关系即可。
而建立邻接关系的第二阶段会进行LSDB的交换,这部分报文比较大会浪费链路带宽;因此对DR other 之间的路由器只需建立邻居关系而不交换路由信息,因此可以大大节省链路带宽。
3.2 DR和BDR的选举原则
如果DR由于某种故障而失效,则网络中的路由器必须重新选举DR,并与新的DR同步。这需要较长的时间,在这段时间内,路由的计算有可能是不正确的。
为了能够缩短这个过程,OSPF提出了BDR(Backup Designated Router)的概念。BDR是对DR的一个备份,在选举DR的同时也选举出BDR,BDR也和本网段内的所有路由器建立邻接关系并交换路由信息。当DR失效后,BDR会立即成为DR。由于不需要重新选举,并且邻接关系已建立,所以这个过程非常短暂,这时还需要再重新选举出一个新的BDR,虽然一样需要较长的时间,但并不会影响路由的计算。
DR和BDR的选举原则:
- 首先比较优先级,优先级范围0~255, 优先级数值越大越优先。
- 如果优先级相同,则比较RID, RID越大越优先。
- 如果网络中新增一台优先级更高的路由器,其不会被选为新的DR路由器, DR不能被抢夺,我们称之为DR的稳定性原则。
- 如果一台DR故障,则BDR直接成为新的DR, 然后在DR other中再选举一个新的BDR。
- 如果一台路由器的优先级为0,则路由器不具备选举权,它一定是DR other路由器。
- DR和BDR基于接口选举,基于网段选举。
4. ospf的配置
ospf进程号,这里只使用进程1
sh
ospf 1 route-id 1.1.1.1
ospf是分区域的,区域0是核心区域。
sh
area 0
直连网段宣告
sh
network 10.1.12.0 0.0.0.255
network 192.168.1.0 0.0.0.255
ospf在接口宣告了网段信息后就会向相应的直连网段发送Hello
报文,开始邻居关系的建立。
精确宣告
sh
network 10.1.12.2 0.0.0.0
还可以在接口下进行宣告
sh
ospf enable area 1
查看ospf邻居信息
sh
display ospf peer brief
查看ospf接口信息
sh
display ospf interface g0/0/1
ospf的hello时间是能改的, 但一般不改。两台路由器之间hello时间不同无法建立邻居关系。
sh
ospf timer hello
修改优先级
sh
ospf dr-priority 0
4.1 内部优先级
如上面的图所示,如果路由器AR1与AR2之间有两条路由;一条是ospf的路径(10.1.12.0/24),另外一条是静态路由(10.1.21.0/24)。
如果我们将静态路由的优先级设置为10,也就是与ospf的默认优先级一致。我们会发现最终路由表上的是ospf的这条路径。
这是因为路由器在比较完前缀和外部优先级后,继续比较内部优先级,
这所谓的内部优先级其实就是协认的默认优先级的大小。
ospf的默认优先值为10,静态路由的默认优先值为60,因此ospf更优先,因此加入路由表的是ospf的路径。
更加具体的在前面的路由器工作原理那里有提及,在这里实际解释内外优先级。内部优先级就是协议默认优先级,外部优先级就是可以配置的优先级。
5. 问题
5.1 三层环路如何解决?
- IP报文中有TTL字段,每次经过一个路由器都会减去一;TTL值为0的时候,路由器就会丢弃该包
- 路由协议设计也会防止环路的产生。比如ospf会通过SPF算出到目标网段的路径,另一方面ospf有区域划分,非核心区域之间不直接相连也能阻止环的产生。