'iperf'에 해당되는 글 2건

  1. 2011.03.07 iperf 이용한 네트워크 성능 측정 (대량 트래픽 발생) (3)
  2. 2009.06.01 네트워크 트러블슈팅 도구
2011.03.07 10:47

iperf 이용한 네트워크 성능 측정 (대량 트래픽 발생)


클라이언트와 서버간의 네트워크 대역폭을 체크하는 프로그램이다.
UDP로 체크하면 패킷 유실사항을 확인할 수 있다.



Iperf는 프리웨어로, 많은 종류의 운영체제(윈도우, 솔라리스, Irix, 리눅스, FreeBSD, MacOS 등)를 지원한다. Iperf는 별도의 설치과정이 필요 없으며 사용방법이 간단하다. 또한 여러 종류의 방법(MTU, 윈도우 사이즈, 프로토콜 변경 등)으로 테스트가 가능하며, IPv6나 멀티캐스트와 같은 신기술을 지원한다. Iperf의 옵션은 다음과 같다.

 

  -v(version) : 버전 확인

  -h(help) : 도움말

  -p(port number) : 포트 번호(디폴트 5001)

  -u(udp) : TCP 대신 UDP 사용(디폴트 TCP)

  -w(window size) : TCP 윈도우 사이즈(디폴트 8Kbyte)

  -M(MTU) : Maximum Transfer Unit

  -V : IPv6

  -c(client) : 클라이언트 모드

  -b(bandwidth) : UDP에서 대역폭 지정(디폴트 1Mbps)

  -t(time) : 측정시간(디폴트 10초)

  -s(server) : 서버 모드

  -D(Daemon) : 윈도우 서비스에 등록(서버만 해당)

  -R(Remove) : 윈도우 서비스에서 제거(서버만 해당)

 

Iperf의 사용 예는 다음과 같다.

 

서버모드

·TCP 성능을 측정하기 위한 서버 실행

C:\> iperf -s

------------------------------------------------------------

Server listening on TCP port 5001

TCP window size: 8.00 KByte (default)

------------------------------------------------------------

 

·윈도우 사이즈를 100Kbyte로 설정

C:\>iperf -s -w 100k

------------------------------------------------------------

Server listening on TCP port 5001

TCP window size:  100 KByte

------------------------------------------------------------

 

·UDP 성능을 측정하기 위한 서버 실행

C:\>iperf -s -u

------------------------------------------------------------

Server listening on UDP port 5001

Receiving 1470 byte datagrams

UDP buffer size: 8.00 KByte (default)

------------------------------------------------------------

 

·윈도우 서비스에 등록 실행

C:\>iperf -s -D

------------------------------------------------------------

Server listening on TCP port 5001

TCP window size: 8.00 KByte (default)

------------------------------------------------------------

IPerf Service started.

 

·윈도우 서비스에서 제거

C:\>iperf -s -R

------------------------------------------------------------

Server listening on TCP port 5001

TCP window size: 8.00 KByte (default)

------------------------------------------------------------

Stopping IPerf Service.

IPerf Service stopped.

IPerf Service removed.

IPerf Service is removed.

 

클라이언트 모드

아무런 조건이 없는 경우(디폴트) 프로토콜은 tcp, 포트번호는 5001, 윈도우 사이즈는 8Kbyte, 시간은 10초이다.

 

·디폴트 값으로 성능 측정

C:\> iperf -c 192.168.10.100

------------------------------------------------------------

Client connecting to 192.168.10.100, TCP port 5001

TCP window size: 8.00 KByte (default)

------------------------------------------------------------

[884] local 192.168.20.100 port 1036 connected with 192.168.10.100 port 5001

[ ID] Interval       Transfer     Bandwidth

[884]  0.0-10.0 sec   113 MBytes  94.5 Mbits/sec

 

·1초 간격으로 결과 측정

C:\>iperf -c 192.168.20.200 -i 1

------------------------------------------------------------

Client connecting to 192.168.20.200, TCP port 5001

TCP window size: 8.00 KByte (default)

------------------------------------------------------------

[884] local 192.168.20.100 port 2515 connected with 192.168.20.200 port 5001

[ ID] Interval       Transfer     Bandwidth

[884]  0.0- 1.0 sec  11.3 MBytes  94.4 Mbits/sec

[884]  1.0- 2.0 sec  11.2 MBytes  94.2 Mbits/sec

[884]  2.0- 3.0 sec  11.3 MBytes  94.4 Mbits/sec

[884]  3.0- 4.0 sec  11.2 MBytes  94.2 Mbits/sec

[884]  4.0- 5.0 sec  11.1 MBytes  93.5 Mbits/sec

[884]  5.0- 6.0 sec  8.23 MBytes  69.0 Mbits/sec

[884]  6.0- 7.0 sec  11.2 MBytes  94.2 Mbits/sec

[884]  7.0- 8.0 sec  11.3 MBytes  94.4 Mbits/sec

[884]  8.0- 9.0 sec  11.3 MBytes  94.4 Mbits/sec

[884]  9.0-10.0 sec  11.2 MBytes  94.2 Mbits/sec

[884]  0.0-10.0 sec   109 MBytes  91.6 Mbits/sec

 

·윈도우 사이즈 변경 후 측정

C:\> iperf -w 100k -c 192.168.10.100

------------------------------------------------------------

Client connecting to 192.168.10.100, TCP port 5001

TCP window size:  100 KByte

------------------------------------------------------------

[884] local 192.168.20.100 port 1048 connected with 192.168.10.100 port 5001

[ ID] Interval       Transfer     Bandwidth

[884]  0.0-10.0 sec   113 MBytes  94.9 Mbits/sec

 

·시간을 100초로 지정 후 측정

C:\> iperf -t 100 -c 192.168.10.100

------------------------------------------------------------

Client connecting to 192.168.10.100, TCP port 5001

TCP window size: 8.00 KByte (default)

------------------------------------------------------------

[884] local 192.168.20.100 port 1051 connected with 192.168.10.100 port 5001

[ ID] Interval       Transfer     Bandwidth

[884]  0.0-100.0 sec  1.10 GBytes  94.6 Mbits/sec

 

·동시에 5개의 세션으로 측정

C:\>iperf -c 192.168.20.200 -P 5

------------------------------------------------------------

Client connecting to 192.168.20.200, TCP port 5001

TCP window size: 8.00 KByte (default)

------------------------------------------------------------

[884] local 192.168.20.100 port 2731 connected with 192.168.20.200 port 5001

[868] local 192.168.20.100 port 2732 connected with 192.168.20.200 port 5001

[852] local 192.168.20.100 port 2733 connected with 192.168.20.200 port 5001

[836] local 192.168.20.100 port 2734 connected with 192.168.20.200 port 5001

[820] local 192.168.20.100 port 2735 connected with 192.168.20.200 port 5001

[ ID] Interval       Transfer     Bandwidth

[884]  0.0-10.0 sec  25.2 MBytes  21.1 Mbits/sec

[820]  0.0-10.0 sec  20.9 MBytes  17.5 Mbits/sec

[868]  0.0-10.0 sec  17.9 MBytes  15.0 Mbits/sec

[836]  0.0-10.0 sec  23.5 MBytes  19.7 Mbits/sec

[852]  0.0-10.0 sec  24.7 MBytes  20.7 Mbits/sec

[SUM]  0.0-10.0 sec   112 MBytes  94.0 Mbits/sec

 

리눅스에서 IPv6이고 포트 번호를 30000으로 변경

[ipv6@localhost Iperf]$ ./iperf -V -p 30000 -c 2001:220:802::5678

------------------------------------------------------------

Client connecting to 2001:220:802::5678, TCP port 30000

TCP window size: 85.3 KByte (default)

------------------------------------------------------------

[  3] local 2001:220:806::1234 port 39491 connected with 2001:220:802::5678 port 30000

[ ID] Interval       Transfer     Bandwidth

[  3]  0.0-10.0 sec  94.1 MBytes  78.9 Mbits/sec

 

Iperf의 사용 시 주의할 점이 있는데, 다음과 같다.

서버/클라이언트의 프로토콜이 틀릴 경우

·서버는 tcp/5001인데 클라이언트에서 udp/5001인 경우

C:\>iperf -c 192.168.20.200 -u

------------------------------------------------------------

Client connecting to 192.168.20.200, UDP port 5001

Sending 1470 byte datagrams

UDP buffer size: 8.00 KByte (default)

------------------------------------------------------------

[884] local 192.168.20.100 port 2487 connected with 192.168.20.200 port 5001

[ ID] Interval       Transfer     Bandwidth

[884]  0.0-10.0 sec  1.25 MBytes  1.05 Mbits/sec

read failed: Connection reset by peer

 

·서버는 udp/5001인데 클라이언트에서 tcp/5001인 경우

C:\>iperf -c 192.168.20.200

connect failed: Connection refused

클라이언트 모드에서 IP 주소의 위치

IP 주소는 반드시 -c 뒤에 나와야 한다.

 

·정상

C:\>iperf -u -c 192.168.20.200

------------------------------------------------------------

Client connecting to 192.168.20.200, UDP port 5001

Sending 1470 byte datagrams

UDP buffer size: 8.00 KByte (default)

------------------------------------------------------------

[884] local 192.168.20.100 port 2494 connected with 192.168.20.200 port 5001

[ ID] Interval       Transfer     Bandwidth

[884]  0.0-10.0 sec  1.25 MBytes  1.05 Mbits/sec

[884] Server Report:

[884]  0.0-10.0 sec  1.25 MBytes  1.05 Mbits/sec  3.363 ms    0/  893 (0%)

[884] Sent 893 datagrams

 

·정상

C:\>iperf -c 192.168.20.200 -u

------------------------------------------------------------

Client connecting to 192.168.20.200, UDP port 5001

Sending 1470 byte datagrams

UDP buffer size: 8.00 KByte (default)

------------------------------------------------------------

[884] local 192.168.20.100 port 2496 connected with 192.168.20.200 port 5001

[ ID] Interval       Transfer     Bandwidth

[884]  0.0-10.0 sec  1.25 MBytes  1.05 Mbits/sec

[884] Server Report:

[884]  0.0-10.0 sec  1.25 MBytes  1.05 Mbits/sec  3.380 ms    0/  893 (0%)

[884] Sent 893 datagrams

 

·비정상

C:\>iperf -c -u 192.168.20.200

iperf: ignoring extra argument -- 192.168.20.200

error: 알려진 호스트가 없습니다.

UDP 성능 측정에서 주의할 점

TCP와 달리 UDP에서는 몇 가지 주의해야 될 사항이 있다.

 

·기본 대역폭이 1Mbps 기준으로 동작할 때

C:\> iperf -u -c 192.168.20.200

------------------------------------------------------------

Client connecting to 192.168.20.200, UDP port 5001

Sending 1470 byte datagrams

UDP buffer size: 8.00 KByte (default)

------------------------------------------------------------

[884] local 192.168.10.100 port 2498 connected with 192.168.20.200 port 5001

[ ID] Interval       Transfer     Bandwidth

[884]  0.0-10.0 sec  1.25 MBytes  1.05 Mbits/sec

[884] Server Report:

[884]  0.0-10.0 sec  1.20 MBytes  1.01 Mbits/sec  3.685 ms   34/  893 (3.8%)

[884] Sent 893 datagrams

따라서 -b 옵션을 이용해 적절한 대역폭을 지정한 후 측정하는 것이 바람직하다.

 

C:\>iperf -c 192.168.20.200 -u -b 10M

------------------------------------------------------------

Client connecting to 192.168.20.200, UDP port 5001

Sending 1470 byte datagrams

UDP buffer size: 8.00 KByte (default)

------------------------------------------------------------

[884] local 192.168.20.100 port 1855 connected with 192.168.20.200 port 5001

[ ID] Interval       Transfer     Bandwidth

[884]  0.0-10.0 sec  11.9 MBytes  9.97 Mbits/sec

[884] Server Report:

[884]  0.0-10.0 sec  11.9 MBytes  9.98 Mbits/sec  1.377 ms    1/ 8493 (0.012%)

[884] Sent 8493 datagrams

 

·지터와 패킷 손실율 등을 알 수 있다.

클라이언트가 UDP를 이용하면, 서버에서 지터, 손실율 등이 나타나게 된다.

 C:\>iperf -s -u

------------------------------------------------------------

 Server listening on UDP port 5001

 Receiving 1470 byte datagrams

 UDP buffer size: 8.00 KByte (default)

 ------------------------------------------------------------

 [900] local 192.168.10.100 port 5001 connected with 192.168.10.200 port 1058

 [ ID] Interval       Transfer     Bandwidth       Jitter   Lost/Total Datagrams

 [900]  0.0- 5.4 sec   686 KBytes  1.05 Mbits/sec  6.996 ms    0/  478 (0%)

 [900] local 192.168.10.100 port 5001 connected with 192.168.10.200 port 1059

 [ ID] Interval       Transfer     Bandwidth       Jitter   Lost/Total Datagrams

 [900]  0.0- 5.0 sec   632 KBytes  1.04 Mbits/sec  8.044 ms    0/  440 (0%)

 [900] local 192.168.10.100 port 5001 connected with 192.168.10.200 port 1060

 [ ID] Interval       Transfer     Bandwidth       Jitter   Lost/Total Datagrams

 [900]  0.0- 1.0 sec   129 KBytes  1.04 Mbits/sec  7.028 ms    0/   90 (0%)



다운로드 : http://sourceforge.net/projects/iperf/


출처 : [TipTipTip!] Iperf를 이용한 네트워크 성능 측정


Trackback 1 Comment 3
  1. 조커(최용만) 2011.05.26 18:26 address edit & del reply

    형님 음 회사에서 공유한 사이트라 들어와부니 형님 블로그군요 ㅋㅋ 유익한 정보 감사합니다!
    난 블로그 너무 힘듬이라... 음 가상화 관련 하고싶긴한데.. 귀찮아서 ....
    존경합니다...

  2. sejun6022 2015.05.28 17:11 address edit & del reply

    Udp 테스트 시에
    서버쪽에서 iperf 2400 open_stackdumpfile: dumping stack trace to iperf.exe.stackdump 나옵니다
    클라이언트에서 경고창만 뜨고
    값은 나오는데요

2009.06.01 09:59

네트워크 트러블슈팅 도구

1. 호스트 설정

    a. ps
        개별 프로세스를 빠르게 보여주지만 시스템 상태의 모든 것을 정확하게 보여주는 것은 아니다.
        ps가 보여주지 않는다고 해서 그런 서비스가 가동되지 않고 있다는 의미가 아니다.
        단지 지금 동작 중인 프로세스가 없다는 것 뿐이다.

        * 같은 PPID를 가지는 프로세스를 지켜봄으로써 프로세스를 지나치게 많이 생성해내는
           불량 프로세스를 구분해 낼 수도 있다.

   
 b. top
        CPU 사용량이 많은 순서대로 정렬된 프로세스 목록을 주기적으로 갱신하면서 보여준다.

        * top의 장점은 CPU 자원을 많이 소모하는 프로세스를 집중적으로 볼수 있게 해준다.

    c. netstat
        한 호스트에서의 연결 내역과 제공되는 서비스의 목록을 보여준다.
    
        * Recv-Q, Send-Q가 0 이거나 0에 가까워야 한다. 그렇지 않으면 특정 서비스에 문제가 있는 것이다.
        [ TCP 연결 상태 ]
            - SYN_RECEIVED : '서비스 거부 공격'을 받고 있는 증거일 수 있다.
            - TIME_WAIT : 최근에 연결이 종료된 것이다.
            - ESTABLISHED : 현재 사용되고 있는 것이다.
            - LISTEN :  연결 요청을 기다리고 있는 것이다.


        [ 옵션 ]
            -r : 라우팅 테이블을 보여준다.

    d. lsof
        유닉스 시스템에서 열린 파일을 나열해 준다.
        특정 프로세스에 의해서 열린 파일을 나열할 수도 있다.

        [ 옵션 ]
            -i : 네트워크에서 열린 모든 소켓 파일을 보여준다.

    
e. ifconfig
        네트워크 인터페이스의 설정을 변경하기 휘한 목적에 주로 사용한다.

====================

2. 연결성 시험
    
    a. ping
        두 가지 특정한 ICMP 메시지인 ECHO_REQUEST, ECHO_REPLY를 사용한다.
    
   
 b. fping
        여러 개의 호스트에 병렬로 ping을 하도록 확장되었다.

   
 c. echoping
        ECHO, DISCARD, CHARGEN, HTTP, TCP, UDP로 제공되는 서비중의 하나로 패킷을 보내는 방식으로 동작한다.

  
  d. arping
        ICMP 패킷 대신 ARP  요청과 응답을 사용한다.

====================

3. 경로 특성

    네트워크 연결이 적절하게 동작하고 있는지를 검사한다.

  
  a. traceroute
        
        [ 작동 원리 ]
            - 세 개의 패킷의 TTL 필드를 1로 설정하여 발송한다.
            - 첫번째 라우터가 이 패킷을 버리면서 ICMP TIME_EXCEEDED 메시지를 보낸다.
            - 그 다음 세개의 패킷은 TTL 값을 2로 설정하여 보낸다.
            - 두번째 라우터가 패킷을 버린다.
            - 패킷이 목적지에 도착하면 ICMP PORT_UNREACHABLE 메시지가 되돌아온다.
              ( 이것은 traceroute 가 사용되지 않는 포트 번호를 향해 패킷을 보내기 때문이다. )
              ( 포트 번호는 33434번에서 시작하여 패킷을 보낼때마다 1씩 증가한 번호를 사용한다. )

        중간에 패킷 손실이 발생하면 * 가 표시된다.
        * 세 개의 시간이 모두 * 로 표시되기도 한다.
          이것은 몇가지 이유 때문에 발생한다.
          첫째, 해당 홉의 라우터가 ICMP TIME_EXCEEDED 메세지를 되돌려 주시 않을 수 있다.
          둘째, 몇몇 오래된 라우터는 TTL 값이 0임에도 불구하고 패킷을 계속 전달한다.
          셋째, ICMP 메시지의 우선 순위가 매우 낮아서 적절한 시간 내에 되돌아오지 않는 경우이다.
          넷째, 경로의 어떤 지점에서 ICMP 패킷이 막히는 것이다.

        [ 옵션 ]
            -n : 주소 찾기 끔
            -v : 더 많은 정보 표시

    b. 경로 성능
        경로 성능을 평가하기 위해 세 종류의 측정을 실시한다.
        - 대역폭 측정 : 네트워크의 하드웨어 능력을 측정
        - 처리 성능 측정 : 최대 어느 정도 사용 가능한 용량을 제공하는지 측정
        - 트래픽 측정 : 얼마나 많은 용량이 사용되는지 측정

        ㄱ. 대역폭 측정
         
   1) pathchar
                경로를 구성하는 각 링크의 대역폭을 알아낼 수 있다.

          
  2) bing
                지점간 대역폭을 측정한다.

        ㄴ. 처리 성능 측정
            처리 성능은 보통 많은 양의 데이터를 전송하고 시간을 재는 방법으로 측정된다.
            ttcp, netperf, iperf

            
1) ttcp
                가장 오래된 대용량 측정 도구이다.

        ㄷ. 트래픽 측정

            1) netstat -i
                송신 에러와 수신 에러의 비율은 매우 낮아야 한다.
                전체 패킷의 0.1% 보다 훨씬 더 적어야 한다.
                충돌비율은 트래픽의 10%보다 작아야 한다.
                충돌횟수가 높으면 네트워크에 지나치게 부하가 걸려 있다는 표시이며
                이 경우 네트워크 세그먼트 분리를 고려하는 것이 좋다.


    * MS의 tracert와 유닉스의 traceroute의 근본적인 차이는
      tracert는 ICMP를 사용하지만, traceroute는 UDP 패킷을 사용한다는 점이다.


====================

4. 성능 측정 도구

    성능을 측정하는 첫 단계는 트래픽을 측정하는 것이다.
    트래픽 측정 도구를 어느 곳에 사용하는지에 따라 대략 세 가지로 분류된다.
    - 호스트 감시 도구 : 한 기계로 들어가고 나가는 트래픽을 캡쳐할 수 있는 도구
    - 포인트 감시 도구 : 인터페이스를 무차별 모드로 전환하여 모든 패킷을 캡쳐하는 도구
    - 네트워크 감시 도구 : 다른 호스트를 검사하여 네트워크 트래픽의 전체적인 그림을 구성하여 주는 도구

    == 호스트 감시 도구와 포인트 감시 도구는 네트워크 트래픽에 거의 영향을 주지 않는다.


    a. 호스트 감시 도구
    b. 포인트 감시 도구
        순수한 포인트 감시 도구는 네트워크 스니퍼이다.
        tcp-reduce, tcptrace, xplot, ntop

        
ㄱ. ntop
        대화형 모드와 웹 모드를 제공한다.

    c. 네트워크 감시 도구
            
mrtg,  cricket

====================

5. 연결 프로토콜 시험

    프로토콜에 따라 특정 동작을 조사한다.

    a. 패킷 분사 도구
    b. 커스텀 패킷 생성기
        hping, nemesis, ipfilter

        ㄱ. hping
            포트 0번으로 TCP 패킷을 보낸다.
            이 포트는 거의 사용되지 않기 때문에 대부분의 시스템이 RESET 메시지로 응답한다.
            이런 식으로 hping은 ping 패킷을 가로막는 시스템으로부터도 응답을 받는다.
            한편 , 이 프로그램은 침입 탐지 시스템의 작동을 유발할 수도 있다.


Trackback 0 Comment 0