现在市场上的防火墙、utm产品从其架构上来说,大概分为三大类。
第一类是基于x86平台的,这种平台通常使用一颗或多颗主cpu来处理业务数据,网卡芯片和cpu通过pci总线来传输数据。
由于传统的32位pci总线频率为33mhz,所以,理论通讯速率为:132 mb bytes/s即:1056 mbits/s。单从pci通讯的速率上来说是可以满足千兆防火墙的需要,但实际上pci总线在x86系统中是共享的,也就是说,如果有两个网卡同时传输数据,那么每个网卡所能获得的速率就只有 66 mb bytes/s,即:528 mbits/s ,如果有四个网口同时传输数据,则每个网卡所能获得的速度只有16 mb bytes/s,即128mbit/s。
从总线速度来看基于32位pci总线的x86平台,做为百兆防火墙的方案是没有任何问题的。但x86平台的防火墙方案,数据从网卡到cpu之间的传输机制是靠“中断”来实现的,中断机制导致在有大量数据包的需要处理的情况下(如:64 bytes的小包,以下简称小包),x86平台的防火墙吞吐速率不高,大概在30%左右,并且cpu占用会很高。这是所有基于x86平台的防火墙所共同存在的问题。
因此,基于32位pci总线的x86平台是不能做为千兆防火墙使用的,因为32位pci总线的通讯速率不能达到千兆防火墙的要求。针对这个问题,intel提出了解决方案,可以把32位的pci总线升级到了pci-e ,即:pci-express,这样,pci-e 4x的总线的速度就可以达到 2000mb bytes/s,即:16gbits/s,并且pci-e各个pci设备之间互相独立不共享总线带宽,每个基于pci-e的网口可以使用的带宽为:2000mb bytes/s,即:16gbits/s,所以基于pci-e 4x的x86从系统带宽上来说,做为千兆防火墙是没有任何问题的。但是,基于pci-e的防火墙数据从网卡到cpu之间传输同样使用“中断”机制来传输数据,所以小包(64 bytes)的通过率仍然为:30-40%。
第二类,基于asic架构的防火墙、utm产品。
从上面对x86架构防火墙的分析中,我们了解到x86平台的防火墙其最大的缺点就是小包通速率低,只有30%-40%,造成这个问题的主要原因是因为x86平台的中断机制以及x86平台的防火墙所有数据都要经过主cpu处理。基于asci架构的防火墙从架构上改进了中断机制,数据从网卡收到以后,不经过主cpu处理,而是经过集成在系统中的一些芯片直接处理,由这些芯片来完成传统防火墙的功能,如:路由、nat、防火墙规则匹配等。这样数据不经过主cpu处理,不使用中断机制,理所当然,asic是做为功能简单的防火墙的最佳选择。
但随之而来的问题是,asic架构的防火墙是芯片一级的,所有的防火墙动作由芯片来处理。这些芯片的功能比较单一,要升级维护的开发周期比较长。尤其是作为多功能集成的utm网关来说,无法在芯片一级完成杀毒、垃圾邮件过滤、网络监控等比较复杂的功能,所以说,asic架构用来做功能简单的防火墙,是完全适用的,64 bytes的小包都可以达到线速。但asic架构做为utm就不是理想的选择,因为asic架构不可能把像网关杀毒、垃圾邮件过滤、网络监控等这些功能做到芯片一级去。
第三类,基于np架构的防火墙。
np架构实现的原理和asic类似,但升级、维护远远好于asic 架构。np架构在的每一个网口上都有一个网络处理器,即:npe,用来处理来自网口的数据。每个网络处理器上所运行的程序使用微码编程,其软件实现的难度比较大,开发周期比asic短,但比x86长。做为utm,由于np架构每个网口上的网络处理器性能不高,所以同样无法完成像网关杀毒、垃圾邮件、过滤、访问监控等复杂功能。
可能有人会问?asic 和 np为什么不可以把网关杀毒、和垃圾邮件过滤、访问监控等这些功能放在主cpu上来实现?这样不就可以做为utm方案使用了吗?这个问题问得很好,目前有很多基于np和asic的utm都是这样做的,但问题是asic和np架构的防火墙,其主cpu性能很低,如:intel基于ixp2400的千高端np方案,主cpu只有1.0g,处理能力还比不上celeron 1.0g,大家可以对照一下与其主频相当的x86平台的处理能力。所以如果以asic和np架构来实现一个utm网关,只能是做为低端的方案来使用,如桌面型的utm,而并不能做为中、高端的utm来使用。
言归正传,那什么才是utm网关合适的硬件方案呢?如果要在上述三种方案中选择一种的话,非x86架构莫属,当然,随着技术的发展,还有可能出现第四种防火墙的解决方案,可以做为实现utm网关的完美平台,但这是后话,值得我们期待。x86平台的主要缺陷在于64bytes的小包不能达到线速。但在实际用户中,除非是dos、ddos攻击才会产生大量的的小包,用户正常的应用不可能产生大量的小包。如果在基于x86平台的utm产品中,解决好dos和ddos攻击的问题,那么,x86平台就是utm网关理所当然的解决方案。对于这个问题,已经有产品开发了防dos、ddos攻击的功能,不但可以防御来自外网的dos攻击而且能够防御来自企业内部网络的dos、ddos攻击,这样我们的utm产品就解决了这个问题,使网关的稳定性和可靠性大大加强,在utm整体性能方面优越于np、asic。在遇到大规模的dos、ddos攻击时,也不会占用太多的cpu资源。
既然选择了x86做为utm网关的硬件平台,那么,还会存在一个问题:“如果utm网关处理的业务比较多,是否会影响网络速度?”,比较简单的答复是这样的:在cpu占用低于90%的时候,是不会影响网络速度的。因为utm网关虽然集成了众多的功能,并且要求主cpu来处理这所有的业务。但从业务的方面来看,是独立的,如:收发邮件的数据就不会被做为通过http上网的数据来处理,通过http上网的数据也不会被做为邮件的数据来处理,所以当一个数据包通过utm时,是分业务分流程处理的,在cpu占用90%以下时,cpu完全可以实时的处理这些业务。但如果cpu占用超过了90%,那怎么办?x86的平台是不是不能解决了?答案是否定的,对于这个问题,x86的平台的方案有两种解决方法:
方法一:支持多颗cpu。部分高端设备都配备了2颗以上cpu,更高端的设备甚至配备4颗cpu,这样cpu的处理能力也就不会成为瓶颈。
方法二:使用加速卡。比如把邮件过滤做成一个加速卡安全在系统中,在主cpu发现某个数据包为邮件数据时,把该数据包交给加速卡来完成,不占用主cpu资源。
综上所述可以得出一个结论,x86架构是utm网关理想的硬件平台,目前来看,没有其它平台可以代替。
注解:
np:网络处理器(network processor)
asic:专用集成电路(application specific integrated circuit)
百兆设备:指数据传输能力在 100mbits/s 以上的网络传输设备,即:10mbytes/s。
千兆设备:指数据传输能力在 1000mbits/s以上的网络传输设备,即:100mbytes/s