●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类网络的规则,
地址只有两个部分:前缀和主机 地址有三个部分:网络、子网和主机
路由 如果没有精确路由与指定包匹配, 路由器先试图匹配分类网络。如果
路由器就通过默认路由转发 发现存在,而路由中没有一条和指定包精确 确匹配,则不使用默认路由
路由协议 路由协议无需考虑掩码的细节, 路由协议需要考虑掩码的细节,因为它不
因为它包含在路由更新中;可支持V 包含在路由更新中;不支持VLSM和不连续
SM和不连续网络。无类路由协议:RIPv2、 分类路由协议:RIPv1和IGRP
EIGRP、OSPF和IS-IS 网络。