2013년 1월 30일 수요일

TCP 응답속도를 체크하여 성능 측정을 해보자.

네트워크 트래픽의 요청과 응답의 지연되는 속도를 계산하여 퍼포먼스 성능 개선에 이용할 수 있는 'tcprstat' 도구를 소개한다. tcprstat 는 Percona 에서 개발한 것으로 무료로 사용할 수 있다. 출력되는 내용은 *NIX 시스템에서 사용하던 vmstat, iostat 와 비슷한 형태이다.
tcprstat 는 tcpstat 도구와 비슷하기도 하지만, 이것은 응답 시간 측정에 포커스를 두고 개발되어있으므로, 전체 네트워크 트래픽에 대한 것은 반영되어 있지 않다.

파일은 다음 경로에서 다운로드 받을 수 있다:
https://launchpad.net/tcprstat

바이너리 64비트 버전:
http://github.com/downloads/Lowercases/tcprstat/tcprstat-static.v0.3.1.x86_64

실행하면 다음과 같은 형태로 출력된다.

# ./tcprstat -p 27017 -t 1 -n 0
timestamp count max min avg med stddev 95_max 95_avg 95_std 99_max 99_avg 99_std
1355270619 669 3116 202 298 290 143 445 284 84 475 291 88
1355270620 727 719 200 263 227 73 424 253 57 454 261 63
1355270621 714 802 201 286 291 81 434 276 69 448 283 73
1355270622 720 570 201 280 271 45 367 275 30 387 279 34
1355270623 729 2441 261 282 270 92 361 273 20 379 277 25
1355270624 713 906 261 290 273 53 371 282 29 390 286 32
1355270625 718 759 261 287 273 47 369 280 29 399 284 33
^C1355270626 419 811 263 298 274 58 374 292 42 388 295 47

-n 을 통해 얼마동안 반복할지 정의한 것으로 0은 무한대를 뜻한다. -t 로 1초마다 측정하고 -p 로 포트번호를 지정하였다. 응답된 쿼리 시간과 종료시간 정보를 포함하고 있다. 각 컬럼의 응답시간은 마이크로세컨드 단위이며, 95/99th percentile 정보도 포함되어 있다. 95 퍼센트의 평균 응답값이 계산된다면, 상위 5%는 제외되는 것으로 자세한 내용은 아래 참고를 살펴보기 바란다.

tcprstat 의 위키페이지에서 소개하고 있는 예를 살펴보면,

# tcprstat -f '%M\t%95M\t%99M\n' -p 3306 -t 1 -n 0
max 95_max 99_max
31221 411 3001
52721 495 2828
12173 507 1513

응답시간이 계산되어 출력되는데 처음 가장 긴 응답시간은 31221 마이크로세컨드 이다. 95% 응답시간은 411 마이크로세컨드 이하이며 99%는 3001 이다.

가장 기본적인 옵션은 -p, -i, -n 정도이며 다음과 같은 포맷코드를 이용하여 출력을 정의할 수 있다.


Format CodeHeaderDefaultMeaning
%ncountyCount of requests that completed during this iteration
%aavgyAverage response time
%ssumySum of response times
%xsqsSum of squares of response times
%mminyMinimum response time
%MmaxyMaximum response time
%hmedyMedian response time
%SstddevyStandard deviation of response times
%vvarVariance of response times
%Iiter#Iteration number
%telapsedSeconds elapsed since the first iteration
%TtimestampyUnix timestamp
%%A literal %
\tA tab character
\nA newline character
95,99Adds a prefixyA percentile indicator; see later in this section for more


이외 -r 옵션을 이용해 PCAP 파일을 바로 분석할 수도 있다. 여러분들이 운영하는 서비스가 있다면 이 도구를 이용해 퍼포먼스 측정을 해보는 것도 유용할 것이다.

[참고]
1. Percona Tcprstat
http://www.percona.com/docs/wiki/tcprstat:start
2. Tcprstat 다운로드
https://github.com/Lowercases/tcprstat/downloads
3. Wikipedia Percentile
http://en.wikipedia.org/wiki/Percentile

2013년 1월 25일 금요일

아카마이 2012년 3분기 인터넷 현황 보고서


아카마이(Akamai)에서 최근 2012년3분기 인터넷 리포트를 공개했습니다. 아카마이 플랫폼을 통해 관찰된 180 개국에서의 6억8천만개 IP 데이터를 가지고 만들어진 것입니다.

자료를 다운받아 보시면 이미지 파일로 간단하게 현황을 쉽게 살펴볼 수 있습니다. 브라질과 중국의 인터넷 성장세가 빠른거 같습니다.

[출처: 아카마이 보고서]
공격국가로는 중국이 가장 많고 다음으로는 미국이라고 합니다. 전체 관찰되는 트래픽의 72 퍼센트가 상위 TOP 10 국가/지역이 담당하고 있고요 포트 445 번이 공격 포트로 가장 많이 관찰되고 있다고 합니다. 총 30% 에 해당합니다. 그리고 이어서 23번인 텔넷과 SQL 서버 1433, 터미널 서버 포트인 3389 그리고 80 번 순으로 이어집니다.

"Operation Ababil"라고 알려진 DDoS 공격당시에 초당 65Gbps 트래픽이 전달되었다고 하니 엄청난 양이죠.

마지막으로 인터넷 속도 측정한 것도 있는데 IT 강국 답게 한국이 평균 14.7Mbps 로 1등입니다. 다음으로는 일본(10.7Mbps), 홍콩(8.9Mbps) 순서로 이어집니다.

[Akamai 인터넷 보고서]
http://wwwns.akamai.com/soti/soti_q312_figures.zip

2013년 1월 22일 화요일

콘솔 기반의 리눅스/BSD 네트워크 모니터 vnStat

vnStat 는 Linux, BSD 계열의 네트워크 트래픽 모니터이다. 콘솔기반의 도구로 간단하게 사용가능하며, 패킷 스니핑 도구와 같이 직접적으로 트래픽을 모니터 하지 않고 커널에서 제공해주는 네트워크 인터페이스 정보를 기반으로 정보를 보여준다. 직접 스니핑을 하지 않으므로 시스템 자원 사용면에서는 가볍다. 리눅스에서 사용하기 위해서는 커널 2.2 이상 되어야 한다.

주요기능으로는

- 루트 권한 없이도 사용할 수 있다.
- 낮은 시스템 자원 사용
- 다양한 출력 옵션 지원 (요약, 시간, 일,월,주 별로 제공 등)
- libgd 를 이용한 png 이미지 출력
- 동시에 여러개의 인터페이스를 모니터링 할 수 있음
- 빠르고 간단하게 설치하여 사용할 수 있다.

소스는 다음 경로에서 받을 수 있다.
http://humdi.net/vnstat/vnstat-1.11.tar.gz

사용할 수 있는 옵션은 아래와 같으며, 워낙 간결해서 옵션 이름만 보아도 어떤 기능인지 추측이 될 것이다.

$ vnstat --help
 vnStat 1.11 by Teemu Toivola 

         -q,  --query          query database
         -h,  --hours          show hours
         -d,  --days           show days
         -m,  --months         show months
         -w,  --weeks          show weeks
         -t,  --top10          show top10
         -s,  --short          use short output
         -u,  --update         update database
         -i,  --iface          select interface (default: eth0)
         -?,  --help           short help
         -v,  --version        show version
         -tr, --traffic        calculate traffic
         -ru, --rateunit       swap configured rate unit
         -l,  --live           show transfer rate in real time

See also "--longhelp" for complete options list and "man vnstat".

-h 옵션을 사용해 시간대별로 트래픽 현황을 표시한 것이다.

$ vnstat -h
 eth1                                                                     21:25
  ^           r
  |           r
  |           r                                            r
  |        r  r                                            r
  |      t r  r                                            r            t
  |     rt r  r                                            r  r      t  t
  |     rt r  r                                            r  r      t  t
  |     rt r  r         t                      r           r  r      t  t
  |     rt r  rt        t                   r  r        r  rt rt  t rt rt  t
  |  rt rt rt rt rt r  rt r              r  r  r  r  rt rt rt rt rt rt rt  t
 -+--------------------------------------------------------------------------->
  |  22 23 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21

 h  rx (KiB)   tx (KiB)      h  rx (KiB)   tx (KiB)      h  rx (KiB)   tx (KiB)
22    250,801    205,825    06    100,529     49,054    14    205,356    157,877
23    705,144    885,844    07     52,806     44,130    15    258,228    226,265
00    928,792    224,789    08     52,298     45,230    16  1,028,043    343,843
01  1,271,180    292,260    09     70,396     61,719    17    755,804    293,309
02    212,296    186,481    10    155,502     72,451    18    235,691    284,886
03    165,931     91,943    11    266,673     92,497    19    275,554    658,386
04    150,997    437,071    12    392,244    122,185    20    307,819    850,813
05    180,170     56,391    13    133,829    120,555    21    117,474    292,787

일별로 트래픽 현황을 살펴보는 것이다.

$ vnstat -d

 eth1  /  daily

         day         rx      |     tx      |    total    |   avg. rate
     ------------------------+-------------+-------------+---------------
      07/03/09     10.90 GiB |    6.39 GiB |   17.29 GiB |    1.68 Mbit/s
      07/04/09     21.21 GiB |    5.65 GiB |   26.87 GiB |    2.61 Mbit/s
      07/05/09     10.58 GiB |    6.67 GiB |   17.25 GiB |    1.67 Mbit/s
      07/06/09     49.90 GiB |    9.69 GiB |   59.59 GiB |    5.79 Mbit/s

주별로도 트래픽 현황을 볼 수 있다.


$ vnstat -w

 eth1  /  weekly

                      rx      |     tx      |    total    |   avg. rate
   ---------------------------+-------------+-------------+---------------
    last 7 days    114.11 GiB |   56.58 GiB |  170.69 GiB |    2.38 Mbit/s
      last week    137.79 GiB |   58.96 GiB |  196.75 GiB |    2.73 Mbit/s
   current week    102.60 GiB |   49.92 GiB |  152.52 GiB |    2.49 Mbit/s
   ---------------------------+-------------+-------------+---------------
      estimated    121.38 GiB |   59.06 GiB |  180.44 GiB |


다음은 이미지 출력 기능을 이용해 만들어 낸 것이다.

summary


vnStat 의 장점으로는 PHP 웹 기반으로 구현된 것도 있고 윈도우 기반의 SystrayIcon 도 있다. 이미지 출력 또한 지원한다.( http://humdi.net/vnstat/cgidemo/ )
루트 권한 없이 가볍게 트래픽 현황을 모니터링 하고 싶은 분들에게 추천해 본다.

[참고]
1. http://humdi.net/vnstat/


2013년 1월 15일 화요일

GUI 기반의 리눅스 포렌식 도구 SMART

저번 포스팅에서 Wiping 도구를 소개하였다. 오랜시간을 걸려 와이핑을 한 디스크가 정말 제대로 된 것일까 하는 궁금증이 생긴다. 찾다보니 GUI 화면의 나름 깔끔해 보이는 것이 하나 있어 테스트해 보았다. 무료는 아니지만 평가판으로 설치하여 간단하게 나마 확인하는 차원에서는 나쁘지 않을것 같다. (제품을 광고하고자 하는 것은 아니다 ^^)

ASR DATA 사의 스마트 포렌식이라는 도구를 이용하였는데, 다음 경로에서 평가판을 다운로드 받을 수 있다.

http://www.asrdata.com/forensic-software/smart-for-linux/

다운로드 받은 파일을 설치해 주면 /usr/local/SMART/ 경로가 생긴다. 여기서

# ./smart-eval 로 실행해 주면 로그인 창이 하나 나타나게 되고, 사용자 생성없이 No User 로 로그인해 사용해 보면 된다. 그러면 위와 같은 메인 화면이 나타난다. 여기서 /dev/sdb 로 연결되어 있는 80G 하드 디스크를 대상으로 할 것이다. 오른쪽을 클릭해서 디바이스 정보를 확인해 보면 기본 정보를 확인해 볼 수 있다. 디스크에서 데이터 View 기능을 누르면 위 우측 화면과 같이 기록되어 데이터가 나타난다. "aa" 로 다 기록되어 있는 것을 볼 수가 있고 처음부터 끝까지 모든 데이터는 다 이렇게 기록되어 있다. 확실하게 Wiping 이 된것 같다.


 자, 그럼 일반적인 하드 디스크의 경우는 어떨까? 운영체제가 설치되어 있는 디스크 영역으로 살펴보니 데이터들이 보인다.
 SMART 의 기능중에 하나인 검색기능을 이용해 보았다. 'network' 라는 문자열을 검색해 보았더니 상당히 많은 데이터가 검출되었다.


여기서는 앞서 소개한 Wiping 을 간단하게 확인하는 수준에서 다뤘고 데이터 뷰, 검색 기능등을 이용하여 포렌식을 하는데 이용하면 된다. 차차 리눅스 기반의 포렌식에 대해서도 다뤄볼까 한다. 참고로 해당 도구를 64비트 환경에서 실행했을때 문제가 발생하여 32비트의 가상 이미지에서 실행하였다. 64 비트 환경의 사용자 분들은 참고하길 바란다.

2013년 1월 11일 금요일

*NIX 에서 데이터 안전하게 지우기 (Wiping)


집안에 쌓여있는 오래된 하드디스크들이 있다. 40G, 80G, 160G 몇년전에는 이 숫자가 커 보였지만 이제는 너무 작아져 버렸다. 2테라 하드도 구입하고 겸사 겸사 처분하기로 마음 먹었다. 처분하기 전 디스크의 데이터는 깔끔하게 지우는 것이 좋다.

흔히 파일을 삭제하거나, 포맷을 했다고 해서 데이터가 완벽히 사라진 것은 아니다.중요한 데이터라면 안전하게 지우기 위한 방법이 필요하다. 윈도우에서 도구는 한번 소개한 적이 있는데, 오늘은 *NIX 에서 쉽게 사용할 수 있는 도구 몇개를 알아보자.

1) Wipe
Linux 2.* 버전및 AIX, Sun, BSD 계열등에 포함되어 있는 작은 커맨드 유틸리티이다. 설치되어 있지 않은 경우는

# apt-get install wipe (or aptitude install wipe)

사용방법은 wipe [options] path1 path2 와 같이 지정해 주면된다.

기본은 34번 Wiping 을 하지만 -q 는 퀵 모드로 좀더 적게 수행한다.

# wipe /dev/sda1

2) Shred

wipe 와 비슷하게 사용가능하다. -n 는 디폴트 25 번 대신 몇번을 덮어쓰기를 할지 지정하고 -s 는 얼마크기로 와이핑 할지 정한다. -v 옵션을 사용하면 진행상황을 좀더 볼 수 있다.

# shred file1 file2 file3

# shred -v /dev/sda1

3) Secure-Delete tools

다른 도구에 비해 몇가지 도구를 더 포함하고 있는데 파일, 여유공간, 스왑, 메모리를 안전하게 삭제할 수 있는 도구를 따로 제공한다.

# apt-get install secure-delete

와 같이 설치할 수 있다. 패키지는 다음과 같이 구성되어 있다.

- srm : 디스크에서 파일 이나 디렉토리를 삭제하는 경우
- smem : 컴퓨터 메모리의 데이터를 삭제하는 경우
- sfill : 디스크에서 Free 공간의 데이터를 삭제하는 경우
- sswap : 스왑 파티션의 데이터를 삭제하는 경우

Wiping 을 하는데는 많은 시간이 소요된다. 물론 디스크 크기가 크면 클 수록 시간은 크게 늘어난다. 40G, 80G 를 와이핑 하는데도 꽤 많은 시간을 소요했다. 더불어 디스크를 계속 사용하므로 수명에 영향을 줄 수도 있다. :-)

2013년 1월 7일 월요일

NetEM을 이용한 Traffic Shaping (패킷 지연,유실,대역폭 제한등)


NetEM(Network Emulation)기능을 활용한 패킷의 지연, 중복, 유실 등을 테스트해보자. 에뮬레이션은 다양한 관점에서 활용될 수 있다. 애플리케이션의 벤치마크라든지 제품의 테스트 또는 대역폭의 제한으로까지 이용할 수 있다.

NetEM 은 크게 2개의 컴포넌트로 구성되어 있다. 큐를 위한 커널 모듈과 설정을 위한 커맨드라인 도구인 tc 가 있다. 커널모듈은 2.6.8 이후부터 통합되었고, iproute2 패키지의 한 부분이다. 여기서는 Traffic Shaping 과 관련하여 소개를 해 보고자 한다. Traffic Shaping 은 네트워크 트래픽을 제한하여 자원에 대한 우선순위를 조정한다. 사전에 정의된 분류, 정책, 큐 등을 이용하여 네트워크 자원을 필요에 따라 효과적으로 정의하는 것이다. 이것을 통해 여러분들은

- 네트워크 서비스 조절
- 대역폭의 제한
- 서비스에 대한 QoS(Quality of Service) 보장

을 통해 네트워크의 안정적인 운영, 서비스 가용성등을 확보할 수도 있다.

기본적으로 큐는 FIFO 패킷 큐 형태로 동작한다. 학교 수업때 한번쯤 들어보았을 만한 이 것은 먼저 들어온 것이 먼저 나간다는 First In First Out 개념이다.

이제 몇 가지 사용 예제를 알아볼 것인데, 여러분들이 사용하는 커널이 2.6.8 이상 이라면 특별한 설치는 필요하지 않다. 아마 대부분의 경우 사용할 수 있을 것이다.

해당 기능은 커널 컴파일 옵션시 다음 그림과 같이 선택되어 있으면 된다.



예제를 설명하기 전에 주로 'tc' 커맨드 도구를 이용하여 설명을 할 것이다. tc 의 기본적인 사용방법은 아래와 같다:




 tc  qdisc [ add | change | replace | link ] dev DEV [ parent qdisc-id |
       root ] [ handle qdisc-id ] qdisc [ qdisc specific parameters ]

       tc class [ add | change | replace ] dev DEV parent qdisc-id  [  classid
       class-id ] qdisc [ qdisc specific parameters ]

       tc filter [ add | change | replace ] dev DEV [ parent qdisc-id | root ]
       protocol protocol prio priority filtertype [ filtertype specific param‐
       eters ] flowid flow-id

       tc [ FORMAT ] qdisc show [ dev DEV ]

       tc [ FORMAT ] class show dev DEV


qdisc 는 Queue Discipline (qdisc) 로 패킷을 받고 서비스하기 위한 순서를 정하기 위한 어떤 룰들의 집합이라고 보면 된다. 즉, 이것은 패킷 큐로 패킷을 전송할때 어떤 알고리즘을 사용해 패킷을 보낼지 정하는 것이다. qdisc 는 Classless, Classful, Root, egress, ingress 등이 있다. Root 는 classful/classless 랑 상관없이 각 네트워크 인터페이스의 상위 qdisc 이고 egress 는 밖으로 나가는 패킷에 대해서만 동작하고 ingress 는 내부로 들어오는 트래픽에 대해서 동작한다.

- 패킷 80ms 지연하기 


# tc qdisc add dev eth0 root netem delay 80ms

add 를 통해 dev 로 네트워크 인터페이스를 정의해 주고 qdisc 를 처리하기 위한 이름을 netem 로 지정하였다. 그리고 마지막으로 delay 를 80ms 주었다.

일단 정상적인 지연을 적용하기 전에 Ping 을 해 보았다. 평균적으로 0-1ms 속도가 나왔다. 하지만, 지연을 적용하고서는 다음과 같이 81ms 정도로 지연되었다.

# ping 203.255.xxx.xxx
PING 203.255.xxx.xxx (203.255.xxx.xxx) 56(84) bytes of data.
64 bytes from 203.255.xxx.xxx: icmp_req=1 ttl=244 time=81.0 ms
64 bytes from 203.255.xxx.xxx: icmp_req=2 ttl=244 time=81.0 ms
64 bytes from 203.255.xxx.xxx: icmp_req=3 ttl=244 time=81.2 ms
^C
--- 203.255.xxx.xxx ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 81.067/81.117/81.208/0.064 ms

- 패킷을 랜덤하게 지연시키기 (30ms ~ 80ms)


특정 값으로 정하기 보다는 지정된 범위안에서 랜덤하게 지연하는 것이다. 명령어 마지막에 추가적으로 값을 하나 더 지정해 주면 된다.

# tc qdisc change dev eth0 root netem delay 80ms 30ms
# ping 203.255.xxx.xxx
PING 203.255.xxx.xxx (203.255.xxx.xxx) 56(84) bytes of data.
64 bytes from 203.255.xxx.xxx: icmp_req=1 ttl=244 time=77.1 ms
64 bytes from 203.255.xxx.xxx: icmp_req=2 ttl=244 time=93.7 ms
64 bytes from 203.255.xxx.xxx: icmp_req=3 ttl=244 time=78.8 ms
64 bytes from 203.255.xxx.xxx: icmp_req=4 ttl=244 time=100 ms
^C
--- 203.255.xxx.xxx ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 77.131/87.483/100.138/9.756 ms

- 기존에 정의된 지연을 다른 값으로 변경


처음 add 를 사용한 것과 달리 change 라고만 바꿔주고 delay 시킬 값을 지정해 주면된다.

# tc qdisc change dev eth0 root netem delay 30ms
# ping 203.255.xxx.xxx
PING 203.255.xxx.xxx (203.255.xxx.xxx) 56(84) bytes of data.
64 bytes from 203.255.xxx.xxx: icmp_req=1 ttl=244 time=31.0 ms
64 bytes from 203.255.xxx.xxx: icmp_req=2 ttl=244 time=31.0 ms
64 bytes from 203.255.xxx.xxx: icmp_req=3 ttl=244 time=31.0 ms
^C
--- 203.255.xxx.xxx ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 31.024/31.062/31.090/0.205 ms

- 현재 정의된 네트워크 인터페이스의 설정 값 확인


# tc qdisc show dev eth0
qdisc netem 8001: root refcnt 2 limit 1000 delay 30.0ms

- 패킷 유실 15% 설정하기 


loss 라는 파리미터를 주고 값을 입력한다. 여기서는 약 15% 정도 유실을 설정하였다.

# tc qdisc change dev eth0 root netem loss 15%
# tc qdisc show dev eth0
qdisc netem 8001: root refcnt 2 limit 1000 loss 15%
# ping 203.255.xxx.xxx
PING 203.255.xxx.xxx (203.255.xxx.xxx) 56(84) bytes of data.
64 bytes from 203.255.xxx.xxx: icmp_req=1 ttl=244 time=0.935 ms
64 bytes from 203.255.xxx.xxx: icmp_req=3 ttl=244 time=1.36 ms
64 bytes from 203.255.xxx.xxx: icmp_req=4 ttl=244 time=1.10 ms
64 bytes from 203.255.xxx.xxx: icmp_req=6 ttl=244 time=1.01 ms
64 bytes from 203.255.xxx.xxx: icmp_req=7 ttl=244 time=1.00 ms
64 bytes from 203.255.xxx.xxx: icmp_req=8 ttl=244 time=1.57 ms
^C
--- 203.255.xxx.xxx ping statistics ---
8 packets transmitted, 6 received, 25% packet loss, time 7011ms
rtt min/avg/max/mdev = 0.935/1.164/1.570/0.227 ms

ping 을 해보면 패킷이 유실되는 것 같이 지연이 발생한다.
예를들어 0.1% 라면 대략 1000개중에 1개 정도가 랜덤하게 Drop 된다고 볼 수 있다.

- 패킷 중복 


# tc qdisc change dev eth0 root netem duplicate 1%

duplicate 를 이용하여 정의하면 된다.

- 패킷 깨트리기 


# tc qdisc change dev eth0 root netem corrupt 0.1%

- 정의된 설정정보 제거하기 


# tc qdisc del dev eth0 root
# tc qdisc show dev eth0
qdisc pfifo_fast 0: root refcnt 2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1

- 특정 IP 목적지 우선순위 조정 


203.255.xxx.xxx 로 나가는 것은 Priority 를 3으로 조정하는 것이다.

# tc qdisc add dev eth0 root handle 1: prio
# tc filter add dev eth0 protocol ip parent 1:0 prio 3 u32 match ip dst 203.255.xxx.xxx/32 flowid 1:3
# tc qdisc show dev eth0
qdisc prio 1: root refcnt 2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1

- 패킷 대역폭 정의하기 


# tc qdisc add dev eth0 root handle 1:0 netem delay 100ms
# tc qdisc add dev eth0 parent 1:1 handle 10: tbf rate 256kbit buffer 1600 limit 3000
# tc -s qdisc ls dev eth0
qdisc netem 1: root refcnt 2 limit 1000 delay 100.0ms
 Sent 306774 bytes 4269 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 5p requeues 0
qdisc tbf 10: parent 1:1 rate 256000bit burst 1600b lat 43.8ms
 Sent 305784 bytes 4254 pkt (dropped 0, overlimits 3 requeues 0)
 backlog 0b 5p requeues 0

지연을 100ms 로 지정하였고, 대역폭을 256Kbit 로 설정하였다.

이상 여기까지 간단히 NetEM 을 이용한 트래픽 제어를 살펴보았다. 간단하게만 언급하였으니 세부적인 것은 Man Page 등을 살펴보길 바란다.



[참고]
http://www.linuxfoundation.org/collaborate/workgroups/networking/netem