对于刚接触BIGIP的工程师来说,最容易混淆的就是PVA、Performance L4和Standard之间的关系。一个最典型的错误概念就是performance L4就是走PVA,Standard就是走CPU。实际上,我们在1500里面也能看到有performance L4这个Profile,但1500里面是没有PVA的,那怎么解释呢?

实际上,performance L4和Standard之间的区别是巨大的。我们知道,在一个TCP连接建立过程中,除了源IP、目的IP、源端口和目的端口外,还有其他的很多参数,比如Window size, Max Segment Size等参数。在performanceL4的情况下,BIGIP是按照纯四层的处理方式对流量进行处理,也就是基本上只看IP和端口部分的内容,然后在对数据包进行转发的时候,对四层信息进行处理,比如替换目的IP、目的端口,然后就直接进行转发了,对其他的TCP参数不进行任何的变动。之所以把performance L4和PVA关联起来,是因为只有在这种模式下,才能利用PVA芯片进行全部加速(full)或者辅助处理(Assist)。BIGIP的PVA只能工作在四层模式,对于七层的处理基本上没有什么帮助。在没有PVA的情况下,BIGIP也可以全部使用CPU进行四层处理。在纯4层处理的时候,通过抓包可以看到客户端和服务器端抓到数据包的sequencenumber都不会发生变化。

在各种不同的配置条件下,PVA工作的模式会发生变化的,比如我们通常采用的least connection算法,就会导致PVA进入assist工作模式,在这种情况下,连接的第一次分配是由CPU完成的,CPU需要计算那个member的连接数最小,然后把新建连接分配到连接数最小的member上去,然后后续的工作就交给PVA来执行了。在默认情况下,PVA的工作模式是自动降级的,也就是说即使在fast L4profile中配置了PVA acceleration是full状态,如果VS采用了leastconnection算法,系统则会自动将PVA降级到对这个VS的assist状态。PVA的实际工作状态可以在命令行下面用b virtual show看到。

需要注意的是如果VS工作在PVA accelerationfull或者assist模式下的时候,TCPdump是不能抓到完整的数据包访问流程的。解决的办法是在TCPdump中使用类似以下命令:

#tcpdump -i 1.1 host 192.168.1.1

而不是-i vlan_external

另外一个办法是在VS对应的fast L4 profile里面disable PVA acceleration。

而standard 模式是BIGIP TMOS的Full Proxy结构,在这种结构下,BIGIP对于每一个连接,建立了两个TCP堆栈,分别是client side和Server side。客户端发起的TCP连接,实际上是和BIGIP建立的连接,然后BIGIP才以客户端的源IP地址,和服务器端建立连接。这样,TCP连接就在BIGIP的层面上被中断为两段,BIGIP分别为两段TCP连接去维护TCP状态信息。对于客户端,BIIGP就是一个完整的Socket服务,对于服务器端,BIGIP就是一个标准的客户端socket连接。在抛开TCP的连接层面后,只有真正的数据包才在BIGIP的两个TCP堆栈之间进行转发。这也就是BIGIP可以完成很多非常复杂的处理功能的主要原因。基本上,只要开启了七层处理功能,如HTTP profile,就必须使VS工作在standard模式下。当系统工作在Standard模式下时,如果通过抓包,可以看到数据包在clientside 和server side的TCP sequence number都是不一样的。

Standard模式带来的一个好处就是对两端可以采用不同的TCP profile进行处理。比如对client端可以采用WAN-Optimized-TCP profile,而对服务器端采用LAN-optimized-TCPprofile。这个功能对于一些慢速的连接客户如CDMA、拨号或者访问路径比较恶劣的情况下能大大的提高客户端连接速度。

Standard模式带来的另外一个好处就是大大的提高了系统的安全性。由于使用full proxy模式,因此大部分的网络层***手段都无法通过BIGIP,比如我们常见的syn ***,只会导致BIGIP的clientside 连接数量增加,而不会导致server side有任何的反应。

那么,我们如果使用了performance L4模式,那如何来对基本的***进行防范呢?在8400以上平台,采用了PVA 10芯片,PVA 10内置了hardwaresyncookie功能,可以通过硬件计算syncookie,可以达到非常强的防syn ***性能。在6800以下的平台,如果用9.4以上的软件版本,则可以采用fastL4profile里面的software syn cookie来完成同样的工作。只是这时的syncookie计算由CPU来完成。