Citrix ADC

TCP优化

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

拥塞控制策略

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

比例率恢复(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快速打开

要使用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 set 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选项。

通过命令行方式配置HyStart。

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

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

例子:

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

通过使用GUI配置HyStart支持

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

TCP突发速率控制

研究发现,TCP控制机制会导致高速移动网络中的突发流量,对网络整体效率产生负面影响。由于移动网络条件,如拥塞或数据的第2层重传,TCP确认到达发送方触发突发传输。这些连续发送的数据包之间有很短的数据包间隔,称为TCP数据包爆发。为了克服流量突发,Citrix ADC设备使用TCP突发速率控制技术。这种技术在整个往返时间内均匀地将数据分散到网络中,这样数据就不会被发送到突发事件中。通过使用这种突发速率控制技术,您可以获得更好的吞吐量和更低的丢包率。

TCP突发速率控制是如何工作的

在Citrix ADC设备中,该技术在整个往返时间(RTT)期间均匀地分散数据包的传输。这是通过使用TCP堆栈和网络数据包调度器来实现的,该调度器标识为正在进行的TCP会话输出数据包的各种网络条件,以减少突发。

在发送方,发送方不是在收到确认后立即传输数据包,而是可以延迟传输数据包,以便按照调度器(动态配置)或TCP配置文件(固定配置)定义的速率将它们分散开来。

配置TCP突发速率控制

在相应的TCP配置文件中使用“TCP突发速率控制”选项,并设置突发速率控制参数。

使用命令行方式设置TCP突发速率控制

在命令提示符下,设置在新的或现有配置文件中配置以下TCP突发速率控制命令之一。

请注意:默认为“DISABLED”。

add tcpprofile  -burstRateControl已禁用|动态|固定设置tcpprofile  -burstRateControl已禁用|动态|固定不设置tcpprofile  -burstRateControl已禁用|动态|固定

在那里,

禁用-如果禁用突发速率控制,则Citrix ADC设备不执行突发管理,除了maxBurst设置。

固定-如果TCP突发速率控制是固定的,设备使用TCP配置文件中提到的TCP连接有效载荷发送速率值。

动态-如果突发速率控制为“动态”,则连接将根据各种网络条件进行调节,以减少TCP突发。该模式仅在TCP连接为ENDPOINT模式时有效。启用动态突发速率控制后,TCP配置文件的maxBurst参数不生效。

add tcpProfile profile profile -burstRateControl Disabled set tcpProfile profile profile -burstRateControl Dynamic unset tcpProfile profile -burstRateControl Fixed 

使用命令行方式配置TCP突发速率控制参数

在命令提示符下,输入:

set ns tcpprofile nstcp_default_profile -burstRateControl <突发速率控制类型> -tcprate  -rateqmax <队列中最大字节数> T1300-10-2> show ns tcpprofile nstcp_default_profile名称:nstcp_default_profile窗口缩放状态:ENABLED窗口缩放因子:8 SACK状态:ENABLED MSS: 1460 MaxBurst设置:30 MSS初始cwnd设置:16 MSS TCP delay - ack定时器:100毫秒Nagle算法:DISABLED最大顺序错误队列:15000 PUSH报文的立即ACK: ENABLED每MSS最大报文数:0每重传最大报文数:1 TCP最小RTO(毫秒):1000 TCP慢启动增量:1 TCP Buffer大小:8000000字节TCP Send Buffer大小:8000000字节TCP Syncookie: ENABLED更新KA探测的最后活动:ENABLED TCP flavor: BIC TCP动态接收缓冲:DISABLED keepalive探测:ENABLED启动keepalive探测前的连接空闲时间:900秒keepalive探测间隔:75秒在断开连接之前错过的最大keepalive探测数:3建立客户端连接:自动TCP分段Offload:自动TCP时间戳选项:DISABLED RST窗口衰减(欺骗保护):ENABLED接受带有最后确认序列号的RST: ENABLED SYN欺骗保护:ENABLED TCP显式拥塞通知:DISABLED Multipath TCP: DISABLED Multipath TCP在预先建立的子流上丢弃数据:DISABLED Multipath TCP fastopen:DISABLED多路径TCP会话超时时间:0秒DSACK: ENABLED ACK Aggregation: DISABLED FRTO: ENABLED TCP Max CWND: 4000000 bytes FACK: ENABLED TCP优化模式:ENDPOINT TCP Fastopen: DISABLED HYSTART: DISABLED TCP dupack阈值:3突发速率控制:动态TCP速率:0 TCP速率最大队列:0 

使用图形化界面配置TCP突发速率控制

  1. 导航到配置>系统>配置文件>,然后单击编辑修改TCP配置文件。
  2. 配置TCP配置文件页面,选择TCP突发控制下拉列表中的选项:
    1. BurstRateCntrl
    2. CreditBytePrms
    3. RateBytePerms
    4. RateSchedulerQ
  3. 点击好吧然后完成

对包装序列(PAWS)算法的保护

如果在默认的TCP配置文件中启用TCP时间戳选项,Citrix ADC设备将使用防止包装序列保护(PAWS)算法来识别和拒绝序列号在当前TCP连接的接收窗口内的旧数据包,因为序列已经“包装”(达到最大值并从0重新启动)。

如果网络拥塞延迟了一个非syn数据包,而您在数据包到达之前打开了一个新连接,序列号包装可能会导致新连接接受该数据包为有效数据包,从而导致数据损坏。但如果启用了TCP时间戳选项,则报文将被丢弃。

缺省情况下,TCP的时间戳选项处于关闭状态。如果启用它,该设备将数据包头中的TCP时间戳(SEG.TSval)与最近的时间戳(Ts.recent)值进行比较。如果凹陷。TSvalis equal to or greater than Ts.recent, the packet is processed. Otherwise, the appliance drops the packet and sends a corrective acknowledgment.

爪子是如何工作的

PAWS算法对一个同步连接的所有入站TCP报文进行如下处理:

  1. 如果赛格。TSval<Ts.recent:传入的数据包不被接受。PAWS发送一个确认(如RFC-793中指定的)并丢弃数据包。注意:发送ACK段是必要的,以保留TCP的检测和从半打开连接中恢复的机制。
  2. 如果数据包在窗口之外:PAWS拒绝数据包,就像在正常的TCP处理中一样。
  3. 如果赛格。TSval>Ts.recent:爪子接受数据包并处理它。
  4. 如果赛格。TSval<=Last.ACK.sent(到达段满足):爪子必须拷贝赛格。TSval价值Ts.recent(它是否复制到数据库中的Ts. Recent字段?)
  5. 如果数据包是顺序的:PAWS接受数据包。
  6. 如果报文不顺序:将该报文视为正常的窗口内无序TCP段。例如,它可能会排队等待稍后交付。
  7. 如果Ts.recentvalue闲置超过24天:表示有效期Ts.recent如果PAWS时间戳检查失败,则检查。如果发现Ts.recent值无效,则接受该段,并且爪子规则更新Ts.recent使用新段的TSval值。

使用命令行接口启用或禁用TCP时间戳

在命令提示符下,输入:

' set nstcpprofile nstcp_default_profile -TimeStamp (ENABLED | DISABLED) '

通过使用GUI启用或禁用TCP时间戳

导航到系统>配置文件>TCP概要,选择缺省的TCP配置文件,单击编辑,选择或清除TCP的时间戳复选框。

优化技术

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

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

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

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

有关使用订阅者属性执行TCP优化的信息,请参见基于策略的TCP配置文件

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

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

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

使用命令行接口进行配置

通过使用命令行接口启用AppQoE

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

  • 启用nsfeature appqe
  • 显示ns功能

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

在命令提示符处,键入以下AppQoE操作命令tcpprofiletobind选择。

add appqoe action [-priority ] [-respondWith (ACS | NS) [] [-altContentSvcName ] [-altContentPath ] [-maxConn ] [-delay ]] [-polqDepth ] [-priqDepth ] [-dosTrigExpression ] [-dosAction (SimpleResponse |HICResponse)] [-tcpprofiletobind ]显示应用程序操作

使用命令行接口配置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.131 (tcpOptimizationEnabled)。跟踪启用TCP优化的连接总数。
  2. 1.3.6.1.4.1.5951.4.1.1.46.132 (tcpOptimizationBypassed)。跟踪绕过TCP优化的连接总数。

动态接收缓冲器

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

尾部损失探测算法

重传超时(RTO)是在事务尾部丢失的段。如果存在应用程序延迟问题,特别是在短web事务中,就会发生RTO。为了在事务结束时恢复丢失的报文段,TCP使用了TLP (Tail loss Probe)算法。TLP是一个仅限发送方的算法。如果TCP连接在一定时间内没有收到任何确认,TLP将发送最后一个未确认的报文(loss probe)。如果在原始传输中出现尾丢失,则来自丢失探测器的确认将触发SACK或FACK恢复。

配置Tail Loss Probe

要使用TLP (Tail Loss Probe)算法,必须在TCP配置文件中启用TLP选项,并将该参数设置为符合该配置文件的安全要求的值。

通过命令行使能TLP

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

请注意

默认值为DISABLED。

add tcpprofile - taillossprobe ENABLED | DISABLED

set tcpprofile - taillossprobe ENABLED | DISABLED

unset tcpprofile - taillossprobe

例子:

添加tcpprofile nstcp_default_profile - taillossprobe

set tcpprofile nstcp_default_profile -taillossprobe Enabled

取消设置tcpprofile nstcp_default_profile -taillossprobe

通过Citrix ADC GUI配置Tail Loss Probe算法

  1. 导航到配置>系统>配置文件>,然后单击编辑修改TCP配置文件。
  2. 配置TCP配置文件页,选择尾部损失探测器复选框。
  3. 点击好吧然后完成