두 상자 사이의 네트워크 속도를 어떻게 테스트합니까?


168

집에 기가비트 네트워크가 설치되어 있고 우분투 기반 상자가 몇 개 있습니다. 완전한 호기심으로 두 상자 사이의 속도를 확인하고 싶습니다. 나는 속도 나 그 밖의 어떤 문제도 가지고 있지 않다. 정말 궁금한 것은 나에게있어서 괴짜 일 뿐이다. 또한 개선의 여지가 있거나 잘못 구성된 것이 있는지 결과를 알려줍니다.

그렇다면 우분투 박스 간의 네트워크 속도를 어떻게 올바르게 테스트합니까?

답변:


272

사용 iperf합니다. 한 쪽 끝에서 서버 모드로 실행하고 네트워크의 다른쪽에있는 다른 컴퓨터에서 연결한다는 점에서 클라이언트 서버 배열입니다.

두 머신 중 하나가 실행됩니다.

sudo apt-get install iperf

iperf머신 중 하나 에서 서버를 시작합니다 :

iperf -s

그런 다음 다른 컴퓨터에서 iperf클라이언트로 연결하도록 지시하십시오.

iperf -c <address of other computer>

클라이언트 시스템에는 다음과 같은 내용이 표시됩니다.

oli@bert:~$ iperf -c tim
------------------------------------------------------------
Client connecting to tim, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[  3] local 192.168.0.4 port 37248 connected with 192.168.0.5 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  1.04 GBytes    893 Mbits/sec

물론 서버 시스템에서 방화벽을 실행하는 경우 포트 5001에서 연결을 허용하거나 -p플래그를 사용하여 포트를 변경해야합니다 .


당신이 그렇게 nc기울어지면 평범한 오래된 것 (netcat) 과 거의 같은 일을 할 수 있습니다 . 서버 머신에서 :

nc -vvlnp 12345 >/dev/null

그리고 클라이언트 캔 파이프를 통해 제로의 기가 바이트 dd오버 nc터널.

dd if=/dev/zero bs=1M count=1K | nc -vvn 10.10.0.2 12345

데모로 :

$ dd if=/dev/zero bs=1M count=1K | nc -vvn 10.10.0.2 12345
Connection to 10.10.0.2 12345 port [tcp/*] succeeded!
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 9.11995 s, 118 MB/s

타이밍이 주어 dd지지만 파이프가 가져가는 속도만큼만 출력 할 수 있으므로 충분히 정확해야합니다. 마음에 들지 않으면 time전화로 모든 것을 마무리 할 수 있습니다.

결과는 메가 바이트 단위 이므로 초당 초당 메가 비트 를 얻으려면 8을 곱하십시오 . 위의 데모는 944mbps에서 실행 중입니다.


당신은 내 질문에 대한 모든 대답을 가지고 있습니다! 내 네트워크는 분명히 설정되지 않았으며 714 MBytes 및 598 Mbits / sec의 대역폭으로 만 전송됩니다. Dunno는 미래에 그것을 조사 할 것입니다. 감사.
Jacob Schoen

공평하게 다른 상자는 단 하나의 스위치 (및 20 미터의 cat5e) 떨어져 있으며 혼잡이 없습니다. 600mbps는 여전히 빠릅니다.
Oli

이것은 훌륭하지만 서버에 대한 루트 액세스 권한이 없습니다.
Geoff

-P 10을 시도하십시오. 단일 연결의 결과는 jschoens와 유사하지만 3 개 이상의 병렬 연결의 경우 일관되게 920Mbps를 푸시합니다.
wujj123456

1
@CMCDragonkai 아마도 당신이 아닌 리소스를 테스트해서는 안됩니다. 대역폭이 많은 테스트는 단기 안정성에 영향을 줄 수 있습니다.
Oli

22

iperf에 대한 Oli의 권장 사항과 동일합니다. 여러 포인트를 추가하고 싶습니다.

  1. 여러 플랫폼에서 테스트 할 수있는 Windows 클라이언트도 있습니다.
  2. -t <seconds>테스트 길이를 변경합니다. 동시 연결 수를 변경합니다. 예를 들어 30 초 동안 10 개의 연결을 함께 테스트하고 10 개의 개별 연결 속도와 함께 집계 된 결과를 제공합니다.-P <n>iperf -c [target IP] -P 10 -t 30
  3. 당신은 sudo가 필요하지 않습니다. http://iperf.fr/ 에서 바이너리를 다운로드 할 수 있습니다 . 작동해야합니다. 로 다운로드하고로 wget실행 가능하게 chmod하면 바이너리를 직접 실행할 수 있습니다. 완벽하게 작동합니다.

기본 설정을 사용하면 단일 연결 속도가 약간 변동한다는 것을 알았습니다. 그러나 3 + 병렬 연결을 사용하면 결과가 기가 바이트 스위치에서보다 일관됩니다. (일관되게 @ 910-920Mbps)


8

이 스크립트 를 사용 하면 컴퓨터와 일부 원격 호스트 간의 연결 속도를 쉽게 테스트 할 수 있습니다. 사용 예 :

$ scp-speed-test.sh user@remote_host 80000
  • user@remote_host 대상 호스트입니다 (이 호스트에 대한 ssh 액세스 권한이 있어야 함).
  • 80000테스트 파일의 대략적인 크기 (kbs)는 원격 호스트에 수신됩니다. 필수 주장은 아닙니다.

4
이것은 SCP 응용 프로그램의 속도를 테스트하는 것으로 보입니다.이 속도는 하위 레이어의 테스트보다 낮습니다. 예를 들어, nc는 L4를 사용합니다. 물론 이것은 SCP의 속도에 더 관심이 있다면 좋습니다.
sudo

1
문제가 있음 :이 스크립트는 파일을 디스크에 쓰고 읽습니다. 램보다 속도가 느리므로 인공적인 속도 저하가 될 수 있습니다. 압축 된 경우 인위적으로 빠른 속도를 내기 위해 0 만 보냅니다. 당신이 의사 난수 데이터를 원하는 경우, 사용하지 않는 /dev/random(그것을 차단할 수 있습니다) 또는urandom 대신 dm-crypt로를 사용하여, 그들도 매우 느릴 수 있습니다 (링크 댓글 제안 ()으로 cryptsetup의 자주 묻는 질문을 참조하십시오 어떻게 암호 -와 장치를 닦아 수 2.19 grade randomness? ) 램에 파일이있을 수 있습니다.
Xen2050

4

이더넷 LAN을 낮은 레벨에서 테스트하려면 무료 Linux CLI 이더넷 테스트 도구 인 Etherate를 사용할 수 있습니다.

https://github.com/jwbensley/Etherate

iPerf (매우 훌륭합니다!)와 같은 도구가 IP 및 TCP 또는 UDP를 통해 작동 할 때 믹스에 버립니다. 이더넷 / OSI 계층 2를 통해 직접 테스트합니다.


2

아래 명령에는 추가 패키지가 필요하지 않고 SSH 액세스가 필요합니다.

ssh username@myserver.example.com 'dd if=/dev/zero bs=1GB count=3 2>/dev/null' | dd of=/dev/null status=progress

출력 예 :

2992238080 bytes (3.0 GB) copied, 27.010250 s, 111 MB/s
5859375+0 records in
5859375+0 records out
3000000000 bytes (3.0 GB) copied, 27.1943 s, 110 MB/s

이 명령은 원격 서버의 stdout에 0으로 가득 찬 3GB (1000 ^ 3 바이트) 더미 파일을 인쇄하여 SSH를 통해 로컬 서버의 stdout에 인쇄 한 다음 로컬로 파이프 /dev/null(즉 무시)합니다. 테스트를 진행하는 동안 진행 상황을 확인할 수도 있습니다.

확실히 다른 도구만큼 정확하지는 않지만 제 사용 사례는 추가 패키지를 설치하지 않고 네트워크 속도가 문제인지 테스트하려는 백업 프로세스를 디버깅하는 것이 었습니다.


1

두 호스트간에 대역폭 벤치마킹을위한 다른 멋진 명령 줄 도구도 있습니다.

nuttcp

server$ nuttcp -S
client$ nuttcp -v -v -i1 1.1.1.1 ;# 1.1.1.1 is server's address

네핌

 server$ nepim
 client$ nepim -d -c 1.1.1.1 ;# 1.1.1.1 is server's address

고벤

 server$ goben
 client$ goben -hosts 1.1.1.1 ;# 1.1.1.1 is server's address

2
이것들은 iperf와 어떻게 다른가? 그들은 똑같이 작동합니까, 그들은 무엇을합니까? nuttcp는 데비안에 있으며 명백히 "nuttcp는 nttcp를 기반으로합니다. 이것은 원래 ttcp의 Silicon Graphics (SGI)에서 개선 된 것으로 1984 년 12 월 이전에 BRL에서 Mike Muuss에 의해 작성되었습니다. UC Berkeley와 BBN의 TCP 스택은 DARPA가 첫 번째 BSD Unix 릴리스에 배치 할 버전을 결정할 수 있도록 도와줍니다. "
Xen2050

0

내가 가장 좋은 대답에 내 의견에서 지적했듯이,이 솔루션은 충분한 클라이언트 원인이 좋지 않아 / 서버는되지 최적화 ...에 속도의 모든 비트를

내 해결책 :

램 디스크를 양쪽에 만드십시오 (따라서 저장 속도에 제한을받지 않으며 tmpfs가 아닌 ramfs로 만들 것을 제안합니다. 따라서 스왑에 들어 가지 않을 것입니다 ... 512M 이상의 여유 메모리를 남기지 않도록주의하십시오) 시스템의 경우 기가 이더넷을 사용하는 경우 SSD가 속도가 느려질 수 있습니다) 서버에 아파치를 설치 한 다음 램 디스크에 대한 링크를 만들고 램 디스크에 큰 파일을 거의 만들지 마십시오 (100M-1G, dd를 / dev / random에서 가져 오거나 손에 든다면 복사하십시오. 클라이언트 측으로 가서 고급 다운로드 프로그램으로 해당 측의 램 디스크에도 다운로드하십시오. lftp

잘, iperf와 9.5M / s netcat에 의해보고 된 75mbps와의 차이는 크다

내 솔루션 으로 11.18M / s 까지 :

1591129421 bytes transferred in 136 seconds (11.18M/s)

9.5M * 8 = 76mbps; 꽤 75 Mbps의 근처
fusca를 소프트웨어

-4

첫 번째 상자에 컴퓨터를 쉽게 연결하고 다른 상자를 첫 번째 상자에 연결하십시오. 그런 다음 컴퓨터에서 첫 번째 상자를 핑 (Ping)하여 결과를 저장하고 다른 상자를 핑 (Ping)하고 빼기를 수행합니다.


10
이는 속도의 일부에 불과한 네트워크 대기 시간을 보여줍니다. 예를 들어, 휴대폰의 3G 연결은 대기 시간 (100-300ms)이 크지 만 여전히 5mbps의 처리량을 관리 할 수 ​​있습니다.
Oli

그가 속도를 요구했지만 처리량을 원한다면 내 잘못이 아닙니다.
Nyamiou The Galeanthrope

1
대기 시간은 속도가 아니라 반응 시간입니다.
wullxz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.