最大傳輸單位

最大傳輸單位 (MTU) 是指最大 IP 封包的大小 (以位元組為單位),包括 IP 標頭、第 4 層通訊協定標頭和第 4 層資料,可容納於乙太網路框架內。

有效的虛擬私有雲網路 MTU 大小

虛擬私有雲 (VPC) 網路預設使用 1,460 位元組的 MTU。您可以將虛擬私有雲網路的 MTU 設為介於 1,300 位元組和 8,896 位元組 (含首尾) 之間的任何值。常見的自訂 MTU 大小為 1,500 個位元組 (標準乙太網路) 或 8,896 個位元組 (最大值)。建議您為每個虛擬機器 (VM) 執行個體網路介面 (NIC) 設定 MTU,使其與所連 VPC 網路的 MTU 相符。詳情請參閱「VM 和 MTU 設定」。

虛擬私有雲網路中 VM 之間的通訊 Google Cloud

如果傳送和接收 VM 使用相同的虛擬私有雲網路或對等互連的虛擬私有雲網路,且這些網路的 MTU 相同,只要兩個 VM 的介面都設定為使用虛擬私有雲網路的 MTU,兩個 VM 之間就能傳送大小不超過 MTU 的 IP 封包。

為避免 MTU 不一致的問題,建議您為所有已連線的虛擬私有雲網路使用相同的 MTU。雖然建議您這麼做,但您不一定要在已連線的虛擬私有雲網路之間使用相同的 MTU。如要瞭解通訊協定如何處理虛擬私有雲網路之間 MTU 不相符的情況,請參閱不相符的 MTU、MSS 鉗制、路徑 MTU 探索

從傳送 VM 的角度來看,下列目的地的路徑代表在 VPC 網路內路由傳送的 VM 對 VM 流量:

  • 子網路主要 IPv4 或子網路次要 IPv4 位址範圍中的區域內部 IPv4 位址,包括私人 IPv4 位址範圍和私用公開 IPv4 位址範圍,由下列目的地資源使用:
    • 接收 VM 網路介面 (NIC) 的主要內部 IPv4 位址。
    • 接收 VM NIC 別名 IP 範圍中的內部 IPv4 位址。
    • 內部轉送規則的內部 IPv4 位址,適用於通訊協定轉送或內部直通式網路負載平衡器。
  • 這些目的地資源使用的內部 IPv6 子網路位址範圍
    • 指派給接收 VM NIC 的 /96 IPv6 位址範圍中的 IPv6 位址。
    • 來自內部轉送規則 IPv6 位址範圍的 IPv6 位址,適用於通訊協定轉送或內部直通式網路負載平衡器。/96
  • 這些目的地資源使用的外部 IPv6 子網路位址範圍,封包透過虛擬私有雲網路中的子網路路徑或對等互連子網路路徑轉送時
    • 指派給接收 VM NIC 的 /96 IPv6 位址範圍中的 IPv6 位址。
    • 外部轉送規則的 IPv6 位址範圍中的 IPv6 位址,適用於通訊協定轉送或外部直通式網路負載平衡器。/96

下列 VM 對 VM 路徑的處理方式,與虛擬私有雲網路外部目的地的通訊相同:

  • 如果封包目的地是接收 VM 的 NIC 外部 IPv4 位址。Google Cloud
  • 如果封包目的地是外部直通式網路負載平衡器的外部 IPv4 位址。
  • 如果封包目的地是通訊協定轉送的轉送規則外部 IPv4 位址
  • 如果封包目的地是 VM 的 NIC、外部直通式網路負載平衡器或外部通訊協定轉送轉送規則的外部 IPv6 位址 Google Cloud虛擬私有雲網路中的適用路徑使用預設網際網路閘道下一個躍點,在這個情境中,接收 VM 既不在傳送 VM 所在的虛擬私有雲網路中,也不在透過虛擬私有雲網路對等互連連線至傳送 VM 虛擬私有雲網路的虛擬私有雲網路中。

與虛擬私有雲網路外部的目的地通訊

Google Cloud 處理傳送至傳送 VM 虛擬私有雲網路外部目的地的封包,如下表所示。傳送 VM 的 VPC 網路外部目的地包括: Google Cloud 外部資源的可公開轉送 IP 位址,以及Google Cloud內客戶可用的外部 IP 位址

由於網際網路通常使用 1,500 位元組的 MTU,因此將 IP 封包大小維持在 1,500 位元組以下,通常可避免 MTU 相關的封包遺失問題。

情況 行為
TCP SYN 和 SYN-ACK 封包 Google Cloud 視需要執行 MSS 鉗位,變更 MSS 以確保封包符合 MTU。
IP 封包 MTU 介於 1,300 位元組和 1,600 位元組之間 (含) Google Cloud 不會變更封包,但 SYN 和 SYN-ACK 封包除外,如第一列所述。
IP 封包大於 1,600 個位元組 Google Cloud 會捨棄封包,並傳送「需要片段化」(IPv4 上的 ICMP) 或「封包過大」(ICMPv6) 訊息,無論 DF 位元是否開啟都一樣。

與 Google API 和服務通訊

使用任何有效虛擬私有雲網路 MTU 大小的 VM 都可以將封包傳送至 Google API 和服務,包括使用私人 Google 存取權Google API 的 Private Service Connect。本節中的詳細資料也適用於使用內部部署主機專用私人 Google 存取權,將封包傳送至 Google API 和服務的內部部署資源。

本節所述的 Google API 和服務流量路徑是由 Google Front Ends (GFE) 實作。這些 GFE 使用不可設定的固定 MTU。往返 Google API 和服務的流量一律使用 TCP 協定:如果 VM 從 MTU 與 GFE 的 MTU 不符的 VPC 網路連線至 Google API 和服務,系統會使用 TCP MSS 廣告來協商區段大小,如「MTU 不符、MSS 鉗制、路徑 MTU 探索」一文所述。 Google Cloud

封包來源 封包目的地

任何內部 IPv4 位址:主要內部 IPv4 位址,或來自 VM NIC 別名 IP 範圍的內部 IPv4 位址

使用 1 對 1 NAT 存取設定指派給 VM NIC 的外部 IPv4 位址:在這種情況下, Google Cloud 會對輸出內容執行 1 對 1 NAT,將原始來源的主要內部 IPv4 位址轉換為存取設定中指定的來源外部 IPv4 位址。

  • Google API 和服務的 IPv4 位址 (適用於 預設網域)
  • 199.36.153.4/30 (restricted.googleapis.com)
  • 199.36.153.8/30 (private.googleapis.com)
  • 適用於 Google API 和服務的 Private Service Connect 端點
雙重堆疊或僅限 IPv6 (搶先版) VM 的外部或內部 IPv6 位址
  • Google API 和服務的 IPv6 位址 (適用於 預設網域)
  • 2600:2d00:0002:1000::/64 (restricted.googleapis.com)
  • 2600:2d00:0002:2000::/64 (private.googleapis.com)

透過 Cloud VPN 通道進行通訊

Cloud VPN 具有封裝封包的閘道 MTU,以及封裝前後封包的酬載 MTU

如需確切的酬載 MTU 值和其他 Cloud VPN MTU 資訊,請參閱 Cloud VPN 說明文件中的「MTU 注意事項」。

透過 Cloud Interconnect (VLAN) 連結進行通訊

建議您為連線至相同虛擬私有雲網路的所有 VLAN 連結使用相同的 MTU,將虛擬私有雲網路的 MTU 設為相同值。如要瞭解 Cloud Interconnect VLAN 連結的 MTU,請參閱 Cloud Interconnect MTU

支援巨型封包

下表大致列出了各項產品和功能對巨型封包的支援情形: Google Cloud

產品或功能 支援巨型封包
Compute Engine
Cloud Interconnect
Cloud VPN
Google API

VM 和 MTU 設定

最佳做法是將 VM 的 NIC MTU 與 NIC 連接的虛擬私有雲網路 MTU 相符:

  • 系統會使用 DHCP 選項 26,自動將以公開 OS 映像檔為基礎的 Linux VM 的每個 NIC MTU,設為對應的虛擬私有雲網路 MTU。

  • 公開 OS 映像檔為基礎的 Windows VM,其每個 NIC 的 MTU 都會設定為 1,460 個位元組。 如果您變更虛擬私有雲網路的 MTU,而該網路包含以公開 OS 映像檔為基礎的 Windows VM,則必須變更 Windows VM 的 MTU 設定

  • 如果您使用自訂客體 OS 映像檔,則必須設定 NIC MTU,或使用 DHCP 選項 26 驗證客體 OS 是否接受 VPC 網路 MTU。

  • 如果 VM 有多個網路介面,請將每個 NIC MTU 設為對應的 VPC 網路 MTU。

  • 如果 NIC MTU 必須與 VPC 網路 MTU 不同,請將 NIC MTU 設為小於 VPC 網路 MTU。強制減少 NIC MTU 有利於某些進階網路情境。

變更 VPC 網路的 MTU

如果變更執行中 VM 的 VPC 網路 MTU,請注意下列事項:

  • 如果減少 VPC 網路 MTU,必須 停止並啟動每個 VM。 從 VM 的客體作業系統內重新啟動 VM 不會更新其 MTU。

  • 如果增加 VPC 網路 MTU,使用 VPC 網路執行的 VM 必須停止並啟動,才能利用增加的 VPC 網路 MTU。在停止並重新啟動每個 VM 之前,VM 會繼續使用先前的 (較低) MTU 值。

如需操作說明,請參閱變更虛擬私有雲網路的 MTU 設定

GKE 和 MTU 設定

為 Pod 介面選取的 MTU 取決於叢集節點使用的容器網路介面 (CNI) 和基礎 VPC MTU 設定。詳情請參閱「Pod」。

Pod 介面 MTU 值為 1460,或從節點的主要介面繼承。

CNI MTU GKE Standard
kubenet 1460 預設
kubenet
(GKE 1.26.1 以上版本)
已繼承 預設
Calico 1460

使用 --enable-network-policy 啟用。

詳情請參閱使用網路政策控管 Pod 和服務之間的通訊

netd 已繼承 使用下列任一項目啟用:
GKE Dataplane V2 已繼承

使用 --enable-dataplane-v2 啟用。

詳情請參閱「使用 GKE Dataplane V2」。

MTU 不相符、MSS 鉗制、路徑 MTU 探索

本節說明 TCP 和非 TCP 通訊協定如何處理不相符的 MTU。

TCP 通訊協定

TCP 通訊協定會自動處理 MTU 不符的情況。每次開啟 TCP 連線時,用戶端和伺服器都會個別計算各自的有效 TCP 最大區段大小 (MSS) 值。用戶端和伺服器不必就相同的有效 MSS 值達成共識。

  • 用戶端的有效 TCP 最大區段大小 (MSS):從用戶端傳送至伺服器的 TCP 區段中,可傳輸的最大資料量是下列兩個值的最小值

    • 用戶端在建立 TCP 連線期間,從伺服器收到的 SYN-ACK 封包中 MSS 欄位的值。

    • 用戶端網路介面的 MTU 減去 40 個位元組。扣除的 40 個位元組包括 IP 標頭的 20 個位元組,以及基本 TCP 標頭的 20 個位元組。

  • 伺服器的有效 TCP 最大區段大小 (MSS):從伺服器傳送至用戶端的 TCP 區段中,可傳輸的最大資料量是下列兩個值的最小值

    • 伺服器在建立 TCP 連線期間,從用戶端收到的 SYN 封包中 MSS 欄位的值。

    • 伺服器網路介面的 MTU,減去 40 個位元組。扣除的 40 個位元組包括 IP 標頭的 20 個位元組,以及基本 TCP 標頭的 20 個位元組。

TCP MSS 箝制

TCP MSS 鉗制程序是指用戶端與伺服器之間的網路裝置,在用戶端與伺服器之間傳送封包時,會變更 SYN 和 SYN-ACK 封包中的 MSS 值。 Google Cloud 會在將封包傳送至虛擬私有雲網路外部目的地時,使用 MSS 鉗制。

Cloud VPN 通道和 Cloud Interconnect VLAN 連結也會使用 MSS 鉗制。詳情請參閱 Cloud VPN 說明文件中的「封包封裝和處理」一節,以及「Cloud Interconnect MTU」。

虛擬私有雲網路不會對虛擬私有雲網路內下一個躍點轉送的封包執行 MSS 鉗制,因為 TCP 通訊協定本身就已足夠。

非 TCP 通訊協定

如果涉及兩種不同的虛擬私有雲網路 MTU,則 UDP 等其他通訊協定需要特別注意。傳送系統有責任發出符合網路介面 MTU、接收系統網路介面 MTU,以及所有中間網路 MTU 的封包。 Google Cloud 不會針對虛擬私有雲網路中下一個躍點所路由傳送的封包執行 IP 封包重組。

如果 IP 封包過大而無法傳送 (例如封包超過接收端 VM NIC 所在的 VPC 網路 MTU), Google Cloud 會捨棄封包。如果封包已設定 DF 位元, Google Cloud 也會將「需要分段」訊息 (透過 IPv4 的 ICMP) 或「封包過大」訊息 (ICMPv6) 傳回給傳送端。

Google Cloud 在下列情況中,即使 DF 位元關閉,也會傳送「需要分段」或「封包過大」訊息:

  • 如果虛擬私有雲網路 MTU 小於 1,600 位元組,且傳送的封包超過虛擬私有雲網路 MTU。
  • 如果虛擬私有雲網路 MTU 為 1,600 個位元組以上,且傳送的封包超過 1,600 個位元組。

虛擬機器傳送封包時,需要 ICMP Fragmentation Needed 或 Packet Too Big 訊息,才能使用路徑 MTU 探索 (PMTUD)。為說明 PMTUD 的運作方式,請參考下列範例:兩個虛擬機器位於不同的 VPC 網路,並透過 VPC 網路對等互連建立連線:

  • 傳送 VM 的 NIC 位於 MTU 為 8,896 位元組的虛擬私有雲網路中。
  • 接收 VM 的 NIC 位於 MTU 為 1,460 位元組的 VPC 網路中。
  • 傳送 VM 會發出 8,000 位元組的 IP 封包,並設定「不分段」(DF) 位元。由於封包過大,無法傳送至接收 VM,Google Cloud 會將「需要分段」或「封包過大」訊息傳送至傳送 VM。這則訊息表示傳送者嘗試重新傳輸連線封包時,可使用的最大 IP 封包大小。
  • 傳送 VM 的作業系統會使用這項資訊,在將後續封包傳送至接收 VM 時,縮小 IP 封包大小。

由於 PMTUD 產生的「需要分段」或「封包過大」封包使用 ICMP 通訊協定,且來源與原始封包的目的地相符,因此 PMTUD 還有下列額外需求:

  • 您必須設定允許輸入的 VPC 防火牆規則防火牆政策中的規則,允許來自符合原始封包目的地的來源的 ICMP (適用於 IPv4) 或 ICMPv6 (適用於 IPv6)。為簡化防火牆設定,建議允許來自所有來源的 ICMP 和 ICMPv6。
  • 內部直通式網路負載平衡器和內部通訊協定轉送的轉送規則必須使用 L3_DEFAULT 通訊協定,才能處理 PMTUD 的 ICMP 和原始封包使用的通訊協定。

後續步驟

歡迎試用

如果您未曾使用過 Google Cloud,歡迎建立帳戶,親自體驗實際使用 VPC 的成效。新客戶可以獲得價值 $300 美元的免費抵免額,可用於執行、測試及部署工作負載。

免費試用虛擬私有雲