ネットワークトラブルの調査をしていると、通信はできているのに「なぜか遅い」「パケットロスが発生する」というケースに遭遇することがあります。
回線帯域にも余裕があり、CPU使用率も問題ない。
それでも通信品質が悪い場合、原因として疑われるのがMTUです。
MTUの設定が適切でない場合、パケットのフラグメントが発生し、通信効率が大きく低下します。
実際の現場でも、MTU設定が原因でIPsecトンネルの通信が遅くなるケースは珍しくありません。
この記事では、MTUの基本と、なぜ通信遅延の原因になるのかを解説します。
MTUとは
MTU(Maximum Transmission Unit)は、
一度に送信できるパケットサイズの最大値を指します。
簡単に言うと
「ネットワークで一度に送れるデータのサイズ」
です。
一般的なEthernetでは、MTUは次のサイズになっています。
1500 bytes
つまり、1500バイトより大きなデータを送信する場合、パケットは分割されます。
この分割を「フラグメント」と呼びます。
フラグメントとは
MTUより大きなパケットを送信すると、
ルータや機器がパケットを分割します。
例えば
送信データ
2000 bytes
MTU
1500 bytes
この場合、次のように分割されます。
1500 bytes
500 bytes
この処理がフラグメントです。
フラグメントが発生すると
・CPU処理が増える
・再構築処理が必要
・パケットロスが発生しやすい
などの問題が発生します。
MTUが原因で通信が遅くなる理由
MTUが適切でないと通信効率が大きく低下します。
主な理由は次の3つです。
フラグメント処理が増える
ルータがパケットを分割する処理はCPUを使用します。
通信量が多い環境では、この処理がボトルネックになることがあります。
特にVPNやトンネル通信では発生しやすいです。
再送が発生する
フラグメントされたパケットは、1つでも欠けると再送が発生します。
そのためパケットロスが発生しやすくなります。
結果として通信速度が低下します。
IPsecやGREトンネルで発生しやすい
トンネル通信ではヘッダが追加されるため、実際に送信できるデータサイズが小さくなります。
例
通常Ethernet
MTU 1500
IPsecトンネル
MTU 1400前後
もし1500のパケットをそのまま送ると、トンネル内でフラグメントが発生します。
MTUの確認方法
Windowsでは次のコマンドでMTUを確認できます。
netsh interface ipv4 show subinterfaces
Linuxでは
ip link
Cisco機器では
show interface
で確認できます。
出力例
MTU 1500 bytes
MTU問題の調査方法
MTU問題はpingコマンドで調査できます。
Windowsの場合
ping -f -l 1472 8.8.8.8
1472という値は
1500 – 28
です。
28バイトはIPヘッダとICMPヘッダのサイズになります。
もしMTUが小さい場合
Packet needs to be fragmented
というメッセージが表示されます。
この方法で通信経路のMTUを確認できます。
MTU問題が発生しやすいケース
MTU問題は次の環境で発生しやすいです。
・IPsec VPN
・GREトンネル
・PPPoE回線
・クラウド接続
PPPoE回線ではMTUは
1492
になることが多いです。
この場合1500のパケットはフラグメントされます。
MTU問題の対策
MTU問題の対策は主に次の2つです。
MTUを調整する
トンネルインターフェースのMTUを調整します。
例
MTU
1400
この設定でフラグメントを防ぐことができます。
MSSを調整する
TCP通信ではMSS調整を行う方法もあります。
Ciscoルータ例
ip tcp adjust-mss 1360
この設定によりTCPパケットサイズを制御できます。
MTU問題は意外と見落とされる
ネットワークトラブルの調査では
・ルーティング
・VLAN
・ACL
などに目が行きがちですが、MTUが原因のケースも多く存在します。
特にVPN環境ではMTU問題が通信品質に大きく影響します。
通信が遅い、パケットロスが発生する場合は、MTU設定も確認することが重要です。
