> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# XBOX 开发套件上的网络压力测试

> XBOX 开发套件上的网络压力测试

本主题帮助你了解如何在 XBOX One 开发套件上模拟性能受限的网络。用户的网络环境可能不完美且混乱。用户可用的带宽和传输可靠性可能远低于你开发环境所具备的水平。

为给多样化的用户群体提供最佳体验，请在贴近实际客户的环境中测试你的游戏。可以使用 XBOX One 开发套件运行带宽受限、丢包和延迟的网络模拟。网络模拟是深入了解游戏在不同网络条件下行为的机会。

## 搭建测试网络

网络模拟由 Microsoft 游戏开发工具包 (GDK) 中的命令行压力测试工具 *xbstress.exe* 控制。此工具可用于配置各种主机压力源，包括网络模拟。完整详细信息请参阅 [xbstress (NDA 主题)](/tools/tools-console/commandlinetools/xbstress)。对于网络用途，`xbstress` 控制着 XBOX One 上一个专门的驱动程序。该驱动会丢包、注入延迟并限制吞吐量。

使用网络模拟时，请提供一个 *干净* 的网络环境，以确保网络问题只由 `xbstress` 引起。干净的网络环境应满足以下标准：

* 可用带宽高于模拟目标。
* 连接可靠，丢包忽略不计。
* 延迟尽可能小。将所有节点连在同一链路上，以尽量减小外部延迟来源的影响。

## 运行基本的网络模拟

[xbstress (NDA 主题)](/tools/tools-console/commandlinetools/xbstress) 内置了四种预配置的模拟配置文件，便于轻松模拟重要的网络场景：minimum、average、excellent 和 broken。这些配置文件基于多种监测互联网连接质量数据源的数据。

与其他命令行工具一样，`xbstress` 将 `/X:` 命令行标志解释为主机的 IP 地址或主机名。模拟命令按如下方式执行：

* 要模拟较差连接，运行 `xbstress simulate network=min`。
* 要模拟一般连接，运行 `xbstress simulate network=avg`。
* 要模拟优秀连接，运行 `xbstress simulate network=exc`。
* 要模拟断开连接，运行 `xbstress simulate network=broken`。
* 要模拟物理以太网断开，运行 `xbstress simulate network=disconnect`。
* 要停止网络模拟，运行 `xbstress stop`。

下表展示了模拟配置文件的细节。

| 配置文件            | 描述                                                        | 带宽                           | 丢包率  | 注入的总延迟   |
| --------------- | --------------------------------------------------------- | ---------------------------- | ---- | -------- |
| Broken          | 模拟连接丢失。即使指定此值，开发工具（例如调试器、远程命令行工具和 PIX）仍能正常工作。             | 不传输任何数据。                     | 100% | 不传输任何数据。 |
| Minimum (min)   | 表示 XBOX One 的最低运行需求。为满足 XBOX 认证要求，游戏必须能够在该环境下运行而不出现停顿或崩溃。 | 出站：192 Kbps<br />入站：192 Kbps | 1%   | 75 ms    |
| Average (avg)   | 表示合理的 DSL 连接。在测试游戏网络性能时应关注此配置文件。                          | 出站：700 Kbps<br />入站：1 Mbps   | 1%   | 50 ms    |
| Excellent (exc) | 表示优秀的宽带连接。                                                | 出站：10 Mbps<br />入站：35 Mbps   | 0.5% | 30 ms    |

延迟会在主机网络流的两个方向上注入。要模拟 average 配置文件，我们通过在入站与出站数据包上各注入 25 ms 延迟来实现 50 ms 的有效延迟。如果你在同一链路上的两台主机上都模拟 average 配置文件，它们双方向的有效点对点延迟将为 50 ms。

## 运行复杂网络条件的模拟

要验证网络代码是否健壮并可通过认证，请在其面对复杂网络条件时进行测试。此外，还要在主机可以访问部分所需端点、但其他端点不可用或连接带宽受限的情况下测试。你可以使用 [xbstress (NDA 主题)](/tools/tools-console/commandlinetools/xbstress) 的 `channel` 功能来模拟这类复杂网络条件。

例如，你可以使用 channel 来模拟以下情况：

* 用户无法访问 XBOX 网络（也称为 XBOX Live），但所有其他网络资源均可用。
* 用户无法访问工作室用于托管自定义服务的其中一台服务器。
* XBOX 服务的访问总体上正常，但对特定服务（例如 Achievements）的访问非常缓慢。
* 用户已设置多人游戏会话，但现在无法访问另一用户的主机。

指定对特定地址或地址范围的访问应如何模拟：

1. 为该地址或地址范围指定一个 channel 以及要在该 channel 上模拟的连接配置文件。
2. 为你希望使用不同连接配置文件的每个地址或地址范围定义单独的 channel。
3. 指定适用于某个模拟场景的所有 channel。
4. 使用 `xbstress simulate network=channels` 命令开始按 channel 指定的网络条件进行模拟。

每个 channel 规范包含以下三个值。

* **Channel：** 通过 0 到 100 之间的任意数字标识。channel 描述按数字从小到大依次处理。因此，如果你为某个地址指定了两条规则，编号更大的 channel 会应用到该地址。

* **Network：** 应用于该地址或地址范围的配置文件名称。

* **Addresses：** 可以单独指定、以分号分隔列出，或使用子网掩码作为范围指定。

使用 [xbstress (NDA 主题)](/tools/tools-console/commandlinetools/xbstress) 阻止对 XBOX 网络的所有访问，可使用如下 XBOX 服务器的 IP 地址：

```
      xbstress set channel=0 network=broken addresses=134.170.28.0/255.255.254.0
      xbstress set channel=1 network=broken addresses=191.232.80.128/255.255.255.128
      xbstress set channel=2 network=broken addresses=191.232.82.128/255.255.255.128
      xbstress set channel=3 network=broken addresses=191.234.78.0/255.255.254.0
      xbstress set channel=4 network=broken addresses=131.253.28.0/255.255.254.0
      xbstress set channel=5 network=broken addresses=134.170.176.0/255.255.252.0
      xbstress set channel=6 network=broken addresses=157.56.70.0/255.255.254.0
      xbstress set channel=7 network=broken addresses=65.55.42.0/255.255.254.0
      xbstress set channel=8 network=broken addresses=131.253.22.0/255.255.254.0
      xbstress set channel=9 network=broken addresses=191.234.240.0/255.255.248.0
      xbstress simulate network=channels
```

有关 XBOX 服务器地址的更多信息，请参阅 [为开发 Microsoft 游戏开发工具包游戏配置开发网络访问](/home/setup-install/devkits/settings/configure-dev-network)。

也可以在该命令中使用主机名替代 IP 地址。此主机名会被解析为单个 IP 地址，因此只对未做负载均衡且解析为单个 IP 地址的服务有效。

```
      xbstress set channel=0 network=min addresses=mytitleservice.com
      xbstress simulate network=channel
```

要限制或阻止负载均衡 HTTP 服务的通信，应使用 Fiddler 而非 [xbstress (NDA 主题)](/tools/tools-console/commandlinetools/xbstress)。有关更多信息，请参阅 [XBOX 开发套件上的 Fiddler](/build/console-features/networking/tools/fiddler-setup-networking)。

## 运行细粒度的网络模拟

使用 `xbstress` 可以分别控制入站带宽、出站带宽、丢包和延迟。当你想对模拟参数进行更细粒度控制时可以使用这些控制项。详细信息请参阅 [xbstress (NDA 主题)](/tools/tools-console/commandlinetools/xbstress)。

## 豁免网络流量

网络模拟不会影响来自 XBOX One 的所有流量。与工具相关的流量被豁免于网络模拟之外。这样可以确保在你使用模拟连接对网络代码进行压力测试并调试相应问题时，工具仍能正常工作。

如果尽管有这些豁免，网络模拟仍导致主机无法使用，你可以停用网络模拟。拔掉主机的电源，等待十秒，重新插上电源，再打开主机。

### 默认端口豁免

以下类型的流量不受网络压力限制影响。此列表并不详尽。在某些情况下，用于系统功能的其他流量也可能允许规避网络压力限制。

* IPv4 网络配置：
  * ARP (Address Resolution Protocol)
  * DHCP (Dynamic Host Configuration Protocol)：UDP (用户数据报协议) 端口 67 和 68

* IPv6 网络配置：
  * SLAAC：ICMPv6
  * DHCPv6：UDP 端口 546

* XTF 与 PIX：TCP (传输控制协议)，端口 4201 和 4221-4223

* Telnet：TCP，端口 23、24、2302 和 2303

* XStudio：TCP，端口 2375

* Server Message Block (SMB)：TCP 445

### 端口的自定义豁免

要将其他端口豁免于网络模拟并用于你自己的自定义工具，请使用 `xbstress` 设置自定义豁免。你的工具随后即可通过这些端口进行网络通信。

要设置豁免，请在 `xbstress` 中使用 `tcpportexemptions` 或 `udpportexemptions` 参数。两个参数后面均跟一个以分号分隔的要豁免的端口列表。以下示例演示这些命令的用法：

* `xbstress set tcpportexemptions 49152;49153` 命令为 TCP 端口 49152 和 49153 创建豁免。
* `xbstress set udpportexemptions 49153;49154` 命令为 UDP 端口 49153 和 49154 创建豁免。

## 网络模拟与网络捕获之间的相互影响

在使用 [xbtrace (NDA 主题)](/tools/tools-console/commandlinetools/xbtrace) 在主机上执行网络捕获的同时进行网络模拟，可能会导致捕获结果具有误导性。模拟效果（例如丢包）在捕获流程之后实施。例如，捕获可能显示某个数据包被传输了，即使它随后在实际通过网络传输之前被模拟驱动丢弃。

## 另请参阅

[Stress (xbstress.exe) (NDA 主题)](/tools/tools-console/commandlinetools/xbstress)


## Related topics

- [工具](/zh-CN/build/console-features/networking/tools/index.md)
- [Microsoft 游戏开发工具包中的网络工具](/zh-CN/build/console-features/networking/tools/tools-networking-toc.md)
- [GDK 中的服务质量测量](/zh-CN/build/console-features/networking/game-mesh/qos-networking.md)
- [XBOX 开发套件上的 Developer Home (DevHome)](/zh-CN/tools/tools-console/devhome/index.md)
- [Web 内容测试应用 (CTA) 概述](/zh-CN/build/core-features/common/game-streaming/game-streaming-web-content-test-application.md)
