2. MSSの調整

ルータでMSSを最適な値に上書きすることにより、MTUの問題を回避することができます。 MSS(Max Segment Size)はTCPのオプションの一つで、 一つのIPデータグラムで送る量の最大値を決めます。 このMSSを調整し、PPPoEでのMTUから40引いた値に設定することにより、 データの量がちょうど一つのIPデータグラムに入り、 フラグメントなしでデータを送ることができます。 フレッツADSLの場合、PPPoEのMTU値は1454オクテットなので、 最適なMSSの値は1414オクテットとなります。

EthernetのMTU値は1500オクテットなので、 LAN側のホストはMSS値を1460オクテットに設定してパケットを送信してきます。 このMSSの値のままではルータでWAN側のPPPoEに中継するときに、 フラグメントが必要となってしまうので、 ルータで次のようにMSSの値を調整します。

  1. LAN側(Ethernet側)ホストから1500オクテットのIPデータグラムを受け取る。

  2. TCPのSYNパケットかどうか調べる。

  3. TCPのSYNパケットの場合、MSSの値を調べて、 MSSが(PPPoEのMTU値 - 40)よりも大きければ、 (PPPoEのMTU値 - 40)に書き換える。

  4. TCPのSYNパケット以外はそのまま通過させる。

ルータでWAN側へ出ていくTCP SYNパケットのMSSの値を調整することにより、 調整されたMSS値でTCPのセッションが開始されるので、 送信されるIPデータグラムのサイズがPPPoEのMTUの値と同じになり、 結果的にフラグメントが起こらないため正常に通信ができるようになります。

ただし、MSSの調整によるMTU問題の回避はUDPパケットについては対応できません。