MTU
1つの回線(データリンク)で、1回に送ることのできるデータの最大の大きさ。IPパケットの最大長にあたり、イーサネットでは標準で1,500オクテット。
イマシルちゃんの解説
宅配便には、「この大きさまでの箱なら1回で運べます」っていうサイズの上限があるよね。
MTUは、ネットワークの回線ごとに決まっている「箱の最大サイズ」なんだ。
イーサネットなら、だいたい千数百オクテットまで。
それより大きいパケットは、分割するか、最初から小さく作って送らないといけないんだよ!
より深い解説
定義
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ページだけが表示されない、など)するトラブルが起こる。