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 ens33삭제된 패킷이 0개와 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에서 나온 것이고 하나는 재시도된 ARP 요청일 수 있습니다.

tc셸에서 출력을 구문 분석 해야 하는 경우 JSON 출력과 함께 사용하는 것이 가장 좋습니다 jq. 예를 들어:

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

관련 정보