本文内容为《图解TCP/IP》一书学习笔记。本文主要概述第七章内容。
第七章 路由协议
互联网网络结构复杂,需要通过合理的路由将数据发送到目标主机。而决定这个路由的,正是路由控制模块。
7.1.2 静态路由与动态路由
静态路由:事先设置好路由器和主机中并将路由信息固定的一种方法。但每增加一个新的网络,就需要将这个新追加的网络信息设置在所有的路由器上,管理负担很大。此外,一旦某个路由器发生故障,基本上无法自动绕过发生故障的节点,必须手工设置后才能恢复。
动态路由:让路由协议在运行过程中自动地设置路由控制信息的一种方法。如果有一个新的网络追加到原有网络中,只要在新增加网络的路由器上进行一个动态路由的设置即可。此外,网络上一旦发生故障,只要有一个可绕的其他路径,数据包就会自动选择这个路径,路由器的设置也会自动重置。但路由器会定期与相邻的路由器交换路由控制信息,会给网络带来一定程度的负荷。
7.1.3 动态路由的基础
路由器给相邻路由器发送自己已知的网络连接信息,这些信息又像接力一样依次传递给其他路由器,直至整个网络都了解了,路由表制作完成,此时可以正确转发IP数据包。
7.2 路由控制范围
制定自己的路由策略,并以此为准在一个或多个网络群体中采用的小型单位叫做自治系统(AS:Autonomous System)或路由选择域(Routing Domain)。
自治系统(路由选择域)内部动态路由采用的协议是域内路由协议(内部网关协议),即IGP(Interior Gateway Protocol)。自治系统之间的路由控制采用的是域间路由协议(外部网关协议),即EGP(Exterior Gateway Protocol)。
7.3 路由算法
最具代表性的路由算法是:距离向量(Distance-Vector)算法和链路状态(Link-State)算法。
7.3.1 距离向量
根据距离(代价)和方向决定目标网络或者目标主机位置的一种方法。
由于只有距离和方向的信息,当网络构造分外复杂时,在获得稳定的路由信息之前需要消耗一定时间,也易发生路由循环。
距离向量算法中每个路由器掌握的信息都不相同,通往每个网络所耗的距离(代价)也根据路由器的不同而不同。该算法的一个缺点就是不太容易判断每个路由器上的信息是否正确。
7.3.2 链路状态
在了解网络整体连接状态的基础上生成路由控制表的一种方法,该方法中,每个路由器必须保持同样的信息才能进行正确的路由选择。
链路状态算法中每个路由器掌握的信息都相同。只要每个路由器都尽快地与其他路由器同步路由信息,就可以使路由信息达到一个稳定的状态。因此即使网络结构变得复杂,每个路由器也能够保持正确的路由信息,进行正确的路由选择,这是该算法的一个优点。
但这个优点的代价就是如何从网络代理获取路由信息表。
7.4 RIP
RIP(Routing Information Protocol)是距离向量型的一种路由协议,广泛应用于LAN。
7.4.1 广播路由控制信息
广播路由:RIP将路由控制信息定期(30秒)向全网广播。
7.4.2 广播路由控制信息
确定路由:RIP基于距离向量算法决定路由,距离的单位被称为“跳数”(经过的路由器的个数),RIP希望经过尽可能少的路由器将数据包发送到目标IP地址。
如果距离相等,通常是随机选择一个或是轮换使用。
7.4.4 RIP中路由变更时的处理
RIP中的基本行为可归纳为如下两点:
- 将自己所知道的路由信息定期进行广播
-
一旦认为网络被断开,数据将无法流过此服务器,其他路由器也就可以得知网络已经断开
但这种方式存在问题。
如上图所示,路由器A将自己网络A的连接信息发送给路由器B,路由器B又将自己掌握的路由信息在原来的基础上加1跳后发送给路由器A和路由器C。假定这时路由器A与网络A发生了故障。
路由器A虽然觉察到自己与网络A的连接已经断开,无法将网络A的信息发送给路由器B,但它会收到路由器B曾经获知的消息。这就使得路由器A误认为自己的信息还可以通过路由器B到达网络A。
像这样收到自己发出去的消息,这个问题称为无限计数。可以采用以下两种方法解决: - 最长距离不超过16。由此即使发生无限计数的问题,也可以从时间上进行控制。
-
规定路由器不再把所收到的路由信息原路返还给发送端。也称作水平分割(Split Horizon)。
然而水平分割对有环路的网络无法解决问题,如下图所示,当网络A的通信发生故障时,将无法传送正确的路由信息。
为了尽可能解决环路带来的问题,人们提出了“毒性逆转”(Poisoned Reverse)和“触发更新”(Trigged Update)。
毒性逆转是指当网络中发生链路被断开时,不是不再发送这个消息,而是将这个无法通信的消息传播出去。即发送一个距离为16的消息。触发更新是指当路由信息发生变化时,不等待30秒而是立刻发出去的一种方法,有了这两种方法,在链路不通时,可以迅速传送消息以使路由信息尽快收敛。
7.5 OSPF
OSPF是一种链路状态型路由协议,即使网络中有环路,也能够进行稳定的路由控制。
为了减少网络流量,OSPF引入了"区域"这一概念。区域将一个自治网络划分为若干个更小的范围,由此减少路由协议之间不必要的交换。
OSPF为链路状态型路由器,路由器之间交换链路状态生成网络拓扑信息,然后再根据这个拓扑信息生成路由控制表。
OSPF给每个链路赋予一个权重(代价),并始终选择一个权重最小的路径作为最终路由。而RIP是选择路由器个数最少的路径。
7.5.2 OSPF基础知识
相邻路由器:在OSPF中连接到同一个链路的路由器。
指定路由器:不在所有相邻路由器之间进行控制消息的交换,而是以指定路由器为中心交换。
RIP中包只有一种,利用路由控制信息,一边确认是否连接了网络,一边传送网络信息。但这样做的话,网络的个数越多,每次交换的路由控制信息越大。且在网络稳定的情况下还要定期交换相同的路由控制信息,浪费网络带宽。
OSPF中包的类型有以下5种:
通过发送问候包确认是否连接。路由器同步路由控制信息时,利用数据库描述包互相发送路由摘要信息和版本信息。如果版本信息比较老的时候利用链路状态请求包请求路由控制信息。然后由链路状态更新包接收路由状态信息,最后通过链路状态确认包通知大家本地已经接收到路由控制信息。
7.5.3 OSPF工作原理概述
LAN中每10秒发送一个HELLO包,没有HELLO包到达时会进行连接是否断开的判断(允许空等3次,直到第4次(40秒后)仍无任何反馈就认为连接已断开)。之后再进行连接断开或恢复连接操作时,由于链路状态发生了变化,路由器会发送一个链路状态更新包(Link State Update Packet)通知其他路由器网络状态的变化。
链路状态更新包所要传达的消息分为两类:
- 网络LSA(Network Link State Advertisement,网络链路状态通告),表示这个网络与哪些路由器相连接。
- 路由器LSA(Router Link State Advertisement,路由器链路状态通告),表示这个路由器与哪些网络相连接。
利用以上两种信息每个路由器可以生成一个表示网络结构的链路状态数据库。可以根据这个数据库、采用Dijkstra算法(最短路径优先)生成相应的路由控制表。
但当网络规模越大,Dijkstra的处理时间就会越长,对CPU和内存的消耗也就越大。
7.5.4 将区域分层化进行细分管理
链路状态型路由协议存在问题:网络规模越大,表示链路状态的拓扑数据库越大,路由控制信息计算越困难。OSPF为了减少计算负荷,引入了区域的概念。
区域:将连接在一起的网络和主机划分成小组,使一个自治系统(AS)内可以拥有多个区域。不过拥有多个区域的自治系统必须要有一个主干区域(Backbone Area),并且所有其他区域都必须与这个主干区域相连。
- 区域边界路由器:连接区域与主干区域。
- 内部路由器:区域内部的路由器。
- 主干路由器:只与主干区域内连接的路由器。
-
AS边界路由器:与外部(其他AS)连接的路由器。
每个区域内的路由器都持有本区域网络拓扑的数据库。本区域之外的路径信息只能从区域边界路由器获知。区域边界路由器也不会将区域内的链路状态信息全部原样发送给其他区域,只会发送自己到达这些路由器的距离信息,内部路由器所持有的网络拓扑数据库显著变小。
作为区域出口的区域边界路由器若只有一个的话叫做末端区域,如上图中的区域2。末端区域内不需要发送区域外的路由信息。由于不需要了解到达其他各个网络的距离,它可以减少一定的路由信息。
7.6 BGP
BGP(Border Gateway Protocol),边界网关协议是连接不同自治系统的一种协议,主要用于ISP之间相连接的部分。
在RIP和OSPF中利用网络地址部分进行路由控制,然而BGP需要放眼整个互联网进行路由控制。BGP的最终路由控制表由网络地址和下一站的路由器组来表示,不过它会根据所要经过的AS个数进行路由控制。
AS的代表可以决定AS内部的网络运营和相关策略。举例,AS1与AS3之间通信需要AS2或AS4与AS5组合起来的两者中的一者进行数据中转才能实现。而这两者是否中转则由AS2或AS4与AS5决定(中转意味着网络负荷的加重以及成本的提升,中转合约一般涉及中转费用)。如果两者都不愿意,只能在AS1与AS3之间建立专线连接来通信。
下面7.6.2节的基础是假定这两者都允许中转。
7.6.2 BGP是路由向量协议
根据BGP交换路由控制信息的路由器叫做BGP扬声器。BGP扬声器为了在AS间交换BGP信息,必须与所有AS建立对等的BGP连接。此外,上图中的自治系统AS2、AS4、AS5,在同一个AS内部有多个BGP扬声器,为了使AS内部也可以交换BGP信息,需要建立BGP连接。
BGP中数据包送达目标网络时,会生成一个中途经过所有AS的编号列表。这个表格也叫做AS路径信息访问列表(AS Path List)。如果针对同一个目标地址出现多条路径时,BGP会从AS路径信息访问列表中选择一个最短的路由。
在AS路径信息访问列表中不仅包含转发方向和距离,还涵盖了途径所有AS的编号。因此它不是距离向量型协议。像BGP这种根据所要经过的路径信息访问列表进行路由控制的协议属于路径向量(Path Vector)协议。
BGP与RIP和OSPF的比较:
- 在做路由选择时的度量方面,RIP中为路由器个数,OSPF中为每个子网的成本,BGP中为AS。
- RIP和和OSPF本着提高转发效率为目的,考虑到了网络的跳数和网络的带宽。BGP则基于AS之间的合约进行数据包的转发。BGP一般选择AS数最少的路径,不过仍要遵循各个AS之间签约的细节进行更细粒度的路由选择。
- 作为距离向量型的RIP协议,无法检测出环路,会出现无限计数的问题(路由进入稳定状态需要一定时间、网络条数不可超过15等限制,导致无法应用于大型的网络)。而路径向量型由于能够检测出环路,避免了无限计数的问题,令网络更容易进入一个稳定的状态。路径向量型还支持策略路由(指发送数据包时,可以选择或指定所要通过的AS)。