Linux에서 지연 및 손실 된 패킷 시뮬레이션
나는에 대한 패킷 지연 및 손실 시뮬레이션 싶습니다 UDP
및 TCP
응용 프로그램의 성능을 측정하는 리눅스에 있습니다. 이를 수행하는 간단한 방법이 있습니까?
netem 은 이미 Linux 및 사용자 공간 유틸리티에 내장 된 기능을 활용하여 네트워크를 시뮬레이션합니다. 이것은 실제로 Mark의 대답이 다른 이름으로 언급 한 것입니다.
홈페이지 의 예는 이미 요청한 것을 달성하는 방법을 보여줍니다.
예
광역 네트워크 지연 에뮬레이션
이것은 가장 간단한 예이며, 로컬 이더넷에서 나가는 모든 패킷에 고정 된 지연 시간을 추가합니다.
# tc qdisc add dev eth0 root netem delay 100ms
이제 로컬 네트워크에서 호스트하기위한 간단한 핑 테스트는 100 밀리 초의 증가를 보여야합니다. 지연은 커널의 클럭 해상도 (Hz)에 의해 제한됩니다. 대부분의 2.4 시스템에서 시스템 클록은 100Hz에서 실행되며 10ms 단위로 지연 될 수 있습니다. 2.6에서이 값은 1000 ~ 100Hz의 구성 매개 변수입니다.
이후 예제는 qdisc를 다시로드하지 않고 매개 변수를 변경합니다.
실제 광역 네트워크는 변동성을 보여 임의의 변동을 추가 할 수 있습니다.
# tc qdisc change dev eth0 root netem delay 100ms 10ms
이로 인해 추가 된 지연은 100 ± 10ms가됩니다. 네트워크 지연 변동은 순전히 무작위가 아니므로 상관 값도 모방합니다.
# tc qdisc change dev eth0 root netem delay 100ms 10ms 25%
이로 인해 추가 된 지연이 마지막 임의 요소의 25 %에 따라 다음 임의 요소와 함께 100 ± 10ms가됩니다. 이것은 진정한 통계적 상관 관계가 아니라 근사치입니다.
배포 지연
일반적으로 네트워크 지연은 일정하지 않습니다. 지연의 변동을 설명하기 위해 정규 분포와 같은 것을 사용하는 것이 더 일반적입니다. netem 분야는 불균일 분포를 지정하기 위해 테이블을 사용할 수 있습니다.
# tc qdisc change dev eth0 root netem delay 100ms 20ms distribution normal
실제 테이블 (normal, pareto, paretonormal)은 iproute2 컴파일의 일부로 생성되어 / usr / lib / tc에 배치됩니다. 실험 데이터를 기반으로 자신의 분포를 만드는 것이 약간의 노력으로 가능합니다.
패킷 손실
임의 패킷 손실은 'tc'명령에 백분율로 지정됩니다. 가능한 가장 작은 0이 아닌 값은 다음과 같습니다.
(2) -32 = 0.0000000232 %
# tc qdisc change dev eth0 root netem loss 0.1%
이로 인해 1 / 10 % (즉, 1000 개 중 1 개)의 패킷이 무작위로 삭제됩니다.
선택적 상관 관계도 추가 할 수 있습니다. 이로 인해 난수 생성기는 난수가 낮아 패킷 버스트 손실을 에뮬레이션하는 데 사용할 수 있습니다.
# tc qdisc change dev eth0 root netem loss 0.3% 25%
이로 인해 패킷의 0.3 %가 손실되고 각 연속 확률은 마지막 패킷의 1/4에 따라 달라집니다.
프로브 n = 0.25 × 프로브 n-1 + 0.75 × 랜덤
참고 당신은 사용해야 tc qdisc add
해당 인터페이스에 대한 규칙이없는 경우 또는 tc qdisc change
이미 해당 인터페이스에 대한 규칙이있는 경우. tc qdisc change
규칙이없는 인터페이스 에서 사용하려고 하면 오류가 발생 RTNETLINK answers: No such file or directory
합니다.
손실 된 패킷의 경우 단순히 iptables 및 통계 모듈을 사용 합니다 .
iptables -A INPUT -m statistic --mode random --probability 0.01 -j DROP
위의 경우 1 % 확률로 들어오는 패킷을 삭제합니다. 약 0.14 이상이며 대부분의 TCP 연결은 완전히 중단 될 수 있으므로주의하십시오.
man iptables를 살펴보고 자세한 정보는 "통계"를 검색하십시오.
내 동료 중 하나가 tc를 사용 하여이 작업을 수행합니다. 자세한 내용은 매뉴얼 페이지를 참조하십시오. 여기에서 사용법의 예를 볼 수 있습니다 .
iptables (8)에는 모든 n 번째 패킷을 일치시키는 데 사용할 수있는 통계 모듈이 있습니다. 이 패킷을 삭제하려면 -j DROP를 추가 하십시오 .
네트워킹 물리 시뮬레이션에 대한 이 학습서 는 UDP 연결에서 대기 시간 및 패킷 손실을 시뮬레이션하기위한 샘플 코드 에 C ++ 클래스를 포함하며 지침이 될 수 있습니다. 다운로드 가능한 소스 코드 의 Connection.h 파일에있는 Connection 클래스 의 공개 대기 시간 및 packetLoss 변수를 참조하십시오 .
직접 시도하지는 않았지만 이 페이지 에는 Linux의 내장 iptables IP 필터링 시스템에서 실행되는 플러그인 모듈 목록이 있습니다. 모듈 중 하나를 "nth"라고하며 구성 가능한 패킷 속도를 떨어 뜨리는 규칙을 설정할 수 있습니다. 적어도 시작하기에 좋은 장소 일 수 있습니다.
당신은 http://snad.ncsl.nist.gov/nistnet/ 시도 할 수 있습니다 그것은 꽤 오래된 NIST 프로젝트 (마지막 릴리스 2005)이지만 그것은 나를 위해 작동합니다.
사용하기 쉬운 네트워크 오류 주입 도구는 Saboteur 입니다. 다음을 시뮬레이션 할 수 있습니다.
- 총 네트워크 파티션
- 원격 서비스 작동 불능 (예상 포트에서 수신 대기하지 않음)
- 지연
- 패킷 손실 -TCP 연결 시간 초과 (두 시스템이 상태 저장 방화벽으로 분리 될 때 자주 발생)
과학 커뮤니티에서 가장 많이 사용되는 도구 중 하나는 DummyNet 입니다. ipfw
커널 모듈 을 설치 한 후 두 시스템간에 50ms의 전파 지연을 발생 시키려면 다음 명령을 실행하십시오.
./ipfw pipe 1 config delay 50ms
./ipfw add 1000 pipe 1 ip from $IP_MACHINE_1 to $IP_MACHINE_2
패킷 손실의 50 %를 발생 시키려면 다음을 실행해야합니다.
./ipfw pipe 1 config plr 0.5
자세한 내용은 여기 입니다.
참고 URL : https://stackoverflow.com/questions/614795/simulate-delayed-and-dropped-packets-on-linux
'IT story' 카테고리의 다른 글
Git을 사용하는 여러 작업 디렉토리? (0) | 2020.04.13 |
---|---|
사전에 키가 포함되어 있는지 확인하는 것이 왜 더 빠르지 않은지 예외를 잡는 것보다 더 빠른 이유는 무엇입니까? (0) | 2020.04.13 |
파일 끝에서 VIM이 자동 줄 바꿈 비활성화 (0) | 2020.04.13 |
JavaScript에서 then () 함수는 무엇을 의미합니까? (0) | 2020.04.13 |
각도에서 (change) vs (ngModelChange) (0) | 2020.04.13 |