高级 VPC 概念

本页面介绍了有关使用虚拟私有云 (VPC) 网络的其他详细信息。如果您还没有阅读主要的 VPC 网络概览,请先阅读那部分内容。

高级 VPC 网络详细信息

此部分介绍了一些深层 VPC 网络详细信息。对于典型的使用情景,您不并需要阅读此内容,但这些信息可让您更深入地了解 VPC 网络的工作原理。下图展示了这些深层详细信息,更多信息见相应部分。

更为详细的 VPC 网络示意图

系统组件和功能

在后台,不同的 VPC 网络功能由系统的不同部分处理。其中一些是标准网络功能,有详尽的文档记录,还有一些功能专门针对 VPC 网络。其中的部分功能可由您配置,也有一些功能不能由您配置。VPC 网络使用 Linux 的 VIRTIO 网络模块来模拟以太网卡和路由器功能,但网络堆栈中较高的级别(例如 ARP 查询)则使用标准网络软件进行处理。

ARP 查询
实例内核发出 ARP 请求,VPC 网络发出 ARP 回复。MAC 地址与 IP 地址之间的映射由实例内核处理。
MAC 对照表、IP 对照表、活动连接表
这些表托管在底层 VPC 网络中,不能由用户检查或配置。
DNS 服务器

各实例的元数据服务器充当 DNS 服务器。它将所有 VPC 网络 IP 地址的 DNS 条目存储在本地 VPC 网络中,并调用 Google 的公开 DNS 服务器处理 VPC 网络以外的条目。您不能配置此 DNS 服务器。每个实例上的 DHCP 客户端均进行了配置,用于管理实例的 /etc/resolv.conf 文件。

您可以通过修改 DHCP 政策将自己的搜索域或域名服务器添加到实例的 /etc/resolv.conf。许多 Linux 发行版通过 /etc/dhcp/dhclient.conf 允许持久保留这些修改。如需了解详情,请参阅内部 DNS 文档。

VPC 网络与外部之间的数据包处理

进出 VPC 网络的数据包由网络代码进行处理,网络代码会根据防火墙规则、外部 IP 对照表和活动连接表检查数据包。VPC 网络还对进出 VPC 网络的数据包执行 NAT。

实例接收数据包

实例内核以标准方式接收数据包,并将其转换为流。

实例发送数据包

实例内核以标准方式发送数据包,并将其转换为流。接口和网络功能使用 VIRTIO 网络模块进行建模。

详细的连接演示

下面进一步详细介绍了在实例发起 VPC 网络调用时发生的情况。

实例发起调用:

  1. 如果目标地址是实例名称或诸如 www.google.com 之类的网址,则此实例将调用其元数据服务器上的 DNS 服务并获取匹配的 IP 地址。您可以对实例进行配置以查询另一项 DNS 服务,但您无法解析实例名称。
  2. 目标 IP 地址根据子网的 IP 地址范围进行检查,而每个实例都了解此范围。

    1. 如果 IP 地址位于 VPC 网络以外:

      1. 实例将数据包发送到子网的网关 MAC 地址,并将目的地设置为数据包的最终目的地。实例可能需要发出 ARP 请求来解析网关的 MAC 地址。

      2. VPC 网络重写 IP 标头,以将实例的外部 IP 地址声明为来源。如果该实例没有外部 IP 地址,则不允许该调用,并且 VPC 网络会在不通知发送方的情况下丢弃该数据包。

      3. VPC 网络记录传出数据包,并将来源和目的地添加到活动连接表。

      4. VPC 网络将数据包发送到其目的地。

      5. 目的地获取数据包并作出响应(如果它选择这样做)。

      6. VPC 网络接收到响应,查询活动连接表,在确定此连接属于活动连接后允许此连接。VPC 网络查询其网络/外部 IP 对照表,并将实例的外部 IP 地址替换为匹配的网络地址,再将数据包发送到来源实例。

      7. 实例接收数据包。

    2. 如果目标 IP 地址在 VPC 网络内:

      1. 该实例配置了使用 255.255.255.255 掩码的 IP 地址,因此实例会将该数据包发送到子网的网关 MAC 地址。实例可能需要首先发出 ARP 请求来解析网关的 MAC 地址。

      2. 使用代理 ARP 的 VPC 网络以目的地实例的 MAC 地址作为响应。

      3. GCP 将数据包转发到 VPC 网络内的目标 IP 地址。

      4. 目标实例接收数据包。目标实例检查入站防火墙,确定是否允许数据包。如果不允许,系统会静默地丢弃数据包。否则,实例会处理数据包。

外部实例或计算机调用实例:

  1. 外部调用方将数据包发送到 VPC 网络拥有的实例外部 IP 地址。

  2. VPC 网络将数据包与活动连接表进行对照,确定此连接是否属于现有连接:

    1. 如果此连接并非现有连接,VPC 网络将查找防火墙规则以允许连接。
    2. 如果没有相应的防火墙规则,VPC 网络会在不通知发送方的情况下丢弃数据包。
  3. 如果存在现有连接或有效的防火墙规则,VPC 网络将检查其对照表,将外部 IP 替换为数据包中相应的内部 IP,将传入数据包记录在活动连接表中,并将数据包发送到目标实例。

  4. 实例接收数据包,并且在将数据包发送到网络范围以外时,会按照 IP 地址位于 VPC 网络 IP 范围以外的情况中的说明进行响应。

  5. VPC 网络接收回复,在活动连接表中查找匹配的传入请求,并允许数据包通过。在发送之前,它会将实例的内部 IP 替换为其查找表中对应的外部 IP,以修改来源 IP 地址。

衡量 VPC 网络吞吐量

来自虚拟机的出站流量受限于每台虚拟机的出站吞吐量上限。该上限是以下两个值中的较小值:16 Gbits/秒 (Gbps);2 Gbps 乘以虚拟机中 vCPU 的数量。您不能超出上限,但它并不表示出站流量的实际吞吐量。无法保证您的流量可以实现最大吞吐量,这取决于除上限之外的许多因素。详细了解出站吞吐量上限

要衡量与这些上限相关的实例性能,请使用 PerfKitBenchMarker 来衡量实例的出站吞吐量性能。

例如,在本地计算机上运行以下命令。该命令将创建一个实例并衡量其性能,其中的变量含义如下:

  • [MACHINE_TYPE] 是要测试的机器类型(例如 n1-standard-32)。
  • [ZONE] 是指要在哪个地区创建实例。
  • [NUMBER_OF_VCPUS] 是实例的 vCPU 数量(例如,32 表示 n1-standard-32 机器类型)。

衡量单一流性能的方法如下:

./pkb.py --cloud=GCP --machine_type=[MACHINE_TYPE] --benchmarks=iperf --ip_addresses=INTERNAL --zones=[ZONE]

测量多流性能的方法如下:

./pkb.py --cloud=GCP --machine_type=[MACHINE_TYPE] --benchmarks=iperf --ip_addresses=INTERNAL --zones=[ZONE] --iperf_sending_thread_count=[NUMBER_OF_VCPUS]

后续步骤

  • 请参阅 VPC 概览,了解 GCP VPC 网络。
  • 请参阅使用 VPC,了解如何创建和修改 VPC 网络。
此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页