使用 TCP Nile 优化 TCP 性能
TCP 使用以下优化技术和拥塞控制策略(或算法)来避免数据传输中的网络拥塞。
拥塞控制策略
传输控制协议 (TCP) 长期以来一直用于建立和管理 Internet 连接、处理传输错误以及平稳地将 Web 应用程序与客户端设备连接。但是网络流量变得越来越难以控制,因为数据包丢失不仅取决于网络的拥塞,而且拥塞不一定会导致数据包丢失。因此,要测量拥塞,TCP 算法应同时关注数据包丢失和带宽。
NILE算法
Citrix Systems 开发了一种新的拥塞控制算法 NILE,这是一种 TCP 优化算法,专为 LTE、LTE advanced 和 3G 等高速网络而设计。Nile 解决了因衰退、随机或拥塞性损失、链路层重传和载波聚合而造成的独特挑战。
NILE 算法:
- 根据往返时间测量值估算队列延迟。
- 使用与测得的队列延迟成反比的拥塞窗口增加函数。这种方法比标准 TCP 方法更慢地接近网络拥塞点,并减少了拥塞期间的数据包丢失。
- 通过使用估计的队列延迟,可以区分网络上的随机丢失和基于拥塞的丢失。
电信服务提供商可以在其 TCP 基础设施中使用 NILE 算法来:
- 优化移动和长途网络— 与标准 TCP 相比,NILE 算法实现了更高的吞吐量。此功能对于移动和长距离网络尤其重要。
- 减少应用程序感知延迟并增强订户体验 — Nile 算法使用丢包信息来确定应增加还是减少传输窗口大小,并使用排队延迟信息来确定增量或减少的大小。这种传输窗口大小的动态设置减少了网络上的应用程序延迟。
使用命令行界面配置 NILE 支持
在命令提示符处,键入以下内容:
set ns tcpProfile <name> [-flavor NILE]
<!--NeedCopy-->
使用配置实用程序配置 NILE 支持
- 导航到 系统 > 配置文件 > TCP 配置文件 ,然后单击 TCP 配置文件。
- 从 TCP 口味 下拉列表中,选择 NILE。
示例:
set ns tcpProfile tcpprofile1 -flavor NILE
<!--NeedCopy-->
比例速率恢复 (PRR) 算法
TCP 快速恢复机制减少了数据包丢失导致的 Web 延迟。新的比例速率恢复 (PRR) 算法是一种快速恢复算法,可在损失恢复期间评估 TCP 数据。它以 Rate-Halving 为模式,使用与拥塞控制算法选择的目标窗口相适应的分数。它最大限度地减少了窗口调整,恢复结束时的实际窗口大小接近慢启动阈值 (ssthresh)。
TCP 快速打开 (TFO)
TCP 快速打开 (TFO) 是一种 TCP 机制,它允许在 TCP 的初次握手期间在客户端和服务器之间进行快速、安全的数据交换。此功能在绑定到 NetScaler 设备的虚拟服务器的 TCP 配置文件中作为 TCP 选项提供。TFO 使用 NetScaler 设备生成的 TCP 快速打开 Cookie(一种安全 cookie)来验证和验证启动 TFO 与虚拟服务器连接的客户端。通过使用 TFO 机制,您可以将应用程序的网络延迟减少一次完整往返所需的时间,从而显著减少短期 TCP 传输时遇到的延迟。
TFO 的工作原理
当客户端尝试建立 TFO 连接时,它会包含一个带有初始 SYN 分段的 TCP Fast Open Cookie,用于进行自我验证。如果身份验证成功,NetScaler 设备上的虚拟服务器可以在 SYN-ACK 分段中包含数据,即使它尚未收到三向握手的最后 ACK 分段。与普通的 TCP 连接相比,这最多可以节省一次完整的往返时间,后者需要在交换任何数据之前进行三次握手。
在初始 TCP 握手期间,客户端和后端服务器执行以下步骤以建立 TFO 连接并安全地交换数据。
- 如果客户端没有用于验证自己身份的 TCP 快速打开 Cookie,它会在 SYN 数据包中向 NetScaler 设备上的虚拟服务器发送快速打开 Cookie 请求。
- 如果在绑定到虚拟服务器的 TCP 配置文件中启用 TFO 选项,则设备会生成 cookie(通过在密钥下加密客户机的 IP 地址)并使用 SYN-ACK 响应客户端,该确认在 TCP 选项字段中包含生成的 Fast Open Cookie。
- 客户端缓存 Cookie,以备将来与设备上同一虚拟服务器的 TFO 连接。
- 当客户端尝试与同一个虚拟服务器建立 TFO 连接时,它会发送包含缓存的 Fast Open Cookie(作为 TCP 选项)以及 HTTP 数据的 SYN。
- NetScaler 设备会验证 Cookie,如果身份验证成功,服务器将接受 SYN 数据包中的数据,并使用 SYN-ACK、TFO Cookie 和 HTTP 响应确认事件。
注意: 如果客户端身份验证失败,服务器将删除数据并仅使用表示会话超时的 SYN 来确认事件。
- 在服务器端,如果在绑定到服务的 TCP 配置文件中启用了 TFO 选项,NetScaler 设备将确定其尝试连接的服务中是否存在 TCP Fast Open Cookie。
- 如果 TCP 快速打开 Cookie 不存在,则设备会在 SYN 数据包中发送 Cookie 请求。
- 当后端服务器发送 Cookie 时,设备会将 Cookie 存储在服务器信息缓存中。
- 如果设备已经有给定目标 IP 对的 cookie,它会用新的 cookie 替换旧的 cookie。
- 如果当虚拟服务器尝试使用相同的 SNIP 地址重新连接到同一后端服务器时,服务器信息缓存中有 Cookie,则设备会将 SYN 数据包中的数据与 Cookie 合并,并将其发送到后端服务器。
- 后端服务器使用数据和 SYN 来确认事件。
注意: 如果服务器仅使用 SYN 分段确认事件,则从原始数据包中删除 SYN 分段和 TCP 选项后,NetScaler 设备会立即重新发送数据包。
配置 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
<!--NeedCopy-->
示例:
add tcpprofile Profile1 – tcpFastOpen Set tcpprofile Profile1 – tcpFastOpen Enabled unset tcpprofile Profile1 – tcpFastOpen
使用命令行界面设置 TCP Fast Open cookie 超时值
在命令提示符下,键入:
set tcpparam –tcpfastOpenCookieTimeout <Timeout Value>
<!--NeedCopy-->
示例:
set tcpprofile –tcpfastOpenCookieTimeout 30secs
<!--NeedCopy-->
使用 GUI 配置 TCP 快速打开
- 导航到“配置”>“系统”>“配置文件”>,然后单击“编辑”修改 TCP 配置文件。
- 在“配置 TCP 配置文件”页面上,选中 TCP 快速打开 复选框。
- 单击“确定”,然后单击“完成”。
使用 GUI 配置 TCP 快速 Cookie 超时值
导航到“配置”>“系统”>“设置”>“更改 TCP 参数”,然后导航到“配置 TCP 参数”页面,设置 TCP 快速打开 Cookie 超时值。
TCP Hystar
新的 TCP 配置文件参数 hystart 启用了 Hystart 算法,这是一种慢启动算法,可以动态确定终止的安全点 (ssthresh)。它可以在不丢失大量数据包的情况下过渡到拥塞避免。默认情况下,此新参数处于禁用状态。
如果检测到拥塞,Hystart 将进入拥塞避免阶段。启用它可以在丢包率高的高速网络中提供更好的吞吐量。该算法有助于在处理交易时保持接近最大带宽。因此,它可以提高吞吐量。
配置 TCP Hystart
要使用 Hystart 功能,请在相关 TCP 配置文件中启用 Cubic Hystart 选项。
使用命令行界面 (CLI) 配置 Hystart
在命令提示符处,键入以下命令之一,在新的或现有 TCP 配置文件中启用或禁用 Hystart。
add tcpprofile <profileName> -hystart ENABLED
set tcpprofile <profileName> -hystart ENABLED
unset tcprofile <profileName> -hystart
<!--NeedCopy-->
示例:
add tcpprofile Profile1 – tcpFastOpen
Set tcpprofile Profile1 – tcpFastOpen Enabled
unset tcpprofile Profile1 – tcpFastOpen
<!--NeedCopy-->
使用 GUI 配置 Hystart 支持
- 导航到“配置”>“系统”>“配置文件”>,然后单击“编辑”修改 TCP 配置文件。
- 在“配置 TCP 配置文件”页面上,选中 Cubic Hystart 复选框。
- 单击“确定”,然后单击“完成”。
优化技巧
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 策略,NetScaler 设备可以使用该策略来区分连接并将正确的 AppQoE 操作绑定到每个策略。
- 将 AppQoE 策略绑定到虚拟服务器。配置 AppQoE 策略后,必须将其绑定到一个或多个负载平衡、内容交换或缓存重定向虚拟服务器。
使用命令行接口配置
要使用命令行界面启用 AppQoE,请执行以下操作:
在命令提示符处,键入以下命令以启用该功能并验证其是否已启用:
enable ns feature appqoe
show ns feature
<!--NeedCopy-->
在使用命令行界面创建 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
<!--NeedCopy-->
使用命令行界面配置 AppQoE 策略
在命令提示符下,键入:
add appqoe policy <name> -rule <expression> -action <string>
<!--NeedCopy-->
使用命令行界面将 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>
<!--NeedCopy-->
示例:
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
<!--NeedCopy-->
使用 GUI 配置基于策略的 TCP 分析
使用 GUI 启用 AppQoE
- 导航到“系统”>“设置”。
- 在详细信息窗格中,单击“配置高级功能”。
- 在“配置高级功能”对话框中,选中 AppQoE 复选框。
- 单击确定。
使用 GUI 配置 AppQoE 策略
- 导航到 App-Expert > AppQoE > 操作。
- 在详细信息窗格中,执行以下操作之一:
- 要创建新操作,请单击“添加”。
- 要修改现有操作,请选择该操作,然后单击 编辑。
-
在“创建 AppQoE 操作”或“配置 AppQoE 操作”屏幕中,键入或选择参数值。对话框的内容与“配置 AppQoE 操作的参数”中描述的参数相对应,如下所示(星号表示必填参数):
- 名称- name
- 操作类型 - respondWith
- 优先级-优先级
- 策略队列深度—polqDepth
- 队列深度— priqDepth
- DOS 操作—dosAction
- 单击创建。
使用 GUI 绑定 AppQoE 策略
- 导航到“流量管理”>“负载平衡”>“虚拟服务器”,选择服务器,然后单击“编辑”。
- 在“策略”部分中,单击 (+) 以绑定 AppQoE 策略。
- 在“策略”滑块中,执行以下操作:
- 从下拉列表中选择策略类型为 AppQoE。
- 从下拉列表中选择流量类型。
- 在“策略绑定”部分中,执行以下操作:
- 单击“新建”创建新的 AppQoE 策略。
- 单击“现有策略”从下拉列表中选择 AppQoE 策略。
- 设置绑定优先级,然后单击“绑定 到虚拟服务器的策略”。
- 单击 Done(完成)。
SACK 区块生成
当在一个数据窗口中丢失多个数据包时,TCP 性能会降低。在这种情况下,选择性确认 (SACK) 机制与选择性重复重传策略相结合可以克服这种限制。对于每个传入的无序数据包,都必须生成一个 SACK 区块。
如果无序数据包适合重组队列块,则在块中插入数据包信息,并将完整的区块信息设置为 SACK-0。如果无序数据包不适合重组块,请以 SACK-0 的身份发送数据包并重复之前的 SACK 区块。如果无序数据包是重复数据包且数据包信息设置为 SACK-0,则对方块进行 D-SACK。
注意: 如果数据包是已确认的数据包或已收到的乱序数据包,则将其视为 D-SACK。
客户违约
在基于 SACK 的恢复期间,NetScaler 设备可以处理客户端违约。
对 PCB 上标记 end_point 的内存检查未考虑可用内存总量
在 NetScaler 设备中,如果将内存使用阈值设置为 75%,而不是使用总可用内存,则会导致新的 TCP 连接绕过 TCP 优化。
由于缺少 SACK 区块而导致不必要的重传
在非端点模式下,当您发送 DUPACKS 时,如果少量无序数据包缺少 SACK 块,则会触发来自服务器的额外重新传输。
由于过载,连接数的 SNMP 绕过了优化
以下 SNMP ID 已添加到 NetScaler 设备中,用于跟踪因过载而绕过 TCP 优化的连接数量。
- 1.3.6.1.4.1.5951.4.1.1.46.13(启用 tcpoPtimization)。跟踪通过 TCP 优化启用的连接总数。
- 1.3.6.1.4.1.5951.4.1.1.46.132 (tcpOptimizationBypassed)。要跟踪连接总数,请绕过 TCP 优化。
动态接收缓冲区
为了最大限度地提高 TCP 性能,NetScaler 设备现在可以动态调整 TCP 接收缓冲区大小。