일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- sshpass
- mysql
- kitura
- postgresql
- STF_PortForwarding
- Jupyter
- ssh
- rethinkdb
- appium server
- postgres
- SWIFT
- openpyxl
- GoCD
- nmap
- appium
- create table
- nohup
- Materials
- insert
- Jupyter Notebook
- 실행권한
- ftp
- port forwarding
- centos
- ubuntu
- nGrinder
- STF
- PYTHON
- 28015
- perfect
- Today
- Total
don't stop believing
Linux에서 인터넷 대역폭(속도) 측정하기 - iperf 본문
Linux에서 인터넷 대역폭(속도)를 측정하기 의한 툴로 iperf 를 사용합니다.
Ubuntu에서 설치는 아래와 같이 합니다.
$ sudo apt-get install iperf
CentOS에는 아래와 같이 설치합니다.
$ sudo yum install epel-release $ sudo yum update $ sudo yum install iperf
iperf에서는 두 가지 역할이 있습니다. Server와 Client죠. iperf로 Server를 실행시키고 다른(대역폭을 측정하고 싶은 Client)쪽에서 packet을 보내 속도를 측정하게 됩니다. 따라서 iperf로 대역폭을 측정하고 싶다면 두 대의 서버(PC)가 필요합니다.
회사에 두 대의 PC를 설치했습니다. 사내 네트워크 대역폭을 측정한다는 가정입니다.
A는 Server 역할을 합니다. (Ubuntu, 10.10.1.168)
B는 Client 역할을 합니다. (CentOS, 10.10.0.78)
먼저 TCP의 대역폭 확인입니다.
A(Server)에서 iperf를 서버로 실행합니다.
$ iperf -s ------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 85.3 KByte (default) ------------------------------------------------------------
이제 B(Client)에서 서버로 대역폭 체크를 합니다.
$ iperf -c 10.10.1.168 ------------------------------------------------------------ Client connecting to 10.10.1.168, TCP port 5001 TCP window size: 85.0 KByte (default) ------------------------------------------------------------ [ 3] local 10.10.0.78 port 55962 connected with 10.10.1.168 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.1 sec 113 MBytes 94.6 Mbits/sec
두 서버간의 대역폭은 94.6 Mbits/sec로 나옵니다.
두 서버 사이에 100M 허브를 지나가고 있습니다. 그래서 실제 1G가 아닌 100M에 가까운 94.6이 나오고 있습니다.
실행 후 A(Server)에도 아래와 같이 나오고 있습니다.
------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 85.3 KByte (default) ------------------------------------------------------------ [ 4] local 10.10.1.168 port 5001 connected with 10.10.0.78 port 55962 [ ID] Interval Transfer Bandwidth [ 4] 0.0-10.2 sec 113 MBytes 93.6 Mbits/sec
이번에는 UDP의 대역폭을 확인해 보겠습니다.
동일하게 A(Server)에 아래와 같이 실행합니다. -u 옵션이 추가되었습니다.
$ iperf -s -u ------------------------------------------------------------ Server listening on UDP port 5001 Receiving 1470 byte datagrams UDP buffer size: 208 KByte (default) ------------------------------------------------------------
B(Client)에서도 -u 옵션을 추가해 대역폭 측정을 시작합니다.
$ iperf -c 10.10.1.168 -u ------------------------------------------------------------ Client connecting to 10.10.1.168, UDP port 5001 Sending 1470 byte datagrams, IPG target: 11215.21 us (kalman adjust) UDP buffer size: 208 KByte (default) ------------------------------------------------------------ [ 3] local 10.10.0.78 port 34548 connected with 10.10.1.168 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 1.25 MBytes 1.05 Mbits/sec [ 3] Sent 892 datagrams [ 3] Server Report: [ 3] 0.0-10.0 sec 1.25 MBytes 1.05 Mbits/sec 0.013 ms 0/ 892 (0%)
UDP 테스트에서는 대역폭이 1.05Mbits/sec로 나오고 있습니다. 이는 iperf가 udp에 대한 기본 bandwidth를 1Mbits/sec로 가지고 있기 때문입니다.
다시 B(Client)에서 -b 옵션에 1000m를 추가해 실행합니다.
$ iperf -c 10.10.1.168 -u -b 1000m ------------------------------------------------------------ Client connecting to 10.10.1.168, UDP port 5001 Sending 1470 byte datagrams, IPG target: 11.76 us (kalman adjust) UDP buffer size: 208 KByte (default) ------------------------------------------------------------ [ 3] local 10.10.0.78 port 41621 connected with 10.10.1.168 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 114 MBytes 95.3 Mbits/sec [ 3] Sent 81058 datagrams [ 3] Server Report: [ 3] 0.0-10.0 sec 114 MBytes 95.2 Mbits/sec 0.166 ms 0/81058 (0%)
이번에는 95.2 Mbits/sec로 나오네요. 역시 중간에 100M 허브때문에 1G 속도는 나오지 않고 있습니다.
이번에는 양방향으로 테스트해보겠습니다. (Bidirectional Tests)
A(Server)와 B(Client)의 역할을 바꿔 가며 테스트하게 됩니다.
한번은 A가 Server로 다시 한번은 B가 Server로 역할을 바꿔가며 테스트 합니다.
A(Server)에 tcp 측정과 같이 서버를 실행시킵니다.
$ iperf -s ------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 85.3 KByte (default) ------------------------------------------------------------
B(Client)에서 -d 옵션을 추가해 실행해 줍니다.
$ iperf -c 10.10.1.168 -d ------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 85.3 KByte (default) ------------------------------------------------------------ ------------------------------------------------------------ Client connecting to 10.10.1.168, TCP port 5001 TCP window size: 170 KByte (default) ------------------------------------------------------------ [ 5] local 10.10.0.78 port 55964 connected with 10.10.1.168 port 5001 [ 4] local 10.10.0.78 port 5001 connected with 10.10.1.168 port 51236 [ ID] Interval Transfer Bandwidth [ 5] 0.0-10.0 sec 110 MBytes 91.7 Mbits/sec [ 4] 0.0-10.0 sec 110 MBytes 91.5 Mbits/sec
-d 옵션을 추가해 실행하면 B가 먼저 서버 역할을 하고 A가 Client역할을 합니다. 측정이 끝나면 A가 서버 역할을 하고 B가 Client 역할을 합니다. 이렇게 역할을 바꿔가며 양방향의 대역폭을 체크 하게 됩니다.
A(Server)에서도 아래와 같이 출력됩니다.
------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 85.3 KByte (default) ------------------------------------------------------------ [ 4] local 10.10.1.168 port 5001 connected with 10.10.0.78 port 55964 ------------------------------------------------------------ Client connecting to 10.10.0.78, TCP port 5001 TCP window size: 144 KByte (default) ------------------------------------------------------------ [ 6] local 10.10.1.168 port 51236 connected with 10.10.0.78 port 5001 [ ID] Interval Transfer Bandwidth [ 6] 0.0-10.0 sec 110 MBytes 91.8 Mbits/sec [ 4] 0.0-10.1 sec 110 MBytes 90.8 Mbits/sec
양방향 모두 90Mbits/sec 이상으로 나오고 있습니다. 양쪽에서 측정한 데이터가 조금 다르기는 하네요.
몇 가지 옵션을 더 알아 봅시다.
대역폭 측정 시간을 (기본 10초에서) 30초로 변경해 진행합니다.
B(Client)에서 iperf -c 10.10.1.168로 측정하면 기본 10초간 데이터를 전송하며 대역폭을 측정하게 됩니다. 이걸 30초 동안 데이터를 전송해가며 측정하게 합니다.
옵션은 -t 이며, 뒤에 측정하려는 시간(초)를 추가합니다. 30초 동안 측정하려면 -t 30 입니다.
$ iperf -c 10.10.1.168 -t 30 ------------------------------------------------------------ Client connecting to 10.10.1.168, TCP port 5001 TCP window size: 85.0 KByte (default) ------------------------------------------------------------ [ 3] local 10.10.0.78 port 55968 connected with 10.10.1.168 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-30.0 sec 337 MBytes 94.1 Mbits/sec
출력된 데이터의 마지막 줄에 아래와 같이 30초 동안 측정된 데이터가 있습니다.
[ 3] 0.0-30.0 sec 337 MBytes 94.1 Mbits/sec
1초 간격으로 측정한 데이터를 출력합니다.
대역폭 측정을 시작하면 기본 10초 동안 아무런 출력이 없다 10초가 지난 뒤 결과 데이터를 출력합니다.
이걸 1초 간격으로 측정한 데이터를 출력하게 합니다. 옵션은 -i 이며, 뒤에 간격(초)를 추가합니다. 1초 간격이라면 -i 1 입니다.
$ iperf -c 10.10.1.168 -i 1 ------------------------------------------------------------ Client connecting to 10.10.1.168, TCP port 5001 TCP window size: 85.0 KByte (default) ------------------------------------------------------------ [ 3] local 10.10.0.78 port 55970 connected with 10.10.1.168 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0- 1.0 sec 11.8 MBytes 98.6 Mbits/sec [ 3] 1.0- 2.0 sec 11.2 MBytes 94.4 Mbits/sec [ 3] 2.0- 3.0 sec 11.1 MBytes 93.3 Mbits/sec [ 3] 3.0- 4.0 sec 11.2 MBytes 94.4 Mbits/sec [ 3] 4.0- 5.0 sec 11.1 MBytes 93.3 Mbits/sec [ 3] 5.0- 6.0 sec 11.2 MBytes 94.4 Mbits/sec [ 3] 6.0- 7.0 sec 11.1 MBytes 93.3 Mbits/sec [ 3] 7.0- 8.0 sec 11.2 MBytes 94.4 Mbits/sec [ 3] 8.0- 9.0 sec 11.1 MBytes 93.3 Mbits/sec [ 3] 9.0-10.0 sec 11.2 MBytes 94.4 Mbits/sec [ 3] 0.0-10.0 sec 112 MBytes 94.2 Mbits/sec
이번에는 클라이언트 포트를 여러개 열어 동시에 측정합니다.
기본적으로 클라이언트에서 하나를 열고 데이터를 전달하며 측정하는데, 여러개의 포트를 열고 동시에 측정하게 합니다.
옵션은 -P 이고 오픈하려는 포트 수를 추가합니다.
5개의 포트로 측정하려면 -P 5입니다.
$ iperf -c 10.10.1.168 -P 5 ------------------------------------------------------------ Client connecting to 10.10.1.168, TCP port 5001 TCP window size: 85.0 KByte (default) ------------------------------------------------------------ [ 7] local 10.10.0.78 port 56022 connected with 10.10.1.168 port 5001 [ 3] local 10.10.0.78 port 56014 connected with 10.10.1.168 port 5001 [ 6] local 10.10.0.78 port 56018 connected with 10.10.1.168 port 5001 [ 5] local 10.10.0.78 port 56016 connected with 10.10.1.168 port 5001 [ 4] local 10.10.0.78 port 56020 connected with 10.10.1.168 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 21.6 MBytes 18.1 Mbits/sec [ 5] 0.0-10.0 sec 27.5 MBytes 23.0 Mbits/sec [ 6] 0.0-10.1 sec 21.1 MBytes 17.6 Mbits/sec [ 7] 0.0-10.1 sec 18.0 MBytes 15.0 Mbits/sec [ 4] 0.0-10.1 sec 25.5 MBytes 21.2 Mbits/sec [SUM] 0.0-10.1 sec 114 MBytes 94.6 Mbits/sec
포트 5개로 동시에 데이터를 전송하기 때문에 5개로 대역폭이 나눠지게 됩니다.
5개의 대역폭을 합하면 전체 대역폭이 됩니다.
여기까지 Linux에서 iperf를 이용한 속도 체크 였습니다.
'Network' 카테고리의 다른 글
Traffic Control (tc) - loss, corrupt, duplicate (0) | 2019.01.11 |
---|---|
Traffic Control (tc) - delay (0) | 2019.01.10 |
Ubuntu를 WiFi (AP)로 만들어 봅니다. (두번째 도전) (0) | 2019.01.04 |
어느날 갑자기 169.254.XX.XX, DHCP 서버를 못찾을 때 (0) | 2018.12.05 |
Ubuntu를 WiFi (AP)로 만들어 봅니다. (첫번째 도전) (0) | 2018.11.29 |