需以 root 權限才能操作,用來模擬封包遺失、延遲。
Linux 2.6 之後的 kernel 有一種機制叫做 netem(Network Emulation),
可以用來模擬 packet loss、delay、reordering、duplication 等。
在 eth1 上模擬延遲 100ms 的延遲時間
# tc qdisc add dev eth1 root netem delay 100ms
從 eth1 出去的封包會被 delay,從 eth1 進來的封包不會被 delay,
之後如果要修改 delay 的值,則把 add 改成 change 即可。
# tc qdisc change dev eth1 root netem delay 1000ms
模擬每個封包有不同的延遲時間 (100ms ± 10ms)
# tc qdisc change dev eth1 root netem delay 100ms 10ms
模擬延遲時間具數學統計模型 (常態分佈)
# tc qdisc change dev eth1 root netem delay 100ms 10ms distribution normal
模擬延遲具時間相關,讓每個封包的延遲和前一個封包的延遲有 25% 相關
# tc qdisc change dev eth1 root netem delay 100ms 10ms 25%
取消在 eht1 上所有的規則 (delay,loss …)
# tc qdisc del dev eth1 root netem
在 eth1 上加 30% 的 packet loss rate
# tc qdisc change dev eth1 root netem loss 30%
改變前後封包相關的丟失機率 (P[N+1]=P[N]*0.20+rand()*0.80)
# tc qdisc change dev eth1 root netem loss 0.1% 20%
232 = 0.0000000232%
同時有 30% 的 packet loss 和 100ms 的 delay
# tc qdisc change dev eth1 root netem loss 30% delay 100ms
10% 封包重複發送
# tc qdisc change dev eth1 root netem duplicate 10%
25% 封包直接送出,75% 封包延遲 500ms(±100ms) 後送出
# tc qdisc change dev eth1 root netem reorder 25% delay 500ms (100ms)
5% 的 bits 會 0 變 1 或 1 變 0,造成封包損壞的現象
# tc qdisc change dev eth1 root netem corrupt 5%