计算机网络 (9) 网络层-路由选择协议

501 阅读9分钟

本文引用图片均来自 高军: 计算机网络

概述

路由选择是指选择通过互连网络从源节点向目的节点传输信息的通道

路由选择分为两种形式:

  1. 静态路由选择
  2. 动态路由选择

静态路由选择一般指人工配置的路由,包括默认路由、特定主机路由和黑洞路由等,静态路由选择配置简单、开销小但不能及时适应网络的变化,一般用于小网络

动态路由选择中路由器通过路由选择协议自动获取路由信息,动态路由选择较为复杂、开销大但能及时适应网络变化,适用于大网络

我们常用的因特网采用的路由选择协议具有如下特点:

  1. 自适应:动态路由选择,能较好适应网络状态的变化
  2. 分布式:路由器之间交换路由信息
  3. 分层次:将整个因特网划分为许多较小的自治系统AS(Autonomous System)

一个AS可能由多个网络共同组成,AS内的路由选择称为内部路由协议(内部网关协议),AS之间的路由选择则称为外部路由协议(外部网关协议)

image.png

内部网关协议主要有:

  1. 路由信息协议RIP(Routing Information Protocol)
  2. 内部网关路由协议IGRP(Interior Gateway Routing Protocol)
  3. 增强型内部网关路由协议EIGRP(Enhanced Interior Gateway Routing Protocol)
  4. 开放式最短路径优先OSPF(Open Shortest Path First)
  5. 中间系统到中间系统IS-IS(Intermediate System-to-Intermediate System)

外部网关协议则主要是边界网关协议BGP(Border Gateway Protocol)

本文主要介绍基于距离向量的RIP和基于链路状态的OSPF

RIP

RIP要求路由器维护自身到AS内其他所有网络距离记录,称为距离向量。RIP使用跳数作为距离的度量,路由器到直连网络的距离定义为1,到其他网络的距离为经过的路由器数加1,当距离大于等于16时判定网络不可达

因为RIP将最大距离限定为16,一条路径只能包含最多15个网络,所以RIP只适用于小型网络

image.png

RIP认为距离小的路由就是好路由,因此使用RIP的路由器在转发分组时会选择经过路由器数量最少的路径。如下图中虽然蓝色路径带宽明显低于橙色路径,但其距离小因此路由器会选择蓝色路径

image.png

当网络中有多条最短路径时RIP会进行等价负载均衡,如下图中R1会为大概一半的分组选择蓝色路径,大概一半的分组选择橙色路径

image.png

RIP包含以下要点:

  1. 和谁交换信息:仅和相邻路由器交换信息
  2. 交换什么信息:自己的路由表
  3. 何时交换信息:周期性交换

如下图,每个路由器刚开始工作时只知道自己到直连网络的距离,通过周期性的和相邻路由器交换路由表最终每个路由器都知道到达AS中其他网络的最小距离下一跳

image.png

假设某时刻路由器C、D的路由表如下图,C的路由表中下一跳全用问号代替是因为本例中并不关心C的路由表具体情况

image.png

当C到达更新周期时会向D发送RIP更新报文,可以简单的理解为C将自身路由表发送给D。D收到报文后首先将其进行改造——将所有下一跳设置为C,所有距离加1。此时D知道了通过C可以到达的网络和距离,然后对照自身路由表进行更新

image.png

更新有如下规则:

  1. 目的网络相同,下一跳相同,根据最新消息更新(对应图中N2)
  2. 目的网络相同,下一跳不同,新路由距离更小,更新(对应图中N6)
  3. 目的网络相同,下一跳不同,距离相同,新增记录用于负载均衡(对应图中N8)
  4. 发现新网络,更新(对应图中N3)

周期性的交换路由表存在坏消息传得慢的问题,假设下图中路由器R1因为网络故障无法连接网络N1,此时R1更新自身路由表将N1标记为不可达并等待更新周期到达后将路由表发送给R2。如果此时R2的更新周期先到,那么带着错误路由信息的RIP更新报文就会被发送到R1,R1收到R2的更新报文后会误认为可以通过R2到达N1并更新自身路由表中关于N1不可达的记录(被谣言误导)。随后R1的更新周期到达同样会将带着错误路由信息的RIP更新报文发送到R2导致R2也被谣言误导。如此往复循环直到R1和R2的路由表中到达N1的距离都更新为16两个路由器才正确的记录了N1不可达的事实

image.png

坏消息传得慢又称路由环路距离无穷计数问题,是距离向量算法的固有问题,只能缓解无法解决

OSPF

OSPF是公开发表的,不受某一家厂商控制的(Open),另外,它基于Dijkstra提出的最短路径算法SFP来计算路由,从算法上保证不会出现路由环路

OSPF基于链路状态而不是距离向量,不限制网络规模,更新效率高。链路状态指本路由器和哪些路由器相邻以及相应链路的代价,代价指费用、时延、带宽等,由网络管理员决定

如下图所示网络,在思科路由器中OSPF的代价计算方法为:代价=100Mbps/链路带宽,值小于1则取1,值大于1则去掉小数,那么R1的链路状态可以相应的计算出来

image.png

使用OSPF的路由器通过发送问候(Hello)分组来建立和维护邻居关系,分组格式如下:

image.png

问候分组以10秒为周期封装在IP数据报中发往组播地址224.0.0.5,如果在40秒内都没有收到邻居的问候分组则判定邻居不可达

image.png

使用OSPF的路由器会产生链路状态通告LSA(Link State Advertisement),其中包含直连网络的链路状态信息和邻居的链路状态信息。LSA会被封装进链路状态更新分组LSU(Link State Update)中以洪泛的方式在路由器之间传播

image.png

使用OSPF的路由器都有一个链路状态数据库LSDB(Link State Database)用于存储LSA,由于各路由器洪泛发送封装有自身LSA的LSU,各路由器的LSDB最终将达到一致

image.png

在LSDB达到一致后各路由器根据LSDB导出带权有向图并使用SFP算法计算出到其他路由器的最短路径(构建路由表)

image.png

OSPF中一共有5种分组类型:

  1. 问候(Hello)分组:用于发现和维护邻居的可达性
  2. 数据库描述(Database Description)分组:向邻居给出自己LSDB中所有链路状态项目的摘要信息
  3. 链路状态请求(Link State Request)分组:向邻居请求发送某些链路状态项目的详细信息
  4. 链路状态更新(Link State Update)分组:路由器使用这种分组将其链路状态进行洪泛发送,即用洪泛法对全网更新链路状态
  5. 链路状态确认(Link State Acknowledgment)分组:对链路状态更新分组的确认分组

使用OSPF的路由器工作流程如下,首先通过问候分组建立和维护邻居关系,然后相互发送数据库描述分组,当路由器发现接收到的描述分组中有自己不知道的链路就会向邻居发送链路状态请求分组以获取链路的详细信息,邻居收到请求则返回链路状态更新分组,路由器收到更新分组后更新自身路由表并返回链路状态确认分组

当链路状态发生变化路由器之间就会重复链路状态请求-链路状态更新-链路状态确认的过程直到LSDB重新达到一致

image.png

多点接入网络中(星形、总线型等)所有路由器互为邻居,此时邻居数量为 n(n1)/2{n(n-1)/2},大量的问候分组会消耗过多的资源

image.png

此时根据OSPF协议,路由器之间会选举出指定路由器DR(Designated Router)备用的指定路由器BDR(Backup Designated Router),所有的其他路由器只与DR和BDR建立邻居关系以及通过它们交换信息

实现路由器之间的选举并不复杂,就是相互交换一些路由器信息例如优先级、接口地址等,然后根据选举规则选举即可

image.png

为了使OSPF能够用于规模很大的网络,OSPF把一个AS(AS内所有路由器都使用OSPF协议)再划分为若干个更小的区域(其中一个为主区域),每个区域有一个32比特的标识符,每个区域一般不超过200个路由器

划分区域后通过洪泛法更新路由表的范围将被局限于区域内不再是整个AS

image.png

路由器划分:

  1. 同一区域内的路由器称为区域内路由器IR(Internal Router),如R1、R2、R8、R9
  2. 位于区域边界的路由器称为区域边界路由器ABR(Area Border Router),如R3、R4、R7
  3. 位于主干区域的路由器称为主干路由器BBR(BackBone Router),如R3、R4、R5、R6、R7
  4. 自治系统边界路由器ASBR(AS Border Router),如R6

ASBR专门和本AS外其他AS交换路由信息,ABR向主干区域发送自身所在区域链路状态通告,向自身所在区域发送其他所有区域链路状态通告

划分区域和层次使得交换信息的类型变多让OSPF变得更复杂,但这也同时大大减少了一个区域中交换路由信息的通信量,使OSPF能用于规模很大的AS中

参考文献