引言

​ 以太网交换机工作在数据链路层,用于在网络内进行数据转发。而企业网络的拓扑结构一般会比较复杂,不同的部门,或者总部和分支可能处在不同的网络中,此时就需要使用路由器来连接不同的网络,实现网络之间的数据转发。而数据转发就需要涉及到路由和路由器。

路由相关概念

局域网和广播域

以下拓扑中分别存在局域网 LAN1 和 局域网 LAN2 以及 局域网 LAN3(路由器相连的一个网段,也是一个局域网),交换机的每个局域网都是一个广播域,广播报文是无法经过路由器的,也就是说,路由器不转发广播报文,故而该拓扑中是两个广播域。

image-20240201143633257

路由选路

image-20240201143941478

假设 RA 路由器要去往 RD 路由,那么通过 RB 和 RC 都可以去往 RD,作为源路由器的 RA 就需要进行 选路,通过 带宽、延迟、管理距离等因素进行综合判断。选择最优的一条路线,这就是路由器的选路。

IP 路由表

既然路由器的作用是用来进行转发数据的,那么就需要知道将数据转发给哪个路由器,而存储这个路由表项的就是路由表。
路由表中包含了路由器可以到达的网络(网段),如果到达的目的网络不在路由表当中,则该数据会被路由器丢弃。并返回 目标不可达。

在路由器设备中可以使用如下命令查看路由表:

1
show ip route 

image-20240201145756008

路由管理距离

image-20240201152412834
路由类型 Connected OSPF Static EIGRP
路由协议管理距离 0 110 1 90

值越小越优先

路由度量(cost)

如果路由器无法用优先级来判断最优路由,则使用度量值(metric)来决定需要加入路由表的路由。

一些常用的度量值有:跳数,带宽,时延,代价,负载,可靠性等。

其中跳数是指到达目的地所通过的路由器数目。带宽是指链路的容量,高速链路开销(度量值)较小。
metric (开销)值越小,路由越优先;因此,图示中metric=1+1=2的路由是到达目的地的最优路由,其表项可以在路由表中找到。

image-20240201152642892

建立路由表

image-20240201152917612

最长匹配原则

image-20240201153431468

image-20240201153438989

路由表中如果有多个匹配目的网络的路由条目且都是同一类型的,则路由器会选择掩码最长的条目。

路由器转发数据包

image-20240201153739349

路由器需要知道下一跳和出接口才能将数据转发出去。

静态路由

概念

静态路由是指由管理员手动配置和维护的路由,静态路由配置简单,被广泛应用于网络中。另外,静态路由还可以实现负载均衡和路由备份。因此,学习并掌握好静态路由的应用与配置是非常必要的。

应用场景

image-20240201154355801

以上图拓扑为例,这里只是将 PC 接入到 Internet,因此只需要在出口网关配置与Internet 路由器之间配置静态路由即可。

配置

image-20240201155228190

假设 192.168.100.0/24 网段要访问到 192.168.200.0/24 网段,如果使用静态的话就需要进行如下配置:

1
2
3
4
5
6
7
8
# 配置命令格式
Router(config)# ip route <去往网段> <去往网段的子网掩码> <下一跳地址>

# 在R1上配置:
R1(config)#ip route 192.168.200.0 255.255.255.0 12.12.12.2

# 在R2上配置:
R2(config)#ip route 192.168.100。0 255.255.255.0 12.12.12.1

在 PC3 上 ping PC4 网络可通:

image-20240201160309419

负载分担

image-20240201160519540

image-20240201160524911

静态路由支持到达同一目的地的等价负载分担。

路由备份(浮动路由)

image-20240201160852054

image-20240201160902708

浮动静态路由在网络中主路由失效的情况下,会加入到路由表并承担数据转发业务。

配置浮动路由的方法,只需要在最后加上度量值即可。

1
2
Router(config)# ip route 8.8.8.8 255.255.255.0 10.1.1.2
Router(config)# ip route 8.8.8.8 255.255.255.0 20.1.1.2 100

缺省路由(默认路由)

image-20240201164531180

缺省路由是目的地址和掩码都为全0的特殊路由。如果报文的目的地址无法匹配路由表中的任何一项,路由器将选择依照缺省路由来转发报文。

1
RA(config)#ip route 0.0.0.0 0.0.0.0 12.12.12.2 

静态路由配置实例

image-20240201181928003

配置 主机名

R1
1
2
3
4
5
6
Router>  
Router>en
Router#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#hostname R1
R1(config)#
R2
1
2
3
4
5
6
Router>
Router>en
Router#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#hostname R2
R2(config)#
R3
1
2
3
4
5
6
Router>
Router>en
Router#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#hostname R3
R3(config)#
R4
1
2
3
4
5
6
7
Router>
Router>en
Router#
Router#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#hostname R4
R4(config)#
R5
1
2
3
4
5
6
Router>
Router>en
Router#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#hostname R5
R5(config)#

配置 IP

R1
1
2
3
4
5
6
7
8
9
10
R1(config)#
R1(config)#int e0/0
R1(config-if)#ip add 192.168.100.254 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#int e0/1
*Feb 3 13:40:28.244: %LINK-3-UPDOWN: Interface Ethernet0/0, changed state to up
*Feb 3 13:40:29.251: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0/0, changed state to up
R1(config-if)#int e0/1
R1(config-if)#ip add 12.12.12.1 255.255.255.0
R1(config-if)#no shutdown
R2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
R2(config)#int e0/0
R2(config-if)#ip add 12.12.12.2 255.255.255.0
R2(config-if)#no shutdown
R2(config-if)#int e0/2
R2(config-if)#ip add 23.23.23.2 255.255.255.0
R2(config-if)#no shutdown
R2(config-if)#int e0/1
*Feb 3 13:42:08.624: %LINK-3-UPDOWN: Interface Ethernet0/2, changed state to up
*Feb 3 13:42:09.631: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0/2, changed state to up
R2(config-if)#ip add 32.32.32.2 255.255.255.0
R2(config-if)#no shutdown
*Feb 3 13:42:22.379: %LINK-3-UPDOWN: Interface Ethernet0/1, changed state to up
*Feb 3 13:42:23.384: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0/1, changed state to up
R2(config-if)#int e0/3
R2(config-if)#ip add 24.24.24.2 255.255.255.0
R2(config-if)#no shutdown
*Feb 3 13:42:38.859: %LINK-3-UPDOWN: Interface Ethernet0/3, changed state to up
*Feb 3 13:42:39.860: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0/3, changed state to up
R2(config-if)#int e1/0
R2(config-if)#ip add 42.42.42.2 255.255.255.0
R2(config-if)#no shutdown
*Feb 3 13:42:51.467: %LINK-3-UPDOWN: Interface Ethernet1/0, changed state to up
*Feb 3 13:42:52.476: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet1/0, changed state to up
R3
1
2
3
4
5
6
7
8
9
10
11
12
R5(config)#  
R5(config)#int e0/2
R5(config-if)#ip add 23.23.23.3 255.255.255.0
R5(config-if)#no shutdown
R5(config-if)#int e0/1
*Feb 3 13:44:13.813: %LINK-3-UPDOWN: Interface Ethernet0/2, changed state to up
*Feb 3 13:44:14.819: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0/2, changed state to up
R5(config-if)#ip add 32.32.32.3 255.255.255.0
R5(config-if)#no shutdown
R5(config-if)#
*Feb 3 13:44:24.298: %LINK-3-UPDOWN: Interface Ethernet0/1, changed state to up
*Feb 3 13:44:25.299: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0/1, changed state to up
R4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
R4(config)#
R4(config)#int e0/1
R4(config-if)#ip add 24.24.24.4 255.255.255.0
R4(config-if)#no shutdown
R4(config-if)#int e0/0
*Feb 3 13:45:03.584: %LINK-3-UPDOWN: Interface Ethernet0/1, changed state to up
*Feb 3 13:45:04.585: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0/1, changed state to up
R4(config-if)#ip add 42.42.42.4 255.255.255.0
R4(config-if)#no shutdown
R4(config-if)#int e0/3
*Feb 3 13:45:16.399: %LINK-3-UPDOWN: Interface Ethernet0/0, changed state to up
*Feb 3 13:45:17.403: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0/0, changed state to up
R4(config-if)#ip add 45.45.45.4 255.255.255.0
R4(config-if)#no shutdown
R4(config-if)#
R4(config-if)#int e0/2
*Feb 3 13:45:28.084: %LINK-3-UPDOWN: Interface Ethernet0/3, changed state to up
*Feb 3 13:45:29.090: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0/3, changed state to up
R4(config-if)#ip add 192.168.200.254 255.255.255.0
R4(config-if)#no shutdown
R5
1
2
3
4
5
6
R5(config)#
R5(config)#int e0/0
R5(config-if)#ip add 45.45.45.5 255.255.255.0
R5(config-if)#no shut
R5(config-if)#no shutdown
R5(config-if)#

配置静态路由

配置技巧

计算每台路由要设置的路由条目方法:
网络中共多少个网段 - 直连网段的数量 = 该路由上的路由条目

R1
1
2
3
4
5
6
R1(config)#ip route 23.23.23.0 255.255.255.0 12.12.12.2   
R1(config)#ip route 32.32.32.0 255.255.255.0 12.12.12.2
R1(config)#ip route 24.24.24.0 255.255.255.0 12.12.12.2
R1(config)#ip route 42.42.42.0 255.255.255.0 12.12.12.2
R1(config)#ip route 45.45.45.0 255.255.255.0 12.12.12.2
R1(config)#ip route 192.168.200.0 255.255.255.0 12.12.12.2
R2
1
2
3
4
5
R2(config)#ip route 192.168.100.0 255.255.255.0 12.12.12.1 
R2(config)#ip route 192.168.200.0 255.255.255.0 24.24.24.4
R2(config)#ip route 192.168.200.0 255.255.255.0 42.42.42.4 100
R2(config)#ip route 45.45.45.0 255.255.255.0 24.24.24.4
R2(config)#ip route 45.45.45.0 255.255.255.0 42.42.42.4 100
R3
1
2
3
4
5
6
7
8
9
10
11
12
R3(config)#ip route 192.168.100.0 255.255.255.0 23.23.23.2 
R3(config)#ip route 192.168.100.0 255.255.255.0 32.32.32.2
R3(config)#ip route 12.12.12.0 255.255.255.0 23.23.23.2
R3(config)#ip route 12.12.12.0 255.255.255.0 32.32.32.2
R3(config)#ip route 24.24.24.0 255.255.255.0 23.23.23.2
R3(config)#ip route 24.24.24.0 255.255.255.0 32.32.32.2
R3(config)#ip route 42.42.42.0 255.255.255.0 23.23.23.2
R3(config)#ip route 42.42.42.0 255.255.255.0 32.32.32.2
R3(config)#ip route 45.45.45.0 255.255.255.0 23.23.23.2
R3(config)#ip route 45.45.45.0 255.255.255.0 32.32.32.2
R3(config)#ip route 192.168.200.0 255.255.255.0 23.23.23.2
R3(config)#ip route 192.168.200.0 255.255.255.0 32.32.32.2
R4
1
2
3
4
5
6
7
8
R4(config)#ip route 192.168.100.0 255.255.255.0 24.24.24.2    
R4(config)#ip route 192.168.100.0 255.255.255.0 42.42.42.2 100
R4(config)#ip route 23.23.23.0 255.255.255.0 24.24.24.2
R4(config)#ip route 23.23.23.0 255.255.255.0 42.42.42.2 100
R4(config)#ip route 32.32.32.0 255.255.255.0 24.24.24.2
R4(config)#ip route 32.32.32.0 255.255.255.0 42.42.42.2 100
R4(config)#ip route 12.12.12.0 255.255.255.0 24.24.24.2
R4(config)#ip route 12.12.12.0 255.255.255.0 42.42.42.2 100
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:

image-20240203154958304

在 R5 上 分别 PING 192.168.100.6 和 192.168.200.6:

image-20240203155037673

动态路由

概念

​ 动态路由协议通过路由信息的交换生成并维护转发引擎所需的路由表。当网络拓扑结构改变时动态路由协议可以自动更新路由表,并负责决定数据传输最佳路径。
在动态路由中,管理员不再需要与静态路由一样,手工对路由器上的路由表进行维护,而是在每台路由器上运行一个路由协议。这个路由协议会根据路由器上的接口的配置(如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 等多种网络层协议。

特点

image-20240201181403916
  • 高级距离矢量路由协议
  • 快速收敛
  • 100% 无环路由
  • 配置简便
  • 增量更新(触发更新)
  • 等价负载均衡和非等价负载均衡
  • 灵活的网络设计
  • 组播和单播代替广播更新
  • 支持VLSM和不连续子网
  • 在网络中任何地方支持手动汇总
  • 支持WANs and LANs

配置

image-20240201182508680

1
2
3
4
5
# 配置语法 
# 启动 eigrp 进程 相互学习路由的 eigrp 进程 id 需要一致!!!
Router(config)# router eigrp <进程id 1-65535>
# 宣告IP 反掩码 0 表示 全匹配,1表示不匹配,如果要宣告 192.168.200.0/24 这个网段 则是 0.0.0.255 如果要宣告 192.168.200.254 则 反掩码 为 0.0.0.0,如果全部IP都宣告的话,那就是 network 0.0.0.0 255.255.255.255
Router(config)# network <要宣告的IP> <要宣告IP的反掩码>

需求:使用 EIGRP 协议实现 192.168.100.0/24 到 192.168.200.0/24的网络通信

在执行下列操作之前都已配置好IP:

1
2
3
4
5
# R1 配置
R1(config)#router eigrp 1
# 将12.12.12.1和192.168.100.254宣告出去
R1(config-router)#network 12.12.12.1 0.0.0.0
R1(config-router)#network 192.168.100.254 0.0.0.0
1
2
3
4
5
# R2配置
R2(config)#router eigrp 1
# 将12.12.12.2和192.168.200.254宣告出去
R1(config-router)#network 12.12.12.2 0.0.0.0
R1(config-router)#network 192.168.200.254 0.0.0.0

查看邻居状态:

1
2
3
4
5
R1#show ip eigrp neighbors 
EIGRP-IPv4 Neighbors for AS(1)
H Address Interface Hold Uptime SRTT RTO Q Seq
(sec) (ms) Cnt Num
0 12.12.12.2 Et0/1 13 00:01:21 10 100 0 7
1
2
3
4
5
R2#show ip eigrp neighbors 
EIGRP-IPv4 Neighbors for AS(1)
H Address Interface Hold Uptime SRTT RTO Q Seq
(sec) (ms) Cnt Num
0 12.12.12.1 Et0/1 14 00:01:42 10 100 0 7

发现已经彼此建立了邻居。

在 R1 上由于已经将 192.168.100.254 宣告了出去,故而查看 R2 的路由表:

image-20240201190248910

在 R2 上由于已经将 192.168.200.254 宣告了出去,故而查看 R1 的路由表:

image-20240201190933808

最后测试网络连通性:

image-20240201191125837

image-20240201191213116

查看邻居表

1
R1#show ip eigrp neighbors 

image-20240201203333008

查看拓扑表

1
2
R5#show ip eigrp topology   # 查看当前使用链路(路由)
R5#show ip eigrp topology all-links # 查看所有链路(路由)

image-20240201205721475

假设 R5 要去往 R6 的 67.67.67.0/24 网段,那么 R5 有两条路可选。可以走上面去往67.67.67.0/24,也可以走下面去往67.67.67.0/24,不过,走下面不是最优路径,所需要的开销较高。因此,最优路径是走上面。

show ip topology 命令看到的,则是当前使用的链路(路由):

image-20240201211334623

这里使用的最优路径,而当 R5和R6的网络故障时,则会通过 R8 去往 67.67.67.0/24,如果我们想看所有链路,则需要加上 all-links

image-20240201211359243

查看路由表

1
R5#show ip route eigrp

image-20240201211441227

管理距离和组播地址

管理距离
  • 内部:90
  • 外部:170
  • 汇总:5

这里的内部表示路由数据来自邻居的 EIGRP 发送的,而外部则指的是来自于其他路由协议,比如 OSPF。

组播地址

更新的组播地址:224.0.0.10

协议号:88

DUAL 算法

特点
  • 无环路径
  • 无环备用路径,可立即使用
  • 快速收敛
  • 限定更新以使用最少带宽
选路

设有如下拓扑:

image-20240201213551843

​ 假设 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)

设有如下拓扑:

image-20240201213551843

后继路由器: 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

image-20240201220408971

其手中的 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 使用自己的可靠传输协议来确保路由信息的可靠传递。这个协议保证数据包的按序传递和可靠性,以确保路由器之间的一致性。

image-20240201223619239

建立邻居

  • AS(Autonomous System) 号必须一致。
  • 5K 必须一致
  • 认证 必须一致

EIGRP 配置实例

image-20240201225019990

配置IP和主机名过程省略,请参考【静态路由配置实例】

宣告网络
R1
1
2
3
4
5
R1#conf t 
Enter configuration commands, one per line. End with CNTL/Z.
R1(config)#router eigrp 1
R1(config-router)#network 12.12.12.1 0.0.0.0
R1(config-router)#network 192.168.100.254 0.0.0.0
R2
1
2
3
4
5
6
R2(config)#router eigrp 1 
R2(config-router)#network 12.12.12.2 0.0.0.0
R2(config-router)#network 23.23.23.2 0.0.0.0
R2(config-router)#network 32.32.32.2 0.0.0.0
R2(config-router)#network 24.24.24.2 0.0.0.0
R2(config-router)#network 42.42.42.2 0.0.0.0
R3
1
2
3
R3(config)#router eigrp 1 
R3(config-router)#network 23.23.23.3 0.0.0.0
R3(config-router)#network 32.32.32.3 0.0.0.0
R4
1
2
3
4
5
R4(config)#router eigrp 1
R4(config-router)#network 24.24.24.4 0.0.0.0
R4(config-router)#network 42.42.42.4 0.0.0.0
R4(config-router)#network 192.168.200.254 0.0.0.0
R4(config-router)#network 45.45.45.4 0.0.0.0
R5
1
2
R5(config)#router eigrp 1 
R5(config-router)#network 45.45.45.5 0.0.0.0
配置 SSH

根据需求,在 R1 开启 SSH 服务,并创建用户名 user1 密码 123 ,在 R3 通过 SSH 登录到 R1。

R1配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
R1(config)#username user1 privilege 15 password 123
R1(config)#ip domain name R1
R1(config)#crypto key generate rsa modulus 1024
The name for the keys will be: R1.R1

% The key modulus size is 1024 bits
% Generating 1024 bit RSA keys, keys will be non-exportable...
[OK] (elapsed time was 1 seconds)
R1(config)#
*Feb 3 16:24:13.040: %SSH-5-ENABLED: SSH 1.99 has been enabled
R1(config)#line vty 0 4
R1(config-line)#login local
R1(config-line)#transport input ssh

R3 登录:

image-20240203162548519

测试网络连通性

image-20240203162643221

OSPF

概念

​ OSPF (Open Shortest Path First开放式最短路径优先)是一个内部网关协议(Interior Gateway Protocol,简称IGP),用于在单一自治系统(autonomous system,AS)内决策路由。是对链路状态路由协议的一种实现,隶属内部网关协议(IGP),故运作于自治系统内部。著名的迪克斯彻(Dijkstra)算法被用来计算最短路径树。

特性

image-20240203175009293
  • 无环路

  • 收敛快

  • 扩展性好

  • 支持认证

原理

image-20240203175725705
  1. 邻居关系建立:
    • Hello协议: 路由器使用Hello协议定期发送Hello消息,用于发现相邻的OSPF路由器。当两个路由器之间收到对方的Hello消息时,它们就建立邻居关系。
  2. 链路状态信息交换:
    • LSA(Link State Advertisement): 路由器在邻居关系建立后,开始交换链路状态信息,即 LSA。每个路由器维护一个链路状态数据库(LSDB),LSA 包含了路由器所知道的关于网络的信息,例如连接到的邻居、链路的状态、带宽等。
  3. LSDB的构建:
    • LSA Flooding: 收到 LSA 后,路由器将其广播到整个 OSPF 区域,确保所有路由器都能获得最新的链路状态信息。这个过程被称为 LSA flooding( LSA 泛洪 )。
  4. SPF 计算:
    • SPF 算法: SPF 算法用于计算最短路径。每个路由器使用LSDB中的信息执行SPF算法,找到到达所有目的地的最短路径。这将形成一个最短路径树,用于确定到达其他网络设备的最佳路径。
  5. 路由表更新:
    • 最短路径树: SPF算法的结果被应用于路由表,形成每个目的地的最佳路径信息。路由器根据这些信息选择最佳的下一跳,并更新其路由表。
  6. 周期性更新:
    • Hello 和 LSA 的周期性发送: Hello消息和LSA周期性地发送,以确保邻居关系的持续存在并更新链路状态信息。这有助于网络及时适应拓扑变化。
  7. 区域划分(NA阶段了解):
    • 区域设计: OSPF网络可以划分为多个区域,每个区域内的路由器只关心本区域的链路状态信息。区域划分有助于减小LSDB的规模,提高网络的可扩展性。

配置

image-20240203180951233

配置大体跟 EIGRP 一致,不一致的是相互学习路由的 ospf 进程 id 可以不一致,但是建议一个网络中 OSPF 一致。

1
2
3
4
# 配置语法 
# 启动 ospf 进程
Router(config)# router ospf <进程id 1-65535>
Router(config)# network <要宣告的IP> <要宣告IP的反掩码> area <区域ID>

R1 配置:

1
2
3
R1(config)#router ospf 1
R1(config-router)#network 192.168.100.254 0.0.0.0 area 0
R1(config-router)#network 12.12.12.1 0.0.0.0 area 0

R2 配置:

1
2
3
R2(config)#router ospf 1
R2(config-router)#network 192.168.200.254 0.0.0.0 area 0
R2(config-router)#network 12.12.12.2 0.0.0.0 area 0

查看邻居表

1
R1#show ip ospf neighbor

image-20240203182014590

查看数据表

1
R1#show ip ospf database 

image-20240203182143382

查看路由表

1
R1#show ip route ospf

image-20240203182513975

管理距离和组播地址

管理距离:

  • 内部: 110
  • **外部: **110

更新的组播地址:

  • 224.0.0.5(内部)
  • 224.0.0.6 (外部)

OSPF 报文

image-20240203183255939

OSPF报文封装在IP报文中,协议号为89。

OSPF报文类型有5种:

  • Hello 报文
  • DD(Database Description)报文
  • LSR(Link State Request)报文
  • LSU(Link State Update)报文
  • LSACK(Link State Acknowledgment)报文

wireshark 抓包:

image-20240203183841546

邻居状态

image-20240203192846109

  1. Down(下线):
    • 描述: 初始状态,表示路由器与邻居之间没有建立连接。
    • 触发条件: 初始状态或与邻居的连接出现问题。
  2. Init(初始化):
    • 描述: 表示路由器已经发送 Hello 消息,但尚未收到邻居的响应。
    • 触发条件: 路由器发送 Hello 消息后,等待邻居的回应。
  3. 2-Way(双向):
    • 描述: 表示两个路由器之间已经建立了双向通信,但尚未进行邻居关系的完全建立。
    • 触发条件: 两个路由器互相确认了对方的 Hello 消息。
  4. Exstart(起始):
    • 描述: 表示两个路由器之间开始协商谁将成为 OSPF 邻居中的 Master(主)。
    • 触发条件: 进入 Exstart 状态后,路由器开始交换 OSPF 数据库描述符。
  5. Exchange(交换):
    • 描述: 表示路由器正在交换 LSDB(链路状态数据库)的摘要信息。
    • 触发条件: 在Exstart状态之后,Master 和 Slave 开始交换 LSDB 摘要信息。
  6. Loading(加载):
    • 描述: 表示路由器正在请求缺失的 LSA(链路状态通告)。
    • 触发条件: 在 Exchange 状态之后,路由器通过请求缺失的 LSA 来完善自己的 LSDB。
  7. Full(完全):
    • 描述: 表示邻居关系已经完全建立,路由器已经完成了数据库同步。
    • 触发条件: 路由器成功完成 Loading 状态,此时 LSDB 已经同步,邻居关系达到完全建立。

如果操作速度过快的话,可以看到如下状态:Init -> 2WAY -> Exstart -> Exchange -> Loading -> Full 最终状态停留在 Full

image-20240203194422254

Router ID、邻居和邻接

  1. Router ID:路由器标识,格式酷似 IP 地址,但不是 IP 地址,如果未手动配置,路由器将自动选择 Router ID。自动选择的 Router ID 基于系统的 IP 地址、循环(loopback)接口的 IP 地址等。

  2. 邻居: 在 OSPF 中,与路由器相邻的路由器被称为邻居。

  3. 邻接: 在 OSPF 中,邻接表示两个邻居路由器之间建立了有效的连接,并且可以交换详细的链路状态信息。邻接状态的建立包括一系列的状态转换,如 Exstart、Exchange、Loading,最终到达 Full 状态。

Router ID 的配置:

1
2
3
R1(config)#router ospf 1  
R1(config-router)#router-id 1.1.1.1
R1(config-router)#network 0.0.0.0 255.255.255.255 area 0

image-20240203200120040

image-20240203200149426

支持的网络类型

image-20240203200254229

默认情况下,OSPF 认为以太网的网络类型是广播类型,PPPHDLC 的网络类型是点到点类型。另外两种 NBMA 和帧中继已经见不到了。

DR 和 BDR

概念
  1. DR(Designated Router):
    • 在多access网络中,所有路由器都可以成为邻居,但为了减少邻居关系的数量和减轻LSA(Link State Advertisement)泛洪的负担,OSPF 引入了 DR 和 BDR的概念。
    • DR 是负责代表网络发送 LSA 的主要路由器。DR 的存在减少了在网络中形成邻居关系的路由器数量,降低了 LSA 的数量。
  2. BDR(Backup Designated Router):
    • 由于 DR 在网络中是唯一的,为了提供冗余,引入了 BDR。BDR 是 DR 的备份,负责在 DR 失效时接管其职责,确保网络中的 LSA 传播不会中断。
    • BDR 会保持与其他路由器的邻居关系,但它的主要职责是在 DR 失效时顶替 DR 的位置。
image-20240203203258648

比如以上网络拓扑中,RA 和 RB 照常建立邻居关系,而数据库都是从 BDR 和 DR 中同步,那么这就减少了 RA 和 RB 的互相同步数据包。

DR 可以减少广播型网络中的邻接关系的数量。

选举

image-20240203203742315

DR 是基于端口的优先级进行选举的,可以通过如下命令修改端口的优先级:。

1
2
3
R2(config)#int e0/0
R2(config-if)#ip ospf priority 255
R2(config-if)#

区域

image-20240203204628979

每个区域都维护一个独立的 database,``Area 0` 是骨干区域,其他区域都必须与此区域相连。

开销(cost)

image-20240203212937493

OSPF 的开销(cost)计算公式为:带宽参考值 / 接口带宽 (最小值为1)默认情况下,OSPF 使用默认的带宽参考值(100 Mbps)

以以上拓扑为例,去往 192.168.2.0/24 网段所花费的开销为 20

image-20240203213318713

image-20240203213721672

注意:和EIGRP一样只计算路由器出口接口的开销。

修改带宽参考值

如果接口带宽较大的话,默认参考带宽较小,实际上接口带宽没有显著优势,于是可以通过 auto-cost reference-bandwidt 命令修改带宽参考值

1
2
3
4
5
Router(config)#router ospf 1
Router(config-router)#auto-cost reference-bandwidt 10000
% OSPF: Reference bandwidth is changed.
Please ensure reference bandwidth is consistent across all routers.
Router(config-router)#

比如 带宽参考值为 10000 / 接口带宽为1000 = 100 ,那么较大的接口带宽就会有显著优势。

cost 值修改

当然我们还可以直接修改某个接口计算的 cost 值,从而控制路由选路:

1
2
3
R1(config)#
R1(config)#int e0/0
R1(config-if)#ip ospf cost 10

配置实例

image-20240203220716115

进行以下操作时均已为设备配置完毕主机名、IP地址。

宣告网络
R1
1
2
3
4
5
6
R1(config)#
R1(config)#router ospf 1
R1(config-router)#router-id 1.1.1.1
R1(config-router)#network 12.12.12.1 0.0.0.0 area 0
R1(config-router)#network 192.168.100.254 0.0.0.0 area 0
R1(config-router)#
R2
1
2
3
4
5
6
7
8
R2#conf t
R2(config)#router ospf 1
R2(config-router)#router-id 2.2.2.2
R2(config-router)#network 12.12.12.2 0.0.0.0 area 0
R2(config-router)#network 23.23.23.2 0.0.0.0 area 0
R2(config-router)#network 32.32.32.2 0.0.0.0 area 0
R2(config-router)#network 24.24.24.2 0.0.0.0 area 0
R2(config-router)#network 42.42.42.2 0.0.0.0 area 0
R3
1
2
3
4
5
R3(config)#
R3(config)#router ospf 1
R3(config-router)#router-id 3.3.3.3
R3(config-router)#network 23.23.23.3 0.0.0.0 area 0
R3(config-router)#network 32.32.32.3 0.0.0.0 area 0
R4
1
2
3
4
5
6
7
R4(config)#router ospf 1 
R4(config-router)#router-id 4.4.4.4
R4(config-router)#network 24.24.24.4 0.0.0.0 area 0
R4(config-router)#network 24.24.24.4 0.0.0.0 area 0
R4(config-router)#network 42.42.42.4 0.0.0.0 area 0
R4(config-router)#network 45.45.45.4 0.0.0.0 area 0
R4(config-router)#network 192.168.200.254 0.0.0.0 area 0
R5
1
2
3
4
R5#conf t
R5(config-router)#router-id 5.5.5.5
R5(config)#router ospf 1
R5(config-router)#network 45.45.45.5 0.0.0.0 area 0
配置 telnet

根据 需求 R2 上 配置 telnet 服务,用户名 user1 密码 123, 在 R3 上登陆 R2。

1
2
3
4
5
R2(config)#username user1 privilege 15 password 123  
R2(config)#service password-encryption
R2(config)#line vty 0 4
R2(config-line)#login local
R2(config-line)#transport input telnet

R3 上 登录 R2:

image-20240203222602106

测试网络连通性

image-20240203222714670