■FTPで大きなファイルがダウンロードできなかったり、WWWページがうまく表示されない。


[原 因]

これだけでは、はっきりしない部分も多いが、以下に該当する場合はPMTUDブラックホール問題の可能性が高い。

  1. サーバ側が、Yahooやusen、CATV等のLAN型接続で1454Byteより大きいMTU長の回線サービスを利用している。

  2. 自分と同じプロバイダのほか、問題が発生しないケースもあり、全てのクライアントで問題が出るわけではない。問題が発生するのは、クライアント側のMTUが自分より小さい(フレッツ等、PPPoEの場合は1454Byteのケースが多いはず。)場合に発生している。

  3. クライアントからサーバへの上り(MTUの小さいほうから大きいほう)は大丈夫であるが、下り方向で大きなデータを転送するケース(即ち、FTPサーバからのダウンロードやWWWアクセス)で問題が発生する。小さいコンテンツ(1KByte程度)では、問題は発生しない。

PMTUDブラックホール(PathMTUDiscovery Blackhole)については、検索すればインターネット上にいくらでも情報はあるので、ここでは簡単に。

PMTUDは、MTU長の異なるネットワーク間でうまく通信できるようにするための仕組みである。PMTUDでは、MTU長の大きいほうから小さい方向にパケットを中継するとき、物理的にそのままでは送れないのでフラグメント(1つのパケットを分割して送ること)しようとするが、フラグメントが許可されていない場合、送信元にMTU長を小さくするようにICMPを使って通過できるMTU長を通知する。このパケットがうまく送信元(ここでのケースではサーバ)に届かないと、送信元はいつまでも元のサイズで送ろうとするので、永遠に通信できなくなってしまう。サーバ側がBBR環境(NAT)の場合、送信したTCPとは異なるICMPで、しかも途中のルータからこのパケットが帰ってくるので、BBRでうまく送信元に中継してくれるものは皆無のはず。また、多くのBBRはICMPそのものを遮断するので、サーバにはこの情報が到達せずこの現象が発生しする。


[対 処]

本質はネットワークの問題なので手は打てないが、サーバ側でMTU長を調整してあげれば回避できる。MTU長としては、世の中の多くのPPPoE環境で使われている1454Byteで問題ない。MTU長は大きいほうがオーバヘッドが減るので、スループットが上がるが、サーバを建てていて相手に見えないのでは話にならないので、Yahooやusen、CATV等の1454Byteより大きいMTU長の回線サービスを使用してサーバ公開するなら、MTU長の調整は必須と思ったほうが間違いない。

  1. サーバでの対処

    パケットを送出しているのはサーバなので、ここで明示的にMTUを1454Byteに設定する。Windowsなら、Dr.TCP等いろいろツールがあるので、それを使えば簡単に設定できる。こちらの情報はインターネット上にいくらでもあるので、検索してほしい。Linuxなら、ifconfigコマンドでインタフェースを指定して設定すればよい。

    # ifconfig
    eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx
    inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
    UP BROADCAST RUNNING MULTICAST
    MTU:1500 Metric:1
    RX packets:288442 errors:0 dropped:0 overruns:0 frame:0
    TX packets:356260 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:100
    RX bytes:44572672 (42.5 Mb) TX bytes:331743976 (316.3 Mb)
    Interrupt:12 Base address:0x6c00 Memory:ef100000-ef100038
    #
    ifconfig eth0 mtu 1454
    # ifconfig
    eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx
    inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
    UP BROADCAST RUNNING MULTICAST
    MTU:1454 Metric:1
    RX packets:288442 errors:0 dropped:0 overruns:0 frame:0
    TX packets:356260 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:100
    RX bytes:44572672 (42.5 Mb) TX bytes:331743976 (316.3 Mb)
    Interrupt:12 Base address:0x6c00 Memory:ef100000-ef100038

  2. ルータ(BBR)での対処

    サーバでの設定が困難なら、BBRで設定しても大丈夫である。この場合、BBRがMTUの境界ルータになるが、家庭内は単なるレイヤ2の世界なのでサーバにICMPは届くので、サーバが自動的にBBRから通知された1454Byteに調整するので、問題は発生しない。BBRが2段になっている場合は、基本的にサーバが接続されているBBRで行うこと。


Top Pageへ     戻る