TCP/IP 自治系统内部路由

Ch 14 自治系统内部路由

典型的内部路由协议

  • RIP,RIPng(IPv6),OSPF,IS-IS

1 内部路由器

相对于属于不同自治系统的路由器而言,称为内部路由

1.1 内部路由如何学习到自己的路由信息

  • (静态路由)对于小型系统,可以采取手工办法:人工完成路由表的创建和更新和删除
  • (动态路由)自动配置方案,

对于稍微大一点的自治系统会选择几个内部网关协议

1.2 在简单性与功能性方面做折中

在实践中,AS中通常采用多个内部协议。

  • 对于小的AS,可能采用单一的独有内部协议
  • 对于大的AS,通常会选取几个内部网关协议(选取一个IGP的一个小的集合来支持AS内部的需求)

1.2 IGP 内部网关协议

是指一类内部网关协议,与EGP是一个相对的概念。IGP是一个路由协议的类别。

2 RIP 路由信息协议

RIP的一些基本信息

在unix中的实现是 routed

RIP中的路由信息交换,最初通过广播方式,后来改为多播方式

RIP适用于局域网环境(不大的网络范围)

RIP使用距离向量算法

  • RIP属于:距离向量协议
  • RIP将协议的参与者(路由器,主机)分为两类,
    一类为主动的设备,若为主动设备则一定是路由器,并负责向外通告路由表
    一类为被动的设备,处理主动设备发送过来的向量表,但是不能向外传自己的向量表
  • RIP中,本地的fib向外通告的默认周期是30s,通过update报文 采用广播/多播方式向外发信息,将本地的fib路由信息抽取出来装配到update报文中发送
  • RIP距离向量算法,
    距离的单位:跳数。直接相连为1跳(即起始值就为一跳,一般起始值为零跳),经过一个路由增加一跳。(其中:可以人为配置一些已知网络的跳数:例如给卫星网增加跳数)

RIP的特点

  • 主动端与被动端都监听广播信息,根据DV算法更新路由表信息。在一定时间后向外传播通告
  • 路由表采用滞后技术:防止路径的振荡(例如在路径费用相同的路径上来回切换,此时应该不进行更新)
  • 需要定时器来设定路径的有效期:针对一个目标设定到达路径的有效期,RIP中默认180s,超时后目标对应的表项无效

RIP需要解决的三类差错

  • 路由回路问题

  • 不稳定性问题

    RIP中跳数的最大的距离为15,16指的是无穷大

    如果网络过大,需要对网络进行划分

  • 慢收敛问题

3 解决路由回路

慢收敛问题是路由回路造成的

路由回路形成的原因:假设R2通过R1连接到一个网络N中,那么到达网络N的费用在R1路由表中保存的是1跳,在R2路由表中保存的是2跳。如果在某一时刻直接与网络N相连的R1和网络N出错断开,此时对R1而言到达网络N不可达,在RIP中跳数对应为16。但是在一个周期后R2向R1发送update消息,那么R1收到R2的路由向量表后更新自己本地转发表,将到达网络N标记为经过R2到达,同时费用改为3跳。此时形成了路由回路,R1,R2二者变为互相经过然后才能到达网络N的情况,所以会轮流增加表项中到达网络N的跳数,知道跳数增加到16是,才意识到网络N现在不可达。这个过程是一个慢收敛的过程。

解决路由回路的方法

  • 水平分割:从一个目标获取的路由信息不能在将这个信息传回这个目标

    所以,针对上述(路由回路形成的原因)的情况经过几轮的更新后,所有目标都能得知网络N不可达

  • 保持(hold down)

    设置间隔时间,RIP中是60s

    如果接收到网络不可达消息,则先忽略此消息,等待hold down时间:这样所有节点都能获得网络不可达的消息

    缺点:在hold down期间若存在路由回路,该路由回路会一直被保留;同样,也会保留错误路由

  • 逆向毒害 (poison reverse)

    在连接断开时,向外通告的路由器保留表项的一些更新周期,但是向外通告的时候将费用改为无穷大

    触发式更新技术相结合:减少等待时间(当某个路径断开,则不等待向外通告更新周期的时间30s,立即向外通告)

解决方法中的缺点

  • 触发式更新的缺点:可能产生广播崩溃(短时间内update的广播消息过多耗尽链路带宽)
  • 采用广播方式消耗额外带宽
  • 如果存在回路,使得回路中拆除连接的报文信息无法传播出去
  • 在广域网(更大的网络环境中),由于hold down等待的时间过长,使得上层协议判断连接已断开然后进行出错处理

4 RIP2 报文格式

RIP1 报文格式 (IPv4)

报文类型

  • 路由信息报文
  • 信息请求报文

格式

采用相同的格式

RIP2 报文格式

rip2报文格式

  • COMMAND字段

    总共5中类型

    command

  • VERSION:版本号为2,RIP2

  • 接下来是每一个目标:

    FAMILY OF NET_k:网络的家族,对应IPv4的取值为2

    ROUTE TAG FOR NET_k:标记这条路由的源

    IP地址 (0.0.0.0 :表示默认路由)

    IP地址对应的子网掩码

    到达目标网络NET_k的下一跳

RIP2 对比 RIP1

  • RIP2 支持可变长子网掩码
  • 支持CIDR:无类别地址寻址
  • 采用多播替代广播

说明

rip报文的计算(报文长度等信息)依靠传输层服务,封装在udp,使用520端口

5 RIPng

对于IPv6的RIP(RIP next generation)

使用的端口号:521

报文格式

ripng

  • ROUTE TABLE ENTRY K

    每个占20字节,格式:

    route table entry

    • IPv6 PRIFIX:占128位
    • ROUTE TAG:路由标签
    • PREFIX LENGTH:前缀长度,IPv6不分类通过前缀长度区分
    • METRIC:费用

RIPng的特点

1 但是在ROUTE TABLE ENTRY中没有设置下一跳地址,由于IPv6地址过长,所以如果包含了下一跳在一个表项中会导致报文长度过长。

解决方案:

  • 若费用字段(METRIC)值为全1(0xFF)时,则当前表项代表Next Hop

2 RIPng的更新周期是30s,表项超时间隔为180s

3 采用水平分割、逆向毒害和触发式更新来解决路由回路问题

6 采用跳数作为单位的缺点

限制了网路的规模,导致RIP只能适用于小型互联网

使用跳数会造成一些不准确的情况(例如卫星网和以太网间)

7 hello协议

(属于距离向量协议)

  • 采用时间延迟作为度量单位的协议
  • 提供的功能:1 在所有运行hello协议的节点之间进行时钟的同步 2 计算基于时延的最短路径

特点:

报文传输除了路由信息同时还带上时间戳:计算两个节点之间的时钟差异和进行同步
可以对到达目标的费用基于延迟进行计算,收到向量表后,按照延迟时间短的进行更新

缺点:

不稳定性:延迟时间是变化的(网络流量变化大,对延迟影响也较大等原因)

如果采用快速响应的策略,会造成二阶段震荡问题(反复在两条路径之间切换)

避免震荡:

  • hold down:等一定的时间再去改变延时
  • round off measurements or use threshold:设定一个阈值,当延时变化超过阈值才改变路由
  • use average measurement:使用平均度量方法,每一次延迟测量作为一个样本,N个样本中若出现超过k个比当前平均延迟小,此时才对路由进行改变

不稳定性仍然存在,无法消除振荡

8 OSPF协议

Open SPF Protocol 特点

  • 属于IGP
  • 开放标准
  • 支持大型互联网,采用多区域管理
  • 路由使用ToS
  • 支持负载均衡(支持多条路径)
  • 支持大型互联网(网络规模大)
  • 支持认证
  • 路由的粒度可以分为多个子网
  • 支持CIDR
  • 适应于多路访问(链路是共享链路,逻辑上是一条公共总线)
  • 支持多播传递
  • 支持虚拟连接
  • 可以相互交换从外面学习到的路由信息(通过EGP学习获得和IGP学习获得)
  • OSPF报文传输的时候直接封装在IP内

OSPFv2报文格式

ospfv2

  • version:版本号,=2

  • type:五种报文类型

    type

  • source ip:报文发送者ip

  • area id:区域号,是一个区域的标识。

    OSPF将网络区域分为主干区域和非主干区域两种类型。是一个二层的结构(构成了一个星形拓扑)

  • authentication type:认证类型,定义了认证方案

    0:表示没有认证, 1:表示口令密码认证

OSPFv2 hello 报文

hello

  • 公共头部TYPE=1
  • NETWORK MASK:网络地址的掩码,(发送报文的目标网络的掩码)
  • HELLO INTERVAL:两个邻居间发送hello的时间间隔
  • DEAD INTERVAL:两个路由通过hello建立了邻居关系,如果经过了DEAD INTERVAL时间后再没有hello报文的交换,则可以认为邻居已经不存在(一般是HELLO INTERVAL的4倍)
  • GWAY PRIO:指定自身路由器的优先级,用于选取备份指定路由器(BDR)
  • DR,BDR:多路访问的链路上,为了减少路由间信息量交换,则在链路上选取一个指定路由器DR和一个备份指定路由器BDR
  • NEOGHBOR_i IP ADDR:邻居IP地址

OSPFv2 数据库描述报文

dbd

描述

用于初始化数据库

在报文交换时:一个作为主节点,另一个作为从节点,主节点发送一个数据库描述报文,从节点返回一个确认

如果子网拓扑数据库较大,则需要有多个数据库描述报文,才能将这些拓扑信息全部传输出去,需要用到报文中的一些特殊比特位:

  • I = 1:表示初始报文
  • M = 1:本报文后还有报文
  • S: 1:主节点,0:从节点
  • SEQUENCE NUMBER:用于保证传输是否正确(初始报文选定一个初始值,之后没法送一个报文在序号上加1)

报文格式

  • LS Type:链路状态类型

LStype

路由器、网络、总结链路、外部链路

  • INTERFACE MTU:按此长度传输IP报文,可以避免产生分片
  • 每个链路都有 LS AGE ~ LS LENGTH来描述:
    • LS AGE:链路建立好后所经过的时间
    • LS Type:链路类型
    • LINK ID:链路的标识号,一般可以设置为路由器上的某个接口的IP地址
    • ADVERTISING ROUTE:指发送此链路的路由器的地址
    • LINK SEQUENCE NUMBER:链路序号,防止报文乱序和丢失
    • CHECKSUM

OSPFv2 链路状态request报文

路由器收到数据库描述报文后,发现自己本地链路有一些链路状态已经过时,此时需要通过request报文要求邻居发送自己指定的链路状态(提出链路状态请求报文,则通过update报文来响应)

LS request

对于每一条链路都需要这三个字段:

  • LS Type
  • LINK ID
  • ADVERTISING ROUTER

OSPFv2 链路状态更新报文

update

分别对应的每个 LINK STATUS ADVERTIEMENT(链路状态通告)

lsa

在这个通告头部之后,才跟上实际的信息,这个信息取决于LS TYPE字段

LS LENGTH:LS长度包括通告首部长度(20字节)和后面的信息的长度

9 OSPFv3

在OSPFv2基础上做了一些改动,使得可以支持IPv6。但是由于IPv6的地址较长,所以:

  • OSPFv2 用32位IP地址来标识一个路由器,OSPFv3使用一个32位的路由ID来标识一个路由器

特点

  • 支持IPv6的路由范围:本地链路、按区域划分、按自治系统划分
  • 可以同时运行多个OSPF进程的实例
  • OSPFv3移除了对报文公共首部的所有认证(交给了IPv6首部处理认证)
  • OSPFv3报文可以容纳IPv6地址
  • 使用32位的ID来标识一个路由器

OSPFv3 报文格式

固定长度的公共首部

header

  • …… (与OSPFv2类似)

Hello 报文格式

hello

  • INTERFACE ID:接口ID,使用32位空间来标识
  • ROUTER PRIO:优先级
  • …… // 各个地址都是使用标识号而非IP地址

OSPFv3与OSPFv2比较

OSPFv3结合并扩展了OSPFv2的很多特性

OSPFv3根据需要定义了一些LSA(链路状态通告)的类型

OSPFv3的每个链路状态报文的首部与OSPFv2是一样的

10 IS-IS 中间系统到中间系统路由协议

IS-IS属于链路状态协议

11 Gated

是一个路由网关的守护进程

实现了包括RIP在内的IGP和包括BGP在内的EGP

  • 理解多种不同的路由协议,可以用于不同AS之间的信息交换

12 人工费用 (Artificial Metrics)

Metric : 路由费用度量值

可以将原来的Metric值用人工的值进行替换,以便于控制和反映实际情况

优点:

  • 一旦网络出现故障可以自动选择另外一条路径
  • 管理员在配制路由时只需要更改路由值Metric而非修改转发表(工作量小,便于管理)

13 采用部分信息路由

  • 主机节点:采用部分信息路由(可以依赖路由器进行转发)

  • 路由器节点:并非所有路由器都使用所有信息。一些路由器可能采用部分路由信息进行路由。

    核心路由器:必须包含所有信息(必须了解所有目标,不能使用默认路由)

    非核心路由器:可以采用默认路由方式

使用默认路由的结果:

  • 1 如果本地路由发生错误则无法发现(转交后有送回,路由路径仍然存在,造成很长的延迟)
  • 2 对于一个AS内部的路由器而言,只要将内部所有已知的所有目标在路由表中列出,其余都可以通过默认路由解决,大大减少了需要传输更新的路由信息量。

参考资料:

  • INTERNETWORKING WITH TCP/IP PRINCIPLES, PROTOCOLS, AND ARCHITECTURE Vol1 (6th Edition). DOUGLASE E. COMER
  • Routing with TCP/IP 2nd VOL I / II , Cisco Press. (VOL I : IGP , VOL II : EGP)