Bagaimana Anda menguji kecepatan jaringan antara dua kotak?

168

Saya memiliki jaringan gigabit di rumah saya dan beberapa kotak berbasis Ubuntu. Karena penasaran, saya ingin memeriksa kecepatan antara dua kotak. Saya tidak memiliki masalah dengan kecepatan atau apa pun, hanya geek dalam diri saya yang penasaran. Plus, mungkin hasilnya akan memberi tahu saya jika ada ruang untuk perbaikan, atau saya memiliki sesuatu yang salah dikonfigurasi.

Jadi, bagaimana Anda menguji kecepatan jaringan di antara kotak-kotak Ubuntu dengan benar?

Jacob Schoen
sumber

Jawaban:

272

Saya menggunakan iperf. Ini adalah pengaturan server klien di mana Anda menjalankannya dalam mode server di satu ujung dan menyambungkannya dari komputer lain di sisi lain jaringan.

Satu mesin dijalankan:

sudo apt-get install iperf

Kami akan memulai iperfserver di salah satu mesin:

iperf -s

Dan kemudian di komputer lain, katakan iperfuntuk terhubung sebagai klien:

iperf -c <address of other computer>

Di mesin klien, Anda akan melihat sesuatu seperti ini:

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

Tentu saja, jika Anda menjalankan firewall pada mesin server, Anda harus mengizinkan koneksi pada port 5001 atau mengubah port dengan -pflag.


Anda dapat melakukan hal yang hampir sama dengan yang lama biasa nc(netcat) jika Anda cenderung demikian. Di mesin server:

nc -vvlnp 12345 >/dev/null

Dan klien kaleng pipa gigabyte nol melalui ddatas ncterowongan.

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

Sebagai demod:

$ 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

Pengaturan waktu di sana diberikan oleh ddtetapi harus cukup akurat karena hanya dapat output secepat pipa akan mengambilnya. Jika Anda tidak puas dengan itu, Anda bisa menyelesaikan semuanya dengan timemenelepon.

Ingatlah bahwa hasilnya adalah dalam mega byte sehingga kalikan dengan 8 untuk mendapatkan kecepatan mega bit per detik. Demo di atas berjalan pada 944mbps.

Oli
sumber
Man Anda memiliki semua jawaban untuk pertanyaan saya! Jaringan saya tampaknya tidak diatur dan Anda hanya mentransfer pada 714 MBytes dan bandwidth 598 Mbits / detik. Entah mungkin melihat itu di masa depan. Terima kasih.
Jacob Schoen
Dalam keadilan kotak lain hanya berjarak satu sakelar (dan 20 meter dari cat5e) dan tidak ada kemacetan. 600mbps masih cukup cepat.
Oli
Ini bagus, tetapi saya tidak memiliki akses root ke server.
Geoff
Coba-P 10. Hasil saya dengan koneksi tunggal mirip dengan jschoens, tetapi dengan 3+ koneksi paralel, secara konsisten mendorong 920Mbps.
wujj123456
1
@ CMCDragonkai Anda mungkin tidak boleh menguji sumber daya yang bukan milik Anda. Tes berat bandwidth dapat berdampak pada stabilitas jangka pendek.
Oli
22

Sama seperti rekomendasi Oli untuk iperf. Hanya ingin menambahkan beberapa poin:

  1. Ada juga klien windows yang memungkinkan pengujian lintas platform.
  2. -t <seconds>mengubah panjang tes. mengubah jumlah koneksi simultan. Sebagai contoh, menguji 10 koneksi bersama selama 30 detik dan memberikan hasil agregat bersama dengan 10 kecepatan koneksi terpisah.-P <n>iperf -c [target IP] -P 10 -t 30
  3. Anda tidak perlu sudo. Anda cukup mengunduh biner di http://iperf.fr/ . Itu harus bekerja. Unduh dengan wget, buatlah itu dapat dieksekusi chmod, dan Anda dapat langsung menjalankan biner. Ini bekerja dengan sempurna.

Saya menemukan bahwa, menggunakan pengaturan default, kecepatan koneksi tunggal berfluktuasi sedikit. Namun, dengan 3+ koneksi paralel, hasilnya lebih konsisten pada sakelar gigabyte saya. (secara konsisten @ 910-920Mbps)

wujj123456
sumber
8

Dengan menggunakan skrip ini, Anda dapat dengan mudah menguji kecepatan koneksi antara mesin Anda dan beberapa host jarak jauh. Contoh menggunakan:

$ scp-speed-test.sh user@remote_host 80000
  • user@remote_host adalah host tujuan Anda (Anda harus memiliki akses ssh ke host ini)
  • 80000adalah perkiraan ukuran file uji (dalam kbs), yang akan diterima ke host jarak jauh. Itu bukan argumen wajib.
VeLKerr
sumber
4
Ini tampaknya untuk menguji kecepatan aplikasi SCP, yang akan lebih rendah daripada tes di lapisan bawah. Misalnya, nc menggunakan L4. Tentu saja, ini sangat bagus jika Anda lebih peduli dengan kecepatan SCP.
sudo
1
Mengalami masalah: Skrip ini menulis & membaca file ke disk - itu lebih lambat dari ram, sehingga bisa menjadi perlambatan buatan. Juga hanya mengirim nol, kalau-kalau mereka dikompresi itu adalah speedup buatan besar. Jika Anda menginginkan data pseudorandom, jangan gunakan /dev/random(itu dapat memblokir) atauurandom (tautkan komentar yang menyarankan) mereka juga bisa sangat lambat, alih-alih gunakan dm-crypt (Lihat cryptsetup's FAQ 2.19 Bagaimana cara menghapus perangkat dengan crypto- kelas keacakan? ) mungkin dengan file dalam ram.
Xen2050
4

Jika Anda ingin menguji Ethernet LAN Anda pada level yang lebih rendah, Anda dapat menggunakan Etherate yang merupakan alat pengujian Linux CLI Ethernet gratis:

https://github.com/jwbensley/Etherate

Melemparnya ke dalam campuran sebagai alat seperti iPerf (yang sangat bagus!) Beroperasi melalui IP dan TCP atau UDP. Tes Etherate langsung melalui Ethernet / OSI layer 2.

jwbensley
sumber
2

Perintah di bawah ini tidak memerlukan paket tambahan tetapi akses SSH:

ssh [email protected] 'dd if=/dev/zero bs=1GB count=3 2>/dev/null' | dd of=/dev/null status=progress

Contoh output:

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

Perintah ini mencetak file dummy 3GB (1000 ^ 3 byte) yang penuh dengan nol untuk stdout pada server jarak jauh, yang dicetak (ditransfer) melalui SSH ke stdout dari server lokal dan kemudian disalurkan secara lokal ke /dev/null(yaitu diabaikan). Anda bahkan dapat melihat progres tes saat menjalankannya.

Tentu saja tidak setepat alat lain tetapi kasus penggunaan saya adalah untuk debug proses cadangan di mana saya ingin menguji apakah kecepatan jaringan adalah masalah tanpa menginstal paket tambahan.

bm-bergmotte
sumber
1

Ada juga beberapa alat baris perintah yang bagus untuk pembandingan bandwidth antara dua host:

nuttcp

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

nepim

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

Goben

 server$ goben
 client$ goben -hosts 1.1.1.1 ;# 1.1.1.1 is server's address
Everton
sumber
2
Bagaimana ini berbeda satu sama lain, dan dari iperf? Apakah mereka bekerja sama, apa yang mereka lakukan? nuttcp ada di Debian & tampaknya "nuttcp didasarkan pada nttcp, yang pada gilirannya merupakan peningkatan oleh seseorang di Silicon Graphics (SGI) pada ttcp asli, yang ditulis oleh Mike Muuss di BRL sekitar Desember Desember, untuk membandingkan kinerja Tumpukan TCP oleh UC Berkeley dan BBN untuk membantu DARPA memutuskan versi mana yang akan ditempatkan dalam rilis BSD Unix pertama. "
Xen2050
0

seperti yang saya tunjukkan dalam komentar saya di jawaban terbaik, solusi itu tidak cukup baik karena klien / server tidak dioptimalkan untuk ... menekan setiap bit kecepatan

solusi saya:

membuat ramdisk di kedua sisi (oleh karena itu, Anda tidak dibatasi oleh kecepatan penyimpanan dan saya sarankan Anda membuatnya dengan ramfs bukan tmpfs, sehingga mereka tidak akan bertukar ... berhati-hatilah untuk tidak meninggalkan setidaknya memori bebas 512M untuk sistem, ini DIBUTUHKAN jika Anda memiliki giga ethernet, pada kecepatan itu bahkan SSD dapat memperlambat segalanya) instal apache di server, kemudian buat tautan ke ramdisk, buat beberapa file besar di ramdisk (100M-1G, Anda dapat membuatnya dengan dd dari / dev / random atau salin jika Anda punya beberapa) kemudian pergi ke sisi klien dan mengunduhnya (juga di ramdisk sisi itu) dengan program unduhan lanjutan, saya menggunakan lftp

oh well, perbedaannya besar, dari 75mbps dilaporkan oleh iperf dan 9.5M / s netcat

ke 11.18M / s dengan solusi saya:

1591129421 bytes transferred in 136 seconds (11.18M/s)
Sang penyihir
sumber
1
9,5M * 8 = 76 mbps; itu cukup dekat dengan 75 mbps
Fusca Software
-4

Mudah pasang komputer Anda di kotak pertama, tancapkan kotak lain ke kotak pertama. Kemudian dari komputer Anda ping kotak pertama simpan hasilnya, ping kotak lain dan lakukan substraksi.

Nyamiou The Galeanthrope
sumber
10
Itu menunjukkan latensi jaringan yang hanya satu bagian dari kecepatan. Misalnya koneksi 3G ponsel saya memiliki latensi yang sangat besar (100-300 ms) tetapi masih dapat mengatur throughput 5mbps.
Oli
Bukan salah saya jika dia bertanya kecepatan tetapi ingin throughput.
Nyamiou The Galeanthrope
1
Latensi adalah waktu reaksi, bukan kecepatan.
wullxz