路由协议概述


[toc]

网络层提供的两种服务

1. 面向连接的虚电路服务

其思想是可靠通信通过网络来保证,在网络层进行建立连接,建立完后通信双方沿着建立的虚电路发送分组每个分组使用短的虚电路号标记(构成虚电路的每一段链路都有一个虚电路编号),属于同一条虚电路的分组均按照同一路由进行转发因为整个过程虚电路只有一条,分组总是顺序到达终点。如果通信方式再使用可靠数据传输的网络协议,就能使方式的分组最终正确到达接收方。通信结束后需要释放建立的虚电路

2. 无连接的数据报服务

其思想是,可靠通信通过用户主机来保证。因为是无连接的,每个分组都有终点的完整地址,且每个分组可走不同的路由,分组也不一定个按序到达目的主机。在这个过程中很难去实现可靠数据传输,所以服务质量的保证很难去实现

路由选择协议概述

静态路由选择

由人工配置的网络路由、默认路由、特定主机路由、黑洞路由等。这种配置方式简单、开销小但是不能及时适应网络状态的变化,一般只在小规模网络中

动态路由选择

通过路由选择协议自动获取路由信息,能较好的适应网络状态的变化

特点

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

自治系统

自治系统内的路由选择为域内路由选择,自治系统间的路由选择为域间路由选择;

域间路由选择使用外部网关协议EGP这个类别的路由选择协议,而域内路由选择使用内部网关协议IGP这个类别的路由选择协议。

因为早期因特网没有路由器,使用的是网关,所以是只是路由选择的分类名称。现在具体为外部路由协议ERP。自治系统间使用的外部网关协议为边界网关协议BGP

一个自治系统内使用的内部网关协议与其他的自治系统无关,例如一个AS使用的内部网关协议为路由信息协议RIP,另一个AS可以是开放式最短路径优先OSPF协议;


常见的路由选择协议:

  1. 内部网关协议IGP:
    1. 路由信息协议RIP:基于距离向量,在因特网中最早使用
    2. 内部网关路由协议IGRP
    3. 增强型内部网关路由协议EIGRP
    4. 开放式最短路径优先OSPF:基于链路状态,在各种网络中广泛使用,集化成IS-IS是ISP骨干网上最常用的IGP协议
    5. 中间系统到中间系统IS-IS
  2. 外部网关协议EGP:
    1. 边界网关协议BGP

转发表是从路由表得出,路由表形式(目的网络,下一跳,路由条目类型)

路由选择标准

  1. 跳数:经过节点数量的多少,越小越好
  2. 地理距离:越小越好
  3. 带宽:传输速度,越大越好
  4. 负载:传输数据的量,越小越好
  5. 通信成本:越小越好
  6. 延迟:通信需要的时间,越小越好

静态路由配置

直连路由:接口与目的网络直连,下一条不是路由器地址而是接口,(目的网络,接口,直连)

静态路由的配置:如果路由器R1向R2的所连的目的网络转发IP数据报,R1的下一跳应该转发给R2,但是R1的路由表中无法自动计算出该目的网络的路由条目,所以需要我们手动配置到达该目的网络的路由条目,也就是(目的网络,接口0的网络地址,静态),其中R1的接口1向R2的接口0进行转发,该路由条目类型是静态路由

默认路由:是对IP数据包中的目的地址找不到存在的其他路由时,路由器所选择的路由。对于路由器中相同下一跳的不同目的网络,用默认路由替代,目的网络为0.0.0.0/0,下一跳为转发到该目的网络所连接的路由器的接口的网络地址(0.0.0.0/0,接口0的网络地址,静态),其中R1的接口1向R2的接口0进行转发。举个例子:如果R1想要转发IP数据报给包含众多网络的因特网,人工一条条配静态路由是不可能的,我们可以直接配到这个因特网默认路由,对于到该因特网的数据报,直接转发给默认路由就是了

特定主机路由:路由器R1向R2中的某个特定主机的路由条目,R1接口1与R2接口0连接,形式为(特定主机的网络地址,接口0的网络地址,静态)

路由环路问题

产生原因:

  1. 路由条目的下一条错误配置成其他路由的接口;例如有路由器R1-R2-R3连接着;R2向R1的某个目的地址转发数据报,在R2的路由表根据目的地址找出下一跳,但是R2的路由条目的错误配置成R3的接口,则R2向R3转发,R3在自己的路由表查到要转发到R1的目的地址,首先要将数据报转发给R2,这样数据报又回到了R2,R2又转发给R3,如此便形成了R2->R3->R2的环路
  2. 聚合了不存在的网络:假如路由器R1-R2相连,R1连着多个网络,R2的路由条目中目的地址对R1的网络进行路由聚合,如果R2的目的地址聚合了不存在的路由,如果R2要转发IP数据报给不存在的网络时,在R2的路由表中找到了聚合路由对应路由器R1的接口为下一跳,这样R2就会向R1转发给数据报,数据报到达R1后,R1进行查表转发,但是数据报的目的地址并不存在,所以R1会向默认路由转发数据报,R1的默认路由为R2,R2收到该数据报后,又转发给R1,所以形成了R2->R1->R2的环路
  3. 网络故障导致的路由环路问题:假如路由器R1-R2相连,如果R1某个接口所直连的网络出现故障而不可达,R1的路由表会自动删除到达该目的地址的路由条目,之后R2向R1的该故障网络转发数据报,数据报到达R1后,由于找不到该目的网络,所以向默认路由也就是R2转发数据报,R2收到数据报后,又会向R1转发,这样就形成了R2->R1->R2的环路

解决方法:

  1. 对于问题1,只需要在IP数据报设置TTL字段,每次进入路由器TTL-1,只要TTL=0,如果还没到达目的网络,丢弃
  2. 对于问题2,添加对于聚合了不存在的网络的黑洞路由,即下一条为null0,null0为路由器的虚拟接口,目的地址为被聚合的不存在的目的地址时,查表向null0转发数据报,也就是丢弃了该数据报,因为最长匹配原则,查表转发不会匹配到聚合路由的地址,而是匹配到黑洞路由的地址
  3. 对于问题3,在R1的路由表中,添加该故障网络的黑洞路由,R1收到该数据报后会匹配到黑洞路由,则该数据报会进入黑洞,即被丢弃,如果故障网络好了,配置的黑洞路由自动失效,路由器重新自动算出新的直连路由条目,如果又故障了,之前配置的黑洞路由又自动生效