网络路由详解

时间:2022-09-11 11:28:27

基本概念

IP地址可以识别主机和路由器,而路由器有多个端口,分别连接不同的网络区域。通过识别目的IP地址的网络号,再根据路由表进行数据转发。

主机和路由器都会维护一张路由表,里面存放着目的地址段和下一跳的地址。

网络路由详解

除了路由器,三层交换机、防火墙、负载均衡设备甚至主机等设备都可以进行路由操作,只要这个设备支持路由功能路由表是路由器通过各种途径获得的路由条目,每一个路由条目包含目的网段地址、子网掩码、路由协议、出接口、下一跳 IP 地址、路由优先级和度量值等信息。

网络路由详解

路由表的来源分为三类:直连路由、静态路由和动态路由。

  • 直连路由:路由器直接连接的路由条目,只要路由器接口配置了IP地址,接口状态正常,就会自动生成对应的直连路由,Proto字段为Direct
  • 静态路由:手动添加的。Proto字段为Static。
  • 动态路由:通过路由协议从相邻路由器学习到的。Proto字段为具体的路由协议,如RIP等。

不同来源的路由有不同的优先级,值越小,优先级越高。当存在多条目的网段相同时,具有高优先级的路由成为最优路由。

网络路由详解

一条路由条目,无论是静态的还是动态的,都需要关联到一个出接口,路由的出接口可以是这个设备的物理接口,如千兆网口,也可以是逻辑接口,如 VLAN 接口,或者是隧道接口等。其中有一种接口非常特殊,那就是 Null 接口,只有一个编号,那就是 0 。Null0 是一个系统保留的逻辑接口,当网络设备在转发数据包时,如果使用出接口 Null0 的路由,那么数据包将被丢弃,就像被扔进了一个黑洞里,因此出接口为 Null0 的路由条目又被称为黑洞路由

路由协议

工作流程

路由器之间需要运行相同的路由协议,才能相互交换路由信息。每种路由协议都有自己的语言,即相应的路由协议报文。如果两台路由器启动了相同的路由协议,那么就有了相互通信的基础。不同的路由协议,有相同的目的,就是计算和维护路由表。通常工作过程包含 4 个阶段:

  • 邻居发现阶段:运行了路由协议后,路由器会主动把自己的网段信息发送给相邻的路由器。既可以使用广播发送路由协议消息,也可以单播将路由协议消息发送给指定的邻居路由器。
  • 交换路由信息阶段:发现邻居后,每台路由器都将自己的路由信息发送给相邻的路由器,相邻路由器又发送给下一个相邻的路由器。经过一段时间后,每台路由器都会收到网络中所有的路由信息。
  • 计算路由阶段:每一台路由器都会运行某种算法,计算出最终的路由表来。
  • 维护路由阶段:为了感知突然发送的网络故障,比如:设备故障或线路中断等,路由协议规定相邻两台路由器之间,应该周期性发送协议报文。如果路由器在一段时间内,没收到邻居发来的协议报文,就认为邻居路由器失效。

随着 IP 网络的发展,网络规模已经很大了,无论哪种路由协议都不能完成全网的路由计算,因此网络分成了很多个自治系统( AS , Autonomous System )或路由选择域 ( Routing Domain )。自治系统可以制定自己的路由策略,并管理自治系统内进行具体路由控制的路由器集合。

每个自治系统都有一个编号,范围是1—65535,通过路由协议和自治系统编号,路由器可以确定路由路径和路由信息的交换方式。

网络路由详解

自治系统内部使用的协议是域内路由协议,即IGP。RIP、OSPF属于IGP。

自治系统之间的路由控制使用的是域间路由协议,即EGP。BGP属于EGP。

路由器工作原理

协议类型

按照路由的算法和路由信息的交换方式,路由协议可以分为距离矢量( Distance-Vector ,D-V )路由协议和链路状态( Link-State )路由协议。其中典型的距离矢量协议是 RIP ,典型的链路状态协议是 OSPF

距离矢量路由协议

距离矢量这个概念包含两个关键的信息:距离方向,其中距离是指到达目的网络的度量值(即所要经过路由器的个数),而方向指的是到达目的网络的下一跳设备。

链路状态路由协议

运行链路状态路由协议的路由器会使用一些特殊的信息描述网络的拓扑结构和 IP 网段,这些信息被称为链路状态信息LSA ),所有路由器都会产生自己直连接口的链路状态信息。

路由器将网络中泛洪的链路状态信息搜集起来,存入一个数据库中,这个数据库就是 LSDB (链路状态数据库),LSDB 是对整个网络的拓扑结构及 IP 网段的描述,路由器拥有相同的 LSDB 。对于任何一台路由器,网络拓扑都完全一样。

网络路由详解

接下来所有的路由器都基于 LSDB 使用最短路由优先算法进行计算,得到一棵已自己为根的、无环路的最短路径树,并将得到的路由加载到路由表中。

相比距离矢量路由协议,链路状态路由协议具有更大的扩展性和更快的收敛速度,但是它的算法消耗更多的内存和 CPU 处理能力。