안녕하세요. 달소입니다.
오늘은 사용하고 계신 내부/외부망 네트워크의 성능&대역폭 측정을 도와주는 iperf 를소개해드리고자합니다.
iPerf는 네트워크 환경에서 최대 대역폭을 측정하기 위한 툴 입니다. 크로스 플랫폼 지원을 통해 서로 다른 OS에서도 버전만 맞으면 대역폭을 측정할 수 있으며TCP,UDP, SCTP등을 지원합니다.
iPerf 기능
- TCP 및 SCTP
- 대역폭 측정
- MSS / MTU 크기 및 관찰 된 읽기 크기를보고합니다.
- 소켓 버퍼를 통한 TCP 창 크기 지원.
- UDP
- 클라이언트는 지정된 대역폭의 UDP 스트림을 생성 할 수 있습니다.
- 패킷 손실 측정
- 지연 지터 측정
- 멀티 캐스트 가능
- 크로스 플랫폼 : Windows, Linux, Android, MacOS X, FreeBSD, OpenBSD, NetBSD, VxWorks , Solaris, …
- 클라이언트와 서버는 여러 개의 동시 연결을 가질 수 있습니다 (-P 옵션).
- 서버는 단일 테스트 후 종료하지 않고 여러 연결을 처리합니다.
- 전송할 데이터 양이 아닌 지정된 시간 (-t 옵션) 동안 실행할 수 있습니다 (-n 또는 -k 옵션).
- 지정된 간격으로 주기적, 중간 대역폭, 지터 및 손실 보고서를 인쇄합니다 (-i 옵션).
- 서버를 데몬으로 실행 (-D 옵션)
- 대표 스트림을 사용하여 링크 레이어 압축이 달성 가능한 대역폭 (-F 옵션)에 미치는 영향을 테스트합니다.
- 서버는 단일 클라이언트를 동시에 수락 (iPerf3) 여러 클라이언트를 동시에 수락 (iPerf2)
- 신규 : TCP 느린 시작 무시 (-O 옵션).
- 신규 : UDP 및 (신규) TCP에 대한 대상 대역폭을 설정합니다 (-b 옵션).
- 신규 : IPv6 흐름 레이블 설정 (-L 옵션)
- 신규 : 혼잡 제어 알고리즘 설정 (-C 옵션)
- 신규 : TCP 대신 SCTP 사용 (–sctp 옵션)
- 신규 : JSON 형식으로 출력 (-J 옵션).
- 신규 : 디스크 읽기 테스트 (서버 : iperf3 -s / 클라이언트 : iperf3 -c testhost -i1 -F 파일 이름)
- 신규 : 디스크 쓰기 테스트 (서버 : iperf3 -s -F 파일 이름 / 클라이언트 : iperf3 -c testhost -i1)
다운로드 및 설치하기
https://iperf.fr/iperf-download.phpiPerf – Download iPerf3 and original iPerf pre-compiled binariesiPerf3 binaries for Windows, Linux, MacOS Xiperf.fr – Vivien GUEANT
윈도우는 위 링크로 들어가서 윈도우용 다운로드 링크로 설치해주시고
Cent OS 는 yum install epel-release 후 yum install iperf
Ubuntu 는 apt install iperf
위 명령어들로 설치가능합니다.
iPerf 사용하기
사용법은 아래와 같지만 자주사용하는것 위주로 작성해보겠습니다.
iPerf 는 서버 / 클라이언트 구조로 테스트가 가능합니다.
2대의 리눅스 서버로 테스트를 진행한다면
1대는 iperf -s 로 서버 역할
1대는 iperf -c [서버ip]로 클라이언트 역할을 해줍니다.
-p 옵션은 포트설정(기본포트는 5001)
-t 옵션은 테스트 타임 설정 등
Usage: iperf [-s|-c host] [options]
iperf [-h|–help] [-v|–version]
Client/Server:
-b, –bandwidth #[kmgKMG | pps] bandwidth to send at in bits/sec or packets per second
-e, –enhancedreports use enhanced reporting giving more tcp/udp and traffic information
-f, –format [kmgKMG] format to report: Kbits, Mbits, KBytes, MBytes
-i, –interval # seconds between periodic bandwidth reports
-l, –len #[kmKM] length of buffer in bytes to read or write (Defaults: TCP=128K, v4 UDP=1470, v6 UDP=1450)
-m, –print_mss print TCP maximum segment size (MTU – TCP/IP header)
-o, –output <filename> output the report or error message to this specified file
-p, –port # server port to listen on/connect to
-u, –udp use UDP rather than TCP
–udp-counters-64bit use 64 bit sequence numbers with UDP
-w, –window #[KM] TCP window size (socket buffer size)
-z, –realtime request realtime scheduler
-B, –bind <host>[:<port>][%<dev>] bind to <host>, ip addr (including multicast address) and optional port and device
-C, –compatibility for use with older versions does not sent extra msgs
-M, –mss # set TCP maximum segment size (MTU – 40 bytes)
-N, –nodelay set TCP no delay, disabling Nagle’s Algorithm
-S, –tos # set the socket’s IP_TOS (byte) field
Server specific:
-s, –server run in server mode
-t, –time # time in seconds to listen for new connections as well as to receive traffic (default not set)
–udp-histogram #,# enable UDP latency histogram(s) with bin width and count, e.g. 1,1000=1(ms),1000(bins)
-B, –bind <ip>[%<dev>] bind to multicast address and optional device
-H, –ssm-host <ip> set the SSM source, use with -B for (S,G)
-U, –single_udp run in single threaded UDP mode
-D, –daemon run the server as a daemon
-V, –ipv6_domain Enable IPv6 reception by setting the domain and socket to AF_INET6 (Can receive on both IPv4 and IPv6)
Client specific:
-c, –client <host> run in client mode, connecting to <host>
-d, –dualtest Do a bidirectional test simultaneously
–ipg set the the interpacket gap (milliseconds) for packets within an isochronous frame
–isochronous <frames-per-second>:<mean>,<stddev> send traffic in bursts (frames – emulate video traffic)
-n, –num #[kmgKMG] number of bytes to transmit (instead of -t)
-r, –tradeoff Do a bidirectional test individually
-t, –time # time in seconds to transmit for (default 10 secs)
-B, –bind [<ip> | <ip:port>] bind ip (and optional port) from which to source traffic
-F, –fileinput <name> input the data to be transmitted from a file
-I, –stdin input the data to be transmitted from stdin
-L, –listenport # port to receive bidirectional tests back on
-P, –parallel # number of parallel client threads to run
-R, –reverse reverse the test (client receives, server sends)
-T, –ttl # time-to-live, for multicast (default 1)
-V, –ipv6_domain Set the domain to IPv6 (send packets over IPv6)
-X, –peer-detect perform server version detection and version exchange
-Z, –linux-congestion <algo> set TCP congestion control algorithm (Linux only)
Miscellaneous:
-x, –reportexclude [CDMSV] exclude C(connection) D(data) M(multicast) S(settings) V(server) reports
-y, –reportstyle C report as a Comma-Separated Values
-h, –help print this message and quit
-v, –version print version information and quit
[kmgKMG] Indicates options that support a k,m,g,K,M or G suffix
Lowercase format characters are 10^3 based and uppercase are 2^n based
(e.g. 1k = 1000, 1K = 1024, 1m = 1,000,000 and 1M = 1,048,576)
The TCP window size option can be set by the environment variable
TCP_WINDOW_SIZE. Most other options can be set by an environment variable
IPERF_<long option name>, such as IPERF_BANDWIDTH.
Source at <http://sourceforge.net/projects/iperf2/>
Report bugs to <iperf-users@lists.sourceforge.net>