Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1424942
  • 博文数量: 269
  • 博客积分: 3602
  • 博客等级: 中校
  • 技术积分: 4536
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-17 21:13
文章分类

全部博文(269)

文章存档

2014年(8)

2013年(139)

2012年(122)

分类: 系统运维

2013-02-18 15:50:05

其实这个题目起的有点不太对题,主要的内容还是介绍一下器的几种包的。
注:参照DOCUMENT Cisco NO.
1、介绍
在不同的思科路由器和思科IOS中有多种多样的交换方法。那么那个是最适合你网络的方法呢?他们是怎么工作的呢?下面我尝试着去解释一下将要讲述的每一种 交换方式,通过讲解希望能够让大家能够理解怎么选择一个对于你的网络适合的交换方式。

首先,我们先来看一下包转发的过程。一般来说对于一个路由器会有以下三步:
1、查看这个包的目标地址是否可达
2、决定目标地址的下一跳和接口。
3、改写MAC的包头使得它可以成功的到达下一跳。(同时也使这个包可以回来,当然还有能确保收到ICMP etc.)
二、包转发的方法
过程交换
过程交换是各种交换方式中最基础的方式,它可以运行在每一个IOS版本,各种平台,各种流量的交换。
下面来解释一下过程交换的具体步骤

1、接口进程(processor)首先在网络中发现数据包,然后把它传递给“input/output memory”(输入输出内存)
2、接口处理器创建一个接到数据的中断。在这个中断过程中,中央处理器决定这个包的类型(一般是IP),如果需要的话就把它拷贝到内存中 (processor memory)。最后,处理器把这个包放在一个适当的进入队列中(process’ input queue),同时中断取消。
3、在下一次调度程序开始之后,会把这个进程放在IN_PUT队列中,等待调度。
4、当IP_INPUT进程启动,它开始从RIB(路由表)中决定下一跳和外出接口,然后查找ARP缓存找 到下一跳的MAC地址(IPV6就不需要这个过程了)
5、IP_INPUT进程重写包的MAC地址,然后把包的放在合适端口的外出队列中
6、把包从外出端口的外出队列中拷贝到外出端口的传输队列(QOS就是在这个时候发挥作用的)
7、外出接口处理器在外出队列中发现这个包然后把这个包传输到网络当中。

Interrupt Context Switching


这是第二种“首要”的交换方式,与刚才介绍的第一种交换方法有所不同,先来看步骤:

1、接口处理器发现网络中的包,然后把包传递给input/output memory
2、接口处理器创建一个接收中断。在这个中断的过程中,中央处理器决定包的类型(假定是IP类型),然后开始交换这个包
3、处理器开始搜索路由缓存来决定是否这个包的目的地址可达,外出接口是什么以及这个包需要怎么改写MAC 才能可达下一跳。
4、然后把包拷贝到外出端口的传输队列或者外出队列(这个根据不同厂商的不同而不同)。这时接收中断取消,处理器为下一次处理做准备
5、外出接口处理器发现数据包在传输队列,然后把包传输到网络中。

如果你细心一点的话会发现两者之间有两个主要的不同点:
1 Interrupt Context Switching 进程不需要经过调度程序就可以启动,采用按需启用的方 式。这样就增加了处理速度,至于为什么可以这么做,这,以现在我的只是水平还是不太清楚。(算法的改进?硬件水平的提高?都有可能,我怀疑是增加了多线程 处理的功能,至于是通过硬件实现还是软件 实现也是未知。要不就类似与以太网那种强夺式的实现?我能想出无数种可能。。。)
2 Interrupt Context Switching 查找部分是对所有的信息都先进行缓存查找。

现在有个问题: “缓存里有什么?怎么构建的缓存?”
目前有3个不同的答案,也可以说是有3中不同的解决方法(注意这些方法基于Interrupt Context Switching):
快速转发(Fast Switching)
适宜转发(Optimum Switching)
CEF (Cisco Express Forwarding)

快速转发
快速转发保存转发信息和需要改写的MAC地址。另外为了达到快速查找的效果使用了二进制树的方式:

这个存储二进制树的二叉树最多有32层,其中的数据包含了目标地址,下一跳,MAC地址等信息
下面简单介绍一下如何从这个二叉树中查找数字。举例来说,如果要查找数字4,它的二进制表示为100,从根出发,从左到右查找(不要遍历中间节点),首位 为1,所以选择root的右子树,次位为0,选择左子树,以此类推就可以找到100了。
快速转发的特征
由于使用了二进制树的形式,所以就有了快速转发的特征
1由于路由表和快速转发缓存没有关联,所以缓存中的条目必须是运行过进程转发的,也就是说快速转发缓存是根据进程转发而建立的。
2快速转发缓存中MAC 信息由于跟ARP缓存没有关联,当ARP表改变的时候,一部分快算转发缓存中的条目必然失效
3在快速转发缓存中无法从一个条目指向另外一个条目,所以也就无法进行路由的递归查询。(在后面介绍的CEF就可以,具体解释见后文)
老化快速转发条目
这个就不多说了,就是为了使得快速转发缓存中的条目和ARP表或者是路由表中的信息保持同步。
负载均衡
快速转发只能基于目标地址的负载均衡

Optimum Switching

适宜转发跟快速转发的最大不同点就是使用了multiway tree。这样可以减少查找前缀的步骤。由于每个树都有256个分支,对于查找MAC地址来说,最多只需要查找四次树就能找任何目标地址。对于更短的前缀 长度来说,只需要1到3次查找就可以了。
除了这一点外,适宜转发和快速转发基本是一样的,在此不再赘述。

Cisco Express Forwarding(CEF)
CEF也使用叫做256 way的数据存储结构,但是这种结构并不是树形结构而是使用了TRIE结构。
TRIE结构的含义就是把搜索的真实信息不放在同一数据结构中而是把它放在了一个独立的数据结构中,这个TRIE仅仅是作为一个“指针”指向数据。
说的更通俗一点,转发的接口信息,MAC地址,这些信息不是放在树的本身,而是把这些数据单独存放在一个独立的“区域”,这个“区域”就叫做“邻接表”

这种把存放在cef表中的可达性信息和存放在“邻接表”的转发信息分开放置有什么好处呢?
1邻接表和cef表可以单独建立。这样的好处就是不用等到有数据包进来的时候再建立缓存,而是提前做好与路由表和ARP缓存的同步。
2对于MAC重写通常转发一个不存在于缓存条目中的数据包,所以对于MAC的改变不需要失效缓存条目。
3由于采用“指针”式的访问方式使得路由的递归操作成为可能
负载均衡
由于CEF使用了CEF表和邻接表,所以能够提供更加灵活方便的负载均衡方案
一个负载均衡表插入在了CEF表和邻接表之间,如图所示:
根据图中所示,处理器可以把目标地址和源地址根据哈希算法得出一个数列,与负载均衡表相对应,而负载均衡表的条目可以对应不同的邻接表,这样就可以做到多 种负载均衡。

对于CEF还有一个附加的功能,不过由于这个功能一般用在7500以上的路由,我也就不多说了,下面简单的提一下。
中心式CEF和分布式CEF,两者的最大区别想必从名字也能看出来,中心式的CEF在构建FIB表和邻接表的时候是通过中央处理器建立的,而分布式的 CEF在每个接口上都有一个“LINE CARD”,也就是说每个接口独自维护一个FIB和邻接表,这样做的好处就是能大量的节省CPU的资源,加快处理速度,降低产生瓶颈的可能,但是缺点也是 显而易见的,过高的费用不是谁都承受的起的。
这让我想起了做安全的防火墙问题,现在大部分厂家都在推广高端防火墙,说什么保证安全万无一失,所谓好钢用在刀刃上,这样的大规模投入真的有用?你的数据 就真的值防火墙的钱?没有必要的,用个LINUX做的软件防火墙有时候就足够了,说多了。。。。就此打住
还要说一句,不买最贵的,要买最适合的。

那么,现在还是回到我的题目:如何在网络中选择最好的路由包交换方法?
看了上面的文章,估计大家都知道应该选什么了,采用Interrupt Context Switching交换,用 CEF转发的最好。其实来说,现在谈的是技术所以要介绍的全一些,而真正购买的时候大部分用的都是CEF了,除非是那种古老并且低端的。
阅读(1495) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~