Linux 네트워크 인터페이스에서 대역폭을 조절하는 방법은 무엇입니까?


답변:


32

netem iproute에 의해 제어 커널 모듈.

커널로 Netem을 컴파일해야합니다.

Networking -->
   Networking Options -->
     QoS and/or fair queuing -->
        Network emulator

netem 모듈이로드되면 iproute의 tc를 사용하여 다음을 수행 할 수 있습니다.

tc qdisc add dev  tap0 root netem delay 50ms loss 50% 

(50 % 패킷 손실, 50ms의 추가 지연)


예, 이것은 실제로 이러한 것들에 매우 좋은 모듈입니다. 나는 지금까지 아무도 이것에 대답하지 않았다는 것을 믿을 수 없다 ...

나는 수년간 모든 배포판에서 표준으로 사용되었으므로 로컬 호스트 (localhost에서) 서버를 테스트하기 위해 이것을 사용합니다. 20ms 지연을 추가하려면 "tc qdisc add dev lo root 핸들 1 : 0 netem 지연 20msec"을 제거하고 "tc qdisc del dev lo root"를 제거하려면
pixelbeat

1
빠른 참고 사항 : 커널 모듈은 sch_netem입니다. 일반적으로 수동으로로드 할 필요가 없으며 필요에 따라 자동으로로드됩니다.
sleske


netem의 내 버전 (우분투 13.10)도 사용하여 대역폭을 제한 할 수있는 옵션이 rate옵션을 : tc qdisc add dev lo root handle 1:0 netem delay 10ms rate 1mbit limit 1000. lo(localhost에 액세스하기위한) 와 같은 일부 장치의 경우 대기열 길이도 설정해야합니다 ifconfig lo txqueuelen 1000.
z0r

27

클라이언트 쪽?

물방울 은 원하는 것을해야합니다. 우분투 (또는 데비안이라고 생각합니다) sudo apt-get install trickle를 실행하고 있다면로 설치 한 다음 실행할 수 있습니다. trickle -s -d 10 -u 10 firefox(또는, 한동안 사용하지 않았습니다) 파이어 폭스를 실행하여 다운로드 및 업로드 속도를 초당 10 킬로바이트로 제한합니다.


이 팁에 감사드립니다. 어떤 이유로 물방울은 파이어 폭스에서 작동하지 않지만 Google 크롬에서는 제대로 작동합니다. (우분투 9.10 64 비트)
Tom

6
trickle은 TCP 전송을 위해 표준 라이브러리 함수에서 링크 호출을 가로 채서 작동합니다-앱에 컴파일 타임에 정적으로 링크 된 앱이 있으면 작동하지 않습니다.
David Spillett

16

우분투에서 'wondershaper'라는 도구를 사용하여 네트워크에서 사용 가능한 모든 대역폭을 사용하지 못하게하는 방법을 찾았습니다. 다른 리눅스 데스트로에서도 존재하기를 바랍니다. 다음 명령을 사용하여 Linux 홈 PC가 사용할 수있는 대역폭을 제한 할 수 있습니다.

sudo wondershaper eth0 1000 200

이로 인해 다운로드 제한이 1000 킬로 비트로 제한되고 200 킬로 비트로 늘어납니다. 자세한 정보 / 옵션에 대해서는 wondershaper 매뉴얼 페이지를 참조하십시오.


1
이것은 OP가 찾고있는 것이 아니며 (연결을 의도적으로 저하시키는 것이 아니라 대역폭을 보존하는 것에 관한 것입니다) 여전히 알아두면 좋습니다.
sleske

1
BTW : wondershaper데비안 패키지 입니다.
sleske

이 포화 된 b / c는 사무실에서 대역폭 채도에 문제가 있었으며 중단 할 수없는 지원이 있었고 두 가지 간단한 라인으로 문제를 해결할 수있었습니다. 9999999 500 다시 한번 감사드립니다!
orange80

4
wondershaper는 수학 문제가있는 것으로 보입니다. 1Mb / s 업 / 다운 경로를 얻기 위해 1024 대신 28096을 사용했습니다. 왜 이런 일이 일어 났는지 전혀 알 수 없습니다.
보트 코더

재설정하려면 다음을 사용하십시오.sudo wondershaper clear eth0
Léo Lam

8

NIST는 NistNet이라는 네트워크 시뮬레이터를 만듭니다.

http://snad.ncsl.nist.gov/nistnet/ (링크가 죽은 것 같습니다)

http://cs.ecs.baylor.edu/~donahoo/tools/nistnet/

NistNet을 사용하면 선택한 통신 링크를 에뮬레이트하는 라우터를 만들 수 있습니다.

가장 간단한 작동을 위해 두 네트워크 사이에 두 개의 NIC가있는 상자에 있습니다.

예를 들어 위성 링크를 통해 작동해야하는 응용 프로그램이 있습니다.

데이터는 BIG 대기 시간이있는 2Mbps 링크를 통과 할 수 있습니다. 제어는 동일한 대기 시간으로 128kbps 링크를 거쳐야했습니다.

NistNet은 128kbps에서 모두 작동하도록 도와주었습니다.

NistNet을 사용하면 대역폭뿐만 아니라 대기 시간도 시뮬레이션 할 수 있으며 사용 중이거나 신뢰할 수없는 링크를 시뮬레이션하여 패킷을 삭제합니다.

임의 연결을 시뮬레이트하려면 대역폭을 제한하지 말고 지연 시간을 줄이십시오.

패킷을 조각화하는 것을 잊지 마십시오. 가짜 링크에서 멋진 작은 MTU를 설정할 수 있습니다.

IIRC에 패킷 지터를 추가하면 고장난 패킷에 대처할 수 있는지 알 수 있습니다.


NistNet은 오랫동안 업데이트되지 않습니다. 그렇지 않습니까? IMO는 지금까지의 모든 가장 최근에 존재하는 netem 모듈입니다.

VM을 사용하여 2 개의 NIC가있는 머신을 시뮬레이션 할 수 있습니다.
Scott

링크가 작동하지 않습니다
하센

링크가 나를 위해 작동합니다.
tripleee

4

나는 과거에 개인적으로 wondershaper 를 사용 했지만 ADSL 연결을 최대한 활용하는 반대 사용 사례로 작성되었습니다.

그래도 여기에 언급 된 다른 것들을 시도해야합니다.


3

로컬에 설치된 오징어 프록시 를 사용 하여 저속 링크에서 웹 페이지를 테스트하는 등의 대역폭을 제한 할 수 있습니다 .

  1. 배포판에서 오징어 프록시 를 설치 하십시오. Fedora에서는 매우 쉽습니다 yum install squid.

  2. 다음에 추가하십시오 /etc/squid/squid.conf:

    delay_pools 1
    delay_class 1 1
    delay_access 1 allow all
    delay_parameters 1 16000/16000

    이렇게하면 대역폭이 약 128kbps (16000bps)로 제한됩니다.

  3. 오징어 시작 :/etc/init.d/squid start

  4. 프록시 서버 localhost포트 를 사용하도록 브라우저를 구성하십시오 3128.



3

아직 데비안 저장소에서 "iprelay"라는 ip_relay를 언급 한 사람은 없습니다 . 그것은 물방울 이 하는 방식으로 전화를 가로 채지 않고 TCP 프록시로 작동하며 프록시 (예 : 웹 브라우저)를 사용하거나 사용자 정의 대상 포트 (telnet, ssh, ftp, curl, ).

설정하기가 조금 더 어렵지만 종종 물방울이 발생하지 않는 상황에서 작동합니다.


1
이것은 내가보고있는 것입니다! 큰 감사합니다. 스크롤을 내려서 계속 읽어서 다행입니다.
Jay R. Wren
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.