설명하는 흥미로운 기사를 찾았습니다.네트워크 문제를 시뮬레이션하는 방법(패킷 손실과 같은) 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 ens33
삭제된 패킷이 0개와 0개 모두 표시됩니다.RX
TX
제가 하고 싶은 것은 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에서 나온 것이고 하나는 재시도된 ARP 요청일 수 있습니다.
tc
셸에서 출력을 구문 분석 해야 하는 경우 JSON 출력과 함께 사용하는 것이 가장 좋습니다 jq
. 예를 들어:
# tc -s -json qdisc show dev vethlzYQu1 root | jq '.[].drops'
3