第1章 路由基础
1.1 路由的基本概念
在当今社会中,计算机已经变成每一个人工作、学习及生活中不可分割的一部分。计算机网络(Computer Network)将世界上各种类型的计算机以及其他终端设备连接在了一起,使得这些设备能够协同工作,能够相互通信——通信是现代人类社会的基本需求。本书所讨论的计算机网络,实际上是指IP网络,也称为TCP/IP网络,接入网络的设备也已经不仅仅局限于计算机。所谓的IP网络,就是以TCP/IP协议簇为基础的通信网络。世界上最大的IP网络是Internet(因特网),接入Internet的设备数量早已超过了世界人口数量,这些设备可能是计算机、手机或者其他智能设备,例如智能家用电器或可穿戴设备等。除了Internet之外,全球各地还有大大小小不同的IP网络,例如企业的园区网络,学校的校园网络,甚至每个家庭的家用网络等。
正如前面所说,通信是人类使用IP网络的基本需求,所谓通信,实际上就是信息(Information)或数据(Data)的收发过程,因此IP网络的基本功能便是将数据从一个地方传输到另一个地方。在IP网络中,数据遵循IP协议所定义的格式,设备对其进行相应的处理,使得它能够在网络中进行传输。这里的数据简单地理解,可以是描述一段文字、一张图片、一个网页,或者一个文档等的一些信息。
在数据通信模型中,通信双方所交互的实际数据被称为有效载荷(Payload)。在IP网络中,A主机要将一份Payload发送给在同一个IP网络中的、位于另一个角落的B主机,它显然不可能将Payload直接“扔”给B主机,该Payload需要经过一定的处理,最终变成能够在诸如网线等介质上传递的信号。为了确保Payload能够被IP网络中的网络设备顺利地从源转发到目的地,该Payload需要被“放置”在一个“信封”当中,并且在“信封”上标明该Payload的源地址及目的地址。这个“信封”就是IP头部,我们将这个包裹着Payload的“信封”称为IP报文(Packet),或者IP包。通常情况下,IP报文、IP数据包、IP包这些术语是可以相互替换使用的。在报文的IP头部中,包含着多个字段,其中“源IP地址”及“目的IP地址”字段便包含报文寻址的关键信息。源IP地址标识了报文的发送源,目的IP地址则标识了报文所要到达的目的地。在IP网络中,IP地址用于标识一个设备或者设备的某个网络接口卡(Network Interface Card,NIC)。在本书中,除非特别说明,否则IP网络指的是IPv4网络,而IP地址则指的是IPv4地址。
一个IP报文从源进入到IP网络后,网络中的设备(例如路由器、三层交换机及防火墙等)负责将其转发到目的地。在报文的转发过程中,沿途的网络设备收到该报文后,会根据其所携带的目的IP地址来判断如何转发这个报文,最终将报文从恰当的接口发送出去。这个过程被称为路由(Routing)。实际上,路由行为不仅仅发生在路由器上,三层交换机、防火墙、负载均衡器甚至主机等设备均可执行路由操作,只要该设备支持路由功能。路由技术是数据通信领域中的一块基石,它在网络中扮演着非常重要的作用。学习完本节之后,我们应该能够:
● 理解路由的概念及其意义;
● 理解路由表的概念,学会查看路由表;
● 理解路由优先级、度量值的概念及其意义。
1.1.1 路由的基本概念
IP网络最基本的功能就是为处于网络中不同位置的设备之间实现数据互通。为了实现这个功能,网络中的设备需具备将IP报文从源转发到目的地的能力。以路由器为例,当一台路由器收到一个IP报文时,它会在自己的路由表(Routing Table)中执行路由查询,寻找匹配该报文的目的IP地址的路由条目(或者说路由表项),如果找到匹配的路由条目,路由器便按照该条目所指示的出接口及下一跳IP地址转发该报文;如果没有任何路由条目匹配该目的IP地址,则意味着路由器没有相关路由信息可用于指导报文转发,因此该报文将会被丢弃,上述行为就是路由。
具备路由功能的设备不仅仅有路由器,三层交换机、防火墙等设备同样能够支持路由功能,此处使用路由器作为典型代表进行讲解。
如图1-1所示,当路由器R1收到一个IP报文时,路由器会解析出报文的IP头部中的目的IP地址,然后在自己的路由表中查询该目的地址,它发现数据包的目的地址是192.168.20.1,而路由表中存在到达192.168.20.0/24的路由,因此R1根据路由条目所指示的出接口及下一跳IP地址将报文转发出去。
图1-1 路由及路由表的基本概念
每一台具备路由功能的设备都会维护路由表,路由表相当于路由器的地图,得益于这张地图,路由器才能够正确地转发IP报文。路由表中装载着路由器通过各种途径获知的路由条目,每一个路由条目包含目的网络地址/网络掩码、路由协议(路由的来源)、出接口、下一跳IP地址、路由优先级及度量值等信息。路由表是每台支持路由功能的设备进行数据转发的依据和基础,是一个非常重要的概念。
值得注意的是,路由是一种逐跳(Hop-By-Hop)的行为,也就是说,数据从源被发出直至其到达目的地的过程中,沿途的每一台路由器都会执行独立的路由查询及报文转发动作,因此处于传输路径上的路由器都需要拥有到达目的网段的路由,否则该报文将在中途被丢弃。另外,数据通信往往是一个双向的过程,大多数的应用需要在通信双方之间相互发送数据,因此为了保证应用及业务的正常运行,工程师在建设网络时需充分考虑数据的双向可达性,也就是在往返方向考虑路由信息的完整性和准确性。在图1-1所示的例子中,假设PC1及PC2使用R1—R2—R3—R4这条路径传输数据,若要求PC1发往PC2的数据能够正确到达PC2,则需确保R1、R2、R3及R4都拥有到达192.168.20.0/24的路由信息。同理,若要求PC2能够正常地向PC1发送数据并且沿着相同的路径传输数据,则R4、R3、R2及R1都需拥有到达192.168.10.0/24的路由信息。
1.1.2 路由表
任何一台支持路由功能的设备要想正确地执行路由查询及数据转发的操作,就必须维护一张路由表。路由表可以理解为是设备将报文转发到特定目的地所依据的一张“地图”。在具备路由功能的华为数据通信产品上查看路由表的命令是display ip routingtable。图1-2展示了一个路由表的示例,路由表中的每一行就是一个路由条目(或者路由表项)。在一个实际的网络中,路由器的路由表可能包含多个路由条目。在一个大型的网络中,路由器的路由表可能包含大量的路由条目。每个路由条目都采用目的网络地址(Destination Network Address)及网络掩码(Netmask)进行标识。从路由表的输出可以看出,每个路由条目都包括多个信息元素。
图1-2 查看设备的路由表
路由表中每个信息元素的含义如下。
● 目的网络地址/网络掩码(Destination Network Address/Netmask):路由表相当于路由器的地图,而每一条路由都指向网络中的某个目的网络(或者说目的网段)。目的网络的网络地址(目的网络地址)及网络掩码(路由表中的“Destination/Mask”列)用于标识一条路由。以图1-2所示的路由表为例,2.2.2.0/24就标识了一个目的网络,其中目的网络地址为2.2.2.0,掩码长度为24(或者说网络掩码为255.255.255.0),这就意味着路由器拥有到达2.2.2.0/24的路由信息。
所谓的掩码长度指的是网络掩码中连续的二进制“1”的个数,例如某条路由的掩码长度为30,那么该路由的网络掩码是255.255.255.252,两者表达的意思是一致的,因此192.168.0.0与255.255.255.252等同于192.168.0.0/30。
● 路由协议(Protocol):表示该路由的协议类型,或者该路由是通过什么途径学习到的。路由表中的“Proto”列显示了该信息。例如2.2.2.0/24这条路由,“Proto”列显示的是Static,这意味着这条路由是通过手工的方式配置的静态路由。再如22.22.22.22/32这条路由,这是一条主机路由(网络掩码为255.255.255.255),而这条路由的“Proto”列显示的是OSPF,则表明该条路由是通过OSPF这个路由协议学习到的。“Proto”列如果显示Direct则表明该条路由为直连路由,也就是这条路由所指向的网段是设备的直连接口所在的网段。
● 优先级(Preference):路由表中路由条目的获取来源有多种,每种类型的路由对应不同的优先级,路由优先级的值越小则该路由的优先级越高。路由表中的“Pre”列显示了该条路由的优先级。当一台路由器同时从多种不同的来源学习到去往同一个目的网段的路由时,它将选择优先级值最小的那条路由。例如,路由器A配置了到达1.1.1.0/24的静态路由,该条静态路由的下一跳为B,同时A又运行了RIP,并且通过RIP也发现了到达1.1.1.0/24的路由,而该条RIP路由的下一跳为C,此时A分别通过静态路由及RIP路由协议获知了到达同一个目的地——1.1.1.0/24网段的路由,A会比较静态路由与RIP路由的优先级,由于缺省时静态路由的优先级为60,而RIP路由的优先级为100,显然静态路由的优先级值更小,因此最终到达1.1.1.0/24的静态路由被加载到路由表中(静态路由在路由选择中胜出),当A收到去往该网段的数据包时,它将数据包转发给下一跳B。
● 开销(Cost):Cost指示了本路由器到达目的网段的代价值,在许多场合它也被称为度量值(Metric),度量值的大小会影响到路由的优选。在华为路由器的路由表中,“Cost”列显示的就是该条路由的度量值。直连路由及静态路由缺省的度量值为0,此外,每一种动态路由协议都定义了其路由的度量值计算方法,不同的路由协议,对于路由度量值的定义和计算均有所不同。
● 下一跳(Next Hop):该信息描述的是路由器转发到达目的网段的数据包所使用的下一跳地址。在图1-2显示的路由表中,2.2.2.0/24路由的“NextHop”列显示10.1.12.2,这意味着如果该路由器收到一个数据包,经过路由查询后发现数据包的目的地址匹配2.2.2.0/24这条路由,则该路由器会将数据包转发给10.1.12.2这个下一跳。
● 出接口(Interface):指示的是数据包被路由后离开本路由器的接口。还是以2.2.2.0/24路由举例,这条路由的“Interface”列显示的是GE0/0/0,这意味着如果该路由器收到一个数据包且经过路由查询后发现数据包的目的地址匹配该路由,则该路由器会将数据包转发给10.1.12.2这个下一跳地址,并从GE0/0/0接口送出。
1.1.3 路由信息的来源
任何一台支持路由功能的设备都需要维护路由表以便正确地转发数据,在一个实际的网络中,一台路由器的路由表往往包含多条路由,这些路由可能从不同的来源获取。如图1-3所示,路由表中路由信息的来源可归为三类,分别是直连路由、静态路由及动态路由协议。路由表中“Proto”列显示了该条路由是从什么来源获取到的。
图1-3 路由信息的来源
路由器能够自动获取本设备直连接口的路由并将路由写入路由表,该种路由被称为直连路由(Direct Route),直连路由的目的网络一定是路由器自身某个接口所在的网络。直连路由的发现是路由器自动完成的,无需人为干预。在图1-4所示的网络中,当我们完成三台路由器的接口IP地址配置并激活接口后,路由器将自动发现直连接口的路由。以R2为例,由于GE0/0/0接口配置了IP地址192.168.12.2/24,它能够根据这个IP地址及网络掩码判断出该接口处于192.168.12.0/24网段,于是它在路由表中创建一条直连路由,路由的目的网络地址及掩码长度为192.168.12.0/24,由于该条路由为直连路由,因此协议类型为Direct。另外路由优先级为0(直连路由的优先级最高),度量值也为0(直连网络就在“家门口”,因此度量值为0),出接口为GE0/0/0,下一跳IP地址为其自身接口的IP地址192.168.12.2。同理,R2还会发现192.168.23.0/24这条直连路由。
图1-4 直连路由的发现
值得注意的是,一个接口的直连路由被加载到路由表的前提是该接口的物理状态(Physical Status)及协议状态(Protocol Status)都必须是Up的。接口的物理及协议状态可以通过display ip interface brief命令查看:
以上输出的就是R2各个接口的IP地址、物理状态及协议状态。以R2的Serial1/0/0接口为例,如果该接口所连接的线缆被拔除,则接口的物理及协议状态都将变成Down(关闭),此时接口的直连路由也就从R2的路由表中消失。现在考虑另一种情况,如果R2及R3采用PPP(Point-to-Point Protocol,点对点协议)链路互联,即R2的Serial1/0/0与R3的Serial1/0/0接口均采用PPP作为数据链路层封装协议,并且这段链路使用PPP认证,R3作为PPP认证方,若此时R2接口上配置的用于PPP认证的用户名或密码有误,就会导致PPP认证不成功,这样一来R2及R3的Serial1/0/0接口就会出现物理状态为Up但是协议状态为Down的情况。当出现这种情况时,路由器认为该接口不可用,当然,该接口的直连路由也就不会出现在路由表中。
路由器能够自动发现直连路由并将路由加载到路由表,但是对于非直连的网络,网络管理员就需要想办法让路由器知晓了。为了让路由器能够到达远端网络(非直连网络),最简单的方法是为路由器手工配置静态路由(Static Route)。通过这种方式维护路由表项虽然简单直接,但是可扩展性差,如果在规模较大的网络中完全使用静态路由,配置工作量就会很大,而且静态路由无法根据网络拓扑的变化作出动态响应,这也是其一大弊端。另一种方法是使用动态路由协议(Dynamic Routing Protocol)。一旦路由器激活动态路由协议,它们就相当于拥有了“交谈”的能力,设备之间可以交互信息从而自动计算或发现网络中的路由。
1.1.4 路由的优先级
通过前文的讲解大家已经了解到,路由器可以通过多种方式获得路由条目:自动发现直连路由、手工配置静态路由或通过动态路由协议自动学习到动态路由。当路由器从多种不同的途径获知到达同一个目的网段(这些路由的目的网络地址及网络掩码均相同)的路由时,路由器会比较这些路由的优先级,优选优先级值最小的路由。
如图1-5所示,R2与R1使用RIP交互路由信息,R2又通过OSPF与R3建立邻接关系,于是R2同时从RIP及OSPF都学习到了去往1.1.1.0/24的路由,这两条路由来自两个不同的动态路由协议并且分别以R1和R3作为下一跳。R2最终选择OSPF的路由加载到路由表,也就是将R3作为实际到达1.1.1.0/24的下一跳,因为OSPF内部路由的优先级值比RIP更小,故路由则更优。此时R2的路由表中到达1.1.1.0/24的路由只会存在一条,那就是通过OSPF获知的路由,而关于该网段的RIP路由则“潜藏”了起来,当这条OSPF路由失效时,RIP路由才会浮现并被R2加载到路由表中。
图1-5 路由优先级影响路由优选
不同的路由协议或路由种类对应的优先级见表1-1。这是一个众所周知的约定(对于不同的厂商,这个约定值可能有所不同,表1-1中罗列的是华为数通产品的约定)。
表1-1 路由与优先级的对应表
1.1.5 路由的度量值
影响路由优选的因素除了路由优先级之外,还有一个重要的因素,那就是度量值(Metric)。路由表中“Cost”这一列显示的就是该条路由的度量值,因此度量值也被称为开销,本书统一使用度量值一词来描述这个概念。所谓度量值就是设备到达目的网络的代价值。直连路由的度量值为0,这点很好理解,因为路由器认为这是自己直连的网络,也就是在“家门口”的网络,从自己家走到家门口自然不需要耗费任何力气。另外,静态路由的度量值缺省也为0,而不同的动态路由协议定义的度量值是不同的,例如RIP路由是以跳数(到达目的网络所需经过的路由器的个数)作为度量值,而OSPF则以开销(与链路带宽有关)作为度量值。
在图1-6所示的网络中,所有的路由器都运行了RIP。R1将直连网段1.1.1.0/24发布到了RIP中,如此一来,R5将会分别从R3及R4学习到RIP路由1.1.1.0/24,从R3学习到的1.1.1.0/24路由的跳数为3,而从R4学习到的路由的跳数为2,因此R5认为从R4到达目标网段要“更近一点”,于是它将R4通告过来的RIP路由加载到路由表,这样,当R5转发到达该目标网段的数据时,会将其发往R4。当R5—R4—R1这段路径发生故障时,R5可能丢失R4所通告的1.1.1.0/24路由,此时R3通告的路由将会被R5加载进路由表,如此一来,到达1.1.1.0/24的数据流量将会被R5引导到R3—R2—R1这条路径。
图1-6 度量值对路由优选的影响
度量值是一个影响路由优选的重要因素,正因为如此,在实际的项目中,我们经常利用度量值来实现各种路由策略,从而影响数据流的走向。
综上所述,一台路由器可以同时通过多种途径获得路由信息,当出现到达同一个目的网段的路由通过多种不同的途径学习到的情况时,路由器会比较路由的优先级,选择优先级值最小的路由。而当路由器从多个不同的下一跳,通过同种路由协议获知到达同一个目的网段的路由时,它则会进行度量值的比较。当然有些路由协议的路由优选机制会更加复杂一些,例如OSPF或BGP,在执行路由优选时就并不只是单纯地比较度量值这么简单了。