PC・ルータにおける通信プロトコルに関する設定の問題

その前に機器の性能を確認

通信プロトコルのパラメータ調整を行う前に前提条件があります。
それは使用しているHUBやNIC(Network Interface Card:LANカードやLANボード)の性能が低くないということです。現在主流のHUBやNICは100Mbpsの通信速度のもの(100BASE-TX)ですが、それよりも古い低速の規格にしか対応していないもの(10BASE-T , 10BASE2 , 10BASE5)もあります。これらでは10Mbpsの通信速度に対応していますが、それはあくまで理論値で実効速度は4〜6Mbps程度です。

また、ノートパソコンにPCカードのLANカードを使用している場合にはさらなる問題が発生します。たとえLANカードが100BASE-TX対応となっていてもCard Bus仕様(PCカードスロットの仕様)のものでなければ速度は出ません。Card Bus対応でなければ、ただ100Mbps規格のLANに接続できるというだけです。まず第1番目にパソコンのPCカードスロットの仕様がCard Busに対応していること、次に使用しているLANカードがCard Bus対応の100Mbps仕様のものであることを確認してください。

また、USB接続のLANアダプタを使用している場合も問題です。USB接続のLANアダプタが準拠しているUSBの規格の通信速度は12Mbps(理論値)で、これも100Mbpsに対応しているといっても100Mbps規格のLANに接続できるというだけで、実効速度は4〜6Mbps程度です。
IEEE802.11bの無線LANを使用している場合も問題です。この規格の通信速度は11Mbps(理論値)で実効速度は4〜6Mbps程度です。IEEE802.11aやIEEE802.11gという規格の場合でも電波状況が悪ければ速度低下は十分あり得ます。

以上に該当する場合は、まずADSLのリンク速度を確認してください。そのリンク速度の80〜85%の実効速度が出ているようならOK(リンク速度が低いのでNIC等の限界が問題にならない)ですが、そうでない場合はHUBやNIC、場合によってはケーブルも取り替えなければ実効速度の向上は望めません。リンク速度の目安は7Mbps辺りでしょうか。これより低ければ実効速度もそれなりで、機器の性能等が問題になる以前の問題です。

以上の問題が解決されたら、以下の通信プロトコル・パラメータ調整にトライしてください。

TCP/IPのパラメータ

リンク速度は収容局のDSLAMと加入者宅のADSLモデム間の物理的通信速度で、これは回線の環境によって決まってしまいます。これに対して実効速度(スループット)は、アプリケーションソフトが通信プロトコルを利用して通信する場合の速度です。この通信プロトコルのパラメータを最適にすることで実効速度を最適化するのです。実効速度がリンク速度の80〜85%であればほぼ最適化されているといえます。
詳しい原理原則の解説はまた別の機会に譲るとして、ここでは簡単な解説とパラメータの設定方法を取り上げることにします。
インターネットで使用される通信プロトコル TCP/IP は多数のプロトコルで構成され、それらのプロトコルを機能別に4階層で構成したネットワークアーキテクチャです。ネットワークアーキテクチャとは通信機能(サービス)を階層化し、それらの機能を実現するためのプロトコルを体系化したもので、プロトコルとは他の通信ノードの同位層同士の通信方式に関する取り決めです。サービスとはある層がすぐ上の層に提供する通信機能をさします。
さて、TCP/IPは以下のような構成になっています。
階層名 プロトコル名称
アプリケーション層 HTTP  SMTP  FTP  DNS  POP3  DHCP
TELNET  SNMP  TFTP  BOOTP  MIME
トランスポート層 TCP             UDP
インターネット層 IP  ICMP  ARP  RARP
ネットワーク・
インタフェース層
IEEE802.2 SLIP  PPP
Ethernet FDDI V.35 ISDN ATM


@一度に送受信できるデータ量(MTUの最適化)

データの伝送はデータをある一定の大きさのブロックに分けて伝送するブロック伝送の考え方に基づきます。ブロック毎の誤り制御やブロックの連送も可能になり、高い伝送効率が得られます。アプリケーション層におけるデータはそれ以下の層においてある一定サイズのブロックに分割されて扱われます。
このブロックをトランスポート層のTCPではセグメント、インターネット層のIPではデータグラム(パケット)、ネットワーク・インタフェース層のEthernetではフレームと呼んでいます。フレームのデータ部分にはIPのデータグラムが入っており、データグラムのデータ部分にはTCPのセグメントが入っており、セグメントのデータ部分にはアプリケーションのデータが入っています。それぞれのブロックはデータ部分以外に制御情報を格納したヘッダと呼ばれる部分で構成されています。
このような構造になっているため、フレームに入れることができるデータの最大値が上位層にも関係してきます。
Ethernetのフレームは次のような構造になっています。

宛先MACアドレス、送信元MACアドレス、フレーム長、FCSがフレーム制御情報です。
通信分野ではデータ量の単位にオクテットを使います。1オクテットは8ビットであるため1バイトと同じ大きさですので、オクテット=バイトと考えてください。
上図のようにEthernetでは1フレームで送れる最大データ長は1500オクテットでこれがデータグラムの最大長となり、この伝送可能な最大データ長を
MTU(Maximum Transmission Unit)と呼びます。これは使用する通信媒体によって変わってきます。
インターネットにおいて目的ホストまでの間にEthernetよりMTUの小さな通信媒体が含まれるような場合、こちらで送信した1フレーム(1500オクテットデータ)のデータは途中で分割されて伝送されることになり、分割されることにより余計な手間がかかってしまいます。
さて、実際に設定する値は使用している事業者により違います。
事業者 Yahoo!BB アッカ・ネットワークス イー・アクセス NTT
フレッツ・ADSL
MTU 1500 ※注 1454
フレッツ・ADSLではPPPoEという方法を採用しているため、これに必要な制御情報のサイズを1500オクテットから減じます。
※注 アッカ・ネットワークスやイー・アクセスでもPPPoEを採用している場合があります。その場合はフレッツ・ADSLに準じます。

★★★★★★★★★★
特にフレッツ・ADSLでは
MTUに1454より大きい値を設定した場合、Webページによっては見られないところがあったり、目的のページが表示されるまで何分もかかったりと障害が出てくる場合がありますので注意してください。
★★★★★★★★★★

MTUは後述のツールなどを使って設定します。

A応答確認なしに送受信できるデータ量(RWINの最適化)

上記のようにアプリケーション層で扱われる大きなサイズのデータは、下層のTCPでセグメントに分割されて送受信されます。
TCPでは順序制御や応答確認、フロー制御などを行い、信頼性が高く効率のよい通信サービスをアプリケーションに提供しています。
さて、高い信頼性を求めるためにセグメント単位で正しく送受信できたか確認する必要があります。送信されてきたセグメントに関し、受信側は問題なければ肯定応答(ACK:ACKnowledgement)を返送します。
ところが送信側が1セグメントごとにACKを待っていて、ACKが返送されてきたら次のセグメントを送信するとしていたら、応答を待つ時間ばかりが長く効率がよいとはいえません。そこで、受信側は送信側に対して応答を確認しないまま送信してよいデータのサイズを指定します。これをRWIN(Receive WINdow size)と呼び、最大セグメント長の整数倍の値を設定します。送信側はその値を越えない範囲でデータを送信しますが、受信側からACKが届くたびに新たな値に更新されます。
RWINの値を適切にすることで下図(右側)のように効率よい通信が可能です。


さて、最大セグメント長(MSS:Maximum Segment Size)は上記のMTUと密接な関係があります。先ほどの図で分かるように
データグラム長 = IPヘッダ長 + TCPヘッダ長 + セグメント長
ですから
MSS = MTU − ( IPヘッダ長 + TCPヘッダ長 )
となります。通常のヘッダ長はそれぞれ20オクテットずつですので MSS=MTU−40 となります。
さて、RWIN = n × MSS ですが、n をどう決めるかが問題です。
通信にはこちらがデータを送ってから、それに対する応答が帰ってくるまでに要する時間(応答時間)があります。
これは通信相手との距離や通信相手の忙しさにより変わるので普遍的なものではありません。したがって一応の目安として設定せざるを得ませんが、よくアクセスするサーバをターゲットにすればよいでしょう。しかし、厳密に調整するのは大変ですので一般的に適当といわれている値に設定して、その後調整するのが手っ取り早い方法でしょう。Windows98ではMSSの6倍がRWINとなっていますが、これはADSLに適した値ではありません。WindowsMeやWindows2000ではMSSの12倍がRWIN値となっており、この辺が一応適した値のようです。
ADSLの1.5Mサービスではこれでほぼ問題ないのですが、8Mや12MサービスではRWIN値の調整によって実効速度(スループット)が大きく変化しますので、是非後述のツールなどを使って調整してください。
RWINの値が小さすぎれば待ち時間が増えて実効速度(スループット)は低下します。逆に大きすぎればエラーが発生した場合に再送のための手戻りが多くなり実効速度(スループット)の低下につながります。一度カット&トライでいろいろ試して自分の環境での最適値を模索してみてください。
物理的なリンク速度は高いのに実効速度(スループット)が低い場合は、RWIN値調整で最適化することが可能です。最適化の目安は、
実効速度がリンク速度の80〜85%になることです。後述するフリーのツールの他に、自動的にこの値を調整するソフトも市販されていますので、面倒だという方はこれを購入する手もあります。最適化という点では手動調整をお薦めしますが。
モデムでのリンク速度確認方法はこちらをご覧ください。

高速なADSLサービスを利用している場合はRWIN値を大きく取ればよいと単純に考えている人がいるようですが、決してそうではありません。
上記12倍からはじめて、ステップバイステップで最適値を探すしかありません。距離やリンク速度、伝送損失がほぼ同じ場合でも最適なRWIN値も同じになるとは限りませんので、他の人のケースは参考にとどめ腰を据えて調整してみてください。

BMTU・RWIN値の設定

使用しているPCのMTU・RWIN値を下記のツールを使って最適化します。
ブロードバンドルータを使用したインターネットアクセスをしている場合には、ブロードバンドルータの設定にも留意する必要があります。

ブロードバンドルータではMRU(MTU)値が意味を持ちます。RWINは関係ありません。特にフレッツ・ADSLを利用している場合、市販のブロードバンドルータの中にはPPPoE時のMRU値の工場出荷時設定を1454でなく1492にしている製品があります。この場合、PC側でMTU値を1454以下に設定していないときには、特定のサイトが表示できなかったり、表示に何分もかかったりします。このようなときには製品の説明書にしたがい、ブロードバンドルータのMRU値を1454以下に設定しなおしてください。
通常は以下の設定ツールを使用してPC側のMTU・RWIN値を適切に設定すれば問題が発生することはありません。

また、ブロードバンドルータを使用している場合、通信相手に通知されるMTU値には注意が必要です。ブロードバンドルータのMRU(MTU)値とPCのMTU値が同じなら問題ありませんが、異なる場合は次のようになります。
ブロードバンドルータのMRU(MTU)値 > PCのMTU値 の場合、PCのMTU値が通知される。
ブロードバンドルータのMRU(MTU)値 < PCのMTU値 の場合、ブロードバンドルータのMRU(MTU)値が通知される。
理想的には、ブロードバンドルータと配下のPCにはすべて同じMTU値を設定するべきです。
しかし、ブロードバンドルータによってはこの値が変更できない機種もありますので注意してください。
Windows95、Windows98、Windows98SEのTCP/IP stack には不都合があります。遅延の大きなネットワークではスループットが低くなってしまうというものです。こちら(Microsoftのサイト) をご覧になり、心配ならばパッチをダウンロードして適用してください。(推奨)

MTUやRWINなどのパラメータを設定する際によく使われるツールをWin用、Mac用それぞれ二・三挙げてみます。
初心者にとっては設定項目が少ないツールの方がよいと思います。

 Dr.TCPfor Windows

実行形式のファイル(DRTCP021.EXE等)をダウンロードします。
これを実行すると次のようなウィンドウが開きます。
@ Adapter Settings から設定対象の通信アダプタを選択します。
  PCをADSLモデムに直接接続していれば Efficient Networks P.P.P.o.E Adapter
  ブロードバンドルータ経由で接続していれば LANボードの名称のAdapter
  を選択します。
 
注意:PCをADSLモデムに直接接続しており、Windows2000またはXPを使用している場合
     このツールでMTUを変更できません。(RWINは変更可能)
     デバイスマネージャからネットワークアダプタの
       Efficient Networks P.P.P.o.E Adapter 等
     を選択し、詳細設定で MaxFrameSize を変更します。


A MTU を設定します。
  フレッツの場合1454が推奨ですが、私の環境では1448がベストです。
B Tcp Receive Window を設定します。(これがRWIN値)
  取り敢えず、Aで設定したMTU-40(MSS値)×12 の値を設定します。
  MTU:1454では1414×12=16968、MTU:1448では1408×12=16896です。
  まずは12倍ですが、この倍率を変えて速度の変化を調べるのです。
C TTL には 128 を設定しておきます。

他はデフォルトでよいでしょう。
Saveボタンを押して保存し、ExitボタンでDr.TCPを終了させた後、
Windowsを再起動してください。
本当に設定したとおりになったかどうかは こちら(SpeedGuide.net TCP/IP Analyzer) をアクセスして確認してください。
フレッツ・ADSLの場合MTUに1454を設定しますが、こうすると上記測定サイトで次のような表示がでます。
 MTU is not fully optimized for broadband. Consider increasing your MTU to 1500 for better throughput.
これは気にしないで下さい。必要があって1454に設定しているのですから。
次に実効速度を計測します。いろいろな計測サイトがありますので気に入ったところで計測してください。計測サイトにより計測値に若干の違いは出てきますし、計測を実施する時間帯によっても計測値は違ってきます。この点は承知しておいてください。こちら(Linkのページ)にいくつか計測サイトを載せてあります。
私はこちら(SpeedTestサイト)を活用しています。
あとはひたすら Tcp Receive Window値設定変更 − 再起動 − 速度確認 を繰り返し、自分の環境での最適値を探します。

 NetTunefor Windows

MTUでは 設定したいアダプタを選択し 1500(フレッツ・ADSLでは1454) のラジオボタンをクリックし設定ボタンを押します。
Default TTL では 128 を選んでおけばよいでしょう。
Tcp Window Size では MSSに対する倍率 に取り敢えず 12 を設定して設定ボタンを押してください。 
他はデフォルトでよいでしょう。
設定が終わったら
Windowsを再起動してください。
本当に設定したとおりになったかどうかは こちら(SpeedGuide.net TCP/IP Analyzer) をアクセスして確認してください。
あとは上記同様ひたすら Tcp Window Size設定変更 − 再起動 − 速度確認 を繰り返し、自分の環境での最適値を探します。

 EditMTUfor Windows

基本的には上記のDr.TCPやNetTuneと同様ですが、設定可能項目が多彩なため、初心者にはどうかなと思います。
ヘルプも充実していますので中・上級者を目指す人にとっては格好のツールでしょう。

 IPNetTunerfor Macintosh:Mac OS 7.6〜9.x
 IPNetTunerXfor Macintosh:Mac OS X

シェアウェアです。
MTUの設定は項目のプルダウンメニューの ip_interface_MTU に行います。
RWINの設定は項目のプルダウンメニューの tcp_rwin_mss_multiplier にMSSに対する倍率 12 を設定します。
後は設定をセーブします。
本当に設定したとおりになったかどうかは こちら(SpeedGuide.net TCP/IP Analyzer) をアクセスして確認してください。
あとは上記同様ひたすら MSSに対する倍率値設定変更 − 速度確認 を繰り返し、自分の環境での最適値を探します。

 RMACfor Macintosh:Mac OS X

当方にはMac OS Xの環境がないので試したことはありませんが、使えるそうです。


CRWIN・MTU調整の一例