ADC

TCP 优化配置

在配置 TCP 优化之前,请在 NetScaler 设备上应用以下基本配置设置:

初始配置:

enable ns feature LB IPv6PT
enable ns mode FR L3 USIP MBF Edge USNIP PMTUD
disable ns feature SP
disable ns mode TCPB
set lb parameter -preferDirectRoute NO
set lb parameter -vServerSpecificMac ENABLED
set l4param -l2ConnMethod Vlan
set rsskeytype -rsstype SYMMETRIC
set ns param -useproxyport DISABLED
<!--NeedCopy-->

注意

如果您更改 rsskeytype 系统参数,请重新启动 NetScaler 设备。

TCP 终止

要让 NetScaler T1 应用 TCP 优化,它需要先终止传入的 TCP 流量。为此,应创建并配置通配符 TCP 虚拟服务器,以拦截入口流量,然后将其转发到 Internet 路由器。

静态或动态路由环境

对于具有静态或动态路由的环境,虚拟服务器可以依靠路由表信息将数据包转发到互联网路由器。默认路由必须指向互联网路由器,并且还应设置客户端子网到无线路由器的路由条目:

示例:

add lb vserver vsrv-wireless TCP * * -persistenceType NONE -Listenpolicy "CLIENT.VLAN.ID.EQ(100) && SYS.VSERVER("vsrv-wireless").STATE.EQ(UP)" -m IP -cltTimeout 9000
add route 0.0.0.0 0.0.0.0 192.168.2.1
add route 10.0.0.0 255.0.0.0 192.168.1.1
<!--NeedCopy-->

VLAN 到 VLAN (PBR) 环境

在某些客户环境中,用户流量被分成多个流,需要根据传入流量参数转发到不同的路由器。基于策略的路由 (PBR) 可用于根据传入数据包参数路由数据包,例如 VLAN、MAC 地址、接口、源 IP、源端口、目标 IP 地址和目标端口。

本地化后的图片

示例:

add lb vserver vsrv-wireless TCP * * -m IP -l2Conn ON -listenpolicy "CLIENT.VLAN.ID.EQ(100) || CLIENT.VLAN.ID.EQ(101) || CLIENT.VLAN.ID.EQ(102)"

add ns pbr pbr-vlan100-to-vlan200 ALLOW -vlan 100 -nexthop 172.16.200.1

add ns pbr pbr-vlan101-to-vlan201 ALLOW -vlan 101 -nexthop 172.16.201.1

add ns pbr pbr-vlan102-to-vlan202 ALLOW -vlan 102 -nexthop 172.16.202.1
<!--NeedCopy-->

使用基于策略的路由来路由 TCP 优化流量是 11.1 50.10 版中添加的一项新功能。对于以前的版本,每个 VLAN 拥有多个“MAC 模式”虚拟服务器实体是多 VLAN 环境的替代解决方案。每个虚拟服务器都有一个绑定服务,代表特定流量的 Internet 路由器。

示例:

add server internet_router_1 172.16.200.1

add server internet_router_2 172.16.201.1

add server internet_router_3 172.16.202.1

add service svc-internet-1 internet_router_1 TCP * -usip YES -useproxyport NO

add service svc-internet-2 internet_router_2 TCP * -usip YES -useproxyport NO

add service svc-internet-3 internet_router_3 TCP * -usip YES -useproxyport NO

bind service svc-internet-1 -monitorName arp

bind service svc-internet-2 -monitorName arp

bind service svc-internet-3 -monitorName arp

add lb vserver vsrv-wireless-1 TCP * * -Listenpolicy "CLIENT.VLAN.ID.EQ(100) && SYS.VSERVER("vsrv-wireless-1").STATE.EQ(UP)" -m MAC -l2Conn ON

add lb vserver vsrv-wireless-2 TCP * * -Listenpolicy "CLIENT.VLAN.ID.EQ(101) && SYS.VSERVER("vsrv-wireless-2").STATE.EQ(UP)" -m MAC -l2Conn ON

add lb vserver vsrv-wireless-3 TCP * * -Listenpolicy "CLIENT.VLAN.ID.EQ(102) && SYS.VSERVER("vsrv-wireless-3").STATE.EQ(UP)" -m MAC -l2Conn ON

bind lb vserver vsrv-wireless-1 svc-internet-1

bind lb vserver vsrv-wireless-2 svc-internet-2

bind lb vserver vsrv-wireless-3 svc-internet-3
<!--NeedCopy-->

注意:

虚拟服务器模式是 MAC,而之前的示例是模式 IP。当我们将服务绑定到虚拟服务器时,这是保留目标 IP 信息所必需的。此外,额外的 PBR 配置需要路由未优化的流量。

TCP 优化

开箱即用的 NetScaler TCP 终止配置为 TCP 直通功能。TCP 直通本质上意味着 NetScaler T1 可以透明地拦截客户端-服务器 TCP 流,但不保留单独的客户端/服务器缓冲区或以其他方式应用任何优化技术。

要启用 TCP 优化,名为 nstcpprofile 的 TCP 配置文件用于指定 TCP 配置,如果在服务或虚拟服务器级别未提供 TCP 配置,则使用该配置文件,应按如下方式进行修改:

命令:

add ns tcpProfile nstcpprofile -WS ENABLED -SACK ENABLED -WSVal 8 -mss 1460 -maxBurst 30 -initialCwnd 16 -oooQSize 15000 -minRTO 800 -bufferSize 4000000 -flavor BIC -dynamicReceiveBuffering ENABLED -KA ENABLED -sendBuffsize 4000000 -rstWindowAttenuate ENABLED -spoofSynDrop ENABLED -ecn ENABLED -frto ENABLED -maxcwnd 1000000 -fack ENABLED -rstMaxAck enABLED -tcpmode ENDPOINT
<!--NeedCopy-->

注意:

如果没有明确创建任何配置文件并将其绑定到虚拟服务器和服务,则默认情况下会绑定配置文件 nstcp_default_profile。

如果需要多个 TCP 配置文件,则可以创建额外的 TCP 配置文件并将其与相应的虚拟服务器关联

命令:

add ns tcpProfile custom_profile -WS ENABLED -SACK ENABLED -WSVal 8 -mss 1460 -maxBurst 30 -initialCwnd 16 -oooQSize 15000 -minRTO 800 -bufferSize 4000000 -flavor BIC -dynamicReceiveBuffering ENABLED -KA ENABLED -sendBuffsize 4000000 -rstWindowAttenuate ENABLED -spoofSynDrop ENABLED -ecn ENABLED -frto ENABLED -maxcwnd 1000000 -fack ENABLED -rstMaxAck enABLED -tcpmode ENDPOINT

set lb vserver vsrv-wireless -tcpProfileName custom_profile
<!--NeedCopy-->

注意:

对于使用 vserver -m MAC 和服务的部署,应将相同的配置文件与服务相关联。

set service svc-internet -tcpProfileName custom_profile
<!--NeedCopy-->

TCP 优化功能

NetScaler 设备的大多数相关 TCP 优化功能都是通过相应的 TCP 配置文件公开的。创建 TCP 配置文件时应考虑的典型 CLI 参数如下:

  1. 窗口缩放 (WS):TCP 窗口缩放允许将 TCP 接收窗口大小增加到 65535 字节以上。它有助于提高 TCP 的整体性能,尤其是在高带宽和长延迟网络中。它有助于减少延迟并缩短 TCP 的响应时间。
  2. 选择性确认 (SACK):TCP SACK 解决了多个数据包丢失的问题,这会降低整体吞吐容量。通过选择性确认,接收方可以将成功接收的所有分段通知发送方,从而使发送方只能重新传输丢失的分段。此技术有助于 T1 提高整体吞吐量并减少连接延迟。
  3. 窗口缩放系数 (WSVal):用于计算新窗口大小的系数。必须将其配置为高值,以允许 NS 发布的窗口至少等于缓冲区大小。
  4. 最大分段大小 (MSS):单个 TCP 分段的 MSS。此值取决于中间路由器和终端客户端上的 MTU 设置。值为 1460 对应于 MTU 为 1500。
  5. maxBurst:突发时允许的最大 TCP 分段数。
  6. 初始拥塞窗口大小 (initialCwnd):TCP 初始拥塞窗口大小决定了事务开始时可以处理的字节数。它使 T1 能够发送这么多字节,而不必担心线路拥塞。
  7. 最大 OOO 数据包队列大小 (oooQSize):TCP 维护“乱序”队列,以保留 TCP 通信中的 OOO 数据包。如果队列大小很长,此设置会影响系统内存,因为数据包需要保存在运行时内存中。因此,需要根据网络类型和应用程序特征将其保持在优化水平。
  8. 最小 RTO (minRTO):TCP 重传超时是根据内部实现逻辑在收到的每个 ACK 上计算的。默认的重传超时发生在开始时 1 秒,可以通过此设置进行调整。 对于这些数据包的第二次重传,RTO 将由 N*2 计算,然后 N*4… N*8… 一直持续到最后一次重传尝试。
  9. bufferSize/sendBuffsize:这些是指 T1 在不发送到客户端的情况下可以从服务器和内部缓冲区接收的最大数据量。它们应设置为比底层传输信道的带宽延迟乘积大(至少两倍)的值。
  10. 风格:这是指 TCP 拥塞控制算法。有效值为默认、BIC、CUBIC、Westwood 和 Nile。
  11. 动态接收缓冲:允许根据内存和网络条件动态调整接收缓冲区。它将尽可能多地填充缓冲区,以保持客户端的下载管道已满,而不是填满,方法是从服务器预先读取固定大小的缓冲区,因为后者是在 TCP 配置文件中指定的,通常基于 2*BDP 等连接标准。NetScaler T1 监视客户端的网络状况,并估计它应该提前从服务器读取多少内容。
  12. 保持活动状态 (KA):定期发送 TCP 保持活动状态 (KA) 探测器以检查对等方是否还处于运行状态。
  13. rstWindowAttenuate:保护 TCP 免受欺骗攻击。当序列号无效时,它将以更正的 ACK 进行回复。
  14. rstMaxAck:启用或禁用接受窗口外但呼应最高 ACK 序列号的 RST。
  15. spoofSynDrop:丢弃无效的 SYN 数据包以防止欺骗。
  16. 显式拥塞通知 (ecn):它向数据发送者发送网络拥塞状态通知,并对数据拥塞或数据损坏采取纠正措施。
  17. 正向 RTO 恢复:如果出现虚假重传,拥塞控制配置将恢复到其原始状态。
  18. TCP 最大拥塞窗口 (maxcwnd):可由用户配置的 TCP 最大拥塞窗口大小。
  19. 前向确认 (FACK):通过明确测量网络中未完成的数据字节总数来避免 TCP 拥塞,并帮助发送方(T1 或客户端)控制在重传超时期间注入到网络的数据量。
  20. tcpmode:特定配置文件的 TCP 优化模式。有两种 TCP 优化模式-透明模式和端点。
  • 端点。在此模式下,设备分别管理客户端和服务器连接。
  • 透明。在透明模式下,客户端需要直接访问服务器,无需干预虚拟服务器。服务器 IP 地址必须是公共的,因为客户端需要能够访问这些服务器。

静默删除空闲连接

在电信网络中,将近 50% 的 NetScaler 设备的 TCP 连接处于空闲状态,设备发送 RST 数据包来关闭它们。通过无线电信道发送的数据包会不必要地激活这些信道,从而导致大量消息,进而导致设备生成大量的服务拒绝消息。默认 TCP 配置文件现在包含 DropHalfClosedConnOnTimeout 和 DropEstConnOnTimeout 参数,这些参数默认处于禁用状态。如果同时启用这两者,则在连接超时时,半封闭的连接和已建立的连接都不会导致 RST 数据包发送到客户端。设备只是断开连接。

set ns tcpProfile nstcpprofile  -DropHalfClosedConnOnTimeout ENABLED
set ns tcpProfile nstcpprofile  -DropEstConnOnTimeout ENABLED
<!--NeedCopy-->
TCP 优化配置