Citrix ADC

使用TCP尼罗河优化TCP性能

TCP使用以下优化技术和拥塞控制策略(或算法)来避免数据传输中的网络拥塞。

拥塞控制策略

TCP (Transmission Control Protocol,传输控制协议)一直被用于建立和管理Internet连接,处理传输错误,使web应用程序与客户端设备顺利连接。但是网络流量变得更加难以控制,因为丢包不仅取决于网络中的拥塞,而且拥塞并不一定会导致丢包。因此,为了测量拥塞,TCP算法应该同时关注丢包和带宽。

尼罗河算法

Citrix Systems开发了一种新的拥塞控制算法NILE,这是一种专为LTE、LTE advanced和3G等高速网络设计的TCP优化算法。Nile解决了由衰落、随机或充血性损失、链路层重传和载波聚合引起的独特挑战。

NILE算法:

  • 基于往返时间测量来估计队列延迟。
  • 使用与测量的队列延迟成反比的拥塞窗口增加函数。这种方法比标准TCP方法接近网络拥塞点的速度要慢,并且减少了拥塞期间的数据包丢失。
  • 可以使用估计的队列延迟来区分网络上的随机损失和基于拥塞的损失。

电信服务提供商可以在其TCP基础设施中使用NILE算法:

  • 优化移动和长途网络——与标准TCP相比,NILE算法实现了更高的吞吐量。这个特性对于移动和长途网络尤其重要。
  • 减少应用程序感知延迟并增强用户体验——Nile算法使用丢包信息来确定传输窗口大小是应该增加还是减少,并使用排队延迟信息来确定增加或减少的大小。这种传输窗口大小的动态设置减少了网络上的应用程序延迟。

使用命令行界面配置NILE支持

在命令提示符下,输入以下命令:

set ns tcpProfile  [-flavor NILE] 

使用配置实用程序配置NILE支持

  1. 导航到系统>配置文件>TCP概要文件并点击TCP概要文件
  2. TCP的味道下拉列表,选择尼罗河

例子:

set ns tcpProfile tcpprofile1 -flavor NILE 

比例率恢复(PRR)算法

TCP快速恢复机制减少了丢包导致的web延迟。新的PRR (Proportional Rate Recovery)算法是一种在丢失恢复过程中对TCP数据进行评估的快速恢复算法。通过使用由拥塞控制算法选择的适合目标窗口的分数,它在速率减半之后进行图案化。它最小化了窗口调整,并且恢复结束时的实际窗口大小接近慢启动阈值(ssthresh)。

TCP快速开放(TFO)

TCP快速开放(TFO)是一种TCP机制,它可以在TCP初始握手期间实现客户端和服务器之间快速和安全的数据交换。此特性可作为绑定到Citrix ADC设备的虚拟服务器的TCP配置文件中的TCP选项使用。TFO使用Citrix ADC设备生成的TCP快速打开Cookie(一种安全Cookie)来验证和验证启动TFO连接到虚拟服务器的客户端。通过使用TFO机制,您可以将应用程序的网络延迟减少到一个完整往返所需的时间,这大大减少了短TCP传输中遇到的延迟。

TFO的工作原理

当客户端试图建立TFO连接时,它包含一个带有初始SYN段的TCP快速打开Cookie来对自己进行身份验证。如果身份验证成功,Citrix ADC设备上的虚拟服务器可以在SYN-ACK段中包含数据,即使它没有收到三次握手的最终ACK段。与普通TCP连接相比,这最多可以节省一次完整的往返,普通TCP连接需要三次握手才能交换任何数据。

客户机和后端服务器执行以下步骤,在初始TCP握手期间建立TFO连接并安全地交换数据。

  1. 如果客户端没有TCP快速打开Cookie来对自己进行身份验证,它将在SYN包中向Citrix ADC设备上的虚拟服务器发送快速打开Cookie请求。
  2. 如果在绑定到虚拟服务器的TCP配置文件中启用了TFO选项,则设备将生成一个cookie(通过在密钥下加密客户端的IP地址),并使用SYN-ACK响应客户端,该SYN-ACK在TCP选项字段中包含生成的Fast Open cookie。
  3. 客户机缓存cookie,以便将来与设备上的同一虚拟服务器进行TFO连接。
  4. 当客户端试图与同一虚拟服务器建立TFO连接时,它会发送SYN,其中包括缓存的快速打开Cookie(作为TCP选项)以及HTTP数据。
  5. Citrix ADC设备验证cookie,如果身份验证成功,服务器接受SYN包中的数据,并使用SYN- ack、TFO cookie和HTTP响应来确认事件。

注意:如果客户端身份验证失败,服务器将丢弃数据,并仅使用表示会话超时的SYN来确认事件。

  1. 在服务器端,如果在绑定到服务的TCP配置文件中启用了TFO选项,Citrix ADC设备将确定TCP快速打开Cookie是否存在于它试图连接的服务中。
  2. 如果TCP快速打开Cookie不存在,设备将在SYN包中发送一个Cookie请求。
  3. 当后端服务器发送Cookie时,设备将Cookie存储在服务器信息缓存中。
  4. 如果设备已经有给定目标IP对的cookie,它将用新的cookie替换旧的cookie。
  5. 如果当虚拟服务器尝试使用相同的SNIP地址重新连接到相同的后端服务器时,服务器信息缓存中有可用的cookie,则设备将SYN包中的数据与cookie合并,并将其发送到后端服务器。
  6. 后端服务器用数据和SYN来确认事件。

注意:如果服务器仅用SYN段确认事件,Citrix ADC设备在从原始数据包中删除SYN段和TCP选项后立即重新发送数据包。

配置TCP Fast Open

要使用TCP快速打开(TFO)特性,需要在相应的TCP配置文件中启用TCP快速打开选项,并将TFO Cookie Timeout参数设置为符合该配置文件的安全要求的值。

通过命令行启用或禁用TFO

在命令提示符下,键入以下命令之一,在新的或现有的配置文件中启用或禁用TFO。

注意:默认值为DISABLED。

add tcpprofile  - tcpFastOpen ENABLED | DISABLED set tcpprofile  - tcpFastOpen ENABLED | DISABLED unset tcpprofile  - tcpFastOpen 

例子:

add tcpprofile Profile1 - tcpFastOpen设置tcpprofile Profile1 - tcpFastOpen Enabled unset tcpprofile Profile1 - tcpFastOpen

在命令提示符下,输入:

set tcpparam -tcpfastOpenCookieTimeout <超时值> 

例子:

设置tcpprofile -tcpfastOpenCookieTimeout 30secs 

使用GUI方式配置TCP快速打开

  1. 导航到配置>系统>配置文件>,然后单击编辑修改TCP配置文件。
  2. 配置TCP配置文件页,选择TCP快速打开复选框。
  3. 点击好吧然后完成

导航到配置>系统>设置>修改TCP参数然后配置TCP参数设置TCP快速打开Cookie超时时间。

TCP Hystart

一个新的TCP配置文件参数hystart启用了hystart算法,这是一种慢启动算法,它动态地确定终止的安全点(ssresh)。它可以在没有大量数据包丢失的情况下过渡到拥塞避免。默认情况下,此新参数是禁用的。

如果检测到拥塞,Hystart进入拥塞回避阶段。启用它可以在具有高数据包丢失的高速网络中提供更好的吞吐量。该算法有助于在处理事务时保持接近最大带宽。因此,它可以提高吞吐量。

配置TCP Hystart

要使用Hystart特性,请在相关的TCP配置文件中启用Cubic Hystart选项。

使用CLI (command line interface)配置Hystart。

在命令提示符下,键入以下命令之一,在新的或现有的TCP配置文件中启用或禁用Hystart。

add tcpprofile  -hystart ENABLED set tcpprofile  -hystart ENABLED unset tcpprofile  -hystart 

例子:

add tcpprofile Profile1 - tcpFastOpen Set tcpprofile Profile1 - tcpFastOpen Enabled unset tcpprofile Profile1 - tcpFastOpen 

通过使用GUI配置Hystart支持

  1. 导航到配置>系统>配置文件>,单击编辑修改TCP配置文件。
  2. 配置TCP配置文件页,选择立方Hystart复选框。
  3. 点击好吧然后完成

优化技术

TCP使用以下优化技术和方法来优化流量控制。

基于策略的TCP配置文件选择

今天的网络流量比以往任何时候都更加多样化和带宽密集。随着流量的增加,服务质量(QoS)对TCP性能的影响也越来越大。为了增强QoS,您现在可以为不同类别的网络流量配置带有不同TCP配置文件的AppQoE策略。AppQoE策略对虚拟服务器的流量进行分类,以便关联针对特定类型流量(如3G、4G、LAN或WAN)优化的TCP配置文件。

要使用此特性,需要为每个TCP配置文件创建策略操作,将操作与AppQoE策略关联,并将策略绑定到负载平衡虚拟服务器。

配置基于策略的TCP配置文件选择

配置基于策略的TCP配置文件包括以下几个任务:

  • 使AppQoE。在配置TCP配置文件特性之前,必须先开启AppQoE特性。
  • 添加AppQoE操作。启用AppQoE特性后,需要配置带有TCP配置文件的AppQoE动作。
  • 配置基于AppQoE的TCP配置文件选择。要为不同类别的流量实现TCP配置文件选择,必须配置AppQoE策略,Citrix ADC设备可以使用这些策略区分连接,并将正确的AppQoE操作绑定到每个策略。
  • 绑定AppQoE策略到虚拟服务器。配置了AppQoE策略后,必须将它们绑定到一个或多个负载平衡、内容切换或缓存重定向虚拟服务器。

使用命令行接口进行配置

使用命令行接口启用AppQoE。

在命令提示符下,输入以下命令来启用该特性并验证它是否已启用:

启用ns feature appqe show ns feature 

在使用命令行界面创建AppQoE操作时绑定TCP配置文件

在命令提示符下,键入以下带tcpprofiletobind选项的AppQoE操作命令。

绑定TCP配置文件:

add appqoe action  [-priority ] [-respondWith (ACS | NS) [] [-altContentSvcName ] [-altContentPath ] [-maxConn ] [-delay ]] [-polqDepth ] [-priqDepth ] [-dosTrigExpression ] [-dosAction (SimpleResponse |HICResponse)] [-tcpprofiletobind ] show appqoe action 

使用命令行接口配置AppQoE策略

在命令提示符下,输入:

添加appqoe策略 -rule  -action  

通过命令行接口将AppQoE策略绑定到负载平衡、缓存重定向或内容交换虚拟服务器

在命令提示符下,输入:

bind cs vserver cs1 -policyName  -priority  bind lb vserver  -policyName  -priority  bind cr vserver  -policyName  -priority  

例子:

add ns tcpProfile tcp1 -WS ENABLED -SACK ENABLED -WSVal 8 -nagle ENABLED -maxBurst 30 -initialCwnd 16 - ooqsize 15000 -minRTO 500 -slowStartIncr 1 -bufferSize 4194304 -flavor BIC -KA ENABLED -sendBuffsize 4194304 - rstwindowwattenuate ENABLED - spofsyndrop ENABLED -dsack ENABLED -frto ENABLED -maxcwnd 4000000 -fack ENABLED -tcpmode ENDPOINT add appqe action appac1 -priority HIGH -tcpprofile tcp1 add appqe policy apppol1 -rule "client.ip.src.eq(10.102.71.31)"-action appact1绑定lb vserver lb2 -policyName apppol1 -priority 1 -gotoPriorityExpression END -type REQUEST绑定cs vserver cs1 -policyName apppol1 -priority 1 -gotoPriorityExpression END -type REQUEST 

使用GUI配置基于策略的TCP分析

通过使用GUI启用AppQoE

  1. 导航到系统>设置
  2. 在详细信息窗格中,单击配置高级特性
  3. 配置高级特性对话框中,选择AppQoE复选框。
  4. 点击好吧

通过使用GUI配置AppQoE策略

  1. 导航到App-Expert>AppQoE>行动
  2. 在详细信息窗格中,执行以下操作之一:
  3. 要创建新操作,请单击添加
  4. 要修改现有操作,请选择该操作,然后单击编辑
  5. 创建AppQoE操作或者是配置AppQoE Action筛选、键入或选择参数值。对话框中的内容对应“配置AppQoE动作参数”中的如下参数(星号表示必选参数)。

    1. Name-name
    2. 行动type-respondWith
    3. Priority-priority
    4. 策略队列深度- polqdepth
    5. 队列Depth-priqDepth
    6. DOS Action-dosAction
  6. 点击创建

使用GUI绑定AppQoE策略

  1. 导航到交通管理>负载平衡>虚拟服务器,选择服务器,单击编辑
  2. 政策节并单击(+)以绑定AppQoE策略。
  3. 政策滑块,执行以下操作:
    1. 从下拉列表中选择策略类型为AppQoE。
    2. 在下拉列表中选择流量类型。
  4. 政策约束力节,做以下工作:
    1. 点击创建一个新的AppQoE策略。
    2. 点击现有的政策,从下拉列表中选择AppQoE策略。
  5. 设置绑定优先级,单击绑定到虚拟服务器的策略。
  6. 点击完成

SACK块生成

当一个数据窗口丢失多个数据包时,TCP性能会降低。在这种情况下,选择性确认(SACK)机制结合选择性重复重传策略克服了这一限制。对于每个传入的乱序数据包,必须生成一个SACK块。

如果乱序报文正好在重组队列块中,则在重组队列块中插入报文信息,并设置完整块信息为SACK-0。如果无序的数据包不适合重组块,则将数据包作为SACK-0发送,并重复先前的SACK块。如果乱序数据包是重复的,并且数据包信息设置为SACK-0,则D-SACK该块。

注意:如果一个数据包是一个已确认的数据包,或者是一个已经收到的乱序数据包,则将其视为D-SACK。

客户违约

Citrix ADC设备可以在基于SACK的恢复期间处理客户端违约。

在PCB上标记end_point的内存检查不考虑总可用内存

在Citrix ADC设备中,如果将内存使用阈值设置为75%而不是使用总可用内存,则会导致新的TCP连接绕过TCP优化。

由于丢失SACK块而导致不必要的重传

在非端点模式下,当您发送dupack时,如果有几个乱序数据包丢失了SACK块,则会触发来自服务器的额外重传。

SNMP的连接数因为过载而绕过优化

以下SNMP id已添加到Citrix ADC设备中,以跟踪由于过载而绕过TCP优化的连接数量。

  1. 1.3.6.1.4.1.5951.4.1.1.46.13 (tcpOptimizationEnabled)。跟踪启用TCP优化的连接总数。
  2. 1.3.6.1.4.1.5951.4.1.1.46.132 (tcpOptimizationBypassed)。跟踪绕过TCP优化的连接总数。

动态接收缓冲区

为了最大化TCP性能,Citrix ADC设备现在可以动态调整TCP接收缓冲区的大小。