tcを使用したパケット損失監視のシミュレーション

tcを使用したパケット損失監視のシミュレーション

説明する興味深い記事を見つけました。ネットワーク問題をシミュレートする方法(パケット損失など)Linuxサーバーの場合。

UbuntuテストVMがインターネット接続にどのインターフェイスが使用されているかを確認しましたens33

tc次に、パケット損失を導入するためのルールを追加しました。

$ sudo tc qdisc add dev ens33 root netem loss 30% 50% 

それからpingしばらく実行しましたが、結果は期待どおりになり、いくつかのパッケージが失われました。

$ ping www.google.com
...
97 packets transmitted, 84 received, 13% packet loss

実行中にpingを使用して進行中のパケット損失も監視できると思いましたが、ドロップされたパケットはip -s link show ens330個と0個の両方が表示されます。RXTX

私がしたいのは、ping実行中にパケット損失をリアルタイムで監視することです。

ベストアンサー1

tcもう一つ受け入れる-sパラメータ、同義語:統計。

アドレス 10.0.3.128 の LXC コンテナを指す veth リンクにルートとして適用される例:

# echo; tc qdisc del dev vethlzYQu1 root 2>/dev/null; \
  ip neigh flush all; \
  tc qdisc add dev vethlzYQu1 root netem loss 30% 50%; \
  tc -s qdisc show dev vethlzYQu1 root; \
  ping -q -c 10 10.0.3.128; \
  tc -s qdisc show dev vethlzYQu1 root 

qdisc netem 8010: root refcnt 5 limit 1000 loss 30% 50%
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0
PING 10.0.3.128 (10.0.3.128) 56(84) bytes of data.

--- 10.0.3.128 ping statistics ---
10 packets transmitted, 8 received, 20% packet loss, time 9193ms
rtt min/avg/max/mdev = 0.030/125.218/1001.185/331.084 ms
qdisc netem 8010: root refcnt 5 limit 1000 loss 30% 50%
 Sent 826 bytes 9 pkt (dropped 3, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0

ここでは、9 + 3 = 12個のパケットを送信する必要があり、ドロップされた2つのパケットはpingからのもので、1つは再試行されたARP要求です。

tcシェルから出力を解析する必要がある場合は、JSON出力で使用するのが最善ですjq。たとえば、

# tc -s -json qdisc show dev vethlzYQu1 root | jq '.[].drops'
3

おすすめ記事