Create the firewall rule

检查我的进度

/ 100

此实验可能会提供 AI 工具来支持您学习。
此内容尚未针对移动设备进行优化。
为获得最佳体验,请在桌面设备上访问通过电子邮件发送的链接。

GSP045

Google Cloud 自学实验

概览

在本实操实验中,您将了解一些真实场景,重新创建环境,并动手优化一些性能欠佳的网络。

值得尝试的是将不同实例进行横向对比,就像问题排查应用场景那样,通过这种方式,您既可以验证优化效果,又能熟练掌握那些用于提升自家系统性能的关键步骤。

本实验改编自 Colt McAnlis 的博文:Core Count and the Egress problem(核心数与出站流量问题)和 Internal IP vs External IP(内部 IP 与外部 IP 对比)。Colt 在 Medium 上发布博客,分享关于 Google Cloud 网络性能的见解。

目标

  • 如何使用开源工具测试网络连接和性能
  • 如何使用开源工具检查网络流量
  • 机器大小如何影响网络性能

前提条件

  • 具备 Google Cloud 服务基础知识(建议先完成 Google Cloud 基础知识中的实验,以获得最佳学习效果)
  • 具备 Google Cloud 网络和 TCP/IP 基础知识(建议先完成“Google Cloud 中的网络”课程中的前几个实验,以获得最佳学习效果)
  • 具备 Unix/Linux 命令行基础知识

设置和要求

点击“开始实验”按钮前的注意事项

请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。

此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。

为完成此实验,您需要:

  • 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
注意:请使用无痕模式(推荐)或无痕浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
  • 完成实验的时间 - 请注意,实验开始后无法暂停。
注意:请仅使用学生账号完成本实验。如果您使用其他 Google Cloud 账号,则可能会向该账号收取费用。

如何开始实验并登录 Google Cloud 控制台

  1. 点击开始实验按钮。如果该实验需要付费,系统会打开一个对话框供您选择支付方式。右侧是实验设置和访问权限面板,其中包含以下内容:

    • 打开 Google Cloud 控制台按钮
    • 您在本实验中必须使用的临时凭证(用户名和密码)
    • 帮助您逐步完成该实验所需的其他信息(如果需要)

    请注意,实验计时器位于页面顶部附近,将显示剩余时间。

  2. 点击打开 Google Cloud 控制台(如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接)。

    该实验会启动资源并打开另一个标签页,显示“登录”页面。

    提示:可以将这些标签页分别放在不同的窗口中,并排显示。

    注意:如果您看见选择账号对话框,请点击使用其他账号。
  3. 如有必要,请复制下方的用户名,然后将其粘贴到登录对话框中。

    {{{user_0.username | "<用户名>"}}}

    您也可以在实验设置和访问权限面板中找到“用户名”。

  4. 点击下一步。

  5. 复制下面的密码,然后将其粘贴到欢迎对话框中。

    {{{user_0.password | "<密码>"}}}

    您也可以在实验设置和访问权限面板中找到“密码”。

  6. 点击下一步。

    重要提示:您必须使用实验提供的凭证。请勿使用您的 Google Cloud 账号凭证。 注意:在本实验中使用您自己的 Google Cloud 账号可能会产生额外费用。
  7. 依次点击进入后续页面:

    • 接受条款及条件。
    • 由于这是临时账号,请勿添加账号恢复选项或双重身份验证。
    • 请勿注册免费试用。

片刻之后,系统会在此标签页中打开 Google Cloud 控制台。

注意:如需访问 Google Cloud 产品和服务,请点击导航菜单,或在搜索字段中输入服务或产品的名称。 “导航菜单”图标和“搜索”字段

本实验的目标是展示核心数与吞吐量之间的关系,因此实验中已预先构建了 6 个实例。它们是在您开始实验时创建的。

  • 在 Cloud 控制台中,前往导航菜单 > Compute Engine > 虚拟机实例,查看您的实例:

“虚拟机实例”页面,以表格形式列出了六个实例及其详细信息

注意:您的实例所属的区域和可用区可能与屏幕截图中的示例有所不同。

连接测试

进行快速连接测试,确保一切运行正常。

  1. 在控制台中点击 instance-1 名称旁边的 SSH 按钮,通过 SSH 连接到该实例。

  2. 在新的 shell 窗口中,对另一个实例执行 ping 操作,并运行以下命令,将 <external ip address of instance-2> 替换为 instance-2 的外部 IP 地址:

ping -c 5 <external ip address of instance-2>

输出示例:

student-00-aafd1bd9c185@instance-1:~$ ping -c 5 35.194.158.169 PING 35.194.158.169 (35.194.158.169) 56(84) bytes of data. 64 bytes from 35.194.158.169: icmp_seq=1 ttl=76 time=1.89 ms 64 bytes from 35.194.158.169: icmp_seq=2 ttl=76 time=0.409 ms 64 bytes from 35.194.158.169: icmp_seq=3 ttl=76 time=0.542 ms 64 bytes from 35.194.158.169: icmp_seq=4 ttl=76 time=0.557 ms 64 bytes from 35.194.158.169: icmp_seq=5 ttl=76 time=0.559 ms --- 35.194.158.169 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4001ms rtt min/avg/max/mdev = 0.409/0.792/1.894/0.554 ms
  1. 对另一个实例执行 ping 操作。将 <external ip address of instance-3> 替换为 instance-3 的外部 IP 地址,并对其执行 ping 操作:
ping -c 5 <external ip address of instance-3>

输出示例:

student-00-aafd1bd9c185@instance-1:~$ ping -c 5 35.194.187.75 PING 35.194.187.75 (35.194.187.75) 56(84) bytes of data. 64 bytes from 35.194.187.75: icmp_seq=1 ttl=64 time=1.59 ms 64 bytes from 35.194.187.75: icmp_seq=2 ttl=64 time=0.336 ms 64 bytes from 35.194.187.75: icmp_seq=3 ttl=64 time=0.338 ms 64 bytes from 35.194.187.75: icmp_seq=4 ttl=64 time=0.302 ms 64 bytes from 35.194.187.75: icmp_seq=5 ttl=64 time=0.270 ms --- 35.194.187.75 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 3999ms rtt min/avg/max/mdev = 0.270/0.568/1.596/0.514 ms

一切正常,继续!

检查防火墙规则

本实验还创建了防火墙规则。

  • 若要查看这些规则,请前往导航菜单 > VPC 网络 > 防火墙,然后点击 iperftesting 防火墙。

防火墙规则 iperftesting 使用以下配置:

字段 值 注释
名称 iperftesting 新规则名称
目标 网络中的所有实例
来源 IP 地址范围 0.0.0.0/0 防火墙允许来自互联网上所有 IP 地址的流量。
协议和端口 tcp:5001; udp:5001
流量方向 入站
对匹配项执行的操作 允许

现在,您可以开始进行实验了。

应用场景 1:网络和 Compute Engine 核心数

在第一个场景中,您将了解所用机器的大小如何影响可测量的吞吐量。

Dobermanifesto 是一个专为宠物打造的视频微博网络。用户可以从全球各地上传动物类视频,并将其发送到世界任何角落,供他人观看和体验。

在与 Compute Engine 后端往返传输数据时,他们发现实际带宽并没有达到预期:

折线图:Dobermanifesto 同可用区吞吐量,以 Gbps 为单位。

任务 1. 重现行为

为了尝试重现此行为,我们在同一可用区中创建了两个实例,并在它们之间运行了 100 次 iperf 测试。

折线图:同一可用区传输 100 次,以 Mbps 为单位

这次性能表现甚至更差!很明显,测试出了问题。我们需要该公司提供更多信息,以及更详细的重现步骤。

现在,您将设置场景。

Dobermanifesto 的环境

  1. 返回到 Compute Engine 控制台中的虚拟机实例列表。

  2. 通过 SSH 连接到 instance-1(1 个 vCPU、3.75 GB),然后运行以下命令,设置 iperf“接收器”:

iperf -s
  1. 然后,通过 SSH 连接到 instance-2(1 个 vCPU、3.75 GB),并生成指向 instance-1 的 iperf 流量:
iperf -c <external ip address of instance-1>

输出示例:

student-00-aafd1bd9c185@instance-2:~$ iperf -c 35.225.180.44 ------------------------------------------------------------ Client connecting to 35.225.180.44, TCP port 5001 TCP window size: 45.0 KByte (default) ------------------------------------------------------------ [ 3] local 10.20.0.4 port 56330 connected with 35.225.180.44 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0000-10.0010 sec 4.66 GBytes 4.00 Gbits/sec
  1. 返回到 instance-1,并输入 CTRL + C,以终止接收器。

测试环境

  1. 返回到 Compute Engine 控制台,打开另一个 SSH 窗口,连接到 instance-6(1 个 vCPU、0.6 GB,e2-micro)。

  2. 运行以下命令,将其设置为“接收器”:

iperf -s

输出示例:

student-00-aafd1bd9c185@instance-6:~$ iperf -s ------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 128 KByte (default) ------------------------------------------------------------
  1. 在 instance-2 的 SSH 窗口中,测试与 instance-6 的连接:
iperf -c <internal ip address of instance-6>

输出示例:

student-00-aafd1bd9c185@instance-2:~$ iperf -c 10.40.0.7 ------------------------------------------------------------ Client connecting to 10.40.0.7, TCP port 5001 TCP window size: 45.0 KByte (default) ------------------------------------------------------------ [ 3] local 10.40.0.5 port 54029 connected with 10.40.0.7 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 2.29 GBytes 1.96 Gbits/sec
  1. 返回到 instance-6,并输入 CTRL + C,以终止接收器。

发生了什么情况?带宽似乎增加了。您的情况可能也是如此,但也可能减少了。

在下一部分中,您将了解带宽如何受总核心数的限制,在核心数处于这个较小范围(核心数为 1)时,带宽永远不会超过 2 Gbps 左右。因此,网络速度较慢且带宽受限,这与 Dobermanifesto 的情况类似。如果您稍后使用具有 4 个 CPU 的机器进行测试,数值会更大。

核心数与 Gb/秒相关

为什么两次测试的结果差异不大?Compute Engine 文档中指出:

来自虚拟机的传出或出站流量受限于网络出站吞吐量上限。这些上限取决于虚拟机实例具有的 vCPU 数。为获得最佳性能,每个核心都存在 2 Gbps 的上限。每个额外的核心都可增加网络上限,理论上每个虚拟机不能超过 16 Gbps

这意味着,网络中的虚拟 CPU 越多,您获得的网络吞吐量就越高。

为了探究这在实践中具体表现如何,我们在同一可用区内设置了具有不同核心数的对照组,并在这些组之间运行了 1,000 次 iperf 测试。

条形图:TCP 吞吐量(按实例类型,1,000 次),显示平均值和最大值之间的差异。

随着核心数的增加,平均吞吐量和最大吞吐量也会随之增加。即使是这种简单的测试,您也可以看到高端机器存在 16 Gbps 的硬性限制。

注意:如果您使用多个线程(8 个左右)运行 iperf 测试,吞吐量可以超过 10 Gbps;如果使用 e2-standard-16 或更高配置的机器,吞吐量最高可达 16 Gbps 左右。在本实验环境中,我们没有这种规格的机器,但接下来,我们会使用多个线程进行测试。 此外,N2、N2D、C2 或 C2D 系列中还提供更高规格的虚拟机,支持选择层级 1 高带宽配置,带宽可达 50-100 Gbps。

任务 2. 如何提升性能

Dobermanifesto 的网络采用具有 1 个 vCPU 的机器。增加核心数可能有助于 Dobermanifesto 获得更佳性能。现在是时候验证这个推测了。

  1. 通过 SSH 连接到 instance-3(4 个 vCPU、15 GB 内存),然后运行以下命令:
iperf -s

输出示例:

student-00-aafd1bd9c185@instance-3:~$ iperf -s ------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 128 KByte (default) ------------------------------------------------------------
  1. 通过 SSH 连接到 instance-4(4 个 vCPU、15 GB 内存):
iperf -c <internal ip address of instance-3>

输出示例:

student-00-aafd1bd9c185@instance-4:~$ iperf -c 10.40.0.2 ------------------------------------------------------------ Client connecting to 10.40.0.2, TCP port 5001 TCP window size: 45.0 KByte (default) ------------------------------------------------------------ [ 3] local 10.40.0.4 port 54081 connected with 10.40.0.2 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 8.93 GBytes 7.67 Gbits/sec
  1. 现在,使用 4 个线程再试一次:
iperf -c <internal ip address of instance-3> -P4
  1. 使用 8 个线程:
iperf -c <internal ip address of instance-3> -P8
  1. 返回到 instance-3,并输入 CTRL + C,以终止接收器。

在这些实验中,服务器和客户端均配置为 4 个 vCPU,速度大幅提升。传输速率增加了 6.64 GB,带宽增加了 5.71 Gbps。使用多个线程后,性能可以达到该核心数的上限。

  1. 继续使用 instance-5 进行测试,这是一个性能更高且具有 4 个 vCPU 的机器,实例类型为“highcpu-4”。

此实例类型的 CPU 速度更快,但内存容量较小。您看到了哪些不同之处?如果使用多个线程呢?

现在,Dobermanifesto 团队需要确定采用哪种方案。在分析 CPU 使用情况并查看价格信息后,他们决定采用 e2-standard-4 机器,这让他们的平均吞吐量提升到之前的近 4 倍,而且成本比 e2-standard-8 机器更低。

改用更高配置的机器还有一个好处:实际运行频率降低了。事实证明,他们的机器过去需要耗费大量时间保持唤醒状态,仅仅是为了传输数据。采用更高配置的机器后,他们实例的停机时间增加了,这使得负载均衡器能够每天减少实例总数。因此,一方面,他们需要为更高配置的机器付费,但另一方面,他们每月使用的核心小时数会减少。

一旦性能表现直接影响利润,就需要权衡各类微妙而复杂的取舍关系。

应用场景 2:使用内部 IP 的 Google Cloud 网络

在下一个示例中,您将使用 iperf 测试吞吐量速度。您需要将一台机器设置为服务器,然后让其他机器连接到该服务器并对比测试结果。

Gecko Protocol 是一家 B2B 公司,提供专为游戏和其他实时图形系统构建的自定义轻量级网络协议。该公司发现,负责传输和转码大型视频和图形文件的后端机器的吞吐量低于预期。

以下是他们的基准 iperf 测试结果:

------------------------------------------------------------ Client connecting to 104.155.145.79, TCP port 5001 TCP window size: 45.0 KByte (default) ------------------------------------------------------------ [ 3] local 10.128.0.3 port 53504 connected with 104.155.145.79 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 1.03 GBytes 884 Mbits/sec

在尝试重现该测试时,尽管网络设置完全一致,但得出的测试结果却截然不同:

student-00-aafd1bd9c185@instance-2:~$ iperf -c 10.128.0.2 ------------------------------------------------------------ Client connecting to 10.128.0.2, TCP port 5001 TCP window size: 45.0 KByte (default) ------------------------------------------------------------ [ 3] local 10.128.0.3 port 38978 connected with 10.128.0.2 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 2.27 GBytes 1.95 Gbits/sec

1.95 GB/秒远高于 Gecko Protocol 在图表中看到的数值。究竟是怎么回事?

现在,我们来重现这个场景。

  1. 在控制台中,通过 SSH 连接到 instance-1,并设置 iperf 接收器:
iperf -s

输出示例:

student-00-aafd1bd9c185@instance-1:~$ iperf -s ------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 128 KByte (default) ------------------------------------------------------------
  1. 通过 SSH 连接到 instance-2,并检查外部 IP 地址的连接:
iperf -c <external ip address of instance-1>

输出示例:

student-00-aafd1bd9c185@instance-2:~$ iperf -c 35.201.145.135 ------------------------------------------------------------ Client connecting to 35.201.145.135, TCP port 5001 TCP window size: 45.0 KByte (default) ------------------------------------------------------------ [ 3] local 10.40.0.8 port 58691 connected with 35.201.145.135 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 1.36 GBytes 1.16 Gbits/sec

在与 Gecko Protocol 进一步沟通后,我们发现他们之前一直使用外部 IP 来连接机器,而我们的测试使用的是内部 IP。当机器处于同一网络中时,通过内部 IP 进行连接可以获得更高的吞吐量。

  1. 现在,检查与内部地址的连接:
iperf -c <internal ip address of instance-1>

输出示例:

student-00-aafd1bd9c185@instance-2:~$ iperf -c 10.40.0.5 ------------------------------------------------------------ Client connecting to 10.40.0.5, TCP port 5001 TCP window size: 45.0 KByte (default) ------------------------------------------------------------ [ 3] local 10.40.0.8 port 42950 connected with 10.40.0.5 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 2.26 GBytes 1.94 Gbits/sec

请对比观察这两组不同的传输速率和带宽速度。在本例中,改用内部 IP 地址后,传输速率提升了 0.9 GB,带宽则增加了 0.78 Gbps。您刚刚用事实证明,内部连接的速度确实更快。

根据您在解决 Dobermanifesto 问题时所学到的知识,使用更高配置的机器能否进一步提高网络速度?要知道,instance-2 只有 1 个 vCPU。如果机器配置更高一些,连接速度会有多快?如果配置大幅提升呢?继续使用内部 IP 地址进行测试(如果有时间,也可以测试外部 IP 地址)。

具有 4 个 vCPU 的机器

  • 通过 SSH 连接到 instance-3,并使用内部 IP 地址测试连接:
iperf -c <internal ip address of instance-1>

输出示例(您的结果可能有所不同):

student-00-aafd1bd9c185@instance-3:~$ iperf -c 10.40.0.5 ------------------------------------------------------------ Client connecting to 10.40.0.5, TCP port 5001 TCP window size: 45.0 KByte (default) ------------------------------------------------------------ [ 3] local 10.40.0.6 port 39115 connected with 10.40.0.5 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 4.53 GBytes 3.89 Gbits/sec

具有 4 个高 CPU 的机器

  • 通过 SSH 连接到 instance-5,并使用内部 IP 地址测试连接:
iperf -c <internal ip address of instance-1>

输出示例:

student-00-aafd1bd9c185@instance-5:~$ iperf -c 10.40.0.5 ------------------------------------------------------------ Client connecting to 10.40.0.5, TCP port 5001 TCP window size: 45.0 KByte (default) ------------------------------------------------------------ [ 3] local 10.40.0.3 port 39736 connected with 10.40.0.5 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 10.3 GBytes 8.84 Gbits/sec

这确实提高了吞吐率。

看来 Gecko Protocol 同样需要考虑哪种核心数才是最优选。通过这次小小的调试,他们的视频和图形数据传输速率提升到了之前的约 14 倍。考虑到他们的产品是基于高性能计算场景下的性能后端服务构建的,这一提升幅度确实惊人。

任务 3. 在您自己的环境中进行测试

本实验不涉及如何测试您自己的系统,但您可以参考以下额外信息,以便在实验结束后继续探索。如需详细了解如何测试自己的网络,请参阅使用 iPerf 测试网络吞吐量一文。

如果您有时间并想设置虚拟机进行测试,请尽管尝试。创建虚拟机时,请务必使用“iperftest”防火墙规则和标记。测试内部 IP 地址和外部 IP 地址。

用于测试自家网速的设置

  1. 在控制台中,前往导航菜单 > VPC 网络 > 防火墙。

  2. 点击创建防火墙规则。使用以下配置创建防火墙规则:

字段 值 注释
名称 iperf-testing 新规则名称
目标 网络中的所有实例
来源 IP 地址范围 0.0.0.0/0 防火墙允许来自互联网上所有 IP 地址的流量。
流量方向 入站
对匹配项执行的操作 允许
协议和端口 tcp:5001; udp:5001
  1. 点击创建。

点击“检查我的进度”以验证是否完成了以下目标: 创建防火墙规则

常见做法是尽可能让工作负载接近 100%,但这会使磁盘几乎没有空间进行碎片整理等操作。

使用率在 90-93% 属于正常范围,但如果达到 98%,性能就会下降,因为这会导致大量的资源争用。

在测试过程中,如果 IO 性能有所下降,请查看节流计数器。如果并未发生节流,请检查 CPU 使用率。如果该值很高,那问题就在这里。

任务 4. 如果时间充足

在实验界面右侧的“学生资源”部分,您可以找到与本实验相关的视频链接。非常值得一看!

“学生资源”部分,其中包含“Compute Engine and the Egress Problem”以及“Internal IP vs External IP Performance”的链接

恭喜!

恭喜!在本实验中,您学习了如何使用开源工具测试网络连接和性能,以及机器大小如何影响网络性能。

后续步骤/了解详情

Google Cloud 培训和认证

…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。

上次更新手册的时间:2026 年 7 月 7 日

上次测试实验的时间:2026 年 7 月 7 日

版权所有 2026 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。

准备工作

  1. 实验会创建一个 Google Cloud 项目和一些资源,供您使用限定的一段时间
  2. 实验有时间限制,并且没有暂停功能。如果您中途结束实验,则必须重新开始。
  3. 在屏幕左上角,点击开始实验即可开始

使用无痕浏览模式

  1. 复制系统为实验提供的用户名和密码
  2. 在无痕浏览模式下,点击打开控制台

登录控制台

  1. 使用您的实验凭证登录。使用其他凭证可能会导致错误或产生费用。
  2. 接受条款,并跳过恢复资源页面
  3. 除非您已完成此实验或想要重新开始,否则请勿点击结束实验,因为点击后系统会清除您的工作并移除该项目

此内容目前不可用

一旦可用,我们会通过邮件告知您

太好了!

一旦可用,我们会通过邮件联系您

一次一个实验

确认结束所有现有实验并开始此实验

使用无痕浏览模式运行实验

使用无痕模式或无痕浏览器窗口是运行此实验的最佳方式。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。