Cisco路由器转发数据包时常用的五种交换方式进程交换(Process Switching)这是一种最基本的交换模式,在这种模式下,一条数据流(Flow)中的第一个包(Packet)将被置入系统缓存(System Buffer)。
其目的地址将会拿到路由表中去查询比对,路由器的处理器(CPU or Processer)同时将进行CRC校验,检查包是否正确。
然后数据包的二层MAC地址将会被重写,替换为下一跳接口的MAC地址。
对这条数据流(Flow)中的第2个、第3个数据包……将会继续这样相同的操作,包括查询路由表、重写MAC地址,CRC校验等。
这种方式无疑是延迟最大的,因为它要利用System 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 //启用进程交换(禁用快速交换)注意:命令debug ip packet仅允许观察进程交换的数据包,将启用进程交换,所有数据包都被送至进程记录,CEF交换、快速交换等的数据包将不被显示出来。
快速交换(Fash Switching)/路由缓存交换(Route-Cache Switching)快速交换要优于Process Switching,它采用了路由缓存(Route Cache)来存储关于某条数据流(Flow)的特定信息,当然会包括诸如目的MAC地址,目的接口等内容。
这时我们只需要对一条数据流(Flow)中的第一个包做Process Switching,并把信息存入Cache,所有后续数据包,可以不必再中断System 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 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来讲,都是比较快的。
这两种模式一般只在思科高端设备上有所应用,比如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条数据流(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,而是将整个路由表、拓扑表,以及所有的下一跳地址、MAC地址全部进行“预存”,只要路由表、拓扑表中存在的条目,无论是否有数据请求发往其目的地址,都会提前预读取,预设置缓存。
具体来说它是通过全用转发信息表(FIB)和邻接表来实现的,它事先从路由表中获取信息并把信息存储在转发信息库(FIB)中,当任何数据包需要这些信息时可以立即使用。
FIB包括路由表中的所有目标网络,它们可以随着网络拓扑的变化而调整。
CEF使用一个单独的数据表--邻接关系表,为FIB的每个表项维护第二层转发信息。
邻接关系表由第二层信息构成,(这些信息可以由IP、ARP或IPv6邻居发现协议学习到)。
FIB和邻接表是在数据包转发之前建立的,当有新的数据请求发送时,就不需要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.可以通过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特定接口详细信息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 Sharing):是将报文分布到不同度量的多条路径上。
各条路径上分布的流量和路由开销成反比。
开销越低的路径分配的流量越多。
说明:只有EIGRP支持非等价负载均衡,最多支持对6条路径的非等价负载均衡;可以通过差异变量(Variance)来确定哪些路由在非等价负载均衡中是可以使用的;并且可以通过设置最大路径数决定使用某几条链路。
负载均衡的两种方式:基于目标网络的负载均衡 ip load-sharing per-destination;基于数据包的负载均衡 ip load-sharing per-packet。
基于目标网络的负载均衡ip load-sharing per-destination基于目标网络的负载均衡允许路由器使用多条路径来负载均衡,它是根据目标网络中的目的地址分配负载量的。
并且它可以确保数据包总是使用相同的路径,并按照它们发送的顺序到达目的地址。
这种方式的负载均衡最适用于需要数据包按照某种顺序到达的应用。
例如,有两个网络A、B,A-B间存在两条路径,那么从A去往B地的第一个目标的报文走第一条路径,去往B的第二个目标的报文走第二条路径,去B的第三个目标的报文走第一条路径,依此类推……随着目标网络地址数量的增加,负载均衡会变得更加有效。
大多情况下路由器都采用这种负载均衡方式,并且它也是Cisco CEF使用的缺省负载均衡方式。
基于目标网络的负载均衡和Cisco CEF:准确来讲,CEF是按照源、目的地址对(Hash出一个值)进行负载均衡。
相同源、目的地址对的流量都会从同一个接口出站,而不同源、目的地址对的流量可能会从下一个接口出站。
命令:R1(config-if)#ip load-sharing per-destination //基于目标网络的负载均衡基于数据包的负载均衡ip load-sharing per-packet使用基于数据包的负载均衡的路由器可以在多条链路上连续发送数据包,而不用考虑主机或用户的具体情况。
这种负载均衡采用轮转机制来确定每个数据包走哪条路径到达目的地址。
缺点是不能确保每一个数据包遵循相同的路径,将导致数据包无序到达。
这对某些应用来说是不能接受的(如VoIP)。
假设去往某一目标网络的报文走的第一条链路,当路由器又收到去往该网络的报文后,将从第二条链路上发送,依此类推……(假设各条链路是等价的),如果链路代价不同的话,路由器将会按照代价比例来分配各链路的流量分配。
例如,在一条高代价链路上发送一个报文,可能低代价的链路上就会发送三个报文。
当路由器采用非默认交换方式时,即处于进程交换模式时,将采用这种负载均衡。
通过使用此方式在不均衡的数据流量需要在多条路径上进行负载均衡是非常重要的。
命令:R1(config-if)#ip load-sharing per-packet //基于数据包的负载均衡负载均衡和Cisco CEF1.CEF缺省的负载均衡方式是基于目的网络的负载均衡,IPv4缺省的交换模式是CEF,Ipv6缺省的交换模式是Process Switching。