ネットワーク接続の最大送信単位 (MTU) は、接続を介して送信できる最大パケットのサイズです。 MTUサイズには、IPヘッダーとペイロードのサイズが含まれ、イーサネットヘッダーのサイズは含まれません。 接続のMTUが大きいほど、単一のパケットで渡すことができるデータが多くなります。 このトピックでは、ジャンボフレームと、Elastic Compute Service (ECS) インスタンスのネットワークインターフェイスのMTUを変更する方法について説明します。
ジャンボフレーム
ジャンボフレームは、1,500バイトを超えるペイロードを有するイーサネット (登録商標) フレームであり、IEEE 802.3規格によって設定される制限である。 ジャンボフレームは、高いスループットと高いネットワークパフォーマンスを提供するために、パケットあたりのペイロードサイズと、パケットオーバーヘッドではないパケットの割合を増加させます。 Alibaba Cloudは、サイズが8,500バイトのジャンボフレームをサポートしており、8,500バイトのペイロードを持つイーサネットフレームを送信できます。
すべてのECSインスタンスは1,500バイトのMTUをサポートしています。 購入可能な次の第8世代インスタンスファミリーは、8,500バイトのMTUもサポートしています。g8i、c8i、r8i、g8a、c8a、r8a、g8ae、c8ae、r8ae、g8y、c8y、およびr8y。 詳細については、「インスタンスファミリーの概要」をご参照ください。
考慮事項
ネットワークパスのMTUとピアホストのMTUも、ジャンボフレームを使用できるかどうかを決定する要因です。 サイズがMTUを超えるパケットは、Alibaba Cloud転送コンポーネントによって断片化またはドロップされます。 ネットワークパスのMTUは、パス内の各ホップのMTUの最小値である。 詳細については、このトピックの「ネットワークパスのMTUを超えるパケットの処理」をご参照ください。
次のシナリオでジャンボフレームを使用すると、接続性またはパフォーマンスの問題が発生する可能性があります。
Server Load Balancer (SLB) インスタンスに関連付けられているECSインスタンスまたはホストにアクセスするためにUDPまたはICMP (Internet Control Messages Protocol) ジャンボフレームを使用すると、断片化されたパケットがSLBインスタンスによって期待どおりに転送されず、ドロップされる可能性があります。 これにより、ネットワーク接続の問題が発生します。 詳細については、このトピックの「クラウドネットワークサービスのMTU」セクションをご参照ください。
MTUミスマッチシナリオで通信を確立するためにUDPまたはICMPジャンボフレームが使用される場合、パケットが断片化され、ネットワークパフォーマンスが低下する可能性があります。 詳細については、このトピックの「ホスト間のネットワークパスのMTU」セクションおよび「クラウドネットワークサービスのMTU」セクションをご参照ください。
ジャンボフレームをサポートするECSインスタンスにビジネスをデプロイする前に、ビジネスシナリオにMTUの不一致によって引き起こされる接続性とパフォーマンスの問題が存在するかどうかをテストし、パフォーマンスの損失を最小限に抑えるためにパケットサイズを適切に指定することを推奨します。
ジャンボフレームを有効または無効にする
次のいずれかの方法を使用して、ECSインスタンスのジャンボフレームを有効または無効にします。
方法 1:
ECSインスタンス購入ページで、ジャンボフレームをサポートするインスタンスタイプを選択すると、ジャンボフレームを有効または無効にできます。
方法 2:
ECSインスタンスの作成後、ECSインスタンスの [操作] 列でジャンボフレームを有効または無効にします。
ECSコンソールにログインします。
左側のナビゲーションウィンドウで、 を選択します。
上部のナビゲーションバーで、リソースが属するリージョンとリソースグループを選択します。
ジャンボフレームをサポートするインスタンスを見つけ、[操作] 列で
を選択します。[ジャンボフレーム設定の変更] ダイアログボックスで、ジャンボフレームを有効または無効にします。
方法3:
ModifyInstanceAttribute操作を呼び出して、ジャンボフレームを有効または無効にします。
方法2または方法3を使用してECSインスタンスのジャンボフレームを有効または無効にした後、設定を有効にするには、インスタンスのオペレーティングシステムに基づいて次の手順を実行する必要があります。
ECS インスタンスを再起動します。
(オプション) インスタンスにログインして、オペレーティングシステムのMTUを変更します。 この操作は、ジャンボフレームが有効になっているWindowsオペレーティングシステムにのみ必要です。 詳細については、このトピックの「ECSインスタンスのネットワークインターフェイスのMTU値の変更」をご参照ください。
説明Linuxでは、Dynamic Host Configuration Protocol (DHCP) サーバーが自動的にMTUを取得します。 インスタンスのジャンボフレームを有効にした後にLinuxインスタンスを再起動すると、インスタンスで8,500 MTUが自動的に有効になり、1,500 MTUが自動的に無効になります。
Windowsインスタンスのジャンボフレームを無効にしてインスタンスを再起動すると、標準のMTU設定 (1,500 MTU) が自動的に有効になり、有効になります。 MTU設定を変更するためにインスタンスにログインする必要はありません。
ホスト間のネットワークパスのMTU
デフォルトでは、Alibaba Cloudネットワーク上のパスは1,500 MTUをサポートしています。 ジャンボフレームをサポートしていないECSインスタンスの場合、仮想プライベートネットワーク (VPN) ゲートウェイなどの関連するネットワークデバイスのMTUのみを考慮してください。 詳細については、このトピックの「クラウドネットワークサービスのMTU」セクションをご参照ください。
ジャンボフレームをサポートするECSインスタンスをソースホストとして使用する場合、ターゲットホストでサポートされる最大MTUは使用シナリオによって異なります。 次の表に、ネットワークパスの最大MTUを示します。
宛先ホスト | 最大MTU |
ジャンボフレームが有効になっており、同じVPCまたはピアリングVPCに存在するECSインスタンス | 8,500 |
ジャンボフレームが無効で、同じVPCまたはピアリングVPCに存在するECSインスタンス | 1,500 |
Cloud Enterprise Network (CEN) を使用して接続されているVPC内のECSインスタンス | |
Connect Expressを使用して接続されているオンプレミスデータセンターのホスト | |
elastic IPアドレスまたはパブリックIPアドレスを使用してアクセスできる外部ホスト |
詳細については、「VPCピアリング接続の概要」および「VPC接続の管理」をご参照ください。
パケットのサイズがネットワークパスのMTUを超える場合、Alibaba Cloud転送コンポーネントはパケットをフラグメント化するか、RFC標準に基づいてネゴシエーションを実行します。 これはネットワーク接続の確保に役立ちますが、ネットワーク通信パフォーマンスを保証するものではありません。 1,500バイトの最大MTUをサポートするパスの場合、UDPまたはICMP通信にジャンボフレームを使用しないことを推奨します。 Alibaba Cloud転送コンポーネントがネットワークパスのMTUを超えるパケットを処理する方法については、このトピックの「ネットワークパスのMTUを超えるパケットの処理」をご参照ください。
クラウドネットワークサービスのためのMTU
UDPやICMPなどの非TCPプロトコルを介して特定のネットワークサービスにアクセスする場合は、ネットワークサービスのMTU制限に注意してください。 ほとんどのAlibaba Cloudサービスはジャンボフレームをサポートしていません。 次の表に、特定のAlibaba Cloudネットワークサービスでサポートされる最大MTUを示します。
クラウドネットワークサービス | 最大MTU | 説明 |
NAT Gateway | 1,500 | なし。 |
Application Load Balancer (ALB) 、Network Load Balancer (NLB) 、およびClassic Load Balancer (CLB) を含むServer Load Balancer | ALBインスタンスとCLBインスタンスは、断片化されたパケットを転送できません。 ECSインスタンスから送信される各パケットのサイズ制限を、UDPまたはICMP通信用に1,500バイトに設定します。 | |
OSS (Object Storage Service) やApsaraDB RDSなどのその他のAlibaba Cloudサービス | トラフィックはSLBサービスを通過します。 SLBサービスの制限に注意してください。 | |
Global Accelerator (GA) | なし。 | |
クラウドファイアウォール (CFW) | なし。 | |
PrivateLink | なし。 | |
VPN Gateway | 1399 | 詳細については、「MTUの設定」をご参照ください。 |
パケットのサイズがクラウドサービスのMTU制限を超える場合、Alibaba cloud転送コンポーネントはパケットをフラグメント化するか、RFC標準に基づいてネゴシエーションを実行します。 これはネットワーク接続の確保に役立ちますが、ネットワーク通信パフォーマンスを保証するものではありません。 1,500バイトまたは1,399バイトの最大MTUをサポートするクラウドサービスの場合、UDPまたはICMP通信にジャンボフレームを使用しないことを推奨します。 Alibaba Cloud転送コンポーネントがクラウドサービスのMTUを超えるパケットを処理する方法については、このトピックの「ネットワークパスのMTUを超えるパケットの処理」をご参照ください。
ネットワークパスのMTUを超えるパケットの処理
Alibaba Cloudの転送コンポーネントは、ネットワーク接続を確保するために、次のいずれかの機能を使用して、RFC標準に基づくネットワークパスのMTUを超えるパケットを処理します。
TCPトラフィックのTCP最大セグメントサイズ (MSS)
TCP MSSは、パケットの断片化を防止するために、TCPヘッダおよびIPヘッダを除くTCPセグメントのサイズを制限する。 送信元ホストと送信先ホストの間にTCP接続を確立するには、両方のホストがMSS値をアドバタイズします。 MSS値は、以下の式を使用することによって計算される。MSS = MTU − (IPヘッダサイズ + TCPヘッダサイズ)
。 ネットワークパスに沿ってパケットを期待どおりに送受信できるようにするには、MSSとTCPヘッダー (20バイト) とIPヘッダー (IPv4ヘッダーあたり20バイトまたはIPv6ヘッダーあたり40バイト) がネットワークパスのMTU以下である必要があります。
MSSがネットワークパスのMTUに適していない場合、Alibaba Cloud転送コンポーネントは、MSSクランプを実行して、同期シーケンス番号 (SYN) パケットで送信元ホストによってアドバタイズされたMSS値、またはSYN-ACKパケットで送信先ホストによってアドバタイズされたMSS値を下げます。
非TCPトラフィック (UDPトラフィックまたはICMPトラフィック) のPMTUD
TCP以外のパケットの場合、Alibaba Cloudの転送コンポーネントは、TCP MSSの代わりにPath MTU Discovery (PMTUD) メカニズムを使用してMTUを検出し、ネゴシエートします。
パケットがネットワークパスのMTUを超えると、Alibaba Cloudの転送コンポーネントは、Don't fragmentフラグが0に設定されているパケットをフラグメントし、Don't Fragmentフラグが1に設定されているパケットをドロップします。 パケットがドロップされた後、転送コンポーネントは次のシナリオに基づいて操作を実行します。
パケットのIPv4ヘッダ内でDon't-Fragmentフラグが1に設定されている場合、転送コンポーネントは、ネットワークパスのMTUを示すICMP Fragmentation-Neededパケットをパケットの送信側に送信します。
パケットのIPv6ヘッダ内でDon't-Fragmentフラグが1に設定されている場合、転送コンポーネントは、ネットワークパスのMTUを示すICMPv6 packet-Too-Longパケットをパケットの送信者に送信します。
PMTUDはパケット損失を引き起こし、ネットワーク接続のみを保証します。 カーネル内のリソースとECSインスタンスの基盤となる転送コンポーネントは、PMTUパケットの構築と応答、および断片化されたパケットの処理に消費されます。 PMTUDはパフォーマンスを大幅に低下させます。 MTUの不一致が発生した場合の通信シナリオのパフォーマンスを向上させるために、ModifyInstanceAttribute操作を呼び出してECSインスタンスのジャンボフレームを無効にし、変更を有効にするためにECSインスタンスを再起動することを推奨します。
ECSインスタンスがPMTUDに応答できるようにするには、インスタンスのセキュリティグループにICMPインバウンドルールが設定され、異なる転送コンポーネントからICMPパケットを受信するようにします。 また、インスタンスのオペレーティングシステムがPMTUDをサポートしていること、およびオペレーティングシステムに対してPMTU応答が有効になっていることを確認する必要があります。 たとえば、LinuxのPMTUレスポンスを有効にするには、/proc/sys/net/ipv4/ip_no_pmtu_discで必要なオプションを0に設定します。
ECSインスタンスのネットワークインターフェイスのMTU値の変更
Alibaba Cloudでは、VPNゲートウェイやトラフィックミラーリングなどの特定のシナリオまたはネットワークデバイスでは、ECSインスタンスから送信されるパケットのサイズに厳しい要件があります。 ネットワーク接続を確保したり、ユーザーエクスペリエンスを向上させるには、ECSインスタンスが転送できるパケットの最大サイズを減らす必要があります。 次の操作を実行して、上記のシナリオまたはネットワークデバイスのパケットサイズ要件を満たすようにECSインスタンスのネットワークインターフェイスのMTU値を変更できます。
ECSインスタンスのネットワークインターフェイスのMTU値を変更するときは、指定されたMTU値がインスタンスレベルでMTU制限を超えないようにしてください。 指定されたMTU値がインスタンスレベルでMTU制限を超えると、インスタンスはネットワーク接続を失う可能性があります。 インスタンスレベルのMTUは、ジャンボフレームが有効になっている場合は8,500バイト、ジャンボフレームが無効になっている場合、またはインスタンスがジャンボフレームをサポートしていない場合は1,500バイトです。
Linuxでは、VPNゲートウェイが使用されるシナリオなどのトンネリングシナリオを除いて、DHCPサーバーは自動的にMTU値を取得します。 この方法では、ネットワークインターフェイスのMTU値を変更する必要はありません。
Windowsでは、DHCPサーバーは自動的にMTUを取得しません。 Windowsインスタンスのジャンボフレームを有効または無効にする場合は、インスタンスのネットワークインターフェイスのMTU値を変更する操作を実行します。
次の例では、異なるオペレーティングシステムを実行するECSインスタンスでは、ネットワークインターフェイスのMTU値が1,399バイトに変更されています。
Windows
この例では、Windows Server 2019を実行するECSインスタンスが使用されています。 インスタンスのネットワークインターフェイスのMTU値を変更するには、次の手順を実行します。
Windowsインスタンスに接続します。
詳細については、「パスワードまたはキーを使用したWindowsインスタンスへの接続」をご参照ください。
PowerShellを開きます。
次のコマンドを実行して、インスタンスのネットワークインターフェイスを表示します。
Get-NetAdapter
次のようなコマンド出力が返されます。これは、ECSインスタンスにEthernetという名前のネットワークインターフェイスがあることを示します。
次のコマンドを実行して、イーサネットネットワークインターフェイスのMTU値を表示します。
Get-NetAdapterAdvancedProperty -Name "Ethernet"
次のようなコマンド出力が返されます。これは、イーサネットネットワークインターフェイスのMTU値が1,514であることを示します。
説明Windowsでは、MTUの計算に使用されるメソッドはドライバーによって異なります。 ほとんどの場合、MTUサイズには14バイトのイーサネットヘッダーのサイズが含まれます。 したがって、デフォルトのMTUは1,514です。
次のコマンドを実行して、ネットワークインターフェイスの新しいMTU値を指定します。
Get-NetAdapterAdvancedProperty -Name <"Network interface name"> -RegistryKeyword "*JumboPacket" -RegistryValue <New MTU value>
たとえば、次のコマンドを実行して、イーサネットネットワークインターフェイスのMTU値を1,413に設定します。 このMTUは、イーサネットヘッダの14バイトを含む。
Set-NetAdapterAdvancedProperty -Name "Ethernet" -RegistryKeyword "*JumboPacket" -RegistryValue 1413
ネットワークインターフェイスのMTU値を変更した後、
Get-NetAdapterAdvancedProperty -Name "Ethernet" -RegistryKeyword "* JumboPacket"
コマンドを実行して、新しいMTU値が有効かどうかを確認します。次の図は、イーサネットネットワークインターフェイスのMTU値が1,413に変更されたことを示すコマンド出力の例を示しています。
Ubuntu
この例では、Ubuntu16.04を実行するECSインスタンスが使用されています。 インスタンスのネットワークインターフェイスのMTU値を変更するには、次の手順を実行します。
Linuxインスタンスに接続します。
詳細については、「パスワードまたはキーを使用したLinuxインスタンスへの接続」をご参照ください。
次のコマンドを実行して、インスタンスのネットワークインターフェイスとネットワークインターフェイスのMTU値を表示します。
ifconfig
次のようなコマンド出力が返されます。これは、eth0ネットワークインターフェイスのMTU値が1,500であることを示します。
ネットワークインターフェイスの新しいMTU値を指定します。
たとえば、次のコマンドを実行して、eth0ネットワークインターフェイスのMTU値を1,399に設定します。
mtu=1399 ifconfig eth0 mtu ${mtu} echo "/sbin/ifconfig eth0 mtu ${mtu}" > /etc/network/if-up.d/setmtu && chmod a + x /etc/network/if-up.d/setmtu
ネットワークインターフェイスのMTU値を変更した後、
ifconfig
コマンドを実行して、新しいMTU値が有効かどうかを確認します。次の図は、eth0ネットワークインターフェイスのMTU値が1,399に変更されたことを示すサンプルコマンド出力を示しています。
CentOS
この例では、CentOS 7.8を実行するECSインスタンスが使用されます。 インスタンスのネットワークインターフェイスのMTU値を変更するには、次の手順を実行します。
Linuxインスタンスに接続します。
詳細については、「パスワードまたはキーを使用したLinuxインスタンスへの接続」をご参照ください。
次のコマンドを実行して、eth0などのIPアドレスに関連付けられたネットワークインターフェイスを表示します。
ifconfig
次のようなコマンド出力が返されます。これは、eth0ネットワークインターフェイスのMTU値が1,500であることを示します。
ネットワークインターフェイスのMTU値を指定します。
たとえば、次のコマンドを実行して、eth0ネットワークインターフェイスのMTU値を1,399に設定します。
mtu=1399 echo "${mtu}" > /sys/class/net/eth0/mtu echo "echo \" "${mtu}"\" > /sys/class/net/eth0/mtu">> /etc/rc.d/rc.local && chmod + x /etc/rc.d/rc.local
ネットワークインターフェイスのMTU値を変更した後、
ifconfig
コマンドを実行して、新しいMTU値が有効かどうかを確認します。次の図は、eth0ネットワークインターフェイスのMTU値が1,399に変更されたことを示すサンプルコマンド出力を示しています。
よくある質問
問題の説明: UDPまたはICMPトラフィックにECSインスタンスでジャンボフレームを使用すると、インスタンスのパフォーマンスが大幅に低下します。
解決策: パケットが断片化されているかどうかを確認し、ビジネス要件に基づいてインスタンスのジャンボフレームを無効にします。 詳細については、このトピックの「ジャンボフレームの有効化または無効化」をご参照ください。
問題の説明: ジャンボフレームが有効になっているECSインスタンスからUDPまたはICMP経由でOSSやAparaDB for RDSなどのクラウドサービスにアクセスすると、サービスへのネットワーク接続を確立できません。
原因: ECSインスタンスからのトラフィックは、パケットフラグメントを転送できないSLBインスタンスを通過します。 その結果、ネットワーク接続障害が発生する可能性がある。
解決策: ECSインスタンスからクラウドサービスに送信されるパケットが断片化されないようにするには、各パケットのサイズ制限を1,500バイトに設定します。
問題の説明: ECSインスタンスはPMTUメッセージ (ICMPエラーメッセージ) を受信できません。
原因: PMTUメッセージは、ECSインスタンスのセキュリティグループによってドロップされるか、抑制されます。
解決策:
インスタンスのセキュリティグループがICMPトラフィックを許可しているかどうかを確認します。 詳細については、「セキュリティグループルールの表示」をご参照ください。
インスタンスのトラフィックレートがスロットル制限に達しているかどうかを確認します。