Bootstrap

lec8 - 路由协议RIP与OSPF

lec8 - 路由协议RIP与OSPF

博客中的很多内容来自PPT和学长博客:
EagleBear2002 的博客
SpriCoder的博客

1. RIP

1.1. RIP 的历史

  • RIP v1 被认为是一种内部网关协议,IGP(interior gateway protocol)

    • RIP v1是基于距离矢量的,它与邻居路由器定时广播发送整个的路由表,默认的定期交换时间是30秒
    • RIP是基于跳数的,15 就是跳数的最大值
  • RIP v1 能够 (load balancing) 负载均衡,在6个等代价的路径上进行负载均衡

  • RIPv1是有下列的局限性:

    • 他不会在更新中添加子网掩码信息(有类路由)

    • 他会以255.255.255.255的形式进行广播,只能传播给 邻居 而不是 相邻的路由器(效率受限制)

    • 它不支持身份认证

    • 不可以支持VLSM(variable length subnet mask)或者CIDR(classles interdomain routing)无类域间路由

    • VLSM和CIDR之间有什么关系??

      这里有一篇博客讲述了一些例子
      计算机网络:子网划分、子网掩码、CIDR 、路由聚合相关计算详解_ip地址子网掩码聚合-CSDN博客

      VLSM是将一个大型网络分配成多个不同掩码的子网的过程,对应了我们的子网划分题目;

      但是CIDR可以用来进行地址分配和路由聚合,对应了我们的路由聚合,使用最长前缀匹配方法减小路由表的条目数量

1.2. RIP的配置

  • router rip 命令选择 RIP 作为路由协议。
    network 命令分配基于 NIC 的网络地址,路由器将直接连接到该网络地址。

    如何理解基于NIC的网络地址??
    可以这样理解,network可以用来确定,究竟是那些端口需要运行rip协议,他们要进行更新和发送,那么大概也是基于接口网络进行选择在那些接口上运行

1.3. RIP v2

  • RIP v2 是 v1的改进版本:
    • 使用 hop count,跳数指标,是距离矢量协议
    • 使用 holddown timers 抑制计时器来避免路由环路 - 默认时间是180s
    • 使用到水平分割来避免路由环路
    • 使用 16 跳及以上就是不可以达到

1.4. v1 对比 v2

  • v2支持无类路由,但是v1不支持
  • v2会再进行路由表更新的时候会发送子网掩码信息
  • v2支持 (prefix routing)前缀路由,同一个网络中的不同子网可以有不同的子网掩码(VLSM)
  • v2需要身份认证才确定是否继续进行接收
  • v1 广播 255.255.255.255, 但是v2采用 组播 地址224.0.0.9,只有RIP接收,可以提高效率

1.5. RIP v2的配置

  • router rip:表示启动某一个协议

  • network命令导致三个功能:

    在这里插入图片描述

    不得不说,这里的三个功能的说法很不清晰,因为不是考试重点这里暂时略过,后期可能补全

2. OSPF

2.1. 概述

  • OSPF是一种链路状态路由协议,open shortest path first
  • 网络工程任务组(IETF, Internet Engineering Task Force)的多个标准对此进行了描述
  • OSPF正在成为首选的IGP,内部网关协议,因为具有很好的可扩展性 scalable

2.2. 路由信息

  • 链路的状态 是对接口及其相邻路由器的关系的描述
  • 连接状态的集合形成了一个 link state database 链路状态数据库,也叫拓扑数据库
  • 路由器使用 SPF(dijkstra shortest path first)算法来构建SPF树,并且每个路由器把自己作为这棵树的 (这也是显然的,dijkstra算法本来就是求出一个源点到其他点的最短路径)
  • 路由器通过 SPF 树计算最佳路径,然后选择最佳路径放在路由表中

2.3. OSPF 与 RIP 比较

在这里插入图片描述

  • OSPF:事件驱动,利用 带宽 等作为指标
  • subdivide a network into areas 可以把网络进一步分成区域,适合大型网络
  • 更快速的收敛
  • equal-cost multipath 支持同代价的多路

2.4. OSPF特征

  • 特点:更健壮,而且可扩展性

  • 在这里插入图片描述

    关于区域划分的问题:

    1. 将大的网络分成多个area,每一个area都只是与 area0 (backbone)相连接,保证area没有回路
    2. 最多只有两层,
    3. 链路database主要是在一个area内部同步

2.5. OSPF一些术语

  • 连接(Link):两个设备之间的物理链路

  • 邻居(Neighbors):相邻的路由器

  • 链路状态(Link-State):物理链路的信息,包括路由器连接关系、通过什么接口、链路带宽、网络类型(点对点、多路复用)等,不同网络类型处理代价不同(两种网络类型:点对点,多路复用)

  • 代价/费用(Cost):不同网络链路处理的时候的代价,和链路带宽相关,成反比关系,一般是固定值除以带宽(计算的时候切切看清)

  • 自治系统Autonomous System,AS):多个 Area 形成一个自治系统

  • Neighbours 必须在一个 Area 中,Neighbour 之间交换拓扑数据库(Topology Databases)当中存的是 link-state,也就是说,neighbor是相对于同一个area的概念,每个 area 都有自己的 拓扑数据库

  • 一个 Area 中获得全部 Link-State 后计算 Tree,生成表

  • 指定路由器(Designated Router,DR):只有在 多路复用 的链路下使用,被选举出来

    为什么是多路复用?

    kimi:在这里插入图片描述

  • 备用指定路由器(Backup Designated Router,BDR):如果 DR 坏了,再次选举会出现问题,如果 DR 损坏,BDR 立即成为 DR,目的是提高交换效率

2.6. OSPF域

在这里插入图片描述

  • 域 使用32位数进行标识,可以IP格式0.0.0.0,也可以是十进制数字0;
  • OSPF 不会多与 两层层次结构
  • 在多区域 OSPF 网络中,要求所有区域都连接到区域 0(主干)。
  • 注意,Area 是对端口的划分,即一个路由器的不同端口可以属于不同 area。(在图中可以看出,实际上ABR就是不同端口分给了不同区域,而且一定是会分给 area0 的)
  • ABR(Area Border Router):区域边界路由器,有一定的约束,一个路由器最多连接3个路由器
  • 单个的Area中最多50个路由器,否则就会计算量太大

2.7.OSPF的五个步骤和七个状态

  • OSPF使用邻居的邻接关系来获取网络的全部信息

  • 五个步骤:(比较抽象,后面会进一步展开)

    1. 建立 adjacency relationships 邻接关系
    2. 选出 DR 和 BDR(如果需要,多路复用的时候才用到)
    3. 发现路由
    4. 选择合适的路由
    5. 维护路由信息
  • 七个状态

    1. 关闭(Down)
    2. 初始化(Init)
    3. 双向操作(2Way)
    4. 预先启动(Ex Start)
    5. 交换(Exchange)
    6. 加载(Loading)
    7. 完成(Full)

    来自kimi:
    在这里插入图片描述

2.8. 串起OSPF的一些知识点

2.8.1. 选择DR BDR

OSPF的网络类型包括

  • 广播多路复用,比如以太网
  • 点对点
  • NBMA(non Broadcast Multi-access)非广播多路复用

在这里插入图片描述

2.8.2. DR 与 BDR
2.8.2.1. 为什么选出DR,BDR

在这里插入图片描述

  • 实际上可以理解成,把 O ( n 2 ) O(n^2) O(n2)的连接数量降低到 O ( n ) O(n) O(n)

  • 再次强调,只有多路复用的实现方式需要DR BDR

  • 连接方式:每个路由器都会与DR BDR 形成邻接关系

  • DR 使用 224.0.0.5组播地址 发送给 所有运行OSPF的路由器

  • 为了确保DR/BDR看到所有路由器发送的链路状态,使用的是 224.0.0.6 组播地址

2.8.2.2. 多路复用中的OSPF
  1. Giga/Fast/Ethernet,FDDI,Token Ring
  2. 几个 Area 有几个 DR 和 BDR(是在不同 Area 上)
  3. DR 和 BDR 归属于区域
2.8.3. OSPF报文
FuctionName
Hello哈喽Hello
Database Description数据库描述DBD
Link-State Request链路请求LSR
Link-State Update链路更新LSU
Link-State Acknowledgement链路确认LSAck
2.8.3.1. hello协议
  • 当路由器在某个接口上启动OSPF协议之后,他会发送hello数据包并且每隔一段时间就发送数据包
  • govern(管理)hello报文交换的规则就叫 hello 协议
  • Hello 数据包一定在 224.0.0.5 的地址上
  • 默认情况下,广播多路访问和点对点网络上每 10 秒发送一次 Hello 报文
  • 在连接到 NBMA 网络的接口(例如帧中继)上,默认时间是 30 秒

Hello 报文的 Type 字段设置为 1

在这里插入图片描述

2.8.4. 怎么选举DR/BDR
  • 优先级 + router ID,最大的就是DR,其次是BDR
  • 优先级范围:1 - 255,默认是1
  • Router ID 怎么来
    • 如果设置了环回IP地址,那么就用它
    • 如果没有,就是用 物理接口 的最高IP地址
    • 如果接口都故障,那么路由器必须重新建立邻接关系并重新转换LSA(re-establishing adjacency and readvertising LSA)

2.9. OSPF操作的完整步骤

在这里插入图片描述

  • 一开始的状态是 Down State
  • 然后发送 Hello 报文(Init State)
  • B 收到 A 的报文(收到报文一定是邻居):Hello 报文的 TTL 是 1,所以不会跨路由器传播,收到即丢弃
  • 收到后,B 也会发送自己的 Hello,然后 A 收到后进入 Two Way 状态

在这里插入图片描述

  • 准备交换数据库(Exstart state)
  • 首先确认主方(发送方)、从方(接受方),保证数据有序,简单就是谁的 Router ID 高
  • Router ID 高的(主方)发送自己 DBD 报文,从方对主方发送的 DBD 接受处理并发送

在这里插入图片描述

  • 交换完成后,各自检查自己是不是有全部的信息
    • 如果有完整的信息,则发送 LSAck
    • 如果发现有没有的,则发送 LSR,等待 LSU(整个链路的详细信息,不是 LSA)来进行学习,之后收到完成后发送 LSAck

2.10. 回顾OSPF操作

2.10.1. 建立邻接关系
  1. 路由器每隔一段时间发送一次 hello 数据包,Hello 报文的 TTL 是 1,表明不会跨路由传播
  2. 如果邻居被发现了:将邻居添加到邻居数据库
  3. 发现网络类型
    1. 如果是多路复用网络,进入 DR/BDR 选举过程,然后进入步骤 2
    2. 如果是点对点或点对多点网络,则不会举行 DR/BDR 选举过程,并跳过步骤 2
    3. 如果 hello 数据包标头中的 DR/BDR 字段已被占用(即 DR/BDR 对已经存在),则不会进行 DR/BDR 选举,并跳过步骤 2
  4. 如果对方的 DP/BDP 优于我的 DP/BDP,则接受对方的。
2.10.2. 选举DR/BDR
  1. 如果没有其他路由器联机,则该路由器将成为 DR。下一个要“启动”的路由器将是 BDR
  2. 如果多个路由器(两个或更多)同时联机,则
    1. 优先级最高的路由器成为 DR:优先级为零表示“从不 DR”
    2. 如果存在平局,则具有最高 Router ID 的路由器将成为 DR: Router ID 是最高的环回或接口 IP 地址
    3. 具有第二高优先级或 Router ID 的路由器成为 BDR
  3. 如果 DR 无效,则 BDR 变为 DR
  4. 然而
    1. 如果新的 OSPF 路由器以更高的优先级或 Router ID 加入网络,则当前的 DR 和 BDR 不会更改
    2. 仅当当前 DR 失败时,它才成为新的 BDR
2.10.3. 发现路由
  1. 这一步从 Ex Start 状态转换到 Full 状态
  2. 路由器确定“主/从(master/slave)”关系
  3. 多路复用网络中的 DR/BDR 交换 LSA,并且所有其他 DR 将其 Type 2 DBD 发送给 DR/BDR
  4. 如有必要,路由器可以通过发送请求更多信息的 LSR 进入负载状态:所有路由器必须在“加载状态”中等待,直到完全更新请求的路由器
  5. 路由器现在进入Full状态
2.10.4. 选择适当路由
  1. 现在,将与网络上的所有其他路由器并行地计算 SPF 算法。
    1. 切记:在发生这种情况之前,所有路由器必须具有相同的链接状态数据库
    2. SPF 使用 Cost 作为指标
    3. SPF 将从其自身到目的地的每条路径的成本相加,并以路由器为根来构建树
    4. OSPF 然后在路由表中安装成本最低的路径:最多将安装 4 条等价路径以进行负载共享
2.10.5. 维护路由信息
  1. 常规的 Hello 交换是 OSPF 用于检测新邻居或故障(downed)邻居的机制
  2. 根据网络的类型,Hello 数据包以不同的默认间隔发送(确定对方是不是还好)
    1. 对于速度为 T1(1.544 Mbps) 或更高的链接,每 10 秒:广播多路访问和点对点链接
    2. 对于小于 T1 的链接,每 30 秒:非广播多路访问链接
    3. “死间隔” 是问候间隔的四倍。(如果在这样子对方还没有成功则对方死了)
2.10.6. 链路状态出现变化

在这里插入图片描述

  • Router A tells all OSPF DRs on 224.0.0.6(组播地址)

  • Event 触发交换:比如 A 连接的网段断掉了,否则不会有影响,只在有 event 发生时才会更新

  • A 使用 LSU(linkState update)告知DR
    在这里插入图片描述

  • DR tells others on 224.0.0.5

  • DR 通过 LSU 告知所有的路由器

在这里插入图片描述

  • 如果 B 连接了别的 Area,则继续进行交换

在这里插入图片描述

  • 所有的路由信息交换完毕后,同时更新路由表。

;