ネットワーク接続の最大送信単位 (MTU) は、接続を介して送信できる最大パケットのサイズです。 MTUにはIPヘッダーとペイロードのサイズが含まれ、イーサネットヘッダーのサイズは含まれません。 接続のMTUが大きいほど、単一のパケットで渡すことができるデータが多くなります。 このトピックでは、ジャンボフレームと、Elastic Compute Service (ECS) インスタンスのネットワークインターフェイスのMTUを変更する方法について説明します。
ジャンボフレーム
ジャンボフレームは、1500バイトを超えるペイロードを有するイーサネット (登録商標) フレームであり、IEEE 802.3規格によって設定される制限である。 ジャンボフレームは、高いスループットと高いネットワークパフォーマンスを提供するために、パケットあたりのペイロードサイズと、パケットオーバーヘッドではないパケットの割合を増加させます。 Alibaba Cloudは、サイズが8,500バイトのジャンボフレームをサポートしており、8,500バイトのペイロードを持つイーサネットフレームを送信できます。
すべてのECSインスタンスは1,500 MTUをサポートしています。 次の第8世代インスタンスファミリーのインスタンスは、MTUおよび8,500 MTU 1,500購入サポートされています。 g8a、c8a、およびr8a. 詳細については、「インスタンスファミリーの概要」をご参照ください。
ネットワークパスの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インスタンスの作成後、インスタンスの詳細ページでジャンボフレームを有効または無効にします。
- [インスタンスの詳細] タブの [ネットワーク情報] セクションで、 を選択します。
- [ジャンボフレーム設定の変更] ダイアログボックスで、ジャンボフレームを有効または無効にします。
- 方法3: ModifyInstanceAttribute操作を呼び出して、ジャンボフレームを有効または無効にします。
- インスタンスを再起動します。
- オプション: インスタンスにログインし、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」セクションをご参照ください。
宛先ホスト | サポートされる最大MTU |
ジャンボフレームが有効になっており、同じVPCまたはピアリングVPCに存在するECSインスタンス | 8500 |
ジャンボフレームが無効で、同じVPCまたはピアリングVPCに存在するECSインスタンス | 1500 |
Cloud Enterprise Network (CEN) を使用して接続されているVPC内のECSインスタンス | |
Connect Expressを使用して接続されているオンプレミスデータセンターのホスト | |
elastic IPアドレスまたはpipを使用してアクセスできる外部ホスト |
クラウドネットワークサービスのためのMTU
ネットワークサービス | サポートされる最大MTU | 説明 |
NAT Gateway | 1500 | なし。 |
SLB (Application Load Balancer (ALB) 、Network Load Balancer (NLB) 、およびClassic Load Balancer (CLB) を含む) | ALBインスタンスとCLBインスタンスは、断片化されたパケットを転送できません。 ECSインスタンスから送信される各パケットのサイズ制限を、UDPまたはICMP通信用に1,500バイトに設定します。 | |
OSS (Object Storage Service) やApsaraDB RDSなどのその他のAlibaba Cloudサービス | トラフィックはSLBサービスを通過します。 SLBサービスの制限に注意してください。 | |
Global Accelerator | なし。 | |
Cloud Firewall | なし。 | |
PrivateLink | なし。 | |
VPN Gateway | 1399 | 詳細については、「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を検出し、ネゴシエートします。
- パケットのIPv4ヘッダ内でDon't-Fragmentフラグが1に設定されている場合、転送コンポーネントは、ネットワークパスのMTUを示すICMP Fragmentation-Neededパケットをパケットの送信側に送信します。
- パケットのIPv6ヘッダ内でDon't-Fragmentフラグが1に設定されている場合、転送コンポーネントは、ネットワークパスのMTUを示すICMPv6 packet-Too-Longパケットをパケットの送信者に送信します。
- PMTUDはパケット損失を引き起こし、ネットワーク接続のみを保証します。 カーネル内のリソースとECSインスタンスの基盤となる転送コンポーネントは、PMTUパケットの構築と応答、および断片化されたパケットの処理に消費されます。 PMTUDはパフォーマンスに大きな影響を与えます。 パフォーマンスを向上させるために、ModifyInstanceAttribute操作を呼び出してECSインスタンスのジャンボフレームを無効にし、インスタンスを再起動して変更を有効にすることを推奨します。
- ECSインスタンスがPMTUDに応答できるようにするには、インスタンスのセキュリティグループにICMPインバウンドルールが設定され、異なる転送コンポーネントからICMPパケットを受信するようにします。 また、インスタンスのオペレーティングシステムがPMTUDをサポートしていること、およびオペレーティングシステムに対してPMTU応答が有効になっていることを確認する必要があります。 たとえば、LinuxのPMTUレスポンスを有効にするには、/proc/sys/net/ipv4/ip_no_pmtu_discで必要なオプションを0に設定します。
ECSインスタンスのネットワークインターフェイスのMTU値の変更
- Linuxでは、VPNゲートウェイが使用されるシナリオなどのトンネリングシナリオを除いて、DHCPサーバーは自動的にMTUを取得します。 この方法では、ネットワークインターフェイスのMTU値を変更する必要はありません。
- Windowsでは、DHCPサーバーは自動的にMTUを取得しません。 Windowsインスタンスのジャンボフレームを有効または無効にする場合は、インスタンスのネットワークインターフェイスのMTU値を変更する操作を実行します。
次のセクションでは、異なるオペレーティングシステムを実行するECSインスタンスでネットワークインターフェイスのMTU値を1,399バイトに変更する方法の例を示します。
Windows
この例では、Windows Server 2019を実行するECSインスタンスが使用されています。 インスタンスのネットワークインターフェイスのMTU値を変更するには、次の手順を実行します。
- Windowsインスタンスに接続します。 詳細については、「パスワードまたはキーを使用したWindowsインスタンスへの接続」をご参照ください。
- PowerShellを開始します。
- 次のコマンドを実行して、インスタンスのネットワークインターフェイスを表示します。
次の図は、ネットワークインターフェイスがEthernetという名前であることを示すコマンド出力のサンプルを示しています。Get-NetAdapter
- 次のコマンドを実行して、イーサネットネットワークインターフェイスのMTU値を表示します。
次の図は、EthernetネットワークインターフェイスのMTU値が1,514であることを示すコマンド出力のサンプルを示しています。Get-NetAdapterAdvancedProperty -Name "Ethernet"
説明 Windowsでは、MTUの計算に使用されるメソッドはドライバーによって異なります。 ほとんどの場合、ドライバには、1,514バイトのデフォルトMTUを取得するために、MTU計算で14バイトのサイズのイーサネットヘッダーが含まれています。 - 次のコマンドを実行して、ネットワークインターフェイスのMTU値を変更します。
Get-NetAdapterAdvancedProperty -Name <"ネットワークインターフェイス名"> -RegistryKeyword "* JumboPacket" -RegistryValue <新しいMTU値>
たとえば、次のコマンドを実行して、イーサネットネットワークインターフェイスのMTU値を1,413に設定します。 この値には、イーサネットヘッダーの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インスタンスへの接続」をご参照ください。
- 次のコマンドを実行して、インスタンスのネットワークインターフェイスとネットワークインターフェイスのMTU値を表示します。
次の図は、eth0というネットワークインターフェイスのMTU値が1,500であることを示すコマンド出力のサンプルを示しています。ifconfig
- eth0ネットワークインターフェイスの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インスタンスへの接続」をご参照ください。
- 次のコマンドを実行して、インスタンスのネットワークインターフェイスとネットワークインターフェイスのMTU値を表示します。
次の図は、eth0というネットワークインターフェイスのMTU値が1,500であることを示すコマンド出力のサンプルを示しています。ifconfig
- eth0ネットワークインターフェイスの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トラフィックを許可しているかどうかを確認します。 詳細については、「セキュリティグループルールの表示」をご参照ください。
- インスタンスのトラフィックレートがスロットル制限に達しているかどうかを確認します。