パスMTU探索

読み:ぱすえむてぃーゆーたんさく / 英語表記:Path MTU Discovery

送信元から宛先までの経路上で、途中で分割されずに通れるパケットの最大の大きさ(パスMTU)を調べる仕組み。

イマシルちゃんの解説

荷物を送るとき、途中にとっても狭いトンネルがあったら、大きな荷物は通れないよね。
パスMTU探索は、「この道のりで一番狭いところは何センチ?」を調べる方法なんだ。

一番狭いところに合わせた大きさで送れば、途中で荷物を分けたり、捨てられたりしなくて済むんだよ!

より深い解説

定義

MTU(Maximum Transmission Unit)は、1つの回線で一度に送れるパケットの最大長である(イーサネットでは1,500バイト)。経路上の各回線のMTUのうち最も小さいものをパスMTUといい、それを調べる仕組みをパスMTU探索(PMTUD)という。

IPv4での仕組み(RFC 1191)

  1. 送信元は、IPヘッダーのDF(Don't Fragment)ビットを立てて、パケットを送る
  2. 次の回線のMTUより大きいパケットを受け取ったルータは、分割せずに捨て、ICMPの宛先到達不能(タイプ3、コード4:フラグメントが必要)を、次の回線のMTUの値を添えて送信元に返す
  3. 送信元は、その値に合わせてパケットを小さくして送り直す

IPv6での仕組み(RFC 8201)

IPv6では、経路上のルータはパケットを分割しない(分割できるのは送信元だけ)。大きすぎるパケットを受け取ったルータは、パケットを捨ててICMPv6のPacket Too Big(タイプ2)を返す。送信元はそこに書かれたMTUに合わせて送り直す。

パスMTUを決めるのはこのメッセージで、近隣探索プロトコルのメッセージではない。なお、IPv6ではすべての回線が少なくとも1,280バイトのMTUを持つことが求められている。

ブラックホール問題

途中のファイアウォールがICMPやICMPv6をすべて遮断していると、パスMTU探索のためのメッセージが送信元に届かない。送信元は大きなパケットを送り続け、それがすべて捨てられるため、「接続はできるのに、大きなデータだけ届かない」という障害になる。これをPMTUDブラックホールという。

対策には次のようなものがある。

PPPoEやトンネル(IPsec、GREなど)を使う回線は、ヘッダーが増えるぶんMTUが1,500より小さくなるため、この問題が起きやすい。

実際の試験ではここに出る!

この用語が出てくる記事

↑