最大伝送単位

最大伝送単位(MTU)はイーサネット フレーム内に収まる IP パケットの最大サイズ(バイト単位)です。これには、IP ヘッダー、レイヤ 4 プロトコル ヘッダー、レイヤ 4 データが含まれます。

有効な VPC ネットワークの MTU サイズ

Virtual Private Cloud(VPC)ネットワークのデフォルトの MTU は 1,460 バイトです。VPC ネットワークの MTU は、1,300~8,896 バイトの任意の値に設定できます。一般的なカスタム MTU サイズは 1,500 バイト(標準イーサネット)または 8,896 バイト(可能な最大値)です。各仮想マシン(VM)インスタンスのネットワーク インターフェース(NIC)の MTU を接続先の VPC ネットワークの MTU に合わせて構成することをおすすめします。詳しくは、VM と MTU の設定をご覧ください。

VPC ネットワーク内の Google Cloud VM 間の通信

VM の送受信で同じ VPC ネットワークを使用する場合、または同じ MTU 値を持つピアリングされた VPC ネットワークを使用する場合、両方の VM のインターフェースが VPC ネットワークの MTU を使用するように構成されていれば、2 つの VM 間で MTU サイズまでの IP パケットを送信できます。

MTU 不一致の問題を回避するには、接続されているすべての VPC ネットワークで同じ MTU を使用することをおすすめします。これはおすすめの方法ですが、接続された VPC ネットワーク間で同じ MTU を使用しなければならないというわけではありません。VPC ネットワーク間で MTU が一致しない状況のプロトコル処理については、MTU の不一致、MSS クランプ、パス MTU 探索をご覧ください。

送信側の VM から見ると、次の宛先へのパスは、VPC ネットワーク内でルーティングされる VM 間のトラフィックを表します。

  • サブネットのプライマリ IPv4 またはセカンダリ IPv4 アドレス範囲のリージョン内部 IPv4 アドレス。これには、次に示す宛先リソースで使用されるプライベート IPv4 アドレス範囲とプライベートで使用されるパブリック IPv4 アドレス範囲が含まれます。
    • 受信側の VM のネットワーク インターフェース(NIC)のプライマリ内部 IPv4 アドレス。
    • 受信側の VM の NIC のエイリアス IP 範囲の内部 IPv4 アドレス。
    • プロトコル転送または内部パススルー ネットワーク ロードバランサの内部転送ルールの内部 IPv4 アドレス。
  • 次に示す宛先リソースで使用される内部 IPv6 サブネット アドレス範囲
    • デュアルスタックの受信側の VM の NIC に割り当てられた /96 IPv6 アドレス範囲の IPv6 アドレス。
    • プロトコル転送または内部パススルー ネットワーク ロードバランサの内部転送ルールの /96 IPv6 アドレス範囲の IPv6 アドレス。
  • パケットが VPC ネットワーク内のサブネット ルートまたはピアリング サブネット ルートを使用してルーティングされる場合に、次に示す宛先リソースで使用される外部 IPv6 サブネット アドレス範囲
    • デュアルスタックの受信側の VM の NIC に割り当てられた /96 IPv6 アドレス範囲の IPv6 アドレス。
    • プロトコル転送または外部パススルー ネットワーク ロードバランサの外部転送ルールの /96 IPv6 アドレス範囲の IPv6 アドレス。

次の VM 間のパスは、VPC ネットワーク外の宛先と通信を行う場合と同じように処理されます。

  • パケットの宛先が受信側の Google Cloud VM の NIC の外部 IPv4 アドレスの場合。
  • パケットの宛先が外部パススルー ネットワーク ロードバランサの外部 IPv4 アドレスの場合。
  • パケットの宛先がプロトコル転送の転送ルールの外部 IPv4 アドレスの場合。
  • パケットの宛先が Google Cloud VM の NIC、外部パススルー ネットワーク ロードバランサ、または外部プロトコル転送の転送ルールの外部 IPv6 アドレスで、VPC ネットワーク内で適用可能なルートでデフォルトのインターネット ゲートウェイのネクストホップを使用している場合。このシナリオでは、受信側の VM は送信側の VM と同じ VPC ネットワークに存在しません。また、VPC ネットワーク ピアリングを使用して送信側の VM の VPC ネットワークに接続された VPC ネットワークにも存在しません。

VPC ネットワーク外の宛先との通信

Google Cloud では、送信側の VM の VPC ネットワーク外の宛先に送信されたパケットは次の表に示すように処理されます。送信側の VM の VPC ネットワーク外の宛先には、Google Cloud の外部にあるリソース用に一般公開され、ルーティング可能な IP アドレスや、Google Cloud 内でユーザーが使用できる外部 IP アドレスが含まれます。

インターネットでは通常 1,500 バイトの MTU を使用するため、IP パケットサイズを 1,500 バイト以下に維持することで MTU 関連のパケットロスを回避できます。

状況 動作
TCP SYN パケットと SYN-ACK パケット Google Cloud は、必要に応じて MSS クランプを実行し、パケットが MTU 内に収まるように MSS を変更します。
1,300 バイト以上 1,600 バイト以下の IP パケットの MTU 最初の行で説明されている SYN パケットと SYN-ACK パケットを除き、Google Cloud はパケットを変更しません。
1,600 バイトを超える IP パケット Google Cloud はパケットをドロップし、DF ビットがオンかどうかに関係なく、Fragmentation Needed(ICMP over IPv4)または Packet Too Big(ICMPv6)メッセージを送信します。

Google API とサービスへの通信

有効な VPC ネットワークの MTU サイズを使用する VM は、限定公開の Google アクセスGoogle API 用の Private Service Connect の使用など、Google API とサービスにパケットを送信できます。このセクションの詳細は、オンプレミス ホスト用の限定公開の Google アクセスを使用して Google API やサービスにパケットを送信するオンプレミス リソースにも適用されます。

このセクションで説明する Google API とサービスへのトラフィック パスは、Google Front End(GFE)によって実装されます。これらの GFE は、構成不可の固定 MTU を使用します。Google Cloud から Google API やサービスへのトラフィックでは、常に TCP プロトコルを使用します。MTU が GFE の MTU と一致しない VPC ネットワークから VM を Google API やサービスに接続する場合は、MTU の不一致、MSS クランプ、パス MTU 探索で説明されているように、TCP MSS アドバタイズを使用してセグメント サイズがネゴシエートされます。

パケットの送信元 パケットの宛先

任意の内部 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 エンドポイント
デュアル スタック 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)アタッチメントを介した通信

同じ VPC ネットワークに接続しているすべての VLAN アタッチメントに同じ MTU を使用することと、VPC ネットワークの MTU を同じ値に設定することをおすすめします。Cloud Interconnect VLAN アタッチメントの MTU の詳細については、Cloud Interconnect MTU をご覧ください。

ジャンボ フレームのサポート

次の表は、Google Cloud のプロダクトと機能におけるジャンボ フレームのサポートをまとめたものです。

サービスまたは機能 ジャンボ フレームのサポート
Compute Engine
Cloud Interconnect
Cloud VPN ×
Google API ×

VM と MTU の設定

ベスト プラクティスとして、VM の NIC MTU を NIC が接続されている VPC ネットワークの MTU と一致させます。

  • 公開 OS イメージに基づく Linux VM の各 NIC MTU は、DHCP オプション 26 を使用し、それぞれの VPC ネットワーク MTU に自動的に設定されます。

  • 公開 OS イメージに基づく Windows VM の各 NIC MTU は、1,460 バイトの固定 MTU で構成されています。公開 OS イメージに基づく Windows VM が存在する VPC ネットワークの MTU を変更する場合は、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 を再起動しても、MTU は更新されません。

  • VPC ネットワーク MTU を増やすと、VPC ネットワークで実行中の VM は、VM が停止して起動されるまで、増加した VPC ネットワーク MTU を利用しません。各 VM が停止して再起動されるまで、VM は以前(低い方)の MTU 値を引き続き使用します。

操作については、VPC ネットワークの MTU 設定を変更するをご覧ください。

GKE と MTU の設定

Pod インターフェースに選択される MTU は、クラスタノードで使用される Container Network Interface(CNI)と、基盤となる VPC MTU の設定によって異なります。詳細については、Pod をご覧ください。

Pod インターフェースの MTU 値は 1460 か、ノードのプライマリ インターフェースから継承されます。

CNI MTU GKE Standard
kubenet 1460 デフォルト
kubenet
(GKE バージョン 1.26.1 以降)
継承 デフォルト
Calico 1460

--enable-network-policy を使用して有効にします。

詳細については、ネットワーク ポリシーを使用して Pod と Service 間の通信を制御するをご覧ください。

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 セグメント内の送信可能なデータの最大量は、次の 2 つの値のいずれか小さい方です。

    • TCP 接続の確立中にクライアントがサーバーから受信した SYN-ACK パケットの MSS フィールドの値。

    • クライアントのネットワーク インターフェースの MTU から 40 バイトを差し引いた値。差し引かれた 40 バイトには、IP ヘッダーの 20 バイトとベース TCP ヘッダーの 20 バイトが含まれます。

  • サーバーの有効な TCP 最大セグメント サイズ(MSS): サーバーからクライアントに送信される TCP セグメント内の送信可能なデータの最大量は、次の 2 つの値のいずれか小さい方です。

    • TCP 接続の確立中にサーバーがクライアントから受信した SYN パケットの MSS フィールドの値。

    • サーバーのネットワーク インターフェースの MTU から 40 バイトを差し引いた値。差し引かれた 40 バイトには、IP ヘッダーの 20 バイトとベース TCP ヘッダーの 20 バイトが含まれます。

TCP MSS クランプ

TCP MSS クランプは、クライアントとサーバー間のネットワーク デバイスが、クライアントとサーバー間でパケットをルーティングする際に、SYN パケットと SYN-ACK パケットの MSS 値を変更するプロセスです。Google Cloud では、VPC ネットワーク外の宛先にパケットを送信するたびに MSS クランプを使用します。

Cloud VPN トンネルと Cloud Interconnect VLAN アタッチメントも MSS クランプを使用します。詳細については、Cloud VPN ドキュメントのパケットのカプセル化と処理Cloud Interconnect MTU をご覧ください。

TCP プロトコル自体で十分なため、VPC ネットワークは、VPC ネットワーク内のネクストホップによってルーティングされたパケットに対して MSS クランプを実行しません。

非 TCP プロトコル

2 つの異なる VPC ネットワーク MTU が関係する場合、他のプロトコル(UDP など)では特別な注意が必要です。ネットワーク インターフェースの MTU、受信側のシステムのネットワーク インターフェースの MTU、および、その間にあるすべてのネットワークの MTU に収まるパケットを送信するのは、送信側のシステムの責任です。Google Cloud では、VPC ネットワーク内のネクストホップによってルーティングされたパケットに対して IP の断片化は実行されません。

IP パケットが大きすぎて配信できない場合(パケットが受信側の VM の NIC が配置されている VPC ネットワークの MTU を超える場合など)、Google Cloud はパケットを破棄します。パケットに DF ビットが設定されている場合、Google Cloud は Fragmentation Needed(ICMP over IPv4)または Packet Too Big(ICMPv6)メッセージを送信側に返します。

DF ビットがオフの場合でも、次の状況になると Google Cloud は Fragmentation Needed または Packet Too Big メッセージを送信します。

  • VPC ネットワークの MTU が 1,600 バイト未満で、送信されるパケットが VPC ネットワーク MTU を超えている場合。
  • VPC ネットワークの MTU が 1,600 バイト以上で、送信されるパケットが 1,600 バイトを超えている場合。

パケットを送信している VM がパス MTU 探索(PMTUD)を使用するには、ICMP Fragmentation Needed または Packet Too Big メッセージが必要です。PMTUD の仕組みを説明するために、次の例について考えてみましょう。ここでは、VPC ネットワーク ピアリングを使用して別の VPC ネットワーク内に 2 台の VM が存在します。

  • VPC ネットワーク内の送信側の VM の NIC で、8,896 バイトの MTU が構成されています。
  • 受信側 VM の VPC ネットワーク内の NIC で、1,460 バイトの MTU が構成されています。
  • 送信側の VM は、Don't Fragment(DF)ビットが設定されている 8,000 バイトの IP パケットを送信します。パケットが大きすぎて受信側の VM に配信できないため、Google Cloud は Fragmentation Required または Packet Too Big というメッセージを送信元の VM に送信します。このメッセージには、送信側が接続用のパケットを再送信するときに使用できる IP パケットの最大サイズを示しています。
  • 送信側の VM のオペレーティング システムは、後続のパケットを受信側の VM に送信するときに、この情報を使用して IP パケットサイズを小さくします。

PMTUD によって生成された Fragmentation Needed または Packet Too Big パケットは ICMP プロトコルを使用し、送信元が元のパケットの宛先と一致するため、PMTUD には次の追加要件があります。

  • ICMP(IPv4 の場合)または ICMPv6(IPv6 の場合)が元のパケットの宛先と一致する送信元からのみ許可されるように、上り(内向き)許可の VPC ファイアウォール ルールまたはファイアウォール ポリシーのルールを構成する必要があります。ファイアウォールの構成を簡素化するために、すべての送信元からの ICMP と ICMPv6 を許可することを検討してください。
  • 内部パススルー ネットワーク ロードバランサと内部プロトコル転送の転送ルールでは、PMTUD の ICMP と元のパケットで使用されるプロトコルの両方を処理するように、L3_DEFAULT プロトコルを使用する必要があります。

次のステップ

使ってみる

Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの VPC のパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。

VPC 無料トライアル