比治山日記

比治山スカイウォーカーです

tcコマンドのパケットロスモデル

tcコマンドを使ってネットワークをエミュレートするとき,パケットロスを設定することができます.tcコマンドのnetemには通常4種類のパケットロスのモデルが実装されています.かんたんに調べたのでメモしておきます.

各パケットロスモデル

ベルヌーイモデル (Bernoulli model)

 これは簡単で,ひとつのパケットのロス確率をpとするベルヌーイ試行にもとづく無記憶性のモデル.

(簡易)ギルバートモデル (Simplified Gilbert model)

 これは2つの状態を持つモデルで,連続したパケットロス(バーストロス)をモデル化できる.
 このモデルは2つのパラメータからなる.一つは受信良好状態からバーストロス状態に遷移する確率p,もう一つは反対にバーストロス状態から受信良好状態に遷移する確率r.

f:id:exv:20191002002318p:plain:w300

ギルバートモデル (Gilbert model)

 これは2つの状態を持つモデルで,連続したパケロス+バーストロス中でも一定の割合で受信できる(ベルヌーイ分布),という状況をモデリングできる.
 このモデルは3つのパラメータからなる.一つは受信良好状態からバーストロス状態に遷移する確率p,もう一つは反対にバーストロス状態から受信良好状態に遷移する確率r.もう一つはバーストロス中であっても受信できる確率h(この場合,受信良好状態に遷移はしない).
 h=0のとき,2.(簡易)ギルバートモデルと等価になる.

f:id:exv:20191002003032p:plain:w300

ギルバート・エリオットモデル (Gilbert-Elliot model)

 上の2つのモデルからなんとなく想像できる通り,3に加えて,受信良好状態であっても一定の割合でパケットをロス(ベルヌーイ分布)するケースを加えたモデル.
 このモデルは4つのパラメータからなる.受信良好状態からバーストロス状態に遷移する確率p,反対にバーストロス状態から受信良好状態に遷移する確率r.バーストロス中であっても受信できる確率h(この場合,受信良好状態に遷移はしない).受信良好状態であってもパケットロスする確率k(この場合,バーストロス状態に遷移はしない)
 k=0のとき,3. ギルバートモデルと等価で,k=0, h=0のとき,2.(簡易)ギルバートモデルと等価になる.

f:id:exv:20191002002919p:plain:w300

tcコマンド上での指定

tcコマンドでは以下のようにパラメータを指定することで上記モデルを設定する.

tc qdisc add dev eth0 root netem loss p% r% 1-h% 1-k%

r, 1-h, 1-k を指定しなければ一番単純なベルヌーイモデルになり,全部指定すればギルバート・エリオットモデルになる.