Citrix ADC

使用 TCP Nile 优化 TCP 性能

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

拥塞控制策略

传输控制协议 (TCP) 早已用于建立和管理 Internet 连接、处理传输错误以及顺利地将 Web 应用程序与客户端设备连接。但网络流量已变得更加难以控制,因为丢包并不仅仅依赖于网络中的拥塞,而且拥塞不一定会导致丢包。因此,为了测量拥塞,TCP 算法应该专注于数据包丢失和带宽。

NILE 算法

Citrix 系统已经开发了一种新的拥塞控制算法 NILE,一种 TCP 优化算法, 专为高速网络如 LTE、LTE 高级和 3G 设计。NILE 解决了衰落、随机或充血性损失、链路层再传输和载波聚合引起的独特挑战。

NILE 算法:

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

电信服务提供商可以在其 TCP 基础架构中使用 NILO 算法来执行以下操作:

  • 优化移动和长途网络 — 与标准 TCP 相比,NILE 算法实现了更高的吞吐量。此功能对于移动和长途网络尤为重要。
  • 减少应用程序感知的延迟并增强订阅者体验 — Nile 算法使用数据包丢失信息来确定是否应增加还是减少传输窗口大小,并使用队列延迟信息来确定增量或减少的大小。此传输窗口大小的动态设置可减少网络上的应用程序延迟。

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

在命令提示窗口中,键入以下内容:

set ns tcpProfile <name> [-flavor NILE]

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

  1. 导航到 系统 > 配置文件 > TCP 配置文件 ,然后单击 TCP 配置文件
  2. TCP Flavor 格下拉列表中,选择 NILE

示例:

set ns tcpProfile tcpprofile1 -flavor NILE

比例速率恢复算法

TCP 快速恢复机制可减少由数据包丢失造成的 Web 延迟。新的比例速率恢复 (PRR) 算法是一种快速恢复算法,用于在丢失恢复期间评估 TCP 数据。通过使用适合于拥塞控制算法选择的目标窗口的分数,在速率减半之后进行图案化。它最大限度地减少窗口调整,并且恢复结束时的实际窗口大小接近慢启动阈值 (ssthreshold)。

TCP 快速打开 (TFO)

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

TFO 的工作原理

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

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

  1. 如果客户端没有用于对自身进行身份验证的 TCP 快速打开 Cookie,则会将 SYN 数据包中的快速打开 Cookie 请求发送到 Citrix ADC 设备上的虚拟服务器。
  2. 如果在绑定到虚拟服务器的 TCP 配置文件中启用了 TFO 选项,设备将生成一个 cookie(通过在私有密钥下加密客户端的 IP 地址),并使用包含 TCP 选项字段中生成的快速打开 Cookie 的 SYN-ACK 响应客户端。
  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 超时参数设置为符合该配置文件的安全要求的值。

使用命令行启用或禁用 TFO

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

注意: 默认值为“禁用”。

add tcpprofile <TCP Profile Name> - tcpFastOpen ENABLED | DISABLED
set tcpprofile <TCP Profile Name> - tcpFastOpen ENABLED | DISABLED
unset tcpprofile <TCP Profile Name> - tcpFastOpen

示例:

add tcpprofile Profile1 – tcpFastOpen Set tcpprofile Profile1 – tcpFastOpen Enabled unset tcpprofile Profile1 – tcpFastOpen

在命令提示窗口中,键入:

set tcpparam –tcpfastOpenCookieTimeout <Timeout Value>

示例:

set tcpprofile –tcpfastOpenCookieTimeout 30secs

使用 GUI 配置 TCP 快速打开

  1. 导航到 配置 > 系统 > 配 置文件 >,然后单击 编辑 以修改 TCP 配置文件。
  2. 配置 TCP 配置文件 页上,选中 TCP 快速打开 复选框。
  3. 单击确定,然后单击完成

导航到配置 > 系统 > 设置 > 更改 TCP 参数,然后配置 TCP 参数页以设置 TCP 快速打开 Cookie 超时值。

TCP Hystart

新的 TCP 配置文件参数 hystart 启用 Hystart 算法,这是一种慢启动算法,可动态地确定要终止的安全点 (ss阈值)。它可以实现向避免拥塞过渡,而不会造成大量数据包丢失。默认情况下,此新参数处于禁用状态。

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

配置 TCP Hystart

要使用 Hystart 功能,请在相关 TCP 配置文件中启用立方 Hystart 选项。

使用命令行界面 (CLI) 配置 Hystart

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

add tcpprofile <profileName> -hystart ENABLED
set tcpprofile <profileName> -hystart ENABLED
unset tcprofile <profileName> -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,请执行以下操作:

在命令提示窗口中,键入以下命令以启用该功能并验证该功能已启用:

enable ns feature appqoe

show ns feature

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

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

绑定 TCP 配置文件:

add appqoe action <name> [-priority <priority>] [-respondWith ( ACS | NS ) [<CustomFile>] [-altContentSvcName <string>] [-altContentPath <string>] [-maxConn <positive_integer>] [-delay <usecs>]] [-polqDepth <positive_integer>] [-priqDepth <positive_integer>] [-dosTrigExpression <expression>] [-dosAction ( SimpleResponse |HICResponse )] [-tcpprofiletobind <string>]

show appqoe action

使用命令行界面配置 AppQoE 策略

在命令提示窗口中,键入:

add appqoe policy <name> -rule <expression> -action <string>

使用命令行界面将 AppQoE 策略绑定到负载平衡、缓存重定向或内容切换虚拟服务器

在命令提示窗口中,键入:

bind cs vserver cs1 -policyName <appqoe_policy_name> -priority <priority>
bind lb vserver <name> - policyName <appqoe_policy_name> -priority <priority>
bind cr vserver <name> -policyName <appqoe_policy_name> -priority <priority>

示例:

add ns tcpProfile tcp1 -WS ENABLED -SACK ENABLED -WSVal 8 -nagle ENABLED -maxBurst 30 -initialCwnd 16 -oooQSize 15000 -minRTO 500 -slowStartIncr 1 -bufferSize 4194304 -flavor BIC -KA ENABLED -sendBuffsize 4194304 -rstWindowAttenuate ENABLED -spoofSynDrop ENABLED -dsack enabled -frto ENABLED -maxcwnd 4000000 -fack ENABLED -tcpmode ENDPOINT

add appqoe action appact1 -priority HIGH -tcpprofile tcp1

add appqoe policy apppol1 -rule "client.ip.src.eq(10.102.71.31)" -action appact1

bind lb vserver lb2 -policyName apppol1 -priority 1 -gotoPriorityExpression END -type REQUEST

bind cs vserver cs1 -policyName apppol1 -priority 1 -gotoPriorityExpression END -type REQUEST

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

使用 GUI 启用 AppQoE

  1. 导航到系统 > 设置
  2. 在详细信息窗格中,单击配置高级功能
  3. 配置高级功能对话框中,选中 AppQoE 复选框。
  4. 单击确定

使用 GUI 配置 AppQoE 策略的步骤

  1. 导航至 AppExpert > AppQoE > 操作
  2. 在详细信息窗格中,执行以下操作之一:
  3. 要创建新操作,请单击添加
  4. 若要修改现有操作,请选择该操作,然后单击编辑
  5. 创建 AppQoE 操作配置 AppQoE 操作屏幕中,键入或选择参数的值。对话框的内容对应于“用于配置 AppQoE 操作的参数”中描述的参数,如下所示(星号表示必填参数):

    1. 名称- name
    2. 操作类型- respondWith
    3. 优先级 — priority
    4. 策略队列深度 — polqDepth
    5. 队列深度- priqDepth
    6. DOS 操作 — 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 设备可以在基于 SAK 的恢复期间处理客户端续约。

在 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 接收缓冲区大小。