最大傳輸單位

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

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

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

虛擬私有雲網路中運算執行個體之間的通訊

如果符合下列條件,兩個運算執行個體之間可以傳送大小上限為 MTU 的 IP 封包:

  • 傳送和接收執行個體使用相同的虛擬私有雲網路,或具有相同 MTU 的對等互連虛擬私有雲網路
  • 兩個執行個體的介面都已設定為使用虛擬私有雲網路 MTU。

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

從傳送執行個體的角度來看,下列目的地的路徑代表在虛擬私有雲網路中轉送的執行個體對執行個體流量:

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

系統會以與虛擬私有雲網路外部目的地通訊相同的方式處理下列執行個體對執行個體路徑:

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

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

Google Cloud 處理從運算執行個體傳送至傳送執行個體虛擬私有雲網路外部目的地的封包,如下表所示。傳送執行個體虛擬私有雲網路以外的目的地,包括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 會捨棄封包,並在 DF 位元開啟和關閉時,傳送「需要片段化」(IPv4 上的 ICMP) 或「封包過大」(ICMPv6) 訊息。

與 Google API 和服務通訊

使用任何有效虛擬私有雲網路 MTU 大小的運算執行個體,都可以將封包傳送至 Google API 和服務,包括使用Private Google AccessGoogle API 的 Private Service Connect。本節中的詳細資料也適用於使用地端部署主機的 Private Google Access,將封包傳送至 Google API 和服務的地端部署資源。

本節所述的 Google API 和服務流量路徑是由 Google 前端 (GFE) 實作。這些 GFE 使用不可設定的固定 MTU。從 Google Cloud 到 Google API 和服務的流量一律使用 TCP 協定:如果運算執行個體從 MTU 與 GFE MTU 不符的虛擬私有雲網路連線至 Google API 和服務,系統會使用 TCP MSS 廣告來協商區隔大小,如「MTU 不符、MSS 鉗制、路徑 MTU 探索」一文所述。

封包來源 封包目的地

任何內部 IPv4 位址:主要內部 IPv4 位址或執行個體 NIC 別名 IP 範圍的內部 IPv4 位址

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

  • Google API 和服務的 IPv4 位址 (適用於 預設網域)
  • 199.36.153.4/30 (受限。googleapis.com)
  • 199.36.153.8/30 (私人。googleapis.com)
  • 適用於 Google API 和服務的 Private Service Connect 端點
雙重堆疊或僅支援 IPv6 的執行個體適用的外部或內部 IPv6 位址
  • Google API 和服務的 IPv6 位址 (適用於 預設網域)
  • 2600:2d00:0002:1000::/64 (受限。googleapis.com)
  • 2600:2d00:0002:2000::/64 (私人。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」。

透過防火牆端點進行通訊

如果您使用防火牆端點,請為虛擬私有雲網路設定適當的 MTU。如果虛擬私有雲網路的 MTU 設定超過防火牆端點支援的封包大小,Cloud Next Generation Firewall 就無法順利執行第 7 層檢查。詳情請參閱「支援的封包大小」。

支援巨型封包

巨型封包的酬載大小超過 1,460 個位元組。下表彙整了 Google Cloud 產品和功能的巨型封包支援情況:

產品或功能 支援巨型封包
Compute Engine
Cloud Interconnect
防火牆端點
Cloud VPN
Google API

運算執行個體和 MTU 設定

最佳做法是將運算執行個體 NIC 的 MTU 與 NIC 連線的虛擬私有雲網路 MTU 相符。NIC MTU 設定會因作業系統和設定而異:

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

  • 公開作業系統映像檔為基礎的 Windows 執行個體:根據預設,每個 NIC MTU 都會設定為 1,460 位元組的固定 MTU。如果您變更虛擬私有雲網路的 MTU,而該網路包含以公開作業系統映像檔為基礎的 Windows 執行個體,則必須變更 Windows 執行個體的 MTU 設定

  • 自訂客層 OS 映像檔:您必須設定 NIC MTU,或使用 DHCP 選項 26 驗證客層 OS 是否接受虛擬私有雲網路 MTU。

  • 具有多個網路介面的執行個體:將每個 NIC MTU 設為對應的虛擬私有雲網路 MTU。

如果 NIC MTU 必須與虛擬私有雲網路 MTU 不同,請將 NIC MTU 設為小於虛擬私有雲網路 MTU 的值。在某些進階網路情境中,強制降低 NIC MTU 很有幫助。

變更虛擬私有雲網路的 MTU

為避免連線問題,變更虛擬私有雲網路 MTU 前,請務必先停止每個運算執行個體。從執行個體的訪客作業系統重新啟動執行個體不會更新 MTU。如果您選擇將執行個體設定為低於網路 MTU 的 MTU,變更 MTU 前仍須停止執行個體。

如要進一步瞭解如何變更網路 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 封包過大而無法傳送 (例如封包超過接收端運算執行個體 NIC 所在的虛擬私有雲網路 MTU), Google Cloud 會捨棄 封包。如果封包已設定 DF 位元, Google Cloud 也會將「需要分段」(IPv4 的 ICMP) 或「封包過大」(ICMPv6) 訊息傳回給傳送端。

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

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

如果運算執行個體要傳送封包,就必須使用路徑 MTU 探索 (PMTUD),因此需要 ICMP 封包分段或封包過大訊息。為說明 PMTUD 的運作方式,請參考以下範例:兩個運算執行個體位於不同的 VPC 網路,且透過 VPC 網路對等互連建立連線:

  • 傳送執行個體在 MTU 為 8,896 位元組的虛擬私有雲網路中,有一個 NIC。
  • 接收端執行個體在 MTU 為 1,460 位元組的虛擬私有雲網路中具有 NIC。
  • 傳送端執行個體會發出 8,000 位元組的 IP 封包,並設定「請勿分段」(DF) 位元。由於封包過大,無法傳送至接收端執行個體,因此 Google Cloud 會傳送「需要分段」或「封包過大」訊息給傳送端執行個體。這則訊息會指出傳送端嘗試重新傳輸連線封包時,可使用的最大 IP 封包大小。
  • 傳送例項的作業系統會使用這項資訊,在將後續封包傳送至接收例項時,降低 IP 封包大小。

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

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

後續步驟

歡迎試用

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

免費試用虛擬私有雲