don't stop believing

Traffic Control (tc) - loss, corrupt, duplicate 본문

Network

Traffic Control (tc) - loss, corrupt, duplicate

Tongchun 2019. 1. 11. 19:35

Traffic Control (tc)의 delay에 이어서 확인합니다.

Traffic Control (tc) - delay


이번에는 packet loss 입니다.

10%의 packet loss를 설정하겠습니다. 

먼저 이전에 적용된 rule을 삭제하겠습니다.

$ sudo tc qdisc del dev enp4s0 root
$ sudo tc qdisc add dev enp4s0 root netem loss 10%
$ sudo tc qdisc show dev enp4s0
qdisc netem 8013: root refcnt 2 limit 1000 loss 10%

이번에도 사내 pc에 ping을 날려보겠습니다.

$ ping 10.10.0.78 -c 20
PING 10.10.0.78 (10.10.0.78) 56(84) bytes of data.
64 bytes from 10.10.0.78: icmp_seq=1 ttl=64 time=0.351 ms
64 bytes from 10.10.0.78: icmp_seq=2 ttl=64 time=0.352 ms
64 bytes from 10.10.0.78: icmp_seq=3 ttl=64 time=0.353 ms
64 bytes from 10.10.0.78: icmp_seq=4 ttl=64 time=0.347 ms
64 bytes from 10.10.0.78: icmp_seq=5 ttl=64 time=0.353 ms
64 bytes from 10.10.0.78: icmp_seq=6 ttl=64 time=0.355 ms
64 bytes from 10.10.0.78: icmp_seq=7 ttl=64 time=0.354 ms
64 bytes from 10.10.0.78: icmp_seq=8 ttl=64 time=0.347 ms
64 bytes from 10.10.0.78: icmp_seq=10 ttl=64 time=0.346 ms
64 bytes from 10.10.0.78: icmp_seq=11 ttl=64 time=0.345 ms
64 bytes from 10.10.0.78: icmp_seq=12 ttl=64 time=0.354 ms
64 bytes from 10.10.0.78: icmp_seq=13 ttl=64 time=0.348 ms
64 bytes from 10.10.0.78: icmp_seq=15 ttl=64 time=0.353 ms
64 bytes from 10.10.0.78: icmp_seq=16 ttl=64 time=0.355 ms
64 bytes from 10.10.0.78: icmp_seq=17 ttl=64 time=0.353 ms
64 bytes from 10.10.0.78: icmp_seq=18 ttl=64 time=0.357 ms
64 bytes from 10.10.0.78: icmp_seq=19 ttl=64 time=0.346 ms
64 bytes from 10.10.0.78: icmp_seq=20 ttl=64 time=0.347 ms

--- 10.10.0.78 ping statistics ---
20 packets transmitted, 18 received, 10% packet loss, time 19431ms
rtt min/avg/max/mdev = 0.345/0.350/0.357/0.025 ms

사내 네트워크라 latency는 0.3ms 정도로 나오고 있습니다.

ping statistics에 보면 20 packets transmitted, 18 received, 10% packet loss, time 19431ms로 되어 있습니다.

20번의 ping을 보내고(transmitted) 18번 pong을 받았습니다. (received) 그래서 20번중 2번 packet을 손실해 10%의 loss가 발생했습니다.


이번에는 packet 변조 입니다.

5%의 packet 변조를 설정합니다.

$ sudo tc qdisc del dev enp4s0 root
$ sudo tc qdisc add dev enp4s0 root netem corrupt 5%
$ sudo tc qdisc show dev enp4s0
qdisc netem 8014: root refcnt 2 limit 1000 corrupt 5%

5%의 변조니까 50번은 보내봐야 겠네요.

$ ping 10.10.0.78 -c 50
PING 10.10.0.78 (10.10.0.78) 56(84) bytes of data.
64 bytes from 10.10.0.78: icmp_seq=1 ttl=64 time=0.351 ms
64 bytes from 10.10.0.78: icmp_seq=2 ttl=64 time=0.352 ms
64 bytes from 10.10.0.78: icmp_seq=3 ttl=64 time=0.354 ms
......
64 bytes from 10.10.0.78: icmp_seq=47 ttl=64 time=0.357 ms
64 bytes from 10.10.0.78: icmp_seq=48 ttl=64 time=0.348 ms
64 bytes from 10.10.0.78: icmp_seq=49 ttl=64 time=0.354 ms
64 bytes from 10.10.0.78: icmp_seq=50 ttl=64 time=0.329 ms

--- 10.10.0.78 ping statistics ---
50 packets transmitted, 48 received, 4% packet loss, time 50143ms
rtt min/avg/max/mdev = 0.329/0.354/0.578/0.041 ms

50번 ping을 보내고 48번 poing을 받았습니다. 변조된 packet 2개(36번째, 42번째)는 삭제되어 4%의 loss로 확인되었습니다.


이번에는 중복된 packet 1%로 설정하겠습니다.

$ sudo tc qdisc del dev enp4s0 root
$ sudo tc qdisc add dev enp4s0 root netem duplicate 1%
$ sudo tc qdisc show dev enp4s0
qdisc netem 8015: root refcnt 2 limit 1000 duplicate 1%

이번에는 ping을 100번 날려보겠습니다.

$ ping 10.10.0.78 -c 100
PING 10.10.0.78 (10.10.0.78) 56(84) bytes of data.
64 bytes from 10.10.0.78: icmp_seq=1 ttl=64 time=0.358 ms
64 bytes from 10.10.0.78: icmp_seq=2 ttl=64 time=0.354 ms
64 bytes from 10.10.0.78: icmp_seq=3 ttl=64 time=0.352 ms
64 bytes from 10.10.0.78: icmp_seq=4 ttl=64 time=0.355 ms
64 bytes from 10.10.0.78: icmp_seq=5 ttl=64 time=0.355 ms
64 bytes from 10.10.0.78: icmp_seq=6 ttl=64 time=0.348 ms
64 bytes from 10.10.0.78: icmp_seq=7 ttl=64 time=0.362 ms
64 bytes from 10.10.0.78: icmp_seq=8 ttl=64 time=0.347 ms
64 bytes from 10.10.0.78: icmp_seq=8 ttl=64 time=0.379 ms (DUP!)
64 bytes from 10.10.0.78: icmp_seq=9 ttl=64 time=0.346 ms
......
64 bytes from 10.10.0.78: icmp_seq=90 ttl=64 time=0.354 ms
64 bytes from 10.10.0.78: icmp_seq=91 ttl=64 time=0.353 ms
64 bytes from 10.10.0.78: icmp_seq=91 ttl=64 time=0.385 ms (DUP!)
64 bytes from 10.10.0.78: icmp_seq=92 ttl=64 time=0.355 ms
64 bytes from 10.10.0.78: icmp_seq=93 ttl=64 time=0.352 ms
64 bytes from 10.10.0.78: icmp_seq=94 ttl=64 time=0.355 ms
64 bytes from 10.10.0.78: icmp_seq=95 ttl=64 time=0.347 ms
64 bytes from 10.10.0.78: icmp_seq=96 ttl=64 time=0.352 ms
64 bytes from 10.10.0.78: icmp_seq=97 ttl=64 time=0.352 ms
64 bytes from 10.10.0.78: icmp_seq=98 ttl=64 time=0.353 ms
64 bytes from 10.10.0.78: icmp_seq=99 ttl=64 time=0.353 ms
64 bytes from 10.10.0.78: icmp_seq=100 ttl=64 time=0.348 ms

--- 10.10.0.78 ping statistics ---
100 packets transmitted, 100 received, +3 duplicates, 0% packet loss, time 101332ms
rtt min/avg/max/mdev = 0.318/0.353/0.387/0.016 ms

100번의 ping을 보내는 동안 3번의 중복 packet이 발생했습니다.

ping의 statistics를 보면 아래와 같이 +3 duplicates로 되어 있습니다.

100 packets transmitted, 100 received, +3 duplicates, 0% packet loss, time 101332ms

packet loss가 아닌 중복된 packet이 더 들어오게 됩니다.


이번에는 앞서 확인한 delay와 같이 적용해 보겠습니다.

극악의 환경을 만들어 보겠습니다. 

delay는 300ms에서 +- 50ms로 변동하며 packet loss는 10%, 변조(corrupt)는 5%, 중복(duplicate)은 2%입니다.

$ sudo tc qdisc del dev enp4s0 root
$ sudo tc qdisc add dev enp4s0 root netem loss 10% corrupt 5% duplicate 2% delay 300ms 50ms distribution normal
$ sudo tc qdisc show dev enp4s0
qdisc netem 8017: root refcnt 2 limit 1000 delay 300.0ms  50.0ms loss 10% duplicate 2% corrupt 5%

이번에도 ping 100번 날려보겠습니다.

$ ping 10.10.0.78 -c 100
PING 10.10.0.78 (10.10.0.78) 56(84) bytes of data.
64 bytes from 10.10.0.78: icmp_seq=1 ttl=64 time=308 ms
64 bytes from 10.10.0.78: icmp_seq=3 ttl=64 time=319 ms
64 bytes from 10.10.0.78: icmp_seq=4 ttl=64 time=320 ms
64 bytes from 10.10.0.78: icmp_seq=5 ttl=64 time=289 ms
.....
64 bytes from 10.10.0.78: icmp_seq=98 ttl=64 time=333 ms
64 bytes from 10.10.0.78: icmp_seq=99 ttl=64 time=347 ms
64 bytes from 10.10.0.78: icmp_seq=100 ttl=64 time=356 ms

--- 10.10.0.78 ping statistics ---
100 packets transmitted, 85 received, +2 duplicates, 15% packet loss, time 99290ms
rtt min/avg/max/mdev = 141.895/311.313/429.700/48.891 ms

평균 delay는 311.3 ms로 나왔습니다. 2번의 packet 중복(duplicates)이 있었고, 변조(corrupt)를 포함해 packet loss는 15%입니다.

적용이 잘 되는 것 같습니다.



Comments