MTU
1つの回線(データリンク)で、1回に送ることのできるデータの最大の大きさ。IPパケットの最大長にあたり、イーサネットでは標準で1,500オクテット。
イマシルちゃんの解説
MTUは、一つの回線で分割せずに運べるIPパケットの大きさの上限だよ。
写真や文章そのものの量ではなく、宛先などを記したIPヘッダーも含めて数えるんだ。
ただし、イーサネットで外側に付けるMACヘッダーなどは含めないよ。
標準的なイーサネットなら、上限は1,500バイトなんだ。
これを超えるパケットはそのままでは運べないので、送る大きさを小さくするなどの対応が必要になるよ。
途中で上限の小さい回線を通る場合もあるから、通信経路に合わせた大きさで送ることが大切なんだ。
この解説はわかりやすかったですか?
より深い解説
定義
MTU(Maximum Transmission Unit:最大転送単位)は、データリンク層の1つのフレームで運べる、上位層のデータ(IPパケット)の最大長である。イーサネットのフレームでいえば、MACヘッダーとFCSを除いたデータ部(MACクライアントデータ)の最大長にあたる。
イーサネットのフレーム
| MACヘッダー(14) | IPヘッダー(20) | TCPヘッダー(20) | データ | FCS(4) |
└──────────── MTU(1,500)────────────┘
MTUには、IPヘッダーやTCPヘッダーは含まれるが、MACヘッダーとFCSは含まれない。
TCPで送れるデータの最大長
MTUが1,500オクテットで、IPv4とTCPのヘッダーにオプションがない場合、1つのセグメントに入れられるデータの最大長(MSS)は、次のようになる。
MSS = MTU − IPヘッダー − TCPヘッダー
= 1,500 − 20 − 20 = 1,460オクテット
MACヘッダー(14)とFCS(4)は、MTUの外側にあるため、引いてはいけない。
| 項目 | 長さ(オクテット) |
|---|---|
| MTU | 1,500 |
| IPv4ヘッダー(オプションなし) | 20 |
| TCPヘッダー(オプションなし) | 20 |
| UDPヘッダー | 8 |
| TCPのデータの最大長(MSS) | 1,460 |
| UDPのデータの最大長 | 1,472 |
| IPv6ヘッダー | 40 |
| IPv6でのTCPのMSS | 1,440 |
主な回線のMTU
| 回線 | MTU |
|---|---|
| イーサネット | 1,500 |
| ジャンボフレーム対応のイーサネット | 9,000程度(機器による) |
| PPPoE(フレッツなど) | 1,492(PPPoEとPPPのヘッダー8オクテットを引いた値) |
| IPv6の最小MTU | 1,280 |
MTUを超えるとき
IPパケットがMTUより大きいと、そのままでは送れない。IPv4では、途中のルータがパケットを分割(フラグメンテーション)して送ることができる。しかし、分割は、ルータの負荷、1つでも失われると全体が使えないこと、ファイアウォールでの検査の難しさなどの問題があるため、避けることが望ましい。IPv6では、途中のルータは分割せず、送信元だけが分割する。
分割を避けるため、次の方法が使われる。
| 方法 | 内容 |
|---|---|
| パスMTU探索 | 経路上で最小のMTUを調べて、それを超えない大きさで送る |
| MSSの調整 | TCPの接続時に、MSSを小さく通知する(ルータが途中でMSSの値を書き換える「MSSクランプ」も使われる) |
トンネルとMTU
VPN(IPsec)やPPPoE、GREなどのトンネルを使うと、元のパケットに追加のヘッダーが付くため、実質的に運べる大きさが小さくなる。MTUが小さくなったことに気づかずに大きなパケットを送ると、分割が増えたり、パスMTU探索に必要なICMPが遮断されていて通信が止まったり(一部のWebページだけが表示されない、など)するトラブルが起こる。