通信速度を制限する

自宅のネット回線はフレッツ光、そこそこ速度がでます。

iPhoneシミュレーターでネットワーク通信を行うアプリを試験するとき、3G回線の速度(それも悪名高いソフトバンクの回線みたいなもの)で試験をやれないものかな、と思いました。


いちいち実機を使うのは手間がかかる。そこでMacOSのほうに帯域制限をかけました。
簡単にできるみたいです。たとえば80Kbit/sの回線をシミュレートしようとするならば、

sudo ipfw pipe 1 config bw 80Kbit/s delay 200
sudo ipfw add 1 pipe 1 src-port 8080

上記はポート8080(http)を80Kbit/sで通信遅延が200ミリ秒に制限しています。


(どうして80KBit/sにしたのかというと
http://iphone.f-tools.net/QandA/au-softbank-speed.html
のサイトでソフトバンク回線の速度0.08Mこんなもんかい、と突っ込まれていたためです。
3Gとはいえ80kBit/sは驚異的な遅さ。これくらいで試験すれば実機に近くなると思います。
また遅延速度は単純に電流や電波が発信されて受信するまでに生ずるロス時間。電波でも光でも速度は有限のため遅延が発生します。これもおそらく実機は100〜200ミリ秒くらいだと思います)


ipfwコマンドはどうやらIPレベルでパケットを制御できるコマンドのようです。
ファイアウォール構築のために利用されているらしいけれども、Macユーザはここらへんフワユルでも使えてしまうのですね。フルフワ。

一度上記のコマンドを実行したあと、通常の速度に戻すのは

sudo ipfw delete 1

いちいちコマンドを入力するのも煩雑なので、スクリプトにしてみました。

#!/bin/sh
echo "[0] 帯域制限開始"
echo "[1] 帯域制限終了"
read a
case "$a" in
0 )
sudo ipfw pipe 1 config bw 80Kbit/s delay 200
sudo ipfw add 1 pipe 1 src-port 8080
;;
1)
sudo ipfw delete 1
;;
esac

実行すると

[0] 帯域制限開始
[1] 帯域制限終了

という画面がでるので、制限するときは0を押してください。
終わるときも実行して、1を押してください。