1、Cisco路由器转发数据包时常用的五种交换方式进程交换(Process Switching)这是一种最基本的交换模式,在这种模式下,一条数据流(Flow)中的第一个包(Packet)将被置入系统缓存(System Buffer)。其目的地址将会拿到路由表中去查询比对,路由器的处理器(CPU or Processer)同时将进行 CRC校验,检查包是否正确。然后数据包的二层 MAC地址将会被重写,替换为下一跳接口的 MAC地址。对这条数据流(Flow)中的第2个、第3个数据包将会继续这样相同的操作,包括查询路由表、重写 MAC地址,CRC 校验等。这种方式无疑是延迟最大的,因为它要利用 Syst
2、em Buffer以及 Processor去处理每个收到的包。但是我们仍然有机会使用这种交换方式,比如在进行基于数据包的负载均衡,或是debug ip packet时。因为默认情况下,思科路由器会启用 Fast Switching或 Optimum Switching或是 CEF Switching,而不是 Process Switching,所以我们只能通过:no ip route-cache来禁用 Fast Switching,这在另一种意义上正是开启 Process Switching。命令:R1(config-if)#no ip route-cache /启用进程交换(禁用快速交换)注
3、意:命令 debug ip packet仅允许观察进程交换的数据包,将启用进程交换,所有数据包都被送至进程记录,CEF 交换、快速交换等的数据包将不被显示出来。快速交换(Fash Switching)/路由缓存交换(Route-Cache Switching)快速交换要优于 Process Switching,它采用了路由缓存(Route Cache)来存储关于某条数据流(Flow)的特定信息,当然会包括诸如目的 MAC地址,目的接口等内容。这时我们只需要对一条数据流(Flow)中的第一个包做 Process Switching,并把信息存入 Cache,所有后续数据包,可以不必再中断 Sys
4、tem Processor去执行查询等操作,直接从 Cache中提取目的接口,目的 MAC地址等,这样大大加速了包转发速度。Fast Switching 在某些资料上可能被称为 Route-Cache Switching。思科1600、1700、2500、2600系列路由器的Ethernet、Fast Ethernet、Serial 接口默认采用的就是 Fast Switching。命令:R1(config-if)#ip route-cache /启用快速交换R1#show ip cache /查看快速交换最优交换(Optimum Switching) 和 分布式交换(Distributed
5、Switching)这两种交换模式,从原理上来讲都与 Fast Switching极为相似,比如 Optimum Switching其实采用了一种经过优化的交换缓存(Optimumed Switching Cache),它的速度要较平常Cache要快。Distributed Switching 需要使用 Versatile Interface Card这种硬件卡,又称 VIP Card。它会自已保存一份 Route Cache,这样查询时就不必等待使用共享的系统缓存(Shared System Buffer)了,无论相对于 Fast Switching还是 Optimum Switching来
6、讲,都是比较快的。这两种模式一般只在思科高端设备上有所应用,比如7200系列的路由器或12000系列的路由器。命令:R1(config-if)#ip route-cache optimum /启用最优交换R1(config-if)#ip route-cache distributed /启用分布式交换R1#show ip cache optimum /查看最优交换Netflow交换(Netflow Switching)这种模式是最值得参考的,它完全基于其它 Switching Mode,重点在于对流经的数据包进行计费、监控、网管。但值得提的是,这种模式也要存储相关信息,据统计大致65536条数
7、据流(Flow)会耗费4MB 的 System Buffer。命令:R1(config-if)#ip route-cache flow /启用 Netflow交换R1#show ip cache flow /查看 Netflow交换缓存R1(config)#ip flow-export /将 Netflow审计的数据包转发到指定设备Cisco特快交换(Cisco Express Forwarding)Cisco CEF是最为高效的一种三层协议,很多人容易对 CEF产生误解,所以我们仍然要说明它的来原。CEF 采用了基于硬件的平台,它不仅仅是将数据都存入 System Buffer,而是将整个路
8、由表、拓扑表,以及所有的下一跳地址、MAC 地址全部进行“预存” ,只要路由表、拓扑表中存在的条目,无论是否有数据请求发往其目的地址,都会提前预读取,预设置缓存。具体来说它是通过全用转发信息表(FIB)和邻接表来实现的,它事先从路由表中获取信息并把信息存储在转发信息库(FIB)中,当任何数据包需要这些信息时可以立即使用。FIB包括路由表中的所有目标网络,它们可以随着网络拓扑的变化而调整。CEF 使用一个单独的数据表-邻接关系表,为 FIB的每个表项维护第二层转发信息。邻接关系表由第二层信息构成,(这些信息可以由 IP、ARP 或 IPv6邻居发现协议学习到)。FIB 和邻接表是在数据包转发之前
9、建立的,当有新的数据请求发送时,就不需要 CPU去查询路由表转发一次后把信息存入缓存,或查询目的接口,目的 MAC地址等信息,而是直接从缓存中读取,从而使转发速度得以大大提高。IPv4、IPv6关于负载均衡和 CEF的说明:1.对于 IPv4,CEF 支持基于目标网络的负载均衡和基于数据包的负载均衡;对于 IPv6,CEF 仅支持基于目标网络的负载均衡。2.IPv4缺省的交换模式是 CEF;Ipv6缺省的交换模式是 Process Switching。2.针对 IPv4可以使用 ip cef激活 CEF;而对 IPv6,必须先启用 ip cef ,再使用 ipv6 cef激活 CEF。3.可以
10、通过 show ip cef / show ipv6 cef 查看路由器是否启用 CEF。命令:R1(config)#ip cef /用来为所有接口激活 CEF(全局配置命令)R1(config-if)#no ip route-cache cef /可以选择性地在某些接口上屏蔽CEF(接口子命令)R1#show ip cef /查看路由器是否启用 CEF,CEF 全部信息R1#show ip cef detail /查看 CEF全部详细信息R1#show ip cef int se0/0 /查看 CEF特定接口信息R1#show ip cef int se0/0 detail /查看 CEF特
11、定接口详细信息R1#show cef int /查看使用了哪一种负载均衡模式,CEF 全部功能信息R1#show cef int s0/0 /查看使用了哪一种负载均衡模式,CEF 特定接口功能信息注意:(no) ip cef 是一个全局命令,当在接口下使用(no) ip cef 时,自动跳转为全局命令。当使用 no ip cef时,则关闭了所有接口的 CEF,ip route-cache cef 不起作用。负载均衡负载均衡的两种分类等价负载均衡(Equal-Cost Load Sharing):是将流量均等地分布到多条度量相同的路径上;非等价负载均衡(Unequal-Cost Load Sha
12、ring):是将报文分布到不同度量的多条路径上。各条路径上分布的流量和路由开销成反比。开销越低的路径分配的流量越多。说明:只有 EIGRP支持非等价负载均衡,最多支持对6条路径的非等价负载均衡;可以通过差异变量(Variance)来确定哪些路由在非等价负载均衡中是可以使用的;并且可以通过设置最大路径数决定使用某几条链路。负载均衡的两种方式:基于目标网络的负载均衡 ip load-sharing per-destination;基于数据包的负载均衡 ip load-sharing per-packet。基于目标网络的负载均衡 ip load-sharing per-destination基于目标
13、网络的负载均衡允许路由器使用多条路径来负载均衡,它是根据目标网络中的目的地址分配负载量的。并且它可以确保数据包总是使用相同的路径,并按照它们发送的顺序到达目的地址。这种方式的负载均衡最适用于需要数据包按照某种顺序到达的应用。例如,有两个网络 A、B,A-B 间存在两条路径,那么从 A去往 B地的第一个目标的报文走第一条路径,去往 B的第二个目标的报文走第二条路径,去 B的第三个目标的报文走第一条路径,依此类推随着目标网络地址数量的增加,负载均衡会变得更加有效。大多情况下路由器都采用这种负载均衡方式,并且它也是 Cisco CEF使用的缺省负载均衡方式。基于目标网络的负载均衡和 Cisco CE
14、F:准确来讲,CEF 是按照源、目的地址对(Hash 出一个值)进行负载均衡。相同源、目的地址对的流量都会从同一个接口出站,而不同源、目的地址对的流量可能会从下一个接口出站。命令:R1(config-if)#ip load-sharing per-destination /基于目标网络的负载均衡基于数据包的负载均衡 ip load-sharing per-packet使用基于数据包的负载均衡的路由器可以在多条链路上连续发送数据包,而不用考虑主机或用户的具体情况。这种负载均衡采用轮转机制来确定每个数据包走哪条路径到达目的地址。缺点是不能确保每一个数据包遵循相同的路径,将导致数据包无序到达。这对某
15、些应用来说是不能接受的(如 VoIP)。假设去往某一目标网络的报文走的第一条链路,当路由器又收到去往该网络的报文后,将从第二条链路上发送,依此类推(假设各条链路是等价的),如果链路代价不同的话,路由器将会按照代价比例来分配各链路的流量分配。例如,在一条高代价链路上发送一个报文,可能低代价的链路上就会发送三个报文。当路由器采用非默认交换方式时,即处于进程交换模式时,将采用这种负载均衡。通过使用此方式在不均衡的数据流量需要在多条路径上进行负载均衡是非常重要的。命令:R1(config-if)#ip load-sharing per-packet /基于数据包的负载均衡负载均衡和 Cisco CEF
16、1.CEF缺省的负载均衡方式是基于目的网络的负载均衡,IPv4缺省的交换模式是 CEF,Ipv6缺省的交换模式是Process Switching。2.CEF事先从路由表中获取信息并把信息存储在转发信息表中(FIB),当数据包需要这些信息时可以立即使用。FIB包括路由表中的所有目标网络,如果路由表稳定且不发生改变,那么 FIB也不会变化。3.CEF使用一个单独的数据表-邻接关系表,为 FIB的每个表象维护第二层转发信息。邻接关系表由第二层信息构成,例如,这些信息可以通过 ARP或 IPv6邻居发现协议学习到。4.FIB和邻接关系表是在数据包转发之前建立的。5.CEF在缺省的情况下是基于目标进行
17、负载均衡,这实际上是按照源目地址对进行负载均衡。所有发往特定目标地址的流量只要源地址相同都会从相同的接口出站,而不同源地址对的流量可能从下一个接口出站。6.基于数据包的负载均衡是交换 IPv4数据包的另一种方式。7.对于 IPv6,CEF 仅支持基于目标网络的负载均衡方式。8.基于数据包的负载均衡方式意味着在不同的链路上发送数据包,即使在路径等代价、目标相同的情况下也是样。如果路径代价不同,那么可能会在高、低代价路径上按照代价比例进行分流。9.基于数据包的负载均衡方式可以更加均匀地分布流量。但是数据包选择不同的路径去往目标网络会引起非顺序到达。对于某些应用来说,这是不能接受的,例如 VoIP.
18、10.为了确定 CEF功能是否在路由器上被全局开启,可以使用命令 show ip cef和 show ipv6 cef。如果缺省情况下CEF没有被打开,针对 IPv4可以使用命令 ip cef ,而对 IPv6来说,必须先打开 IPv4的CEF,然后使用命令ipv6 cef打开此功能。11.在 IPv4下,命令 ip load-sharing per-packet可以打开基于数据包的负载均衡功能,如果需要打开基于目标地址的负载均衡,可以使用 ip load-sharing per-destination命令。你可以使用命令show cef interface来检查使用了哪一种负载均衡模式,该命
19、令可以给出在这个接口上配置的 CEF信息。12.路由器通常根据入站接口和源与目的地址类型确定是否使用 CEF交换。对于考虑使用CEF的路由器来说,出站接口交换模式必须配置为 CEF,如果接口上配置了 CEF,那么 CEF将尝试交换数据包。否则,CEF 会把数据包交付给仅次于最好的可用交换方法去处理。对于 IPv4,这种方法是快速交换,而在 IPVv6中叫进程交换(Process Switching)。13.你可以使用命令 show cef interface interface和 show ipv6 cef interface detail来验证在接口上 CEF功能是否被打开。基于目标网络的负
20、载均衡和快速交换1.IOS在配置快速交换的出站接口上执行基于目标网络的负载均衡,某路由器上 IOS的缺省交换模式是快速交换。2.快速交换的工作方式如下:1当路由器为第一个去往特定目标的数据包进行交换处理时,路由器将执行路由表查询并选择出站接口;2然后获取有关被选接口的数据链路信息(如 ARP表),最后封装数据包并发送;3前面获取的路由和数据链路信息被输入到快速交换的高速缓冲中;4一旦去往相同目的地的后续数据包进入路由器,高速缓冲中的信息使路由器不必查找路由表和 ARP高速冲,就可以立即交换数据包。3.快速交换意味着所有去往指定目的地址的数据包都从相同的接口被发送出去,因此交换时间和处理器的占用
21、率会大大降低。当去往相同网络内不同主机的数据包进入路由器且还存在一条可选路由时,路由器会在另一条路径(非可选路由,也就是原来的那条)上发送数据包到目的地。因此路由器能够做得最好的就是基于目标网络的负载均衡。基于数据包的负载均衡和进程交换进程交换(Process Switching)即使对于每个数据包,路由器都要进行路由表查询和接口选择,然后再查询数据链路信息。因为每一个为数据包确定路由的进程都是相互独立的,所以不会强制去往相同目标网络的所有数据包使用相同的接口。正如许多设计选择一样,基于数据包的均分负载也是要付出代价的。这种方式虽然使流量的分布比前一种方式更均匀,但是快速交换的较低交换时间和处
22、理器占用的优点也随之丧失了。为了在接口上打开进程交换功能,可以在 IPv4下使用命令 no ip route-cache。对于 IPv6什么也不需要做,因为缺省情况下该功能是打开的。哪一种交换方法会被用到?1.IOS首先基于入站接口的配置和源与目的地址类型来决定交换模式;如果接口上配置了CEF,不管出站接口上配置是什么,数据包都会被 CEF交换;2.如果入站接口上没有配置 CEF,那么 IOS会处理并转发数据包,并根据出站接口的配置,后续的数据包或者被快速交换,或者被进程交换。3.如果入站接口的 CEF功能被打开,IOS 将只使用 CEF交换数据包。否则出站接口的配置会确定交换方法。注意,如果在出站接口上打开 CEF功能的同时又在入站接口上配置进程交换或快速交换,那么快速交换将被使用。4.只有在入站接口上配置了 CEF,它才会起作用。对于 IPv4,尽管出站接口上打开了 CEF功能,但是起作用的还是快速交换。5.有些时候后即使打开了 CEF,但是并没有使用 CEF交换数据包(例如访问列表的日志功能被打开和数据包将被记录下来) 。那么数据包将被送交仅次于最快的交换方法,例如 IPv4下使用快速交换,在IPv6下使用进程交换。