tcコマンドのパケットロスモデル
tcコマンドを使ってネットワークをエミュレートするとき,パケットロスを設定することができます.tcコマンドのnetemには通常4種類のパケットロスのモデルが実装されています.かんたんに調べたのでメモしておきます.
各パケットロスモデル
ベルヌーイモデル (Bernoulli model)
これは簡単で,ひとつのパケットのロス確率をpとするベルヌーイ試行にもとづく無記憶性のモデル.
(簡易)ギルバートモデル (Simplified Gilbert model)
これは2つの状態を持つモデルで,連続したパケットロス(バーストロス)をモデル化できる.
このモデルは2つのパラメータからなる.一つは受信良好状態からバーストロス状態に遷移する確率p,もう一つは反対にバーストロス状態から受信良好状態に遷移する確率r.
ギルバートモデル (Gilbert model)
これは2つの状態を持つモデルで,連続したパケロス+バーストロス中でも一定の割合で受信できる(ベルヌーイ分布),という状況をモデリングできる.
このモデルは3つのパラメータからなる.一つは受信良好状態からバーストロス状態に遷移する確率p,もう一つは反対にバーストロス状態から受信良好状態に遷移する確率r.もう一つはバーストロス中であっても受信できる確率h(この場合,受信良好状態に遷移はしない).
h=0のとき,2.(簡易)ギルバートモデルと等価になる.
ギルバート・エリオットモデル (Gilbert-Elliot model)
上の2つのモデルからなんとなく想像できる通り,3に加えて,受信良好状態であっても一定の割合でパケットをロス(ベルヌーイ分布)するケースを加えたモデル.
このモデルは4つのパラメータからなる.受信良好状態からバーストロス状態に遷移する確率p,反対にバーストロス状態から受信良好状態に遷移する確率r.バーストロス中であっても受信できる確率h(この場合,受信良好状態に遷移はしない).受信良好状態であってもパケットロスする確率k(この場合,バーストロス状態に遷移はしない)
k=0のとき,3. ギルバートモデルと等価で,k=0, h=0のとき,2.(簡易)ギルバートモデルと等価になる.
tcコマンド上での指定
tcコマンドでは以下のようにパラメータを指定することで上記モデルを設定する.
tc qdisc add dev eth0 root netem loss p% r% 1-h% 1-k%
r, 1-h, 1-k を指定しなければ一番単純なベルヌーイモデルになり,全部指定すればギルバート・エリオットモデルになる.