互联网是由路由器连接的网络而成的。为了能让数据包正确地到达目标主机,路由器必须在途中进行正确地转发。这种向“正确的方向”转发数据所进行的处理就叫做路由控制
。路由器根据路由控制表(Routing Table)转发数据包,它根据所收到的数据包中目标主机的IP地址与路由控制表的比较得出下一个应该接收的路由器。
路由控制分静态和动态两种类型。
静态路由
(Static Routing):指事先设置好路由器和主机中并将路由信息固定的一种方法
动态路由
(Dynamic Routing):指让路由协议在运行过程中自动地设置路由控制信息的一种方法
静态路由的设置通常是由使用者手工操作完成的,每增加一个新的网络就需要将这个新被追加的网络信息设置在所有的路由器上,这给管理者带来很大的负担。还有一个不可忽视的问题是,一旦某个路由器发生故障,基本上无法自动绕过发生故障的节点,只有在管理员手工设置以后才能恢复正常。
使用动态路由的情况下,管理员必须设置好路由协议,其设定过程的复杂程度与具体要设置路由协议的类型有直接关系。如果有一个新的网络被追加到原有的网络中时,只要在新增加网络的路由器上进行一个动态路由的设置即可。况且,网络上一旦发生故障,只要有一个可绕的其他路径,那么数据包就会自动选择这个路径,路由器的设置也会自动重置。路由器为了能够像这样定期相互交换必要的路由控制信息,会与相邻的路由器之间互发消息。这些互换的消息会给网络带来一定程度的负荷。
不论是静态路由还是动态路由,不要只使用其中一种,可以将它们组合起来使用。
# 静态路由
使用路由器上设置好的路由控制表进行路由控制。
# 动态路由
路由器之间进行路由信息的交换,由路由器自己生成路由控制表,并根据这个表进行路由控制。
动态路由会给相邻路由器发送自己已知的网络连接信息,而这些信息又像接力一样依次给其他路由器,直至整个网络都了解时,路由控制表也就制作完成了。而此时也就可以正确转发IP数据包了。
根据路由控制的范围常使用IGP
(Interior Gateway Protocol)和EGP
(Exterior Gateway Protocol)两种类型的路由协议。
制定自己的路由策略,并以此为准在一个或多个网络群体中采用的小型单位叫做自治系统
(AS, Autonomous System)或路由选择域(Routing Domain)。
# EGP与IGP
说到自治系统,区域网络、ISP等都是典型的例子。在区域网络及ISP内部,由构造、管理和运维网络的管理员、运营者制定出路由控制相关方针,然后根据此方针进行具体路由控制的设定。
自治系统内部动态路由采用的协议是域内路由协议,即IGP。而自治系统之间的路由控制采用的是域间路由协议,即EGP。
路由协议大致分为两大类。一类是外部网关协议EGP,另一类是内部网关协议IGP。根据EGP在区域网络之间(或ISP之间)进行路由选择,也可以根据IGP在区域网络内部(或ISP内部)进行主机识别。没有EGP就不可能有世界上各个不同组织机构之间的通信,没有IGP机构内部也就不可能进行通信。
IGP:RIP
(Routing Information Protocol, 路由信息协议)、RIP2
、OSPF
(Open Shortest Path First, 开放式最短路径优先)
EGP:BGP
(Border Gateway Protocol, 边界网关协议)
路由控制有各种各样的算法,其中最具代表性的有两种,是距离向量算法(Distance-Vector)和链路状态(Link-State)算法。
距离向量算法
(DV)是指根据距离(代价)和方向决定目标网络或目标主机位置的一种方法。
# 距离向量
距离向量中通过距离与方向确定通往目标网络的路径。
路由器之间可以互换目标网络的方向及其距离的相关信息,并以这些信息为基础制作路由控制表。这种方法在处理上比较简单,不过由于只有距离和方向的信息,所以当网络构造变得分外复杂时,在获得稳定的路由信息之前需要消耗一定时间,也极易发生路由循环等问题。
链路状态算法
是路由器在了解网络整体连接状态的基础上生成路由控制表的一种方法。该方法中,每个路由器必须保持同样的信息才能进行正确的路由选择。
距离向量算法中每个路由器掌握的信息都不相同,通往每个网络所耗的距离也根据路由器的不同而不同,因此该算法的一个缺点就是不太容易判断每个路由器上的信息是否正确。
链路状态算法中所有路由器持有相同的信息,对于任何一台路由器网络拓扑都完全一样,因此只要某一台路由器与其他路由器保持同样的路由控制信息,就意味着该路由器上的路由信息是正确的。只要每个路由器尽快地与其他路由器同步路由信息,就可以使路由信息达到一个稳定的状态。因此,即使网络结构变得复杂,每个路由器也能够保持正确的路由信息、进行稳定的路由选择。
为了实现这样的机制,链路状态算法付出的代价就是如何从网络代理获取路由信息表。这一过程相对复杂,特别是在一个规模巨大而又复杂的网络结构中,管理和处理代理信息需要高速CPU处理能力和大量的内存。
# 链路状态
链路状态中路由器知道网络的连接状态,并根据该图的信息确定通往目标网络的路径。
路由协议名 | 下一层协议 | 方式 | 适用范围 | 循环检测 |
---|---|---|---|---|
RIP |
UDP | 距离向量 | 域内 | 不可以 |
RIP2 |
UDP | 距离向量 | 域内 | 不可以 |
OSPF |
IP | 链路状态 | 域内 | 可以 |
BGP |
TCP | 路径向量 | 对外链接 | 可以 |
RIP
(Routing Information Protocol)是距离向量型的一种路由协议,广泛用于LAN。被BSD UNIX作为标准而提供的routed(在UNIX系统上的一个守护进程)采用了RIP。
RIP将路由控制信息定期(30秒依次)向全网广播。如果没有收到路由控制信息,连接就会被断开。不过,这有可能是由于丢包导致的,因此RIP规定等待5次。如果等了6次(180秒)仍未收到路由信息,才会真正关闭连接。
# RIP概要
30秒依次,将自己所知道的路由信息广播出去。
将已知的路由信息经过一跳之后继续广播。
以此类推,逐步传播路由信息。
RIP基于距离向量算法决定路径,距离的单位为“跳数”,跳数是指所经过的路由器的个数。RIP希望尽可能少通过路由器将数据包转发到目标IP地址,根据距离向量生成距离向量表,再抽出较小的路由生成最终的路由控制表。
# 根据距离向量生成路由控制表
距离向量型的协议中根据网络的距离和方向生成路由控制表。
针对同一个网络如果有两条路径,那么选择距离较短的一个。
如果距离相等,那么根据路由器的类型选择的路由也会不同,通常是随机选择一个或是轮换使用。
RIP虽然不交换子网掩码信息,但可以用于使用子网掩码的网络环境。不过在这种情况下需要注意以下几点:
从接口的IP地址对应分类得出网络地址后,与根据路由控制信息流过此路由器的包中的IP地址对应的分类得出的网络地址进行比较。如果两者的网络地址相同,那么就以接口的网络地址长度为准。
如果两者的网络地址不同,那么以IP地址的分类所确定的网络地址长度为准。
采用RIP进行路由控制的范围内必须注意两点:因IP地址的分类而产生不同的网络地址时、构造网络地址长度不同的网络环境时。
# RIP与子网掩码
如果从路由器A接口上IP地址的分类来看,它们都具有同一个网络地址。
从分类的角度看,它们与路由器A的网络地址不相同。
RIP的基本行为可归纳为如下两点:
将自己所知道的路由信息定期进行广播。
一旦认为网络被断开,数据将无法流过此路由器,其他路由器也就可以得知网络已经断开。
# 无限计数问题
像这样收到自己发出去的消息,这个问题被称为无限计数
(Counting to Infinity)。为了解决这个问题可以采取以下两种方法:
最长距离不超过16。即使发生无线计数的问题,也可以从时间上进行控制。
规定路由器不再把所收到的路有消息原路返还给发送端。这也被称作水平分割
(Split Horizon)。
# 水平分割
然而,这种方法对有些网络来说是无法解决问题的。在有环路情况下,反向的回路会成为迂回的通道,路由信息会不断地被循环往复地转发。当环路内部某一处发生通信故障时,通常可以设置一个正确的迂回通道。
# 带环路的网络
当网络A的通信发生故障时,将无法传送正确的路由信息。
尤其是在环路有多余的情况下,需要很长时间才能产生正确的路由信息。
为了尽可能解决这个问题,提出了毒性逆转
(Poisoned Reverse)和触发更新
(Triggered Update)两种方法。
毒性逆转:指网络中发生链路被断开的时候,不是不再发送这个消息,而是将这个无法通信的消息传播出去。即发送一个距离为16的消息。
触发更新:指当路由信息发生变化时,不等待30秒而是立刻发送出去的一种方法。
有了这两种方法,在链路不通时,可以迅速传送消息以使路由信息尽快收敛。
# 毒性逆转和触发更新
通过触发更新的行为,可以使路由控制信息的传递比每30秒发送一次的情况快很多,因此可以有效避免错误路由信息被不断发送。
然而,纵然使用了到现在为止所介绍的方法,在一个具有众多环路的复杂的网络环境中,路由信息想要达到一个稳定的状态是需要花一段时间的。为了解决这个问题,必须明确地掌握网络结构,在了解究竟哪个链路断开后再进行路由控制非常重要,为此可以采用OSPF。
RIP2
是在RIP使用过程中总结了经验的基础上进行改良后的一种协议。工作机制基本相同,不过仍有如下几个新的特点:
使用多播:RIP2改用了多播,不仅减少了网络的流量,还缩小了对无关主机的影响。
支持子网掩码:RIP2支持在其交换的路由信息中加入子网掩码信息。
路由选择域:在同一个网络中可以使用逻辑上独立的多个RIP。
外部路由标志:通常用于把从BGP等获得的路由控制信息通过RIP传递给AS内。
身份验证密钥:RIP包中携带密码。只有在自己能够识别这个密码时才接收数据,否则忽略这个RIP包。
OSPF
是根据OSI的IS-IS协议而提出的一种链路状态型路由协议。
采用链路状态类型,所以即使网络中有环路,也能够进行稳定的路由控制。
支持子网掩码。曾经在RIP中无法实现的可变长度子网构造的网络路由控制成为现实。
引入了“区域”这一概念,减少路由协议之间不必要的交换。
针对IP首部中的区分服务(TOS)字段,生成多个路由控制表。
OSPF为链路状态型路由器。路由器之间交换链路状态生成网络拓扑信息,然后再根据这个拓扑信息生成路由控制表。
# 由链路状态确定路由
与哪个网络或与哪个路由器相连的信息要通过接力的方式进行发送。
OSPF中掌握着完整的网络拓扑结构,可以从中找出最短路径用来决定最终的路由选择。
OSPF以每个链路上的代价为度量标准,始终选择一个总的代价最小的一条路径。
# 网络权重与路由选择
RIP的情况下,选择路由器个数较少的路径传送数据。
OSPF的情况下,选择总代价较小的路径传送数据。代价可以由管理员手动设置,因此应用起来较灵活。
在OSPF中,把连接到同一个链路的路由器称作相邻路由器
(Neighboring Router)。在一个相对简单的网络结构中,相邻路由器之间可以交换路由信息。但是在一个比较复杂的网络中,就不需要在所有相邻的路由器之间都进行控制信息的交换,而是确定一个指定路由器
(Designated Router),并以它为中心交换路由信息即可。
在OSPF中,根据作用的不同可以分为5中类型的包。
类型 | 包名 | 功能 |
---|---|---|
1 | 问候 (HELLO) |
确认相邻路由器、确认指定路由器 |
2 | 数据库描述 (Database Description) |
链路状态数据库的摘要信息 |
3 | 链路状态请求 (Link State Request) |
请求从数据库中获取链路状态信息 |
4 | 链路状态更新 (Link State Update) |
更新链路状态数据库中的链路状态信息 |
5 | 链路状态确认应答 (Link State Acknowledgment) |
链路状态信息更新的确认应答 |
通过发送问候包确认是否连接。每个路由器为了同步路由控制信息,利用数据库描述包相互发送路由摘要信息和版本信息。如果版本比较老,则首先发出一个链路状态请求包请求路由控制信息,然后由链路状态更新包接收路由状态信息,最后再通过链路状态确认包通知大家本地已经接收到路由控制信息。
有了这样一个机制以后,OSPF不仅可以大大地减少网络流量,还可以达到迅速更新路由信息的目的。
OSPF中进行连接确认的协议叫做HELLO协议
。LAN中每10秒发送一个HELLO包,如果没有HELLO包到达,则进行连接是否断开的判断。具体为,允许空3次,直到第4次(40秒后)仍无任何反馈就认为连接已经断开。之后在进行连接断开或恢复连接操作时,由于链路状态发生了变化,路由器会发送一个链路状态更新包通知其他路由器网络状态的变化。
# OSPF中根据链路状态生成路由控制表
网络链路状态
路由器链路状态
192.168.1.0/24的网络属于末端网络。因此,不需要生成网络链路状态,而是在路由器链路状态中加入子网信息即可。
链路状态更新包所要传达的消息大致分为两类:一是网络LSA(Link State Advertisement),另一个是路由器LSA。
网络LSA是以网络为中心生成的信息,表示这个网络都与哪些路由器相连接。
路由器LSA是以路由器为中心生成的信息,表示这个路由器与哪些路由器相连接。
如果这两种消息主要采用OSPF发送,每个路由器就都可以生成一个可以表示网络结构的链路状态数据库。可以根据这个数据库、采用Dijkstra算法生成相应的路由控制表。
相比距离向量,由上述过程所生成的路由控制表更加清晰不容易混淆,还可以有效地降低无限循环问题的发生。
链路状态型路由协议的潜在问题在于,当网络规模越来越大时,表示链路状态的拓扑数据库就变得越来越大,路由控制信息的计算也就越困难。OSPF为了减少计算负荷,引入了区域这一概念。区域
是指将连接在一起的网络和主机划分为小组,使一个自治系统内可以拥有多个区域。
不过具有多个区域的自治系统必须要有一个主干区域
(Backbone Area),并且所有其他区域必须都与这个主干区域相连接。连接区域与主干区域的路由器称作区域边界路由器
,而区域内部的路由器叫做内部路由器
,只与主干区域内连接的路由器叫做主干路由器
,与外部相连接的路由器就是AS边界路由器
。
# AS与区域
每个区域内的路由器都持有本区域网络拓扑的数据库。然而关于区域之外的路径信息,只能从区域边界路由器那里获知它们的距离。区域边界路由器也不会将区域内的链路状态信息全部原样发送给其他区域,只会发送自己到达这些路由器的距离信息,内部路由器所持有的网络拓扑数据库就会明显变小。
# OSPF的路由器种类
换句话说,就是指内部路由器只了解区域内部的链路状态信息,并在该信息的基础上计算出路由控制表。这种机制不仅可以有效地减少路由控制信息,还能减轻处理的负担。
# 区域内的路由控制和区域之间的路由控制
此外,作为区域出口的区域边界路由器若只有一个的话叫做末端区域
。末端区域内不需要发送区域外的路由信息,它的区域边界路由器将成为默认路径传送路由信息即可。因此,由于不需要了解到达其他各个网络的距离,所以它可以减少一定的路由信息。
BGP
是连接不同组织机构的一种协议,它属于外部网关协议。具体划分,它主要用于ISP之间相连接的部分。只有BGP、RIP和OSPF共同进行路由控制,才能够进行整个互联网的路由控制。
BGP的最终路由控制表由网络地址和下一站的路由器组来表示,不过它会根据所要经过的AS个数进行路由控制。
# BGP使用AS号管理网络信息
ISP、区域网络等会将每个网络域编配成一个个自治系统进行管理,它们为每个自治系统分配一个16比特的AS编号。BGP就是根据这个编号进行相应的路由控制。
根据BGP交换路由控制信息的路由器叫做BGP扬声器
。BGP扬声器为了在AS之间交换BGP信息,必须与所有AS建立对等的BGP连接。BGP中数据包送达目标网络时,会生成一个中途经过所有AS的编号列表,这个表格也叫做AS路径信息访问列表
(AS Path List),如果针对同一个目标地址出现多条路径时,BGP会从AS路径访问列表中选择一个较短的路由。BGP以AS进行度量标准,基于AS之间的合约进行数据包的转发,BGP一般选择AS数最少的路径,不过仍然要遵循各个AS之间签约的细节进行更细粒度的路由选择。
# 生成路由控制表时要用到AS路径信息访问列表
从邻接AS收到的AS路径信息访问列表中加入自己的AS编号,再发送给自己相邻的AS。
AS1到AS3的AS路径信息访问列表 AS1到AS3的AS路由控制表
通常选择较短的一方。
路由控制是跨越整个互联网的分布式系统。
在转发IP数据包的过程中除了使用路由技术外,还在使用标记交换技术。路由技术基于IP地址中最长匹配原则进行转发,而标记交换则对每个IP包都设定一个叫做“标记”的值,然后根据这个“标记”再进行转发。标记交换技术中最具代表性的当属多协议标记交换技术
,即MPLS(Multi Protocol Label Switching)。
MPLS的标记不像MAC地址直接对应到硬件设备。因此,MPLS不需要具备以太网或ATM等数据链路层协议的作用,而只需要关注它与下面一层IP层之间的功能和协议即可。
# IP与MPLS转发的基本行为对比
IP网络中转发的基本动作
MPLS中转发的基本动作
MPLS网络中实现MPLS功能的路由器叫做标记交换路由器
(LSR, Label Switching Router)。特别是与外部网络连接的那部分LSR叫做标记边缘路由器
(LER, Label Edge Router)。MPLS正是在LER上对数据包进行追加标记和删除标记的操作。
在一个数据包上附加标记是一个极其简单的动作。如果数据链路本来就有一个相当于标记的信息,那么可以直接进行映射。如果数据链路中没有携带任何相当于标记的信息(最典型的就是以太网),那么就需要追加一个全新的垫片头
(Shim Header),这个垫片头就包含标记信息。
以下展示了数据从以太网的IP网开始经过MPLS网再发送给其他IP网的整个转发过程。数据包在进入MPLS时,在其IP首部的前面被追加了32比特的垫片头(其中包含20比特的标记值)。MPLS网络内,根据垫片头中的标记进一步进行转发。当数据离开MPLS时,垫片头就被去除。在此称附加标记转发的动作为Push,替换标记转发的动作为Swap,去掉标记转发的动作为Pop。
# 使用Push、Swap和Pop功能进行转发
MPLS中目标地址和数据包都要通过由标记决定的同一个路径,这个路径叫做标记交换路径
(LSP, Label Switching Path)。LSP又可以划分为一对一连接的点对点LSP,和一对多绑定的合并LSP两类。扩展LSP有两种方式,可以通过各个LSR向各自相邻的LSR分配MPLS标记,也可以由路由协议载着标记信息进行交互,LSP属于单方向的通路,如果需要双向的通信则需要两个LSP。
# 根据MPLS标记信息的分配情况设置的LSP
展示了每个LSR独立生成标记表并将这个表传给上游LSR再进行分配的过程。
LSR之间进行标记信息交换时有两种方法:
采用标记分配协议(LDP, Label Distribution Protocol)的方法
通过路由协议捎带信息的方法。
MPLS的优势可归纳为两点:
转发速度快。使用固定长度的标记信息、主干路由器只需要设置必要的几处信息即可。
利用标记生成虚拟的路径
(最近更新:2019年09月18日)