计算机网络:网络层 - 路由选择协议

计算机网络:网络层 - 路由选择协议


路由器的结构

如图所示,路由器被分为路由选择分组转发两个部分:

分组转发中:

当一个数据报从端口进入,要依次被物理层数据链路层网络层层层解析,得到数据报。随后根据转发表,决定从哪一个端口传出,再依次被网络层数据链路层网络层层层封装。

转发的核心就是这个转发表,而转发表是由路由选择路由表得出的!

路由器通过路由选择协议来构建路由表,从而得出转发表,才能合理转发数据报。本博客就讲解路由选择协议,来了解路由表是如何得出的。


路由选择协议概述

路由选择协议分为静态路由选择动态路由选择

  • 静态路由选择:由人工配置的路由,不能及时适应网络的变化,一般来说只在小规模网络中使用
  • 动态路由选择:路由器自己获取路由信息,能够及时适应网络变化,一般大型网络使用

因特网作为全球最大的网络,毫无疑问要使用动态路由选择,动态路由选择有以下特点:

  • 自适应:动态路由选择能较好适应网络状态变化
  • 分布式:将一个系统或任务分解成多个部分,并将其分配到多个节点上执行,这些节点之间通过网络互相通信,最终协作完成整个任务。路由器之间就是这样完成任务的。
  • 分层次:整个因特网被划分为很多自治系统,按层次管理

接下来本博客就讲解这个动态路由选择


自治系统 AS

由于互联网的规模非常大,如果让所有的路由器知道所有的网络应怎样到达,则路由表将会非常大,处理起来花费的时间也会很多,所以互联网采用分层次的路由选择协议

该协议将互联网划分为许多个较小的自治系统 AS,如下图:

每个AS对其它的AS表现为一个单一的,一致的路由

比如上图中,左上角的AS只通过R1连接外部,所以该AS内部的报文,都要通过R1传输。

  • 每个AS内部,使用内部网关协议
  • 不同的AS之间,使用的是外部网关协议

如上图,自治系统 A内部使用了内部网关协议RIP,而自治系统 B内部使用了内部网关协议OSFP。也就是说,不同的AS使用不同的内部网关协议,也可以进行通信。在两个AS之间,使用了外部网关协议BGP-4


内部网关协议

路由信息协议 RIP

RIP是一种基于距离向量的路由选择协议

所谓距离向量,计算规则如下:

  1. 路由器到直连网络的距离为1
  2. 路由器到非直连网络的距离,为经过的路由器数目加1

如下图:

网络N1R1直连,那么R1N1的距离向量就是1;而R3N2并不直连,途径一个路由器R2,那么距离向量就是路由器数目 + 1 = 2

距离向量的最大值为15,当大于等于16时,表示不可达,即不能通过该路由连接到对应的网络。

RIP路由表中,主要包含以下信息:

  • 目的网络:目的网络的地址
  • 距离:到达该网络的距离向量
  • 下一跳路由:到达该网络,要把数据报传输给哪一个路由

那么路由器如何构建自己的路由表呢?

  1. 路由器仅和相邻路由器交换信息
  2. 交换的信息为本路由器知道的所有信息
  3. 路由器按照固定的时间间隔交换信息,然后根据距离向量算法更新自己的路由表
距离向量算法

当路由器接收到来自相邻路由器的RIP报文,就要通过距离向量算法更新自己的路由表,规则如下:

  1. 收到报文后,先修改报文的内容,将距离字段加一,下一跳字段变为发送该报文的路由器

如下图:

现在R2R1发送了一个RIP报文,内部包含到net2的信息,其中:距离字段要+1,表示R1想要到达该网络,需要再经过R2路由器;而下一跳要变为R2,表示到达该网络需要将数据报转发给R2

  1. 将修改后的数据报,与自己原先的路由表对比,更新路由表
  1. 如果原先路由表中没有目的网络,那么将该网络添加到自己的路由表中
  2. 如果原先路由表有相同的目的网络,那么根据以下规则更新:
    • 如果报文中的下一跳的地址与原先下一跳相同:那么更新路由表的距离,这是因为网络随时都有可能变化,有可能同一个路由器到一个网络的距离变了,此时要用最新的,确保信息正确
    • 如果报文中的下一跳的地址与原先下一跳不相同:此时比较距离,保留距离比较小的那一条

示例:

R1收到了R2发来的RIP报文,修改后如右图。

  • net1:原先R1中没有对应的网络,将该条目添加到路由表中
  • net2:原先R1有该网络,并且下一跳同为R2,此时就算距离变长了,也要更新报文,距离从3变为8
  • net3:原先R1有该网络,但是下一跳不相同,此时比较距离11 > 8,说明R2R3距离短,选用R2,更新路由
  • net4:原先R1有该网络,但是下一跳不相同,此时比较距离3 < 6,说明R4R2距离短,选用R4,不更新路由

最后R1路由表变为:

另外的:如果三分钟没有收到相邻路由器的RIP报文,则把该路由器记为不可达,把距离设置为16


RIP报文格式

RIP报文格式如下:

如图所示,RIP报文被封装在UDP数据报后,在被封装进了IP数据报,其实RIP本质是一个应用层协议。

RIP路由部分中,包含了最重要的网络(网络地址+子网掩码)下一跳距离这三个字段。一个报文中最多包含25个这样的路由信息。


收敛问题

RIP协议的优点是实现非常简单,开销很小。

但是RIP也有不少缺点:

  1. 限制了自治系统的大小RIP限制最大距离为16,这也决定了使用RIP的自治系统不能太大
  2. 收敛时间长:也叫做"坏消息传播慢"

收敛:自治系统中所有节点都得到正确的路由信息的过程

接下来我们就看看为什么存在收敛时间长的问题:

现在R1直连网络net1R2通过R1间接连接到net1,突然R1断开了与net1的连接,此时把距离改为16

R1还没来得及告诉R2自己的路由表,R2就给R1发送了RIP报文

此时R1误以为可以通过R2连接到net1,于是更新自己的路由表:

此时就已经产生了错误信息了,过一会R1又给R2发送RIP报文

此时R2以为R1的链路变长了,于是把自己的距离更新为4,随后R2R1发送报文:

此时R1再更新,以此类推,直到两边距离都为16

此时路由器R1R2才直到,net1是不可达的。这就是为什么RIP的收敛速度慢。


开放最短路径优先 OSPF

开放最短路径优先OSPF,是为了克服RIP的缺点而开发出来的。

  • 开放:表明OSPF不是受公司控制的,而是公开发表的协议
  • 最短路径优先:使用了最短路径算法SFP

先前的RIP是基于距离的协议,而OSPF是基于链路状态的,路由器会维护一个整个网络的拓扑图,并基于此图计算最优路径

OSFP不会限制网络的规模,而且收敛速度快。

基本工作原理

OSPF需要先建立和维护邻居关系,这个过程是通过问候分组 hello实现的:

如图所示,每个路由器都有自己的邻居表R1的邻居就是R2R4。每隔十秒钟,路由器就会发送一次hello 分组,如果连续40秒没有收到对应的hello 分组,那么认为该路由器不可达。

路由器会通过数据交换,让每个路由器都由一个链路状态数据库 LSDB,并基于这个数据库,计算出自己到达各个路由器的最短路径,从而构建效率最高的路由表。

数据交换过程通过五种分组维护:

  1. 问候分组:用来构建和维护邻居路由
  2. 数据库描述分组:向邻居路由给出自己的链路状态数据库的摘要信息
  3. 链路状态请求分组:向邻居路由请求更加详细的信息
  4. 链路状态更新分组:将自己的详细信息发送出去,通过泛洪法,让自治系统的所有路由器都可以更新状态
  5. 链路状态确认分组:当路由器通过链路状态更新分组,更新了自己的数据库后,通过该报文确认

如图所示,一开始路由器之间交换问候分组,维护邻居关系:

当满足一定条件,路由器R1发送自己的数据库描述分组

数据库描述分组中,记录了R1的数据库的概括信息。如果R2检查数据库描述分组后发现,有一些信息自己没有,或者不太一样,就向R1发出链路状态请求分组,以获取更加详细的信息:

R1收到链路状态请求分组后,通过泛洪法向所有路由器发送链路状态更新分组,==该分组详细描述了R1自己的数据库,其他路由器就可以根据这个分组更新自己的数据库,以获取最新的信息。==收到链路状态更新分组的路由器,还要往回发送链路状态确认分组,对之前的分组确认。

自治系统分区

?为了使OSFP可以作用与规模很大的网络,OSFP会把一个自治系统划分为若干个更小的范围,叫做区域

每个自治系统都包含一个主干区域,其它区域都通过主干区域连接自治系统外部。

每个区域都有自己的标识符,该编号为32位,以点分十进制表示,主干区域的标识符固定为0.0.0.0。每个区域都要通过一个区域边界路由器来连接主干区域,比如上图中R3R4R7都是区域边界路由器。

利用泛洪法交换链路状态信息时,是在每个区域之间,而非整个自治系统

这样就可以避免路由器太多,导致太多的链路状态信息被发送到网络中,导致网络拥挤了。


外部网关协议

BGP-4

由于不同的自治系统使用不同的内部路由选择协议并使用不同的度量,所以必须在不同的自治系统之间使用另外的路由选择协议。目前使用最多的是边界网关协议 BGP, 其最新版本是 BGP-4)。

BGP 只能是力求寻找一条能够到达目的网络且比较好的路由,而并非要寻找一条最佳路由。

本博客不详细讲解BGP-4协议,只是简单的讲解其作用。


相关推荐
UestcXiye4 小时前
《TCP/IP网络编程》学习笔记 | Chapter 3:地址族与数据序列
c++·计算机网络·ip·tcp
qq_421833675 小时前
计算机网络——SDN
计算机网络
城南vision6 小时前
计算机网络——TCP篇
网络·tcp/ip·计算机网络
lihuhelihu7 小时前
第3章 CentOS系统管理
linux·运维·服务器·计算机网络·ubuntu·centos·云计算
幸运超级加倍~7 小时前
软件设计师-上午题-15 计算机网络(5分)
笔记·计算机网络
残月只会敲键盘7 小时前
面相小白的php反序列化漏洞原理剖析
开发语言·php
ac-er88887 小时前
PHP弱类型安全问题
开发语言·安全·php
ac-er88887 小时前
PHP网络爬虫常见的反爬策略
开发语言·爬虫·php
yanwushu7 小时前
Xserver v1.4.2发布,支持自动重载 nginx 配置
mysql·nginx·php·个人开发·composer
事业运财运爆棚8 小时前
php 如何将数组转成对象数组
php