现在市场上的防火墙、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