●
IP
转发,或称
IP
路由,简单地说,就是接收一个
IP
包,然后决定下一步往哪发送,再把这个包转发出去。具体地分析,大概有如下几个步骤:
1
)路由器接收到帧并检查其校验码(
FCS
):如果有错误发生,帧被丢弃。路由器不负责恢复丢失的包。
2
)如果没有错误发生,路由器接下来检查包的类型(
Ethernet Type
字段),并解包。数据链路层包头和包尾被丢弃。
3
)假设该包为
IP
包,路由器检查其路由表,找到和包中目的
IP
地址最匹配的前缀。
4
)匹配的路由表记录包含外发接口和下一跳路由器;利用这些信息可以重组一个新的数据链路帧。
5
)在创建一个新帧之前,路由器会更新其
IP
包头的
TTL
字段,并重新计算
IP
包头校验码。
6
)路由器将
IP
包封装在新的数据链路包头(包含目的地址)和包尾(包含新的
FCS
)中来创建一个新帧。
●
上述步骤
3
)和
4
)无疑是转发
开销最大的部分,
Cisco
路由器对这两步骤进行了一些优化,希望能够提升其工作效率。最常用的两个方法是:
1
)快速交换(
fast switching
)
2
)
CEF
(
Cisco Express Forwarding
,
Cisco
快速转发)
●
快速交换的思想:第一个包进行进程交换(
process switching
)的同时,路由器将其记录添加到快速交换缓存(路由缓存)中,缓存记录了目的
IP
地址、下
一跳信息和数据链路包头信息。后续的包如果是同样目的地址,就直接匹配缓存的记录,这样路由器的包转发可以大大加速。
快速交换也有一些不足:
1
)第一个包还是需要进程交换;
2
)缓存有限,保存信息很快就会超时;
3
)只能基于每个目的地址作负载均衡。
●
CEF
克服了快速交换的一些缺陷。它使用转发信息库(
FIB
)结构来优化路由查找过程。
FIB
包含了所有路由表的已知路由信息。
CEF
每当路由表添加或删除路由时会重新载入一次
FIB
记录。
CEF
不需要超时
FIB
,也不需要第一个包进行进程交换,而且允许针对等价路由作更为有效的负载均衡。
CEF
的工作过程:每当一个新包到达时,
CEF
路由器首先搜索
FIB
。
Cisco
将
FIB
结构设计为一棵特殊类型的树(称为
mtrie
),这样可以加速目的地址匹配过程。匹配的
FIB
记录指向
CEF
邻接表的记录,在邻接表中列出了外发接口及其他用于建立数据链路包头和包尾的信息。这样路由器就能快速确定所有信息并转发包出去。
ip cef
全局配置命令用来为
Cisco
路由器的所有接口激活
CEF
。而
no ip route-cache cef
接口子命令可以用来选择性地在某些接口上屏蔽
CEF
。在许多高端
Cisco
路由器中,
CEF
进程分布到线路卡(
linecard
)中,类似地,
Cisco
多层交换机将
CEF
用于三层转发,其
CEF
表是由转发
ASIC
芯片载入的。
●
三种转发方式的负载均衡比较
交换路径
|
存放转发信息的表
|
负载均衡方法
|
进程交换
|
路由表
|
基于每个包
|
快速交换
|
快速交换缓存
|
基于每个目的地址
|
CEF
|
FIB
和邻接表
|
基于每个源和目的地址的哈希值,或基于每个包
|
●
CEF
邻接表中的每条记录列出了一个外发接口以及通过该接口可达的一个
2
层和
3
层地址。表中还包括用于抵达下一跳设备的整个数据链路包头。
CEF
邻接表必须基于
IP
路由表来建立,但还需要加入其它信息。一般
IP
路由表的记录只包括外发接口及其下一跳设备
IP
地址,为了补全邻接表的信息,路由器还需要下一跳设备的数据链路层地址。
CEF
使用
IP ARP
缓存,帧中继映射信息,以及其他
3
层到
2
层的映射信息来查询数据链路层地址。
●
帧中继逆向
ARP
(
InARP
)
InARP
用来发现到达指定邻接
IP
地址的
DLCI
值。与
IP ARP
不同的是,路由器已经知道
DLCI
,但是需要学习它对应的
IP
地址。
与在局域网中不同,包不需要
到达路由器就可以触发
InARP
协议;
InARP
通过
LMI
状态消息触发。当接收到一个
LMI PVC Up
消息时,每台路由器就会使用
InARP
消息发布其通过这条
VC
的
IP
地址(在
RFC 1293
中定义)。注意,如果屏蔽了
LMI
,那么
InARP
进程就不再工作了,因为无法触发路由器。
尽管
InARP
本身很简单,其实现细节基于路由器中子接口类型不同而有所区别。
使用
no frame-relay inverse-arp
接口子命令可以在多点和物理接口上屏蔽
InARP
。其屏蔽选项有:对该接口的所有
VC
都屏蔽;对该接口的所有
VC
屏蔽特定
3
层协议,对该接口的所有
VC
屏蔽某个
DLCI
的特定
3
层协议。需要注意的是,
no frame-relay inverse-arp
命令不仅告知路由器停止发送
InARP
消息,也告知路由器忽略接收
InARP
消息。
关于
InARP
的行为特性表:
行为
|
点对点接口
|
多点或物理接口
|
InARP
需要
LMI
吗?
|
总是需要
|
总是需要
|
InARP
默认是否激活?
|
是
|
是
|
InARP
是否可以屏蔽?
|
否
|
是
|
是否忽略接收
InARP
消息?
|
总是忽略
|
当屏蔽
InARP
时忽略
|
●
无
类和分类路由
无类和分类路由所关注的是怎样匹配路由表,特别是在使用了默认路由的时候。基本原则为:
1
)无类路由:当存在默认路由时,如果路由表中没有目的地址的精确匹配记录,那么使用默认路由。
2
)分类路由:当存在默认路由时,如果包含目的
IP
地址的
A
、
B
或
C
类网络在路由表中均不存在,那么使用默认路由。如果有这样的一类网络存在于路由表中,而
IP
包的目的地址与这类网络的子网路由并不精确匹配,那么路由器不使用默认路由,而是直接将该包丢弃。
举例:
假设路由表记录是:
S 192.168.0.0/26 via 192.168.1.1 Serial1/0
S 192.168.2.0/24 via 192.168.1.1 Serial1/0
C 192.168.1.0/24 is directly connected, Serial1/0
S* 0.0.0.0/0 via 192.168.1.254
IP
包的目的
IP
地址是
192.168.0.90
。如果按无类路由,路由器首先试图在路由表中进行精确匹配,显然前三条记录都不满足,此时路由器选择最后一条默认路由转发。如果按分类路由,路由器首先查找包含
192.168.0.90
的
C
类网络(
192.168.0.0
),看是否存在其子网路由,结果发现第一条记录是其子网,但与
192.168.0.90
并不精确匹配,此时路由器不会选择默认路由,而会将
IP
包丢弃。
当企业的路由器互相之间都可见(默认路由仅用于对外连接)时,分类路由可以正常工作。而如果情况不是这样,你会发现无类路由才是你需要的。
可以通过
ip classless
全局命令来控制是选择无类还是分类路由。
ip classless
激活无类路由,而
no ip classless
激活分类路由。
●
无类和有类概念在不同场合下的比较
相关场合
|
“无类”的含义
|
“分类”的含义
|
IP
地址
|
不使用
A
、
B
和
C
类网络的规则,地址只有两个部分:前缀和主机
|
使用
A
、
B
和
C
类网络的规则,地址有三个部分:网络、子网和主机
|
路由
|
如果没有精确路由与指定包匹配,路由器就通过默认路由转发
|
路由器先试图匹配分类网络。如果发现存在,而路由中没有一条和指定包精确匹配,则不使用默认路由
|
路由协议
|
路由协议无需考虑掩码的细节,因为它包含在路由更新中;可支持
VLSM
和不连续网络。无类路由协议:
RIPv2
、
EIGRP
、
OSPF
和
IS-IS
|
路由协议需要考虑掩码的细节,因为它不包含在路由更新中;不支持
VLSM
和不连续网络。分类路由协议:
RIPv1
和
IGRP
|