Open Shortest Path First,开放最短路径优先
OSPFv2
OSPF的术语
链路(Link):当一个接口加入OSPF进程,就被当做是OSPF的一条链路。
链路状态(Link-State):包括接口的IP、子网、网络类型、链路花费、链路上的邻居等。
路由器ID(Router ID,简称RID):RID是一个用来标识路由器的IP地址,可以在OSPF路由进程中手工指定;如果没有指定,路由器默认选择回环接口中最高的IP作为RID;如果没有回环地址,路由器使用所有激活的物理接口中最高的IP作为RID。
邻居(Neighbor):两台或多台路由连接在一个公共的网络上,如两台路由通过串行线路相连,多台路由通过以太网相连。
邻接(Adjacency):邻接是两台路由器之间的关系,OSPF只与建立了邻接关系的邻居共享路由信息。
区域(Area):OSPF通过划分区域来实现分层设计,跨越两个或两个以上区域的路由被称作ABR(Area
Border Router,区域边界路由)。所有的区域都和“Area 0”相连,“Area
0”被称作骨干区域,骨干区域路由器具有整个自制系统中所有路由条目,LSA的扩散仅限制在区域内,通过划分多个区域可以减小LSA扩散过程中对硬件的负担。
指定路由器(Designated Router,简称RD):当OSPF链路被连接到多路访问的网络中时,需要选择一台指定路由器(DR),每台路由器都把拓扑变化发给DR和BDR,然后由DR通知该多路访问网络中的其他路由器。
备用的指定路由器(Backup Designated Router,简称BDR):当DR发生故障的时候,BDR转变成DR,接替DR个工作。
花费(Cost):OSPF中使用的唯一度量值,使用链路的带宽计算得来。
LS路由协议概念
1. 更新方式-组播更新
224.0.0.5 (所有的router)
224.0.0.6 (只有DR/BDR)
注:为减小多路访问网络中OSPF流量,OSPF会选择一个 指定路由器(DR)和一个备 份指定路由器(BDR)。当多路访问网络发生变化时,DR负责更新其他所有OSPF 路由 器。BDR会监控DR 的状态,并在当前DR发生故障时接替其角色。
2. 更新内容---LSA——链路状态通告。
存在于链路状态数据库(LSDB)中支持等开销负载均衡,默认4条LSA,最大6条(1 2 3 4 5 7)
LS&DV路由协议区分
3. 传播的内容
A. DV传播的是自己的路由表
B. LS传播的是链路状态
4. 传播的范围
A. DV传播的是下一个邻居
B. LS是一个区域内传播
5. 更新方式
A. DV依照传闻更新
B. LS依照LSA,触发更新
OSPF的三张表
1. 邻居表
1、Show ip ospf neighbor
2. 拓扑表(数据库表)
1、Show ip ospf database
3. 路由表
1、Show ip route ospf //查看路由表中ospf协议的路由
2、Show ip ospf route //查看ospf宣告的所有路由表
OSPF的四种路由器
1. 内部路由器:
所有端口在同一区域的路由器。
2. 主干路由器:
具有连接主干区域端口的路由器。
3. 区域边界路由器(ABR):
具有连接多区域端口的路由器,一般作为一个区域的出口。ABR为每一个所连接的区域建立链路状态数据库,负 责将所连接区域的路由摘要信息发送到主干区域,而主干区域上的ABR则负责将这些信息发送到各个区域。
4. 自治域系统边界路由器(ASBR):
至少拥有一个连接外部自治域网络(如非OSPF的网络)端口的路由器,负责将非OSPF网络信息传入OSPF网络。
OSPF的五个报文
1. Hello
建立和维护OSPF路由器间的邻接关系,在多路访问中选择DR和BDR。
2. DBD(Database Description,数据库状态描述包)
DBD包是发送端对自己链路状态数据库的一个简短描述,接收路由器根据接收到的DBD包对比自己的链路状态数据库,检测发送端和接收端的链路状态数据库是否同步。
3. LSR(Link-State Request,链路状态请求包)
接收端可以发送LSA来请求接收到的DBD中的某些详细信息。
4. LSU(Link-State Update,链路状态更新包)
LSU用来更新OSPF路由信息,回复LSR请求。
5. LSAck(Link-State Acknowledgement,链路状态确认)
当收到一个LSU,路由器发送LSAck确认。
抓包测试
OSPF的七个状态
1. DOWN:
OSPF初始状态,还没有开始交换信息。
2. Init:
交换信息初期,表示已经收到了邻居的Hello报文,但是报文中没有列出本路由的RID,也就是说对方还没有收到本路由发出的Hello报文。
3. Two-Way:
双向阶段,双方都收到了对方发送的Hello报文,建立了邻居关系。在多路访问的网络中,两个接口状态是DROther的路由器之间将停留在此状态,其他情况将继续转入高级状态。在此状态下的路由器是不能共享路由信息的,想共享路由信息,必须建立邻接关系。
4. Exstart:
准备开始交换阶段,双方通过Hello报文决定主从关系,最高RID的路由将成为主路由,最先发起交换。主从关系确立后进入下一个阶段。
5. Exchange:
开始交换阶段,路由器将本地的”路由状态数据库(LSDB)”用”数据库描述(DBD)”报文来描述,然后发给邻路由。如果这个阶段中的路由收到不在其数据库中的有关链路的信息,那么在下一个阶段中将请求对方发送该路由条目的完整信息。
6. Loading:
加载阶段,路由器通过发送”链路状态请求(LSR)”,来向邻居请求一些路由条目的详细信息。邻居则会使用”链路状态更新包(LSU)”来回复LSR请求,收到邻居发回的LSU后,再发送LSAck向发送LSU的路由进行确认。
7. Full:
完全邻接状态,Loading结束后,路由器之间就变成了”Full adjacency”。
OSPF的LSA
邻居与邻接的区别
邻居关系是指,当双方收到对方的hello报文的时候,报文里面的参数(hello time.dead interval , area id.authentication ,mask等)一致的时候,并且邻居关系为2-way的时候,这个就可以成为是建立了邻居关系,但是还不是邻接关系。
邻接关系是指在建立的邻居关系之后继续发送DD,LSR,LSU等报文,最终双方的LSDB达到同步之后,邻居状态为FULL时,才成为邻接关系。
OSPF Router ID 选举规则
手动配置 router-id x.x.x.x
默认使用最大的已激活的回环口做RID
若没有回环口,则默认选择最大激活的物理接口的IP做RID
实验测试
OSPF DR与BDR的选举规则
OSPF路由器选择网络优先级最高的路由器为DR,接口优先级次高的路由器为BDR,以太网接口默认的优先级都为1。
如果优先级相同,将使用RID最高的为DR,次高的为BDR。
注意:不支持抢占性
实验测试
1、Int f0/0
2、Ip ospf priority x
3、Clear ip ospf process \\清理ospf的进程
OSPF度量值计算(开销/消耗)
链路cost = 10^8/带宽=100M/带宽(单位)
串行线路的带宽是1.544M 串行线路的花费=100M/1.544≈64 (取整,且不四舍五入)
快速以太网的带宽是100M: 快速以太网线路花费=100M/100M=1
实验测试
OSPF的区域
骨干区域
非骨干区域
a. 普通区域
b. Stub区域
c. 完全stub区域
d. Nssa区域
e. 完全nssa区域
OSPF的特殊区域
1.STUB区域
如果我们想让OSPF非骨干区域学习不到OSPF外部的路由 末梢区域
如果设置为stub区域,4类和5类LSA消失不见,并且多出来一条3类默认了路由的LSA。
1、router ospf 1
2 、area 1 stub \\将区域配置成stub区域 会过滤掉4类和5类LSA,该非骨干区域上所有路由器都要配置,不然邻居会断开
2.完全STUB区域
如果我们想让OSPF非骨干区域学习不到OSPF其他区域和OSPF外部的路由
如果设置为stub no-summary区域,其他区域的3类,4类和5类LSA消失不见,并且只剩一条3类默认了路由的LSA。
1、router ospf 1
2、area 1 stub no-summary \\将区域配置成完全stub区域,过滤掉3类LSA,只配置在ABR上,其他的路由器,都必须配置stub
3.NSSA区域
但是stub区域内不允许引入外部路由,因为我们规定不管什么末节区域内部都不能存在4类5类的LSA
所以我们定义了另外一种特殊区域NSSA,定义了一种新的LSA,7类LSA其实和5类LSA作用一样,但是只存在于NSSA区域,一旦7类LSA到达了本NSSA区域的ABR上,ABR会将7类转换成5类来继续传递。
如果设置为nssa区域,4类和5类LSA消失不见,并且没有多出来一条3类默认了路由的LSA,需要手动加上,并且是7类的默认路由。
1、router ospf 1
2、area 1 nssa \\后面这个不加在ABR上,就会让整个nssa区域没有默认路由
4.完全NSSA区域
如果我们想让OSPF非骨干区域学习不到OSPF其他区域和OSPF外部的路由
1、router ospf 1
2、area 1 nssa no-summary \\这个no-summary只要加在ABR上就可以,并且会产生默认路由
OSPF 虚链路
在网络规划之初,一切都是完善的,但是随着发展,一定会出现扩展的需求。比如在某个非骨干区域上发生了区域分裂,导致某个非骨干区域无法和骨干区域相连,就需要虚链路
OSPF提供的虚链路
1、router ospf 1
2、router-id 8.8.8.8
3、area 2 virtual-link 4.4.4.4 \\2是需要跨越的区域号,4.4.4.4是对方的loopback接口地址,必须还要是Router-ID
通过建立虚拟通道可以建立Area 0的邻居关系
1、interface Tunnel0
2、ip address 192.168.84.4 255.255.255.0 \\隧道的IP地址
3、ip ospf 1 area 0 \\隧道放在area 0
4、tunnel source Ethernet0/2 \\隧道的入口,往往是自己的出接口
5、tunnel destination 192.168.48.8 \\隧道的目的地,一定要保障可达
OSPF的默认路由
1、router ospf 1
2、default-information originate always \\always加上可以不检查本地是否有0.0.0.0
OSPF链路的验证
OSPF使用HMAC来保证数据的完整性,源认证。HMAC并不能保障数据的机密性。
信息安全的三要素:CIA
机密性(Confidentiality)指只有授权用户可以获取信息。
完整性(Integrity)指信息在输入和传输的过程中,不被非法授权修改和破坏,保证数据的一致性。
可用性(Availability)指保证合法用户对信息和资源的使用不会被不正当地拒绝。
接口认证
1、Router(config-if)# ip ospf message-digest-key key-id md5 key
2、Router(config-if)# Ip ospf authentication message-digest
区域认证
如果给area 0加区域认证,别忘了虚链路
1、Router(config-if)# ip ospf message-digest-key key-id md5 key
2、Router(config-router)# area 0 authentication messae-digest
虚链路认证
1、area 1 virtual-link 3.3.3.3 authentication-key CISCO
虚拟通道认证
1、ip ospf message-digest-key 1 md5 cisco
OSPF的被动接口
Passive-interface 接口
如何加快收敛速度
修改hello和dead时间 //dead=4hello
下放缺省路由
有静态的时候
IP route 0.0.0.0 0.0.0.0 lo0
default-information originate
没有静态的时候
Default-information originate always
OSPF 支持手动汇总,默认不支持自动汇总
一般在ASBR/ABR上进行汇总
OSPF实验
需求
1,按照如图所示配置好路由器的接口地址。在每台路由器上必须建立loopback0接口。
2,配置好OSPF,区域划分如图所示,并且ospf的router-id必须为loopback0的地址。最终实现全网互联。
3,在R1、R2、R3、R4之间的多路访问网络里面,必须是的R1成为DR,R2成为BDR。在其余的链路里面必须保障OSPF邻居的快速建立,而不需要经过wait timer。
4,在R1和R2上建立loopback10,接口的地址为同样的100.1.1.1/32来模拟外网的接入。要求R1和R2都向内网通告一条缺省路由,正常的时候所有的路由器通过R1的缺省路由来访问外网,当R1无法正常工作的时候,通过R2来访问外网。(需要在R7上使用traceroute来测试路线。)
5,area 2为特殊区域,该区域无法学习到ospf其他区域的路由。R7的loopback0的地址通过redistribute connected subnets命令进入ospf。(观察R5和R6上的7.7.7.0路由的来源,思考原因。)
6,在R3上创建loopback1-3,地址为172.16.x.1/24(x为1-3)。并且宣告进OSPF区域1,要求在area 0只能看到一条汇总的路由172.16.0.0
7,area 0需要启用明文区域认证,R3和R5之间明文链路认证,R4和R6之间密文链路认证。
8,禁止area 2内的192.168.57.0/24和192.168.67.0/24被其他区域学习到。此刻思考区域0里面关于7.7.7.0的路由消失的原因,并且需要解决7.7.7.0消失的问题。