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 报文格式
COMMAND字段
总共5中类型
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
报文格式
ROUTE TABLE ENTRY K
每个占20字节,格式:
- 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报文格式
version:版本号,=2
type:五种报文类型
source ip:报文发送者ip
area id:区域号,是一个区域的标识。
OSPF将网络区域分为主干区域和非主干区域两种类型。是一个二层的结构(构成了一个星形拓扑)
authentication type:认证类型,定义了认证方案
0:表示没有认证, 1:表示口令密码认证
OSPFv2 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 数据库描述报文
描述
用于初始化数据库
在报文交换时:一个作为主节点,另一个作为从节点,主节点发送一个数据库描述报文,从节点返回一个确认
如果子网拓扑数据库较大,则需要有多个数据库描述报文,才能将这些拓扑信息全部传输出去,需要用到报文中的一些特殊比特位:
- I = 1:表示初始报文
- M = 1:本报文后还有报文
- S: 1:主节点,0:从节点
- SEQUENCE NUMBER:用于保证传输是否正确(初始报文选定一个初始值,之后没法送一个报文在序号上加1)
报文格式
- LS Type:链路状态类型
路由器、网络、总结链路、外部链路
- 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 Type
- LINK ID
- ADVERTISING ROUTER
OSPFv2 链路状态更新报文
分别对应的每个 LINK STATUS ADVERTIEMENT(链路状态通告)
在这个通告头部之后,才跟上实际的信息,这个信息取决于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 报文格式
固定长度的公共首部
- …… (与OSPFv2类似)
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)