Windows.FAQ - インターネット接続の最適化 (モデム/ISDN/ADSL/CATV)

■ インターネット接続の最適化とは?

Windows9x/Me 標準の TCP/IP スタックの初期設定値は、Ethernet LAN に最適化されています。
モデムや TA を使ったダイヤルアップや、ADSL/CATV を使ったインターネット接続を行う場合は、設定値を最適化することでパフォーマンスが大幅に向上することがあります。

TCP/IP スタックの調整で、影響の大きいパラメータは MTU と RWIN ですが、ここでは両者の基本的な概念を解説し、続いて設定方法を説明します。
(解説はいいから、設定を変更したい場合は直接「最適化するには?」へどうぞ。)

■ MTU とは?

MTU (Maxmum Transmission Unit) は、IP パケットの最大サイズを規定します。

TCP/IP は「IP パケット」という単位でデータを送受信します。
IP の下位層 (Ethernet、PPP、PPPoE など) は1回に送信できるデータの最大量が決まっていますが、IP パケットサイズが下位層の最大転送サイズより大きい場合、IP パケットは複数のデータに分割 (フラグメント) され、送信先で再構成 (リアセンブル) されるためパフォーマンスが悪化します。
逆に IP パケットサイズが下位層の最大転送サイズより小さすぎる場合、本当は一度にたくさんのデータを送信できるはずなのに、少量ずつ送ってしまうため、やっぱりパフォーマンスが悪化します。

このことから、下位層にあわせた最適な MTU サイズを設定することで、パフォーマンスが向上することがわかります。

特定の相手との間の最適な MTU サイズは、以下のコマンドで調査することができます。
C:\WINDOWS>ping <ホスト名または IP アドレス> -f -l <パケットサイズ>
C:\WINDOWS>ping www.ntt.co.jp -f -l 1426

ping の -f オプションは、「IP パケットを分割しない」オプションです。
応答が返る場合、指定したパケットサイズは分割しないで送信できるので、最適値を求めるためにより大きいパケットサイズを指定してテストします。
Packet needs to be fragmented but DF set. が返る場合、分割しないと送信できないことがわかるので、最適値を求めるためにより小さいパケットサイズでテストします。
Windows では、ping コマンドで判明した最適なパケットサイズに 28 (IP+ICMP ヘッダ) を足すと、最適な MTU サイズが得られます。

また、通信事業者が公表している MTU サイズを参照してもよいでしょう。たとえば、NTT 東日本が公開している技術資料によると、フレッツ ADSL の MTU サイズは 1454 とされています。

■ RWIN とは?

RWIN (Receive Window size) は、TCP 接続で受信確認せずに、一度に転送できるデータ量を規定します。

低速回線で RWIN を大きく設定すると、パケットロスがあった場合の再送ペナルティが大きくなるので好ましくありません。逆に高速回線で RWIN を小さく設定すると、受信確認待ちのタイムロスが大きくなるので好ましくありません。

RWIN は MSS (Maximum Segment Size) の倍数値で設定しますが、経験的に以下のリスト程度のサイズがよいとされています。(MSS は MTU から IP + TCP ヘッダを除去したサイズなので、通常は MTU = MSS + 40 という計算式が成立します。)

33.6K モデムMSS x 4 = (MTU - 40) * 4
56K モデムMSS x 6 = (MTU - 40) * 6
64K ISDNMSS x 8 = (MTU - 40) * 8
1.5M ADSLMSS x 10〜200 = (MTU - 40) * 10〜200

■ 最適化するには

Windows98/Me の TCP/IP スタックを最適化するには、次のレジストリを変更します。
Windows95 は、多くのパラメータ形式が異なるので、そのままでは以下の設定は効きません。Windows95 の TCP/IP スタックを Windows98 と同等のものにアップグレードするには、ダイヤルアップ ネットワーク 1.3 (DUN1.3) を導入してください。(Winsock2 日本語版は DUN1.3 に含まれます。たまに英語版の Winsock2 導入を勧めているページを見かけますが、日本語版 Windows95 に英語版 Winsock2 を導入すると不具合が発生することが確認されています。[J046083])

データ
HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Class \NetTrans \000x
(0000 から複数あるキーのうち、DriverDesc に TCP/IP と書いてある設定を変更したいエントリ)
MaxMTU文字列型MTU についてを参照。目安は以下の通り。
モデム:576
ISDN:1000
ADSL:1454
HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Vxd \MSTCP
DefaultRcvWindow文字列型RWIN についてを参照。
64KB (2**16) を超える値を設定する場合は、Tcp1323Opts が有効である必要があります。
Default:8192
Tcp1323Opts文字列型RFC 1323 TCP パフォーマンス拡張。
64KB (2**16) を超える RWIN を設定する場合は 1 または 3 が必須。
Windows9x はこの設定が有効にならない障害があり、修正版の適用が必要です。(Q239705)
推奨値:3 (Default)
SackOpts文字列型RFC 2018 Selective Ack。ロスした特定のパケットのみ再送します。
無効の場合、ロスしたパケット以降を全て再送します。
推奨値:1 (Default)
DefaultTTL文字列型送信パケットが通過できるルーターの数を指定します。
小さすぎると到達できないことがあり、大きすぎると到達できないことが判明するまで時間がかかることがあります。 推奨値:64 (Default:128)
HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Vxd \MSTCP \Parameters
MaxDupAcksDWORD 型高速再送オプション
推奨値:3 (Default)

以下の vbs ファイルをダウンロードして実行 (ダブルクリック) することで、設定を簡単に行うことができます。

  Download  設定用:vbs tcptune.vbs 設定削除用:vbs rmtcptune.vbs

■ 速度を確認するには?

現在の接続速度の目安を得るには、次のようなサイトでチェックしてみるといいでしょう。
(言うまでもないと思いますが、転送速度は回線やネットワークの状態に左右されます。)

■ それでも遅い場合は?

ADSL は回線状態によって大きく速度が左右されます。NTT の収容局から遠い場合や、NTT の回線設定によって大幅に速度が変わることがあります。
納得のいかない速度しか得られない場合、NTT などに相談することをお勧めします。

また、以下のような障害によっても速度が低下するので、該当しないかチェックしましょう。


参考 FAQ
Windows98 は Windows95 よりダイアルアップのパフォーマンスがいい?
レジストリをいじらない Windows98/Me のダイヤルアップアダプタ MTU 変更方法
同時に実行できる http ダウンロード数が制限されているようですが?
IE で同時接続数を増やすには?(ブラウザの表示速度も速くなりますが、問題も...)

参考資料
Windows98 Resource Kit Chapter.31 Windows98 Registry - TCP/IP Registry Entries
Windows9x/Me TCP/IP Registry Entries
List of Documentation Errors in Windows 98 Resource Kit
Windows9x/Me TCP/IP Registry Entries in the NetTrans Subkey
RFC 1323 Options Can Not Be Enabled in Windows 95/98
Windows 95 and Windows 98 TCP/IP May Retransmit Packets Prematurely
iSpeed for Windows
MTUSpeed Pro
Enabling High Performance Data Transfers
MTU等の調整で高速接続・高速表示
TechNet Microsoft Windows 2000 TCP/IP 実装詳細
Description of Windows 2000 TCP Features
Windows 2000 Does Not Use Configured TCPWindowSize Registry Parameter When Accepting a Connection


トップページに戻る