パケット遅延、パケットロスシミュレータを作る
tcコマンド(traffic control)のnetem(Network Emulation)を使ってパケット遅延やパケットロスをさせるシミュレータを作成します。
ネットワーク系の試験をするとき稀に役に立ちます。資料が少なく手探りで動作させたまとめです。


(動作環境)
使用するLinuxのカーネルは2.6、iptablesを有効にする必要があります。FedoraやSUSE、Debian、Ubuntuで問題なく使用できます。
※Linuxをインストールするマシンを1台別に用意しゲートウェイにして利用した方が良いでしょう。試験するマシンと同じでも構いませんが色々不便です。
使用するマシンの性能は低くて構いません。NICを追加してパケットを中継できるようにしておきます。(/proc/sys/net/ipv4/ip_forwardが1の状態ですね)


(パケット遅延の設定例)
・遅延の基本設定
tc qdisc add dev eth0 root netem delay 200ms tc qdisc change dev eth0 root netem delay 300ms tc qdisc show dev eth0 tc qdisc del dev eth0 root
上から、eth0を通るパケットに200msの遅延を設定する。
changeで遅延を300msに変更する。(changeの他にreplaceもありますが、違いが分かりません。ご存知の方は指摘してくださるとうれしいです。)
showで現在設定されている内容の確認ができます。
delで削除します。
qdiscはキューコントロール的な意味だったと思います、違っていたらすみません。

・ランダムに遅延させる

tc qdisc change dev eth0 root netem delay 100ms 10ms tc qdisc change dev eth0 root netem delay 100ms 10ms 50%
100ms±10msの遅延に変更します。
±10msの遅延を50%実施する。(約半分は100msの遅延)


(パケットロスの設定例)
tc qdisc add dev eth0 root netem loss 10%
10%パケットロスさせる


(組み合わせ)
tc qdisc change dev eth0 root netem delay 100ms 10ms loss 0.5%
100ms±10msの2遅延を入れつつ0.5%はパケットロスさせる。

Linux,POSIX,BSD,UNIX,gcc,gdb,コマンド,プログラミング,サーバー,ネットワーク,ソースコード,デバッグ,パケットキャプチャ