tail head cat sleep
QR code linking to this page

Man page  — DUMMYNET

명칭

dummynet – 유연한 대역 매니저 및 지연 에뮬레이터

내용

서식


#include <sys/types.h>
#include <sys/queue.h>
#include <netinet/in.h>
#include <netinet/ip_fw.h>
int
setsockopt(raw_socket, IPPROTO_IP, ipfw option, struct ipfw, size);

해설

dummynet 는, 대역폭과 큐의 사이즈에 제한을 더하거나 패킷의 지연이나 손실을 시뮬레이트 하는 것으로써, 여러가지 네트워크 인터페이스를 개입시켜 거래되는 트래픽을 제어 가능하게 합니다.

현재의 실장에서는, 패킷의 선별은 ipfw 프로그램의 ``파이프'' 룰에 의해 행해집니다. dummynet 의 파이프 냄새나서는, 대역폭, 지연, 큐 사이즈, 손실율을 설정할 수 있습니다. 이러한 설정은 ipfw 프로그램으로 실시합니다. 파이프에는 1 에서 65534 까지의 번호가 붙여집니다. 또, 패킷은 ipfw 의 설정에 따라서는 복수의 파이프를 개입시켜 송출하는 것이 가능합니다.

dummynet 는 IP 레벨로 동작합니다만, 브릿지 확장 기능을 유효하게 하는 것에 보다 , 브릿지 되는 패킷을 파이프를 개입시켜 송출할 수 있습니다.

사용법

아래와 같은 명령에 의해, 파이프에 패킷을 송출합니다.
    ipfw add pipe NNN ....

또, 파이프의 설정은 아래와 같은 명령에 의해 실시합니다.

    ipfw pipe NNN config bw B delay D queue Q plr P

다만, 대역폭 B 는, bit/s, Kbit/s, Mbit/s, Bytes/s, KBytes/s, MBytes/s 그리고 나타낼 수가 있습니다. delay 는 밀리 세컨드 단위로, 또, 큐 사이즈는 패킷수나 바이트수 에 의해 지정합니다. 또, plr 는 패킷이 랜덤에 없어지는 비율입니다.

ipfw 를 올바르게 동작시키는 것은 간단하지는 않습니다. 시스템이 라우터나 브릿지로서 기능하고 있는 경우는 더욱더 그러합니다.

라우터로서 기능하는 경우는, 루팅 되는 패킷의 입력 경로, 및, 출력 경로에 같은 룰 세트가 적용되기 때문에, 패킷이 같은 파이프를 두 번 통하지 않게 주의해 주세요 (정말로 그러한 있고 경우는 별도입니다).

브릿지로서 기능할 때는, 브릿지 되는 패킷에 대해서, ipfw 필터는, 입력 경로에서 한 번만 기동됩니다.

같이 진정한 전이중 채널을 시뮬레이트 하는 경우에는, 방향이 다르다 2 개의 파이프를 이용하도록 해 주세요. 예를 들면, 비대상인 쌍방향의 링크를 시뮬레이트 하는 경우의 룰 세트는 다음과 같이 되겠지요.

   ipfw add pipe 1 ip from A to B out
   ipfw add pipe 2 ip from B to A in
   ipfw pipe 1 config bw 1Mbit/s delay 80ms
   ipfw pipe 2 config bw 128Kbit/s delay 300ms

조작

ipfw 의 코드는, 대역폭, 큐 사이즈, 지연, 손실을 적용해야 한다 패킷을 선별해, 그러한 제한을 기술하는 ``파이프''의 식별자를 돌려줍니다.

선별된 패킷은, 우선 할당할 수 있었던 사이즈의 큐에 저축할 수 있습니다. 큐에 저축할 수 있었던 패킷은, 프로그램 된 속도로 꺼내져 지연을 시뮬레이트하기 위한 2 번째의 큐에 옮겨집니다. 2 번째의 큐로부터 꺼내질 때에, 패킷이 보내져 온 것과 같다 프로토콜 스택에 넣어집니다(예를 들면 ip_input(), ip_output(), bdg_forward() 등). 이것은 sysctl 의
sys.net.inet.ipfw.one_pass 의 설정치에 의존합니다. 파이프로부터 출력된 패킷은, 패킷의 행선지에 전송 되는지, 매치 한 룰의 뒤에 기술되었다 ipfw 의 룰에 다시 건네받습니다.

dummynet (은)는 타이머의 1 tick 마다 처리를 실시합니다. 즉, 처리의 주기는 커널 옵션의

    options HZ

에 의해 제어됩니다. 기본값 (100)는 10ms 주기를 의미합니다. 높은 데이터 속도로 정확한 시뮬레이션을 실시하기 위해서(때문에)는, 타이머 주기를 1ms 이하로 설정할 필요가 있을지도 모릅니다. 그러나, 프로그램에 의한 I/O (programmed I/O) (을)를 이용하고 있는 인터페이스안에는, 패킷을 출력하는데 상당한 시간을 필요로 하는 것이 있는 것에 주의해 주세요. 즉, 타이머 주기를 작게 너무 작게 하면(자) , 타이머의 주기에 처리가 따라붙지 않고, 처리의 정밀도를 해쳐 버릴 우려가 있습니다.

커널 옵션

커널 설정 파일내의 이하의 옵션이 dummynet 의 동작에 관계합니다.
  IPFIREWALL               - ipfirewall 를 유효화 (dummynet 사용에는 필수).
  IPFIREWALL_VERBOSE       - 파이어 월(fire wall)의 상세 출력을 유효화.
  IPFIREWALL_VERBOSE_LIMIT - 파이어 월(fire wall)의 상세 출력을 제한.
  DUMMYNET                 - dummynet 의 처리를 유효화.
  NMBCLUSTER               - 네트워크 패킷 버퍼의 크기를 설정.
  HZ                       - 타이머의 주기를 설정.

통상, 아래와 같은 옵션은 필수입니다.

  options IPFIREWALL
  options DUMMYNET

더해, 설정한 모든 파이프의, 대역폭과 지연 시간의 적이라고 큐 사이즈 의 합계에 따라서는, mbuf 클러스터 (네트워크 패킷을 저축해 두기 위해서(때문에) 사용됩니다) 의 수를 늘리는 편이 좋을지도 모릅니다.

SYSCTL 변수

    net.inet.ip.fw.one_pass

패킷이 파이어 월(fire wall)의 코드를 한 번 마셔 통과하도록(듯이) 하고 싶은 경우, 1 으로 설정합니다.

   net.link.ether.bridge_ipfw

브릿지 되는 패킷을 파이어 월(fire wall)의 코드에 건네주고 싶은 경우에 세트 합니다.

명령

파이프를 취급하기 위해서(때문에)는, 이하의 소켓 옵션을 이용합니다.

IP_DUMMYNET_CONFIGURE 는, 파이프의 설정을 갱신합니다. (또는 새롭다 파이프를 작성합니다. )

IP_DUMMYNET_DEL 는, 매치 하는 룰 번호가 존재하는 모든 파이프를 삭제합니다.

IP_DUMMYNET_GET 는, 지정한 번호에 매치 하는 파이프를 돌려줍니다.

IP_FW_FLUSH 지정한 번호에 매치 하는 파이프를 플래시 합니다.

커널 보안 레벨이 2 보다 큰 경우는, IP_DUMMYNET_GET 만이 사용 가능합니다.

관련 항목

setsockopt(2), ip(4), ipfw(8), sysctl(8).

버그

이 메뉴얼 페이지는 dummynet 사용 방법의 전부를 기술하고 있다 (뜻)이유가 아닙니다.

역사

dummynet dummynet (은)는, ACM Computer Communication Review, Jan. 97 issue 에 기술되고 있도록(듯이), TCP 의 congestion의 제어를 위해서(때문에) Luigi Rizzo <luigi@iet.unipi.it> 가 실장했습니다. 그 후, IP 및 브릿지 레벨로 기능하도록(듯이) 변경되어 한층 더 IPFW 패킷 필터에 통합되었습니다.

DUMMYNET (4) Sep 28, 1998

tail head cat sleep
QR code linking to this page


Ben Bullock이 유닉스 매뉴얼 페이지에서 서비스에 대한 의견을 주시기 바랍니다.