よろず部屋 品書きへ


25.Air H" 最適設定...?

 発端は、☆ ぬ〜 ☆さんの記事。なぬ、Air H"での通信がMTU変更で速くなる...。
 あらま、というのでいろいろ調べてみた。まずはとにかく、用語の解説。手っ取り早く結果をご覧になりたい方は、こちらを。
 ざっと検索した限りでは、Net Lan Do!さんADSLア・ラ・カ・ル・ト、もしくはIbuki氏ブロードバンドに有効な設定法がわかりやすい。ADSL絡みであちこちで話題になっているので、詳細についてはこれらのサイトをご覧いただくとして、ここでは話の進みに支障がない程度のごく簡単な解説を。



 迂闊なことに気づいていなかったのだが、DDI POCKETのAir H"のページに、以下の記述がある。

Windows98/Meをお使いのお客様へ
「ネット25」、または「つなぎ放題コース」をご契約のお客様は、 ダイヤルアップアダプタの「IPパケットサイズ」を「大」に 設定をお願いします。
 これは、Windows9x/MEの仕様で、MTUの指定そのもの。IPパケットサイズ"大"はMTU値1500、"中"は1000、"小"は576となっている。通常は"自動"に設定され、これだとAir H"の場合は"小"に設定されてしまっている。実際に"自動"のままでPCから、-fオプション(フラグメント禁止)および-lオプション(送信パケットサイズ指定)つきでpingを打つと、549bytesを指定した場合、
Pinging 210.196.3.183 with 549 bytes of data:

Packet needs to be fragmented but DF set.
 が返ってくる。
 フラグメントなしで送れる最大の長さはMTUで決められている。それ以上の長さのパケットを送ろうとすると、通常はフラグメントが発生する。そこに、-fオプションでフラグメントを禁止して549byteを送ろうとして、はじかれてるわけである。
 548bytesを指定すれば通るので、MTUは、548+28=576に設定されているということである。

 ここで、DDIがいう通りにIPパケットサイズを"大"に明示指定して、再起動。今度はMTUが1500なので、1500-28=1472byteまで送れるはずである。実際に"ping -f -l 1472 -w 3000 210.196.3.183"(-wは待ち時間指定。送信先としてはPRINのDNSサーバを指定した)として、以下を得た;
Pinging 210.196.3.183 with 1472 bytes of data:

Reply from 210.196.3.183: bytes=1472 time=2720ms TTL=240
Reply from 210.196.3.183: bytes=1472 time=2284ms TTL=240
Reply from 210.196.3.183: bytes=1472 time=2320ms TTL=240
Reply from 210.196.3.183: bytes=1472 time=2344ms TTL=240

Ping statistics for 210.196.3.183:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 2284ms, Maximum =  2720ms, Average =  2417ms
 ADSLの場合、業者によっては最大パケットサイズが1500bytesに満たないところがあり、その場合1472bytesのpingを試行すると"Packet needs to be..."のエラーになる。
 上の結果、大丈夫しっかり通信できている。少なくともAir H"は、DDIのいう通り、MTU1500での通信は可能ということである。で当然、1473byteはエラーになった。注文通りの結果である。
 待ち時間の3000msは勘で設定したが、大当たりだった。すげぇ時間だが。


 一方のRWINは、これまだWindowsの仕様により、自動的にMSSの整数倍に設定される。この値が全般的に小さすぎるため(Win2000/MEを除いて)、ADSL環境においてはこれを変更することがあちこちで推奨されているわけである。
 RWINの必要値は前述のとおり計算によって求まるのだが、Air H"環境において計算すると、上のpingの結果を用いるならば、32kbpsX2417msX1.5/8=14502bytes。MMSの約10倍程度ということになり、Win2000/ME(MSSの12倍に設定される)ならまずまず、Win9X(MSSの8倍に設定される)だと足りんということにはなるのだが、さてこの理屈が通用するのかどうか。ADSLとは、帯域幅が違いすぎるのだ。


 理論武装はこのあたりで行き詰まってしまったので、とにかく実測。MTU/RWINの変更には定番Dr.TCPを使い、設定内容はSpeedGuide TCP/IP Analyzerで確認した。
 測定は、10/19 4:00、10/19 5:30、10/20 5:45、10/21 5:40、10/28 7:15の計5回おこなった。
 測定には、memn0ckさんに教えていただいた、インターネット回線速度調査の"低速回線用"を使わせていただいた。画像を3枚表示して平均値を表示してくれる。画像がきれいな写真で、見飽きないのは助かった。
 @@niftyとPRIN、双方で実測した結果は次のとおり。単位はKbpsである。

平均値
  MTU
1500 576
@nifty PRIN @nifty PRIN
RWIN大 23.2 22.5 19.0 20.3
RWIN中 20.4 22.2 18.1 16.5
RWIN小 15.9 16.6 18.1 18.9

最大値
  MTU
1500 576
@nifty PRIN @nifty PRIN
RWIN大 25.0 25.0 23.0 23.0
RWIN中 25.0 25.0 23.0 23.0
RWIN小 18.0 18.0 21.0 22.0

最小値
  MTU
1500 576
@nifty PRIN @nifty PRIN
RWIN大 13.0 16.0 10.0 14.0
RWIN中 16.0 15.0 10.0 8.0
RWIN小 13.0 14.0 12.0 13.0

 表中でRWIN大/中/小とあるのは、それぞれ次のとおり。
  MTU1500 MTU576
RWIN大 64240(MSSX44) 65392(MSSX122)
RWIN中 11680(MSSX8) 4288(MSSX8)
RWIN小 2920(MSSX2) 2880(MSSX5)


 できるだけ回線状態に左右されないで試験したかったため早朝を選んだのだが、それでもこれだけのばらつきが出る。10月末にDDI側の回線増強があり、より安定しているのはたしかだが、それでも状況によってはやはり、これだけかこれ以上のばらつきとなるだろう。MTUだRWINだという以前に、回線状態の方が影響が大きいことはたしかと思われる。最小値を見る限り、どうにも一定の傾向は掴めない。
 最大値に注目すると、RWIN小はやはり小さすぎるようである。RWIN大と中では差がなく、MTUは1500の方が成績がよい。このあたりが狙い目か。
 この結果で平均値を見ることが妥当かどうか難しいのだが、とにかく値としてはこういうことであって、MTU/RWINともに大きいほどよいという結果である。


 で、さて実際の設定をどうするかという話だが、Windows98/MEについては、DDIがいう通りIPパケットサイズを大にするだけでよいと思われる。RWINは、98では8倍の11680、MEでは12倍の17520に自動設定されるが、これをDr.TCPであれこれ変更するほどのことはないだろう。
 平均値を見る限り、RWINを大きくした方が成績がいいのだが、一方で無線通信であるAir H"の場合、再送が起こる確率は比較的高いだろうし、そうなった場合RWINが大きすぎるのはかえって危険である。
 memn0ckさんによると、MTUを1500にすると時間帯によってはまったくパケットが来ないことがあるそうだ。危険性はあるかもしれないが、どういうわけか私は今のところ体験していない。
 それこれ含めて、私のWindowsマシンでは、MTU=1500、RWIN=17520で統一している。

 ちなみにZaurusの場合、MTUはデフォルトで1500である。変更可能で、冒頭の☆ ぬ〜 ☆さんの記事はこれに触れているわけだが、少なくとも今回の実測結果からすると、変更の必要はないように思われる。RWINの方は設定項目がなく、SpeedGuide TCP/IP Analyzerにアクセスしても当然ながら結果が出ないので、お手上げ。

 実際にパケットがどういう挙動になっているのか、RWINは型通り算出されていいものなのか、などなど謎は多いながら、とにかく実測で語るしかなかったというところで、本稿これまで。

(2001/11/13)