CCNA 学习记录 - 静态路由和动态路由
引言
以太网交换机工作在数据链路层,用于在网络内进行数据转发。而企业网络的拓扑结构一般会比较复杂,不同的部门,或者总部和分支可能处在不同的网络中,此时就需要使用路由器来连接不同的网络,实现网络之间的数据转发。而数据转发就需要涉及到路由和路由器。
路由相关概念
局域网和广播域
以下拓扑中分别存在局域网 LAN1 和 局域网 LAN2 以及 局域网 LAN3(路由器相连的一个网段,也是一个局域网),交换机的每个局域网都是一个广播域,广播报文是无法经过路由器的,也就是说,路由器不转发广播报文,故而该拓扑中是两个广播域。
路由选路
假设 RA 路由器要去往 RD 路由,那么通过 RB 和 RC 都可以去往 RD,作为源路由器的 RA 就需要进行 选路,通过 带宽、延迟、管理距离等因素进行综合判断。选择最优的一条路线,这就是路由器的选路。
IP 路由表
既然路由器的作用是用来进行转发数据的,那么就需要知道将数据转发给哪个路由器,而存储这个路由表项的就是路由表。
路由表中包含了路由器可以到达的网络(网段),如果到达的目的网络不在路由表当中,则该数据会被路由器丢弃。并返回 目标不可达。
在路由器设备中可以使用如下命令查看路由表:
1 | show ip route |
路由管理距离
路由类型 | Connected | OSPF | Static | EIGRP |
---|---|---|---|---|
路由协议管理距离 | 0 | 110 | 1 | 90 |
值越小越优先
路由度量(cost)
如果路由器无法用优先级来判断最优路由,则使用度量值(metric)来决定需要加入路由表的路由。
一些常用的度量值有:跳数,带宽,时延,代价,负载,可靠性等。
其中跳数是指到达目的地所通过的路由器数目。带宽是指链路的容量,高速链路开销(度量值)较小。metric
(开销)值越小,路由越优先;因此,图示中metric=1+1=2的路由是到达目的地的最优路由,其表项可以在路由表中找到。
建立路由表
最长匹配原则
路由表中如果有多个匹配目的网络的路由条目且都是同一类型的,则路由器会选择掩码最长的条目。
路由器转发数据包
路由器需要知道下一跳和出接口才能将数据转发出去。
静态路由
概念
静态路由是指由管理员手动配置和维护的路由,静态路由配置简单,被广泛应用于网络中。另外,静态路由还可以实现负载均衡和路由备份。因此,学习并掌握好静态路由的应用与配置是非常必要的。
应用场景
以上图拓扑为例,这里只是将 PC 接入到 Internet,因此只需要在出口网关配置与Internet 路由器之间配置静态路由即可。
配置
假设 192.168.100.0/24 网段要访问到 192.168.200.0/24 网段,如果使用静态的话就需要进行如下配置:
1 | # 配置命令格式 |
在 PC3 上 ping PC4 网络可通:
负载分担
静态路由支持到达同一目的地的等价负载分担。
路由备份(浮动路由)
浮动静态路由在网络中主路由失效的情况下,会加入到路由表并承担数据转发业务。
配置浮动路由的方法,只需要在最后加上度量值即可。
1 | Router(config)# ip route 8.8.8.8 255.255.255.0 10.1.1.2 |
缺省路由(默认路由)
缺省路由是目的地址和掩码都为全0的特殊路由。如果报文的目的地址无法匹配路由表中的任何一项,路由器将选择依照缺省路由来转发报文。
1 | RA(config)#ip route 0.0.0.0 0.0.0.0 12.12.12.2 |
静态路由配置实例
配置 主机名
R1
1 | Router> |
R2
1 | Router> |
R3
1 | Router> |
R4
1 | Router> |
R5
1 | Router> |
配置 IP
R1
1 | R1(config)# |
R2
1 | R2(config)#int e0/0 |
R3
1 | R5(config)# |
R4
1 | R4(config)# |
R5
1 | R5(config)# |
配置静态路由
配置技巧
计算每台路由要设置的路由条目方法:
网络中共多少个网段 - 直连网段的数量 = 该路由上的路由条目
R1
1 | R1(config)#ip route 23.23.23.0 255.255.255.0 12.12.12.2 |
R2
1 | R2(config)#ip route 192.168.100.0 255.255.255.0 12.12.12.1 |
R3
1 | R3(config)#ip route 192.168.100.0 255.255.255.0 23.23.23.2 |
R4
1 | R4(config)#ip route 192.168.100.0 255.255.255.0 24.24.24.2 |
R5
由于 R5 只和 R4 相连,故而这里可以配置默认路由。
1 | R5(config)#ip route 0.0.0.0 0.0.0.0 45.45.45.4 |
网络连通性测试
在 PC6 192.168.100.6 PING 192.168.200.6:
在 R5 上 分别 PING 192.168.100.6 和 192.168.200.6:
动态路由
概念
动态路由协议通过路由信息的交换生成并维护转发引擎所需的路由表。当网络拓扑结构改变时动态路由协议可以自动更新路由表,并负责决定数据传输最佳路径。
在动态路由中,管理员不再需要与静态路由一样,手工对路由器上的路由表进行维护,而是在每台路由器上运行一个路由协议。这个路由协议会根据路由器上的接口的配置(如IP地址的配置)及所连接的链路的状态,生成路由表中的路由表项。
作用
- 维护路由信息
- 决定最佳路由
- 建立路由表
更新方式
周期更新
- 动态路由协议会定期发送路由更新信息,以确保路由表中的信息是最新的。这是周期性的过程,通常由协议自身定义的时间间隔来触发。例如,在EIGRP(Enhanced Interior Gateway Routing Protocol)中,这个时间间隔称为 “Hold Time”,而在OSPF(Open Shortest Path First)中,它被称为 “Hello Interval”。
触发更新
- 动态路由协议还能够在发生特定事件时触发更新。这些事件可能包括链路状态的变化、邻居关系的改变、或者其他重要的网络拓扑变化。一旦发生这些事件,路由器会立即发送更新信息,而不必等到周期性的更新。
动态路由协议的种类
距离矢量协议
采用距离矢量(Distance-Vector,DV)算法,是相邻的路由器之间互相交换整个路由表,并进行矢量的叠加,最后学习到整个路由表。
距离矢量算法具有以下特点:
路由器之间周期性的交换路由表。
交换的是整张路由表的内容。
每个路由器和它直连的邻居之间交换路由表。
网络拓扑发生了变化之后,路由器之间会通过定期交换更新包来获得网络的变化信息。
水平分割技术
距离矢量路由协议的缺陷:
距离矢量路由协议的缺陷:
metric的可信度。因为距离仅仅表示的是跳数,对路由器之间链路的带宽,延迟等无考虑。这会导致数据包的传送会走在一个看起来跳数小但实际带宽窄和延时大的链路上。
交换路由信息的方式,即路由器交换信息是通过定期广播整个路由表所能到达的适用网络号码。但在稍大一点的网络中,路由器之间交换的路由表会很大,而且很难维护,导致收敛很缓慢。
距离矢量路由协议有RIP、BGP等。
链路状态协议
采用链路状态(Link State,LS)算法。链路状态是一个层次式的,执行该算法的路由器不是简单的从相邻的路由器学习路由,而是把路由器分成区域,收集区域内所有路由器的链路状态信息,根据链路状态信息生成网络拓扑结构,每一个路由器再根据拓扑结构图计算出路由。**
链路状态路由协议有OSPF、IS-IS等。
内部网关路由协议(IGP)
- RIP
- EIGRP
- OSPF
- IS-IS
外部网关路由协议(EGP)
- BGP
EIGRP
概念
EIGRP: Enhanced Interior Gateway Routing Protocol 即增强内部网关路由协议。也翻译为加强型内部网关路由协议。 EIGRP 是 Cisco 公司的私有协议(2013年已经公有化)。
EIGRP 结合了链路状态和距离矢量型路由选择协议的 Cisco 专用协议,采用弥散修正算法(DUAL)来实现快速收敛,可以不发送定期的路由更新信息以减少带宽的占用,支持 Appletalk、IP、Novell 和 NetWare 等多种网络层协议。
特点
- 高级距离矢量路由协议
- 快速收敛
- 100% 无环路由
- 配置简便
- 增量更新(触发更新)
- 等价负载均衡和非等价负载均衡
- 灵活的网络设计
- 组播和单播代替广播更新
- 支持VLSM和不连续子网
- 在网络中任何地方支持手动汇总
- 支持WANs and LANs
配置
1 | # 配置语法 |
需求:使用 EIGRP 协议实现 192.168.100.0/24 到 192.168.200.0/24的网络通信
在执行下列操作之前都已配置好IP:
1 | # R1 配置 |
1 | # R2配置 |
查看邻居状态:
1 | R1#show ip eigrp neighbors |
1 | R2#show ip eigrp neighbors |
发现已经彼此建立了邻居。
在 R1 上由于已经将 192.168.100.254
宣告了出去,故而查看 R2 的路由表:
在 R2 上由于已经将 192.168.200.254
宣告了出去,故而查看 R1 的路由表:
最后测试网络连通性:
查看邻居表
1 | R1#show ip eigrp neighbors |
查看拓扑表
1 | R5#show ip eigrp topology # 查看当前使用链路(路由) |
假设 R5 要去往 R6 的 67.67.67.0/24
网段,那么 R5 有两条路可选。可以走上面去往67.67.67.0/24
,也可以走下面去往67.67.67.0/24
,不过,走下面不是最优路径,所需要的开销较高。因此,最优路径是走上面。
show ip topology
命令看到的,则是当前使用的链路(路由):
这里使用的最优路径,而当 R5和R6的网络故障时,则会通过 R8 去往 67.67.67.0/24
,如果我们想看所有链路,则需要加上 all-links
。
查看路由表
1 | R5#show ip route eigrp |
管理距离和组播地址
管理距离
- 内部:90
- 外部:170
- 汇总:5
这里的内部表示路由数据来自邻居的 EIGRP 发送的,而外部则指的是来自于其他路由协议,比如 OSPF。
组播地址
更新的组播地址:224.0.0.10
协议号:88
DUAL 算法
特点
- 无环路径
- 无环备用路径,可立即使用
- 快速收敛
- 限定更新以使用最少带宽
选路
设有如下拓扑:
假设 R1 要去往 R4 的 4.4.4.4 网络,从 R2 或者 R3 都可以到达该网络,又同是 EIGRP 协议,那么 R1 该如何选择呢?则会通过开销进行选择,R1 通过 R2 去往 R4 的 4.4.4.4 网络所需的开销为 cost10 + cost30 + cost 10 = cost50 。
而 R1 通过 R3 去往 R4 的 4.4.4.4 网络所需的开销为 cost20 + cost30 + cost10 = cost60。
故而优先选择 R2 作为 后继路由器。
注意:只计算路由器出口接口的开销,注意拓扑中的 cost 值 实际上为 Metric 值,在 EIGRP 中开销称为 Metric,在 OSPF 中,开销称为 cost。
相关术语
- 后继路由器
Successor
- 可行距离
Feasible distance(FD)
- 通告距离
Reported Distance (RD/AD)
- 可行后继路由器
Feasible Successor(FS)
- 可行条件
Feasibility Condition(FC)
设有如下拓扑:
后继路由器: R1 去往 4.4.4.4 的最佳路径经过的第一个路由器被称为后继路由器,此处为 R2
可行距离: R1 到达 4.4.4.4 的总的 metric(可以理解为开销),这里注意看的是沿途路由器出口的 metric。
通告距离: R1 并不知道到达 4.4.4.4 的可行距离,而是 R2 计算到达 4.4.4.0/24 网段的开销,然后告诉 R1,站在 R1 的角度上,这个 R2 告诉我们的这个距离,叫做通告距离。
可行后继路由器: 也被称为备份链路,当R1无法通过后继路由器 R2 到达 4.4.4.0/24,如果没有可行后继路由器,则 R1会问 R3 能不能到达 4.4.4.0/24 网段,R3 给出回复,那么这个从坏到好的时间,被称为收敛时间。如果有备份链路的话,基本上不用重新计算,直接切换到备份链路。因此,备份链路被称为可行后继路由器,但是并不是所有能到达4.4.4.0/24 网段的路由器都能作为备份链路,则需要满足可行条件。
可行条件: 为了防止环路,AD < FD,这个条件被称为可行条件
Metric 计算(5K)
- K1:
Bandwidth
带宽 - K2:
Reliability
可靠性 - K3:
Delay
延迟 - K4:
Loading
负载 - K5:
MTU
最大传输单元
默认K1 K3 为1,K2、K4、K5为0,因此默认只将带宽和延迟带入开销计算。
256 乘以【(10^7/链路最小接口带宽)+(链路延迟之和)/10】
查看某个接口的信息:
1 | show interfaces e0/1 |
其手中的 txload
表示发送负载,rxload
表示接收负载。
数据包
hello
建立邻居关系update
发送路由更新query
向邻居发送的请求查询信息reply
用来响应query
的信息ack
确认一个可靠的报文
Hello Packets(Hello 数据包):
- EIGRP 使用 Hello 数据包来发现邻居路由器。当两台路由器之间建立邻居关系时,它们会交换 Hello 数据包,其中包含了一些基本信息如 EIGRP 的进程 ID 等(在 Hello 包的
Autonomous System
属性中指定),如果进程ID相同,则建立邻居。
Update Packets(更新数据包):
- EIGRP 通过 Update 数据包传递路由信息。这些信息包括拓扑表中的变化,例如新增、删除或者修改的网络或路由器。Update 数据包使用可靠传输协议,确保数据的可靠传递。
Query Packets(查询数据包):
- 当路由器发现拓扑表中的某个路由不再可达时,它会向邻居发送 Query 数据包,询问是否有其他路由器知道如何到达该目的地。
Reply Packets(回复数据包):
- 如果邻居路由器知道如何到达目的地,它会发送 Reply 数据包回复 Query。这样,路由器可以更新它的拓扑表。
Acknowledgment Packets(确认数据包):
- EIGRP 使用可靠传输协议,接收方会向发送方发送 Acknowledgment(ACK)数据包,表示成功接收了数据。如果发送方在一定时间内没有收到 ACK,它将重新发送相应的数据包。
Reliable Transport Protocol(可靠传输协议):
- EIGRP 使用自己的可靠传输协议来确保路由信息的可靠传递。这个协议保证数据包的按序传递和可靠性,以确保路由器之间的一致性。
建立邻居
- AS(Autonomous System) 号必须一致。
- 5K 必须一致
- 认证 必须一致
EIGRP 配置实例
配置IP和主机名过程省略,请参考【静态路由配置实例】
宣告网络
R1
1 | R1#conf t |
R2
1 | R2(config)#router eigrp 1 |
R3
1 | R3(config)#router eigrp 1 |
R4
1 | R4(config)#router eigrp 1 |
R5
1 | R5(config)#router eigrp 1 |
配置 SSH
根据需求,在 R1 开启 SSH 服务,并创建用户名 user1 密码 123 ,在 R3 通过 SSH 登录到 R1。
R1配置:
1 | R1(config)#username user1 privilege 15 password 123 |
R3 登录:
测试网络连通性
OSPF
概念
OSPF (Open Shortest Path First开放式最短路径优先)是一个内部网关协议(Interior Gateway Protocol,简称IGP),用于在单一自治系统(autonomous system,AS)内决策路由。是对链路状态路由协议的一种实现,隶属内部网关协议(IGP),故运作于自治系统内部。著名的迪克斯彻(Dijkstra)算法被用来计算最短路径树。
特性
无环路
收敛快
扩展性好
支持认证
原理
- 邻居关系建立:
- Hello协议: 路由器使用Hello协议定期发送Hello消息,用于发现相邻的OSPF路由器。当两个路由器之间收到对方的Hello消息时,它们就建立邻居关系。
- 链路状态信息交换:
- LSA(Link State Advertisement): 路由器在邻居关系建立后,开始交换链路状态信息,即
LSA
。每个路由器维护一个链路状态数据库(LSDB),LSA 包含了路由器所知道的关于网络的信息,例如连接到的邻居、链路的状态、带宽等。
- LSA(Link State Advertisement): 路由器在邻居关系建立后,开始交换链路状态信息,即
- LSDB的构建:
- LSA Flooding: 收到
LSA
后,路由器将其广播到整个OSPF
区域,确保所有路由器都能获得最新的链路状态信息。这个过程被称为LSA flooding
( LSA 泛洪 )。
- LSA Flooding: 收到
- SPF 计算:
- SPF 算法: SPF 算法用于计算最短路径。每个路由器使用LSDB中的信息执行SPF算法,找到到达所有目的地的最短路径。这将形成一个最短路径树,用于确定到达其他网络设备的最佳路径。
- 路由表更新:
- 最短路径树: SPF算法的结果被应用于路由表,形成每个目的地的最佳路径信息。路由器根据这些信息选择最佳的下一跳,并更新其路由表。
- 周期性更新:
- Hello 和 LSA 的周期性发送: Hello消息和LSA周期性地发送,以确保邻居关系的持续存在并更新链路状态信息。这有助于网络及时适应拓扑变化。
- 区域划分(NA阶段了解):
- 区域设计: OSPF网络可以划分为多个区域,每个区域内的路由器只关心本区域的链路状态信息。区域划分有助于减小LSDB的规模,提高网络的可扩展性。
配置
配置大体跟 EIGRP 一致,不一致的是相互学习路由的 ospf 进程 id 可以不一致,但是建议一个网络中 OSPF 一致。
1 | # 配置语法 |
R1 配置:
1 | R1(config)#router ospf 1 |
R2 配置:
1 | R2(config)#router ospf 1 |
查看邻居表
1 | R1#show ip ospf neighbor |
查看数据表
1 | R1#show ip ospf database |
查看路由表
1 | R1#show ip route ospf |
管理距离和组播地址
管理距离:
- 内部: 110
- **外部: **110
更新的组播地址:
- 224.0.0.5(内部)
- 224.0.0.6 (外部)
OSPF 报文
OSPF报文封装在IP报文中,协议号为89。
OSPF报文类型有5种:
- Hello 报文
- DD(Database Description)报文
- LSR(Link State Request)报文
- LSU(Link State Update)报文
- LSACK(Link State Acknowledgment)报文
wireshark 抓包:
邻居状态
- Down(下线):
- 描述: 初始状态,表示路由器与邻居之间没有建立连接。
- 触发条件: 初始状态或与邻居的连接出现问题。
- Init(初始化):
- 描述: 表示路由器已经发送 Hello 消息,但尚未收到邻居的响应。
- 触发条件: 路由器发送 Hello 消息后,等待邻居的回应。
- 2-Way(双向):
- 描述: 表示两个路由器之间已经建立了双向通信,但尚未进行邻居关系的完全建立。
- 触发条件: 两个路由器互相确认了对方的 Hello 消息。
- Exstart(起始):
- 描述: 表示两个路由器之间开始协商谁将成为 OSPF 邻居中的 Master(主)。
- 触发条件: 进入 Exstart 状态后,路由器开始交换 OSPF 数据库描述符。
- Exchange(交换):
- 描述: 表示路由器正在交换 LSDB(链路状态数据库)的摘要信息。
- 触发条件: 在Exstart状态之后,Master 和 Slave 开始交换 LSDB 摘要信息。
- Loading(加载):
- 描述: 表示路由器正在请求缺失的 LSA(链路状态通告)。
- 触发条件: 在 Exchange 状态之后,路由器通过请求缺失的 LSA 来完善自己的 LSDB。
- Full(完全):
- 描述: 表示邻居关系已经完全建立,路由器已经完成了数据库同步。
- 触发条件: 路由器成功完成 Loading 状态,此时 LSDB 已经同步,邻居关系达到完全建立。
如果操作速度过快的话,可以看到如下状态:Init
-> 2WAY
-> Exstart
-> Exchange
-> Loading
-> Full
最终状态停留在 Full
。
Router ID、邻居和邻接
Router ID:路由器标识,格式酷似 IP 地址,但不是 IP 地址,如果未手动配置,路由器将自动选择 Router ID。自动选择的 Router ID 基于系统的 IP 地址、循环(loopback)接口的 IP 地址等。
邻居: 在 OSPF 中,与路由器相邻的路由器被称为邻居。
邻接: 在 OSPF 中,邻接表示两个邻居路由器之间建立了有效的连接,并且可以交换详细的链路状态信息。邻接状态的建立包括一系列的状态转换,如 Exstart、Exchange、Loading,最终到达 Full 状态。
Router ID 的配置:
1 | R1(config)#router ospf 1 |
支持的网络类型
默认情况下,OSPF 认为以太网的网络类型是广播类型,PPP
、HDLC
的网络类型是点到点类型。另外两种 NBMA
和帧中继已经见不到了。
DR 和 BDR
概念
- DR(Designated Router):
- 在多access网络中,所有路由器都可以成为邻居,但为了减少邻居关系的数量和减轻LSA(Link State Advertisement)泛洪的负担,OSPF 引入了 DR 和 BDR的概念。
- DR 是负责代表网络发送 LSA 的主要路由器。DR 的存在减少了在网络中形成邻居关系的路由器数量,降低了 LSA 的数量。
- BDR(Backup Designated Router):
- 由于 DR 在网络中是唯一的,为了提供冗余,引入了 BDR。BDR 是 DR 的备份,负责在 DR 失效时接管其职责,确保网络中的 LSA 传播不会中断。
- BDR 会保持与其他路由器的邻居关系,但它的主要职责是在 DR 失效时顶替 DR 的位置。
比如以上网络拓扑中,RA 和 RB 照常建立邻居关系,而数据库都是从 BDR 和 DR 中同步,那么这就减少了 RA 和 RB 的互相同步数据包。
DR 可以减少广播型网络中的邻接关系的数量。
选举
DR 是基于端口的优先级进行选举的,可以通过如下命令修改端口的优先级:。
1 | R2(config)#int e0/0 |
区域
每个区域都维护一个独立的 database
,``Area 0` 是骨干区域,其他区域都必须与此区域相连。
开销(cost)
OSPF 的开销(cost)计算公式为:带宽参考值 / 接口带宽 (最小值为1)默认情况下,OSPF 使用默认的带宽参考值(100 Mbps)
以以上拓扑为例,去往 192.168.2.0/24
网段所花费的开销为 20
注意:和EIGRP一样只计算路由器出口接口的开销。
修改带宽参考值
如果接口带宽较大的话,默认参考带宽较小,实际上接口带宽没有显著优势,于是可以通过 auto-cost reference-bandwidt
命令修改带宽参考值:
1 | Router(config)#router ospf 1 |
比如 带宽参考值为 10000 / 接口带宽为1000 = 100 ,那么较大的接口带宽就会有显著优势。
cost 值修改
当然我们还可以直接修改某个接口计算的 cost 值,从而控制路由选路:
1 | R1(config)# |
配置实例
进行以下操作时均已为设备配置完毕主机名、IP地址。
宣告网络
R1
1 | R1(config)# |
R2
1 | R2#conf t |
R3
1 | R3(config)# |
R4
1 | R4(config)#router ospf 1 |
R5
1 | R5#conf t |
配置 telnet
根据 需求 R2 上 配置 telnet 服务,用户名 user1 密码 123, 在 R3 上登陆 R2。
1 | R2(config)#username user1 privilege 15 password 123 |
R3 上 登录 R2: