网络互联核心的任务是解决路由问题,路由器的作用就是将各个网络彼此连接起来,负责不同网络之间的数据包传送。而路由器工作的核心就是路由表,路由器使用路由表来确定转发数据包的最佳路径。本章介绍路由器组件、路由器启动过程和路由决策过程等内容。
4.1路由器概述
4.1.1 路由器组件
路由器是一台特殊用途的计算机,它的主要功能是确定发送数据包的最佳路径并将数据包转发到目的地。和常见的PC一样,路由器有CPU、内存、ROM等组件。路由器没有键盘、鼠标和显示器等组件;然而比起计算机,路由器多了NVRAM、Flash 以及类型丰富的接口。路由器各个组件及其作用如下所述。
- CPU:中央处理单元,和计算机一样,CPU 执行操作系统指令,如系统初始化、路由功能和交换功能等。
- 内存:内存存储CPU所需执行的指令和数据。如路由器配置文件、IP路由表、ARP表等都存储在内存中,路由器重新启动或断电,内存中的内容会丢失。
- Flash:闪存,是非易失性存储器,可以以电子的方式存储和擦除。闪存用来存储IOS映像文件。在大多数型号的Cisco路由器中, IOS存储在闪存中,在启动过程中才复制到RAM执行。路由器重新启动或断电,闪存中的内容不会丢失。
- NVRAM:非易失性(Non-volatile)RAM,用来存储启动配置文件(startup-config)。路由器配置的更改信息都存储在RAM的配置(running-config)文件中,并由IOS立即执行。要保存这些更改信息以防路由器重新启动或断电文件丢失,必须将running-config文件保存到NVRAM 中,存储文件名为 startup-config。路由器重新启动或断电,NVRAM 不会丢失存储在其中的内容。
- ROM:是一种永久性存储器。Cisco设备使用ROM来存储引导程序(Bootstrap)、基本诊断软件和有限功能 IOS 等。ROM使用的是固件,即内嵌于集成电路中的软件。固件包含一般不需要修改或升级的软件,如启动指令。路由器断电或重新启动,ROM中的内容不会丢失。升级一般需要更换芯片。
- 管理端口:管理端口主要有控制台(Console)端口、Mini-B USB 控制台端口和辅助(AUX)端口。控制台端口用以连接终端(即运行终端模拟器软件的计算机)。对路由器进行初始配置时,必须使用控制台端口。辅助端口的使用方式与控制台端口类似,此端口通常用以连接调制解调器。
- 网络接口:路由器可以用多个接口连接不同的网络,不同路由器提供的可使用接口也可能不同。路由器上常见的接口是以太网接口和串行接口。比如Cisco 2911路由器提供3个千兆位以太网接口,4个 EHWIC 插槽(可以插入 HWIC-2T、HWIC-4ESW、HWIC-8A、HWIC-1ADSL 和 HWIC-ITI/E1等模块)以及一个服务模块(Service Module)插槽(可以插入SM-D-72FXS、SM-D-ES3G-48-P和SM-32A等模块)。大多数网络接口在模块旁配有一个或两个 LED链路指示灯。通常,绿色LED表示连接正常,而呈绿色闪烁的LED 表示链路处于活动状态。如2911路由器的千兆位以太网接口的L(Link)指示灯表示链路是否处于活动状态,S (Speed)指示灯表示接口的运行速率,其闪烁和暂停的频率代表运行速率。又比如当控制台旁边的EN指示灯为绿色的时候,表示连接正常。
随着网络的不断扩大,选择合适的路由器来满足其业务要求很重要。根据应用场合,路由器分为以下三类。
- 分支机构路由器:分支机构路由器可优化单一平台上的分支机构服务,同时在分支机构和 WAN 基础架构上提供最佳应用体验。要最大限度地提高分支机构的服务可用性,网络需要能够全天候正常运行。高度可用的分支网络必须确保能够从网络故障中快速恢复,同时尽量减少或消除对服务的影响,并提供简单的网络配置和管理。
- 网络边缘路由器:网络边缘路由器使网络边缘能够提供高性能、高安全性和可靠的服务,用于连接园区、数据中心及分支机构网络。为了满足客户期望的互动性、个性化、移动性和安全性的要求,网络边缘路由器必须提供更好的服务质量、无中断视频和移动等功能。
- 服务提供商路由器:服务提供商路由器通过提供端到端的可扩展解决方案及用户感知服务来增加收入。运营商必须优化运营、降低费用、提高可扩展性和灵活性,以便在所有的设备和位置上提供下一代互联网体验。
4.1.2 路由器启动过程
路由器启动过程主要分为以下3个阶段,如图4-1所示。
图4-1 路由器启动过程
1、执行开机自检和加载引导(Bootstrap)程序
POST (Power-On Self Test,POST)过程用于检测路由器硬件。当路由器加电时,ROM芯片上的软件便会执行POST进行诊断,主要针对CPU、RAM和NVRAM 等在内的硬件组件。POST完成后,路由器将执行引导(Bootstrap)程序。Bootstrap程序将IOS映像文件从ROM 复制到RAM中,然后CPU 会执行 Bootstrap程序中的指令。Bootstrap程序的主要任务是查找IOS 映像文件并将其加载到RAM中。
2、查找并加载IOS
IOS映像文件通常存储在闪存中,也可能存储在TFTP服务器中等其他位置上。找到IOS映像文件后,开始加载IOS,在映像文件解压缩过程中会看到一串#号。路由器寻找IOS映像的顺序,还取决于配置寄存器(Configuration Register)的启动域以及其他的设置(如用bootsystem命令可以指定查找IOS 的顺序)。配置寄存器是一个2字节的寄存器,低4位就是启动域,不同的值代表从不同的位置查找IOS,默认时寄存器值为0x2102,即启动域的值为2。默认情况下路由器首先从Flash 查找IOS,然后查找TFTP服务器。如果不能找到IOS映像文件,路由器会进入监控(Rommon)模式。
3、查找并加载配置文件
IOS加载成功后,引导程序会搜索NVRAM 中的启动配置文件。此文件含有已经保存的配置命令和参数。如果启动配置文件位于NVRAM中,路由器会将其复制到 RAM中作为运行配置文件并执行。如果 NVRAM中不存在启动配置文件,或者在寄存器值为0x21422情况下路由器会提示是否进入设置(setup)模式。设置模式包含一系列交互式问题,提示用户输入一些基本的配置信息。设置模式不适合复杂的路由器配置,网络管理员一般不会使用该模式,通过【CTRL】+【C】组合键可以退出 setup模式。
4.1.3 路由器转发数据包机制
路由器支持以下3种数据包转发机制。
1、进程交换
进程交换是一种较早版本的数据包转发机制,当数据包到达路由器某个接口时,将其转发到控制平面,在控制平面上CPU 将目的地址与其路由表中的条目进行匹配,然后确定送出接口并转发数据包。路由器会对每个数据包执行此操作,也就是说每个数据包都必须由CPU单独处理,即使数据流的源IP地址和目IP地址地是相同的。这种进程交换机制效率低下,在现代网络中很少使用。
2、快速交换
快速交换也称为基于流(Flow-Based)的交换,这是一种常见的数据包转发机制,使用快速交换缓存来存储下一跳信息。当数据包到达路由器某个接口时,将被转发到控制平面,在控制平面上CPU将在快速交换缓存中搜索匹配项。如果不存在匹配项,则对数据包采用进程交换并将其转发到送出接口,整个数据流信息同时会被存储到快速交换缓存中。如果去往同一目的地的另一个数据包到达路由器接口,则缓存中的下一跳信息可以重复使用,无须CPU的干预。但有一点需要注意,IP路由表的改变会使快速交换缓存无效,在路由不断变化的网络环境中,快速交换的优点将受到很大抑制。
3、Cisco快速转发
Cisco快速转发(Cisco Express Forwarding,CEF)也称为基于拓扑(Topology-Based)的交换,是 Cisco路由器首选使用的数据包转发机制。CEF 将构建转发信息库 (ForwardingInformation Base,FIB)和邻接表(Adjacency Table)。FIB和路由表是同步的,是CPU根据路由表进行递归查找而生成的,当网络中路由或拓扑结构发生变化时,IP路由表就被更新,而这些变化也将反映在FIB中,尤为关键的是FIB的查询由硬件执行,查询速度快得多。郭接表和ARP表有些类似,主要放置了二层重写时需要的封装信息。FIB和邻接表在数据转发之前就已经准备好了,这样一有数据要转发,路由器就能直接利用它们进行数据转发和封装,不需要查询路由表和发送ARP请求,所以路由效率大大提高。
4.2 路由决策
4.2.1 IP路由原理
路由是指把数据包从源发送到目的的行为和动作,而路由器是执行这种行为和动作的设备。当路由器从某个接口收到IP数据包时,它会确定使用哪个接口将该数据包转发到目的地。因此路由器转发数据包的行为包括确定数据包的最佳路径和将数据包转发到目的地。路由器使用路由表来确定转发数据包的最佳路径。当路由器收到数据包时,它会检查其目的IP地址,并在路由表中搜索最佳匹配网络地址,一旦找到匹配条目,路由器就会将IP数据包封装到出接口相应的数据链路帧中进行转发。数据链路帧可以是以太帧、PPP帧或HDLC帧等,数据链路封装取决于路由器接口的类型及其连接的介质类型。
路由器路由数据包过程如图4-2所示。数据包从计算机A到达服务器B过程如下:当主机A要发送IP数据包给服务器B时,将IP数据包先按照以太网帧格式进行封装,然后送到默认网关,即路由器R1,R1 从 GO/0接口收到该以太网帧后,将数据包解封(删除二层帧头和帧尾),Rl使用数据包的目的IP地址搜索路由表,查找匹配的网络地址。在路由表中找到目的网络地址后,确定出接口为SO/0/0,R1将数据包重新封装(二层重写)到PPP帧中,然后将数据包转发到R2。R2接着执行和上述类似的过程,数据包最后到达服务器B。在整个数据包传递过程中,二层信息会被重写,但是三层IP信息保持不变。
图4-2 路由器路由数据包过程
4.2.2 管理距离和度量值
1、管理距离(Administrative Distance.AD)
管理距离用来定义路由来源的可信程度,范围是0~255的整数值,值越低表示路由来源的优先级别越高,0表示优先级别最高。默认情况下,只有直连网络的管理距离为0,而且这个值不能更改。静态路由和动态路由协议的管理距离是可以修改的。表4-1列出了直连、静态路由以及常见动态路由协议的默认管理距离。
2、度量值(Metric)
度量值是路由协议用来分配到达远程网络的路由开销的值。对于同一种路由协议,当有多条路径通往同一目的网络时,路由协议使用度量值来确定最佳路径。度量值越低,路径越优先。每一种路由协议都有自己的度量方法,所以不同的路由协议决策出的最佳路径可能不同。IP路由协议中经常使用的度量标准如下所述。
- 跳数:数据包经过的路由器个数。
- 带宽:链路的数据承载能。
- 负载:链路的通信使用率。
- 延时:数据包从源到达目的需要的时间。
- 可靠性:通过接口错误计数或以往链路故障次数来估计出现链路故障的可能性。
- 开销:链路上的费用,OSPF 中的开销值是根据接口带宽计算的。
4.2.3 路由表
路由表是保存在 RAM 中的数据文件,存储了与直连网络以及远程网络相关的信息。路由表包含网络与下一跳的关联信息。这些关联信息告知路由器:要以最佳方式到达某一目的地,可以将数据包发送到特定路由器(即在到达最终目的地的途中的下一跳)。下一跳也可以关联到通向最终目的地的送出接口。路由器在查找路由表的过程中通常采用递归查询。路由器通常用以下3种途径构建路由表。
- 直连网络:就是直连到路由器某一接口的网络,当然,该接口要处于活动状态,路由器自动将和自己直接连接的网络添加到路由表中。
- 静态路由:通过网络管理员手工配置添加到路由器表中。
- 动态路由:由路由协议(如RIP、EIGRP、OSPF、IS-IS 和 BGP等)通过自动学习来构建路由表。
可以通过show ip route命令来查看路由器的路由表,下面是路由表的一个例子。
路由表的具体查找过程将在第6章中详细介绍。当路由器添加路由条目到路由表中时,遵循如下原则:
- 有效的下一跳地址。
- 如果下一跳地址有效,路由器通过不同的路由协议学到多条去往同一目的网络的路由,路由器会将管理距离最小的路由条目放入路由表中。
- 如果下一跳地址有效,路由器通过同一种路由协议学到多条去往同一目的网络的路由,路由器会将度量值最小的路由条目放入路由表中。
路由表的工作原理如下如下所述。
- 每台路由器根据其自身路由表中的信息独立做出转发决定。
- 一台路由器的路由表中包含某些信息并不表示其他路由器也包含相同的信息。
- 从一个网络能够到达另一个网络并不意味着数据包一定可以返回,也就是说路由信息必须双向可达,才能确保网络可以双向通信。