H3CNE--22.OSPF

OSPF

OSPF协议的产生有很大一部分原因是为了解决RIP的问题

RIP的缺陷

  • 最大跳数限制了网络规模
  • 以跳数为度量值无法准确判断最优路径
    • 假设一条跳数多,但是带宽更大的反而开销小的情况
  • 路由更新发送完整路由表消耗网络带宽
  • 手链速度慢
  • 协议会产生路由自环

OSPF定义

  • 开放式最短路径优先,基于链路状态特征
  • 工作在IP层,协议号89
    他的存在解决了上面RIP几乎所有的问题,跳数问题就是RIP的问题之一,OSPF换了一种度量方式就是链路状态特征的方式
    工作在IP层,只支持IP协议,不支持IPX协议

OSPF的工作流程

整体流程大概分为三步:

第一步:

建立邻居和邻接关系


1. 发送hello报文发现和建立邻居关系,组播地址224.0.0.5

当双方都配置好了OSPF后双方会发送一个hello报文,也叫做hllo报,用来打招呼,介绍自己是干嘛的,这个hello报文是通过组播发送的;这个组播地址是224.0.0.5,意味着只有配置了OSPF的路由器要监听这个地址,如果没有运行OSPF就收不到这个消息;所以把广播改成组播的好处就是可以避免一些不相关的人收到消息

成为邻居关系也要满足三个条件:

1). 双方接口处于UP状态

2). 双方接口IP地址在同一网段

3). 双方接口在同一区域

2. 选举DR/BDR,建立邻居关系

除了建立邻居关系外还要建立邻接关系,如果单纯只是邻居关系是走不到下一步的,邻居只能是单单住在隔壁的关系;邻居只是一种认识关系,还不算"好朋友"的关系,所以需要建立邻接关系;

似乎很麻烦,建立了邻居关系,还要建立邻接关系,感觉多此一举,实则不然,如果有以下情况:

每个路由器都配置了ospf,那么他们互相是邻居,如果直接发送路由,那么R3会收到从三台路由器发来的不同路由信息,然后就疯掉了,所以不可以直接发送

所以需要建立邻接关系,在建立玩邻居关系后,路由器之间会推选出一个路由器作为代表,算作指定路由器简称DR,所有路由会把自己知道的路由信息都告诉给DR,DR收集完信息后再把路由通告给网上的其他路由器

在选举DR路由器的同时还会选举出备用路由器叫做BDR,作用就是当DR挂了之后接替DR来工作

DR工作的时候:

1). DRother(指的就是既不是DR也不是BDR的路由器)与DR建立邻接关系

2).DRohter与BDR建立邻接关系

3).DR与BDR建立邻接关系

4).两个DRother之间保持邻居关系

选举的目的就是为了让整个网络的通信更加的有序

DR/BDR选举
  • 选举原因
    • 广播网络中使路由信息交换更加高速有序
  • 选举范围
    • 每条广播链路上都需要选举出一个DR和一个BDR
    • 并非是汇总所有配置OSPF路由之后再集体选举

意思大概是这样的,一个路由器在一个网段可能是DR,但在另外一个网段是BDR,一个路由器可以在不同网段是不同的角色,在每个网段都是要选举出DR和BDR的

如果两台路由器通过串口(S口)连接,那么他就是一个点到点电路(PPP)所以不需要选举出DR和BDR,因为点到点网络就他俩,没有第三个人所以不影响;

如果将中间的链接线换成以太网的双绞线,那么依旧是要选择DR和BDR的,因为这就是一个广播链路了,路由器也不知道这个链路有多少设备;

所以OSPF根本不看网段内有多少设备,而是看网络类型,通过判断是广播网络还是点到点网络来决定是否选举

  • 选举原则
    • 1.优先级数字大的优先
      • 优先级出厂默认值是1,可以手动改
    • 2.Router-id大的优先
  • Routher-id
    • 简称RID是用来标识路由器的身份
    • 产生方法:1.要么通过手动配置一个ipv4地址作为RID,这里配置IPV4不一定需要这个地址真实存在,只是作为一个标识
    • 2.选举
      • 1.在所有环回口中选举IP地址最大的作为RID
      • 2.在所有物理接口中选举IP地址最大的作为RId
    • 建议手动配置一个本地环回口的IP地址作为RID
第二步

邻接路路由器之间交换链路状态信息,实现区域内链路状态数据库同步


  • 相关概念
    • 链路状态通告
      • LSA(英文简写)
      • 用来描述路由器的接口、路由条目的相关信息

例如上图,路由器有四个接口,假设都用OSPF宣告后,OSPF会将每个接口上宣告信息:IP地址,子网掩码,cos值,描述角色等信息的情报描述成一条LSA

邻接路由器不是给他传递路由,而是将自身的所有LSA都传递给它;和RIP的区别就是:RIP是直接通告路由,那么收到的路由器就没有选择权,而是只能找对应通告路由的路由器来找到目的地;而OSPF是类似于传递的是地图,每个路由器最终会获得一份完整的地图,这样每个路由器想要到达目的地就自己选择怎么走,而不是再去找给他传递路径的路由器;上述的区别也是距离矢量协议和链路状态协议的区别

  • 链路状态数据库

  • LSDB

  • 存储本地所有LSA

  • 这就是前面提到了类似于地图的东西,方便每个路由器自己做路由选择

  • 工作流程有四步:
    • 1.向邻接路由器发送DD(数据库描述报文)报文,通告本地LSDB中所有LSA的摘要信息
    • 2.收到DD后,与本地的LSDB对比,向发对方发送LSR报文,请求发送本机所需的LSA
    • 3.收到LSR后,把对方所需的LSA的完整信息打包为一条LSU报文,发送至对方
    • 4.收到LSU后,向对方回复LSAck报文,进行确认
第三步

每台路路由器根据本机链路状态数据库,计算到达每个目的网段的最优路由,写入路由表

OSPF报文类型

  • Hello报文
    • 建立连接后,会每隔十秒再发一次,确认存货,超过四次没收到就判定对面挂了
  • DD报文
    • 数据库描述报文
    • 用于描述本地LSDB中所有LSA的摘要
  • LSR报文
    • 链路状态请求
  • LSU报文
    • 链路状态更新
  • LSAck报文
    • 链路状态确认

OSPF分区域管理

分区域的原因
  1. 加快收敛速度
    • 当某个设备挂掉后,网络从不稳定到稳定的过程叫做收敛
  2. 把网络故障隔离在区域内部
  3. 前面说过需要同步LSDB,所以如果区域过大就会导致同步过慢,如果分区就可以只让每个区域内的LSDB同步,减小工作难度
    那么此时就似乎出现了问题,似乎跨区域不能互通

但是这里其实多了一个新角色,叫做区域边界路由器,ABR,他会将某一个区域的LSDB汇总后统一发送给相邻的区域

路由器角色
  • IR
    • 内部路由器
    • 所有接口都处于同一个区域
  • ABR
    • 区域边界路路由器
    • 链接不同区域的路由器
  • ASBR
    • 自制系统边界路由器
    • 连接外部自制系统的路由器
      如果左上角的那个路由器连接的是其他自制系统,比如rip,那么他就是自制系统边界路由器
区域类型
  • 骨干区域
    • 只能由一个关区域,一般是区域0
    • 骨干区域必须是连续的
  • 非骨干区域
    • 除了骨干区域都叫非骨干区域
    • 非骨干区域必须连接到骨干区域
    • 两个非骨干区域的互通必须经过骨干区域
    • 这样做是为了区域之间防环,因为区域边界路由器是类似距离矢量路由协议,不加限制就会环

实验部分

实验拓扑如下:

配置IP

每段/32的ip地址是用来做router-id的,都配置给环回口,就是下面的l0

首先配置ip地址

复制代码
[R1]int g0/0
[R1-GigabitEthernet0/0]ip add 100.1.1.1 24
[R1-GigabitEthernet0/0]int l0
[R1-LoopBack0]ip add 1.1.1.1 32

[R2]int g0/0
[R2-GigabitEthernet0/0]ip add 100.1.1.2 24
[R2-GigabitEthernet0/0]int g0/1
[R2-GigabitEthernet0/1]ip add 100.2.2.2 24
[R2-GigabitEthernet0/1]int l0
[R2-LoopBack0]ip add 2.2.2.2 32

[R3]int g0/0
[R3-GigabitEthernet0/0]ip add 100.2.2.3 24
[R3-GigabitEthernet0/0]int g0/1
[R3-GigabitEthernet0/1]ip add 100.3.3.3 24
[R3-GigabitEthernet0/1]int l0
[R3-LoopBack0]ip add 3.3.3.3 32

[R4]int g0/0
[R4-GigabitEthernet0/0]ip add 100.3.3.4 24
[R4-GigabitEthernet0/0]int g0/1
[R4-GigabitEthernet0/1]ip add 100.4.4.4 24
[R4-GigabitEthernet0/1]int l0
[R4-LoopBack0]ip add 4.4.4.4 32

[R5]int g0/0
[R5-GigabitEthernet0/0]ip add 100.4.4.5 24
[R5-GigabitEthernet0/0]int l0
[R5-LoopBack0]ip add 5.5.5.5 32

中间框内就是area 0,左侧是area 1

R1上配置ospf,先进入ospf进程,如果不选数字,默认是1进程,然后指定router-id然后选择区域,左侧实在area 1区域

复制代码
[R1]ospf router-id 1.1.1.1
[R1-ospf-1]area 1
[R1-ospf-1-area-0.0.0.1]#这里进入0.0.0.1是区域号,是以ip地址形式展现的
[R1-ospf-1-area-0.0.0.1]net 100.1.1.0 0.0.0.255 #后面0开头的是反掩码,正名叫掩码通配符
[R1-ospf-1-area-0.0.0.1]net 1.1.1.1 0.0.0.0

掩码通配符的作用是基于ospf逻辑来的,因为ospf在宣告匹配的时候是一个个匹配的,0的部分是必须要匹配的,1的部分是不需要完全匹配的,计算方法一般是用全1减去子网掩码,但是有个小tips:在比较难算反掩码的时候,可以直接宣告对应接口的ip地址,然后反掩码接0.0.0.0来实现精准匹配

这里的环回地址一般是不用宣告的,他本身就不存在,所以宣不宣告都没有问题,但是工作中,一般telnet连接设备的时候都是连接环回口,这样方便连接,所以这里还是宣告一下

R2:

复制代码
[R2]ospf router-id 2.2.2.2
[R2-ospf-1]area 1
[R2-ospf-1-area-0.0.0.1]net 100.1.1.0 0.0.0.255
[R2-ospf-1-area-0.0.0.1]area 0
[R2-ospf-1-area-0.0.0.0]net 100.2.2.0 0.0.0.255
[R2-ospf-1-area-0.0.0.0]net 2.2.2.2 0.0.0.0

这里R2情况比较复杂, 左右两侧在不同的区域不能宣告错了,环回口的ip宣告一般可以随心选择,最好选择靠近骨干区域的

R3:

复制代码
[R3]ospf router-id 3.3.3.3
[R3-ospf-1]area 0
[R3-ospf-1-area-0.0.0.0]net 100.2.2.0 0.0.0.255
[R3-ospf-1-area-0.0.0.0]net 100.3.3.0 0.0.0.255
[R3-ospf-1-area-0.0.0.0]net 3.3.3.3 0.0.0.0

R4:

复制代码
[R4]ospf router-id 4.4.4.4
[R4-ospf-1]area 0
[R4-ospf-1-area-0.0.0.0]net 100.3.3.0 0.0.0.255
[R4-ospf-1-area-0.0.0.0]net 4.4.4.4 0.0.0.0
[R4-ospf-1-area-0.0.0.0]area 2
[R4-ospf-1-area-0.0.0.2]net 100.4.4.0 0.0.0.255

R5:

复制代码
[R5]ospf router-id 5.5.5.5
[R5-ospf-1]area 2
[R5-ospf-1-area-0.0.0.2]net 100.4.4.0 0.0.0.255
[R5-ospf-1-area-0.0.0.2]net 5.5.5.5 0.0.0.0

此时配置完成,可以在R2上查看邻居关系
[R2]display ospf peer

这就是他的两个邻居,后面的FULL表示进入了邻接状态,如果显示的是2-Way是表示还在邻居状态,但是在这个拓扑中不会存在邻居关系,因为除非是一个网段中存在多个路由器才会存在邻居关系

在R5上ping100.1.1.1,发现通过,配置成功

通过用[R5-ospf-1]display ospf routing可以查看ospf路由表

相关推荐
可乐鸡翅好好吃2 小时前
nRF52840 BLE 多服务开发中的 NRF_ERROR_NO_MEM 排查与解决实战
网络
老花眼猫2 小时前
数学艺术图案画-曼陀罗(一)
c语言·经验分享·青少年编程·课程设计
kevien_G12 小时前
Http协议
网络·网络协议·http
琪伦的工具库2 小时前
批量IP在线检测与警报工具使用说明:支持IP段与域名导入,并发ping轮询/声音告警/离线日志导出
网络·网络协议·tcp/ip
Deitymoon2 小时前
linux——TCP多进程并发服务器
linux·服务器·tcp/ip
M ? A2 小时前
Vue3+TS实战避坑指南
前端·vue.js·经验分享
观无3 小时前
Modbus RTU 与 Modbus TCP 温湿度采集
网络·网络协议·tcp/ip
智者知已应修善业3 小时前
【CD4022八进制计数器脉冲分配器】2023-5-31
驱动开发·经验分享·笔记·硬件架构·硬件工程
空中海3 小时前
3.4 状态同步与生命周期管理
android·网络