現在地 HOME > 掲示板 > IT1 > 538.html ★阿修羅♪ |
|
「よく聞くMTU、RWINってなんのこと?」その他、ADSLスループット改善関連。
よく聞くMTU、RWINってなんのこと?
http://arena.nikkeibp.co.jp/tec/bb/20030711/105280/
ブロードバンドのスピードの話になると、よく「MTU」「RWIN」という2
つの言葉が出てくる。みなさんも一度や二度はこのアルファベットの並び
を見かけたことはあるだろう。実際に回線スピードを決める「カギ」では
あるのだが、その正体は意外と知られていない。ここでガッチリと、その
意味と役割を、頭の中に入れてしまおうではないか。
インターネット上では、データは細分化されたパケット(小包状のもの)
として扱われるが、このパケットサイズの最大値を決めたものが
MTU(Maximum Transfer Unit)だ。パケットが大きければ大きいほど、1度
で送ることができるデータの量が増え、何度もデータを送信しなくて済む
ので効率よくデータを送れる。
これをトラックに例えると、30tの荷物を運ぶのに、5tトラックを使っ
て6回に分けて運ぶか、10tトラックを使って3回で運ぶかというようなも
のだ。当然後者の方が、データ転送スピードは速くなる。しかし、途中で
データの送信に失敗して「はい、最初からやり直し」となった場合、再送
しなければならないパケット量が大きくなり、ムダが増えるというリスク
も発生する。通常のLANではMTUの値は1500バイトとなる。ただし、フレッ
ツ・ADSLでは1454バイトと、それより小さい値が使われている。
▲ MTUとは、一度に扱うパケットサイズの最大値。RWINとは、確認しないで受け取れるデータ量の最大値
次にRWINだ。インターネットのプロトコルであるTCP/IPは、データを送
信した後に「パケットはちゃんと届いた?」「大丈夫、ちゃんと届いてい
るよ」と確認し合ってデータをやり取りしている。
これを1パケットごとにやっていると、確かに確実にデータは届けられ
るが、効率は悪く、スピードが遅くなってしまう。そこで、ある程度パケ
ットをまとめ、「10パケット受け取ったら確認する」というようなお約束
を設けて、効率化を図っている。
この「確認しないで受け取れるデータ量の最大値」がRWIN(Receive
Window Size)だ。RWINはMTUの値からヘッダー部分の40バイトを引きそれ
を整数倍した値だ。RWINは大きければ大きいほど、その分短時間にサクー
ッと大量のデータの受け渡しができることになる。逆に途中でエラーが発
生したり、何らかの理由でうまく受け取れなかった場合は、その分まとめ
て再送しなければならないので、結局時間がかかるというデメリットもあ
る。
MTUやRWINは、OSや回線の種類などよって最適値が変わってくる。両方
とも決して「大きければいい」というものでもない。環境にあったベスト
バランスこそ、スピードアップに大きく貢献する。次回からは「じゃあど
うやったら最適値がわかるのか?」ということについて考えたいと思う。
(高橋 浩子=ティー・キューブ)
MTUの最適値をコマンドプロンプトを使って見つけよう
http://arena.nikkeibp.co.jp/tec/bb/20030717/105342/
「よく聞くMTU、RWINってなんのこと?」でMTUとRWINが「何なのか」が
分かったところで、気になるのは「それじゃあ最適値って一体いくつなの?
」ということだろう。まずはMTUの最適値の求め方から伝授しよう。コマ
ンドプロンプト(MS-DOSプロンプト)を使うと、あなたの環境でベストな
MTU値がわかるのだ。ここではCATV10Mbpsの環境で、Windows XPマシンを
使って実験してみた。
最初にスタートメニューのプログラム、アクセサリからコマンドプロン
プトを選ぶ。出てきた画面で、次のようにコマンドを打ち込み、[Enter]
を押す。
ping -l 1300 -f www.t-cube55.com
このコマンド意味は、「1300バイトのデータを細分化せずに
www.t-cube55.comに送りなさい」という意味だ。データの送り先となるサ
イトはどこでもいい。ドメイン名ではなく、IPアドレスが分かっていたら、
直接打ち込んでもいい。
[Enter]を押してしばらくすると、下記のように表示されたら通信成功。
1300バイトのデータは何の問題も無く、するっと通過できたことになる。
その下を見ると
Packets:Sent = 4 , Receive =4 , Lost = 0 (0% loss)
と書いてある。ひとつも失敗しないで、ちゃんと送ったデータを完璧に
受け取れたわけだ。これで「1300バイトは余裕」ということがわかったの
で、数字を「1350」「1400」「1500」と大きくし、もっと大きなパケット
も送れるかどうか試してみる。
▲ Yahoo! Japanのサイトに1300バイトのデータを送ってみた。結果は通信成功。ひとつもロスなしでデータはすべて届いている
(高橋 浩子=ティー・キューブ)
MTUの値からRWINの最適値を求めるには?(前編)
「MTUの最適値をコマンドプロンプトを使って見つけよう」では、MTUの最適値を計算できた。
http://arena.nikkeibp.co.jp/tec/bb/20030728/105428/
「よく聞くMTU、RWINってなんのこと?」では、MTUとRWINがそれぞれ「一
度に扱うパケットサイズの最大値」「確認しないで受け取れるデータ量の
最大値」ということを学んだ。また、「MTUの最適値をコマンドプロンプ
トを使って見つけよう」では、MTUの最適値を計算できた。
では続いて、今回はRWINの最適値を求める基本的な考え方を説明しよう。
RWIN値は、MTUの最適値から算出することができる。計算式は次の通りだ。
なぜMTU値から40バイトを引くのかというと、TCP/IPで運んだ純粋なデ
ータサイズを算出するためだ。パケットにはTCPヘッダー、IPヘッダーと
呼ばれる制御情報がくっついていて、それぞれが20バイトずつある。
「MTU値」から 40バイトを引いた、純粋なデータサイズを「MSS(Maximum
Segment Size)」と呼ぶ。覚えておこう。
さて、今回実験したCATV10Mbpsの環境で、断片化するギリギリの値が
「1472」であった。この値から、MTU、MSSそれぞれを計算してみよう。
MTU = 1472 + 28 = 1500
MSS = 1500 - 40 = 1460
となる。ここで「なぜ28を足すのか?」と疑問に思った人も多いだろう。
「MTUの最適値をコマンドプロンプトを使って見つけよう」の2ページ目
でも述べているように、pingコマンドでは、IPのエラーや制御メッセージ
をやり取りするために、ICMPというプロトコルを使って通信をする。その
場合のヘッダーサイズが28バイトなのだ。従って断片化しないギリギリの
データサイズに、28バイトを足した1500バイトがMTUの値となる。
MSSについては、先ほど述べたとおり。インターネットも含め、TCP/IP
通信で送られるデータの先頭(ヘッダ)にくっついているデータが40バイ
トあるので、1500バイトから40バイトを引いた1460バイトが最適のデータ
サイズとなる。そして、一度に受け取る最大のデータサイズRWINは、この
値を整数倍化したものとなるのだ。
次回は具体的な計算方法を見ていく。
(高橋 浩子=ティー・キューブ)
MTUの値からRWINの最適値を求めるには?(後編)
http://arena.nikkeibp.co.jp/tec/bb/20030801/105489/
「MTUの値からRWINの最適値を求めるには?(前編)」では、RWINを求
める基本的な考え方を説明した。今回はいよいよ、最適RWIN値を算出して
みる。
環境は前回MTU値を求めたのと同じ通信環境(10MbpsのCATV)だ。ping
コマンドを実行した結果、応答が帰ってくるまでの平均速度(Average)
は34msであった。RWINを求めるには、この34msという値を使うのだ。
▲応答が返ってくるまでの平均時間を使ってRWIN値を求める
TCP/IPの仕組みでは、データを受け取ったAck(確認応答)が得られる
と、再びサーバーがデータを送信する。pingコマンドで往復に34msかかっ
たということは、PCがサーバーからデータを受け取って、その確認応答が
サーバーに戻るまでに34msはかかるということだ。
要するに34ms間は、何の確認もなしにデータを受け取り続けられるのだ
から、この時間分のデータ量をRWINに設定すればよい。
計算は次のように行う。まずは、回線の実効速度(スループット)を求
めよう。スループットは、「RBBTODAY」などの速度測定サイトで求められ
る。今回の環境は、CATV10Mbpsであったが、スループットは3Mbpsであっ
た。
3Mbps(300万ビット/秒)で、平均34ms(34/1000秒)のスピードで応答が
返ってきたのだから、
最低でもこのデータ量までは一度に受け取れることになる。このままだ
と分かりにくいので、単位を「バイト」に直してみよう。1バイトは8ビッ
トだから、
102000 / 8 = 12750バイト
これが、実験した環境で一度に受け取れるデータサイズである。ややこ
しいのだが、ここで計算したデータ量は、あくまでも単純に「現在一度に
受け取っている量」であり、RWINの最適値ではない。
では、先に進もう。先ほど算出した「12750バイト」は、1パケットあた
り1460バイト(=MSS値)で送信を行うと、何パケット分となるかを計算し
てみよう。これで、この回線では「一度に何パケットまで送っても大丈夫
なのか」がわかる。
つまり、この回線だと、1回のデータのやりとりは10パケットまではい
っぺんに送っても大丈夫である。ただし、このとき、Windowsは2パケット
単位でデータを送信するので、必ず偶数値に切り上げることを覚えておい
てほしい。
さて、いよいよ最終段階だ。10パケットは結局どれだけのバイト数かと
考えていくと、
1460 × 10 = 14600バイト
となる。この環境でのRWINの最適値は14600バイトとなるのだ。
ちなみにWindows 98では、RWINのデフォルト値は8192バイトと小さい。
ブロードバンド回線には小さすぎる値であれば、変更したほうがよいだろ
う。Windows 2000/XPでは、RWINのデフォルト値が1万6384バイトと大きく
なっており、FTTHなどの高速回線でない限りデフォルト値でも問題はない
だろう。
(高橋 浩子=ティー・キューブ)
「EditMTU」でMTUとRWINを簡単設定(自動設定編)
http://arena.nikkeibp.co.jp/tec/bb/20030818/105596/
今まで4回に渡ってMTUとRWINの現在値の見つけ方、最適値の計算方法
について解説してきたが、今回紹介する「EditMTU」というフリーソフト
を使えば、とても簡単に、そしてあっさりとMTUとRWINを最適化できる。
楽して回線スピードを上げて、快適な環境を手に入れたいという「楽チン
派」の人には、うってつけのツールだ。「窓の杜」や「Vector」などから
入手可能なので、ぜひチェックしてみてほしい。
▲回線の速度を選び、接続するホスト名を指定すれば、MTUとRWINの最適値を自動的に測定するフリーソフト「EditMTU」。最新バージョンは2.31(作者HEN氏のページはこちら)
EditMTUには手動でMTU/RWINを調整する方法と、自動設定の2通りの方
法がある。まずは初心者にも安心な、自動設定の方法から説明していこう。
まず、ソフトを起動し、[自動設定]タブをクリック。「速度の種別」で
使用している回線スピードを選択し、「どこのサイトで計測するか」を中
央のプルダウンメニューから選択する。準備はたったこれだけだ。後は
[測定開始]ボタンを押すだけで自動的に計測が始まる。
窓の中には“たぁーっ”と数字が表示されていくのだが、これは「MTU
の最適値をコマンドプロンプトを使って見つけよう」の回で説明した
「pingコマンド」を自動的に打っているのだと理解してほしい。
pingを自分で打つ場合は、「どのくらいで断片化するか」を知るために、
1300はどうか、1350ならどうか、というように、パケット量をひとつずつ
確かめていかなければならないが、これを使うと「すべておまかせ」状態
なので、非常に楽に計測できる。
▲レジストリに設定値を書き込む前に確認用のダイアログが出る
測り終わると、「Registryに書き込みます。良いですか?」と念を押さ
れる。[OK]ボタンをクリックすれば、MTUとRWINの測定結果がレジストリ
に書き込まれ、そのマシンは最適化されるという寸法だ。書き込まれたレ
ジストリの値は、[Win98/Me][Win2k/XP]タブで確認できる。また、[Reg.
復元]ボタンを押せば、EditMTU使用前の状態に戻すことも可能だ。
ただし、1点注意が必要だ。Windows 2000およびWindows XPでは、自動
設定ではMTUの値は変更されない。適応されるのはOSがWindows Me/98/95
のみとなる。覚えておこう。次回は[Win2k/XP]タブでのMTU/RWIN調整方法
を解説する。どうぞお楽しみに。
(高橋 浩子=ティー・キューブ)