Up | English | MTU, RWIN ──TCP/IP パラメータの変更 | 作成: 2007-12-03 更新: 2007-12-03 |
はじめにADSL や CATV などの所謂「ブロードバンド」が一般化して、常時高速接続が当たり前になってきています。しかし私たちが使っているコンピュータがネットワークとやり取りするパケットのサイズをどのように決めているかによって、せっかくの高速接続がそのパフォーマンスを十分に発揮していないケースがあります。
GUI を具えたアプリケーションRMAC というアプリケーションが公開されました。GUI で様々なパラメータを変更できるもので、非常に便利だと思います。「オプション」タブで「起動時に値を常に変更するようにする」というチェックボックスをオンにすると、設定した値が起動スクリプトに書き込まれ、以下で説明している項目を自動的に設定できるようになります。 システム標準のコマンドインターフェースの設定は /sbin/ifconfig、カーネルのチューンは /usr/sbin/sysctl です。細かい使い方については man ページで大概のことはカバーされています。 MacOS X のデフォルトの値では MTU=1500、RWIN=32768 になっています。
これで Ethernet インターフェースが en0 であることがわかります。そこで sudo ifconfig en0 mtu 1460 などとすることによってインターフェースの MTU を変更することができます (1460 という値は適当です。自分の環境に応じて適宜変更します)。 一方 RWIN についてですが、これは sysctl で変更します。sysctl では色々なパラメータを設定することができます。たとえば % sudo sysctl -w net.inet.tcp.rfc1323=1 Password: net.inet.tcp.rfc1323: 0 -> 1 などとすることによって、RWIN のスケールファクタを変更することができます。
% sudo sysctl -w net.inet.tcp.recvspace=64240 net.inet.tcp.recvspace: 32768 -> 64240 などとします。sysctl で値を指定すると、どのように変更されたかを返してくれているのがわかります。
起動時に自動的に設定する起動スクリプトの編集前節で示した sysctl で値の変更は確かに可能なのですが、再起動するとデフォルトに戻ってしまいます。そこで起動時に自動的に設定する方法がないかを考えてみます。
sysctl -w net.inet.tcp.rfc1323=1 sysctl -w net.inet.tcp.recvspace=64240 などと書き込んでしまえばおっけーです。 起動項目への追加しかしこの方法は、本来システムだけが利用するファイルをユーザが書き換えることになり、何らかのトラブルの原因になる可能性がないとはいえません。*BSD の流儀でも余り推奨されていません。
例えば私は以下のようにしています。 sysctl -w net.inet.tcp.rfc1323=1 sysctl -w net.inet.tcp.sendspace=32768 sysctl -w net.inet.tcp.recvspace=64240 sysctl -w net.inet.udp.recvspace=166400 sysctl -w net.inet.raw.recvspace=8192 ありみかさんによるこの起動項目にはJapanese.lproj がありますので、起動時にちゃんと「RWIN サイズを設定中」というメッセージが一瞬表示されます。カコイイ! おわりに現状で私が把握している TCP パラメータの変更や設定の方法はこれくらいです。おそらく近い将来 IPNetTuner のような詳細な設定を GUI から可能にするアプリケーションが出てくるとは思いますが、現状ここに述べたような方法で設定が可能です。 (追記) RMAC を使えば以上説明してきたようなことは BSD なコマンドに触ることなく可能になります。現状では RMAC を使うのがもっとも安全で簡単な方法であろうと思います。このようなアプリケーションを作ってくださった Hi6 さんに感謝。 |