08 Routing Protocols:RIP and OSPF
- RIPv1/RIPv2
- RIP History
- Differences Between RIP v1 and RIP v2
- Configuration of RIP v2
- OSPF(single area)
- Link-state routing protocol
- Single-area OSPF concepts
- Single-area OSPF configuration
一、RIPv1/RIPv2
(一)RIP History
1. RIP的历史
- RIP v1被认为是一种无类别的内部网关协议(IGP)。
- 距离矢量协议 DVP:RIP v1是一种距离矢量协议,它以预定的间隔向每个邻居路由器广播其整个路由表。默认间隔为30秒。
- 跳数作为度量:RIP使用跳数作为度量,最大跳数为15。
- 如果目的地的跳数超过15,则认为该目的地不可达。
- 负载均衡 load balancing:RIP v1能够在多达6条等成本路径上进行负载均衡,默认情况下为4条路径。
- 规范:RIP最初在RFC 1058中指定。
- RIP v1的局限性
- 不发送子网掩码信息:RIP v1在更新中不发送子网掩码信息。
- 意味着只能支持类网络,必须用同样的子网掩码
- 广播更新:RIP v1以广播形式发送更新,地址为255.255.255.255。
- 只能发给邻居,不能通过路由器转发
- 不支持身份验证(authentication):RIP v1不支持认证。
- 安全隐患
- 不支持VLSM或CIDR:RIP v1无法支持可变长子网掩码(VLSM)或无类别域间路由(CIDR)。
- 不发送子网掩码信息:RIP v1在更新中不发送子网掩码信息。
2. RIP的配置Configuration
router rip
开始RIP路由过程(选择 RIP 作为路由协议)network network-number
分配基于 NIC(Network Interface Card)的网络地址,也就是说,路由器与哪些网络直接连接,就要配置对应的网络地址。- 例子:
1 | router rip |
(二)Configuration of RIP v2
1. RIP v2
- RIP v2是RIP v1的改进版本,具有以下特性:
- 距离矢量协议:使用跳数作为度量。
- 保持定时器:使用holddown timers防止路由环路,默认时间为180秒。
- 如果路由器在180s内没有接收到路由更新,它会认为路由不可用。
- 水平分割:使用split horizons防止路由环路。
- 无限距离:使用16跳作为无限距离的度量。
- 15 跳及以内可达;否则认为目标不可达
- 支持CIDR和VLSM
- 支持认证(Authentication)
- 使用多播而不是广播, 地址224.0.0.9
- 会发送子网掩码信息
2. RIP v2 的配置
router
命令启动路由过程。version 2
:表示启动 RIPv2- 直接使用 router rip 默认为 v1,一定要输入这个命令才能启动 RIPv2
network
配置网络,命令实现以下三个功能:- 路由更新通过该命令指定的网络接口进行多播 multicast。
- 并将路由更新通过该接口发送到多播地址(224.0.0.9),发送给同一网络上的其他 RIP 路由器。
- 如果路由更新进入同一接口,则进行处理。
- 同一接口(即该接口本身已配置为 RIP 网络接口)
- 路由器会处理该更新并更新自己的路由表
- 广播直接连接到该接口的子网。
- 路由器会在指定网络接口上广播或多播该接口直接连接的子网信息
- 路由更新通过该命令指定的网络接口进行多播 multicast。
3. 验证与故障排除
- 验证 RIPv2:
- Router#show ip protocols #查看当前启用的路由协议,以及其配置和相关信息
- Router#show ip route #显示 IP 路由表
- 故障排除 RIPv2:
- Router#debug ip rip #显示RIP 路由更新的发送和接收过程
- Router#undebug all #(或 no debug all):停止debug调试
show ip protocols
实例
debug ip rip
命令debug ip rip
命令显示 RIP 路由更新的发送和接收。在本示例中,更新是通过 183.8.128.130 发送的- 它报告了三台路由器,其中一台无法访问,因为其跳数大于 15。然后通过 183.8.128.2 广播了更新
show ip route
查看路由表
- Codes:表示对于路由协议类型的描述
- 每个路由的格式为:<协议类型>/<跳数>
- 120/1:表示该路由通过 RIP 协议获取, 1 跳到达,120/2:表示 2 跳到达
(三)RIPv1 和 RIPv2 之间的区别
- 支持有类路由:可以携带子网掩码
- 使用多播地址进行发送广播:特定给 RIP 接受,避免了接受后发现没有启动 RIP 进程耽误时间
- 需要身份认证才确定是否继续进行接收
OSPF(single area)
- 介绍单个区域(single-srea)OSPF 协议
1. OSPF概述
- Open Shortest Path First
- 开放最短路径优先(OSPF)是一种基于开放标准的链路状态link-state路由协议。
- 标准描述:OSPF在多个互联网工程任务组(IETF)的标准中有所描述,最新的描述在RFC 2328中。
- 可扩展性:与RIPv1和RIPv2相比,OSPF因其可扩展性而成为首选的内部网关协议(IGP)。
2. 路由信息 Routing information
- 链路状态:The state of the link是对接口及其与邻居路由器关系的描述。
- 链路状态数据库:链路状态的集合形成 link-state database,有时也称为拓扑数据库 topological database。
- SPF算法:路由器应用Dijkstra最短路径优先(SPF)算法来构建SPF树,以自身为根。
- 路径计算:路由器通过SPF树计算最佳路径,然后选择最佳路径并将其放入路由表中。
3. OSPF vs. RIP
- OSPF使用带宽作为评价指标, 而RIP使用跳数
- OSPF适合大型网络, 而RIP是为小型网络设计的
- OSPF可以进一步把网络划分为小区域
- OSPF支持VLSM,RIP v1不支持
- OSPF快速收敛
- OSPF支持多条等价的路径(多路负载均衡)
- What is the Best Path from A to B?
- 上面带宽大,2 跳达到,下面带宽小,1 跳到达。
- OSPF 从上面走,RIP 从下面走,但是上面会快一些,因此 OSPF 选择的路径是更加优越的
4. OSPF的特点
- More robust更健壮
- 更好的可扩展性 scalable
- 分层设计 hierarchical design:大型OSPF网络使用分层设计
5. OSPF中的一些术语 Terminology
- 链路/连接(Link):
- 两个网络设备之间的物理连接
- 链路状态(Link-State):
- 两个路由器之间的链路状态,包括路由器接口的信息及其与邻居路由器的关系、网络类型(点对点、多路复用)等
- 邻居(Neighbors):相邻的路由器
- 开销(Cost):
- 不同网络链路处理的时候的代价,和链路带宽相关,成反比关系,一般是固定值除以带宽
- 区域(Area):
- 具有相同区域ID的网络/路由器的集合
- 区域内的每个路由器都具有相同的链路状态信息
- 自治系统(Autonomous System,AS):
- 多个 Area 形成一个自治系统
- 邻接关系数据库(Neighborship Database):
- 列出路由器已建立双向通信的所有邻居
- 拓扑数据库(Topology Database):
- 列出所有路由 link-state
- 包含关于互联网络中所有其他路由器的信息,显示互联网络的拓扑结构
- 路由表(Routing Table):
- 列出最佳路由
- 有时称为转发数据库
- 每个路由器的路由表都是唯一的
- 指定路由器(Designated Router, DR):
- 在OSPF多访问网络中选举出的一个路由器,代表该网络中的所有路由器
- 备份指定路由器(Backup Designated Router, BDR):
- 备用路由器,如果原始DR失效,它将成为DR
6. OSPF Area
- 区域定义:区域使用32位数字定义
- 可以是 IP格式 或 单个十进制值
- 例如:Area 0 或 Area 0.0.0.0
- 区域 0:区域编号为0的单一区域
- 分层模型:OSPF使用2 level hierarchical model
- 在多区域OSPF网络中,所有区域都需要连接到区域0(主干)
7. OSPF操作步骤
- OSPF使用邻居关系来获取网络的完整信息。
- 操作步骤:
- 建立邻接关系 adjacency relationships
- 选举DR和BDR(如果需要)(多路复用的时候才需要)
- 发现路由(路线 routes)
- 选择合适的路由
- 维护路由信息
- OSPF的七个状态:
- Init 初始化
- 2Way 双向操作
- ExStart 预先启动
- Exchange 交换
- Loading 加载
- Full 完成
8. 最短路径算法
- 最短路径算法使用节点作为起点,依次检查其关于相邻节点的信息,计算出无环拓扑结构。
- 不根据跳数来进行选择,而是根据最小权和来寻找
9. 选择 DR 和 BDR
- OSPF网络类型:
- 广播多访问网络,如以太网 需要选举DR
- 点对点网络 不需要选举DR
- 非广播多访问网络(NBMA) 需要选举DR
- 只有多路复用的实现方式需要 DR 和 BDR
- 然后,每个路由器与 DR 和 BDR 形成邻接关系
- 对于所有 OSPF 路由器,DR 使用 224.0.0.5(自己的 IP)的主播地址向该网段上的所有其他路由器发送链接状态信息
- 为确保 DR/BDR 看到所有路由器在网段上发送的链接状态,使用了所有 DR/BDR 的多播地址 224.0.0.6(DR 和 BDR 之间)
10. 多路复用(Multi-Access media)中的OSPF
- Giga/Fast/Ethernet,FDDI,Token Ring
- 几个 Area 有几个 DR 和 BDR(是在不同 Area 上)
- DR 和 BDR 归属于区域
11. OSPF Packets
- OSPF路由协议有5种类型的数据包:
- Hello:用于建立和维护邻接关系
- 数据库描述(DBD):用于描述链路状态数据库的内容
- 链路状态请求(LSR):用于请求特定的链路状态信息
- 链路状态更新(LSU):用于发送链路状态信息
- 链路状态确认(LSAck):用于确认接收到的链路状态信息
1. Hello 协议
- 当路由器在接口上启动OSPF路由进程时,它会发送一个Hello数据包,并继续定期发送Hello数据包。
- 管理OSPF Hello数据包交换的规则称为Hello协议。
- Hello数据包的地址是224.0.0.5。
- 在广播多访问和点对点网络上,默认每10秒发送一次Hello数据包。
- 在连接到非广播多访问(NBMA)网络(如帧中继)的接口上,默认时间为30秒。
2. OSPF 报文头部
- Hello 报文的 Type 字段设置为 1
3. 哪个路由器将成为 DR?
- 优先级 + 路由器ID 最大:优先级和路由器ID最大的路由器成为DR,第二大的成为BDR。
- 优先级:范围为1-255,默认值为1。
- 路由器ID:
- 使用回环IP地址作为路由器ID。
- 如果没有回环IP地址,则使用最高值的接口IP地址。
- 接口失效:如果接口失效,路由器必须重新建立邻接关系并重新发布LSA。
12. OSPF 操作的完整步骤
- 一开始的状态是 Down State
- 发送 Hello 报文(Init State)
- B 收到 A 的报文(收到报文一定是邻居):Hello 报文的 TTL 是 1,所以不会跨路由器传播,收到即丢弃
- 收到后,B 也会发送自己的 Hello,然后 A 收到后进入 Two Way 状态
- 准备交换数据库(Exstart Starts)
- 首先确认主方(发送方)、从方(接受方),保证数据有序,简单就是谁的 Router ID 高
- Router ID 高的(主方)发送自己 DBD 报文,从方对主方发送的 DBD 接受处理并发送(Exchange State)
- 交换完成后,各自检查自己是不是有全部的信息
- 如果发现有没有的,则发送 LSR,等待 LSU(整个链路的详细信息,不是 LSA)来进行学习,之后收到完成后发送 LSAck(Loading State)
- 如果有完整的信息,则发送 LSAck(Full State)
13. 总结:OSPF操作
- Set up the adjacency relationships邻居关系
- Elect DR and BDR(if needed)选举DR
- Discover the routes 发路由
- Choose appropriate routes 选路由
- Maintain the route information 维持路由信息
步骤 1:建立邻居关系
- 路由器按间隔发送Hello数据包。
- 如果发现邻居:
- 将邻居添加到邻接关系数据库。
- 发现网络类型:
- 如果是多访问网络,进入DR/BDR选举过程并进入步骤2。
- 如果是点对点或点对多点网络,不选举DR/BDR,跳过步骤2。
- 如果Hello数据包头中的DR/BDR字段已被占用(即已存在DR/BDR对),则不进行DR/BDR选举,跳过步骤2。
- 如果发现邻居:
步骤 2:选举DR/BDR
- 如果没有其他路由器在线,该路由器成为DR。下一个上线的路由器将成为BDR。
- 如果有多个路由器(两个或更多)同时上线,则:
- 优先级最高的路由器成为DR。
- 优先级为零表示“永不成为DR”。
- 如果优先级相同,则路由器ID最高的路由器成为DR。
- 路由器ID是最高的回环地址或接口IP地址。
- 优先级或路由器ID第二高的路由器成为BDR。
- 优先级最高的路由器成为DR。
- 如果DR失效,BDR成为DR。
- 【注意!】但是,如果一个新的OSPF路由器加入网络,且其优先级或路由器ID更高,当前的DR和BDR不会改变。
- 只有在当前DR失效时,它才会成为新的BDR;
- 或者在当前DR和BDR都失效时,它才会成为新的DR。
步骤 3:发现路由
- 之前在ExStart到Full状态中解释过
- 路由器确定“主/从”关系
- 在多路复用网络中,DR/BDR交换LSA,所有其他路由器将类型2的DBD发送给DR/BDR
- 如果需要,路由器可以通过发送LSR请求更多信息进入加载状态
- 所有路由器必须在加载状态中等待,直到请求路由器完全更新
- 路由器现在进入Full状态
步骤 4:选择最佳路由
- 现在网络上的所有路由器并行计算SPF算法。
- 记住:在此之前,所有路由器必须具有相同的链路状态数据库。
- SPF使用Cost作为度量。
- SPF为每条从自身到目的地的路径累加开销,构建以路由器为根的树。
- OSPF然后将最小开销路径安装到路由表中。
- 最多可以安装4条等成本路径进行负载共享。
步骤 5:维护路由信息
- OSPF通过定期交换Hello数据包来检测新邻居或失效邻居。
- 根据网络类型,Hello数据包在不同的默认间隔发送。
- 对于速度为T1(1.544 Mbps)或更高的链路,每10秒发送一次:广播多访问和点对点链路。
- 对于低于T1的链路,每30秒发送一次:非广播多访问链路。
- “失效间隔”是Hello间隔的四倍。
- 根据网络类型,Hello数据包在不同的默认间隔发送。
14. Basic OSPF 配置Configuration
- 在路由器上启用OSPF
router ospf process-id
- 进程号 process-id:
- 值范围为1到65535
- 用于标识路由器上的多个OSPF进程
- 通常在整个自治系统(AS)中保持相同的进程ID。
- 标识路由器上的IP网络
network network-id wildcard-mask area area-id
- network-id:网络地址,可以是整个网络、子网或接口地址。
- wildcard-mask:通配符掩码。
- wildcardmask 和 subnet mask 相反
- 子网掩码是 255.255.255.0,则 Wild-card Address 就是 0.0.0.255
- area-id:区域ID,标识网络所属的OSPF区域
- 只有一个 Area,则为 area0
15. 配置回环地址 Loopback Address
- 配置回环地址以增加OSPF路由器ID的稳定性
interface loopback number
ip address address subnet-mask
- number:回环接口编号。
- address:回环接口的IP地址。
- subnet-mask:子网掩码,建议使用/32掩码以避免潜在的路由问题。
- 回环接口必须在OSPF进程启动之前配置。
- 建议在基于OSPF的网络中的所有关键路由器上使用回环地址(私有或公共地址)。
16. 更改OSPF路由器的优先级
- 操纵 DR/BDR 选举
ip ospf priority number
- 优先级越大越高
- 值范围:0 ~ 255,默认值为1
- 优先级为0表示接口不能被选为DR或BDR
- 监控OSPF接口优先级
show ip ospf [interface type number]
17. OSPF 开销(Cost)= 度量(Metric)
- 开销应用于所有路由器链路路径
- 16位数字(1 – 65,535)
- 开销越低,路径越理想
- 路由决策基于路径的总开销
- 开销由带宽派生
- 公式:COST = 100,000,000 / 带宽
- 例如,T1链路的OSPF开销:100,000,000 / 1,544,000 = 64
1. OSPF路径开销
- 所有连接到同一链路的接口必须同意该链路的开销,否则链路将被视为断开。
- Cisco路由器的串行链路默认开销为1784(56Kbps带宽)。
- 开销范围:1 ~ 65535。
- 配置OSPF开销
ip ospf cost number
- 如果线路速度较慢,必须指定实际链路速度
bandwidth number
- 在多供应商路由环境中,常见的需要更改开销的情况是确保一个供应商的开销值与另一个供应商的开销值匹配。
- 另一种情况是使用千兆以太网时。默认开销将最低开销值1分配给100 Mbps链路
2. 配置OSPF计时器
- 所有OSPF区域内的路由器必须达成相同的Hello间隔和失效间隔,默认值:
- T1或更高带宽的链路(广播):10秒
- 广播多访问和点对点链路
- 低于T1的链路(非广播):30秒
- 非广播多访问
- 失效间隔 = 4 * Hello间隔
- T1或更高带宽的链路(广播):10秒
- 更改间隔的命令:
ip ospf hello-interval seconds
ip ospf dead-interval seconds
- 注意:失效间隔会自动调整为新的Hello间隔的四倍
If you like my blog, you can approve me by scanning the QR code below.