自定义模式用于手动配置 TCP 代理设置。在 TCP 代理配置文件设置为自定义时,管理员可以使用 NSX Advanced Load Balancer UI、CLI 或 REST API 更改 TCP 代理配置文件默认参数,如下一节所述。

超时参数

空闲连接 - 由空闲持续时间参数指定,在该时间过后,NSX Advanced Load Balancer 终止连接。SE、客户端或服务器通过连接发送或接收的任何数据包将重置空闲持续时间定时器。

  • 选择 TCP 保持活动状态终止空闲连接以控制空闲连接行为。

    1. TCP 保持活动状态:定期向客户端发送保持活动状态数据包,这会在客户端成功确认时重置空闲持续时间定时器。从 SE 发送的保持活动状态数据包不会重置该定时器。

    2. 终止空闲连接:根据持续时间字段指定的时间,终止没有从客户端收到保持活动状态信号的空闲连接。NSX Advanced Load Balancer 不会发出保持活动状态数据包,但它仍支持从客户端或服务器收到的保持活动状态数据包。

  • 输入空闲持续时间,以秒为单位(5 到 14400 秒之间,0 表示无限长的超时)。这是 TCP 连接符合主动关闭条件之前经过的时间。NSX Advanced Load Balancer在客户端、服务器或 SE 发送或接收任何数据包时,将重置该定时器。

注:
  • 如果为该选项设置较高的值,可能适合不使用保持活动状态数据包的长期连接。较高的设置可能还会增加 NSX Advanced Load Balancer 受到拒绝服务攻击的可能性,因为系统不会主动关闭空闲连接。

  • 空闲持续时间的默认值为 600 秒。范围是 5-3600 秒。(0 秒表示无限长的超时,并停用主动关闭空闲连接的功能。)

  • 忽略等待时间 - 在 SE 与客户端或 SE 与服务器之间的连接关闭时,唯一的客户端或服务器 IP:端口 + 服务引擎 IP:端口(称为 4 元组)将置于 TIME_WAIT 状态一段时间。在确定网络上没有仍在传送或尚未传送的延迟数据包后,才能重用该 4 元组。等待时间值定义可以重用该 4 元组之前的超时期限。输入 500 到 2000 毫秒之间的值,或启用忽略等待时间选项,以便在 NSX Advanced Load Balancer 从远程 IP 收到与同一 4 元组匹配的 SYN 数据包时立即重新打开该 4 元组连接。默认值为 2000 毫秒。

重传行为参数

  1. 最大重新传输次数 - 输入 3 到 8 之间的值。它是关闭连接之前尝试重新传输的次数。默认值为 8。

  2. 最大 SYN 重新传输次数 - 输入 3 到 8 之间的值。这是在放弃之前尝试重新传输 SYN 数据包的最大次数。默认值为 8。

缓冲区管理参数

1.接收窗口向发送方通知 NSX Advanced Load Balancer 在发送 TCP 确认之前可以缓冲的数据量。它可以是 32 KB 到 65536 KB 之间的值。

2.最大分段大小 (MSS) 是使用网络接口的最大传输单元 (Maximum Transmission Unit, MTU) 长度计算的。MSS 确定可以安全地插入到 TCP 数据包的最大数据大小。

在某些环境中,MSS 必须小于 MTU。例如,如果 NSX Advanced Load Balancer 和客户端之间的流量经由站点到站点 VPN,则可能需要保留一些空间以填充加密数据。单击使用网络接口 MTU 设置以根据网络接口的 MTU 大小设置 MSS。MSS 设置为 MTU - 40 字节,以考虑到 IP 和 TCP 标头。对于 1500 字节的 MTU,MSS 设置为 1460。

或者,您也可以输入 512-9000 字节范围内的自定义值。

QoS 和流量工程参数

差分服务代码点 (Differentiated Service Code Point, DSCP) 允许 NSX Advanced Load Balancer 传递现有的差分服务代码点参数或指定自定义数字。DSCP 是 TCP 标头中的一个 8 位字段,可用于对流量进行分类。

可以通过 NSX Advanced Load Balancer CLI 和 REST API 配置以下参数。

拥塞控制参数

  1. Aggressive Congestion Avoidance - Congestion window 定义发送方在未收到 ACK 的情况下可靠传输的数据量。拥塞窗口大小不断增加,直至达到最大接收窗口,或者直至网络达到其拥塞限制。在没有观察到传输或超时的网络中,NSX Advanced Load Balancer 可以选择较高的初始拥塞窗口,以避免缓慢启动并更快地分配 TCP 连接。以下是该字段的可能值:

    1. Enabled - 10 倍。

    2. Disabled - MSS 大小的 1 倍。

    3. 默认值为 Disabled

  2. CC Algo 是一种拥塞控制算法,用于控制识别网络拥塞和应对检测到的网络拥塞的行为。以下是该字段的可能值:

    1. New Reno 是适用于大多数网络的通用 TCP 拥塞控制算法。

    2. Cubic 是为长胖网络 (Long Fat Network, LFN) 设计的,这些网络具有较高的吞吐量和较高的延迟。

    3. HTCP 仅建议在高吞吐量和高延迟的网络中使用。

    默认值为 New Reno

  3. Congestion Recovery Scaling Factor 定义恢复后的拥塞窗口缩放因子,并与 Aggressive Congestion Avoidance 一起使用。它的范围是 0-8,默认值为 2。

  4. Min Rexmt Timeout 的范围是 50-5000 毫秒。TCP 具有内置逻辑以确保远程设备收到数据包,否则,发送方重新发送数据包。该参数设置在重新发送数据包之前等待的最短时间。

  5. Reassembly Queue Size 定义在收到的 TCP 分段顺序混乱时用于重组这些分段的缓冲区的大小,即,可以排队进行重组的最大 TCP 分段数。较低的值可能会导致在下载较大内容或处理大量流量时出现问题。该值可以在 0 到 5000 之间。默认值为 0(提供无限大的队列大小)。

  6. Reorder Threshold 控制触发重新发送所需的重复 ACK 数量。较高的值意味着,数据包重新排序导致的重新发送次数较少。如果无序数据包在环境中很常见,建议使用较高的数字。该值可以在 1 到 100 之间。对于公有云(例如 AWS、Azure、GCP),默认值为 8;对于其他云,默认值为 3。

  7. Slow Start Scaling Factor 是缓慢启动期间的拥塞窗口缩放因子。它与窗口缩放因子不同。只有在启用了 aggressive congestion avoidance 时,该参数才有效。该字段值可以在 0 到 8 之间。默认值为 1。

  8. Time Wait Delay 是在关闭处于 TIME_WAIT 状态的连接之前等待的时间。该字段可以采用以下值:

    1. Range - 500-2000 毫秒。

    2. Special - 0(立即关闭)。

    3. Default - 0。

NSX Advanced Load Balancer TCP 堆栈中还有一些默认启用的优化参数,用户无法更改这些参数。将在下一节中介绍这些参数。

无法更改的参数

  1. Window Scaling Factor - 窗口缩放确定接收方 (SE) 可以为连接缓冲的 TCP 数据量。默认初始窗口为 65535 位。对于支持该 TCP 扩展的最新 TCP 客户端,窗口缩放因子将窗口大小增加 x 倍(其中 x 是缩放因子)以显著增加该数字。这对于具有较高延迟和吞吐量的网络非常有用,大多数宽带 Internet 连接具有该特性。NSX Advanced Load Balancer 窗口缩放因子为 10,这意味着它最多可以缓冲 67,104,840 位。该字段的默认值为 10(这意味着在接收窗口设置为 65535 时,缓冲区最多为 67,104,840 位)。

  2. Selective ACK - 通过选择性确认,数据接收方可以向发送方通知已成功收到的所有分段。因此,发送方只需重新发送实际丢失的分段。请考虑以下场景:成功收到前 5 个数据包,第 6 个数据包丢失而未收到,并成功收到第 7-10 个数据包。在这种情况下,在没有 SACK 的情况下,发送方从第 6 个数据包开始重新发送所有后续数据包,因为它无法确定实际丢失了哪些数据包。这会导致不必要的重新发送,从而进一步消耗带宽并影响 TCP 性能。该字段的默认值为 Enabled

  3. Limited Transmit Recovery - 如果连接的拥塞窗口很小,或者在单个发送窗口中丢失多个分段,则可以使用该参数更有效地恢复丢失的分段。这种有限的发送算法允许发送新的数据分段,以分别响应发送方收到的前两个重复确认。发送这些分段增加了 TCP 使用快速重新发送算法从单个丢失分段中恢复的可能性,而不是使用开销较高的重新发送超时。该字段的默认值为 Enabled

  4. Delayed ACK - NSX Advanced Load Balancer 可以发送延迟 ACK 以提高效率,而不是为每个收到的数据分段发送一个 ACK 分段。这是 TCP 拥塞控制的一部分。根据 RFC,延迟 ACK 的时间戳少于 0.5 秒,在完整大小的分段流中,至少每隔一个分段发送一个 ACK。

使用 CLI 配置 MTU

可以将最大传输单元 (MTU) 配置为全局属性,这会在控制器集群管理的所有 SE 中设置 MTU。默认情况下,MTU 是使用 DHCP 学习的。可以使用 CLI 手动设置该属性。以下命令将 MTU 设置为 1500 字节。两个示例说明了需要将 MTU 更改为非默认值的情形:

  • 如果安装位于使用 VXLAN 或某种其他类型的覆盖网络(例如 OpenStack)的环境中,则必须减小 MTU 以容纳额外的隧道标头。

  • 如果 DHCP 选项将 MTU 设置为 9000(巨型),但整个基础架构(交换机和路由器)不支持巨型 MTU,在 AWS 环境中,可能会发生这种情况。

configure serviceengineproperties
se_runtime_properties
global_mtu 1500
Overwriting the previously entered value for global_mtu
save
save
注:

NSX Advanced Load Balancer SE 支持最多 1500 字节的 MTU。

防范 TCP 攻击

除了 TCP 的性能调整参数以外, NSX Advanced Load Balancer 还使用内置机制保护自身以免受到一些常见的 TCP 级别攻击,如下一节中所述。该列表并不是详尽的列表,仅包括一些常见的攻击。有关更多信息,请参见 DDoS 攻击缓解

攻击类型

描述

缓解

SYN 泛洪

一种拒绝服务攻击形式,攻击者向目标系统发送连续的 SYN 请求,而不确认 SYN ACK。这样做是为了试图消耗足够多的服务器资源,以使系统无法响应合法的流量。

如果 TCP 表具有半打开连接,则 NSX Advanced Load Balancer 默认开始发送 SYN Cookie。目前,没有任何配置可以使特定客户端避免该行为。在没有 TCP 代理的 TCP 快速路径配置文件中,可以启用 SYN 保护,从而导致 NSX Advanced Load Balancer 推迟与服务器建立 TCP 会话,直到完成与客户端的三向握手。这会保护服务器以免受到 SYN 泛洪或半打开状态的影响。

LAND 攻击

这类似于 SYN 泛洪攻击。不同之处在于,源 IP 地址和目标 IP 地址是相同的,这使 IP 堆栈一遍又一遍地处理相同的数据包,从而可能导致受害系统崩溃。

在检测到这种攻击时,NSX Advanced Load Balancer 在调度程序层丢弃数据包。

端口扫描

攻击者在不同端口上发送 TCP 数据包以启动端口扫描,从而找出下一级攻击的侦听端口。其中的大多数端口是非侦听端口。

在检测到这种攻击时,NSX Advanced Load Balancer 在调度程序层丢弃数据包。