トンネルは大きな転送を落とすのに ping は通すため、助言はすぐに届きます。MTU を下げる、というものです。その修正はときどき効きますが、やがてすべてのネットワークのすべてのプロファイルに適用されます。まさにそこで、的を絞った修理が恒久的な性能税に変わります。行うべき比較は、経路の本当の限界と、それを下回るようにパケットを小さくするコストの間の比較です。

MTU を下げると実際に何が小さくなるのか

すべてのパケットは、あなたのデータを運ぶ前にヘッダーを運びます。1500 バイトのイーサネット経路では、IPv4 と TCP が 40 バイトを消費し、ペイロードに 1460 を残します。カプセル化は外側の IP、UDP、トンネルのヘッダーをその上に加えるため、内側のペイロード予算はさらに減ります。インターフェースの MTU を下げることは、その予算を意図的に縮めることです。

コストはバイト数ではなく、パケット数に比例します。同じファイルをより多くのパケットに分割すると、経路上の各デバイスで、より多くの割り込み、より多くの経路判定、より多くのパケット単位の処理が必要になります。すでに毎秒パケット数の上限に近いルーターでは、それは丸め誤差ではなく実際の速度低下です。転送そのものが成功しても、コストは現れます。

だからこそ、小さい MTU は制約への回避策であり、一般的な最適化ではありません。大きいフレームを運べない経路に対して信頼性を買い、削減を必要としなかったパケットにまでオーバーヘッドを課します。

小さい MTU が正しい修正となるのはどんなときか

典型的な症状は具体的です。TCP のハンドシェイクが完了し、小さな応答は届くのに、大きなダウンロードが止まるかリセットされます。断片化禁止ビットを付けた 1472 バイトの ping は失敗し、1400 バイトの ping は成功します。これは、フルサイズのパケットを運べず、送信者に縮小を伝えるはずの ICMP メッセージを配送していない経路を示します。

経路 MTU の検出は、その ICMP の断片化要求メッセージに依存しています。ファイアウォールがそれを捨てると、送信者は大きなパケットを再試行し続け、接続は止まったように見えます。トンネル側で MTU を下げれば再試行を避けられ、それはそのネットワークにとって正当な修理です。

アクセス技術にも独自の限界があります。PPPoE は通常 1492 で頭打ちになり、モバイルや DSL の経路はもっと低く、入れ子のトンネルはオーバーヘッドを二重に引きます。ガイドの数値をコピーするのではなく実際の経路を測り、IPv6 が運ぶすべてのリンクで少なくとも 1280 バイトの MTU を要求することを忘れないでください。RFC 8200 が定めるとおりです。

一つを変える前に三つの制御を比較する

MTU、MSS、断片化は層の異なる別々の制御です。間違ったものを変えても症状はそのまま残ります。

ControlLayerWhat it changesWhere it misleads
Interface MTUIP linkLargest frame the interface will sendPenalizes every protocol, not just the one that failed
TCP MSS clampTCPSegment size advertised in the handshakeLeaves UDP and QUIC untouched
DF and fragmentationIPWhether a router may split a packetCan break path MTU discovery and security assumptions
Tunnel overheadEncapsulationInner MTU after outer headersMismatch shows up only for large inner packets

MSS の制限は多くの場合、最も侵襲の少ない修理です。TCP だけに作用し、インターフェースを他のトラフィックのために空けておけるからです。インターフェース MTU を下げる方法は範囲が広く考えやすいため家庭用ルーターでよく使われますが、一つのプロトコルの問題をすべてのプロトコルに課します。

断片化禁止の動作を無効にすると、断片化を許すことで症状を隠します。しかも、正しいサイズを見つけたはずのフィードバックを壊しながら、遅延を悪化させがちです。恒久的な修正としては避けてください。

一つの数値ではなくトレードオフを測る

断片化禁止のプローブで経路の限界を見つけます。高い値から始めて、応答が返るまで下げていきます。

ping -M do -s 1472 203.0.113.10
ping -M do -s 1400 203.0.113.10
tracepath 203.0.113.10

次に、両方の設定で実際の作業を比較します。同じファイル転送、同じエンドポイント、同じネットワークです。完了時間と再送を記録し、たとえば nstat -az TcpRetransSegs を使い、トンネルが小さなルーターで終わるならデバイスの CPU も見ます。短い合成スループット試験では、数メガバイト後にしか現れない停止を見逃すことがあります。

削減後はパケットのカウンターが増えます。同じ転送がより多くのパケットを使うようになるからです。それは想定内で、より高いスループットの証拠ではありません。完了したアプリケーションデータ、再送回数、応答性を比較してください。パケットレートだけを見てはいけません。

変更は段階的に導入し、範囲を限定する

元の値を記録し、一つの制御を変え、恒久化する前に測定を繰り返します。証拠が利益を示さないなら、設定に使ったのと同じインターフェースコマンドで以前の値に戻します。

ip link set dev wg0 mtu 1420
ip link set dev wg0 mtu 1500

結果はそれを必要としたネットワークに限定します。ホテルの Wi-Fi、モバイル hotspot、オフィスの LAN で動く必要があるプロファイルは、クライアントが経路を検出できない場合を除き、どれか一つが要求する最も低い値を継承すべきではありません。

正しい値は経路を生き延びる最大の MTU であり、症状を消す最小の値ではありません。経路、プローブの結果、切り戻しを記録し、アクセスネットワークが変わったら設定を見直してください。

関連記事