选路
- 路由器是Internet的核心设备,它要完成网络层的两个基本功能:选路和转发。
- 选路过程负责创建和维护每台路由器上的路由表;
- 转发过程则在路由表中信息指导下,执行逐跳的转发,最终将分组发送到目的地。
- 选路指导转发,是转发过程正确执行的基础。
路由表的创建
- 路由表是保存在路由器内存中的一个数据库文件,它存储了本地直连网络和已知的远端网络相关的路由信息,这些路由信息指导路由器通过正确的本地接口将分组转发到目的地。
- 直连网络指与路由器的本地接口直接相连的网络,远端网络指与本路由器不直接相连,但通过其它路由器可达的网络。
- 路由表中描述直连网络的路由项称为直连路由。当路由器正确配置了接口的IP地址和网络掩码后,由接口的网络前缀、掩码、接口类型、编号等信息构成的直连网络的路由项也自动由路由器写入路由表。
- 每个远端网络的路由信息则必须通过静态和动态两种方式之一添加到路由表中:
(1)静态方式:指由网络管理员为远端网络手动配置静态路由,静态路由项不随网络拓扑结构的改变而改变。
(2)动态方式:指路由器之间通过路由协议交换路由信息来建立和更新路由表中远端网络的路由项。使用路由协议的好处是,一旦网络的拓扑结构发生变化,路由器就会相互交换路由信息,自动更新相应的路由项。
路由协议
根据Internet路由框架,路由协议不管采用的传送机制是什么,都是网络层的控制协议,都属于网络层。
路由协议的主要功能:
- 自动发现远端网络的信息
- 计算到每个远端网络的最佳路径,将计算所得的路由信息添加到路由表
- 监视网络的拓扑变化,更新和维护路由表的内容。
采用路由协议的主要缺点是,路由器之间交换路由信息需要占用部分带宽,维护路由表也需要占用部分的CPU时间。
路由协议的分类
按照工作的区域划分
协议名称 | 简单介绍 | 举例 |
内部网关协议 IGP(Interior Gateway Protocol) | 用于在单个路由域内交换路由信息 | RIP、OSPF |
外部网关协议 EGP(Exterior Gateway Protocol) | 用于在AS之间交换路由信息 | BGPv4 |
根据路由器搜集网络拓扑信息、分析和计算最优路径的方式分
协议名称 | 简单介绍 | 举例 |
距离矢量路由协议 | 指一个路由域中的路由器通过以距离和方向构成的矢量来通告路由信息。其中到目的网络的距离用跳数来度量,方向则用到目的网络的下一跳或本地转发接口表示,使用Bellman-Ford算法计算生成路由表 | RIP |
链路状态路由协议 | 指一个路由域中的路由器通过相互交换链路状态信息,获取整个路由域完整的“网络地图”和每条链路的精确开销,然后使用Dijkstra算法计算生成路由表 | OSPF |
GNS3仿真(静态路由)
- 拓扑结构、IP规划
- 配置主机IP地址、网关地址
- 配置路由器端口
- 查看端口配置(检查上一步中的端口配置是否成功)
- 静态路由配置
在配置静态路由之前,先搞清楚哪些远端网段需要配置,以及到达这些网段的下一跳地址
输入命令:ip route 目的网段网络前缀对应子网掩码下一跳地址 - 查看路由表
- 测试ping
PC1与其他四台主机可以ping通。
静态路由补充 - 缺省路由
当遇到比较复杂的拓扑结构,在配置静态路由时,比较繁琐,极有可能会漏掉某些需要设置的路由。
在之前的步骤可以看到,路由器R1到达远端网段的下一跳地址都是60.60.60.1,R2到达远端网段的下一跳地址都是70.70.70.1
因此在此拓扑结构下,还可以有另一种配置静态路由的方式,就是缺省路由。
缺省路由:缺省路由是一种特殊的路由,当路由表中所有其它路由都不能匹配时,将使用缺省路由。优先级最低,使得路由表得到极大的简化。
- 配置举例:
- 当R1和R2分别设置了缺省路由,在之前步骤中配置的几条路由表项都可以不再出现,但仍然能够达到同样的效果。
现在将之前配置的路由表项删除,进行测试ping - 删除之后,查看路由表
- 测试PING
PC1与其他四台主机仍然能够PING通。
OSPF协议
开放式最短路径优先协议OSPF(Open Shortest Path First)是IETF组织开发的一个基于链路状态的自治系统内部路由协议,用于在AS内部选择路由。它是目前IP网中最流行、使用最广泛的域内路由协议之一。开放是指该协议不是某机构或公司专有的,而最短路径优先是指该协议使用Dijkstra最短路径算法以找到去往目的网络的最佳路径。
协议简介
- OSPF是采用链路状态算法的动态路由协议,每台运行OSPF的路由器都将形成自己的链路状态信息,OSPF将这样的状态信息称为链路状态通告LSA( Link State Advertisement),路由器通过洪泛机制将这些状态信息传送给AS中其它的路由器。
- 通过这些LSA的洪泛, 每台路由器都维持着一个数据库以描述AS的拓扑结构。这个数据库被称为链路状态数据库LSDB(Link State Database),它实质上是一个网络地图,用来描述整个OSPF网络的拓扑结构。利用这样的网络拓扑数据库,每个路由器都能利用最短路径算法SPF独立地计算去往目的网络的最短路径。每台路由器实质上构建了一棵以自身为树根的最短路径树,表示到达AS中各个目的网络的最短路径。计算出最短路径后,路由器会根据此信息生成路由表。由于OSPF通过收集到的链路状态用最短路径树算法计算路由,因此算法本身保证了不会产生路由自环。
- 为了支持大规模网络应用,优化路由表,OSPF采取了区域划分的概念,允许将自治系统内的子网划分成区域(Area)来管理,区域间的路由信息被进一步抽象,从而减少了占用网络的带宽。进行分区后,区域内采用上述的链路状态算法计算路由,但区域间传送的则是距离矢量信息,因此OSPF要求区域间拓扑要形成星形结构,以防止环路的产生。
基本概念
- 路由器ID(Router ID)
RouterID用于识别每台运行OSPF协议的路由器,每台运行OSPF的路由器都需要一个RouterID。在一个自治系统内,每台路由器的RouterID必须是唯一的。RouterID采用32bit的无符号整数表示,与IP地址类似。
RouterID可以手工配置,或将其配置为该路由器某个接口的IP地址。由于IP地址是唯一的,这样就很容易保证RouterID的唯一性。在没有手工配置RouterID的情况下,一些厂家的路由器会选择一个loopback地址作为其RouterID,若路由器没有配置loopback地址,则从当前物理接口中选择IP地址最大的作为其RouterID。 - 链路(link)与接口(interface)
在OSPF中,一条链路通常是指路由器的一个接口。当使用network指令将路由器的一个接口加入到OSPF的路由域中时,该接口就成为一个OSPF的链路。 - 邻居路由器(Neighboring Routers)
通过直连链路互联的两台或多台路由器称为邻居路由器。如连接在一个点到点链路上的两台路由器可以互为邻居,而连接到一个以太网上的多台路由器也可以互为邻居。 - 邻居表(Neighbor Database)
每个运行OSPF的路由器都会有一个邻居关系数据库,记录了所有与它建立了联系的邻居路由器。 - 链路状态数据库(拓扑表)LSDB(Link State Database)
LSDB包含了网络中的链路状态,它表示着整个网络的拓扑结构。每个OSPF路由器中都会有一个链路状态数据库,在不分区域的情况下,自治域内所有路由器的链路状态数据库都是相同的,如果划分了区域Area,那么同一Area内路由器的链路状态数据库是相同的。 - 路由表(Routing Table)
每个路由器在链路状态数据库的基础上,利用SPF算法计算一棵以自己为根的最短路径树,得到去往每一个目标网络的路由,即为路由表。 - DR和BDR
名称 | 简要说明 |
DR(Designated Router)指定路由器,也称作主路由器 | 负责在一个网段中传递链路状态信息。网段内所有的路由器都只将链路状态信息发送给DR,再由DR 将链路状态信息发送给本网段内的其它路由器 |
BDR是(Backup Designated Router)备用指定路由器 | 它是在DR失效时接替DR工作的路由器。BDR也和本网段内的所有路由器建立邻接关系并交换路由信息。当DR 失效后,BDR 会立即成为DR。 |
设立DR/BDR的目的是减少网络中路由信息的交互流量。DR会维护一个完整的网络拓扑数据库,并通过多播将更新消息传给其它路由器。一个区域中的所有路由器将仅和DR/BDR形成邻接关系。每次当路由器发送更新包时,它通过多播地址224.0.0.6将更新包发给DR/BDR,DR/BDR再将更新包通过多播地址224.0.0.5发给区域内的其它路由器。用这种方式所有的路由器不需要通过彼此的通信实现更新,它们仅需跟DR/BDR通信完成所有的路由更新。
需要注意:DR和BDR的概念仅仅影响路由器之间路由信息的交互,也就是说路由信息只在DR/BDR和其它路由器之间传递;但它并不影响实际的IP报文的转发路径,IP包的转发可能在任意路由器之间进行,其依据是路由表。
OSPF支持的网络类型
OSPF协议计算路由是以本路由器周边网络的拓扑结构为基础的。每台路由器将自己本地的网络拓扑描述出来,传递给其它所有的路由器。OSPF 将不同的网络拓扑抽象为以下四种类型:
类型 | 简要说明 |
点到点网络(point-to-point) | 路由器通过点到点的链路与另一台路由器相连 |
广播型网络(broadcast) | 路由器通过广播网络与多台路由器相连 |
NBMA网络 | 路由器通过非广播多点可达网络(NBMA:Non Broadcast Multi Access)与多台路由器相连。NBMA是指二层网络不采用广播机制工作,但多台路由器之间仍然可以互通 |
点到多点网络(point-to-multipoint) | 路由器通过点到多点的网络与多台路由器相连,这一类的网络不支持广播机制。 |
在广播型和NBMA的网络上需要选举DR/BDR,在点到点和点到多点的链路上不进行选举。
OSPF协议的报文类型
OSPF中定义了5种报文用于邻居路由器之间的信息交互:
类型 | 说明 |
Hello报文 | 用于建立和维护相邻的两个OSPF路由器的关系 |
数据库描述DBD报文 | 发送链路状态头部信息 |
链路状态请求LSR报文 | 把从DBD中找出需要的链路状态头部信息传给邻居,请求完整信息 |
链路状态更新LSU报文 | 将LSR请求的头部信息对应的完整信息发给邻居 |
链路状态确认LSAck报文 | 收到LSU报文后确认该报文 |
OSPF协议的三个阶段
阶段类型 | 说明 |
邻居发现 | 通过发送Hello报文形成邻居关系 |
路由通告 | 发送链路状态头部信息 |
路由计算 | 根据最短路径算法算出路由表 |
OSPF协议的四张表
表类型 | 说明 |
邻居表 | 主要记录形成邻居关系路由器 |
链路状态数据库 | 记录链路状态信息 |
OSPF路由表 | 通过链路状态数据库得出 |
全局路由表 | OSPF路由与其他比较得出 |
OSPF协议交互过程
初始化时,OSPF路由器之间的交互过程包括两大部分
- 邻居关系的建立过程
- 拓扑数据库的同步过程
初始化结束之后,OSPF还将每隔30秒周期性地同步链路状态数据库。
邻居关系状态转移图:
邻居关系建立过程如果路由器之间通过以太方式相连,不会经过状态转移图中的Attempt状态,该状态只适用于NBMA 类型的接口,处于本状态时,路由器将定期向那些手工配置的邻居发送Hello报文。
- OSPF进程刚启动时,Router A处于down状态,它开始向加入OSPF进程的接口发送Hello报文, 该Hello包的目的地址是多播地址224.0.0.5。
- 与A直连的路由器B收到A的Hello包后,把路由器A的RouterID添加到自己的邻居列表中,这个状态是init状态。该状态表示已经收到了邻居的Hello报文,但对方并没有收到自己发的Hello报文。
- 路由器B向路由器A发送回应Hello包,Hello包中包含B知道的所有邻居路由器的RouterID,当然也包括路由器A的RouterID。
- A收到该Hello包后,发现B所发的Hello包中包含自己的RouterID,因此将路由器B添加到自己的邻居表中。这个状态叫做2-way。该状态表示双方互相收到了对端发送的Hello报文,双方建立了邻居关系。
双方路由器进入2-way状态,标志着双方的邻居关系成功建立,两个路由器中建立起邻居列表数据库。之后,路由器A、B还将周期性地在网络中交换Hello数据包,以确保通信仍然在正常工作。
拓扑数据库的同步过程
邻居关系建立后,两台路由器之间就可以发送链路状态信息了。这里要用到OSPF中定义的其它4种报文:数据库描述DBD报文、链路状态请求LSR报文、链路状态更新LSU报文、链路状态确认LSAck报文。
- 路由器与它的邻居路由器之间通过发送Hello报文确定主从关系。OSPF规定拥有高RouterID的路由器成为主路由器。建立主/从关系主要是为了保证在后续的DBD 报文交换中能够有序的发送。此时,路由器处于ExStart状态。
- 主从路由器间交换DBD报文,路由器进入Exchange状态。两台路由器进行数据库同步时,用DBD 报文来描述自己的链路状态数据库LSDB,内容包括LSDB中每一条LSA 的摘要,摘要是指LSA 的头部信息,通过该信息可以唯一标识一条LSA。根据DBD报文,两端的路由器可以判断出哪些LSA是自己已经有的,哪些LSA不存在。因为LSA 的头部信息只占一条LSA 的整个数据量的小部分,因此采用DBD报文可以减少路由器之间所传递的信息量。
- 两台路由器互相交换过DBD报文之后,通过检查DBD中LSA的头部序列号,将它接收到的信息和它拥有的信息做比较,可知对端的路由器有哪些LSA是本地的LSDB所缺少的或是对端更新的LSA,之后路由器将向另一个路由器发送数据状态请求包(LSR)。此时,路由器处于Loading状态。
- 另一台路由器将使用链路状态更新包LSU回应请求,并在其中包含所请求条目的完整信息。当路由器收到一个LSU时,它将发送LSAck包回应。路由器添加新的链路状态条目到它的链路状态数据库中。
- 当给定路由器的所有LSR都得到了满意的答复时,邻居路由器就被认为达到了同步并进入“Full”状态。在此状态下,邻居路由器的LSDB中所有的LSA都记录在本路由器的数据库中了。
一个网段内的邻接关系只在DR和其它路由器之间建立,两台不是DR的路由器(称为DROther)之间仅仅建立邻居关系,而不再建立邻接关系,换句话说,DROther之间只互相建立邻居关系,而不进行拓扑数据库的同步过程。
GNS3仿真 - 动态路由OSPF(单域)
- 拓扑结构、IP规划、区域规划
- 配置主机IP地址、网关地址
输入命令:ip 主机IP地址/网络前缀位数 网关地址
- 配置路由器端口
- 进入特权配置模式
- 进入接口配置模式
- 输入命令:ip address 接口IP地址 对应子网掩码
- 查看端口配置(检查上一步的端口配置是否成功)
命令:show ip interface brief
- 配置OSPF
命令:
conf t //进入特权配置模式
router ospf 1 //创建ospf 1进程
network 网络前缀 反子网掩码 区域 // 宣告ospf 进程1的各网段信息
- 查看路由表
命令:show ip route
- 测试ping
PC1可以ping通该区域中的所有网段。
PC2也可以ping通该区域中的所有网段。
GNS3仿真 - 动态路由OSPF(多域)
- 拓扑结构、IP规划、区域规划
- 配置主机IP地址、网关地址
- 配置路由器端口,然后查看端口配置
- 配置OSPF
- 查看路由表
- 查看OSPF端口信息
可以看到
区域 | DR | BDR |
area 0 | router-id为10.1.1.1的R1 | router-id是10.1.2.1的R2 |
area 10 | router-id是10.1.1.1的R1 | 无 |
area 20 | router-id是10.1.2.1的R2 | 无 |
- 查看数据库信息
各个数据库表中的表项含义如下:
Router Link States表中
表项 | 含义 |
link id | 本区域所包含路由器的router-id |
ADV router | 自身router-id |
Net Link States表中
表项 | 含义 |
link id | 本区域DR的ip接口地址 |
ADV router | 本区域DR的router-id |
Summary Net Link States表中
表项 | 含义 |
link id | 本区域之外网段的网络前缀 |
ADV router | 要到达外部目的网段需要经过路由器的router-id |
共有的表项含义如下:
表项 | 含义 |
Age | 老化时间(0-3600s),是LSA的生存时间,(16bit)每经过一个节点就会变大,其值越小越新。 |
Seq | 序列号,数值越大视为越新。 |
Checksum | 校验和,计算出来age字段以外的所有字段,每隔五分钟校验一次。 |
LSA百度百科
- 测试ping
PC2可以ping通该拓扑结构中的所有网段。
PC1可以ping通该拓扑结构中的所有网段。