MTU から MSS の計算
入力
| MTU | 1,500 B |
|---|---|
| IP ヘッダー | 20 B |
| TCP ヘッダー | 20 B |
MTU から MSS の計算
経路の MTU から IP ヘッダーと TCP ヘッダーを差し引いて TCP の最大セグメントサイズ(MSS)を求め、各パケットのうち実際のペイロードが占める割合を確認します。
入力
パケットサイズ
結果
値を入力すると計算結果が表示されます。
最大セグメントサイズ
ペイロード効率
MTU から MSS
最大セグメントサイズ(MSS)とは、TCP が 1 つのパケットに収めるアプリケーションデータの最大ブロックです。これは経路の最大転送単位(MTU)、すなわち回線が運べる最大の IP パケットから、IP ヘッダーと TCP ヘッダーの分の領域を確保することで導かれます。MSS を正しく設定するとパケットが分割されずに済みます。大きすぎる値はフラグメント化を、最悪の場合は静かなパケットロスを引き起こし、小さすぎる値はヘッダーオーバーヘッドに容量を浪費します。この計算では、3 つのバイト数から MSS と、その結果得られるペイロード効率を求めます。
計算式
MSS=MTU−HIP−HTCP E=MTUMSSここで はバイト単位の最大転送単位、 は IP ヘッダーサイズ、 は TCP ヘッダーサイズ、 はペイロード効率、すなわちフルサイズの各パケットのうちヘッダーではなく実データを運ぶ割合です。
可変なのはヘッダーサイズだけです。素の IPv4 ヘッダーは 20 バイト、素の TCP ヘッダーは 20 バイトなので、標準的な Ethernet 経路では両者で 1 パケットあたり 40 バイトを消費します。IPv6 は 40 バイトという大きめの固定ヘッダーを使い、タイムスタンプや選択的確認応答(SACK)などの TCP オプションはさらに数バイトを加えることがあります。
計算例。 IPv4 を使う標準的な Ethernet 経路:
MSS=1500−20−20=1460 bytes E=15001460=0.9733=97.3%つまり 1500 バイトの各パケットのうち 1460 バイトがペイロードを運び、約 2.7% が IP ヘッダーと TCP ヘッダーに消費されます。同じ 1500 バイトの MTU で IPv6 に切り替えるとヘッダーが 20 バイト増え、MSS は 1440 バイトに、効率は 96.0% に下がります。
なぜ MSS が重要なのか
TCP は、すべての接続の開始時に行う SYN ハンドシェイクで、相手のエンドポイントに自身の MSS を広告します。各側は受け取った値より大きなセグメントを決して送らないと約束するため、どちらのエンドポイントも経路が運べないパケットを生成しません。経路上で最小の MTU に合わせて MSS が正しく設定されていれば、すべてのセグメントが無傷で届き、TCP は最大の効率で動作します。
問題が起きるのは、パケットがある回線で運べるサイズを超えたときです。ルーターはそれをフラグメント化するか(1 つのパケットを複数に分割し、オーバーヘッドと再組み立ての作業が増えます)、あるいは「フラグメント化禁止」フラグが立っていれば破棄して ICMP メッセージで通知します。その ICMP メッセージがファイアウォールでフィルタリングされると、送信側は決して届かない過大なパケットを再送し続け、接続が止まります。この障害はパス MTU ブラックホールとして知られています。
ヘッダーと代表的な MTU 値
MSS は MTU と、どのヘッダーが適用されるかだけで決まります。よく登場する値がいくつかあります。
| 経路 | MTU(バイト) | IP + TCP ヘッダー | MSS(バイト) |
|---|---|---|---|
| Ethernet、IPv4 | 1500 | 20 + 20 | 1460 |
| Ethernet、IPv6 | 1500 | 40 + 20 | 1440 |
| PPPoE(DSL)、IPv4 | 1492 | 20 + 20 | 1452 |
| ジャンボフレーム、IPv4 | 9000 | 20 + 20 | 8960 |
VPN、GRE、IPsec などのトンネルは、各パケットを自身の外側ヘッダーで包むため、内側のパケットに使える MTU が縮みます。これが、VPN 接続がしばしば 1460 を大きく下回る MSS を広告する理由であり、また、カプセル化された回線でトラフィックを流し続けるために、ルーターが頻繁に MSS を「クランプ」して(広告される値を下方に書き換えて)いる理由でもあります。
ペイロード効率と大きな MTU
ヘッダーコストはパケットあたり固定であるため、MTU が大きいほどそのコストがより多くのペイロードに分散され、効率が上がります。1500 バイトの MTU は IPv4 ヘッダーで 97.3% の効率になり、9000 バイトのジャンボフレームではそれが 99.5% を超えます。大きなパケットはまた、同じスループットに対して 1 秒あたりのパケット数が減ることを意味し、ルーター、ファイアウォール、ネットワークカードにかかるパケットごとの処理負荷を軽くします。そのためジャンボフレームは、経路上のすべての機器を大きな MTU に設定できるデータセンターやストレージネットワーク内で一般的です。
関連する計算
パケットサイズを、ある回線速度におけるパケットレートに変換するには、1秒あたりパケット数(pps)の計算 の計算を使ってください。ペイロードレートがわかったうえでファイルの転送にかかる時間を見積もるには、データ転送時間の計算 の計算を参照してください。同じネットワークでのサブネットとアドレスの設計には、サブネットの計算 の計算が便利な相棒になります。
よくある質問 (FAQ)
MTU と MSS の違いは何ですか?
MTU(最大転送単位)は、すべてのヘッダーを含めて回線が運べる最大の IP パケットです。MSS(最大セグメントサイズ)は、そのパケットに収まる最大の TCP ペイロードで、IP ヘッダーと TCP ヘッダーを除いたものです。1500 バイトの MTU と 20 バイトずつの IPv4・TCP ヘッダーの場合、MSS は 1500 − 20 − 20 = 1460 バイトになります。TCP は接続のハンドシェイク時に自身の MSS を広告します。
なぜ MTU の既定値は 1500 なのですか?
1500 バイトは Ethernet の標準的なペイロードサイズで、Ethernet が有線・Wi-Fi のアクセスネットワークで支配的なため、ほとんどのインターネット経路がエンドツーエンドで 1500 バイトの MTU に落ち着きます。それより小さい回線もあります。PPPoE 接続ではしばしば 1492 バイトが使われ、トンネル(VPN、GRE、IPsec)は自身のカプセル化分を差し引くため、内側のパケットには 1400 バイト以下しか残らないこともあります。
ジャンボフレームは MSS をどう変えますか?
ジャンボフレームは MTU を約 9000 バイトに引き上げるもので、データセンターやストレージネットワーク内で一般的です。9000 バイトの MTU と 40 バイトの IPv4 + TCP ヘッダーの場合、MSS は 8960 バイトに達します。すると各パケットは固定のヘッダーコストに対してはるかに多くのペイロードを運ぶようになり、効率が上がるとともに、一定のデータ量を処理するためにハードウェアが扱うパケット数が減ります。
パス MTU 探索とは何で、なぜ重要なのですか?
パス MTU 探索(PMTUD)は、エンドポイントが経路上で最小の MTU を見つけ、フラグメント化を避けられるようにパケットサイズを調整するための仕組みです。これは ICMP の「フラグメント化が必要」メッセージに依存しており、ファイアウォールがそのメッセージをブロックすると、PMTUD は静かに失敗して大きなパケットが破棄され、接続が止まります。これが「PMTU ブラックホール」です。広告する MSS を下げるか、ルーターでクランプ(clamp)するのが一般的な回避策です。